x86: drop Vex128 and Vex256
[deliverable/binutils-gdb.git] / opcodes / i386-dis.c
CommitLineData
252b5132 1/* Print i386 instructions for GDB, the GNU debugger.
b3adc24a 2 Copyright (C) 1988-2020 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"
5b872f7d 40#include "safe-ctype.h"
252b5132
RH
41
42#include <setjmp.h>
43
26ca5450
AJ
44static int print_insn (bfd_vma, disassemble_info *);
45static void dofloat (int);
46static void OP_ST (int, int);
47static void OP_STi (int, int);
48static int putop (const char *, int);
49static void oappend (const char *);
50static void append_seg (void);
51static void OP_indirE (int, int);
52static void print_operand_value (char *, int, bfd_vma);
c0f3af97 53static void OP_E_register (int, int);
c1e679ec 54static void OP_E_memory (int, int);
5d669648 55static void print_displacement (char *, bfd_vma);
26ca5450
AJ
56static void OP_E (int, int);
57static void OP_G (int, int);
58static bfd_vma get64 (void);
59static bfd_signed_vma get32 (void);
60static bfd_signed_vma get32s (void);
61static int get16 (void);
62static void set_op (bfd_vma, int);
b844680a 63static void OP_Skip_MODRM (int, int);
26ca5450
AJ
64static void OP_REG (int, int);
65static void OP_IMREG (int, int);
66static void OP_I (int, int);
67static void OP_I64 (int, int);
68static void OP_sI (int, int);
69static void OP_J (int, int);
70static void OP_SEG (int, int);
71static void OP_DIR (int, int);
72static void OP_OFF (int, int);
73static void OP_OFF64 (int, int);
74static void ptr_reg (int, int);
75static void OP_ESreg (int, int);
76static void OP_DSreg (int, int);
77static void OP_C (int, int);
78static void OP_D (int, int);
79static void OP_T (int, int);
6f74c397 80static void OP_R (int, int);
26ca5450
AJ
81static void OP_MMX (int, int);
82static void OP_XMM (int, int);
83static void OP_EM (int, int);
84static void OP_EX (int, int);
4d9567e0
MM
85static void OP_EMC (int,int);
86static void OP_MXC (int,int);
26ca5450
AJ
87static void OP_MS (int, int);
88static void OP_XS (int, int);
cc0ec051 89static void OP_M (int, int);
c0f3af97 90static void OP_VEX (int, int);
e6123d0c 91static void OP_VexW (int, int);
c0f3af97 92static void OP_EX_Vex (int, int);
c0f3af97 93static void OP_XMM_Vex (int, int);
43234a1e 94static void OP_Rounding (int, int);
c0f3af97 95static void OP_REG_VexI4 (int, int);
93abb146 96static void OP_VexI4 (int, int);
c0f3af97 97static void PCLMUL_Fixup (int, int);
43234a1e 98static void VPCMP_Fixup (int, int);
be92cb14 99static void VPCOM_Fixup (int, int);
cc0ec051 100static void OP_0f07 (int, int);
b844680a
L
101static void OP_Monitor (int, int);
102static void OP_Mwait (int, int);
46e883c5
L
103static void NOP_Fixup1 (int, int);
104static void NOP_Fixup2 (int, int);
26ca5450 105static void OP_3DNowSuffix (int, int);
ad19981d 106static void CMP_Fixup (int, int);
26ca5450 107static void BadOp (void);
35c52694 108static void REP_Fixup (int, int);
d835a58b 109static void SEP_Fixup (int, int);
7e8b059b 110static void BND_Fixup (int, int);
04ef582a 111static void NOTRACK_Fixup (int, int);
42164a71
L
112static void HLE_Fixup1 (int, int);
113static void HLE_Fixup2 (int, int);
114static void HLE_Fixup3 (int, int);
f5804c90 115static void CMPXCHG8B_Fixup (int, int);
42903f7f 116static void XMM_Fixup (int, int);
eacc9c89 117static void FXSAVE_Fixup (int, int);
c1e679ec 118
bc31405e 119static void MOVSXD_Fixup (int, int);
252b5132 120
43234a1e
L
121static void OP_Mask (int, int);
122
6608db57 123struct dis_private {
252b5132
RH
124 /* Points to first byte not fetched. */
125 bfd_byte *max_fetched;
0b1cf022 126 bfd_byte the_buffer[MAX_MNEM_SIZE];
252b5132 127 bfd_vma insn_start;
e396998b 128 int orig_sizeflag;
8df14d78 129 OPCODES_SIGJMP_BUF bailout;
252b5132
RH
130};
131
cb712a9e
L
132enum address_mode
133{
134 mode_16bit,
135 mode_32bit,
136 mode_64bit
137};
138
139enum address_mode address_mode;
52b15da3 140
5076851f
ILT
141/* Flags for the prefixes for the current instruction. See below. */
142static int prefixes;
143
52b15da3
JH
144/* REX prefix the current instruction. See below. */
145static int rex;
146/* Bits of REX we've already used. */
147static int rex_used;
52b15da3
JH
148/* Mark parts used in the REX prefix. When we are testing for
149 empty prefix (for 8bit register REX extension), just mask it
150 out. Otherwise test for REX bit is excuse for existence of REX
151 only in case value is nonzero. */
152#define USED_REX(value) \
153 { \
154 if (value) \
161a04f6
L
155 { \
156 if ((rex & value)) \
157 rex_used |= (value) | REX_OPCODE; \
158 } \
52b15da3 159 else \
161a04f6 160 rex_used |= REX_OPCODE; \
52b15da3
JH
161 }
162
7d421014
ILT
163/* Flags for prefixes which we somehow handled when printing the
164 current instruction. */
165static int used_prefixes;
166
5076851f
ILT
167/* Flags stored in PREFIXES. */
168#define PREFIX_REPZ 1
169#define PREFIX_REPNZ 2
170#define PREFIX_LOCK 4
171#define PREFIX_CS 8
172#define PREFIX_SS 0x10
173#define PREFIX_DS 0x20
174#define PREFIX_ES 0x40
175#define PREFIX_FS 0x80
176#define PREFIX_GS 0x100
177#define PREFIX_DATA 0x200
178#define PREFIX_ADDR 0x400
179#define PREFIX_FWAIT 0x800
180
252b5132
RH
181/* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
182 to ADDR (exclusive) are valid. Returns 1 for success, longjmps
183 on error. */
184#define FETCH_DATA(info, addr) \
6608db57 185 ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
252b5132
RH
186 ? 1 : fetch_data ((info), (addr)))
187
188static int
26ca5450 189fetch_data (struct disassemble_info *info, bfd_byte *addr)
252b5132
RH
190{
191 int status;
6608db57 192 struct dis_private *priv = (struct dis_private *) info->private_data;
252b5132
RH
193 bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
194
0b1cf022 195 if (addr <= priv->the_buffer + MAX_MNEM_SIZE)
272c9217
JB
196 status = (*info->read_memory_func) (start,
197 priv->max_fetched,
198 addr - priv->max_fetched,
199 info);
200 else
201 status = -1;
252b5132
RH
202 if (status != 0)
203 {
7d421014 204 /* If we did manage to read at least one byte, then
db6eb5be
AM
205 print_insn_i386 will do something sensible. Otherwise, print
206 an error. We do that here because this is where we know
207 STATUS. */
7d421014 208 if (priv->max_fetched == priv->the_buffer)
5076851f 209 (*info->memory_error_func) (status, start, info);
8df14d78 210 OPCODES_SIGLONGJMP (priv->bailout, 1);
252b5132
RH
211 }
212 else
213 priv->max_fetched = addr;
214 return 1;
215}
216
bf890a93 217/* Possible values for prefix requirement. */
507bd325
L
218#define PREFIX_IGNORED_SHIFT 16
219#define PREFIX_IGNORED_REPZ (PREFIX_REPZ << PREFIX_IGNORED_SHIFT)
220#define PREFIX_IGNORED_REPNZ (PREFIX_REPNZ << PREFIX_IGNORED_SHIFT)
221#define PREFIX_IGNORED_DATA (PREFIX_DATA << PREFIX_IGNORED_SHIFT)
222#define PREFIX_IGNORED_ADDR (PREFIX_ADDR << PREFIX_IGNORED_SHIFT)
223#define PREFIX_IGNORED_LOCK (PREFIX_LOCK << PREFIX_IGNORED_SHIFT)
224
225/* Opcode prefixes. */
226#define PREFIX_OPCODE (PREFIX_REPZ \
227 | PREFIX_REPNZ \
228 | PREFIX_DATA)
229
230/* Prefixes ignored. */
231#define PREFIX_IGNORED (PREFIX_IGNORED_REPZ \
232 | PREFIX_IGNORED_REPNZ \
233 | PREFIX_IGNORED_DATA)
bf890a93 234
ce518a5f 235#define XX { NULL, 0 }
507bd325 236#define Bad_Opcode NULL, { { NULL, 0 } }, 0
ce518a5f
L
237
238#define Eb { OP_E, b_mode }
7e8b059b 239#define Ebnd { OP_E, bnd_mode }
b6169b20 240#define EbS { OP_E, b_swap_mode }
9f79e886 241#define EbndS { OP_E, bnd_swap_mode }
ce518a5f 242#define Ev { OP_E, v_mode }
de89d0a3 243#define Eva { OP_E, va_mode }
7e8b059b 244#define Ev_bnd { OP_E, v_bnd_mode }
b6169b20 245#define EvS { OP_E, v_swap_mode }
ce518a5f
L
246#define Ed { OP_E, d_mode }
247#define Edq { OP_E, dq_mode }
248#define Edqw { OP_E, dqw_mode }
42903f7f 249#define Edqb { OP_E, dqb_mode }
1ba585e8
IT
250#define Edb { OP_E, db_mode }
251#define Edw { OP_E, dw_mode }
42903f7f 252#define Edqd { OP_E, dqd_mode }
09335d05 253#define Eq { OP_E, q_mode }
07f5af7d 254#define indirEv { OP_indirE, indir_v_mode }
ce518a5f
L
255#define indirEp { OP_indirE, f_mode }
256#define stackEv { OP_E, stack_v_mode }
257#define Em { OP_E, m_mode }
258#define Ew { OP_E, w_mode }
259#define M { OP_M, 0 } /* lea, lgdt, etc. */
34b772a6 260#define Ma { OP_M, a_mode }
b844680a 261#define Mb { OP_M, b_mode }
d9a5e5e5 262#define Md { OP_M, d_mode }
f1f8f695 263#define Mo { OP_M, o_mode }
ce518a5f
L
264#define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for LDS, LES etc */
265#define Mq { OP_M, q_mode }
9ab00b61 266#define Mv { OP_M, v_mode }
d276ec69 267#define Mv_bnd { OP_M, v_bndmk_mode }
4ee52178 268#define Mx { OP_M, x_mode }
c0f3af97 269#define Mxmm { OP_M, xmm_mode }
ce518a5f 270#define Gb { OP_G, b_mode }
7e8b059b 271#define Gbnd { OP_G, bnd_mode }
ce518a5f
L
272#define Gv { OP_G, v_mode }
273#define Gd { OP_G, d_mode }
274#define Gdq { OP_G, dq_mode }
275#define Gm { OP_G, m_mode }
c0a30a9f 276#define Gva { OP_G, va_mode }
ce518a5f 277#define Gw { OP_G, w_mode }
6f74c397 278#define Rd { OP_R, d_mode }
43234a1e 279#define Rdq { OP_R, dq_mode }
6f74c397 280#define Rm { OP_R, m_mode }
ce518a5f
L
281#define Ib { OP_I, b_mode }
282#define sIb { OP_sI, b_mode } /* sign extened byte */
e3949f17 283#define sIbT { OP_sI, b_T_mode } /* sign extened byte like 'T' */
ce518a5f 284#define Iv { OP_I, v_mode }
7bb15c6f 285#define sIv { OP_sI, v_mode }
ce518a5f 286#define Iv64 { OP_I64, v_mode }
c1dc7af5 287#define Id { OP_I, d_mode }
ce518a5f
L
288#define Iw { OP_I, w_mode }
289#define I1 { OP_I, const_1_mode }
290#define Jb { OP_J, b_mode }
291#define Jv { OP_J, v_mode }
376cd056 292#define Jdqw { OP_J, dqw_mode }
ce518a5f
L
293#define Cm { OP_C, m_mode }
294#define Dm { OP_D, m_mode }
295#define Td { OP_T, d_mode }
b844680a 296#define Skip_MODRM { OP_Skip_MODRM, 0 }
ce518a5f
L
297
298#define RMeAX { OP_REG, eAX_reg }
299#define RMeBX { OP_REG, eBX_reg }
300#define RMeCX { OP_REG, eCX_reg }
301#define RMeDX { OP_REG, eDX_reg }
302#define RMeSP { OP_REG, eSP_reg }
303#define RMeBP { OP_REG, eBP_reg }
304#define RMeSI { OP_REG, eSI_reg }
305#define RMeDI { OP_REG, eDI_reg }
306#define RMrAX { OP_REG, rAX_reg }
307#define RMrBX { OP_REG, rBX_reg }
308#define RMrCX { OP_REG, rCX_reg }
309#define RMrDX { OP_REG, rDX_reg }
310#define RMrSP { OP_REG, rSP_reg }
311#define RMrBP { OP_REG, rBP_reg }
312#define RMrSI { OP_REG, rSI_reg }
313#define RMrDI { OP_REG, rDI_reg }
314#define RMAL { OP_REG, al_reg }
ce518a5f
L
315#define RMCL { OP_REG, cl_reg }
316#define RMDL { OP_REG, dl_reg }
317#define RMBL { OP_REG, bl_reg }
318#define RMAH { OP_REG, ah_reg }
319#define RMCH { OP_REG, ch_reg }
320#define RMDH { OP_REG, dh_reg }
321#define RMBH { OP_REG, bh_reg }
322#define RMAX { OP_REG, ax_reg }
323#define RMDX { OP_REG, dx_reg }
324
325#define eAX { OP_IMREG, eAX_reg }
ce518a5f
L
326#define AL { OP_IMREG, al_reg }
327#define CL { OP_IMREG, cl_reg }
ce518a5f
L
328#define zAX { OP_IMREG, z_mode_ax_reg }
329#define indirDX { OP_IMREG, indir_dx_reg }
330
331#define Sw { OP_SEG, w_mode }
332#define Sv { OP_SEG, v_mode }
333#define Ap { OP_DIR, 0 }
334#define Ob { OP_OFF64, b_mode }
335#define Ov { OP_OFF64, v_mode }
336#define Xb { OP_DSreg, eSI_reg }
337#define Xv { OP_DSreg, eSI_reg }
338#define Xz { OP_DSreg, eSI_reg }
339#define Yb { OP_ESreg, eDI_reg }
340#define Yv { OP_ESreg, eDI_reg }
341#define DSBX { OP_DSreg, eBX_reg }
342
343#define es { OP_REG, es_reg }
344#define ss { OP_REG, ss_reg }
345#define cs { OP_REG, cs_reg }
346#define ds { OP_REG, ds_reg }
347#define fs { OP_REG, fs_reg }
348#define gs { OP_REG, gs_reg }
349
350#define MX { OP_MMX, 0 }
351#define XM { OP_XMM, 0 }
539f890d 352#define XMScalar { OP_XMM, scalar_mode }
6c30d220 353#define XMGatherQ { OP_XMM, vex_vsib_q_w_dq_mode }
c0f3af97 354#define XMM { OP_XMM, xmm_mode }
260cd341 355#define TMM { OP_XMM, tmm_mode }
43234a1e 356#define XMxmmq { OP_XMM, xmmq_mode }
ce518a5f 357#define EM { OP_EM, v_mode }
b6169b20 358#define EMS { OP_EM, v_swap_mode }
09a2c6cf 359#define EMd { OP_EM, d_mode }
14051056 360#define EMx { OP_EM, x_mode }
4726e9a4 361#define EXbwUnit { OP_EX, bw_unit_mode }
8976381e 362#define EXw { OP_EX, w_mode }
09a2c6cf 363#define EXd { OP_EX, d_mode }
fa99fab2 364#define EXdS { OP_EX, d_swap_mode }
09a2c6cf 365#define EXq { OP_EX, q_mode }
b6169b20 366#define EXqS { OP_EX, q_swap_mode }
09a2c6cf 367#define EXx { OP_EX, x_mode }
b6169b20 368#define EXxS { OP_EX, x_swap_mode }
c0f3af97 369#define EXxmm { OP_EX, xmm_mode }
43234a1e 370#define EXymm { OP_EX, ymm_mode }
260cd341 371#define EXtmm { OP_EX, tmm_mode }
c0f3af97 372#define EXxmmq { OP_EX, xmmq_mode }
43234a1e 373#define EXEvexHalfBcstXmmq { OP_EX, evex_half_bcst_xmmq_mode }
6c30d220
L
374#define EXxmm_mb { OP_EX, xmm_mb_mode }
375#define EXxmm_mw { OP_EX, xmm_mw_mode }
376#define EXxmm_md { OP_EX, xmm_md_mode }
377#define EXxmm_mq { OP_EX, xmm_mq_mode }
378#define EXxmmdw { OP_EX, xmmdw_mode }
379#define EXxmmqd { OP_EX, xmmqd_mode }
c0f3af97 380#define EXymmq { OP_EX, ymmq_mode }
1c480963 381#define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
43234a1e
L
382#define EXEvexXGscat { OP_EX, evex_x_gscat_mode }
383#define EXEvexXNoBcst { OP_EX, evex_x_nobcst_mode }
ce518a5f
L
384#define MS { OP_MS, v_mode }
385#define XS { OP_XS, v_mode }
09335d05 386#define EMCq { OP_EMC, q_mode }
ce518a5f 387#define MXC { OP_MXC, 0 }
ce518a5f 388#define OPSUF { OP_3DNowSuffix, 0 }
d835a58b 389#define SEP { SEP_Fixup, 0 }
ad19981d 390#define CMP { CMP_Fixup, 0 }
42903f7f 391#define XMM0 { XMM_Fixup, 0 }
eacc9c89 392#define FXSAVE { FXSAVE_Fixup, 0 }
252b5132 393
c0f3af97 394#define Vex { OP_VEX, vex_mode }
e6123d0c 395#define VexW { OP_VexW, vex_mode }
539f890d 396#define VexScalar { OP_VEX, vex_scalar_mode }
6c30d220 397#define VexGatherQ { OP_VEX, vex_vsib_q_w_dq_mode }
cb21baef 398#define VexGdq { OP_VEX, dq_mode }
260cd341 399#define VexTmm { OP_VEX, tmm_mode }
539f890d 400#define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode }
539f890d 401#define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode }
539f890d 402#define XMVexScalar { OP_XMM_Vex, scalar_mode }
c0f3af97 403#define XMVexI4 { OP_REG_VexI4, x_mode }
6384fd9e 404#define XMVexScalarI4 { OP_REG_VexI4, scalar_mode }
93abb146 405#define VexI4 { OP_VexI4, 0 }
c0f3af97 406#define PCLMUL { PCLMUL_Fixup, 0 }
43234a1e 407#define VPCMP { VPCMP_Fixup, 0 }
be92cb14 408#define VPCOM { VPCOM_Fixup, 0 }
43234a1e
L
409
410#define EXxEVexR { OP_Rounding, evex_rounding_mode }
70df6fc9 411#define EXxEVexR64 { OP_Rounding, evex_rounding_64_mode }
43234a1e
L
412#define EXxEVexS { OP_Rounding, evex_sae_mode }
413
414#define XMask { OP_Mask, mask_mode }
415#define MaskG { OP_G, mask_mode }
416#define MaskE { OP_E, mask_mode }
1ba585e8 417#define MaskBDE { OP_E, mask_bd_mode }
43234a1e
L
418#define MaskR { OP_R, mask_mode }
419#define MaskVex { OP_VEX, mask_mode }
c0f3af97 420
6c30d220 421#define MVexVSIBDWpX { OP_M, vex_vsib_d_w_dq_mode }
5fc35d96 422#define MVexVSIBDQWpX { OP_M, vex_vsib_d_w_d_mode }
6c30d220 423#define MVexVSIBQWpX { OP_M, vex_vsib_q_w_dq_mode }
5fc35d96 424#define MVexVSIBQDWpX { OP_M, vex_vsib_q_w_d_mode }
6c30d220 425
260cd341
LC
426#define MVexSIBMEM { OP_M, vex_sibmem_mode }
427
35c52694 428/* Used handle "rep" prefix for string instructions. */
ce518a5f
L
429#define Xbr { REP_Fixup, eSI_reg }
430#define Xvr { REP_Fixup, eSI_reg }
431#define Ybr { REP_Fixup, eDI_reg }
432#define Yvr { REP_Fixup, eDI_reg }
433#define Yzr { REP_Fixup, eDI_reg }
434#define indirDXr { REP_Fixup, indir_dx_reg }
435#define ALr { REP_Fixup, al_reg }
436#define eAXr { REP_Fixup, eAX_reg }
437
42164a71
L
438/* Used handle HLE prefix for lockable instructions. */
439#define Ebh1 { HLE_Fixup1, b_mode }
440#define Evh1 { HLE_Fixup1, v_mode }
441#define Ebh2 { HLE_Fixup2, b_mode }
442#define Evh2 { HLE_Fixup2, v_mode }
443#define Ebh3 { HLE_Fixup3, b_mode }
444#define Evh3 { HLE_Fixup3, v_mode }
445
7e8b059b 446#define BND { BND_Fixup, 0 }
04ef582a 447#define NOTRACK { NOTRACK_Fixup, 0 }
7e8b059b 448
ce518a5f
L
449#define cond_jump_flag { NULL, cond_jump_mode }
450#define loop_jcxz_flag { NULL, loop_jcxz_mode }
3ffd33cf 451
252b5132 452/* bits in sizeflag */
252b5132 453#define SUFFIX_ALWAYS 4
252b5132
RH
454#define AFLAG 2
455#define DFLAG 1
456
51e7da1b
L
457enum
458{
459 /* byte operand */
460 b_mode = 1,
461 /* byte operand with operand swapped */
3873ba12 462 b_swap_mode,
e3949f17
L
463 /* byte operand, sign extend like 'T' suffix */
464 b_T_mode,
51e7da1b 465 /* operand size depends on prefixes */
3873ba12 466 v_mode,
51e7da1b 467 /* operand size depends on prefixes with operand swapped */
3873ba12 468 v_swap_mode,
de89d0a3
IT
469 /* operand size depends on address prefix */
470 va_mode,
51e7da1b 471 /* word operand */
3873ba12 472 w_mode,
51e7da1b 473 /* double word operand */
3873ba12 474 d_mode,
51e7da1b 475 /* double word operand with operand swapped */
3873ba12 476 d_swap_mode,
51e7da1b 477 /* quad word operand */
3873ba12 478 q_mode,
51e7da1b 479 /* quad word operand with operand swapped */
3873ba12 480 q_swap_mode,
51e7da1b 481 /* ten-byte operand */
3873ba12 482 t_mode,
43234a1e
L
483 /* 16-byte XMM, 32-byte YMM or 64-byte ZMM operand. In EVEX with
484 broadcast enabled. */
3873ba12 485 x_mode,
43234a1e
L
486 /* Similar to x_mode, but with different EVEX mem shifts. */
487 evex_x_gscat_mode,
4726e9a4
JB
488 /* Similar to x_mode, but with yet different EVEX mem shifts. */
489 bw_unit_mode,
43234a1e
L
490 /* Similar to x_mode, but with disabled broadcast. */
491 evex_x_nobcst_mode,
492 /* Similar to x_mode, but with operands swapped and disabled broadcast
493 in EVEX. */
3873ba12 494 x_swap_mode,
51e7da1b 495 /* 16-byte XMM operand */
3873ba12 496 xmm_mode,
43234a1e
L
497 /* XMM, XMM or YMM register operand, or quad word, xmmword or ymmword
498 memory operand (depending on vector length). Broadcast isn't
499 allowed. */
3873ba12 500 xmmq_mode,
43234a1e
L
501 /* Same as xmmq_mode, but broadcast is allowed. */
502 evex_half_bcst_xmmq_mode,
6c30d220
L
503 /* XMM register or byte memory operand */
504 xmm_mb_mode,
505 /* XMM register or word memory operand */
506 xmm_mw_mode,
507 /* XMM register or double word memory operand */
508 xmm_md_mode,
509 /* XMM register or quad word memory operand */
510 xmm_mq_mode,
43234a1e 511 /* 16-byte XMM, word, double word or quad word operand. */
6c30d220 512 xmmdw_mode,
43234a1e 513 /* 16-byte XMM, double word, quad word operand or xmm word operand. */
6c30d220 514 xmmqd_mode,
43234a1e
L
515 /* 32-byte YMM operand */
516 ymm_mode,
517 /* quad word, ymmword or zmmword memory operand. */
3873ba12 518 ymmq_mode,
6c30d220
L
519 /* 32-byte YMM or 16-byte word operand */
520 ymmxmm_mode,
260cd341
LC
521 /* TMM operand */
522 tmm_mode,
51e7da1b 523 /* d_mode in 32bit, q_mode in 64bit mode. */
3873ba12 524 m_mode,
51e7da1b 525 /* pair of v_mode operands */
3873ba12
L
526 a_mode,
527 cond_jump_mode,
528 loop_jcxz_mode,
bc31405e 529 movsxd_mode,
7e8b059b 530 v_bnd_mode,
d276ec69
JB
531 /* like v_bnd_mode in 32bit, no RIP-rel in 64bit mode. */
532 v_bndmk_mode,
51e7da1b 533 /* operand size depends on REX prefixes. */
3873ba12 534 dq_mode,
376cd056
JB
535 /* registers like dq_mode, memory like w_mode, displacements like
536 v_mode without considering Intel64 ISA. */
3873ba12 537 dqw_mode,
9f79e886 538 /* bounds operand */
7e8b059b 539 bnd_mode,
9f79e886
JB
540 /* bounds operand with operand swapped */
541 bnd_swap_mode,
51e7da1b 542 /* 4- or 6-byte pointer operand */
3873ba12
L
543 f_mode,
544 const_1_mode,
07f5af7d
L
545 /* v_mode for indirect branch opcodes. */
546 indir_v_mode,
51e7da1b 547 /* v_mode for stack-related opcodes. */
3873ba12 548 stack_v_mode,
51e7da1b 549 /* non-quad operand size depends on prefixes */
3873ba12 550 z_mode,
51e7da1b 551 /* 16-byte operand */
3873ba12 552 o_mode,
51e7da1b 553 /* registers like dq_mode, memory like b_mode. */
3873ba12 554 dqb_mode,
1ba585e8
IT
555 /* registers like d_mode, memory like b_mode. */
556 db_mode,
557 /* registers like d_mode, memory like w_mode. */
558 dw_mode,
51e7da1b 559 /* registers like dq_mode, memory like d_mode. */
3873ba12 560 dqd_mode,
51e7da1b 561 /* normal vex mode */
3873ba12 562 vex_mode,
d55ee72f 563
825bd36c 564 /* Operand size depends on the VEX.W bit, with VSIB dword indices. */
6c30d220 565 vex_vsib_d_w_dq_mode,
5fc35d96
IT
566 /* Similar to vex_vsib_d_w_dq_mode, with smaller memory. */
567 vex_vsib_d_w_d_mode,
825bd36c 568 /* Operand size depends on the VEX.W bit, with VSIB qword indices. */
6c30d220 569 vex_vsib_q_w_dq_mode,
5fc35d96
IT
570 /* Similar to vex_vsib_q_w_dq_mode, with smaller memory. */
571 vex_vsib_q_w_d_mode,
260cd341
LC
572 /* mandatory non-vector SIB. */
573 vex_sibmem_mode,
6c30d220 574
539f890d
L
575 /* scalar, ignore vector length. */
576 scalar_mode,
539f890d
L
577 /* like d_swap_mode, ignore vector length. */
578 d_scalar_swap_mode,
539f890d
L
579 /* like q_swap_mode, ignore vector length. */
580 q_scalar_swap_mode,
581 /* like vex_mode, ignore vector length. */
582 vex_scalar_mode,
825bd36c 583 /* Operand size depends on the VEX.W bit, ignore vector length. */
1c480963 584 vex_scalar_w_dq_mode,
539f890d 585
43234a1e
L
586 /* Static rounding. */
587 evex_rounding_mode,
70df6fc9
L
588 /* Static rounding, 64-bit mode only. */
589 evex_rounding_64_mode,
43234a1e
L
590 /* Supress all exceptions. */
591 evex_sae_mode,
592
593 /* Mask register operand. */
594 mask_mode,
1ba585e8
IT
595 /* Mask register operand. */
596 mask_bd_mode,
43234a1e 597
3873ba12
L
598 es_reg,
599 cs_reg,
600 ss_reg,
601 ds_reg,
602 fs_reg,
603 gs_reg,
d55ee72f 604
3873ba12
L
605 eAX_reg,
606 eCX_reg,
607 eDX_reg,
608 eBX_reg,
609 eSP_reg,
610 eBP_reg,
611 eSI_reg,
612 eDI_reg,
d55ee72f 613
3873ba12
L
614 al_reg,
615 cl_reg,
616 dl_reg,
617 bl_reg,
618 ah_reg,
619 ch_reg,
620 dh_reg,
621 bh_reg,
d55ee72f 622
3873ba12
L
623 ax_reg,
624 cx_reg,
625 dx_reg,
626 bx_reg,
627 sp_reg,
628 bp_reg,
629 si_reg,
630 di_reg,
d55ee72f 631
3873ba12
L
632 rAX_reg,
633 rCX_reg,
634 rDX_reg,
635 rBX_reg,
636 rSP_reg,
637 rBP_reg,
638 rSI_reg,
639 rDI_reg,
d55ee72f 640
3873ba12
L
641 z_mode_ax_reg,
642 indir_dx_reg
51e7da1b 643};
252b5132 644
51e7da1b
L
645enum
646{
647 FLOATCODE = 1,
3873ba12
L
648 USE_REG_TABLE,
649 USE_MOD_TABLE,
650 USE_RM_TABLE,
651 USE_PREFIX_TABLE,
652 USE_X86_64_TABLE,
653 USE_3BYTE_TABLE,
f88c9eb0 654 USE_XOP_8F_TABLE,
3873ba12
L
655 USE_VEX_C4_TABLE,
656 USE_VEX_C5_TABLE,
9e30b8e0 657 USE_VEX_LEN_TABLE,
43234a1e 658 USE_VEX_W_TABLE,
04e2a182
L
659 USE_EVEX_TABLE,
660 USE_EVEX_LEN_TABLE
51e7da1b 661};
6439fc28 662
bf890a93 663#define FLOAT NULL, { { NULL, FLOATCODE } }, 0
4efba78c 664
bf890a93
IT
665#define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }, 0
666#define DIS386_PREFIX(T, I, P) NULL, { { NULL, (T)}, { NULL, (I) } }, P
1ceb70f8
L
667#define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
668#define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
669#define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
670#define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
4e7d34a6
L
671#define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
672#define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
bf890a93 673#define THREE_BYTE_TABLE_PREFIX(I, P) DIS386_PREFIX (USE_3BYTE_TABLE, (I), P)
f88c9eb0 674#define XOP_8F_TABLE(I) DIS386 (USE_XOP_8F_TABLE, (I))
c0f3af97
L
675#define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
676#define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
677#define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
9e30b8e0 678#define VEX_W_TABLE(I) DIS386 (USE_VEX_W_TABLE, (I))
43234a1e 679#define EVEX_TABLE(I) DIS386 (USE_EVEX_TABLE, (I))
04e2a182 680#define EVEX_LEN_TABLE(I) DIS386 (USE_EVEX_LEN_TABLE, (I))
1ceb70f8 681
51e7da1b
L
682enum
683{
684 REG_80 = 0,
3873ba12 685 REG_81,
7148c369 686 REG_83,
3873ba12
L
687 REG_8F,
688 REG_C0,
689 REG_C1,
690 REG_C6,
691 REG_C7,
692 REG_D0,
693 REG_D1,
694 REG_D2,
695 REG_D3,
696 REG_F6,
697 REG_F7,
698 REG_FE,
699 REG_FF,
700 REG_0F00,
701 REG_0F01,
702 REG_0F0D,
703 REG_0F18,
f8687e93
JB
704 REG_0F1C_P_0_MOD_0,
705 REG_0F1E_P_1_MOD_3,
3873ba12
L
706 REG_0F71,
707 REG_0F72,
708 REG_0F73,
709 REG_0FA6,
710 REG_0FA7,
711 REG_0FAE,
712 REG_0FBA,
713 REG_0FC7,
592a252b
L
714 REG_VEX_0F71,
715 REG_VEX_0F72,
716 REG_VEX_0F73,
717 REG_VEX_0FAE,
260cd341 718 REG_VEX_0F3849_X86_64_P_0_W_0_M_1,
f12dc422 719 REG_VEX_0F38F3,
467bbef0
JB
720
721 REG_0FXOP_09_01_L_0,
722 REG_0FXOP_09_02_L_0,
723 REG_0FXOP_09_12_M_1_L_0,
724 REG_0FXOP_0A_12_L_0,
43234a1e 725
1ba585e8 726 REG_EVEX_0F71,
43234a1e
L
727 REG_EVEX_0F72,
728 REG_EVEX_0F73,
729 REG_EVEX_0F38C6,
730 REG_EVEX_0F38C7
51e7da1b 731};
1ceb70f8 732
51e7da1b
L
733enum
734{
735 MOD_8D = 0,
42164a71
L
736 MOD_C6_REG_7,
737 MOD_C7_REG_7,
4a357820
MZ
738 MOD_FF_REG_3,
739 MOD_FF_REG_5,
3873ba12
L
740 MOD_0F01_REG_0,
741 MOD_0F01_REG_1,
742 MOD_0F01_REG_2,
743 MOD_0F01_REG_3,
8eab4136 744 MOD_0F01_REG_5,
3873ba12
L
745 MOD_0F01_REG_7,
746 MOD_0F12_PREFIX_0,
18897deb 747 MOD_0F12_PREFIX_2,
3873ba12
L
748 MOD_0F13,
749 MOD_0F16_PREFIX_0,
18897deb 750 MOD_0F16_PREFIX_2,
3873ba12
L
751 MOD_0F17,
752 MOD_0F18_REG_0,
753 MOD_0F18_REG_1,
754 MOD_0F18_REG_2,
755 MOD_0F18_REG_3,
d7189fa5
RM
756 MOD_0F18_REG_4,
757 MOD_0F18_REG_5,
758 MOD_0F18_REG_6,
759 MOD_0F18_REG_7,
7e8b059b
L
760 MOD_0F1A_PREFIX_0,
761 MOD_0F1B_PREFIX_0,
762 MOD_0F1B_PREFIX_1,
c48935d7 763 MOD_0F1C_PREFIX_0,
603555e5 764 MOD_0F1E_PREFIX_1,
3873ba12
L
765 MOD_0F24,
766 MOD_0F26,
767 MOD_0F2B_PREFIX_0,
768 MOD_0F2B_PREFIX_1,
769 MOD_0F2B_PREFIX_2,
770 MOD_0F2B_PREFIX_3,
a5aaedb9 771 MOD_0F50,
3873ba12
L
772 MOD_0F71_REG_2,
773 MOD_0F71_REG_4,
774 MOD_0F71_REG_6,
775 MOD_0F72_REG_2,
776 MOD_0F72_REG_4,
777 MOD_0F72_REG_6,
778 MOD_0F73_REG_2,
779 MOD_0F73_REG_3,
780 MOD_0F73_REG_6,
781 MOD_0F73_REG_7,
782 MOD_0FAE_REG_0,
783 MOD_0FAE_REG_1,
784 MOD_0FAE_REG_2,
785 MOD_0FAE_REG_3,
786 MOD_0FAE_REG_4,
787 MOD_0FAE_REG_5,
788 MOD_0FAE_REG_6,
789 MOD_0FAE_REG_7,
790 MOD_0FB2,
791 MOD_0FB4,
792 MOD_0FB5,
a8484f96 793 MOD_0FC3,
963f3586
IT
794 MOD_0FC7_REG_3,
795 MOD_0FC7_REG_4,
796 MOD_0FC7_REG_5,
3873ba12
L
797 MOD_0FC7_REG_6,
798 MOD_0FC7_REG_7,
799 MOD_0FD7,
800 MOD_0FE7_PREFIX_2,
801 MOD_0FF0_PREFIX_3,
802 MOD_0F382A_PREFIX_2,
260cd341
LC
803 MOD_VEX_0F3849_X86_64_P_0_W_0,
804 MOD_VEX_0F3849_X86_64_P_2_W_0,
805 MOD_VEX_0F3849_X86_64_P_3_W_0,
806 MOD_VEX_0F384B_X86_64_P_1_W_0,
807 MOD_VEX_0F384B_X86_64_P_2_W_0,
808 MOD_VEX_0F384B_X86_64_P_3_W_0,
809 MOD_VEX_0F385C_X86_64_P_1_W_0,
810 MOD_VEX_0F385E_X86_64_P_0_W_0,
811 MOD_VEX_0F385E_X86_64_P_1_W_0,
812 MOD_VEX_0F385E_X86_64_P_2_W_0,
813 MOD_VEX_0F385E_X86_64_P_3_W_0,
603555e5
L
814 MOD_0F38F5_PREFIX_2,
815 MOD_0F38F6_PREFIX_0,
5d79adc4 816 MOD_0F38F8_PREFIX_1,
c0a30a9f 817 MOD_0F38F8_PREFIX_2,
5d79adc4 818 MOD_0F38F8_PREFIX_3,
c0a30a9f 819 MOD_0F38F9_PREFIX_0,
3873ba12
L
820 MOD_62_32BIT,
821 MOD_C4_32BIT,
822 MOD_C5_32BIT,
592a252b 823 MOD_VEX_0F12_PREFIX_0,
18897deb 824 MOD_VEX_0F12_PREFIX_2,
592a252b
L
825 MOD_VEX_0F13,
826 MOD_VEX_0F16_PREFIX_0,
18897deb 827 MOD_VEX_0F16_PREFIX_2,
592a252b
L
828 MOD_VEX_0F17,
829 MOD_VEX_0F2B,
ab4e4ed5
AF
830 MOD_VEX_W_0_0F41_P_0_LEN_1,
831 MOD_VEX_W_1_0F41_P_0_LEN_1,
832 MOD_VEX_W_0_0F41_P_2_LEN_1,
833 MOD_VEX_W_1_0F41_P_2_LEN_1,
834 MOD_VEX_W_0_0F42_P_0_LEN_1,
835 MOD_VEX_W_1_0F42_P_0_LEN_1,
836 MOD_VEX_W_0_0F42_P_2_LEN_1,
837 MOD_VEX_W_1_0F42_P_2_LEN_1,
838 MOD_VEX_W_0_0F44_P_0_LEN_1,
839 MOD_VEX_W_1_0F44_P_0_LEN_1,
840 MOD_VEX_W_0_0F44_P_2_LEN_1,
841 MOD_VEX_W_1_0F44_P_2_LEN_1,
842 MOD_VEX_W_0_0F45_P_0_LEN_1,
843 MOD_VEX_W_1_0F45_P_0_LEN_1,
844 MOD_VEX_W_0_0F45_P_2_LEN_1,
845 MOD_VEX_W_1_0F45_P_2_LEN_1,
846 MOD_VEX_W_0_0F46_P_0_LEN_1,
847 MOD_VEX_W_1_0F46_P_0_LEN_1,
848 MOD_VEX_W_0_0F46_P_2_LEN_1,
849 MOD_VEX_W_1_0F46_P_2_LEN_1,
850 MOD_VEX_W_0_0F47_P_0_LEN_1,
851 MOD_VEX_W_1_0F47_P_0_LEN_1,
852 MOD_VEX_W_0_0F47_P_2_LEN_1,
853 MOD_VEX_W_1_0F47_P_2_LEN_1,
854 MOD_VEX_W_0_0F4A_P_0_LEN_1,
855 MOD_VEX_W_1_0F4A_P_0_LEN_1,
856 MOD_VEX_W_0_0F4A_P_2_LEN_1,
857 MOD_VEX_W_1_0F4A_P_2_LEN_1,
858 MOD_VEX_W_0_0F4B_P_0_LEN_1,
859 MOD_VEX_W_1_0F4B_P_0_LEN_1,
860 MOD_VEX_W_0_0F4B_P_2_LEN_1,
592a252b
L
861 MOD_VEX_0F50,
862 MOD_VEX_0F71_REG_2,
863 MOD_VEX_0F71_REG_4,
864 MOD_VEX_0F71_REG_6,
865 MOD_VEX_0F72_REG_2,
866 MOD_VEX_0F72_REG_4,
867 MOD_VEX_0F72_REG_6,
868 MOD_VEX_0F73_REG_2,
869 MOD_VEX_0F73_REG_3,
870 MOD_VEX_0F73_REG_6,
871 MOD_VEX_0F73_REG_7,
ab4e4ed5
AF
872 MOD_VEX_W_0_0F91_P_0_LEN_0,
873 MOD_VEX_W_1_0F91_P_0_LEN_0,
874 MOD_VEX_W_0_0F91_P_2_LEN_0,
875 MOD_VEX_W_1_0F91_P_2_LEN_0,
876 MOD_VEX_W_0_0F92_P_0_LEN_0,
877 MOD_VEX_W_0_0F92_P_2_LEN_0,
58a211d2 878 MOD_VEX_0F92_P_3_LEN_0,
ab4e4ed5
AF
879 MOD_VEX_W_0_0F93_P_0_LEN_0,
880 MOD_VEX_W_0_0F93_P_2_LEN_0,
58a211d2 881 MOD_VEX_0F93_P_3_LEN_0,
ab4e4ed5
AF
882 MOD_VEX_W_0_0F98_P_0_LEN_0,
883 MOD_VEX_W_1_0F98_P_0_LEN_0,
884 MOD_VEX_W_0_0F98_P_2_LEN_0,
885 MOD_VEX_W_1_0F98_P_2_LEN_0,
886 MOD_VEX_W_0_0F99_P_0_LEN_0,
887 MOD_VEX_W_1_0F99_P_0_LEN_0,
888 MOD_VEX_W_0_0F99_P_2_LEN_0,
889 MOD_VEX_W_1_0F99_P_2_LEN_0,
592a252b
L
890 MOD_VEX_0FAE_REG_2,
891 MOD_VEX_0FAE_REG_3,
892 MOD_VEX_0FD7_PREFIX_2,
893 MOD_VEX_0FE7_PREFIX_2,
894 MOD_VEX_0FF0_PREFIX_3,
592a252b
L
895 MOD_VEX_0F381A_PREFIX_2,
896 MOD_VEX_0F382A_PREFIX_2,
897 MOD_VEX_0F382C_PREFIX_2,
898 MOD_VEX_0F382D_PREFIX_2,
899 MOD_VEX_0F382E_PREFIX_2,
6c30d220
L
900 MOD_VEX_0F382F_PREFIX_2,
901 MOD_VEX_0F385A_PREFIX_2,
902 MOD_VEX_0F388C_PREFIX_2,
903 MOD_VEX_0F388E_PREFIX_2,
ab4e4ed5
AF
904 MOD_VEX_W_0_0F3A30_P_2_LEN_0,
905 MOD_VEX_W_1_0F3A30_P_2_LEN_0,
906 MOD_VEX_W_0_0F3A31_P_2_LEN_0,
907 MOD_VEX_W_1_0F3A31_P_2_LEN_0,
908 MOD_VEX_W_0_0F3A32_P_2_LEN_0,
909 MOD_VEX_W_1_0F3A32_P_2_LEN_0,
910 MOD_VEX_W_0_0F3A33_P_2_LEN_0,
911 MOD_VEX_W_1_0F3A33_P_2_LEN_0,
43234a1e 912
467bbef0
JB
913 MOD_VEX_0FXOP_09_12,
914
43234a1e 915 MOD_EVEX_0F12_PREFIX_0,
97e6786a
JB
916 MOD_EVEX_0F12_PREFIX_2,
917 MOD_EVEX_0F13,
43234a1e 918 MOD_EVEX_0F16_PREFIX_0,
97e6786a
JB
919 MOD_EVEX_0F16_PREFIX_2,
920 MOD_EVEX_0F17,
921 MOD_EVEX_0F2B,
bc152a17
JB
922 MOD_EVEX_0F381A_P_2_W_0,
923 MOD_EVEX_0F381A_P_2_W_1,
924 MOD_EVEX_0F381B_P_2_W_0,
925 MOD_EVEX_0F381B_P_2_W_1,
926 MOD_EVEX_0F385A_P_2_W_0,
927 MOD_EVEX_0F385A_P_2_W_1,
928 MOD_EVEX_0F385B_P_2_W_0,
929 MOD_EVEX_0F385B_P_2_W_1,
43234a1e
L
930 MOD_EVEX_0F38C6_REG_1,
931 MOD_EVEX_0F38C6_REG_2,
932 MOD_EVEX_0F38C6_REG_5,
933 MOD_EVEX_0F38C6_REG_6,
934 MOD_EVEX_0F38C7_REG_1,
935 MOD_EVEX_0F38C7_REG_2,
936 MOD_EVEX_0F38C7_REG_5,
937 MOD_EVEX_0F38C7_REG_6
51e7da1b 938};
1ceb70f8 939
51e7da1b
L
940enum
941{
42164a71
L
942 RM_C6_REG_7 = 0,
943 RM_C7_REG_7,
944 RM_0F01_REG_0,
3873ba12
L
945 RM_0F01_REG_1,
946 RM_0F01_REG_2,
947 RM_0F01_REG_3,
f8687e93
JB
948 RM_0F01_REG_5_MOD_3,
949 RM_0F01_REG_7_MOD_3,
950 RM_0F1E_P_1_MOD_3_REG_7,
951 RM_0FAE_REG_6_MOD_3_P_0,
952 RM_0FAE_REG_7_MOD_3,
260cd341 953 RM_VEX_0F3849_X86_64_P_0_W_0_M_1_R_0
51e7da1b 954};
1ceb70f8 955
51e7da1b
L
956enum
957{
958 PREFIX_90 = 0,
a847e322 959 PREFIX_0F01_REG_3_RM_1,
f8687e93
JB
960 PREFIX_0F01_REG_5_MOD_0,
961 PREFIX_0F01_REG_5_MOD_3_RM_0,
bb651e8b 962 PREFIX_0F01_REG_5_MOD_3_RM_1,
f8687e93 963 PREFIX_0F01_REG_5_MOD_3_RM_2,
267b8516
JB
964 PREFIX_0F01_REG_7_MOD_3_RM_2,
965 PREFIX_0F01_REG_7_MOD_3_RM_3,
3233d7d0 966 PREFIX_0F09,
3873ba12
L
967 PREFIX_0F10,
968 PREFIX_0F11,
969 PREFIX_0F12,
970 PREFIX_0F16,
7e8b059b
L
971 PREFIX_0F1A,
972 PREFIX_0F1B,
c48935d7 973 PREFIX_0F1C,
603555e5 974 PREFIX_0F1E,
3873ba12
L
975 PREFIX_0F2A,
976 PREFIX_0F2B,
977 PREFIX_0F2C,
978 PREFIX_0F2D,
979 PREFIX_0F2E,
980 PREFIX_0F2F,
981 PREFIX_0F51,
982 PREFIX_0F52,
983 PREFIX_0F53,
984 PREFIX_0F58,
985 PREFIX_0F59,
986 PREFIX_0F5A,
987 PREFIX_0F5B,
988 PREFIX_0F5C,
989 PREFIX_0F5D,
990 PREFIX_0F5E,
991 PREFIX_0F5F,
992 PREFIX_0F60,
993 PREFIX_0F61,
994 PREFIX_0F62,
995 PREFIX_0F6C,
996 PREFIX_0F6D,
997 PREFIX_0F6F,
998 PREFIX_0F70,
999 PREFIX_0F73_REG_3,
1000 PREFIX_0F73_REG_7,
1001 PREFIX_0F78,
1002 PREFIX_0F79,
1003 PREFIX_0F7C,
1004 PREFIX_0F7D,
1005 PREFIX_0F7E,
1006 PREFIX_0F7F,
f8687e93
JB
1007 PREFIX_0FAE_REG_0_MOD_3,
1008 PREFIX_0FAE_REG_1_MOD_3,
1009 PREFIX_0FAE_REG_2_MOD_3,
1010 PREFIX_0FAE_REG_3_MOD_3,
1011 PREFIX_0FAE_REG_4_MOD_0,
1012 PREFIX_0FAE_REG_4_MOD_3,
1013 PREFIX_0FAE_REG_5_MOD_0,
1014 PREFIX_0FAE_REG_5_MOD_3,
1015 PREFIX_0FAE_REG_6_MOD_0,
1016 PREFIX_0FAE_REG_6_MOD_3,
1017 PREFIX_0FAE_REG_7_MOD_0,
3873ba12 1018 PREFIX_0FB8,
f12dc422 1019 PREFIX_0FBC,
3873ba12
L
1020 PREFIX_0FBD,
1021 PREFIX_0FC2,
f8687e93
JB
1022 PREFIX_0FC3_MOD_0,
1023 PREFIX_0FC7_REG_6_MOD_0,
1024 PREFIX_0FC7_REG_6_MOD_3,
1025 PREFIX_0FC7_REG_7_MOD_3,
3873ba12
L
1026 PREFIX_0FD0,
1027 PREFIX_0FD6,
1028 PREFIX_0FE6,
1029 PREFIX_0FE7,
1030 PREFIX_0FF0,
1031 PREFIX_0FF7,
1032 PREFIX_0F3810,
1033 PREFIX_0F3814,
1034 PREFIX_0F3815,
1035 PREFIX_0F3817,
1036 PREFIX_0F3820,
1037 PREFIX_0F3821,
1038 PREFIX_0F3822,
1039 PREFIX_0F3823,
1040 PREFIX_0F3824,
1041 PREFIX_0F3825,
1042 PREFIX_0F3828,
1043 PREFIX_0F3829,
1044 PREFIX_0F382A,
1045 PREFIX_0F382B,
1046 PREFIX_0F3830,
1047 PREFIX_0F3831,
1048 PREFIX_0F3832,
1049 PREFIX_0F3833,
1050 PREFIX_0F3834,
1051 PREFIX_0F3835,
1052 PREFIX_0F3837,
1053 PREFIX_0F3838,
1054 PREFIX_0F3839,
1055 PREFIX_0F383A,
1056 PREFIX_0F383B,
1057 PREFIX_0F383C,
1058 PREFIX_0F383D,
1059 PREFIX_0F383E,
1060 PREFIX_0F383F,
1061 PREFIX_0F3840,
1062 PREFIX_0F3841,
1063 PREFIX_0F3880,
1064 PREFIX_0F3881,
6c30d220 1065 PREFIX_0F3882,
a0046408
L
1066 PREFIX_0F38C8,
1067 PREFIX_0F38C9,
1068 PREFIX_0F38CA,
1069 PREFIX_0F38CB,
1070 PREFIX_0F38CC,
1071 PREFIX_0F38CD,
48521003 1072 PREFIX_0F38CF,
3873ba12
L
1073 PREFIX_0F38DB,
1074 PREFIX_0F38DC,
1075 PREFIX_0F38DD,
1076 PREFIX_0F38DE,
1077 PREFIX_0F38DF,
1078 PREFIX_0F38F0,
1079 PREFIX_0F38F1,
603555e5 1080 PREFIX_0F38F5,
e2e1fcde 1081 PREFIX_0F38F6,
c0a30a9f
L
1082 PREFIX_0F38F8,
1083 PREFIX_0F38F9,
3873ba12
L
1084 PREFIX_0F3A08,
1085 PREFIX_0F3A09,
1086 PREFIX_0F3A0A,
1087 PREFIX_0F3A0B,
1088 PREFIX_0F3A0C,
1089 PREFIX_0F3A0D,
1090 PREFIX_0F3A0E,
1091 PREFIX_0F3A14,
1092 PREFIX_0F3A15,
1093 PREFIX_0F3A16,
1094 PREFIX_0F3A17,
1095 PREFIX_0F3A20,
1096 PREFIX_0F3A21,
1097 PREFIX_0F3A22,
1098 PREFIX_0F3A40,
1099 PREFIX_0F3A41,
1100 PREFIX_0F3A42,
1101 PREFIX_0F3A44,
1102 PREFIX_0F3A60,
1103 PREFIX_0F3A61,
1104 PREFIX_0F3A62,
1105 PREFIX_0F3A63,
a0046408 1106 PREFIX_0F3ACC,
48521003
IT
1107 PREFIX_0F3ACE,
1108 PREFIX_0F3ACF,
3873ba12 1109 PREFIX_0F3ADF,
592a252b
L
1110 PREFIX_VEX_0F10,
1111 PREFIX_VEX_0F11,
1112 PREFIX_VEX_0F12,
1113 PREFIX_VEX_0F16,
1114 PREFIX_VEX_0F2A,
1115 PREFIX_VEX_0F2C,
1116 PREFIX_VEX_0F2D,
1117 PREFIX_VEX_0F2E,
1118 PREFIX_VEX_0F2F,
43234a1e
L
1119 PREFIX_VEX_0F41,
1120 PREFIX_VEX_0F42,
1121 PREFIX_VEX_0F44,
1122 PREFIX_VEX_0F45,
1123 PREFIX_VEX_0F46,
1124 PREFIX_VEX_0F47,
1ba585e8 1125 PREFIX_VEX_0F4A,
43234a1e 1126 PREFIX_VEX_0F4B,
592a252b
L
1127 PREFIX_VEX_0F51,
1128 PREFIX_VEX_0F52,
1129 PREFIX_VEX_0F53,
1130 PREFIX_VEX_0F58,
1131 PREFIX_VEX_0F59,
1132 PREFIX_VEX_0F5A,
1133 PREFIX_VEX_0F5B,
1134 PREFIX_VEX_0F5C,
1135 PREFIX_VEX_0F5D,
1136 PREFIX_VEX_0F5E,
1137 PREFIX_VEX_0F5F,
1138 PREFIX_VEX_0F60,
1139 PREFIX_VEX_0F61,
1140 PREFIX_VEX_0F62,
1141 PREFIX_VEX_0F63,
1142 PREFIX_VEX_0F64,
1143 PREFIX_VEX_0F65,
1144 PREFIX_VEX_0F66,
1145 PREFIX_VEX_0F67,
1146 PREFIX_VEX_0F68,
1147 PREFIX_VEX_0F69,
1148 PREFIX_VEX_0F6A,
1149 PREFIX_VEX_0F6B,
1150 PREFIX_VEX_0F6C,
1151 PREFIX_VEX_0F6D,
1152 PREFIX_VEX_0F6E,
1153 PREFIX_VEX_0F6F,
1154 PREFIX_VEX_0F70,
1155 PREFIX_VEX_0F71_REG_2,
1156 PREFIX_VEX_0F71_REG_4,
1157 PREFIX_VEX_0F71_REG_6,
1158 PREFIX_VEX_0F72_REG_2,
1159 PREFIX_VEX_0F72_REG_4,
1160 PREFIX_VEX_0F72_REG_6,
1161 PREFIX_VEX_0F73_REG_2,
1162 PREFIX_VEX_0F73_REG_3,
1163 PREFIX_VEX_0F73_REG_6,
1164 PREFIX_VEX_0F73_REG_7,
1165 PREFIX_VEX_0F74,
1166 PREFIX_VEX_0F75,
1167 PREFIX_VEX_0F76,
1168 PREFIX_VEX_0F77,
1169 PREFIX_VEX_0F7C,
1170 PREFIX_VEX_0F7D,
1171 PREFIX_VEX_0F7E,
1172 PREFIX_VEX_0F7F,
43234a1e
L
1173 PREFIX_VEX_0F90,
1174 PREFIX_VEX_0F91,
1175 PREFIX_VEX_0F92,
1176 PREFIX_VEX_0F93,
1177 PREFIX_VEX_0F98,
1ba585e8 1178 PREFIX_VEX_0F99,
592a252b
L
1179 PREFIX_VEX_0FC2,
1180 PREFIX_VEX_0FC4,
1181 PREFIX_VEX_0FC5,
1182 PREFIX_VEX_0FD0,
1183 PREFIX_VEX_0FD1,
1184 PREFIX_VEX_0FD2,
1185 PREFIX_VEX_0FD3,
1186 PREFIX_VEX_0FD4,
1187 PREFIX_VEX_0FD5,
1188 PREFIX_VEX_0FD6,
1189 PREFIX_VEX_0FD7,
1190 PREFIX_VEX_0FD8,
1191 PREFIX_VEX_0FD9,
1192 PREFIX_VEX_0FDA,
1193 PREFIX_VEX_0FDB,
1194 PREFIX_VEX_0FDC,
1195 PREFIX_VEX_0FDD,
1196 PREFIX_VEX_0FDE,
1197 PREFIX_VEX_0FDF,
1198 PREFIX_VEX_0FE0,
1199 PREFIX_VEX_0FE1,
1200 PREFIX_VEX_0FE2,
1201 PREFIX_VEX_0FE3,
1202 PREFIX_VEX_0FE4,
1203 PREFIX_VEX_0FE5,
1204 PREFIX_VEX_0FE6,
1205 PREFIX_VEX_0FE7,
1206 PREFIX_VEX_0FE8,
1207 PREFIX_VEX_0FE9,
1208 PREFIX_VEX_0FEA,
1209 PREFIX_VEX_0FEB,
1210 PREFIX_VEX_0FEC,
1211 PREFIX_VEX_0FED,
1212 PREFIX_VEX_0FEE,
1213 PREFIX_VEX_0FEF,
1214 PREFIX_VEX_0FF0,
1215 PREFIX_VEX_0FF1,
1216 PREFIX_VEX_0FF2,
1217 PREFIX_VEX_0FF3,
1218 PREFIX_VEX_0FF4,
1219 PREFIX_VEX_0FF5,
1220 PREFIX_VEX_0FF6,
1221 PREFIX_VEX_0FF7,
1222 PREFIX_VEX_0FF8,
1223 PREFIX_VEX_0FF9,
1224 PREFIX_VEX_0FFA,
1225 PREFIX_VEX_0FFB,
1226 PREFIX_VEX_0FFC,
1227 PREFIX_VEX_0FFD,
1228 PREFIX_VEX_0FFE,
1229 PREFIX_VEX_0F3800,
1230 PREFIX_VEX_0F3801,
1231 PREFIX_VEX_0F3802,
1232 PREFIX_VEX_0F3803,
1233 PREFIX_VEX_0F3804,
1234 PREFIX_VEX_0F3805,
1235 PREFIX_VEX_0F3806,
1236 PREFIX_VEX_0F3807,
1237 PREFIX_VEX_0F3808,
1238 PREFIX_VEX_0F3809,
1239 PREFIX_VEX_0F380A,
1240 PREFIX_VEX_0F380B,
1241 PREFIX_VEX_0F380C,
1242 PREFIX_VEX_0F380D,
1243 PREFIX_VEX_0F380E,
1244 PREFIX_VEX_0F380F,
1245 PREFIX_VEX_0F3813,
6c30d220 1246 PREFIX_VEX_0F3816,
592a252b
L
1247 PREFIX_VEX_0F3817,
1248 PREFIX_VEX_0F3818,
1249 PREFIX_VEX_0F3819,
1250 PREFIX_VEX_0F381A,
1251 PREFIX_VEX_0F381C,
1252 PREFIX_VEX_0F381D,
1253 PREFIX_VEX_0F381E,
1254 PREFIX_VEX_0F3820,
1255 PREFIX_VEX_0F3821,
1256 PREFIX_VEX_0F3822,
1257 PREFIX_VEX_0F3823,
1258 PREFIX_VEX_0F3824,
1259 PREFIX_VEX_0F3825,
1260 PREFIX_VEX_0F3828,
1261 PREFIX_VEX_0F3829,
1262 PREFIX_VEX_0F382A,
1263 PREFIX_VEX_0F382B,
1264 PREFIX_VEX_0F382C,
1265 PREFIX_VEX_0F382D,
1266 PREFIX_VEX_0F382E,
1267 PREFIX_VEX_0F382F,
1268 PREFIX_VEX_0F3830,
1269 PREFIX_VEX_0F3831,
1270 PREFIX_VEX_0F3832,
1271 PREFIX_VEX_0F3833,
1272 PREFIX_VEX_0F3834,
1273 PREFIX_VEX_0F3835,
6c30d220 1274 PREFIX_VEX_0F3836,
592a252b
L
1275 PREFIX_VEX_0F3837,
1276 PREFIX_VEX_0F3838,
1277 PREFIX_VEX_0F3839,
1278 PREFIX_VEX_0F383A,
1279 PREFIX_VEX_0F383B,
1280 PREFIX_VEX_0F383C,
1281 PREFIX_VEX_0F383D,
1282 PREFIX_VEX_0F383E,
1283 PREFIX_VEX_0F383F,
1284 PREFIX_VEX_0F3840,
1285 PREFIX_VEX_0F3841,
6c30d220
L
1286 PREFIX_VEX_0F3845,
1287 PREFIX_VEX_0F3846,
1288 PREFIX_VEX_0F3847,
260cd341
LC
1289 PREFIX_VEX_0F3849_X86_64,
1290 PREFIX_VEX_0F384B_X86_64,
6c30d220
L
1291 PREFIX_VEX_0F3858,
1292 PREFIX_VEX_0F3859,
1293 PREFIX_VEX_0F385A,
260cd341
LC
1294 PREFIX_VEX_0F385C_X86_64,
1295 PREFIX_VEX_0F385E_X86_64,
6c30d220
L
1296 PREFIX_VEX_0F3878,
1297 PREFIX_VEX_0F3879,
1298 PREFIX_VEX_0F388C,
1299 PREFIX_VEX_0F388E,
1300 PREFIX_VEX_0F3890,
1301 PREFIX_VEX_0F3891,
1302 PREFIX_VEX_0F3892,
1303 PREFIX_VEX_0F3893,
592a252b
L
1304 PREFIX_VEX_0F3896,
1305 PREFIX_VEX_0F3897,
1306 PREFIX_VEX_0F3898,
1307 PREFIX_VEX_0F3899,
1308 PREFIX_VEX_0F389A,
1309 PREFIX_VEX_0F389B,
1310 PREFIX_VEX_0F389C,
1311 PREFIX_VEX_0F389D,
1312 PREFIX_VEX_0F389E,
1313 PREFIX_VEX_0F389F,
1314 PREFIX_VEX_0F38A6,
1315 PREFIX_VEX_0F38A7,
1316 PREFIX_VEX_0F38A8,
1317 PREFIX_VEX_0F38A9,
1318 PREFIX_VEX_0F38AA,
1319 PREFIX_VEX_0F38AB,
1320 PREFIX_VEX_0F38AC,
1321 PREFIX_VEX_0F38AD,
1322 PREFIX_VEX_0F38AE,
1323 PREFIX_VEX_0F38AF,
1324 PREFIX_VEX_0F38B6,
1325 PREFIX_VEX_0F38B7,
1326 PREFIX_VEX_0F38B8,
1327 PREFIX_VEX_0F38B9,
1328 PREFIX_VEX_0F38BA,
1329 PREFIX_VEX_0F38BB,
1330 PREFIX_VEX_0F38BC,
1331 PREFIX_VEX_0F38BD,
1332 PREFIX_VEX_0F38BE,
1333 PREFIX_VEX_0F38BF,
48521003 1334 PREFIX_VEX_0F38CF,
592a252b
L
1335 PREFIX_VEX_0F38DB,
1336 PREFIX_VEX_0F38DC,
1337 PREFIX_VEX_0F38DD,
1338 PREFIX_VEX_0F38DE,
1339 PREFIX_VEX_0F38DF,
f12dc422
L
1340 PREFIX_VEX_0F38F2,
1341 PREFIX_VEX_0F38F3_REG_1,
1342 PREFIX_VEX_0F38F3_REG_2,
1343 PREFIX_VEX_0F38F3_REG_3,
6c30d220
L
1344 PREFIX_VEX_0F38F5,
1345 PREFIX_VEX_0F38F6,
f12dc422 1346 PREFIX_VEX_0F38F7,
6c30d220
L
1347 PREFIX_VEX_0F3A00,
1348 PREFIX_VEX_0F3A01,
1349 PREFIX_VEX_0F3A02,
592a252b
L
1350 PREFIX_VEX_0F3A04,
1351 PREFIX_VEX_0F3A05,
1352 PREFIX_VEX_0F3A06,
1353 PREFIX_VEX_0F3A08,
1354 PREFIX_VEX_0F3A09,
1355 PREFIX_VEX_0F3A0A,
1356 PREFIX_VEX_0F3A0B,
1357 PREFIX_VEX_0F3A0C,
1358 PREFIX_VEX_0F3A0D,
1359 PREFIX_VEX_0F3A0E,
1360 PREFIX_VEX_0F3A0F,
1361 PREFIX_VEX_0F3A14,
1362 PREFIX_VEX_0F3A15,
1363 PREFIX_VEX_0F3A16,
1364 PREFIX_VEX_0F3A17,
1365 PREFIX_VEX_0F3A18,
1366 PREFIX_VEX_0F3A19,
1367 PREFIX_VEX_0F3A1D,
1368 PREFIX_VEX_0F3A20,
1369 PREFIX_VEX_0F3A21,
1370 PREFIX_VEX_0F3A22,
43234a1e 1371 PREFIX_VEX_0F3A30,
1ba585e8 1372 PREFIX_VEX_0F3A31,
43234a1e 1373 PREFIX_VEX_0F3A32,
1ba585e8 1374 PREFIX_VEX_0F3A33,
6c30d220
L
1375 PREFIX_VEX_0F3A38,
1376 PREFIX_VEX_0F3A39,
592a252b
L
1377 PREFIX_VEX_0F3A40,
1378 PREFIX_VEX_0F3A41,
1379 PREFIX_VEX_0F3A42,
1380 PREFIX_VEX_0F3A44,
6c30d220 1381 PREFIX_VEX_0F3A46,
592a252b
L
1382 PREFIX_VEX_0F3A48,
1383 PREFIX_VEX_0F3A49,
1384 PREFIX_VEX_0F3A4A,
1385 PREFIX_VEX_0F3A4B,
1386 PREFIX_VEX_0F3A4C,
1387 PREFIX_VEX_0F3A5C,
1388 PREFIX_VEX_0F3A5D,
1389 PREFIX_VEX_0F3A5E,
1390 PREFIX_VEX_0F3A5F,
1391 PREFIX_VEX_0F3A60,
1392 PREFIX_VEX_0F3A61,
1393 PREFIX_VEX_0F3A62,
1394 PREFIX_VEX_0F3A63,
1395 PREFIX_VEX_0F3A68,
1396 PREFIX_VEX_0F3A69,
1397 PREFIX_VEX_0F3A6A,
1398 PREFIX_VEX_0F3A6B,
1399 PREFIX_VEX_0F3A6C,
1400 PREFIX_VEX_0F3A6D,
1401 PREFIX_VEX_0F3A6E,
1402 PREFIX_VEX_0F3A6F,
1403 PREFIX_VEX_0F3A78,
1404 PREFIX_VEX_0F3A79,
1405 PREFIX_VEX_0F3A7A,
1406 PREFIX_VEX_0F3A7B,
1407 PREFIX_VEX_0F3A7C,
1408 PREFIX_VEX_0F3A7D,
1409 PREFIX_VEX_0F3A7E,
1410 PREFIX_VEX_0F3A7F,
48521003
IT
1411 PREFIX_VEX_0F3ACE,
1412 PREFIX_VEX_0F3ACF,
6c30d220 1413 PREFIX_VEX_0F3ADF,
43234a1e
L
1414 PREFIX_VEX_0F3AF0,
1415
1416 PREFIX_EVEX_0F10,
1417 PREFIX_EVEX_0F11,
1418 PREFIX_EVEX_0F12,
43234a1e 1419 PREFIX_EVEX_0F16,
43234a1e 1420 PREFIX_EVEX_0F2A,
43234a1e
L
1421 PREFIX_EVEX_0F2C,
1422 PREFIX_EVEX_0F2D,
1423 PREFIX_EVEX_0F2E,
1424 PREFIX_EVEX_0F2F,
1425 PREFIX_EVEX_0F51,
1426 PREFIX_EVEX_0F58,
1427 PREFIX_EVEX_0F59,
1428 PREFIX_EVEX_0F5A,
1429 PREFIX_EVEX_0F5B,
1430 PREFIX_EVEX_0F5C,
1431 PREFIX_EVEX_0F5D,
1432 PREFIX_EVEX_0F5E,
1433 PREFIX_EVEX_0F5F,
1ba585e8
IT
1434 PREFIX_EVEX_0F64,
1435 PREFIX_EVEX_0F65,
43234a1e 1436 PREFIX_EVEX_0F66,
43234a1e
L
1437 PREFIX_EVEX_0F6E,
1438 PREFIX_EVEX_0F6F,
1439 PREFIX_EVEX_0F70,
1ba585e8
IT
1440 PREFIX_EVEX_0F71_REG_2,
1441 PREFIX_EVEX_0F71_REG_4,
1442 PREFIX_EVEX_0F71_REG_6,
43234a1e
L
1443 PREFIX_EVEX_0F72_REG_0,
1444 PREFIX_EVEX_0F72_REG_1,
1445 PREFIX_EVEX_0F72_REG_2,
1446 PREFIX_EVEX_0F72_REG_4,
1447 PREFIX_EVEX_0F72_REG_6,
1448 PREFIX_EVEX_0F73_REG_2,
1ba585e8 1449 PREFIX_EVEX_0F73_REG_3,
43234a1e 1450 PREFIX_EVEX_0F73_REG_6,
1ba585e8
IT
1451 PREFIX_EVEX_0F73_REG_7,
1452 PREFIX_EVEX_0F74,
1453 PREFIX_EVEX_0F75,
43234a1e
L
1454 PREFIX_EVEX_0F76,
1455 PREFIX_EVEX_0F78,
1456 PREFIX_EVEX_0F79,
1457 PREFIX_EVEX_0F7A,
1458 PREFIX_EVEX_0F7B,
1459 PREFIX_EVEX_0F7E,
1460 PREFIX_EVEX_0F7F,
1461 PREFIX_EVEX_0FC2,
1ba585e8
IT
1462 PREFIX_EVEX_0FC4,
1463 PREFIX_EVEX_0FC5,
43234a1e
L
1464 PREFIX_EVEX_0FD6,
1465 PREFIX_EVEX_0FDB,
1466 PREFIX_EVEX_0FDF,
1467 PREFIX_EVEX_0FE2,
1468 PREFIX_EVEX_0FE6,
1469 PREFIX_EVEX_0FE7,
1470 PREFIX_EVEX_0FEB,
1471 PREFIX_EVEX_0FEF,
43234a1e 1472 PREFIX_EVEX_0F380D,
1ba585e8 1473 PREFIX_EVEX_0F3810,
43234a1e
L
1474 PREFIX_EVEX_0F3811,
1475 PREFIX_EVEX_0F3812,
1476 PREFIX_EVEX_0F3813,
1477 PREFIX_EVEX_0F3814,
1478 PREFIX_EVEX_0F3815,
1479 PREFIX_EVEX_0F3816,
43234a1e
L
1480 PREFIX_EVEX_0F3819,
1481 PREFIX_EVEX_0F381A,
1482 PREFIX_EVEX_0F381B,
1483 PREFIX_EVEX_0F381E,
1484 PREFIX_EVEX_0F381F,
1ba585e8 1485 PREFIX_EVEX_0F3820,
43234a1e
L
1486 PREFIX_EVEX_0F3821,
1487 PREFIX_EVEX_0F3822,
1488 PREFIX_EVEX_0F3823,
1489 PREFIX_EVEX_0F3824,
1490 PREFIX_EVEX_0F3825,
1ba585e8 1491 PREFIX_EVEX_0F3826,
43234a1e
L
1492 PREFIX_EVEX_0F3827,
1493 PREFIX_EVEX_0F3828,
1494 PREFIX_EVEX_0F3829,
1495 PREFIX_EVEX_0F382A,
1496 PREFIX_EVEX_0F382C,
1497 PREFIX_EVEX_0F382D,
1ba585e8 1498 PREFIX_EVEX_0F3830,
43234a1e
L
1499 PREFIX_EVEX_0F3831,
1500 PREFIX_EVEX_0F3832,
1501 PREFIX_EVEX_0F3833,
1502 PREFIX_EVEX_0F3834,
1503 PREFIX_EVEX_0F3835,
1504 PREFIX_EVEX_0F3836,
1505 PREFIX_EVEX_0F3837,
1ba585e8 1506 PREFIX_EVEX_0F3838,
43234a1e
L
1507 PREFIX_EVEX_0F3839,
1508 PREFIX_EVEX_0F383A,
1509 PREFIX_EVEX_0F383B,
1510 PREFIX_EVEX_0F383D,
1511 PREFIX_EVEX_0F383F,
1512 PREFIX_EVEX_0F3840,
1513 PREFIX_EVEX_0F3842,
1514 PREFIX_EVEX_0F3843,
1515 PREFIX_EVEX_0F3844,
1516 PREFIX_EVEX_0F3845,
1517 PREFIX_EVEX_0F3846,
1518 PREFIX_EVEX_0F3847,
1519 PREFIX_EVEX_0F384C,
1520 PREFIX_EVEX_0F384D,
1521 PREFIX_EVEX_0F384E,
1522 PREFIX_EVEX_0F384F,
8cfcb765
IT
1523 PREFIX_EVEX_0F3850,
1524 PREFIX_EVEX_0F3851,
47acf0bd
IT
1525 PREFIX_EVEX_0F3852,
1526 PREFIX_EVEX_0F3853,
ee6872be 1527 PREFIX_EVEX_0F3854,
620214f7 1528 PREFIX_EVEX_0F3855,
43234a1e
L
1529 PREFIX_EVEX_0F3859,
1530 PREFIX_EVEX_0F385A,
1531 PREFIX_EVEX_0F385B,
53467f57
IT
1532 PREFIX_EVEX_0F3862,
1533 PREFIX_EVEX_0F3863,
43234a1e
L
1534 PREFIX_EVEX_0F3864,
1535 PREFIX_EVEX_0F3865,
1ba585e8 1536 PREFIX_EVEX_0F3866,
9186c494 1537 PREFIX_EVEX_0F3868,
53467f57
IT
1538 PREFIX_EVEX_0F3870,
1539 PREFIX_EVEX_0F3871,
1540 PREFIX_EVEX_0F3872,
1541 PREFIX_EVEX_0F3873,
1ba585e8 1542 PREFIX_EVEX_0F3875,
43234a1e
L
1543 PREFIX_EVEX_0F3876,
1544 PREFIX_EVEX_0F3877,
1ba585e8
IT
1545 PREFIX_EVEX_0F387A,
1546 PREFIX_EVEX_0F387B,
43234a1e 1547 PREFIX_EVEX_0F387C,
1ba585e8 1548 PREFIX_EVEX_0F387D,
43234a1e
L
1549 PREFIX_EVEX_0F387E,
1550 PREFIX_EVEX_0F387F,
14f195c9 1551 PREFIX_EVEX_0F3883,
43234a1e
L
1552 PREFIX_EVEX_0F3888,
1553 PREFIX_EVEX_0F3889,
1554 PREFIX_EVEX_0F388A,
1555 PREFIX_EVEX_0F388B,
1ba585e8 1556 PREFIX_EVEX_0F388D,
ee6872be 1557 PREFIX_EVEX_0F388F,
43234a1e
L
1558 PREFIX_EVEX_0F3890,
1559 PREFIX_EVEX_0F3891,
1560 PREFIX_EVEX_0F3892,
1561 PREFIX_EVEX_0F3893,
43234a1e
L
1562 PREFIX_EVEX_0F389A,
1563 PREFIX_EVEX_0F389B,
43234a1e
L
1564 PREFIX_EVEX_0F38A0,
1565 PREFIX_EVEX_0F38A1,
1566 PREFIX_EVEX_0F38A2,
1567 PREFIX_EVEX_0F38A3,
43234a1e
L
1568 PREFIX_EVEX_0F38AA,
1569 PREFIX_EVEX_0F38AB,
2cc1b5aa
IT
1570 PREFIX_EVEX_0F38B4,
1571 PREFIX_EVEX_0F38B5,
43234a1e
L
1572 PREFIX_EVEX_0F38C4,
1573 PREFIX_EVEX_0F38C6_REG_1,
1574 PREFIX_EVEX_0F38C6_REG_2,
1575 PREFIX_EVEX_0F38C6_REG_5,
1576 PREFIX_EVEX_0F38C6_REG_6,
1577 PREFIX_EVEX_0F38C7_REG_1,
1578 PREFIX_EVEX_0F38C7_REG_2,
1579 PREFIX_EVEX_0F38C7_REG_5,
1580 PREFIX_EVEX_0F38C7_REG_6,
1581 PREFIX_EVEX_0F38C8,
1582 PREFIX_EVEX_0F38CA,
1583 PREFIX_EVEX_0F38CB,
1584 PREFIX_EVEX_0F38CC,
1585 PREFIX_EVEX_0F38CD,
1586
1587 PREFIX_EVEX_0F3A00,
1588 PREFIX_EVEX_0F3A01,
1589 PREFIX_EVEX_0F3A03,
43234a1e
L
1590 PREFIX_EVEX_0F3A05,
1591 PREFIX_EVEX_0F3A08,
1592 PREFIX_EVEX_0F3A09,
1593 PREFIX_EVEX_0F3A0A,
1594 PREFIX_EVEX_0F3A0B,
1ba585e8
IT
1595 PREFIX_EVEX_0F3A14,
1596 PREFIX_EVEX_0F3A15,
90a915bf 1597 PREFIX_EVEX_0F3A16,
43234a1e
L
1598 PREFIX_EVEX_0F3A17,
1599 PREFIX_EVEX_0F3A18,
1600 PREFIX_EVEX_0F3A19,
1601 PREFIX_EVEX_0F3A1A,
1602 PREFIX_EVEX_0F3A1B,
43234a1e
L
1603 PREFIX_EVEX_0F3A1E,
1604 PREFIX_EVEX_0F3A1F,
1ba585e8 1605 PREFIX_EVEX_0F3A20,
43234a1e 1606 PREFIX_EVEX_0F3A21,
90a915bf 1607 PREFIX_EVEX_0F3A22,
43234a1e
L
1608 PREFIX_EVEX_0F3A23,
1609 PREFIX_EVEX_0F3A25,
1610 PREFIX_EVEX_0F3A26,
1611 PREFIX_EVEX_0F3A27,
1612 PREFIX_EVEX_0F3A38,
1613 PREFIX_EVEX_0F3A39,
1614 PREFIX_EVEX_0F3A3A,
1615 PREFIX_EVEX_0F3A3B,
1ba585e8
IT
1616 PREFIX_EVEX_0F3A3E,
1617 PREFIX_EVEX_0F3A3F,
1618 PREFIX_EVEX_0F3A42,
43234a1e 1619 PREFIX_EVEX_0F3A43,
90a915bf
IT
1620 PREFIX_EVEX_0F3A50,
1621 PREFIX_EVEX_0F3A51,
43234a1e 1622 PREFIX_EVEX_0F3A54,
90a915bf
IT
1623 PREFIX_EVEX_0F3A55,
1624 PREFIX_EVEX_0F3A56,
1625 PREFIX_EVEX_0F3A57,
1626 PREFIX_EVEX_0F3A66,
53467f57
IT
1627 PREFIX_EVEX_0F3A67,
1628 PREFIX_EVEX_0F3A70,
1629 PREFIX_EVEX_0F3A71,
1630 PREFIX_EVEX_0F3A72,
48521003 1631 PREFIX_EVEX_0F3A73,
51e7da1b 1632};
4e7d34a6 1633
51e7da1b
L
1634enum
1635{
1636 X86_64_06 = 0,
3873ba12 1637 X86_64_07,
1673df32 1638 X86_64_0E,
3873ba12
L
1639 X86_64_16,
1640 X86_64_17,
1641 X86_64_1E,
1642 X86_64_1F,
1643 X86_64_27,
1644 X86_64_2F,
1645 X86_64_37,
1646 X86_64_3F,
1647 X86_64_60,
1648 X86_64_61,
1649 X86_64_62,
1650 X86_64_63,
1651 X86_64_6D,
1652 X86_64_6F,
d039fef3 1653 X86_64_82,
3873ba12 1654 X86_64_9A,
aeab2b26
JB
1655 X86_64_C2,
1656 X86_64_C3,
3873ba12
L
1657 X86_64_C4,
1658 X86_64_C5,
1659 X86_64_CE,
1660 X86_64_D4,
1661 X86_64_D5,
a72d2af2
L
1662 X86_64_E8,
1663 X86_64_E9,
3873ba12
L
1664 X86_64_EA,
1665 X86_64_0F01_REG_0,
1666 X86_64_0F01_REG_1,
1667 X86_64_0F01_REG_2,
260cd341
LC
1668 X86_64_0F01_REG_3,
1669 X86_64_VEX_0F3849,
1670 X86_64_VEX_0F384B,
1671 X86_64_VEX_0F385C,
1672 X86_64_VEX_0F385E
51e7da1b 1673};
4e7d34a6 1674
51e7da1b
L
1675enum
1676{
1677 THREE_BYTE_0F38 = 0,
1f334aeb 1678 THREE_BYTE_0F3A
51e7da1b 1679};
4e7d34a6 1680
f88c9eb0
SP
1681enum
1682{
5dd85c99
SP
1683 XOP_08 = 0,
1684 XOP_09,
f88c9eb0
SP
1685 XOP_0A
1686};
1687
51e7da1b
L
1688enum
1689{
1690 VEX_0F = 0,
3873ba12
L
1691 VEX_0F38,
1692 VEX_0F3A
51e7da1b 1693};
c0f3af97 1694
43234a1e
L
1695enum
1696{
1697 EVEX_0F = 0,
1698 EVEX_0F38,
1699 EVEX_0F3A
1700};
1701
51e7da1b
L
1702enum
1703{
ec6f095a 1704 VEX_LEN_0F12_P_0_M_0 = 0,
592a252b 1705 VEX_LEN_0F12_P_0_M_1,
18897deb 1706#define VEX_LEN_0F12_P_2_M_0 VEX_LEN_0F12_P_0_M_0
592a252b
L
1707 VEX_LEN_0F13_M_0,
1708 VEX_LEN_0F16_P_0_M_0,
1709 VEX_LEN_0F16_P_0_M_1,
18897deb 1710#define VEX_LEN_0F16_P_2_M_0 VEX_LEN_0F16_P_0_M_0
592a252b 1711 VEX_LEN_0F17_M_0,
43234a1e 1712 VEX_LEN_0F41_P_0,
1ba585e8 1713 VEX_LEN_0F41_P_2,
43234a1e 1714 VEX_LEN_0F42_P_0,
1ba585e8 1715 VEX_LEN_0F42_P_2,
43234a1e 1716 VEX_LEN_0F44_P_0,
1ba585e8 1717 VEX_LEN_0F44_P_2,
43234a1e 1718 VEX_LEN_0F45_P_0,
1ba585e8 1719 VEX_LEN_0F45_P_2,
43234a1e 1720 VEX_LEN_0F46_P_0,
1ba585e8 1721 VEX_LEN_0F46_P_2,
43234a1e 1722 VEX_LEN_0F47_P_0,
1ba585e8
IT
1723 VEX_LEN_0F47_P_2,
1724 VEX_LEN_0F4A_P_0,
1725 VEX_LEN_0F4A_P_2,
1726 VEX_LEN_0F4B_P_0,
43234a1e 1727 VEX_LEN_0F4B_P_2,
592a252b 1728 VEX_LEN_0F6E_P_2,
ec6f095a 1729 VEX_LEN_0F77_P_0,
592a252b
L
1730 VEX_LEN_0F7E_P_1,
1731 VEX_LEN_0F7E_P_2,
43234a1e 1732 VEX_LEN_0F90_P_0,
1ba585e8 1733 VEX_LEN_0F90_P_2,
43234a1e 1734 VEX_LEN_0F91_P_0,
1ba585e8 1735 VEX_LEN_0F91_P_2,
43234a1e 1736 VEX_LEN_0F92_P_0,
90a915bf 1737 VEX_LEN_0F92_P_2,
1ba585e8 1738 VEX_LEN_0F92_P_3,
43234a1e 1739 VEX_LEN_0F93_P_0,
90a915bf 1740 VEX_LEN_0F93_P_2,
1ba585e8 1741 VEX_LEN_0F93_P_3,
43234a1e 1742 VEX_LEN_0F98_P_0,
1ba585e8
IT
1743 VEX_LEN_0F98_P_2,
1744 VEX_LEN_0F99_P_0,
1745 VEX_LEN_0F99_P_2,
592a252b
L
1746 VEX_LEN_0FAE_R_2_M_0,
1747 VEX_LEN_0FAE_R_3_M_0,
592a252b
L
1748 VEX_LEN_0FC4_P_2,
1749 VEX_LEN_0FC5_P_2,
592a252b 1750 VEX_LEN_0FD6_P_2,
592a252b 1751 VEX_LEN_0FF7_P_2,
6c30d220
L
1752 VEX_LEN_0F3816_P_2,
1753 VEX_LEN_0F3819_P_2,
592a252b 1754 VEX_LEN_0F381A_P_2_M_0,
6c30d220 1755 VEX_LEN_0F3836_P_2,
592a252b 1756 VEX_LEN_0F3841_P_2,
260cd341
LC
1757 VEX_LEN_0F3849_X86_64_P_0_W_0_M_0,
1758 VEX_LEN_0F3849_X86_64_P_0_W_0_M_1_REG_0_RM_0,
1759 VEX_LEN_0F3849_X86_64_P_2_W_0_M_0,
1760 VEX_LEN_0F3849_X86_64_P_3_W_0_M_0,
1761 VEX_LEN_0F384B_X86_64_P_1_W_0_M_0,
1762 VEX_LEN_0F384B_X86_64_P_2_W_0_M_0,
1763 VEX_LEN_0F384B_X86_64_P_3_W_0_M_0,
6c30d220 1764 VEX_LEN_0F385A_P_2_M_0,
260cd341
LC
1765 VEX_LEN_0F385C_X86_64_P_1_W_0_M_0,
1766 VEX_LEN_0F385E_X86_64_P_0_W_0_M_0,
1767 VEX_LEN_0F385E_X86_64_P_1_W_0_M_0,
1768 VEX_LEN_0F385E_X86_64_P_2_W_0_M_0,
1769 VEX_LEN_0F385E_X86_64_P_3_W_0_M_0,
592a252b 1770 VEX_LEN_0F38DB_P_2,
f12dc422
L
1771 VEX_LEN_0F38F2_P_0,
1772 VEX_LEN_0F38F3_R_1_P_0,
1773 VEX_LEN_0F38F3_R_2_P_0,
1774 VEX_LEN_0F38F3_R_3_P_0,
6c30d220
L
1775 VEX_LEN_0F38F5_P_0,
1776 VEX_LEN_0F38F5_P_1,
1777 VEX_LEN_0F38F5_P_3,
1778 VEX_LEN_0F38F6_P_3,
f12dc422 1779 VEX_LEN_0F38F7_P_0,
6c30d220
L
1780 VEX_LEN_0F38F7_P_1,
1781 VEX_LEN_0F38F7_P_2,
1782 VEX_LEN_0F38F7_P_3,
1783 VEX_LEN_0F3A00_P_2,
1784 VEX_LEN_0F3A01_P_2,
592a252b 1785 VEX_LEN_0F3A06_P_2,
592a252b
L
1786 VEX_LEN_0F3A14_P_2,
1787 VEX_LEN_0F3A15_P_2,
1788 VEX_LEN_0F3A16_P_2,
1789 VEX_LEN_0F3A17_P_2,
1790 VEX_LEN_0F3A18_P_2,
1791 VEX_LEN_0F3A19_P_2,
1792 VEX_LEN_0F3A20_P_2,
1793 VEX_LEN_0F3A21_P_2,
1794 VEX_LEN_0F3A22_P_2,
43234a1e 1795 VEX_LEN_0F3A30_P_2,
1ba585e8 1796 VEX_LEN_0F3A31_P_2,
43234a1e 1797 VEX_LEN_0F3A32_P_2,
1ba585e8 1798 VEX_LEN_0F3A33_P_2,
6c30d220
L
1799 VEX_LEN_0F3A38_P_2,
1800 VEX_LEN_0F3A39_P_2,
592a252b 1801 VEX_LEN_0F3A41_P_2,
6c30d220 1802 VEX_LEN_0F3A46_P_2,
592a252b
L
1803 VEX_LEN_0F3A60_P_2,
1804 VEX_LEN_0F3A61_P_2,
1805 VEX_LEN_0F3A62_P_2,
1806 VEX_LEN_0F3A63_P_2,
592a252b 1807 VEX_LEN_0F3ADF_P_2,
6c30d220 1808 VEX_LEN_0F3AF0_P_3,
467bbef0
JB
1809 VEX_LEN_0FXOP_08_85,
1810 VEX_LEN_0FXOP_08_86,
1811 VEX_LEN_0FXOP_08_87,
1812 VEX_LEN_0FXOP_08_8E,
1813 VEX_LEN_0FXOP_08_8F,
1814 VEX_LEN_0FXOP_08_95,
1815 VEX_LEN_0FXOP_08_96,
1816 VEX_LEN_0FXOP_08_97,
1817 VEX_LEN_0FXOP_08_9E,
1818 VEX_LEN_0FXOP_08_9F,
1819 VEX_LEN_0FXOP_08_A3,
1820 VEX_LEN_0FXOP_08_A6,
1821 VEX_LEN_0FXOP_08_B6,
1822 VEX_LEN_0FXOP_08_C0,
1823 VEX_LEN_0FXOP_08_C1,
1824 VEX_LEN_0FXOP_08_C2,
1825 VEX_LEN_0FXOP_08_C3,
ff688e1f
L
1826 VEX_LEN_0FXOP_08_CC,
1827 VEX_LEN_0FXOP_08_CD,
1828 VEX_LEN_0FXOP_08_CE,
1829 VEX_LEN_0FXOP_08_CF,
1830 VEX_LEN_0FXOP_08_EC,
1831 VEX_LEN_0FXOP_08_ED,
1832 VEX_LEN_0FXOP_08_EE,
1833 VEX_LEN_0FXOP_08_EF,
467bbef0
JB
1834 VEX_LEN_0FXOP_09_01,
1835 VEX_LEN_0FXOP_09_02,
1836 VEX_LEN_0FXOP_09_12_M_1,
b5b098c2
JB
1837 VEX_LEN_0FXOP_09_82_W_0,
1838 VEX_LEN_0FXOP_09_83_W_0,
467bbef0
JB
1839 VEX_LEN_0FXOP_09_90,
1840 VEX_LEN_0FXOP_09_91,
1841 VEX_LEN_0FXOP_09_92,
1842 VEX_LEN_0FXOP_09_93,
1843 VEX_LEN_0FXOP_09_94,
1844 VEX_LEN_0FXOP_09_95,
1845 VEX_LEN_0FXOP_09_96,
1846 VEX_LEN_0FXOP_09_97,
1847 VEX_LEN_0FXOP_09_98,
1848 VEX_LEN_0FXOP_09_99,
1849 VEX_LEN_0FXOP_09_9A,
1850 VEX_LEN_0FXOP_09_9B,
1851 VEX_LEN_0FXOP_09_C1,
1852 VEX_LEN_0FXOP_09_C2,
1853 VEX_LEN_0FXOP_09_C3,
1854 VEX_LEN_0FXOP_09_C6,
1855 VEX_LEN_0FXOP_09_C7,
1856 VEX_LEN_0FXOP_09_CB,
1857 VEX_LEN_0FXOP_09_D1,
1858 VEX_LEN_0FXOP_09_D2,
1859 VEX_LEN_0FXOP_09_D3,
1860 VEX_LEN_0FXOP_09_D6,
1861 VEX_LEN_0FXOP_09_D7,
1862 VEX_LEN_0FXOP_09_DB,
1863 VEX_LEN_0FXOP_09_E1,
1864 VEX_LEN_0FXOP_09_E2,
1865 VEX_LEN_0FXOP_09_E3,
1866 VEX_LEN_0FXOP_0A_12,
51e7da1b 1867};
c0f3af97 1868
04e2a182
L
1869enum
1870{
1871 EVEX_LEN_0F6E_P_2 = 0,
1872 EVEX_LEN_0F7E_P_1,
1873 EVEX_LEN_0F7E_P_2,
e74d9fa9
JB
1874 EVEX_LEN_0FC4_P_2,
1875 EVEX_LEN_0FC5_P_2,
12efd68d 1876 EVEX_LEN_0FD6_P_2,
3a57774c 1877 EVEX_LEN_0F3816_P_2,
f0a6222e
L
1878 EVEX_LEN_0F3819_P_2_W_0,
1879 EVEX_LEN_0F3819_P_2_W_1,
bc152a17
JB
1880 EVEX_LEN_0F381A_P_2_W_0_M_0,
1881 EVEX_LEN_0F381A_P_2_W_1_M_0,
1882 EVEX_LEN_0F381B_P_2_W_0_M_0,
1883 EVEX_LEN_0F381B_P_2_W_1_M_0,
3a57774c 1884 EVEX_LEN_0F3836_P_2,
bc152a17
JB
1885 EVEX_LEN_0F385A_P_2_W_0_M_0,
1886 EVEX_LEN_0F385A_P_2_W_1_M_0,
1887 EVEX_LEN_0F385B_P_2_W_0_M_0,
1888 EVEX_LEN_0F385B_P_2_W_1_M_0,
e395f487
L
1889 EVEX_LEN_0F38C6_REG_1_PREFIX_2,
1890 EVEX_LEN_0F38C6_REG_2_PREFIX_2,
1891 EVEX_LEN_0F38C6_REG_5_PREFIX_2,
1892 EVEX_LEN_0F38C6_REG_6_PREFIX_2,
1893 EVEX_LEN_0F38C7_R_1_P_2_W_0,
1894 EVEX_LEN_0F38C7_R_1_P_2_W_1,
1895 EVEX_LEN_0F38C7_R_2_P_2_W_0,
1896 EVEX_LEN_0F38C7_R_2_P_2_W_1,
1897 EVEX_LEN_0F38C7_R_5_P_2_W_0,
1898 EVEX_LEN_0F38C7_R_5_P_2_W_1,
1899 EVEX_LEN_0F38C7_R_6_P_2_W_0,
1900 EVEX_LEN_0F38C7_R_6_P_2_W_1,
3a57774c
JB
1901 EVEX_LEN_0F3A00_P_2_W_1,
1902 EVEX_LEN_0F3A01_P_2_W_1,
e74d9fa9
JB
1903 EVEX_LEN_0F3A14_P_2,
1904 EVEX_LEN_0F3A15_P_2,
1905 EVEX_LEN_0F3A16_P_2,
1906 EVEX_LEN_0F3A17_P_2,
12efd68d
L
1907 EVEX_LEN_0F3A18_P_2_W_0,
1908 EVEX_LEN_0F3A18_P_2_W_1,
1909 EVEX_LEN_0F3A19_P_2_W_0,
1910 EVEX_LEN_0F3A19_P_2_W_1,
1911 EVEX_LEN_0F3A1A_P_2_W_0,
1912 EVEX_LEN_0F3A1A_P_2_W_1,
1913 EVEX_LEN_0F3A1B_P_2_W_0,
6e1c90b7 1914 EVEX_LEN_0F3A1B_P_2_W_1,
e74d9fa9
JB
1915 EVEX_LEN_0F3A20_P_2,
1916 EVEX_LEN_0F3A21_P_2_W_0,
1917 EVEX_LEN_0F3A22_P_2,
6e1c90b7
L
1918 EVEX_LEN_0F3A23_P_2_W_0,
1919 EVEX_LEN_0F3A23_P_2_W_1,
1920 EVEX_LEN_0F3A38_P_2_W_0,
1921 EVEX_LEN_0F3A38_P_2_W_1,
1922 EVEX_LEN_0F3A39_P_2_W_0,
1923 EVEX_LEN_0F3A39_P_2_W_1,
1924 EVEX_LEN_0F3A3A_P_2_W_0,
1925 EVEX_LEN_0F3A3A_P_2_W_1,
1926 EVEX_LEN_0F3A3B_P_2_W_0,
1927 EVEX_LEN_0F3A3B_P_2_W_1,
1928 EVEX_LEN_0F3A43_P_2_W_0,
1929 EVEX_LEN_0F3A43_P_2_W_1
04e2a182
L
1930};
1931
9e30b8e0
L
1932enum
1933{
ec6f095a 1934 VEX_W_0F41_P_0_LEN_1 = 0,
1ba585e8 1935 VEX_W_0F41_P_2_LEN_1,
43234a1e 1936 VEX_W_0F42_P_0_LEN_1,
1ba585e8 1937 VEX_W_0F42_P_2_LEN_1,
43234a1e 1938 VEX_W_0F44_P_0_LEN_0,
1ba585e8 1939 VEX_W_0F44_P_2_LEN_0,
43234a1e 1940 VEX_W_0F45_P_0_LEN_1,
1ba585e8 1941 VEX_W_0F45_P_2_LEN_1,
43234a1e 1942 VEX_W_0F46_P_0_LEN_1,
1ba585e8 1943 VEX_W_0F46_P_2_LEN_1,
43234a1e 1944 VEX_W_0F47_P_0_LEN_1,
1ba585e8
IT
1945 VEX_W_0F47_P_2_LEN_1,
1946 VEX_W_0F4A_P_0_LEN_1,
1947 VEX_W_0F4A_P_2_LEN_1,
1948 VEX_W_0F4B_P_0_LEN_1,
43234a1e 1949 VEX_W_0F4B_P_2_LEN_1,
43234a1e 1950 VEX_W_0F90_P_0_LEN_0,
1ba585e8 1951 VEX_W_0F90_P_2_LEN_0,
43234a1e 1952 VEX_W_0F91_P_0_LEN_0,
1ba585e8 1953 VEX_W_0F91_P_2_LEN_0,
43234a1e 1954 VEX_W_0F92_P_0_LEN_0,
90a915bf 1955 VEX_W_0F92_P_2_LEN_0,
43234a1e 1956 VEX_W_0F93_P_0_LEN_0,
90a915bf 1957 VEX_W_0F93_P_2_LEN_0,
43234a1e 1958 VEX_W_0F98_P_0_LEN_0,
1ba585e8
IT
1959 VEX_W_0F98_P_2_LEN_0,
1960 VEX_W_0F99_P_0_LEN_0,
1961 VEX_W_0F99_P_2_LEN_0,
592a252b
L
1962 VEX_W_0F380C_P_2,
1963 VEX_W_0F380D_P_2,
1964 VEX_W_0F380E_P_2,
1965 VEX_W_0F380F_P_2,
6431c801 1966 VEX_W_0F3813_P_2,
6c30d220 1967 VEX_W_0F3816_P_2,
6c30d220
L
1968 VEX_W_0F3818_P_2,
1969 VEX_W_0F3819_P_2,
89e65d17 1970 VEX_W_0F381A_P_2_M_0_L_0,
592a252b
L
1971 VEX_W_0F382C_P_2_M_0,
1972 VEX_W_0F382D_P_2_M_0,
1973 VEX_W_0F382E_P_2_M_0,
1974 VEX_W_0F382F_P_2_M_0,
6c30d220 1975 VEX_W_0F3836_P_2,
6c30d220 1976 VEX_W_0F3846_P_2,
260cd341
LC
1977 VEX_W_0F3849_X86_64_P_0,
1978 VEX_W_0F3849_X86_64_P_2,
1979 VEX_W_0F3849_X86_64_P_3,
1980 VEX_W_0F384B_X86_64_P_1,
1981 VEX_W_0F384B_X86_64_P_2,
1982 VEX_W_0F384B_X86_64_P_3,
6c30d220
L
1983 VEX_W_0F3858_P_2,
1984 VEX_W_0F3859_P_2,
89e65d17 1985 VEX_W_0F385A_P_2_M_0_L_0,
260cd341
LC
1986 VEX_W_0F385C_X86_64_P_1,
1987 VEX_W_0F385E_X86_64_P_0,
1988 VEX_W_0F385E_X86_64_P_1,
1989 VEX_W_0F385E_X86_64_P_2,
1990 VEX_W_0F385E_X86_64_P_3,
6c30d220
L
1991 VEX_W_0F3878_P_2,
1992 VEX_W_0F3879_P_2,
48521003 1993 VEX_W_0F38CF_P_2,
6c30d220
L
1994 VEX_W_0F3A00_P_2,
1995 VEX_W_0F3A01_P_2,
1996 VEX_W_0F3A02_P_2,
592a252b
L
1997 VEX_W_0F3A04_P_2,
1998 VEX_W_0F3A05_P_2,
89e65d17
JB
1999 VEX_W_0F3A06_P_2_L_0,
2000 VEX_W_0F3A18_P_2_L_0,
2001 VEX_W_0F3A19_P_2_L_0,
6431c801 2002 VEX_W_0F3A1D_P_2,
43234a1e 2003 VEX_W_0F3A30_P_2_LEN_0,
1ba585e8 2004 VEX_W_0F3A31_P_2_LEN_0,
43234a1e 2005 VEX_W_0F3A32_P_2_LEN_0,
1ba585e8 2006 VEX_W_0F3A33_P_2_LEN_0,
89e65d17
JB
2007 VEX_W_0F3A38_P_2_L_0,
2008 VEX_W_0F3A39_P_2_L_0,
2009 VEX_W_0F3A46_P_2_L_0,
592a252b
L
2010 VEX_W_0F3A4A_P_2,
2011 VEX_W_0F3A4B_P_2,
2012 VEX_W_0F3A4C_P_2,
48521003
IT
2013 VEX_W_0F3ACE_P_2,
2014 VEX_W_0F3ACF_P_2,
43234a1e 2015
467bbef0
JB
2016 VEX_W_0FXOP_08_85_L_0,
2017 VEX_W_0FXOP_08_86_L_0,
2018 VEX_W_0FXOP_08_87_L_0,
2019 VEX_W_0FXOP_08_8E_L_0,
2020 VEX_W_0FXOP_08_8F_L_0,
2021 VEX_W_0FXOP_08_95_L_0,
2022 VEX_W_0FXOP_08_96_L_0,
2023 VEX_W_0FXOP_08_97_L_0,
2024 VEX_W_0FXOP_08_9E_L_0,
2025 VEX_W_0FXOP_08_9F_L_0,
2026 VEX_W_0FXOP_08_A6_L_0,
2027 VEX_W_0FXOP_08_B6_L_0,
2028 VEX_W_0FXOP_08_C0_L_0,
2029 VEX_W_0FXOP_08_C1_L_0,
2030 VEX_W_0FXOP_08_C2_L_0,
2031 VEX_W_0FXOP_08_C3_L_0,
2032 VEX_W_0FXOP_08_CC_L_0,
2033 VEX_W_0FXOP_08_CD_L_0,
2034 VEX_W_0FXOP_08_CE_L_0,
2035 VEX_W_0FXOP_08_CF_L_0,
2036 VEX_W_0FXOP_08_EC_L_0,
2037 VEX_W_0FXOP_08_ED_L_0,
2038 VEX_W_0FXOP_08_EE_L_0,
2039 VEX_W_0FXOP_08_EF_L_0,
2040
b5b098c2
JB
2041 VEX_W_0FXOP_09_80,
2042 VEX_W_0FXOP_09_81,
2043 VEX_W_0FXOP_09_82,
2044 VEX_W_0FXOP_09_83,
467bbef0
JB
2045 VEX_W_0FXOP_09_C1_L_0,
2046 VEX_W_0FXOP_09_C2_L_0,
2047 VEX_W_0FXOP_09_C3_L_0,
2048 VEX_W_0FXOP_09_C6_L_0,
2049 VEX_W_0FXOP_09_C7_L_0,
2050 VEX_W_0FXOP_09_CB_L_0,
2051 VEX_W_0FXOP_09_D1_L_0,
2052 VEX_W_0FXOP_09_D2_L_0,
2053 VEX_W_0FXOP_09_D3_L_0,
2054 VEX_W_0FXOP_09_D6_L_0,
2055 VEX_W_0FXOP_09_D7_L_0,
2056 VEX_W_0FXOP_09_DB_L_0,
2057 VEX_W_0FXOP_09_E1_L_0,
2058 VEX_W_0FXOP_09_E2_L_0,
2059 VEX_W_0FXOP_09_E3_L_0,
b5b098c2 2060
36cc073e 2061 EVEX_W_0F10_P_1,
36cc073e 2062 EVEX_W_0F10_P_3,
36cc073e 2063 EVEX_W_0F11_P_1,
36cc073e 2064 EVEX_W_0F11_P_3,
43234a1e
L
2065 EVEX_W_0F12_P_0_M_1,
2066 EVEX_W_0F12_P_1,
43234a1e 2067 EVEX_W_0F12_P_3,
43234a1e
L
2068 EVEX_W_0F16_P_0_M_1,
2069 EVEX_W_0F16_P_1,
43234a1e 2070 EVEX_W_0F2A_P_3,
43234a1e 2071 EVEX_W_0F51_P_1,
43234a1e 2072 EVEX_W_0F51_P_3,
43234a1e 2073 EVEX_W_0F58_P_1,
43234a1e 2074 EVEX_W_0F58_P_3,
43234a1e 2075 EVEX_W_0F59_P_1,
43234a1e
L
2076 EVEX_W_0F59_P_3,
2077 EVEX_W_0F5A_P_0,
2078 EVEX_W_0F5A_P_1,
2079 EVEX_W_0F5A_P_2,
2080 EVEX_W_0F5A_P_3,
2081 EVEX_W_0F5B_P_0,
2082 EVEX_W_0F5B_P_1,
2083 EVEX_W_0F5B_P_2,
43234a1e 2084 EVEX_W_0F5C_P_1,
43234a1e 2085 EVEX_W_0F5C_P_3,
43234a1e 2086 EVEX_W_0F5D_P_1,
43234a1e 2087 EVEX_W_0F5D_P_3,
43234a1e 2088 EVEX_W_0F5E_P_1,
43234a1e 2089 EVEX_W_0F5E_P_3,
43234a1e 2090 EVEX_W_0F5F_P_1,
43234a1e 2091 EVEX_W_0F5F_P_3,
fedfb81e 2092 EVEX_W_0F62,
43234a1e 2093 EVEX_W_0F66_P_2,
fedfb81e
JB
2094 EVEX_W_0F6A,
2095 EVEX_W_0F6B,
2096 EVEX_W_0F6C,
2097 EVEX_W_0F6D,
43234a1e
L
2098 EVEX_W_0F6F_P_1,
2099 EVEX_W_0F6F_P_2,
1ba585e8 2100 EVEX_W_0F6F_P_3,
43234a1e
L
2101 EVEX_W_0F70_P_2,
2102 EVEX_W_0F72_R_2_P_2,
2103 EVEX_W_0F72_R_6_P_2,
2104 EVEX_W_0F73_R_2_P_2,
2105 EVEX_W_0F73_R_6_P_2,
2106 EVEX_W_0F76_P_2,
2107 EVEX_W_0F78_P_0,
90a915bf 2108 EVEX_W_0F78_P_2,
43234a1e 2109 EVEX_W_0F79_P_0,
90a915bf 2110 EVEX_W_0F79_P_2,
43234a1e 2111 EVEX_W_0F7A_P_1,
90a915bf 2112 EVEX_W_0F7A_P_2,
43234a1e 2113 EVEX_W_0F7A_P_3,
90a915bf 2114 EVEX_W_0F7B_P_2,
43234a1e
L
2115 EVEX_W_0F7B_P_3,
2116 EVEX_W_0F7E_P_1,
43234a1e
L
2117 EVEX_W_0F7F_P_1,
2118 EVEX_W_0F7F_P_2,
1ba585e8 2119 EVEX_W_0F7F_P_3,
43234a1e 2120 EVEX_W_0FC2_P_1,
43234a1e 2121 EVEX_W_0FC2_P_3,
fedfb81e
JB
2122 EVEX_W_0FD2,
2123 EVEX_W_0FD3,
2124 EVEX_W_0FD4,
43234a1e
L
2125 EVEX_W_0FD6_P_2,
2126 EVEX_W_0FE6_P_1,
2127 EVEX_W_0FE6_P_2,
2128 EVEX_W_0FE6_P_3,
2129 EVEX_W_0FE7_P_2,
fedfb81e
JB
2130 EVEX_W_0FF2,
2131 EVEX_W_0FF3,
2132 EVEX_W_0FF4,
2133 EVEX_W_0FFA,
2134 EVEX_W_0FFB,
2135 EVEX_W_0FFE,
43234a1e 2136 EVEX_W_0F380D_P_2,
1ba585e8
IT
2137 EVEX_W_0F3810_P_1,
2138 EVEX_W_0F3810_P_2,
43234a1e 2139 EVEX_W_0F3811_P_1,
1ba585e8 2140 EVEX_W_0F3811_P_2,
43234a1e 2141 EVEX_W_0F3812_P_1,
1ba585e8 2142 EVEX_W_0F3812_P_2,
43234a1e
L
2143 EVEX_W_0F3813_P_1,
2144 EVEX_W_0F3813_P_2,
2145 EVEX_W_0F3814_P_1,
2146 EVEX_W_0F3815_P_1,
43234a1e
L
2147 EVEX_W_0F3819_P_2,
2148 EVEX_W_0F381A_P_2,
2149 EVEX_W_0F381B_P_2,
2150 EVEX_W_0F381E_P_2,
2151 EVEX_W_0F381F_P_2,
1ba585e8 2152 EVEX_W_0F3820_P_1,
43234a1e
L
2153 EVEX_W_0F3821_P_1,
2154 EVEX_W_0F3822_P_1,
2155 EVEX_W_0F3823_P_1,
2156 EVEX_W_0F3824_P_1,
2157 EVEX_W_0F3825_P_1,
2158 EVEX_W_0F3825_P_2,
2159 EVEX_W_0F3828_P_2,
2160 EVEX_W_0F3829_P_2,
2161 EVEX_W_0F382A_P_1,
2162 EVEX_W_0F382A_P_2,
fedfb81e 2163 EVEX_W_0F382B,
1ba585e8 2164 EVEX_W_0F3830_P_1,
43234a1e
L
2165 EVEX_W_0F3831_P_1,
2166 EVEX_W_0F3832_P_1,
2167 EVEX_W_0F3833_P_1,
2168 EVEX_W_0F3834_P_1,
2169 EVEX_W_0F3835_P_1,
2170 EVEX_W_0F3835_P_2,
2171 EVEX_W_0F3837_P_2,
2172 EVEX_W_0F383A_P_1,
d6aab7a1 2173 EVEX_W_0F3852_P_1,
43234a1e
L
2174 EVEX_W_0F3859_P_2,
2175 EVEX_W_0F385A_P_2,
2176 EVEX_W_0F385B_P_2,
53467f57 2177 EVEX_W_0F3870_P_2,
d6aab7a1 2178 EVEX_W_0F3872_P_1,
53467f57 2179 EVEX_W_0F3872_P_2,
d6aab7a1 2180 EVEX_W_0F3872_P_3,
1ba585e8
IT
2181 EVEX_W_0F387A_P_2,
2182 EVEX_W_0F387B_P_2,
14f195c9 2183 EVEX_W_0F3883_P_2,
43234a1e
L
2184 EVEX_W_0F3891_P_2,
2185 EVEX_W_0F3893_P_2,
2186 EVEX_W_0F38A1_P_2,
2187 EVEX_W_0F38A3_P_2,
2188 EVEX_W_0F38C7_R_1_P_2,
2189 EVEX_W_0F38C7_R_2_P_2,
2190 EVEX_W_0F38C7_R_5_P_2,
2191 EVEX_W_0F38C7_R_6_P_2,
2192
2193 EVEX_W_0F3A00_P_2,
2194 EVEX_W_0F3A01_P_2,
43234a1e
L
2195 EVEX_W_0F3A05_P_2,
2196 EVEX_W_0F3A08_P_2,
2197 EVEX_W_0F3A09_P_2,
2198 EVEX_W_0F3A0A_P_2,
2199 EVEX_W_0F3A0B_P_2,
2200 EVEX_W_0F3A18_P_2,
2201 EVEX_W_0F3A19_P_2,
2202 EVEX_W_0F3A1A_P_2,
2203 EVEX_W_0F3A1B_P_2,
43234a1e
L
2204 EVEX_W_0F3A21_P_2,
2205 EVEX_W_0F3A23_P_2,
2206 EVEX_W_0F3A38_P_2,
2207 EVEX_W_0F3A39_P_2,
2208 EVEX_W_0F3A3A_P_2,
2209 EVEX_W_0F3A3B_P_2,
1ba585e8 2210 EVEX_W_0F3A42_P_2,
90a915bf 2211 EVEX_W_0F3A43_P_2,
53467f57 2212 EVEX_W_0F3A70_P_2,
53467f57 2213 EVEX_W_0F3A72_P_2,
9e30b8e0
L
2214};
2215
26ca5450 2216typedef void (*op_rtn) (int bytemode, int sizeflag);
252b5132
RH
2217
2218struct dis386 {
2da11e11 2219 const char *name;
ce518a5f
L
2220 struct
2221 {
2222 op_rtn rtn;
2223 int bytemode;
2224 } op[MAX_OPERANDS];
bf890a93 2225 unsigned int prefix_requirement;
252b5132
RH
2226};
2227
2228/* Upper case letters in the instruction names here are macros.
2229 'A' => print 'b' if no register operands or suffix_always is true
2230 'B' => print 'b' if suffix_always is true
9306ca4a 2231 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
98b528ac 2232 size prefix
ed7841b3 2233 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
98b528ac 2234 suffix_always is true
252b5132 2235 'E' => print 'e' if 32-bit form of jcxz
3ffd33cf 2236 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
52fd6d94 2237 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
5dd0794d 2238 'H' => print ",pt" or ",pn" branch hint
d1c36125 2239 'I' unused.
8f570d62 2240 'J' unused.
42903f7f 2241 'K' => print 'd' or 'q' if rex prefix is present.
252b5132 2242 'L' => print 'l' if suffix_always is true
9d141669 2243 'M' => print 'r' if intel_mnemonic is false.
252b5132 2244 'N' => print 'n' if instruction has no wait "prefix"
a35ca55a 2245 'O' => print 'd' or 'o' (or 'q' in Intel mode)
52b15da3 2246 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
98b528ac
L
2247 or suffix_always is true. print 'q' if rex prefix is present.
2248 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
2249 is true
a35ca55a 2250 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
52b15da3 2251 'S' => print 'w', 'l' or 'q' if suffix_always is true
a72d2af2
L
2252 'T' => print 'q' in 64bit mode if instruction has no operand size
2253 prefix and behave as 'P' otherwise
2254 'U' => print 'q' in 64bit mode if instruction has no operand size
2255 prefix and behave as 'Q' otherwise
2256 'V' => print 'q' in 64bit mode if instruction has no operand size
2257 prefix and behave as 'S' otherwise
a35ca55a 2258 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
9306ca4a 2259 'X' => print 's', 'd' depending on data16 prefix (for XMM)
9646c87b 2260 'Y' unused.
6dd5059a 2261 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
9d141669 2262 '!' => change condition from true to false or from false to true.
98b528ac 2263 '%' => add 1 upper case letter to the macro.
5990e377
JB
2264 '^' => print 'w', 'l', or 'q' (Intel64 ISA only) depending on operand size
2265 prefix or suffix_always is true (lcall/ljmp).
5db04b09
L
2266 '@' => print 'q' for Intel64 ISA, 'w' or 'q' for AMD64 ISA depending
2267 on operand size prefix.
07f5af7d
L
2268 '&' => print 'q' in 64bit mode for Intel64 ISA or if instruction
2269 has no operand size prefix for AMD64 ISA, behave as 'P'
2270 otherwise
98b528ac
L
2271
2272 2 upper case letter macros:
04d824a4
JB
2273 "XY" => print 'x' or 'y' if suffix_always is true or no register
2274 operands and no broadcast.
2275 "XZ" => print 'x', 'y', or 'z' if suffix_always is true or no
2276 register operands and no broadcast.
4b06377f 2277 "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
b24d668c
JB
2278 "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand, cond
2279 being false, or no operand at all in 64bit mode, or if suffix_always
589958d6 2280 is true.
4b06377f
L
2281 "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
2282 "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
2283 "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
492a76aa 2284 "DQ" => print 'd' or 'q' depending on the VEX.W bit
931452b6 2285 "BW" => print 'b' or 'w' depending on the EVEX.W bit
4b4c407a
L
2286 "LP" => print 'w' or 'l' ('d' in Intel mode) if instruction has
2287 an operand size prefix, or suffix_always is true. print
2288 'q' if rex prefix is present.
52b15da3 2289
6439fc28
AM
2290 Many of the above letters print nothing in Intel mode. See "putop"
2291 for the details.
52b15da3 2292
6439fc28 2293 Braces '{' and '}', and vertical bars '|', indicate alternative
7c52e0e8 2294 mnemonic strings for AT&T and Intel. */
252b5132 2295
6439fc28 2296static const struct dis386 dis386[] = {
252b5132 2297 /* 00 */
bf890a93
IT
2298 { "addB", { Ebh1, Gb }, 0 },
2299 { "addS", { Evh1, Gv }, 0 },
2300 { "addB", { Gb, EbS }, 0 },
2301 { "addS", { Gv, EvS }, 0 },
2302 { "addB", { AL, Ib }, 0 },
2303 { "addS", { eAX, Iv }, 0 },
4e7d34a6
L
2304 { X86_64_TABLE (X86_64_06) },
2305 { X86_64_TABLE (X86_64_07) },
252b5132 2306 /* 08 */
bf890a93
IT
2307 { "orB", { Ebh1, Gb }, 0 },
2308 { "orS", { Evh1, Gv }, 0 },
2309 { "orB", { Gb, EbS }, 0 },
2310 { "orS", { Gv, EvS }, 0 },
2311 { "orB", { AL, Ib }, 0 },
2312 { "orS", { eAX, Iv }, 0 },
1673df32 2313 { X86_64_TABLE (X86_64_0E) },
592d1631 2314 { Bad_Opcode }, /* 0x0f extended opcode escape */
252b5132 2315 /* 10 */
bf890a93
IT
2316 { "adcB", { Ebh1, Gb }, 0 },
2317 { "adcS", { Evh1, Gv }, 0 },
2318 { "adcB", { Gb, EbS }, 0 },
2319 { "adcS", { Gv, EvS }, 0 },
2320 { "adcB", { AL, Ib }, 0 },
2321 { "adcS", { eAX, Iv }, 0 },
4e7d34a6
L
2322 { X86_64_TABLE (X86_64_16) },
2323 { X86_64_TABLE (X86_64_17) },
252b5132 2324 /* 18 */
bf890a93
IT
2325 { "sbbB", { Ebh1, Gb }, 0 },
2326 { "sbbS", { Evh1, Gv }, 0 },
2327 { "sbbB", { Gb, EbS }, 0 },
2328 { "sbbS", { Gv, EvS }, 0 },
2329 { "sbbB", { AL, Ib }, 0 },
2330 { "sbbS", { eAX, Iv }, 0 },
4e7d34a6
L
2331 { X86_64_TABLE (X86_64_1E) },
2332 { X86_64_TABLE (X86_64_1F) },
252b5132 2333 /* 20 */
bf890a93
IT
2334 { "andB", { Ebh1, Gb }, 0 },
2335 { "andS", { Evh1, Gv }, 0 },
2336 { "andB", { Gb, EbS }, 0 },
2337 { "andS", { Gv, EvS }, 0 },
2338 { "andB", { AL, Ib }, 0 },
2339 { "andS", { eAX, Iv }, 0 },
592d1631 2340 { Bad_Opcode }, /* SEG ES prefix */
4e7d34a6 2341 { X86_64_TABLE (X86_64_27) },
252b5132 2342 /* 28 */
bf890a93
IT
2343 { "subB", { Ebh1, Gb }, 0 },
2344 { "subS", { Evh1, Gv }, 0 },
2345 { "subB", { Gb, EbS }, 0 },
2346 { "subS", { Gv, EvS }, 0 },
2347 { "subB", { AL, Ib }, 0 },
2348 { "subS", { eAX, Iv }, 0 },
592d1631 2349 { Bad_Opcode }, /* SEG CS prefix */
4e7d34a6 2350 { X86_64_TABLE (X86_64_2F) },
252b5132 2351 /* 30 */
bf890a93
IT
2352 { "xorB", { Ebh1, Gb }, 0 },
2353 { "xorS", { Evh1, Gv }, 0 },
2354 { "xorB", { Gb, EbS }, 0 },
2355 { "xorS", { Gv, EvS }, 0 },
2356 { "xorB", { AL, Ib }, 0 },
2357 { "xorS", { eAX, Iv }, 0 },
592d1631 2358 { Bad_Opcode }, /* SEG SS prefix */
4e7d34a6 2359 { X86_64_TABLE (X86_64_37) },
252b5132 2360 /* 38 */
bf890a93
IT
2361 { "cmpB", { Eb, Gb }, 0 },
2362 { "cmpS", { Ev, Gv }, 0 },
2363 { "cmpB", { Gb, EbS }, 0 },
2364 { "cmpS", { Gv, EvS }, 0 },
2365 { "cmpB", { AL, Ib }, 0 },
2366 { "cmpS", { eAX, Iv }, 0 },
592d1631 2367 { Bad_Opcode }, /* SEG DS prefix */
4e7d34a6 2368 { X86_64_TABLE (X86_64_3F) },
252b5132 2369 /* 40 */
bf890a93
IT
2370 { "inc{S|}", { RMeAX }, 0 },
2371 { "inc{S|}", { RMeCX }, 0 },
2372 { "inc{S|}", { RMeDX }, 0 },
2373 { "inc{S|}", { RMeBX }, 0 },
2374 { "inc{S|}", { RMeSP }, 0 },
2375 { "inc{S|}", { RMeBP }, 0 },
2376 { "inc{S|}", { RMeSI }, 0 },
2377 { "inc{S|}", { RMeDI }, 0 },
252b5132 2378 /* 48 */
bf890a93
IT
2379 { "dec{S|}", { RMeAX }, 0 },
2380 { "dec{S|}", { RMeCX }, 0 },
2381 { "dec{S|}", { RMeDX }, 0 },
2382 { "dec{S|}", { RMeBX }, 0 },
2383 { "dec{S|}", { RMeSP }, 0 },
2384 { "dec{S|}", { RMeBP }, 0 },
2385 { "dec{S|}", { RMeSI }, 0 },
2386 { "dec{S|}", { RMeDI }, 0 },
252b5132 2387 /* 50 */
bf890a93
IT
2388 { "pushV", { RMrAX }, 0 },
2389 { "pushV", { RMrCX }, 0 },
2390 { "pushV", { RMrDX }, 0 },
2391 { "pushV", { RMrBX }, 0 },
2392 { "pushV", { RMrSP }, 0 },
2393 { "pushV", { RMrBP }, 0 },
2394 { "pushV", { RMrSI }, 0 },
2395 { "pushV", { RMrDI }, 0 },
252b5132 2396 /* 58 */
bf890a93
IT
2397 { "popV", { RMrAX }, 0 },
2398 { "popV", { RMrCX }, 0 },
2399 { "popV", { RMrDX }, 0 },
2400 { "popV", { RMrBX }, 0 },
2401 { "popV", { RMrSP }, 0 },
2402 { "popV", { RMrBP }, 0 },
2403 { "popV", { RMrSI }, 0 },
2404 { "popV", { RMrDI }, 0 },
252b5132 2405 /* 60 */
4e7d34a6
L
2406 { X86_64_TABLE (X86_64_60) },
2407 { X86_64_TABLE (X86_64_61) },
2408 { X86_64_TABLE (X86_64_62) },
2409 { X86_64_TABLE (X86_64_63) },
592d1631
L
2410 { Bad_Opcode }, /* seg fs */
2411 { Bad_Opcode }, /* seg gs */
2412 { Bad_Opcode }, /* op size prefix */
2413 { Bad_Opcode }, /* adr size prefix */
252b5132 2414 /* 68 */
bf890a93
IT
2415 { "pushT", { sIv }, 0 },
2416 { "imulS", { Gv, Ev, Iv }, 0 },
2417 { "pushT", { sIbT }, 0 },
2418 { "imulS", { Gv, Ev, sIb }, 0 },
2419 { "ins{b|}", { Ybr, indirDX }, 0 },
4e7d34a6 2420 { X86_64_TABLE (X86_64_6D) },
bf890a93 2421 { "outs{b|}", { indirDXr, Xb }, 0 },
4e7d34a6 2422 { X86_64_TABLE (X86_64_6F) },
252b5132 2423 /* 70 */
bf890a93
IT
2424 { "joH", { Jb, BND, cond_jump_flag }, 0 },
2425 { "jnoH", { Jb, BND, cond_jump_flag }, 0 },
2426 { "jbH", { Jb, BND, cond_jump_flag }, 0 },
2427 { "jaeH", { Jb, BND, cond_jump_flag }, 0 },
2428 { "jeH", { Jb, BND, cond_jump_flag }, 0 },
2429 { "jneH", { Jb, BND, cond_jump_flag }, 0 },
2430 { "jbeH", { Jb, BND, cond_jump_flag }, 0 },
2431 { "jaH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2432 /* 78 */
bf890a93
IT
2433 { "jsH", { Jb, BND, cond_jump_flag }, 0 },
2434 { "jnsH", { Jb, BND, cond_jump_flag }, 0 },
2435 { "jpH", { Jb, BND, cond_jump_flag }, 0 },
2436 { "jnpH", { Jb, BND, cond_jump_flag }, 0 },
2437 { "jlH", { Jb, BND, cond_jump_flag }, 0 },
2438 { "jgeH", { Jb, BND, cond_jump_flag }, 0 },
2439 { "jleH", { Jb, BND, cond_jump_flag }, 0 },
2440 { "jgH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2441 /* 80 */
1ceb70f8
L
2442 { REG_TABLE (REG_80) },
2443 { REG_TABLE (REG_81) },
d039fef3 2444 { X86_64_TABLE (X86_64_82) },
7148c369 2445 { REG_TABLE (REG_83) },
bf890a93
IT
2446 { "testB", { Eb, Gb }, 0 },
2447 { "testS", { Ev, Gv }, 0 },
2448 { "xchgB", { Ebh2, Gb }, 0 },
2449 { "xchgS", { Evh2, Gv }, 0 },
252b5132 2450 /* 88 */
bf890a93
IT
2451 { "movB", { Ebh3, Gb }, 0 },
2452 { "movS", { Evh3, Gv }, 0 },
2453 { "movB", { Gb, EbS }, 0 },
2454 { "movS", { Gv, EvS }, 0 },
2455 { "movD", { Sv, Sw }, 0 },
1ceb70f8 2456 { MOD_TABLE (MOD_8D) },
bf890a93 2457 { "movD", { Sw, Sv }, 0 },
1ceb70f8 2458 { REG_TABLE (REG_8F) },
252b5132 2459 /* 90 */
1ceb70f8 2460 { PREFIX_TABLE (PREFIX_90) },
bf890a93
IT
2461 { "xchgS", { RMeCX, eAX }, 0 },
2462 { "xchgS", { RMeDX, eAX }, 0 },
2463 { "xchgS", { RMeBX, eAX }, 0 },
2464 { "xchgS", { RMeSP, eAX }, 0 },
2465 { "xchgS", { RMeBP, eAX }, 0 },
2466 { "xchgS", { RMeSI, eAX }, 0 },
2467 { "xchgS", { RMeDI, eAX }, 0 },
252b5132 2468 /* 98 */
bf890a93
IT
2469 { "cW{t|}R", { XX }, 0 },
2470 { "cR{t|}O", { XX }, 0 },
4e7d34a6 2471 { X86_64_TABLE (X86_64_9A) },
592d1631 2472 { Bad_Opcode }, /* fwait */
bf890a93
IT
2473 { "pushfT", { XX }, 0 },
2474 { "popfT", { XX }, 0 },
2475 { "sahf", { XX }, 0 },
2476 { "lahf", { XX }, 0 },
252b5132 2477 /* a0 */
bf890a93
IT
2478 { "mov%LB", { AL, Ob }, 0 },
2479 { "mov%LS", { eAX, Ov }, 0 },
2480 { "mov%LB", { Ob, AL }, 0 },
2481 { "mov%LS", { Ov, eAX }, 0 },
2482 { "movs{b|}", { Ybr, Xb }, 0 },
2483 { "movs{R|}", { Yvr, Xv }, 0 },
2484 { "cmps{b|}", { Xb, Yb }, 0 },
2485 { "cmps{R|}", { Xv, Yv }, 0 },
252b5132 2486 /* a8 */
bf890a93
IT
2487 { "testB", { AL, Ib }, 0 },
2488 { "testS", { eAX, Iv }, 0 },
2489 { "stosB", { Ybr, AL }, 0 },
2490 { "stosS", { Yvr, eAX }, 0 },
2491 { "lodsB", { ALr, Xb }, 0 },
2492 { "lodsS", { eAXr, Xv }, 0 },
2493 { "scasB", { AL, Yb }, 0 },
2494 { "scasS", { eAX, Yv }, 0 },
252b5132 2495 /* b0 */
bf890a93
IT
2496 { "movB", { RMAL, Ib }, 0 },
2497 { "movB", { RMCL, Ib }, 0 },
2498 { "movB", { RMDL, Ib }, 0 },
2499 { "movB", { RMBL, Ib }, 0 },
2500 { "movB", { RMAH, Ib }, 0 },
2501 { "movB", { RMCH, Ib }, 0 },
2502 { "movB", { RMDH, Ib }, 0 },
2503 { "movB", { RMBH, Ib }, 0 },
252b5132 2504 /* b8 */
bf890a93
IT
2505 { "mov%LV", { RMeAX, Iv64 }, 0 },
2506 { "mov%LV", { RMeCX, Iv64 }, 0 },
2507 { "mov%LV", { RMeDX, Iv64 }, 0 },
2508 { "mov%LV", { RMeBX, Iv64 }, 0 },
2509 { "mov%LV", { RMeSP, Iv64 }, 0 },
2510 { "mov%LV", { RMeBP, Iv64 }, 0 },
2511 { "mov%LV", { RMeSI, Iv64 }, 0 },
2512 { "mov%LV", { RMeDI, Iv64 }, 0 },
252b5132 2513 /* c0 */
1ceb70f8
L
2514 { REG_TABLE (REG_C0) },
2515 { REG_TABLE (REG_C1) },
aeab2b26
JB
2516 { X86_64_TABLE (X86_64_C2) },
2517 { X86_64_TABLE (X86_64_C3) },
4e7d34a6
L
2518 { X86_64_TABLE (X86_64_C4) },
2519 { X86_64_TABLE (X86_64_C5) },
1ceb70f8
L
2520 { REG_TABLE (REG_C6) },
2521 { REG_TABLE (REG_C7) },
252b5132 2522 /* c8 */
bf890a93
IT
2523 { "enterT", { Iw, Ib }, 0 },
2524 { "leaveT", { XX }, 0 },
8f570d62
JB
2525 { "{l|}ret{|f}P", { Iw }, 0 },
2526 { "{l|}ret{|f}P", { XX }, 0 },
bf890a93
IT
2527 { "int3", { XX }, 0 },
2528 { "int", { Ib }, 0 },
4e7d34a6 2529 { X86_64_TABLE (X86_64_CE) },
bf890a93 2530 { "iret%LP", { XX }, 0 },
252b5132 2531 /* d0 */
1ceb70f8
L
2532 { REG_TABLE (REG_D0) },
2533 { REG_TABLE (REG_D1) },
2534 { REG_TABLE (REG_D2) },
2535 { REG_TABLE (REG_D3) },
4e7d34a6
L
2536 { X86_64_TABLE (X86_64_D4) },
2537 { X86_64_TABLE (X86_64_D5) },
592d1631 2538 { Bad_Opcode },
bf890a93 2539 { "xlat", { DSBX }, 0 },
252b5132
RH
2540 /* d8 */
2541 { FLOAT },
2542 { FLOAT },
2543 { FLOAT },
2544 { FLOAT },
2545 { FLOAT },
2546 { FLOAT },
2547 { FLOAT },
2548 { FLOAT },
2549 /* e0 */
bf890a93
IT
2550 { "loopneFH", { Jb, XX, loop_jcxz_flag }, 0 },
2551 { "loopeFH", { Jb, XX, loop_jcxz_flag }, 0 },
2552 { "loopFH", { Jb, XX, loop_jcxz_flag }, 0 },
2553 { "jEcxzH", { Jb, XX, loop_jcxz_flag }, 0 },
2554 { "inB", { AL, Ib }, 0 },
2555 { "inG", { zAX, Ib }, 0 },
2556 { "outB", { Ib, AL }, 0 },
2557 { "outG", { Ib, zAX }, 0 },
252b5132 2558 /* e8 */
a72d2af2
L
2559 { X86_64_TABLE (X86_64_E8) },
2560 { X86_64_TABLE (X86_64_E9) },
4e7d34a6 2561 { X86_64_TABLE (X86_64_EA) },
bf890a93
IT
2562 { "jmp", { Jb, BND }, 0 },
2563 { "inB", { AL, indirDX }, 0 },
2564 { "inG", { zAX, indirDX }, 0 },
2565 { "outB", { indirDX, AL }, 0 },
2566 { "outG", { indirDX, zAX }, 0 },
252b5132 2567 /* f0 */
592d1631 2568 { Bad_Opcode }, /* lock prefix */
bf890a93 2569 { "icebp", { XX }, 0 },
592d1631
L
2570 { Bad_Opcode }, /* repne */
2571 { Bad_Opcode }, /* repz */
bf890a93
IT
2572 { "hlt", { XX }, 0 },
2573 { "cmc", { XX }, 0 },
1ceb70f8
L
2574 { REG_TABLE (REG_F6) },
2575 { REG_TABLE (REG_F7) },
252b5132 2576 /* f8 */
bf890a93
IT
2577 { "clc", { XX }, 0 },
2578 { "stc", { XX }, 0 },
2579 { "cli", { XX }, 0 },
2580 { "sti", { XX }, 0 },
2581 { "cld", { XX }, 0 },
2582 { "std", { XX }, 0 },
1ceb70f8
L
2583 { REG_TABLE (REG_FE) },
2584 { REG_TABLE (REG_FF) },
252b5132
RH
2585};
2586
6439fc28 2587static const struct dis386 dis386_twobyte[] = {
252b5132 2588 /* 00 */
1ceb70f8
L
2589 { REG_TABLE (REG_0F00 ) },
2590 { REG_TABLE (REG_0F01 ) },
bf890a93
IT
2591 { "larS", { Gv, Ew }, 0 },
2592 { "lslS", { Gv, Ew }, 0 },
592d1631 2593 { Bad_Opcode },
bf890a93
IT
2594 { "syscall", { XX }, 0 },
2595 { "clts", { XX }, 0 },
589958d6 2596 { "sysret%LQ", { XX }, 0 },
252b5132 2597 /* 08 */
bf890a93 2598 { "invd", { XX }, 0 },
3233d7d0 2599 { PREFIX_TABLE (PREFIX_0F09) },
592d1631 2600 { Bad_Opcode },
bf890a93 2601 { "ud2", { XX }, 0 },
592d1631 2602 { Bad_Opcode },
b5b1fc4f 2603 { REG_TABLE (REG_0F0D) },
bf890a93
IT
2604 { "femms", { XX }, 0 },
2605 { "", { MX, EM, OPSUF }, 0 }, /* See OP_3DNowSuffix. */
252b5132 2606 /* 10 */
1ceb70f8
L
2607 { PREFIX_TABLE (PREFIX_0F10) },
2608 { PREFIX_TABLE (PREFIX_0F11) },
2609 { PREFIX_TABLE (PREFIX_0F12) },
2610 { MOD_TABLE (MOD_0F13) },
507bd325
L
2611 { "unpcklpX", { XM, EXx }, PREFIX_OPCODE },
2612 { "unpckhpX", { XM, EXx }, PREFIX_OPCODE },
1ceb70f8
L
2613 { PREFIX_TABLE (PREFIX_0F16) },
2614 { MOD_TABLE (MOD_0F17) },
252b5132 2615 /* 18 */
1ceb70f8 2616 { REG_TABLE (REG_0F18) },
bf890a93 2617 { "nopQ", { Ev }, 0 },
7e8b059b
L
2618 { PREFIX_TABLE (PREFIX_0F1A) },
2619 { PREFIX_TABLE (PREFIX_0F1B) },
c48935d7 2620 { PREFIX_TABLE (PREFIX_0F1C) },
bf890a93 2621 { "nopQ", { Ev }, 0 },
603555e5 2622 { PREFIX_TABLE (PREFIX_0F1E) },
bf890a93 2623 { "nopQ", { Ev }, 0 },
252b5132 2624 /* 20 */
bf890a93
IT
2625 { "movZ", { Rm, Cm }, 0 },
2626 { "movZ", { Rm, Dm }, 0 },
2627 { "movZ", { Cm, Rm }, 0 },
2628 { "movZ", { Dm, Rm }, 0 },
1ceb70f8 2629 { MOD_TABLE (MOD_0F24) },
592d1631 2630 { Bad_Opcode },
1ceb70f8 2631 { MOD_TABLE (MOD_0F26) },
592d1631 2632 { Bad_Opcode },
252b5132 2633 /* 28 */
507bd325
L
2634 { "movapX", { XM, EXx }, PREFIX_OPCODE },
2635 { "movapX", { EXxS, XM }, PREFIX_OPCODE },
1ceb70f8
L
2636 { PREFIX_TABLE (PREFIX_0F2A) },
2637 { PREFIX_TABLE (PREFIX_0F2B) },
2638 { PREFIX_TABLE (PREFIX_0F2C) },
2639 { PREFIX_TABLE (PREFIX_0F2D) },
2640 { PREFIX_TABLE (PREFIX_0F2E) },
2641 { PREFIX_TABLE (PREFIX_0F2F) },
252b5132 2642 /* 30 */
bf890a93
IT
2643 { "wrmsr", { XX }, 0 },
2644 { "rdtsc", { XX }, 0 },
2645 { "rdmsr", { XX }, 0 },
2646 { "rdpmc", { XX }, 0 },
d835a58b
JB
2647 { "sysenter", { SEP }, 0 },
2648 { "sysexit", { SEP }, 0 },
592d1631 2649 { Bad_Opcode },
bf890a93 2650 { "getsec", { XX }, 0 },
252b5132 2651 /* 38 */
507bd325 2652 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F38, PREFIX_OPCODE) },
592d1631 2653 { Bad_Opcode },
507bd325 2654 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F3A, PREFIX_OPCODE) },
592d1631
L
2655 { Bad_Opcode },
2656 { Bad_Opcode },
2657 { Bad_Opcode },
2658 { Bad_Opcode },
2659 { Bad_Opcode },
252b5132 2660 /* 40 */
bf890a93
IT
2661 { "cmovoS", { Gv, Ev }, 0 },
2662 { "cmovnoS", { Gv, Ev }, 0 },
2663 { "cmovbS", { Gv, Ev }, 0 },
2664 { "cmovaeS", { Gv, Ev }, 0 },
2665 { "cmoveS", { Gv, Ev }, 0 },
2666 { "cmovneS", { Gv, Ev }, 0 },
2667 { "cmovbeS", { Gv, Ev }, 0 },
2668 { "cmovaS", { Gv, Ev }, 0 },
252b5132 2669 /* 48 */
bf890a93
IT
2670 { "cmovsS", { Gv, Ev }, 0 },
2671 { "cmovnsS", { Gv, Ev }, 0 },
2672 { "cmovpS", { Gv, Ev }, 0 },
2673 { "cmovnpS", { Gv, Ev }, 0 },
2674 { "cmovlS", { Gv, Ev }, 0 },
2675 { "cmovgeS", { Gv, Ev }, 0 },
2676 { "cmovleS", { Gv, Ev }, 0 },
2677 { "cmovgS", { Gv, Ev }, 0 },
252b5132 2678 /* 50 */
a5aaedb9 2679 { MOD_TABLE (MOD_0F50) },
1ceb70f8
L
2680 { PREFIX_TABLE (PREFIX_0F51) },
2681 { PREFIX_TABLE (PREFIX_0F52) },
2682 { PREFIX_TABLE (PREFIX_0F53) },
507bd325
L
2683 { "andpX", { XM, EXx }, PREFIX_OPCODE },
2684 { "andnpX", { XM, EXx }, PREFIX_OPCODE },
2685 { "orpX", { XM, EXx }, PREFIX_OPCODE },
2686 { "xorpX", { XM, EXx }, PREFIX_OPCODE },
252b5132 2687 /* 58 */
1ceb70f8
L
2688 { PREFIX_TABLE (PREFIX_0F58) },
2689 { PREFIX_TABLE (PREFIX_0F59) },
2690 { PREFIX_TABLE (PREFIX_0F5A) },
2691 { PREFIX_TABLE (PREFIX_0F5B) },
2692 { PREFIX_TABLE (PREFIX_0F5C) },
2693 { PREFIX_TABLE (PREFIX_0F5D) },
2694 { PREFIX_TABLE (PREFIX_0F5E) },
2695 { PREFIX_TABLE (PREFIX_0F5F) },
252b5132 2696 /* 60 */
1ceb70f8
L
2697 { PREFIX_TABLE (PREFIX_0F60) },
2698 { PREFIX_TABLE (PREFIX_0F61) },
2699 { PREFIX_TABLE (PREFIX_0F62) },
507bd325
L
2700 { "packsswb", { MX, EM }, PREFIX_OPCODE },
2701 { "pcmpgtb", { MX, EM }, PREFIX_OPCODE },
2702 { "pcmpgtw", { MX, EM }, PREFIX_OPCODE },
2703 { "pcmpgtd", { MX, EM }, PREFIX_OPCODE },
2704 { "packuswb", { MX, EM }, PREFIX_OPCODE },
252b5132 2705 /* 68 */
507bd325
L
2706 { "punpckhbw", { MX, EM }, PREFIX_OPCODE },
2707 { "punpckhwd", { MX, EM }, PREFIX_OPCODE },
2708 { "punpckhdq", { MX, EM }, PREFIX_OPCODE },
2709 { "packssdw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
2710 { PREFIX_TABLE (PREFIX_0F6C) },
2711 { PREFIX_TABLE (PREFIX_0F6D) },
507bd325 2712 { "movK", { MX, Edq }, PREFIX_OPCODE },
1ceb70f8 2713 { PREFIX_TABLE (PREFIX_0F6F) },
252b5132 2714 /* 70 */
1ceb70f8
L
2715 { PREFIX_TABLE (PREFIX_0F70) },
2716 { REG_TABLE (REG_0F71) },
2717 { REG_TABLE (REG_0F72) },
2718 { REG_TABLE (REG_0F73) },
507bd325
L
2719 { "pcmpeqb", { MX, EM }, PREFIX_OPCODE },
2720 { "pcmpeqw", { MX, EM }, PREFIX_OPCODE },
2721 { "pcmpeqd", { MX, EM }, PREFIX_OPCODE },
2722 { "emms", { XX }, PREFIX_OPCODE },
252b5132 2723 /* 78 */
1ceb70f8
L
2724 { PREFIX_TABLE (PREFIX_0F78) },
2725 { PREFIX_TABLE (PREFIX_0F79) },
1f334aeb 2726 { Bad_Opcode },
592d1631 2727 { Bad_Opcode },
1ceb70f8
L
2728 { PREFIX_TABLE (PREFIX_0F7C) },
2729 { PREFIX_TABLE (PREFIX_0F7D) },
2730 { PREFIX_TABLE (PREFIX_0F7E) },
2731 { PREFIX_TABLE (PREFIX_0F7F) },
252b5132 2732 /* 80 */
bf890a93
IT
2733 { "joH", { Jv, BND, cond_jump_flag }, 0 },
2734 { "jnoH", { Jv, BND, cond_jump_flag }, 0 },
2735 { "jbH", { Jv, BND, cond_jump_flag }, 0 },
2736 { "jaeH", { Jv, BND, cond_jump_flag }, 0 },
2737 { "jeH", { Jv, BND, cond_jump_flag }, 0 },
2738 { "jneH", { Jv, BND, cond_jump_flag }, 0 },
2739 { "jbeH", { Jv, BND, cond_jump_flag }, 0 },
2740 { "jaH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 2741 /* 88 */
bf890a93
IT
2742 { "jsH", { Jv, BND, cond_jump_flag }, 0 },
2743 { "jnsH", { Jv, BND, cond_jump_flag }, 0 },
2744 { "jpH", { Jv, BND, cond_jump_flag }, 0 },
2745 { "jnpH", { Jv, BND, cond_jump_flag }, 0 },
2746 { "jlH", { Jv, BND, cond_jump_flag }, 0 },
2747 { "jgeH", { Jv, BND, cond_jump_flag }, 0 },
2748 { "jleH", { Jv, BND, cond_jump_flag }, 0 },
2749 { "jgH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 2750 /* 90 */
bf890a93
IT
2751 { "seto", { Eb }, 0 },
2752 { "setno", { Eb }, 0 },
2753 { "setb", { Eb }, 0 },
2754 { "setae", { Eb }, 0 },
2755 { "sete", { Eb }, 0 },
2756 { "setne", { Eb }, 0 },
2757 { "setbe", { Eb }, 0 },
2758 { "seta", { Eb }, 0 },
252b5132 2759 /* 98 */
bf890a93
IT
2760 { "sets", { Eb }, 0 },
2761 { "setns", { Eb }, 0 },
2762 { "setp", { Eb }, 0 },
2763 { "setnp", { Eb }, 0 },
2764 { "setl", { Eb }, 0 },
2765 { "setge", { Eb }, 0 },
2766 { "setle", { Eb }, 0 },
2767 { "setg", { Eb }, 0 },
252b5132 2768 /* a0 */
bf890a93
IT
2769 { "pushT", { fs }, 0 },
2770 { "popT", { fs }, 0 },
2771 { "cpuid", { XX }, 0 },
2772 { "btS", { Ev, Gv }, 0 },
2773 { "shldS", { Ev, Gv, Ib }, 0 },
2774 { "shldS", { Ev, Gv, CL }, 0 },
1ceb70f8
L
2775 { REG_TABLE (REG_0FA6) },
2776 { REG_TABLE (REG_0FA7) },
252b5132 2777 /* a8 */
bf890a93
IT
2778 { "pushT", { gs }, 0 },
2779 { "popT", { gs }, 0 },
2780 { "rsm", { XX }, 0 },
2781 { "btsS", { Evh1, Gv }, 0 },
2782 { "shrdS", { Ev, Gv, Ib }, 0 },
2783 { "shrdS", { Ev, Gv, CL }, 0 },
1ceb70f8 2784 { REG_TABLE (REG_0FAE) },
bf890a93 2785 { "imulS", { Gv, Ev }, 0 },
252b5132 2786 /* b0 */
bf890a93
IT
2787 { "cmpxchgB", { Ebh1, Gb }, 0 },
2788 { "cmpxchgS", { Evh1, Gv }, 0 },
1ceb70f8 2789 { MOD_TABLE (MOD_0FB2) },
bf890a93 2790 { "btrS", { Evh1, Gv }, 0 },
1ceb70f8
L
2791 { MOD_TABLE (MOD_0FB4) },
2792 { MOD_TABLE (MOD_0FB5) },
bf890a93
IT
2793 { "movz{bR|x}", { Gv, Eb }, 0 },
2794 { "movz{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movzww ! */
252b5132 2795 /* b8 */
1ceb70f8 2796 { PREFIX_TABLE (PREFIX_0FB8) },
66f1eba0 2797 { "ud1S", { Gv, Ev }, 0 },
1ceb70f8 2798 { REG_TABLE (REG_0FBA) },
bf890a93 2799 { "btcS", { Evh1, Gv }, 0 },
f12dc422 2800 { PREFIX_TABLE (PREFIX_0FBC) },
1ceb70f8 2801 { PREFIX_TABLE (PREFIX_0FBD) },
bf890a93
IT
2802 { "movs{bR|x}", { Gv, Eb }, 0 },
2803 { "movs{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movsww ! */
252b5132 2804 /* c0 */
bf890a93
IT
2805 { "xaddB", { Ebh1, Gb }, 0 },
2806 { "xaddS", { Evh1, Gv }, 0 },
1ceb70f8 2807 { PREFIX_TABLE (PREFIX_0FC2) },
a8484f96 2808 { MOD_TABLE (MOD_0FC3) },
507bd325
L
2809 { "pinsrw", { MX, Edqw, Ib }, PREFIX_OPCODE },
2810 { "pextrw", { Gdq, MS, Ib }, PREFIX_OPCODE },
2811 { "shufpX", { XM, EXx, Ib }, PREFIX_OPCODE },
1ceb70f8 2812 { REG_TABLE (REG_0FC7) },
252b5132 2813 /* c8 */
bf890a93
IT
2814 { "bswap", { RMeAX }, 0 },
2815 { "bswap", { RMeCX }, 0 },
2816 { "bswap", { RMeDX }, 0 },
2817 { "bswap", { RMeBX }, 0 },
2818 { "bswap", { RMeSP }, 0 },
2819 { "bswap", { RMeBP }, 0 },
2820 { "bswap", { RMeSI }, 0 },
2821 { "bswap", { RMeDI }, 0 },
252b5132 2822 /* d0 */
1ceb70f8 2823 { PREFIX_TABLE (PREFIX_0FD0) },
507bd325
L
2824 { "psrlw", { MX, EM }, PREFIX_OPCODE },
2825 { "psrld", { MX, EM }, PREFIX_OPCODE },
2826 { "psrlq", { MX, EM }, PREFIX_OPCODE },
2827 { "paddq", { MX, EM }, PREFIX_OPCODE },
2828 { "pmullw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 2829 { PREFIX_TABLE (PREFIX_0FD6) },
75c135a8 2830 { MOD_TABLE (MOD_0FD7) },
252b5132 2831 /* d8 */
507bd325
L
2832 { "psubusb", { MX, EM }, PREFIX_OPCODE },
2833 { "psubusw", { MX, EM }, PREFIX_OPCODE },
2834 { "pminub", { MX, EM }, PREFIX_OPCODE },
2835 { "pand", { MX, EM }, PREFIX_OPCODE },
2836 { "paddusb", { MX, EM }, PREFIX_OPCODE },
2837 { "paddusw", { MX, EM }, PREFIX_OPCODE },
2838 { "pmaxub", { MX, EM }, PREFIX_OPCODE },
2839 { "pandn", { MX, EM }, PREFIX_OPCODE },
252b5132 2840 /* e0 */
507bd325
L
2841 { "pavgb", { MX, EM }, PREFIX_OPCODE },
2842 { "psraw", { MX, EM }, PREFIX_OPCODE },
2843 { "psrad", { MX, EM }, PREFIX_OPCODE },
2844 { "pavgw", { MX, EM }, PREFIX_OPCODE },
2845 { "pmulhuw", { MX, EM }, PREFIX_OPCODE },
2846 { "pmulhw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
2847 { PREFIX_TABLE (PREFIX_0FE6) },
2848 { PREFIX_TABLE (PREFIX_0FE7) },
252b5132 2849 /* e8 */
507bd325
L
2850 { "psubsb", { MX, EM }, PREFIX_OPCODE },
2851 { "psubsw", { MX, EM }, PREFIX_OPCODE },
2852 { "pminsw", { MX, EM }, PREFIX_OPCODE },
2853 { "por", { MX, EM }, PREFIX_OPCODE },
2854 { "paddsb", { MX, EM }, PREFIX_OPCODE },
2855 { "paddsw", { MX, EM }, PREFIX_OPCODE },
2856 { "pmaxsw", { MX, EM }, PREFIX_OPCODE },
2857 { "pxor", { MX, EM }, PREFIX_OPCODE },
252b5132 2858 /* f0 */
1ceb70f8 2859 { PREFIX_TABLE (PREFIX_0FF0) },
507bd325
L
2860 { "psllw", { MX, EM }, PREFIX_OPCODE },
2861 { "pslld", { MX, EM }, PREFIX_OPCODE },
2862 { "psllq", { MX, EM }, PREFIX_OPCODE },
2863 { "pmuludq", { MX, EM }, PREFIX_OPCODE },
2864 { "pmaddwd", { MX, EM }, PREFIX_OPCODE },
2865 { "psadbw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 2866 { PREFIX_TABLE (PREFIX_0FF7) },
252b5132 2867 /* f8 */
507bd325
L
2868 { "psubb", { MX, EM }, PREFIX_OPCODE },
2869 { "psubw", { MX, EM }, PREFIX_OPCODE },
2870 { "psubd", { MX, EM }, PREFIX_OPCODE },
2871 { "psubq", { MX, EM }, PREFIX_OPCODE },
2872 { "paddb", { MX, EM }, PREFIX_OPCODE },
2873 { "paddw", { MX, EM }, PREFIX_OPCODE },
2874 { "paddd", { MX, EM }, PREFIX_OPCODE },
66f1eba0 2875 { "ud0S", { Gv, Ev }, 0 },
252b5132
RH
2876};
2877
2878static const unsigned char onebyte_has_modrm[256] = {
c608c12e
AM
2879 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2880 /* ------------------------------- */
2881 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
2882 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
2883 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
2884 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
2885 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
2886 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
2887 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
2888 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
2889 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
2890 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
2891 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
2892 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
2893 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
2894 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
2895 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
2896 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
2897 /* ------------------------------- */
2898 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
252b5132
RH
2899};
2900
2901static const unsigned char twobyte_has_modrm[256] = {
c608c12e
AM
2902 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2903 /* ------------------------------- */
252b5132 2904 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
b5b1fc4f 2905 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
85f10a01 2906 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
331d2d0d 2907 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
252b5132 2908 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
4bba6815
AM
2909 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
2910 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
85f10a01 2911 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
252b5132
RH
2912 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
2913 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
30d1c836 2914 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
66f1eba0 2915 /* b0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* bf */
252b5132 2916 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
ca164297 2917 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
4bba6815 2918 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
66f1eba0 2919 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 /* ff */
c608c12e
AM
2920 /* ------------------------------- */
2921 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2922};
2923
252b5132
RH
2924static char obuf[100];
2925static char *obufp;
ea397f5b 2926static char *mnemonicendp;
252b5132
RH
2927static char scratchbuf[100];
2928static unsigned char *start_codep;
2929static unsigned char *insn_codep;
2930static unsigned char *codep;
285ca992 2931static unsigned char *end_codep;
f16cd0d5
L
2932static int last_lock_prefix;
2933static int last_repz_prefix;
2934static int last_repnz_prefix;
2935static int last_data_prefix;
2936static int last_addr_prefix;
2937static int last_rex_prefix;
2938static int last_seg_prefix;
d9949a36 2939static int fwait_prefix;
285ca992
L
2940/* The active segment register prefix. */
2941static int active_seg_prefix;
f16cd0d5
L
2942#define MAX_CODE_LENGTH 15
2943/* We can up to 14 prefixes since the maximum instruction length is
2944 15bytes. */
2945static int all_prefixes[MAX_CODE_LENGTH - 1];
252b5132 2946static disassemble_info *the_info;
7967e09e
L
2947static struct
2948 {
2949 int mod;
7967e09e 2950 int reg;
484c222e 2951 int rm;
7967e09e
L
2952 }
2953modrm;
4bba6815 2954static unsigned char need_modrm;
dfc8cf43
L
2955static struct
2956 {
2957 int scale;
2958 int index;
2959 int base;
2960 }
2961sib;
c0f3af97
L
2962static struct
2963 {
2964 int register_specifier;
2965 int length;
2966 int prefix;
2967 int w;
43234a1e
L
2968 int evex;
2969 int r;
2970 int v;
2971 int mask_register_specifier;
2972 int zeroing;
2973 int ll;
2974 int b;
c0f3af97
L
2975 }
2976vex;
2977static unsigned char need_vex;
2978static unsigned char need_vex_reg;
252b5132 2979
ea397f5b
L
2980struct op
2981 {
2982 const char *name;
2983 unsigned int len;
2984 };
2985
4bba6815
AM
2986/* If we are accessing mod/rm/reg without need_modrm set, then the
2987 values are stale. Hitting this abort likely indicates that you
2988 need to update onebyte_has_modrm or twobyte_has_modrm. */
2989#define MODRM_CHECK if (!need_modrm) abort ()
2990
d708bcba
AM
2991static const char **names64;
2992static const char **names32;
2993static const char **names16;
2994static const char **names8;
2995static const char **names8rex;
2996static const char **names_seg;
db51cc60
L
2997static const char *index64;
2998static const char *index32;
d708bcba 2999static const char **index16;
7e8b059b 3000static const char **names_bnd;
d708bcba
AM
3001
3002static const char *intel_names64[] = {
3003 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
3004 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
3005};
3006static const char *intel_names32[] = {
3007 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
3008 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
3009};
3010static const char *intel_names16[] = {
3011 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
3012 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
3013};
3014static const char *intel_names8[] = {
3015 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
3016};
3017static const char *intel_names8rex[] = {
3018 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
3019 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
3020};
3021static const char *intel_names_seg[] = {
3022 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
3023};
db51cc60
L
3024static const char *intel_index64 = "riz";
3025static const char *intel_index32 = "eiz";
d708bcba
AM
3026static const char *intel_index16[] = {
3027 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
3028};
3029
3030static const char *att_names64[] = {
3031 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
52b15da3
JH
3032 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
3033};
d708bcba
AM
3034static const char *att_names32[] = {
3035 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
52b15da3 3036 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
252b5132 3037};
d708bcba
AM
3038static const char *att_names16[] = {
3039 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
52b15da3 3040 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
252b5132 3041};
d708bcba
AM
3042static const char *att_names8[] = {
3043 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
252b5132 3044};
d708bcba
AM
3045static const char *att_names8rex[] = {
3046 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
52b15da3
JH
3047 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
3048};
d708bcba
AM
3049static const char *att_names_seg[] = {
3050 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
252b5132 3051};
db51cc60
L
3052static const char *att_index64 = "%riz";
3053static const char *att_index32 = "%eiz";
d708bcba
AM
3054static const char *att_index16[] = {
3055 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
252b5132
RH
3056};
3057
b9733481
L
3058static const char **names_mm;
3059static const char *intel_names_mm[] = {
3060 "mm0", "mm1", "mm2", "mm3",
3061 "mm4", "mm5", "mm6", "mm7"
3062};
3063static const char *att_names_mm[] = {
3064 "%mm0", "%mm1", "%mm2", "%mm3",
3065 "%mm4", "%mm5", "%mm6", "%mm7"
3066};
3067
7e8b059b
L
3068static const char *intel_names_bnd[] = {
3069 "bnd0", "bnd1", "bnd2", "bnd3"
3070};
3071
3072static const char *att_names_bnd[] = {
3073 "%bnd0", "%bnd1", "%bnd2", "%bnd3"
3074};
3075
b9733481
L
3076static const char **names_xmm;
3077static const char *intel_names_xmm[] = {
3078 "xmm0", "xmm1", "xmm2", "xmm3",
3079 "xmm4", "xmm5", "xmm6", "xmm7",
3080 "xmm8", "xmm9", "xmm10", "xmm11",
43234a1e
L
3081 "xmm12", "xmm13", "xmm14", "xmm15",
3082 "xmm16", "xmm17", "xmm18", "xmm19",
3083 "xmm20", "xmm21", "xmm22", "xmm23",
3084 "xmm24", "xmm25", "xmm26", "xmm27",
3085 "xmm28", "xmm29", "xmm30", "xmm31"
b9733481
L
3086};
3087static const char *att_names_xmm[] = {
3088 "%xmm0", "%xmm1", "%xmm2", "%xmm3",
3089 "%xmm4", "%xmm5", "%xmm6", "%xmm7",
3090 "%xmm8", "%xmm9", "%xmm10", "%xmm11",
43234a1e
L
3091 "%xmm12", "%xmm13", "%xmm14", "%xmm15",
3092 "%xmm16", "%xmm17", "%xmm18", "%xmm19",
3093 "%xmm20", "%xmm21", "%xmm22", "%xmm23",
3094 "%xmm24", "%xmm25", "%xmm26", "%xmm27",
3095 "%xmm28", "%xmm29", "%xmm30", "%xmm31"
b9733481
L
3096};
3097
3098static const char **names_ymm;
3099static const char *intel_names_ymm[] = {
3100 "ymm0", "ymm1", "ymm2", "ymm3",
3101 "ymm4", "ymm5", "ymm6", "ymm7",
3102 "ymm8", "ymm9", "ymm10", "ymm11",
43234a1e
L
3103 "ymm12", "ymm13", "ymm14", "ymm15",
3104 "ymm16", "ymm17", "ymm18", "ymm19",
3105 "ymm20", "ymm21", "ymm22", "ymm23",
3106 "ymm24", "ymm25", "ymm26", "ymm27",
3107 "ymm28", "ymm29", "ymm30", "ymm31"
b9733481
L
3108};
3109static const char *att_names_ymm[] = {
3110 "%ymm0", "%ymm1", "%ymm2", "%ymm3",
3111 "%ymm4", "%ymm5", "%ymm6", "%ymm7",
3112 "%ymm8", "%ymm9", "%ymm10", "%ymm11",
43234a1e
L
3113 "%ymm12", "%ymm13", "%ymm14", "%ymm15",
3114 "%ymm16", "%ymm17", "%ymm18", "%ymm19",
3115 "%ymm20", "%ymm21", "%ymm22", "%ymm23",
3116 "%ymm24", "%ymm25", "%ymm26", "%ymm27",
3117 "%ymm28", "%ymm29", "%ymm30", "%ymm31"
3118};
3119
3120static const char **names_zmm;
3121static const char *intel_names_zmm[] = {
3122 "zmm0", "zmm1", "zmm2", "zmm3",
3123 "zmm4", "zmm5", "zmm6", "zmm7",
3124 "zmm8", "zmm9", "zmm10", "zmm11",
3125 "zmm12", "zmm13", "zmm14", "zmm15",
3126 "zmm16", "zmm17", "zmm18", "zmm19",
3127 "zmm20", "zmm21", "zmm22", "zmm23",
3128 "zmm24", "zmm25", "zmm26", "zmm27",
3129 "zmm28", "zmm29", "zmm30", "zmm31"
3130};
3131static const char *att_names_zmm[] = {
3132 "%zmm0", "%zmm1", "%zmm2", "%zmm3",
3133 "%zmm4", "%zmm5", "%zmm6", "%zmm7",
3134 "%zmm8", "%zmm9", "%zmm10", "%zmm11",
3135 "%zmm12", "%zmm13", "%zmm14", "%zmm15",
3136 "%zmm16", "%zmm17", "%zmm18", "%zmm19",
3137 "%zmm20", "%zmm21", "%zmm22", "%zmm23",
3138 "%zmm24", "%zmm25", "%zmm26", "%zmm27",
3139 "%zmm28", "%zmm29", "%zmm30", "%zmm31"
3140};
3141
260cd341
LC
3142static const char **names_tmm;
3143static const char *intel_names_tmm[] = {
3144 "tmm0", "tmm1", "tmm2", "tmm3",
3145 "tmm4", "tmm5", "tmm6", "tmm7"
3146};
3147static const char *att_names_tmm[] = {
3148 "%tmm0", "%tmm1", "%tmm2", "%tmm3",
3149 "%tmm4", "%tmm5", "%tmm6", "%tmm7"
3150};
3151
43234a1e
L
3152static const char **names_mask;
3153static const char *intel_names_mask[] = {
3154 "k0", "k1", "k2", "k3", "k4", "k5", "k6", "k7"
3155};
3156static const char *att_names_mask[] = {
3157 "%k0", "%k1", "%k2", "%k3", "%k4", "%k5", "%k6", "%k7"
3158};
3159
3160static const char *names_rounding[] =
3161{
3162 "{rn-sae}",
3163 "{rd-sae}",
3164 "{ru-sae}",
3165 "{rz-sae}"
b9733481
L
3166};
3167
1ceb70f8
L
3168static const struct dis386 reg_table[][8] = {
3169 /* REG_80 */
252b5132 3170 {
bf890a93
IT
3171 { "addA", { Ebh1, Ib }, 0 },
3172 { "orA", { Ebh1, Ib }, 0 },
3173 { "adcA", { Ebh1, Ib }, 0 },
3174 { "sbbA", { Ebh1, Ib }, 0 },
3175 { "andA", { Ebh1, Ib }, 0 },
3176 { "subA", { Ebh1, Ib }, 0 },
3177 { "xorA", { Ebh1, Ib }, 0 },
3178 { "cmpA", { Eb, Ib }, 0 },
252b5132 3179 },
1ceb70f8 3180 /* REG_81 */
252b5132 3181 {
bf890a93
IT
3182 { "addQ", { Evh1, Iv }, 0 },
3183 { "orQ", { Evh1, Iv }, 0 },
3184 { "adcQ", { Evh1, Iv }, 0 },
3185 { "sbbQ", { Evh1, Iv }, 0 },
3186 { "andQ", { Evh1, Iv }, 0 },
3187 { "subQ", { Evh1, Iv }, 0 },
3188 { "xorQ", { Evh1, Iv }, 0 },
3189 { "cmpQ", { Ev, Iv }, 0 },
252b5132 3190 },
7148c369 3191 /* REG_83 */
252b5132 3192 {
bf890a93
IT
3193 { "addQ", { Evh1, sIb }, 0 },
3194 { "orQ", { Evh1, sIb }, 0 },
3195 { "adcQ", { Evh1, sIb }, 0 },
3196 { "sbbQ", { Evh1, sIb }, 0 },
3197 { "andQ", { Evh1, sIb }, 0 },
3198 { "subQ", { Evh1, sIb }, 0 },
3199 { "xorQ", { Evh1, sIb }, 0 },
3200 { "cmpQ", { Ev, sIb }, 0 },
252b5132 3201 },
1ceb70f8 3202 /* REG_8F */
4e7d34a6 3203 {
bf890a93 3204 { "popU", { stackEv }, 0 },
c48244a5 3205 { XOP_8F_TABLE (XOP_09) },
592d1631
L
3206 { Bad_Opcode },
3207 { Bad_Opcode },
3208 { Bad_Opcode },
f88c9eb0 3209 { XOP_8F_TABLE (XOP_09) },
4e7d34a6 3210 },
1ceb70f8 3211 /* REG_C0 */
252b5132 3212 {
bf890a93
IT
3213 { "rolA", { Eb, Ib }, 0 },
3214 { "rorA", { Eb, Ib }, 0 },
3215 { "rclA", { Eb, Ib }, 0 },
3216 { "rcrA", { Eb, Ib }, 0 },
3217 { "shlA", { Eb, Ib }, 0 },
3218 { "shrA", { Eb, Ib }, 0 },
e4bdd679 3219 { "shlA", { Eb, Ib }, 0 },
bf890a93 3220 { "sarA", { Eb, Ib }, 0 },
252b5132 3221 },
1ceb70f8 3222 /* REG_C1 */
252b5132 3223 {
bf890a93
IT
3224 { "rolQ", { Ev, Ib }, 0 },
3225 { "rorQ", { Ev, Ib }, 0 },
3226 { "rclQ", { Ev, Ib }, 0 },
3227 { "rcrQ", { Ev, Ib }, 0 },
3228 { "shlQ", { Ev, Ib }, 0 },
3229 { "shrQ", { Ev, Ib }, 0 },
e4bdd679 3230 { "shlQ", { Ev, Ib }, 0 },
bf890a93 3231 { "sarQ", { Ev, Ib }, 0 },
252b5132 3232 },
1ceb70f8 3233 /* REG_C6 */
4e7d34a6 3234 {
bf890a93 3235 { "movA", { Ebh3, Ib }, 0 },
42164a71
L
3236 { Bad_Opcode },
3237 { Bad_Opcode },
3238 { Bad_Opcode },
3239 { Bad_Opcode },
3240 { Bad_Opcode },
3241 { Bad_Opcode },
3242 { MOD_TABLE (MOD_C6_REG_7) },
4e7d34a6 3243 },
1ceb70f8 3244 /* REG_C7 */
4e7d34a6 3245 {
bf890a93 3246 { "movQ", { Evh3, Iv }, 0 },
42164a71
L
3247 { Bad_Opcode },
3248 { Bad_Opcode },
3249 { Bad_Opcode },
3250 { Bad_Opcode },
3251 { Bad_Opcode },
3252 { Bad_Opcode },
3253 { MOD_TABLE (MOD_C7_REG_7) },
4e7d34a6 3254 },
1ceb70f8 3255 /* REG_D0 */
252b5132 3256 {
bf890a93
IT
3257 { "rolA", { Eb, I1 }, 0 },
3258 { "rorA", { Eb, I1 }, 0 },
3259 { "rclA", { Eb, I1 }, 0 },
3260 { "rcrA", { Eb, I1 }, 0 },
3261 { "shlA", { Eb, I1 }, 0 },
3262 { "shrA", { Eb, I1 }, 0 },
e4bdd679 3263 { "shlA", { Eb, I1 }, 0 },
bf890a93 3264 { "sarA", { Eb, I1 }, 0 },
252b5132 3265 },
1ceb70f8 3266 /* REG_D1 */
252b5132 3267 {
bf890a93
IT
3268 { "rolQ", { Ev, I1 }, 0 },
3269 { "rorQ", { Ev, I1 }, 0 },
3270 { "rclQ", { Ev, I1 }, 0 },
3271 { "rcrQ", { Ev, I1 }, 0 },
3272 { "shlQ", { Ev, I1 }, 0 },
3273 { "shrQ", { Ev, I1 }, 0 },
e4bdd679 3274 { "shlQ", { Ev, I1 }, 0 },
bf890a93 3275 { "sarQ", { Ev, I1 }, 0 },
252b5132 3276 },
1ceb70f8 3277 /* REG_D2 */
252b5132 3278 {
bf890a93
IT
3279 { "rolA", { Eb, CL }, 0 },
3280 { "rorA", { Eb, CL }, 0 },
3281 { "rclA", { Eb, CL }, 0 },
3282 { "rcrA", { Eb, CL }, 0 },
3283 { "shlA", { Eb, CL }, 0 },
3284 { "shrA", { Eb, CL }, 0 },
e4bdd679 3285 { "shlA", { Eb, CL }, 0 },
bf890a93 3286 { "sarA", { Eb, CL }, 0 },
252b5132 3287 },
1ceb70f8 3288 /* REG_D3 */
252b5132 3289 {
bf890a93
IT
3290 { "rolQ", { Ev, CL }, 0 },
3291 { "rorQ", { Ev, CL }, 0 },
3292 { "rclQ", { Ev, CL }, 0 },
3293 { "rcrQ", { Ev, CL }, 0 },
3294 { "shlQ", { Ev, CL }, 0 },
3295 { "shrQ", { Ev, CL }, 0 },
e4bdd679 3296 { "shlQ", { Ev, CL }, 0 },
bf890a93 3297 { "sarQ", { Ev, CL }, 0 },
252b5132 3298 },
1ceb70f8 3299 /* REG_F6 */
252b5132 3300 {
bf890a93 3301 { "testA", { Eb, Ib }, 0 },
7db2c588 3302 { "testA", { Eb, Ib }, 0 },
bf890a93
IT
3303 { "notA", { Ebh1 }, 0 },
3304 { "negA", { Ebh1 }, 0 },
3305 { "mulA", { Eb }, 0 }, /* Don't print the implicit %al register, */
3306 { "imulA", { Eb }, 0 }, /* to distinguish these opcodes from other */
3307 { "divA", { Eb }, 0 }, /* mul/imul opcodes. Do the same for div */
3308 { "idivA", { Eb }, 0 }, /* and idiv for consistency. */
252b5132 3309 },
1ceb70f8 3310 /* REG_F7 */
252b5132 3311 {
bf890a93 3312 { "testQ", { Ev, Iv }, 0 },
7db2c588 3313 { "testQ", { Ev, Iv }, 0 },
bf890a93
IT
3314 { "notQ", { Evh1 }, 0 },
3315 { "negQ", { Evh1 }, 0 },
3316 { "mulQ", { Ev }, 0 }, /* Don't print the implicit register. */
3317 { "imulQ", { Ev }, 0 },
3318 { "divQ", { Ev }, 0 },
3319 { "idivQ", { Ev }, 0 },
252b5132 3320 },
1ceb70f8 3321 /* REG_FE */
252b5132 3322 {
bf890a93
IT
3323 { "incA", { Ebh1 }, 0 },
3324 { "decA", { Ebh1 }, 0 },
252b5132 3325 },
1ceb70f8 3326 /* REG_FF */
252b5132 3327 {
bf890a93
IT
3328 { "incQ", { Evh1 }, 0 },
3329 { "decQ", { Evh1 }, 0 },
9fef80d6 3330 { "call{&|}", { NOTRACK, indirEv, BND }, 0 },
4a357820 3331 { MOD_TABLE (MOD_FF_REG_3) },
9fef80d6 3332 { "jmp{&|}", { NOTRACK, indirEv, BND }, 0 },
4a357820 3333 { MOD_TABLE (MOD_FF_REG_5) },
bf890a93 3334 { "pushU", { stackEv }, 0 },
592d1631 3335 { Bad_Opcode },
252b5132 3336 },
1ceb70f8 3337 /* REG_0F00 */
252b5132 3338 {
bf890a93
IT
3339 { "sldtD", { Sv }, 0 },
3340 { "strD", { Sv }, 0 },
3341 { "lldt", { Ew }, 0 },
3342 { "ltr", { Ew }, 0 },
3343 { "verr", { Ew }, 0 },
3344 { "verw", { Ew }, 0 },
592d1631
L
3345 { Bad_Opcode },
3346 { Bad_Opcode },
252b5132 3347 },
1ceb70f8 3348 /* REG_0F01 */
252b5132 3349 {
1ceb70f8
L
3350 { MOD_TABLE (MOD_0F01_REG_0) },
3351 { MOD_TABLE (MOD_0F01_REG_1) },
3352 { MOD_TABLE (MOD_0F01_REG_2) },
3353 { MOD_TABLE (MOD_0F01_REG_3) },
bf890a93 3354 { "smswD", { Sv }, 0 },
8eab4136 3355 { MOD_TABLE (MOD_0F01_REG_5) },
bf890a93 3356 { "lmsw", { Ew }, 0 },
1ceb70f8 3357 { MOD_TABLE (MOD_0F01_REG_7) },
252b5132 3358 },
b5b1fc4f 3359 /* REG_0F0D */
252b5132 3360 {
bf890a93
IT
3361 { "prefetch", { Mb }, 0 },
3362 { "prefetchw", { Mb }, 0 },
3363 { "prefetchwt1", { Mb }, 0 },
3364 { "prefetch", { Mb }, 0 },
3365 { "prefetch", { Mb }, 0 },
3366 { "prefetch", { Mb }, 0 },
3367 { "prefetch", { Mb }, 0 },
3368 { "prefetch", { Mb }, 0 },
252b5132 3369 },
1ceb70f8 3370 /* REG_0F18 */
252b5132 3371 {
1ceb70f8
L
3372 { MOD_TABLE (MOD_0F18_REG_0) },
3373 { MOD_TABLE (MOD_0F18_REG_1) },
3374 { MOD_TABLE (MOD_0F18_REG_2) },
3375 { MOD_TABLE (MOD_0F18_REG_3) },
d7189fa5
RM
3376 { MOD_TABLE (MOD_0F18_REG_4) },
3377 { MOD_TABLE (MOD_0F18_REG_5) },
3378 { MOD_TABLE (MOD_0F18_REG_6) },
3379 { MOD_TABLE (MOD_0F18_REG_7) },
252b5132 3380 },
f8687e93 3381 /* REG_0F1C_P_0_MOD_0 */
c48935d7
IT
3382 {
3383 { "cldemote", { Mb }, 0 },
3384 { "nopQ", { Ev }, 0 },
3385 { "nopQ", { Ev }, 0 },
3386 { "nopQ", { Ev }, 0 },
3387 { "nopQ", { Ev }, 0 },
3388 { "nopQ", { Ev }, 0 },
3389 { "nopQ", { Ev }, 0 },
3390 { "nopQ", { Ev }, 0 },
3391 },
f8687e93 3392 /* REG_0F1E_P_1_MOD_3 */
603555e5
L
3393 {
3394 { "nopQ", { Ev }, 0 },
3395 { "rdsspK", { Rdq }, PREFIX_OPCODE },
3396 { "nopQ", { Ev }, 0 },
3397 { "nopQ", { Ev }, 0 },
3398 { "nopQ", { Ev }, 0 },
3399 { "nopQ", { Ev }, 0 },
3400 { "nopQ", { Ev }, 0 },
f8687e93 3401 { RM_TABLE (RM_0F1E_P_1_MOD_3_REG_7) },
603555e5 3402 },
1ceb70f8 3403 /* REG_0F71 */
a6bd098c 3404 {
592d1631
L
3405 { Bad_Opcode },
3406 { Bad_Opcode },
1ceb70f8 3407 { MOD_TABLE (MOD_0F71_REG_2) },
592d1631 3408 { Bad_Opcode },
1ceb70f8 3409 { MOD_TABLE (MOD_0F71_REG_4) },
592d1631 3410 { Bad_Opcode },
1ceb70f8 3411 { MOD_TABLE (MOD_0F71_REG_6) },
a6bd098c 3412 },
1ceb70f8 3413 /* REG_0F72 */
a6bd098c 3414 {
592d1631
L
3415 { Bad_Opcode },
3416 { Bad_Opcode },
1ceb70f8 3417 { MOD_TABLE (MOD_0F72_REG_2) },
592d1631 3418 { Bad_Opcode },
1ceb70f8 3419 { MOD_TABLE (MOD_0F72_REG_4) },
592d1631 3420 { Bad_Opcode },
1ceb70f8 3421 { MOD_TABLE (MOD_0F72_REG_6) },
a6bd098c 3422 },
1ceb70f8 3423 /* REG_0F73 */
252b5132 3424 {
592d1631
L
3425 { Bad_Opcode },
3426 { Bad_Opcode },
1ceb70f8
L
3427 { MOD_TABLE (MOD_0F73_REG_2) },
3428 { MOD_TABLE (MOD_0F73_REG_3) },
592d1631
L
3429 { Bad_Opcode },
3430 { Bad_Opcode },
1ceb70f8
L
3431 { MOD_TABLE (MOD_0F73_REG_6) },
3432 { MOD_TABLE (MOD_0F73_REG_7) },
252b5132 3433 },
1ceb70f8 3434 /* REG_0FA6 */
252b5132 3435 {
bf890a93
IT
3436 { "montmul", { { OP_0f07, 0 } }, 0 },
3437 { "xsha1", { { OP_0f07, 0 } }, 0 },
3438 { "xsha256", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3439 },
1ceb70f8 3440 /* REG_0FA7 */
4e7d34a6 3441 {
bf890a93
IT
3442 { "xstore-rng", { { OP_0f07, 0 } }, 0 },
3443 { "xcrypt-ecb", { { OP_0f07, 0 } }, 0 },
3444 { "xcrypt-cbc", { { OP_0f07, 0 } }, 0 },
3445 { "xcrypt-ctr", { { OP_0f07, 0 } }, 0 },
3446 { "xcrypt-cfb", { { OP_0f07, 0 } }, 0 },
3447 { "xcrypt-ofb", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3448 },
1ceb70f8 3449 /* REG_0FAE */
4e7d34a6 3450 {
1ceb70f8
L
3451 { MOD_TABLE (MOD_0FAE_REG_0) },
3452 { MOD_TABLE (MOD_0FAE_REG_1) },
3453 { MOD_TABLE (MOD_0FAE_REG_2) },
3454 { MOD_TABLE (MOD_0FAE_REG_3) },
475a2301 3455 { MOD_TABLE (MOD_0FAE_REG_4) },
1ceb70f8
L
3456 { MOD_TABLE (MOD_0FAE_REG_5) },
3457 { MOD_TABLE (MOD_0FAE_REG_6) },
3458 { MOD_TABLE (MOD_0FAE_REG_7) },
252b5132 3459 },
1ceb70f8 3460 /* REG_0FBA */
252b5132 3461 {
592d1631
L
3462 { Bad_Opcode },
3463 { Bad_Opcode },
3464 { Bad_Opcode },
3465 { Bad_Opcode },
bf890a93
IT
3466 { "btQ", { Ev, Ib }, 0 },
3467 { "btsQ", { Evh1, Ib }, 0 },
3468 { "btrQ", { Evh1, Ib }, 0 },
3469 { "btcQ", { Evh1, Ib }, 0 },
c608c12e 3470 },
1ceb70f8 3471 /* REG_0FC7 */
c608c12e 3472 {
592d1631 3473 { Bad_Opcode },
bf890a93 3474 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } }, 0 },
592d1631 3475 { Bad_Opcode },
963f3586
IT
3476 { MOD_TABLE (MOD_0FC7_REG_3) },
3477 { MOD_TABLE (MOD_0FC7_REG_4) },
3478 { MOD_TABLE (MOD_0FC7_REG_5) },
1ceb70f8
L
3479 { MOD_TABLE (MOD_0FC7_REG_6) },
3480 { MOD_TABLE (MOD_0FC7_REG_7) },
252b5132 3481 },
592a252b 3482 /* REG_VEX_0F71 */
c0f3af97 3483 {
592d1631
L
3484 { Bad_Opcode },
3485 { Bad_Opcode },
592a252b 3486 { MOD_TABLE (MOD_VEX_0F71_REG_2) },
592d1631 3487 { Bad_Opcode },
592a252b 3488 { MOD_TABLE (MOD_VEX_0F71_REG_4) },
592d1631 3489 { Bad_Opcode },
592a252b 3490 { MOD_TABLE (MOD_VEX_0F71_REG_6) },
c0f3af97 3491 },
592a252b 3492 /* REG_VEX_0F72 */
c0f3af97 3493 {
592d1631
L
3494 { Bad_Opcode },
3495 { Bad_Opcode },
592a252b 3496 { MOD_TABLE (MOD_VEX_0F72_REG_2) },
592d1631 3497 { Bad_Opcode },
592a252b 3498 { MOD_TABLE (MOD_VEX_0F72_REG_4) },
592d1631 3499 { Bad_Opcode },
592a252b 3500 { MOD_TABLE (MOD_VEX_0F72_REG_6) },
c0f3af97 3501 },
592a252b 3502 /* REG_VEX_0F73 */
c0f3af97 3503 {
592d1631
L
3504 { Bad_Opcode },
3505 { Bad_Opcode },
592a252b
L
3506 { MOD_TABLE (MOD_VEX_0F73_REG_2) },
3507 { MOD_TABLE (MOD_VEX_0F73_REG_3) },
592d1631
L
3508 { Bad_Opcode },
3509 { Bad_Opcode },
592a252b
L
3510 { MOD_TABLE (MOD_VEX_0F73_REG_6) },
3511 { MOD_TABLE (MOD_VEX_0F73_REG_7) },
c0f3af97 3512 },
592a252b 3513 /* REG_VEX_0FAE */
c0f3af97 3514 {
592d1631
L
3515 { Bad_Opcode },
3516 { Bad_Opcode },
592a252b
L
3517 { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
3518 { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
c0f3af97 3519 },
260cd341
LC
3520 /* REG_VEX_0F3849_X86_64_P_0_W_0_M_1 */
3521 {
3522 { RM_TABLE (RM_VEX_0F3849_X86_64_P_0_W_0_M_1_R_0) },
3523 },
f12dc422
L
3524 /* REG_VEX_0F38F3 */
3525 {
3526 { Bad_Opcode },
3527 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
3528 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
3529 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
3530 },
467bbef0 3531 /* REG_0FXOP_09_01_L_0 */
2a2a0f38
QN
3532 {
3533 { Bad_Opcode },
467bbef0
JB
3534 { "blcfill", { VexGdq, Edq }, 0 },
3535 { "blsfill", { VexGdq, Edq }, 0 },
3536 { "blcs", { VexGdq, Edq }, 0 },
3537 { "tzmsk", { VexGdq, Edq }, 0 },
3538 { "blcic", { VexGdq, Edq }, 0 },
3539 { "blsic", { VexGdq, Edq }, 0 },
3540 { "t1mskc", { VexGdq, Edq }, 0 },
2a2a0f38 3541 },
467bbef0 3542 /* REG_0FXOP_09_02_L_0 */
2a2a0f38
QN
3543 {
3544 { Bad_Opcode },
467bbef0 3545 { "blcmsk", { VexGdq, Edq }, 0 },
2a2a0f38
QN
3546 { Bad_Opcode },
3547 { Bad_Opcode },
3548 { Bad_Opcode },
3549 { Bad_Opcode },
467bbef0
JB
3550 { "blci", { VexGdq, Edq }, 0 },
3551 },
3552 /* REG_0FXOP_09_12_M_1_L_0 */
3553 {
3554 { "llwpcb", { Edq }, 0 },
3555 { "slwpcb", { Edq }, 0 },
3556 },
3557 /* REG_0FXOP_0A_12_L_0 */
3558 {
3559 { "lwpins", { VexGdq, Ed, Id }, 0 },
3560 { "lwpval", { VexGdq, Ed, Id }, 0 },
2a2a0f38 3561 },
ad692897
L
3562
3563#include "i386-dis-evex-reg.h"
4e7d34a6
L
3564};
3565
1ceb70f8
L
3566static const struct dis386 prefix_table[][4] = {
3567 /* PREFIX_90 */
252b5132 3568 {
bf890a93
IT
3569 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
3570 { "pause", { XX }, 0 },
3571 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
507bd325 3572 { NULL, { { NULL, 0 } }, PREFIX_IGNORED }
0f10071e 3573 },
4e7d34a6 3574
f9630fa6 3575 /* PREFIX_0F01_REG_3_RM_1 */
a847e322
JB
3576 {
3577 { "vmmcall", { Skip_MODRM }, 0 },
3578 { "vmgexit", { Skip_MODRM }, 0 },
d27c357a
JB
3579 { Bad_Opcode },
3580 { "vmgexit", { Skip_MODRM }, 0 },
a847e322
JB
3581 },
3582
f8687e93 3583 /* PREFIX_0F01_REG_5_MOD_0 */
603555e5
L
3584 {
3585 { Bad_Opcode },
3586 { "rstorssp", { Mq }, PREFIX_OPCODE },
3587 },
3588
f8687e93 3589 /* PREFIX_0F01_REG_5_MOD_3_RM_0 */
603555e5 3590 {
4b27d27c 3591 { "serialize", { Skip_MODRM }, PREFIX_OPCODE },
2234eee6 3592 { "setssbsy", { Skip_MODRM }, PREFIX_OPCODE },
bb651e8b 3593 { Bad_Opcode },
efe30057 3594 { "xsusldtrk", { Skip_MODRM }, PREFIX_OPCODE },
bb651e8b
CL
3595 },
3596
3597 /* PREFIX_0F01_REG_5_MOD_3_RM_1 */
3598 {
3599 { Bad_Opcode },
3600 { Bad_Opcode },
3601 { Bad_Opcode },
3602 { "xresldtrk", { Skip_MODRM }, PREFIX_OPCODE },
603555e5
L
3603 },
3604
f8687e93 3605 /* PREFIX_0F01_REG_5_MOD_3_RM_2 */
603555e5
L
3606 {
3607 { Bad_Opcode },
c2f76402 3608 { "saveprevssp", { Skip_MODRM }, PREFIX_OPCODE },
603555e5
L
3609 },
3610
267b8516
JB
3611 /* PREFIX_0F01_REG_7_MOD_3_RM_2 */
3612 {
3613 { "monitorx", { { OP_Monitor, 0 } }, 0 },
142861df 3614 { "mcommit", { Skip_MODRM }, 0 },
267b8516
JB
3615 },
3616
3617 /* PREFIX_0F01_REG_7_MOD_3_RM_3 */
3618 {
7abb8d81 3619 { "mwaitx", { { OP_Mwait, eBX_reg } }, 0 },
267b8516
JB
3620 },
3621
3233d7d0
IT
3622 /* PREFIX_0F09 */
3623 {
3624 { "wbinvd", { XX }, 0 },
3625 { "wbnoinvd", { XX }, 0 },
3626 },
3627
1ceb70f8 3628 /* PREFIX_0F10 */
cc0ec051 3629 {
507bd325
L
3630 { "movups", { XM, EXx }, PREFIX_OPCODE },
3631 { "movss", { XM, EXd }, PREFIX_OPCODE },
3632 { "movupd", { XM, EXx }, PREFIX_OPCODE },
3633 { "movsd", { XM, EXq }, PREFIX_OPCODE },
30d1c836 3634 },
4e7d34a6 3635
1ceb70f8 3636 /* PREFIX_0F11 */
30d1c836 3637 {
507bd325
L
3638 { "movups", { EXxS, XM }, PREFIX_OPCODE },
3639 { "movss", { EXdS, XM }, PREFIX_OPCODE },
3640 { "movupd", { EXxS, XM }, PREFIX_OPCODE },
3641 { "movsd", { EXqS, XM }, PREFIX_OPCODE },
4e7d34a6 3642 },
252b5132 3643
1ceb70f8 3644 /* PREFIX_0F12 */
c608c12e 3645 {
1ceb70f8 3646 { MOD_TABLE (MOD_0F12_PREFIX_0) },
507bd325 3647 { "movsldup", { XM, EXx }, PREFIX_OPCODE },
18897deb 3648 { MOD_TABLE (MOD_0F12_PREFIX_2) },
507bd325 3649 { "movddup", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3650 },
4e7d34a6 3651
1ceb70f8 3652 /* PREFIX_0F16 */
c608c12e 3653 {
1ceb70f8 3654 { MOD_TABLE (MOD_0F16_PREFIX_0) },
507bd325 3655 { "movshdup", { XM, EXx }, PREFIX_OPCODE },
18897deb 3656 { MOD_TABLE (MOD_0F16_PREFIX_2) },
c608c12e 3657 },
4e7d34a6 3658
7e8b059b
L
3659 /* PREFIX_0F1A */
3660 {
3661 { MOD_TABLE (MOD_0F1A_PREFIX_0) },
bf890a93
IT
3662 { "bndcl", { Gbnd, Ev_bnd }, 0 },
3663 { "bndmov", { Gbnd, Ebnd }, 0 },
3664 { "bndcu", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3665 },
3666
3667 /* PREFIX_0F1B */
3668 {
3669 { MOD_TABLE (MOD_0F1B_PREFIX_0) },
3670 { MOD_TABLE (MOD_0F1B_PREFIX_1) },
9f79e886 3671 { "bndmov", { EbndS, Gbnd }, 0 },
bf890a93 3672 { "bndcn", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3673 },
3674
c48935d7
IT
3675 /* PREFIX_0F1C */
3676 {
3677 { MOD_TABLE (MOD_0F1C_PREFIX_0) },
3678 { "nopQ", { Ev }, PREFIX_OPCODE },
3679 { "nopQ", { Ev }, PREFIX_OPCODE },
3680 { "nopQ", { Ev }, PREFIX_OPCODE },
3681 },
3682
603555e5
L
3683 /* PREFIX_0F1E */
3684 {
3685 { "nopQ", { Ev }, PREFIX_OPCODE },
3686 { MOD_TABLE (MOD_0F1E_PREFIX_1) },
3687 { "nopQ", { Ev }, PREFIX_OPCODE },
3688 { "nopQ", { Ev }, PREFIX_OPCODE },
3689 },
3690
1ceb70f8 3691 /* PREFIX_0F2A */
c608c12e 3692 {
507bd325 3693 { "cvtpi2ps", { XM, EMCq }, PREFIX_OPCODE },
b24d668c 3694 { "cvtsi2ss{%LQ|}", { XM, Edq }, PREFIX_OPCODE },
507bd325 3695 { "cvtpi2pd", { XM, EMCq }, PREFIX_OPCODE },
b24d668c 3696 { "cvtsi2sd{%LQ|}", { XM, Edq }, 0 },
c608c12e 3697 },
4e7d34a6 3698
1ceb70f8 3699 /* PREFIX_0F2B */
c608c12e 3700 {
75c135a8
L
3701 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
3702 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
3703 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
3704 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
c608c12e 3705 },
4e7d34a6 3706
1ceb70f8 3707 /* PREFIX_0F2C */
c608c12e 3708 {
507bd325 3709 { "cvttps2pi", { MXC, EXq }, PREFIX_OPCODE },
e1a1babd 3710 { "cvttss2si", { Gdq, EXd }, PREFIX_OPCODE },
507bd325 3711 { "cvttpd2pi", { MXC, EXx }, PREFIX_OPCODE },
e1a1babd 3712 { "cvttsd2si", { Gdq, EXq }, PREFIX_OPCODE },
c608c12e 3713 },
4e7d34a6 3714
1ceb70f8 3715 /* PREFIX_0F2D */
c608c12e 3716 {
507bd325 3717 { "cvtps2pi", { MXC, EXq }, PREFIX_OPCODE },
e1a1babd 3718 { "cvtss2si", { Gdq, EXd }, PREFIX_OPCODE },
507bd325 3719 { "cvtpd2pi", { MXC, EXx }, PREFIX_OPCODE },
e1a1babd 3720 { "cvtsd2si", { Gdq, EXq }, PREFIX_OPCODE },
c608c12e 3721 },
4e7d34a6 3722
1ceb70f8 3723 /* PREFIX_0F2E */
c608c12e 3724 {
bf890a93 3725 { "ucomiss",{ XM, EXd }, 0 },
592d1631 3726 { Bad_Opcode },
bf890a93 3727 { "ucomisd",{ XM, EXq }, 0 },
c608c12e 3728 },
4e7d34a6 3729
1ceb70f8 3730 /* PREFIX_0F2F */
c608c12e 3731 {
bf890a93 3732 { "comiss", { XM, EXd }, 0 },
592d1631 3733 { Bad_Opcode },
bf890a93 3734 { "comisd", { XM, EXq }, 0 },
c608c12e 3735 },
4e7d34a6 3736
1ceb70f8 3737 /* PREFIX_0F51 */
c608c12e 3738 {
507bd325
L
3739 { "sqrtps", { XM, EXx }, PREFIX_OPCODE },
3740 { "sqrtss", { XM, EXd }, PREFIX_OPCODE },
3741 { "sqrtpd", { XM, EXx }, PREFIX_OPCODE },
3742 { "sqrtsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3743 },
4e7d34a6 3744
1ceb70f8 3745 /* PREFIX_0F52 */
c608c12e 3746 {
507bd325
L
3747 { "rsqrtps",{ XM, EXx }, PREFIX_OPCODE },
3748 { "rsqrtss",{ XM, EXd }, PREFIX_OPCODE },
c608c12e 3749 },
4e7d34a6 3750
1ceb70f8 3751 /* PREFIX_0F53 */
c608c12e 3752 {
507bd325
L
3753 { "rcpps", { XM, EXx }, PREFIX_OPCODE },
3754 { "rcpss", { XM, EXd }, PREFIX_OPCODE },
c608c12e 3755 },
4e7d34a6 3756
1ceb70f8 3757 /* PREFIX_0F58 */
c608c12e 3758 {
507bd325
L
3759 { "addps", { XM, EXx }, PREFIX_OPCODE },
3760 { "addss", { XM, EXd }, PREFIX_OPCODE },
3761 { "addpd", { XM, EXx }, PREFIX_OPCODE },
3762 { "addsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3763 },
4e7d34a6 3764
1ceb70f8 3765 /* PREFIX_0F59 */
c608c12e 3766 {
507bd325
L
3767 { "mulps", { XM, EXx }, PREFIX_OPCODE },
3768 { "mulss", { XM, EXd }, PREFIX_OPCODE },
3769 { "mulpd", { XM, EXx }, PREFIX_OPCODE },
3770 { "mulsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3771 },
4e7d34a6 3772
1ceb70f8 3773 /* PREFIX_0F5A */
041bd2e0 3774 {
507bd325
L
3775 { "cvtps2pd", { XM, EXq }, PREFIX_OPCODE },
3776 { "cvtss2sd", { XM, EXd }, PREFIX_OPCODE },
3777 { "cvtpd2ps", { XM, EXx }, PREFIX_OPCODE },
3778 { "cvtsd2ss", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3779 },
4e7d34a6 3780
1ceb70f8 3781 /* PREFIX_0F5B */
041bd2e0 3782 {
507bd325
L
3783 { "cvtdq2ps", { XM, EXx }, PREFIX_OPCODE },
3784 { "cvttps2dq", { XM, EXx }, PREFIX_OPCODE },
3785 { "cvtps2dq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 3786 },
4e7d34a6 3787
1ceb70f8 3788 /* PREFIX_0F5C */
041bd2e0 3789 {
507bd325
L
3790 { "subps", { XM, EXx }, PREFIX_OPCODE },
3791 { "subss", { XM, EXd }, PREFIX_OPCODE },
3792 { "subpd", { XM, EXx }, PREFIX_OPCODE },
3793 { "subsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3794 },
4e7d34a6 3795
1ceb70f8 3796 /* PREFIX_0F5D */
041bd2e0 3797 {
507bd325
L
3798 { "minps", { XM, EXx }, PREFIX_OPCODE },
3799 { "minss", { XM, EXd }, PREFIX_OPCODE },
3800 { "minpd", { XM, EXx }, PREFIX_OPCODE },
3801 { "minsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3802 },
4e7d34a6 3803
1ceb70f8 3804 /* PREFIX_0F5E */
041bd2e0 3805 {
507bd325
L
3806 { "divps", { XM, EXx }, PREFIX_OPCODE },
3807 { "divss", { XM, EXd }, PREFIX_OPCODE },
3808 { "divpd", { XM, EXx }, PREFIX_OPCODE },
3809 { "divsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3810 },
4e7d34a6 3811
1ceb70f8 3812 /* PREFIX_0F5F */
041bd2e0 3813 {
507bd325
L
3814 { "maxps", { XM, EXx }, PREFIX_OPCODE },
3815 { "maxss", { XM, EXd }, PREFIX_OPCODE },
3816 { "maxpd", { XM, EXx }, PREFIX_OPCODE },
3817 { "maxsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3818 },
4e7d34a6 3819
1ceb70f8 3820 /* PREFIX_0F60 */
041bd2e0 3821 {
507bd325 3822 { "punpcklbw",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3823 { Bad_Opcode },
507bd325 3824 { "punpcklbw",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3825 },
4e7d34a6 3826
1ceb70f8 3827 /* PREFIX_0F61 */
041bd2e0 3828 {
507bd325 3829 { "punpcklwd",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3830 { Bad_Opcode },
507bd325 3831 { "punpcklwd",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3832 },
4e7d34a6 3833
1ceb70f8 3834 /* PREFIX_0F62 */
041bd2e0 3835 {
507bd325 3836 { "punpckldq",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3837 { Bad_Opcode },
507bd325 3838 { "punpckldq",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3839 },
4e7d34a6 3840
1ceb70f8 3841 /* PREFIX_0F6C */
041bd2e0 3842 {
592d1631
L
3843 { Bad_Opcode },
3844 { Bad_Opcode },
507bd325 3845 { "punpcklqdq", { XM, EXx }, PREFIX_OPCODE },
0f17484f 3846 },
4e7d34a6 3847
1ceb70f8 3848 /* PREFIX_0F6D */
0f17484f 3849 {
592d1631
L
3850 { Bad_Opcode },
3851 { Bad_Opcode },
507bd325 3852 { "punpckhqdq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 3853 },
4e7d34a6 3854
1ceb70f8 3855 /* PREFIX_0F6F */
ca164297 3856 {
507bd325
L
3857 { "movq", { MX, EM }, PREFIX_OPCODE },
3858 { "movdqu", { XM, EXx }, PREFIX_OPCODE },
3859 { "movdqa", { XM, EXx }, PREFIX_OPCODE },
ca164297 3860 },
4e7d34a6 3861
1ceb70f8 3862 /* PREFIX_0F70 */
4e7d34a6 3863 {
507bd325
L
3864 { "pshufw", { MX, EM, Ib }, PREFIX_OPCODE },
3865 { "pshufhw",{ XM, EXx, Ib }, PREFIX_OPCODE },
3866 { "pshufd", { XM, EXx, Ib }, PREFIX_OPCODE },
3867 { "pshuflw",{ XM, EXx, Ib }, PREFIX_OPCODE },
4e7d34a6
L
3868 },
3869
92fddf8e
L
3870 /* PREFIX_0F73_REG_3 */
3871 {
592d1631
L
3872 { Bad_Opcode },
3873 { Bad_Opcode },
bf890a93 3874 { "psrldq", { XS, Ib }, 0 },
92fddf8e
L
3875 },
3876
3877 /* PREFIX_0F73_REG_7 */
3878 {
592d1631
L
3879 { Bad_Opcode },
3880 { Bad_Opcode },
bf890a93 3881 { "pslldq", { XS, Ib }, 0 },
92fddf8e
L
3882 },
3883
1ceb70f8 3884 /* PREFIX_0F78 */
4e7d34a6 3885 {
bf890a93 3886 {"vmread", { Em, Gm }, 0 },
592d1631 3887 { Bad_Opcode },
bf890a93
IT
3888 {"extrq", { XS, Ib, Ib }, 0 },
3889 {"insertq", { XM, XS, Ib, Ib }, 0 },
4e7d34a6
L
3890 },
3891
1ceb70f8 3892 /* PREFIX_0F79 */
4e7d34a6 3893 {
bf890a93 3894 {"vmwrite", { Gm, Em }, 0 },
592d1631 3895 { Bad_Opcode },
bf890a93
IT
3896 {"extrq", { XM, XS }, 0 },
3897 {"insertq", { XM, XS }, 0 },
4e7d34a6
L
3898 },
3899
1ceb70f8 3900 /* PREFIX_0F7C */
ca164297 3901 {
592d1631
L
3902 { Bad_Opcode },
3903 { Bad_Opcode },
507bd325
L
3904 { "haddpd", { XM, EXx }, PREFIX_OPCODE },
3905 { "haddps", { XM, EXx }, PREFIX_OPCODE },
ca164297 3906 },
4e7d34a6 3907
1ceb70f8 3908 /* PREFIX_0F7D */
ca164297 3909 {
592d1631
L
3910 { Bad_Opcode },
3911 { Bad_Opcode },
507bd325
L
3912 { "hsubpd", { XM, EXx }, PREFIX_OPCODE },
3913 { "hsubps", { XM, EXx }, PREFIX_OPCODE },
ca164297 3914 },
4e7d34a6 3915
1ceb70f8 3916 /* PREFIX_0F7E */
ca164297 3917 {
507bd325
L
3918 { "movK", { Edq, MX }, PREFIX_OPCODE },
3919 { "movq", { XM, EXq }, PREFIX_OPCODE },
3920 { "movK", { Edq, XM }, PREFIX_OPCODE },
ca164297 3921 },
4e7d34a6 3922
1ceb70f8 3923 /* PREFIX_0F7F */
ca164297 3924 {
507bd325
L
3925 { "movq", { EMS, MX }, PREFIX_OPCODE },
3926 { "movdqu", { EXxS, XM }, PREFIX_OPCODE },
3927 { "movdqa", { EXxS, XM }, PREFIX_OPCODE },
ca164297 3928 },
4e7d34a6 3929
f8687e93 3930 /* PREFIX_0FAE_REG_0_MOD_3 */
c7b8aa3a
L
3931 {
3932 { Bad_Opcode },
bf890a93 3933 { "rdfsbase", { Ev }, 0 },
c7b8aa3a
L
3934 },
3935
f8687e93 3936 /* PREFIX_0FAE_REG_1_MOD_3 */
c7b8aa3a
L
3937 {
3938 { Bad_Opcode },
bf890a93 3939 { "rdgsbase", { Ev }, 0 },
c7b8aa3a
L
3940 },
3941
f8687e93 3942 /* PREFIX_0FAE_REG_2_MOD_3 */
c7b8aa3a
L
3943 {
3944 { Bad_Opcode },
bf890a93 3945 { "wrfsbase", { Ev }, 0 },
c7b8aa3a
L
3946 },
3947
f8687e93 3948 /* PREFIX_0FAE_REG_3_MOD_3 */
c7b8aa3a
L
3949 {
3950 { Bad_Opcode },
bf890a93 3951 { "wrgsbase", { Ev }, 0 },
c7b8aa3a
L
3952 },
3953
f8687e93 3954 /* PREFIX_0FAE_REG_4_MOD_0 */
6b40c462
L
3955 {
3956 { "xsave", { FXSAVE }, 0 },
b24d668c 3957 { "ptwrite{%LQ|}", { Edq }, 0 },
6b40c462
L
3958 },
3959
f8687e93 3960 /* PREFIX_0FAE_REG_4_MOD_3 */
6b40c462
L
3961 {
3962 { Bad_Opcode },
b24d668c 3963 { "ptwrite{%LQ|}", { Edq }, 0 },
6b40c462
L
3964 },
3965
f8687e93 3966 /* PREFIX_0FAE_REG_5_MOD_0 */
603555e5
L
3967 {
3968 { "xrstor", { FXSAVE }, PREFIX_OPCODE },
2234eee6
L
3969 },
3970
f8687e93 3971 /* PREFIX_0FAE_REG_5_MOD_3 */
2234eee6
L
3972 {
3973 { "lfence", { Skip_MODRM }, 0 },
3974 { "incsspK", { Rdq }, PREFIX_OPCODE },
603555e5
L
3975 },
3976
f8687e93 3977 /* PREFIX_0FAE_REG_6_MOD_0 */
c5e7287a 3978 {
603555e5
L
3979 { "xsaveopt", { FXSAVE }, PREFIX_OPCODE },
3980 { "clrssbsy", { Mq }, PREFIX_OPCODE },
3981 { "clwb", { Mb }, PREFIX_OPCODE },
c5e7287a
IT
3982 },
3983
f8687e93 3984 /* PREFIX_0FAE_REG_6_MOD_3 */
de89d0a3 3985 {
f8687e93 3986 { RM_TABLE (RM_0FAE_REG_6_MOD_3_P_0) },
de89d0a3 3987 { "umonitor", { Eva }, PREFIX_OPCODE },
ae1d3843
L
3988 { "tpause", { Edq }, PREFIX_OPCODE },
3989 { "umwait", { Edq }, PREFIX_OPCODE },
de89d0a3
IT
3990 },
3991
f8687e93 3992 /* PREFIX_0FAE_REG_7_MOD_0 */
963f3586 3993 {
bf890a93 3994 { "clflush", { Mb }, 0 },
963f3586 3995 { Bad_Opcode },
bf890a93 3996 { "clflushopt", { Mb }, 0 },
963f3586
IT
3997 },
3998
1ceb70f8 3999 /* PREFIX_0FB8 */
ca164297 4000 {
592d1631 4001 { Bad_Opcode },
bf890a93 4002 { "popcntS", { Gv, Ev }, 0 },
ca164297 4003 },
4e7d34a6 4004
f12dc422
L
4005 /* PREFIX_0FBC */
4006 {
bf890a93
IT
4007 { "bsfS", { Gv, Ev }, 0 },
4008 { "tzcntS", { Gv, Ev }, 0 },
4009 { "bsfS", { Gv, Ev }, 0 },
f12dc422
L
4010 },
4011
1ceb70f8 4012 /* PREFIX_0FBD */
050dfa73 4013 {
bf890a93
IT
4014 { "bsrS", { Gv, Ev }, 0 },
4015 { "lzcntS", { Gv, Ev }, 0 },
4016 { "bsrS", { Gv, Ev }, 0 },
050dfa73
MM
4017 },
4018
1ceb70f8 4019 /* PREFIX_0FC2 */
050dfa73 4020 {
507bd325
L
4021 { "cmpps", { XM, EXx, CMP }, PREFIX_OPCODE },
4022 { "cmpss", { XM, EXd, CMP }, PREFIX_OPCODE },
4023 { "cmppd", { XM, EXx, CMP }, PREFIX_OPCODE },
4024 { "cmpsd", { XM, EXq, CMP }, PREFIX_OPCODE },
050dfa73 4025 },
246c51aa 4026
f8687e93 4027 /* PREFIX_0FC3_MOD_0 */
4ee52178 4028 {
e1a1babd 4029 { "movntiS", { Edq, Gdq }, PREFIX_OPCODE },
4ee52178
L
4030 },
4031
f8687e93 4032 /* PREFIX_0FC7_REG_6_MOD_0 */
92fddf8e 4033 {
bf890a93
IT
4034 { "vmptrld",{ Mq }, 0 },
4035 { "vmxon", { Mq }, 0 },
4036 { "vmclear",{ Mq }, 0 },
92fddf8e
L
4037 },
4038
f8687e93 4039 /* PREFIX_0FC7_REG_6_MOD_3 */
f24bcbaa
L
4040 {
4041 { "rdrand", { Ev }, 0 },
4042 { Bad_Opcode },
4043 { "rdrand", { Ev }, 0 }
4044 },
4045
f8687e93 4046 /* PREFIX_0FC7_REG_7_MOD_3 */
f24bcbaa
L
4047 {
4048 { "rdseed", { Ev }, 0 },
8bc52696 4049 { "rdpid", { Em }, 0 },
f24bcbaa
L
4050 { "rdseed", { Ev }, 0 },
4051 },
4052
1ceb70f8 4053 /* PREFIX_0FD0 */
050dfa73 4054 {
592d1631
L
4055 { Bad_Opcode },
4056 { Bad_Opcode },
bf890a93
IT
4057 { "addsubpd", { XM, EXx }, 0 },
4058 { "addsubps", { XM, EXx }, 0 },
246c51aa 4059 },
050dfa73 4060
1ceb70f8 4061 /* PREFIX_0FD6 */
050dfa73 4062 {
592d1631 4063 { Bad_Opcode },
bf890a93
IT
4064 { "movq2dq",{ XM, MS }, 0 },
4065 { "movq", { EXqS, XM }, 0 },
4066 { "movdq2q",{ MX, XS }, 0 },
050dfa73
MM
4067 },
4068
1ceb70f8 4069 /* PREFIX_0FE6 */
7918206c 4070 {
592d1631 4071 { Bad_Opcode },
507bd325
L
4072 { "cvtdq2pd", { XM, EXq }, PREFIX_OPCODE },
4073 { "cvttpd2dq", { XM, EXx }, PREFIX_OPCODE },
4074 { "cvtpd2dq", { XM, EXx }, PREFIX_OPCODE },
7918206c 4075 },
8b38ad71 4076
1ceb70f8 4077 /* PREFIX_0FE7 */
8b38ad71 4078 {
507bd325 4079 { "movntq", { Mq, MX }, PREFIX_OPCODE },
592d1631 4080 { Bad_Opcode },
75c135a8 4081 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
4e7d34a6
L
4082 },
4083
1ceb70f8 4084 /* PREFIX_0FF0 */
4e7d34a6 4085 {
592d1631
L
4086 { Bad_Opcode },
4087 { Bad_Opcode },
4088 { Bad_Opcode },
1ceb70f8 4089 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4e7d34a6
L
4090 },
4091
1ceb70f8 4092 /* PREFIX_0FF7 */
4e7d34a6 4093 {
507bd325 4094 { "maskmovq", { MX, MS }, PREFIX_OPCODE },
592d1631 4095 { Bad_Opcode },
507bd325 4096 { "maskmovdqu", { XM, XS }, PREFIX_OPCODE },
8b38ad71 4097 },
42903f7f 4098
1ceb70f8 4099 /* PREFIX_0F3810 */
42903f7f 4100 {
592d1631
L
4101 { Bad_Opcode },
4102 { Bad_Opcode },
507bd325 4103 { "pblendvb", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4104 },
4105
1ceb70f8 4106 /* PREFIX_0F3814 */
42903f7f 4107 {
592d1631
L
4108 { Bad_Opcode },
4109 { Bad_Opcode },
507bd325 4110 { "blendvps", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4111 },
4112
1ceb70f8 4113 /* PREFIX_0F3815 */
42903f7f 4114 {
592d1631
L
4115 { Bad_Opcode },
4116 { Bad_Opcode },
507bd325 4117 { "blendvpd", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4118 },
4119
1ceb70f8 4120 /* PREFIX_0F3817 */
42903f7f 4121 {
592d1631
L
4122 { Bad_Opcode },
4123 { Bad_Opcode },
507bd325 4124 { "ptest", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4125 },
4126
1ceb70f8 4127 /* PREFIX_0F3820 */
42903f7f 4128 {
592d1631
L
4129 { Bad_Opcode },
4130 { Bad_Opcode },
507bd325 4131 { "pmovsxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4132 },
4133
1ceb70f8 4134 /* PREFIX_0F3821 */
42903f7f 4135 {
592d1631
L
4136 { Bad_Opcode },
4137 { Bad_Opcode },
507bd325 4138 { "pmovsxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4139 },
4140
1ceb70f8 4141 /* PREFIX_0F3822 */
42903f7f 4142 {
592d1631
L
4143 { Bad_Opcode },
4144 { Bad_Opcode },
507bd325 4145 { "pmovsxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4146 },
4147
1ceb70f8 4148 /* PREFIX_0F3823 */
42903f7f 4149 {
592d1631
L
4150 { Bad_Opcode },
4151 { Bad_Opcode },
507bd325 4152 { "pmovsxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4153 },
4154
1ceb70f8 4155 /* PREFIX_0F3824 */
42903f7f 4156 {
592d1631
L
4157 { Bad_Opcode },
4158 { Bad_Opcode },
507bd325 4159 { "pmovsxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4160 },
4161
1ceb70f8 4162 /* PREFIX_0F3825 */
42903f7f 4163 {
592d1631
L
4164 { Bad_Opcode },
4165 { Bad_Opcode },
507bd325 4166 { "pmovsxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4167 },
4168
1ceb70f8 4169 /* PREFIX_0F3828 */
42903f7f 4170 {
592d1631
L
4171 { Bad_Opcode },
4172 { Bad_Opcode },
507bd325 4173 { "pmuldq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4174 },
4175
1ceb70f8 4176 /* PREFIX_0F3829 */
42903f7f 4177 {
592d1631
L
4178 { Bad_Opcode },
4179 { Bad_Opcode },
507bd325 4180 { "pcmpeqq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4181 },
4182
1ceb70f8 4183 /* PREFIX_0F382A */
42903f7f 4184 {
592d1631
L
4185 { Bad_Opcode },
4186 { Bad_Opcode },
75c135a8 4187 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
42903f7f
L
4188 },
4189
1ceb70f8 4190 /* PREFIX_0F382B */
42903f7f 4191 {
592d1631
L
4192 { Bad_Opcode },
4193 { Bad_Opcode },
507bd325 4194 { "packusdw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4195 },
4196
1ceb70f8 4197 /* PREFIX_0F3830 */
42903f7f 4198 {
592d1631
L
4199 { Bad_Opcode },
4200 { Bad_Opcode },
507bd325 4201 { "pmovzxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4202 },
4203
1ceb70f8 4204 /* PREFIX_0F3831 */
42903f7f 4205 {
592d1631
L
4206 { Bad_Opcode },
4207 { Bad_Opcode },
507bd325 4208 { "pmovzxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4209 },
4210
1ceb70f8 4211 /* PREFIX_0F3832 */
42903f7f 4212 {
592d1631
L
4213 { Bad_Opcode },
4214 { Bad_Opcode },
507bd325 4215 { "pmovzxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4216 },
4217
1ceb70f8 4218 /* PREFIX_0F3833 */
42903f7f 4219 {
592d1631
L
4220 { Bad_Opcode },
4221 { Bad_Opcode },
507bd325 4222 { "pmovzxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4223 },
4224
1ceb70f8 4225 /* PREFIX_0F3834 */
42903f7f 4226 {
592d1631
L
4227 { Bad_Opcode },
4228 { Bad_Opcode },
507bd325 4229 { "pmovzxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4230 },
4231
1ceb70f8 4232 /* PREFIX_0F3835 */
42903f7f 4233 {
592d1631
L
4234 { Bad_Opcode },
4235 { Bad_Opcode },
507bd325 4236 { "pmovzxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4237 },
4238
1ceb70f8 4239 /* PREFIX_0F3837 */
4e7d34a6 4240 {
592d1631
L
4241 { Bad_Opcode },
4242 { Bad_Opcode },
507bd325 4243 { "pcmpgtq", { XM, EXx }, PREFIX_OPCODE },
4e7d34a6
L
4244 },
4245
1ceb70f8 4246 /* PREFIX_0F3838 */
42903f7f 4247 {
592d1631
L
4248 { Bad_Opcode },
4249 { Bad_Opcode },
507bd325 4250 { "pminsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4251 },
4252
1ceb70f8 4253 /* PREFIX_0F3839 */
42903f7f 4254 {
592d1631
L
4255 { Bad_Opcode },
4256 { Bad_Opcode },
507bd325 4257 { "pminsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4258 },
4259
1ceb70f8 4260 /* PREFIX_0F383A */
42903f7f 4261 {
592d1631
L
4262 { Bad_Opcode },
4263 { Bad_Opcode },
507bd325 4264 { "pminuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4265 },
4266
1ceb70f8 4267 /* PREFIX_0F383B */
42903f7f 4268 {
592d1631
L
4269 { Bad_Opcode },
4270 { Bad_Opcode },
507bd325 4271 { "pminud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4272 },
4273
1ceb70f8 4274 /* PREFIX_0F383C */
42903f7f 4275 {
592d1631
L
4276 { Bad_Opcode },
4277 { Bad_Opcode },
507bd325 4278 { "pmaxsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4279 },
4280
1ceb70f8 4281 /* PREFIX_0F383D */
42903f7f 4282 {
592d1631
L
4283 { Bad_Opcode },
4284 { Bad_Opcode },
507bd325 4285 { "pmaxsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4286 },
4287
1ceb70f8 4288 /* PREFIX_0F383E */
42903f7f 4289 {
592d1631
L
4290 { Bad_Opcode },
4291 { Bad_Opcode },
507bd325 4292 { "pmaxuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4293 },
4294
1ceb70f8 4295 /* PREFIX_0F383F */
42903f7f 4296 {
592d1631
L
4297 { Bad_Opcode },
4298 { Bad_Opcode },
507bd325 4299 { "pmaxud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4300 },
4301
1ceb70f8 4302 /* PREFIX_0F3840 */
42903f7f 4303 {
592d1631
L
4304 { Bad_Opcode },
4305 { Bad_Opcode },
507bd325 4306 { "pmulld", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4307 },
4308
1ceb70f8 4309 /* PREFIX_0F3841 */
42903f7f 4310 {
592d1631
L
4311 { Bad_Opcode },
4312 { Bad_Opcode },
507bd325 4313 { "phminposuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4314 },
4315
f1f8f695
L
4316 /* PREFIX_0F3880 */
4317 {
592d1631
L
4318 { Bad_Opcode },
4319 { Bad_Opcode },
507bd325 4320 { "invept", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4321 },
4322
4323 /* PREFIX_0F3881 */
4324 {
592d1631
L
4325 { Bad_Opcode },
4326 { Bad_Opcode },
507bd325 4327 { "invvpid", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4328 },
4329
6c30d220
L
4330 /* PREFIX_0F3882 */
4331 {
4332 { Bad_Opcode },
4333 { Bad_Opcode },
507bd325 4334 { "invpcid", { Gm, M }, PREFIX_OPCODE },
6c30d220
L
4335 },
4336
a0046408
L
4337 /* PREFIX_0F38C8 */
4338 {
507bd325 4339 { "sha1nexte", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4340 },
4341
4342 /* PREFIX_0F38C9 */
4343 {
507bd325 4344 { "sha1msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4345 },
4346
4347 /* PREFIX_0F38CA */
4348 {
507bd325 4349 { "sha1msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4350 },
4351
4352 /* PREFIX_0F38CB */
4353 {
507bd325 4354 { "sha256rnds2", { XM, EXxmm, XMM0 }, PREFIX_OPCODE },
a0046408
L
4355 },
4356
4357 /* PREFIX_0F38CC */
4358 {
507bd325 4359 { "sha256msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4360 },
4361
4362 /* PREFIX_0F38CD */
4363 {
507bd325 4364 { "sha256msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4365 },
4366
48521003
IT
4367 /* PREFIX_0F38CF */
4368 {
4369 { Bad_Opcode },
4370 { Bad_Opcode },
4371 { "gf2p8mulb", { XM, EXxmm }, PREFIX_OPCODE },
4372 },
4373
c0f3af97
L
4374 /* PREFIX_0F38DB */
4375 {
592d1631
L
4376 { Bad_Opcode },
4377 { Bad_Opcode },
507bd325 4378 { "aesimc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4379 },
4380
4381 /* PREFIX_0F38DC */
4382 {
592d1631
L
4383 { Bad_Opcode },
4384 { Bad_Opcode },
507bd325 4385 { "aesenc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4386 },
4387
4388 /* PREFIX_0F38DD */
4389 {
592d1631
L
4390 { Bad_Opcode },
4391 { Bad_Opcode },
507bd325 4392 { "aesenclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4393 },
4394
4395 /* PREFIX_0F38DE */
4396 {
592d1631
L
4397 { Bad_Opcode },
4398 { Bad_Opcode },
507bd325 4399 { "aesdec", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4400 },
4401
4402 /* PREFIX_0F38DF */
4403 {
592d1631
L
4404 { Bad_Opcode },
4405 { Bad_Opcode },
507bd325 4406 { "aesdeclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4407 },
4408
1ceb70f8 4409 /* PREFIX_0F38F0 */
4e7d34a6 4410 {
9ab00b61 4411 { "movbeS", { Gv, Mv }, PREFIX_OPCODE },
592d1631 4412 { Bad_Opcode },
9ab00b61 4413 { "movbeS", { Gv, Mv }, PREFIX_OPCODE },
2875b28a 4414 { "crc32A", { Gdq, Eb }, PREFIX_OPCODE },
4e7d34a6
L
4415 },
4416
1ceb70f8 4417 /* PREFIX_0F38F1 */
4e7d34a6 4418 {
9ab00b61 4419 { "movbeS", { Mv, Gv }, PREFIX_OPCODE },
592d1631 4420 { Bad_Opcode },
9ab00b61 4421 { "movbeS", { Mv, Gv }, PREFIX_OPCODE },
2875b28a 4422 { "crc32Q", { Gdq, Ev }, PREFIX_OPCODE },
4e7d34a6
L
4423 },
4424
603555e5 4425 /* PREFIX_0F38F5 */
e2e1fcde
L
4426 {
4427 { Bad_Opcode },
603555e5
L
4428 { Bad_Opcode },
4429 { MOD_TABLE (MOD_0F38F5_PREFIX_2) },
4430 },
4431
4432 /* PREFIX_0F38F6 */
4433 {
4434 { MOD_TABLE (MOD_0F38F6_PREFIX_0) },
507bd325
L
4435 { "adoxS", { Gdq, Edq}, PREFIX_OPCODE },
4436 { "adcxS", { Gdq, Edq}, PREFIX_OPCODE },
e2e1fcde
L
4437 { Bad_Opcode },
4438 },
4439
c0a30a9f
L
4440 /* PREFIX_0F38F8 */
4441 {
4442 { Bad_Opcode },
5d79adc4 4443 { MOD_TABLE (MOD_0F38F8_PREFIX_1) },
c0a30a9f 4444 { MOD_TABLE (MOD_0F38F8_PREFIX_2) },
5d79adc4 4445 { MOD_TABLE (MOD_0F38F8_PREFIX_3) },
c0a30a9f
L
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 },
b24d668c 4583 { "pcmpestrm!%LQ", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f
L
4584 },
4585
1ceb70f8 4586 /* PREFIX_0F3A61 */
381d071f 4587 {
592d1631
L
4588 { Bad_Opcode },
4589 { Bad_Opcode },
b24d668c 4590 { "pcmpestri!%LQ", { XM, EXx, 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 4635 { "vmovups", { XM, EXx }, 0 },
5b872f7d 4636 { "vmovss", { XMVexScalar, VexScalar, EXxmm_md }, 0 },
ec6f095a 4637 { "vmovupd", { XM, EXx }, 0 },
5b872f7d 4638 { "vmovsd", { XMVexScalar, VexScalar, EXxmm_mq }, 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 },
18897deb 4653 { MOD_TABLE (MOD_VEX_0F12_PREFIX_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 },
18897deb 4661 { MOD_TABLE (MOD_VEX_0F16_PREFIX_2) },
5f754f58 4662 },
7c52e0e8 4663
592a252b 4664 /* PREFIX_VEX_0F2A */
5f754f58 4665 {
592d1631 4666 { Bad_Opcode },
b24d668c 4667 { "vcvtsi2ss{%LQ|}", { XMScalar, VexScalar, Edq }, 0 },
592d1631 4668 { Bad_Opcode },
b24d668c 4669 { "vcvtsi2sd{%LQ|}", { XMScalar, VexScalar, Edq }, 0 },
5f754f58 4670 },
7c52e0e8 4671
592a252b 4672 /* PREFIX_VEX_0F2C */
5f754f58 4673 {
592d1631 4674 { Bad_Opcode },
5b872f7d 4675 { "vcvttss2si", { Gdq, EXxmm_md }, 0 },
592d1631 4676 { Bad_Opcode },
5b872f7d 4677 { "vcvttsd2si", { Gdq, EXxmm_mq }, 0 },
5f754f58 4678 },
7c52e0e8 4679
592a252b 4680 /* PREFIX_VEX_0F2D */
7c52e0e8 4681 {
592d1631 4682 { Bad_Opcode },
5b872f7d 4683 { "vcvtss2si", { Gdq, EXxmm_md }, 0 },
592d1631 4684 { Bad_Opcode },
5b872f7d 4685 { "vcvtsd2si", { Gdq, EXxmm_mq }, 0 },
7c52e0e8
L
4686 },
4687
592a252b 4688 /* PREFIX_VEX_0F2E */
7c52e0e8 4689 {
5b872f7d 4690 { "vucomiss", { XMScalar, EXxmm_md }, 0 },
592d1631 4691 { Bad_Opcode },
5b872f7d 4692 { "vucomisd", { XMScalar, EXxmm_mq }, 0 },
7c52e0e8
L
4693 },
4694
592a252b 4695 /* PREFIX_VEX_0F2F */
7c52e0e8 4696 {
5b872f7d 4697 { "vcomiss", { XMScalar, EXxmm_md }, 0 },
592d1631 4698 { Bad_Opcode },
5b872f7d 4699 { "vcomisd", { XMScalar, EXxmm_mq }, 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 4760 { "vsqrtps", { XM, EXx }, 0 },
5b872f7d 4761 { "vsqrtss", { XMScalar, VexScalar, EXxmm_md }, 0 },
ec6f095a 4762 { "vsqrtpd", { XM, EXx }, 0 },
5b872f7d 4763 { "vsqrtsd", { XMScalar, VexScalar, EXxmm_mq }, 0 },
7c52e0e8
L
4764 },
4765
592a252b 4766 /* PREFIX_VEX_0F52 */
7c52e0e8 4767 {
ec6f095a 4768 { "vrsqrtps", { XM, EXx }, 0 },
5b872f7d 4769 { "vrsqrtss", { XMScalar, VexScalar, EXxmm_md }, 0 },
7c52e0e8
L
4770 },
4771
592a252b 4772 /* PREFIX_VEX_0F53 */
7c52e0e8 4773 {
ec6f095a 4774 { "vrcpps", { XM, EXx }, 0 },
5b872f7d 4775 { "vrcpss", { XMScalar, VexScalar, EXxmm_md }, 0 },
7c52e0e8
L
4776 },
4777
592a252b 4778 /* PREFIX_VEX_0F58 */
7c52e0e8 4779 {
ec6f095a 4780 { "vaddps", { XM, Vex, EXx }, 0 },
5b872f7d 4781 { "vaddss", { XMScalar, VexScalar, EXxmm_md }, 0 },
ec6f095a 4782 { "vaddpd", { XM, Vex, EXx }, 0 },
5b872f7d 4783 { "vaddsd", { XMScalar, VexScalar, EXxmm_mq }, 0 },
7c52e0e8
L
4784 },
4785
592a252b 4786 /* PREFIX_VEX_0F59 */
7c52e0e8 4787 {
ec6f095a 4788 { "vmulps", { XM, Vex, EXx }, 0 },
5b872f7d 4789 { "vmulss", { XMScalar, VexScalar, EXxmm_md }, 0 },
ec6f095a 4790 { "vmulpd", { XM, Vex, EXx }, 0 },
5b872f7d 4791 { "vmulsd", { XMScalar, VexScalar, EXxmm_mq }, 0 },
7c52e0e8
L
4792 },
4793
592a252b 4794 /* PREFIX_VEX_0F5A */
7c52e0e8 4795 {
ec6f095a 4796 { "vcvtps2pd", { XM, EXxmmq }, 0 },
5b872f7d 4797 { "vcvtss2sd", { XMScalar, VexScalar, EXxmm_md }, 0 },
ec6f095a 4798 { "vcvtpd2ps%XY",{ XMM, EXx }, 0 },
5b872f7d 4799 { "vcvtsd2ss", { XMScalar, VexScalar, EXxmm_mq }, 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 4811 { "vsubps", { XM, Vex, EXx }, 0 },
5b872f7d 4812 { "vsubss", { XMScalar, VexScalar, EXxmm_md }, 0 },
ec6f095a 4813 { "vsubpd", { XM, Vex, EXx }, 0 },
5b872f7d 4814 { "vsubsd", { XMScalar, VexScalar, EXxmm_mq }, 0 },
7c52e0e8
L
4815 },
4816
592a252b 4817 /* PREFIX_VEX_0F5D */
7c52e0e8 4818 {
ec6f095a 4819 { "vminps", { XM, Vex, EXx }, 0 },
5b872f7d 4820 { "vminss", { XMScalar, VexScalar, EXxmm_md }, 0 },
ec6f095a 4821 { "vminpd", { XM, Vex, EXx }, 0 },
5b872f7d 4822 { "vminsd", { XMScalar, VexScalar, EXxmm_mq }, 0 },
7c52e0e8
L
4823 },
4824
592a252b 4825 /* PREFIX_VEX_0F5E */
7c52e0e8 4826 {
ec6f095a 4827 { "vdivps", { XM, Vex, EXx }, 0 },
5b872f7d 4828 { "vdivss", { XMScalar, VexScalar, EXxmm_md }, 0 },
ec6f095a 4829 { "vdivpd", { XM, Vex, EXx }, 0 },
5b872f7d 4830 { "vdivsd", { XMScalar, VexScalar, EXxmm_mq }, 0 },
7c52e0e8
L
4831 },
4832
592a252b 4833 /* PREFIX_VEX_0F5F */
7c52e0e8 4834 {
ec6f095a 4835 { "vmaxps", { XM, Vex, EXx }, 0 },
5b872f7d 4836 { "vmaxss", { XMScalar, VexScalar, EXxmm_md }, 0 },
ec6f095a 4837 { "vmaxpd", { XM, Vex, EXx }, 0 },
5b872f7d 4838 { "vmaxsd", { XMScalar, VexScalar, EXxmm_mq }, 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 {
c4de7606
JB
5133 { "vcmpps", { XM, Vex, EXx, CMP }, 0 },
5134 { "vcmpss", { XMScalar, VexScalar, EXxmm_md, CMP }, 0 },
5135 { "vcmppd", { XM, Vex, EXx, CMP }, 0 },
5136 { "vcmpsd", { XMScalar, VexScalar, EXxmm_mq, CMP }, 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 },
6431c801 5601 { VEX_W_TABLE (VEX_W_0F3813_P_2) },
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 },
492a76aa 5888 { "vpsrlv%DQ", { 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 },
492a76aa 5902 { "vpsllv%DQ", { XM, Vex, EXx }, 0 },
6c30d220
L
5903 },
5904
260cd341
LC
5905 /* PREFIX_VEX_0F3849_X86_64 */
5906 {
5907 { VEX_W_TABLE (VEX_W_0F3849_X86_64_P_0) },
5908 { Bad_Opcode },
5909 { VEX_W_TABLE (VEX_W_0F3849_X86_64_P_2) },
5910 { VEX_W_TABLE (VEX_W_0F3849_X86_64_P_3) },
5911 },
5912
5913 /* PREFIX_VEX_0F384B_X86_64 */
5914 {
5915 { Bad_Opcode },
5916 { VEX_W_TABLE (VEX_W_0F384B_X86_64_P_1) },
5917 { VEX_W_TABLE (VEX_W_0F384B_X86_64_P_2) },
5918 { VEX_W_TABLE (VEX_W_0F384B_X86_64_P_3) },
5919 },
5920
6c30d220
L
5921 /* PREFIX_VEX_0F3858 */
5922 {
5923 { Bad_Opcode },
5924 { Bad_Opcode },
5925 { VEX_W_TABLE (VEX_W_0F3858_P_2) },
5926 },
5927
5928 /* PREFIX_VEX_0F3859 */
5929 {
5930 { Bad_Opcode },
5931 { Bad_Opcode },
5932 { VEX_W_TABLE (VEX_W_0F3859_P_2) },
5933 },
5934
5935 /* PREFIX_VEX_0F385A */
5936 {
5937 { Bad_Opcode },
5938 { Bad_Opcode },
5939 { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) },
5940 },
5941
260cd341
LC
5942 /* PREFIX_VEX_0F385C_X86_64 */
5943 {
5944 { Bad_Opcode },
5945 { VEX_W_TABLE (VEX_W_0F385C_X86_64_P_1) },
5946 { Bad_Opcode },
5947 },
5948
5949 /* PREFIX_VEX_0F385E_X86_64 */
5950 {
5951 { VEX_W_TABLE (VEX_W_0F385E_X86_64_P_0) },
5952 { VEX_W_TABLE (VEX_W_0F385E_X86_64_P_1) },
5953 { VEX_W_TABLE (VEX_W_0F385E_X86_64_P_2) },
5954 { VEX_W_TABLE (VEX_W_0F385E_X86_64_P_3) },
5955 },
5956
6c30d220
L
5957 /* PREFIX_VEX_0F3878 */
5958 {
5959 { Bad_Opcode },
5960 { Bad_Opcode },
5961 { VEX_W_TABLE (VEX_W_0F3878_P_2) },
5962 },
5963
5964 /* PREFIX_VEX_0F3879 */
5965 {
5966 { Bad_Opcode },
5967 { Bad_Opcode },
5968 { VEX_W_TABLE (VEX_W_0F3879_P_2) },
5969 },
5970
5971 /* PREFIX_VEX_0F388C */
5972 {
5973 { Bad_Opcode },
5974 { Bad_Opcode },
f7002f42 5975 { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) },
6c30d220
L
5976 },
5977
5978 /* PREFIX_VEX_0F388E */
5979 {
5980 { Bad_Opcode },
5981 { Bad_Opcode },
f7002f42 5982 { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) },
6c30d220
L
5983 },
5984
5985 /* PREFIX_VEX_0F3890 */
5986 {
5987 { Bad_Opcode },
5988 { Bad_Opcode },
492a76aa 5989 { "vpgatherd%DQ", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
5990 },
5991
5992 /* PREFIX_VEX_0F3891 */
5993 {
5994 { Bad_Opcode },
5995 { Bad_Opcode },
492a76aa 5996 { "vpgatherq%DQ", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
5997 },
5998
5999 /* PREFIX_VEX_0F3892 */
6000 {
6001 { Bad_Opcode },
6002 { Bad_Opcode },
bf890a93 6003 { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
6004 },
6005
6006 /* PREFIX_VEX_0F3893 */
6007 {
6008 { Bad_Opcode },
6009 { Bad_Opcode },
bf890a93 6010 { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
6011 },
6012
592a252b 6013 /* PREFIX_VEX_0F3896 */
a5ff0eb2 6014 {
592d1631
L
6015 { Bad_Opcode },
6016 { Bad_Opcode },
6df22cf6 6017 { "vfmaddsub132p%XW", { XM, Vex, EXx, EXxEVexR }, 0 },
a5ff0eb2
L
6018 },
6019
592a252b 6020 /* PREFIX_VEX_0F3897 */
a5ff0eb2 6021 {
592d1631
L
6022 { Bad_Opcode },
6023 { Bad_Opcode },
6df22cf6 6024 { "vfmsubadd132p%XW", { XM, Vex, EXx, EXxEVexR }, 0 },
a5ff0eb2
L
6025 },
6026
592a252b 6027 /* PREFIX_VEX_0F3898 */
a5ff0eb2 6028 {
592d1631
L
6029 { Bad_Opcode },
6030 { Bad_Opcode },
6df22cf6 6031 { "vfmadd132p%XW", { XM, Vex, EXx, EXxEVexR }, 0 },
a5ff0eb2
L
6032 },
6033
592a252b 6034 /* PREFIX_VEX_0F3899 */
a5ff0eb2 6035 {
592d1631
L
6036 { Bad_Opcode },
6037 { Bad_Opcode },
6df22cf6 6038 { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, 0 },
a5ff0eb2
L
6039 },
6040
592a252b 6041 /* PREFIX_VEX_0F389A */
a5ff0eb2 6042 {
592d1631
L
6043 { Bad_Opcode },
6044 { Bad_Opcode },
bf890a93 6045 { "vfmsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6046 },
6047
592a252b 6048 /* PREFIX_VEX_0F389B */
c0f3af97 6049 {
592d1631
L
6050 { Bad_Opcode },
6051 { Bad_Opcode },
bf890a93 6052 { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6053 },
6054
592a252b 6055 /* PREFIX_VEX_0F389C */
c0f3af97 6056 {
592d1631
L
6057 { Bad_Opcode },
6058 { Bad_Opcode },
6df22cf6 6059 { "vfnmadd132p%XW", { XM, Vex, EXx, EXxEVexR }, 0 },
c0f3af97
L
6060 },
6061
592a252b 6062 /* PREFIX_VEX_0F389D */
c0f3af97 6063 {
592d1631
L
6064 { Bad_Opcode },
6065 { Bad_Opcode },
6df22cf6 6066 { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, 0 },
c0f3af97
L
6067 },
6068
592a252b 6069 /* PREFIX_VEX_0F389E */
c0f3af97 6070 {
592d1631
L
6071 { Bad_Opcode },
6072 { Bad_Opcode },
6df22cf6 6073 { "vfnmsub132p%XW", { XM, Vex, EXx, EXxEVexR }, 0 },
c0f3af97
L
6074 },
6075
592a252b 6076 /* PREFIX_VEX_0F389F */
c0f3af97 6077 {
592d1631
L
6078 { Bad_Opcode },
6079 { Bad_Opcode },
6df22cf6 6080 { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, 0 },
c0f3af97
L
6081 },
6082
592a252b 6083 /* PREFIX_VEX_0F38A6 */
c0f3af97 6084 {
592d1631
L
6085 { Bad_Opcode },
6086 { Bad_Opcode },
6df22cf6 6087 { "vfmaddsub213p%XW", { XM, Vex, EXx, EXxEVexR }, 0 },
592d1631 6088 { Bad_Opcode },
c0f3af97
L
6089 },
6090
592a252b 6091 /* PREFIX_VEX_0F38A7 */
c0f3af97 6092 {
592d1631
L
6093 { Bad_Opcode },
6094 { Bad_Opcode },
6df22cf6 6095 { "vfmsubadd213p%XW", { XM, Vex, EXx, EXxEVexR }, 0 },
c0f3af97
L
6096 },
6097
592a252b 6098 /* PREFIX_VEX_0F38A8 */
c0f3af97 6099 {
592d1631
L
6100 { Bad_Opcode },
6101 { Bad_Opcode },
6df22cf6 6102 { "vfmadd213p%XW", { XM, Vex, EXx, EXxEVexR }, 0 },
c0f3af97
L
6103 },
6104
592a252b 6105 /* PREFIX_VEX_0F38A9 */
c0f3af97 6106 {
592d1631
L
6107 { Bad_Opcode },
6108 { Bad_Opcode },
6df22cf6 6109 { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, 0 },
c0f3af97
L
6110 },
6111
592a252b 6112 /* PREFIX_VEX_0F38AA */
c0f3af97 6113 {
592d1631
L
6114 { Bad_Opcode },
6115 { Bad_Opcode },
bf890a93 6116 { "vfmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6117 },
6118
592a252b 6119 /* PREFIX_VEX_0F38AB */
c0f3af97 6120 {
592d1631
L
6121 { Bad_Opcode },
6122 { Bad_Opcode },
bf890a93 6123 { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6124 },
6125
592a252b 6126 /* PREFIX_VEX_0F38AC */
c0f3af97 6127 {
592d1631
L
6128 { Bad_Opcode },
6129 { Bad_Opcode },
6df22cf6 6130 { "vfnmadd213p%XW", { XM, Vex, EXx, EXxEVexR }, 0 },
c0f3af97
L
6131 },
6132
592a252b 6133 /* PREFIX_VEX_0F38AD */
c0f3af97 6134 {
592d1631
L
6135 { Bad_Opcode },
6136 { Bad_Opcode },
6df22cf6 6137 { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, 0 },
c0f3af97
L
6138 },
6139
592a252b 6140 /* PREFIX_VEX_0F38AE */
c0f3af97 6141 {
592d1631
L
6142 { Bad_Opcode },
6143 { Bad_Opcode },
6df22cf6 6144 { "vfnmsub213p%XW", { XM, Vex, EXx, EXxEVexR }, 0 },
c0f3af97
L
6145 },
6146
592a252b 6147 /* PREFIX_VEX_0F38AF */
c0f3af97 6148 {
592d1631
L
6149 { Bad_Opcode },
6150 { Bad_Opcode },
6df22cf6 6151 { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, 0 },
c0f3af97
L
6152 },
6153
592a252b 6154 /* PREFIX_VEX_0F38B6 */
c0f3af97 6155 {
592d1631
L
6156 { Bad_Opcode },
6157 { Bad_Opcode },
6df22cf6 6158 { "vfmaddsub231p%XW", { XM, Vex, EXx, EXxEVexR }, 0 },
c0f3af97
L
6159 },
6160
592a252b 6161 /* PREFIX_VEX_0F38B7 */
c0f3af97 6162 {
592d1631
L
6163 { Bad_Opcode },
6164 { Bad_Opcode },
6df22cf6 6165 { "vfmsubadd231p%XW", { XM, Vex, EXx, EXxEVexR }, 0 },
c0f3af97
L
6166 },
6167
592a252b 6168 /* PREFIX_VEX_0F38B8 */
c0f3af97 6169 {
592d1631
L
6170 { Bad_Opcode },
6171 { Bad_Opcode },
6df22cf6 6172 { "vfmadd231p%XW", { XM, Vex, EXx, EXxEVexR }, 0 },
c0f3af97
L
6173 },
6174
592a252b 6175 /* PREFIX_VEX_0F38B9 */
c0f3af97 6176 {
592d1631
L
6177 { Bad_Opcode },
6178 { Bad_Opcode },
6df22cf6 6179 { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, 0 },
c0f3af97
L
6180 },
6181
592a252b 6182 /* PREFIX_VEX_0F38BA */
c0f3af97 6183 {
592d1631
L
6184 { Bad_Opcode },
6185 { Bad_Opcode },
6df22cf6 6186 { "vfmsub231p%XW", { XM, Vex, EXx, EXxEVexR }, 0 },
c0f3af97
L
6187 },
6188
592a252b 6189 /* PREFIX_VEX_0F38BB */
c0f3af97 6190 {
592d1631
L
6191 { Bad_Opcode },
6192 { Bad_Opcode },
6df22cf6 6193 { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, 0 },
c0f3af97
L
6194 },
6195
592a252b 6196 /* PREFIX_VEX_0F38BC */
c0f3af97 6197 {
592d1631
L
6198 { Bad_Opcode },
6199 { Bad_Opcode },
6df22cf6 6200 { "vfnmadd231p%XW", { XM, Vex, EXx, EXxEVexR }, 0 },
c0f3af97
L
6201 },
6202
592a252b 6203 /* PREFIX_VEX_0F38BD */
c0f3af97 6204 {
592d1631
L
6205 { Bad_Opcode },
6206 { Bad_Opcode },
6df22cf6 6207 { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, 0 },
c0f3af97
L
6208 },
6209
592a252b 6210 /* PREFIX_VEX_0F38BE */
c0f3af97 6211 {
592d1631
L
6212 { Bad_Opcode },
6213 { Bad_Opcode },
6df22cf6 6214 { "vfnmsub231p%XW", { XM, Vex, EXx, EXxEVexR }, 0 },
c0f3af97
L
6215 },
6216
592a252b 6217 /* PREFIX_VEX_0F38BF */
c0f3af97 6218 {
592d1631
L
6219 { Bad_Opcode },
6220 { Bad_Opcode },
6df22cf6 6221 { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, 0 },
c0f3af97
L
6222 },
6223
48521003
IT
6224 /* PREFIX_VEX_0F38CF */
6225 {
6226 { Bad_Opcode },
6227 { Bad_Opcode },
6228 { VEX_W_TABLE (VEX_W_0F38CF_P_2) },
6229 },
6230
592a252b 6231 /* PREFIX_VEX_0F38DB */
c0f3af97 6232 {
592d1631
L
6233 { Bad_Opcode },
6234 { Bad_Opcode },
592a252b 6235 { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
c0f3af97
L
6236 },
6237
592a252b 6238 /* PREFIX_VEX_0F38DC */
c0f3af97 6239 {
592d1631
L
6240 { Bad_Opcode },
6241 { Bad_Opcode },
8dcf1fad 6242 { "vaesenc", { XM, Vex, EXx }, 0 },
c0f3af97
L
6243 },
6244
592a252b 6245 /* PREFIX_VEX_0F38DD */
c0f3af97 6246 {
592d1631
L
6247 { Bad_Opcode },
6248 { Bad_Opcode },
8dcf1fad 6249 { "vaesenclast", { XM, Vex, EXx }, 0 },
c0f3af97
L
6250 },
6251
592a252b 6252 /* PREFIX_VEX_0F38DE */
c0f3af97 6253 {
592d1631
L
6254 { Bad_Opcode },
6255 { Bad_Opcode },
8dcf1fad 6256 { "vaesdec", { XM, Vex, EXx }, 0 },
c0f3af97
L
6257 },
6258
592a252b 6259 /* PREFIX_VEX_0F38DF */
c0f3af97 6260 {
592d1631
L
6261 { Bad_Opcode },
6262 { Bad_Opcode },
8dcf1fad 6263 { "vaesdeclast", { XM, Vex, EXx }, 0 },
c0f3af97
L
6264 },
6265
f12dc422
L
6266 /* PREFIX_VEX_0F38F2 */
6267 {
6268 { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
6269 },
6270
6271 /* PREFIX_VEX_0F38F3_REG_1 */
6272 {
6273 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
6274 },
6275
6276 /* PREFIX_VEX_0F38F3_REG_2 */
6277 {
6278 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
6279 },
6280
6281 /* PREFIX_VEX_0F38F3_REG_3 */
6282 {
6283 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
6284 },
6285
6c30d220
L
6286 /* PREFIX_VEX_0F38F5 */
6287 {
6288 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) },
6289 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) },
6290 { Bad_Opcode },
6291 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) },
6292 },
6293
6294 /* PREFIX_VEX_0F38F6 */
6295 {
6296 { Bad_Opcode },
6297 { Bad_Opcode },
6298 { Bad_Opcode },
6299 { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) },
6300 },
6301
f12dc422
L
6302 /* PREFIX_VEX_0F38F7 */
6303 {
6304 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
6c30d220
L
6305 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) },
6306 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) },
6307 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) },
6308 },
6309
6310 /* PREFIX_VEX_0F3A00 */
6311 {
6312 { Bad_Opcode },
6313 { Bad_Opcode },
6314 { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) },
6315 },
6316
6317 /* PREFIX_VEX_0F3A01 */
6318 {
6319 { Bad_Opcode },
6320 { Bad_Opcode },
6321 { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) },
6322 },
6323
6324 /* PREFIX_VEX_0F3A02 */
6325 {
6326 { Bad_Opcode },
6327 { Bad_Opcode },
6328 { VEX_W_TABLE (VEX_W_0F3A02_P_2) },
f12dc422
L
6329 },
6330
592a252b 6331 /* PREFIX_VEX_0F3A04 */
c0f3af97 6332 {
592d1631
L
6333 { Bad_Opcode },
6334 { Bad_Opcode },
592a252b 6335 { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
c0f3af97
L
6336 },
6337
592a252b 6338 /* PREFIX_VEX_0F3A05 */
c0f3af97 6339 {
592d1631
L
6340 { Bad_Opcode },
6341 { Bad_Opcode },
592a252b 6342 { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
c0f3af97
L
6343 },
6344
592a252b 6345 /* PREFIX_VEX_0F3A06 */
c0f3af97 6346 {
592d1631
L
6347 { Bad_Opcode },
6348 { Bad_Opcode },
592a252b 6349 { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
c0f3af97
L
6350 },
6351
592a252b 6352 /* PREFIX_VEX_0F3A08 */
c0f3af97 6353 {
592d1631
L
6354 { Bad_Opcode },
6355 { Bad_Opcode },
ec6f095a 6356 { "vroundps", { XM, EXx, Ib }, 0 },
c0f3af97
L
6357 },
6358
592a252b 6359 /* PREFIX_VEX_0F3A09 */
c0f3af97 6360 {
592d1631
L
6361 { Bad_Opcode },
6362 { Bad_Opcode },
ec6f095a 6363 { "vroundpd", { XM, EXx, Ib }, 0 },
c0f3af97
L
6364 },
6365
592a252b 6366 /* PREFIX_VEX_0F3A0A */
c0f3af97 6367 {
592d1631
L
6368 { Bad_Opcode },
6369 { Bad_Opcode },
5b872f7d 6370 { "vroundss", { XMScalar, VexScalar, EXxmm_md, Ib }, 0 },
0bfee649
L
6371 },
6372
592a252b 6373 /* PREFIX_VEX_0F3A0B */
0bfee649 6374 {
592d1631
L
6375 { Bad_Opcode },
6376 { Bad_Opcode },
5b872f7d 6377 { "vroundsd", { XMScalar, VexScalar, EXxmm_mq, Ib }, 0 },
0bfee649
L
6378 },
6379
592a252b 6380 /* PREFIX_VEX_0F3A0C */
0bfee649 6381 {
592d1631
L
6382 { Bad_Opcode },
6383 { Bad_Opcode },
ec6f095a 6384 { "vblendps", { XM, Vex, EXx, Ib }, 0 },
0bfee649
L
6385 },
6386
592a252b 6387 /* PREFIX_VEX_0F3A0D */
0bfee649 6388 {
592d1631
L
6389 { Bad_Opcode },
6390 { Bad_Opcode },
ec6f095a 6391 { "vblendpd", { XM, Vex, EXx, Ib }, 0 },
c0f3af97
L
6392 },
6393
592a252b 6394 /* PREFIX_VEX_0F3A0E */
0bfee649 6395 {
592d1631
L
6396 { Bad_Opcode },
6397 { Bad_Opcode },
ec6f095a 6398 { "vpblendw", { XM, Vex, EXx, Ib }, 0 },
0bfee649
L
6399 },
6400
592a252b 6401 /* PREFIX_VEX_0F3A0F */
0bfee649 6402 {
592d1631
L
6403 { Bad_Opcode },
6404 { Bad_Opcode },
ec6f095a 6405 { "vpalignr", { XM, Vex, EXx, Ib }, 0 },
0bfee649
L
6406 },
6407
592a252b 6408 /* PREFIX_VEX_0F3A14 */
0bfee649 6409 {
592d1631
L
6410 { Bad_Opcode },
6411 { Bad_Opcode },
592a252b 6412 { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
0bfee649
L
6413 },
6414
592a252b 6415 /* PREFIX_VEX_0F3A15 */
0bfee649 6416 {
592d1631
L
6417 { Bad_Opcode },
6418 { Bad_Opcode },
592a252b 6419 { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
0bfee649
L
6420 },
6421
592a252b 6422 /* PREFIX_VEX_0F3A16 */
c0f3af97 6423 {
592d1631
L
6424 { Bad_Opcode },
6425 { Bad_Opcode },
592a252b 6426 { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
c0f3af97
L
6427 },
6428
592a252b 6429 /* PREFIX_VEX_0F3A17 */
c0f3af97 6430 {
592d1631
L
6431 { Bad_Opcode },
6432 { Bad_Opcode },
592a252b 6433 { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
c0f3af97
L
6434 },
6435
592a252b 6436 /* PREFIX_VEX_0F3A18 */
c0f3af97 6437 {
592d1631
L
6438 { Bad_Opcode },
6439 { Bad_Opcode },
592a252b 6440 { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
c0f3af97
L
6441 },
6442
592a252b 6443 /* PREFIX_VEX_0F3A19 */
c0f3af97 6444 {
592d1631
L
6445 { Bad_Opcode },
6446 { Bad_Opcode },
592a252b 6447 { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
c0f3af97
L
6448 },
6449
592a252b 6450 /* PREFIX_VEX_0F3A1D */
c7b8aa3a
L
6451 {
6452 { Bad_Opcode },
6453 { Bad_Opcode },
6431c801 6454 { VEX_W_TABLE (VEX_W_0F3A1D_P_2) },
c7b8aa3a
L
6455 },
6456
592a252b 6457 /* PREFIX_VEX_0F3A20 */
c0f3af97 6458 {
592d1631
L
6459 { Bad_Opcode },
6460 { Bad_Opcode },
592a252b 6461 { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
c0f3af97
L
6462 },
6463
592a252b 6464 /* PREFIX_VEX_0F3A21 */
c0f3af97 6465 {
592d1631
L
6466 { Bad_Opcode },
6467 { Bad_Opcode },
592a252b 6468 { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
c0f3af97
L
6469 },
6470
592a252b 6471 /* PREFIX_VEX_0F3A22 */
0bfee649 6472 {
592d1631
L
6473 { Bad_Opcode },
6474 { Bad_Opcode },
592a252b 6475 { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
0bfee649
L
6476 },
6477
43234a1e
L
6478 /* PREFIX_VEX_0F3A30 */
6479 {
6480 { Bad_Opcode },
6481 { Bad_Opcode },
6482 { VEX_LEN_TABLE (VEX_LEN_0F3A30_P_2) },
6483 },
6484
1ba585e8
IT
6485 /* PREFIX_VEX_0F3A31 */
6486 {
6487 { Bad_Opcode },
6488 { Bad_Opcode },
6489 { VEX_LEN_TABLE (VEX_LEN_0F3A31_P_2) },
6490 },
6491
43234a1e
L
6492 /* PREFIX_VEX_0F3A32 */
6493 {
6494 { Bad_Opcode },
6495 { Bad_Opcode },
6496 { VEX_LEN_TABLE (VEX_LEN_0F3A32_P_2) },
6497 },
6498
1ba585e8
IT
6499 /* PREFIX_VEX_0F3A33 */
6500 {
6501 { Bad_Opcode },
6502 { Bad_Opcode },
6503 { VEX_LEN_TABLE (VEX_LEN_0F3A33_P_2) },
6504 },
6505
6c30d220
L
6506 /* PREFIX_VEX_0F3A38 */
6507 {
6508 { Bad_Opcode },
6509 { Bad_Opcode },
6510 { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) },
6511 },
6512
6513 /* PREFIX_VEX_0F3A39 */
6514 {
6515 { Bad_Opcode },
6516 { Bad_Opcode },
6517 { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) },
6518 },
6519
592a252b 6520 /* PREFIX_VEX_0F3A40 */
c0f3af97 6521 {
592d1631
L
6522 { Bad_Opcode },
6523 { Bad_Opcode },
ec6f095a 6524 { "vdpps", { XM, Vex, EXx, Ib }, 0 },
c0f3af97
L
6525 },
6526
592a252b 6527 /* PREFIX_VEX_0F3A41 */
c0f3af97 6528 {
592d1631
L
6529 { Bad_Opcode },
6530 { Bad_Opcode },
592a252b 6531 { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
c0f3af97
L
6532 },
6533
592a252b 6534 /* PREFIX_VEX_0F3A42 */
c0f3af97 6535 {
592d1631
L
6536 { Bad_Opcode },
6537 { Bad_Opcode },
ec6f095a 6538 { "vmpsadbw", { XM, Vex, EXx, Ib }, 0 },
c0f3af97
L
6539 },
6540
592a252b 6541 /* PREFIX_VEX_0F3A44 */
ce2f5b3c 6542 {
592d1631
L
6543 { Bad_Opcode },
6544 { Bad_Opcode },
ff1982d5 6545 { "vpclmulqdq", { XM, Vex, EXx, PCLMUL }, 0 },
ce2f5b3c
L
6546 },
6547
6c30d220
L
6548 /* PREFIX_VEX_0F3A46 */
6549 {
6550 { Bad_Opcode },
6551 { Bad_Opcode },
6552 { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) },
6553 },
6554
592a252b 6555 /* PREFIX_VEX_0F3A48 */
a683cc34
SP
6556 {
6557 { Bad_Opcode },
6558 { Bad_Opcode },
93abb146 6559 { "vpermil2ps", { XM, Vex, EXx, XMVexI4, VexI4 }, 0 },
a683cc34
SP
6560 },
6561
592a252b 6562 /* PREFIX_VEX_0F3A49 */
a683cc34
SP
6563 {
6564 { Bad_Opcode },
6565 { Bad_Opcode },
93abb146 6566 { "vpermil2pd", { XM, Vex, EXx, XMVexI4, VexI4 }, 0 },
a683cc34
SP
6567 },
6568
592a252b 6569 /* PREFIX_VEX_0F3A4A */
c0f3af97 6570 {
592d1631
L
6571 { Bad_Opcode },
6572 { Bad_Opcode },
592a252b 6573 { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
c0f3af97
L
6574 },
6575
592a252b 6576 /* PREFIX_VEX_0F3A4B */
c0f3af97 6577 {
592d1631
L
6578 { Bad_Opcode },
6579 { Bad_Opcode },
592a252b 6580 { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
c0f3af97
L
6581 },
6582
592a252b 6583 /* PREFIX_VEX_0F3A4C */
c0f3af97 6584 {
592d1631
L
6585 { Bad_Opcode },
6586 { Bad_Opcode },
6c30d220 6587 { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
c0f3af97
L
6588 },
6589
592a252b 6590 /* PREFIX_VEX_0F3A5C */
922d8de8 6591 {
592d1631
L
6592 { Bad_Opcode },
6593 { Bad_Opcode },
b13b1bc0 6594 { "vfmaddsubps", { XM, Vex, EXx, XMVexI4 }, 0 },
922d8de8
DR
6595 },
6596
592a252b 6597 /* PREFIX_VEX_0F3A5D */
922d8de8 6598 {
592d1631
L
6599 { Bad_Opcode },
6600 { Bad_Opcode },
b13b1bc0 6601 { "vfmaddsubpd", { XM, Vex, EXx, XMVexI4 }, 0 },
922d8de8
DR
6602 },
6603
592a252b 6604 /* PREFIX_VEX_0F3A5E */
922d8de8 6605 {
592d1631
L
6606 { Bad_Opcode },
6607 { Bad_Opcode },
b13b1bc0 6608 { "vfmsubaddps", { XM, Vex, EXx, XMVexI4 }, 0 },
922d8de8
DR
6609 },
6610
592a252b 6611 /* PREFIX_VEX_0F3A5F */
922d8de8 6612 {
592d1631
L
6613 { Bad_Opcode },
6614 { Bad_Opcode },
b13b1bc0 6615 { "vfmsubaddpd", { XM, Vex, EXx, XMVexI4 }, 0 },
922d8de8
DR
6616 },
6617
592a252b 6618 /* PREFIX_VEX_0F3A60 */
c0f3af97 6619 {
592d1631
L
6620 { Bad_Opcode },
6621 { Bad_Opcode },
592a252b 6622 { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
592d1631 6623 { Bad_Opcode },
c0f3af97
L
6624 },
6625
592a252b 6626 /* PREFIX_VEX_0F3A61 */
c0f3af97 6627 {
592d1631
L
6628 { Bad_Opcode },
6629 { Bad_Opcode },
592a252b 6630 { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
c0f3af97
L
6631 },
6632
592a252b 6633 /* PREFIX_VEX_0F3A62 */
c0f3af97 6634 {
592d1631
L
6635 { Bad_Opcode },
6636 { Bad_Opcode },
592a252b 6637 { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
c0f3af97
L
6638 },
6639
592a252b 6640 /* PREFIX_VEX_0F3A63 */
c0f3af97 6641 {
592d1631
L
6642 { Bad_Opcode },
6643 { Bad_Opcode },
592a252b 6644 { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
c0f3af97 6645 },
a5ff0eb2 6646
592a252b 6647 /* PREFIX_VEX_0F3A68 */
922d8de8 6648 {
592d1631
L
6649 { Bad_Opcode },
6650 { Bad_Opcode },
b13b1bc0 6651 { "vfmaddps", { XM, Vex, EXx, XMVexI4 }, 0 },
922d8de8
DR
6652 },
6653
592a252b 6654 /* PREFIX_VEX_0F3A69 */
922d8de8 6655 {
592d1631
L
6656 { Bad_Opcode },
6657 { Bad_Opcode },
b13b1bc0 6658 { "vfmaddpd", { XM, Vex, EXx, XMVexI4 }, 0 },
922d8de8
DR
6659 },
6660
592a252b 6661 /* PREFIX_VEX_0F3A6A */
922d8de8 6662 {
592d1631
L
6663 { Bad_Opcode },
6664 { Bad_Opcode },
6384fd9e 6665 { "vfmaddss", { XMScalar, VexScalar, EXxmm_md, XMVexScalarI4 }, 0 },
922d8de8
DR
6666 },
6667
592a252b 6668 /* PREFIX_VEX_0F3A6B */
922d8de8 6669 {
592d1631
L
6670 { Bad_Opcode },
6671 { Bad_Opcode },
6384fd9e 6672 { "vfmaddsd", { XMScalar, VexScalar, EXxmm_mq, XMVexScalarI4 }, 0 },
922d8de8
DR
6673 },
6674
592a252b 6675 /* PREFIX_VEX_0F3A6C */
922d8de8 6676 {
592d1631
L
6677 { Bad_Opcode },
6678 { Bad_Opcode },
b13b1bc0 6679 { "vfmsubps", { XM, Vex, EXx, XMVexI4 }, 0 },
922d8de8
DR
6680 },
6681
592a252b 6682 /* PREFIX_VEX_0F3A6D */
922d8de8 6683 {
592d1631
L
6684 { Bad_Opcode },
6685 { Bad_Opcode },
b13b1bc0 6686 { "vfmsubpd", { XM, Vex, EXx, XMVexI4 }, 0 },
922d8de8
DR
6687 },
6688
592a252b 6689 /* PREFIX_VEX_0F3A6E */
922d8de8 6690 {
592d1631
L
6691 { Bad_Opcode },
6692 { Bad_Opcode },
6384fd9e 6693 { "vfmsubss", { XMScalar, VexScalar, EXxmm_md, XMVexScalarI4 }, 0 },
922d8de8
DR
6694 },
6695
592a252b 6696 /* PREFIX_VEX_0F3A6F */
922d8de8 6697 {
592d1631
L
6698 { Bad_Opcode },
6699 { Bad_Opcode },
6384fd9e 6700 { "vfmsubsd", { XMScalar, VexScalar, EXxmm_mq, XMVexScalarI4 }, 0 },
922d8de8
DR
6701 },
6702
592a252b 6703 /* PREFIX_VEX_0F3A78 */
922d8de8 6704 {
592d1631
L
6705 { Bad_Opcode },
6706 { Bad_Opcode },
b13b1bc0 6707 { "vfnmaddps", { XM, Vex, EXx, XMVexI4 }, 0 },
922d8de8
DR
6708 },
6709
592a252b 6710 /* PREFIX_VEX_0F3A79 */
922d8de8 6711 {
592d1631
L
6712 { Bad_Opcode },
6713 { Bad_Opcode },
b13b1bc0 6714 { "vfnmaddpd", { XM, Vex, EXx, XMVexI4 }, 0 },
922d8de8
DR
6715 },
6716
592a252b 6717 /* PREFIX_VEX_0F3A7A */
922d8de8 6718 {
592d1631
L
6719 { Bad_Opcode },
6720 { Bad_Opcode },
6384fd9e 6721 { "vfnmaddss", { XMScalar, VexScalar, EXxmm_md, XMVexScalarI4 }, 0 },
922d8de8
DR
6722 },
6723
592a252b 6724 /* PREFIX_VEX_0F3A7B */
922d8de8 6725 {
592d1631
L
6726 { Bad_Opcode },
6727 { Bad_Opcode },
6384fd9e 6728 { "vfnmaddsd", { XMScalar, VexScalar, EXxmm_mq, XMVexScalarI4 }, 0 },
922d8de8
DR
6729 },
6730
592a252b 6731 /* PREFIX_VEX_0F3A7C */
922d8de8 6732 {
592d1631
L
6733 { Bad_Opcode },
6734 { Bad_Opcode },
b13b1bc0 6735 { "vfnmsubps", { XM, Vex, EXx, XMVexI4 }, 0 },
592d1631 6736 { Bad_Opcode },
922d8de8
DR
6737 },
6738
592a252b 6739 /* PREFIX_VEX_0F3A7D */
922d8de8 6740 {
592d1631
L
6741 { Bad_Opcode },
6742 { Bad_Opcode },
b13b1bc0 6743 { "vfnmsubpd", { XM, Vex, EXx, XMVexI4 }, 0 },
922d8de8
DR
6744 },
6745
592a252b 6746 /* PREFIX_VEX_0F3A7E */
922d8de8 6747 {
592d1631
L
6748 { Bad_Opcode },
6749 { Bad_Opcode },
6384fd9e 6750 { "vfnmsubss", { XMScalar, VexScalar, EXxmm_md, XMVexScalarI4 }, 0 },
922d8de8
DR
6751 },
6752
592a252b 6753 /* PREFIX_VEX_0F3A7F */
922d8de8 6754 {
592d1631
L
6755 { Bad_Opcode },
6756 { Bad_Opcode },
6384fd9e 6757 { "vfnmsubsd", { XMScalar, VexScalar, EXxmm_mq, XMVexScalarI4 }, 0 },
922d8de8
DR
6758 },
6759
48521003
IT
6760 /* PREFIX_VEX_0F3ACE */
6761 {
6762 { Bad_Opcode },
6763 { Bad_Opcode },
6764 { VEX_W_TABLE (VEX_W_0F3ACE_P_2) },
6765 },
6766
6767 /* PREFIX_VEX_0F3ACF */
6768 {
6769 { Bad_Opcode },
6770 { Bad_Opcode },
6771 { VEX_W_TABLE (VEX_W_0F3ACF_P_2) },
6772 },
6773
592a252b 6774 /* PREFIX_VEX_0F3ADF */
a5ff0eb2 6775 {
592d1631
L
6776 { Bad_Opcode },
6777 { Bad_Opcode },
592a252b 6778 { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
a5ff0eb2 6779 },
6c30d220
L
6780
6781 /* PREFIX_VEX_0F3AF0 */
6782 {
6783 { Bad_Opcode },
6784 { Bad_Opcode },
6785 { Bad_Opcode },
6786 { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) },
6787 },
43234a1e 6788
ad692897 6789#include "i386-dis-evex-prefix.h"
c0f3af97
L
6790};
6791
6792static const struct dis386 x86_64_table[][2] = {
6793 /* X86_64_06 */
6794 {
bf890a93 6795 { "pushP", { es }, 0 },
c0f3af97
L
6796 },
6797
6798 /* X86_64_07 */
6799 {
bf890a93 6800 { "popP", { es }, 0 },
c0f3af97
L
6801 },
6802
1673df32 6803 /* X86_64_0E */
c0f3af97 6804 {
bf890a93 6805 { "pushP", { cs }, 0 },
c0f3af97
L
6806 },
6807
6808 /* X86_64_16 */
6809 {
bf890a93 6810 { "pushP", { ss }, 0 },
c0f3af97
L
6811 },
6812
6813 /* X86_64_17 */
6814 {
bf890a93 6815 { "popP", { ss }, 0 },
c0f3af97
L
6816 },
6817
6818 /* X86_64_1E */
6819 {
bf890a93 6820 { "pushP", { ds }, 0 },
c0f3af97
L
6821 },
6822
6823 /* X86_64_1F */
6824 {
bf890a93 6825 { "popP", { ds }, 0 },
c0f3af97
L
6826 },
6827
6828 /* X86_64_27 */
6829 {
bf890a93 6830 { "daa", { XX }, 0 },
c0f3af97
L
6831 },
6832
6833 /* X86_64_2F */
6834 {
bf890a93 6835 { "das", { XX }, 0 },
c0f3af97
L
6836 },
6837
6838 /* X86_64_37 */
6839 {
bf890a93 6840 { "aaa", { XX }, 0 },
c0f3af97
L
6841 },
6842
6843 /* X86_64_3F */
6844 {
bf890a93 6845 { "aas", { XX }, 0 },
c0f3af97
L
6846 },
6847
6848 /* X86_64_60 */
6849 {
bf890a93 6850 { "pushaP", { XX }, 0 },
c0f3af97
L
6851 },
6852
6853 /* X86_64_61 */
6854 {
bf890a93 6855 { "popaP", { XX }, 0 },
c0f3af97
L
6856 },
6857
6858 /* X86_64_62 */
6859 {
6860 { MOD_TABLE (MOD_62_32BIT) },
43234a1e 6861 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
6862 },
6863
6864 /* X86_64_63 */
6865 {
bf890a93 6866 { "arpl", { Ew, Gw }, 0 },
bc31405e 6867 { "movs", { { OP_G, movsxd_mode }, { MOVSXD_Fixup, movsxd_mode } }, 0 },
c0f3af97
L
6868 },
6869
6870 /* X86_64_6D */
6871 {
bf890a93
IT
6872 { "ins{R|}", { Yzr, indirDX }, 0 },
6873 { "ins{G|}", { Yzr, indirDX }, 0 },
c0f3af97
L
6874 },
6875
6876 /* X86_64_6F */
6877 {
bf890a93
IT
6878 { "outs{R|}", { indirDXr, Xz }, 0 },
6879 { "outs{G|}", { indirDXr, Xz }, 0 },
c0f3af97
L
6880 },
6881
d039fef3 6882 /* X86_64_82 */
8b89fe14 6883 {
de194d85 6884 /* Opcode 0x82 is an alias of opcode 0x80 in 32-bit mode. */
d039fef3 6885 { REG_TABLE (REG_80) },
8b89fe14
L
6886 },
6887
c0f3af97
L
6888 /* X86_64_9A */
6889 {
8f570d62 6890 { "{l|}call{T|}", { Ap }, 0 },
c0f3af97
L
6891 },
6892
aeab2b26
JB
6893 /* X86_64_C2 */
6894 {
6895 { "retP", { Iw, BND }, 0 },
6896 { "ret@", { Iw, BND }, 0 },
6897 },
6898
6899 /* X86_64_C3 */
6900 {
6901 { "retP", { BND }, 0 },
6902 { "ret@", { BND }, 0 },
6903 },
6904
c0f3af97
L
6905 /* X86_64_C4 */
6906 {
6907 { MOD_TABLE (MOD_C4_32BIT) },
6908 { VEX_C4_TABLE (VEX_0F) },
6909 },
6910
6911 /* X86_64_C5 */
6912 {
6913 { MOD_TABLE (MOD_C5_32BIT) },
6914 { VEX_C5_TABLE (VEX_0F) },
6915 },
6916
6917 /* X86_64_CE */
6918 {
bf890a93 6919 { "into", { XX }, 0 },
c0f3af97
L
6920 },
6921
6922 /* X86_64_D4 */
6923 {
bf890a93 6924 { "aam", { Ib }, 0 },
c0f3af97
L
6925 },
6926
6927 /* X86_64_D5 */
6928 {
bf890a93 6929 { "aad", { Ib }, 0 },
c0f3af97
L
6930 },
6931
a72d2af2
L
6932 /* X86_64_E8 */
6933 {
6934 { "callP", { Jv, BND }, 0 },
5db04b09 6935 { "call@", { Jv, BND }, 0 }
a72d2af2
L
6936 },
6937
6938 /* X86_64_E9 */
6939 {
6940 { "jmpP", { Jv, BND }, 0 },
5db04b09 6941 { "jmp@", { Jv, BND }, 0 }
a72d2af2
L
6942 },
6943
c0f3af97
L
6944 /* X86_64_EA */
6945 {
8f570d62 6946 { "{l|}jmp{T|}", { Ap }, 0 },
c0f3af97
L
6947 },
6948
6949 /* X86_64_0F01_REG_0 */
6950 {
d1c36125 6951 { "sgdt{Q|Q}", { M }, 0 },
bf890a93 6952 { "sgdt", { M }, 0 },
c0f3af97
L
6953 },
6954
6955 /* X86_64_0F01_REG_1 */
6956 {
d1c36125 6957 { "sidt{Q|Q}", { M }, 0 },
bf890a93 6958 { "sidt", { M }, 0 },
c0f3af97
L
6959 },
6960
6961 /* X86_64_0F01_REG_2 */
6962 {
bf890a93
IT
6963 { "lgdt{Q|Q}", { M }, 0 },
6964 { "lgdt", { M }, 0 },
c0f3af97
L
6965 },
6966
6967 /* X86_64_0F01_REG_3 */
6968 {
bf890a93
IT
6969 { "lidt{Q|Q}", { M }, 0 },
6970 { "lidt", { M }, 0 },
c0f3af97 6971 },
260cd341
LC
6972
6973 /* X86_64_VEX_0F3849 */
6974 {
6975 { Bad_Opcode },
6976 { PREFIX_TABLE (PREFIX_VEX_0F3849_X86_64) },
6977 },
6978
6979 /* X86_64_VEX_0F384B */
6980 {
6981 { Bad_Opcode },
6982 { PREFIX_TABLE (PREFIX_VEX_0F384B_X86_64) },
6983 },
6984
6985 /* X86_64_VEX_0F385C */
6986 {
6987 { Bad_Opcode },
6988 { PREFIX_TABLE (PREFIX_VEX_0F385C_X86_64) },
6989 },
6990
6991 /* X86_64_VEX_0F385E */
6992 {
6993 { Bad_Opcode },
6994 { PREFIX_TABLE (PREFIX_VEX_0F385E_X86_64) },
6995 },
c0f3af97
L
6996};
6997
6998static const struct dis386 three_byte_table[][256] = {
c1e679ec
DR
6999
7000 /* THREE_BYTE_0F38 */
c0f3af97
L
7001 {
7002 /* 00 */
507bd325
L
7003 { "pshufb", { MX, EM }, PREFIX_OPCODE },
7004 { "phaddw", { MX, EM }, PREFIX_OPCODE },
7005 { "phaddd", { MX, EM }, PREFIX_OPCODE },
7006 { "phaddsw", { MX, EM }, PREFIX_OPCODE },
7007 { "pmaddubsw", { MX, EM }, PREFIX_OPCODE },
7008 { "phsubw", { MX, EM }, PREFIX_OPCODE },
7009 { "phsubd", { MX, EM }, PREFIX_OPCODE },
7010 { "phsubsw", { MX, EM }, PREFIX_OPCODE },
c0f3af97 7011 /* 08 */
507bd325
L
7012 { "psignb", { MX, EM }, PREFIX_OPCODE },
7013 { "psignw", { MX, EM }, PREFIX_OPCODE },
7014 { "psignd", { MX, EM }, PREFIX_OPCODE },
7015 { "pmulhrsw", { MX, EM }, PREFIX_OPCODE },
592d1631
L
7016 { Bad_Opcode },
7017 { Bad_Opcode },
7018 { Bad_Opcode },
7019 { Bad_Opcode },
f88c9eb0
SP
7020 /* 10 */
7021 { PREFIX_TABLE (PREFIX_0F3810) },
592d1631
L
7022 { Bad_Opcode },
7023 { Bad_Opcode },
7024 { Bad_Opcode },
f88c9eb0
SP
7025 { PREFIX_TABLE (PREFIX_0F3814) },
7026 { PREFIX_TABLE (PREFIX_0F3815) },
592d1631 7027 { Bad_Opcode },
f88c9eb0
SP
7028 { PREFIX_TABLE (PREFIX_0F3817) },
7029 /* 18 */
592d1631
L
7030 { Bad_Opcode },
7031 { Bad_Opcode },
7032 { Bad_Opcode },
7033 { Bad_Opcode },
507bd325
L
7034 { "pabsb", { MX, EM }, PREFIX_OPCODE },
7035 { "pabsw", { MX, EM }, PREFIX_OPCODE },
7036 { "pabsd", { MX, EM }, PREFIX_OPCODE },
592d1631 7037 { Bad_Opcode },
f88c9eb0
SP
7038 /* 20 */
7039 { PREFIX_TABLE (PREFIX_0F3820) },
7040 { PREFIX_TABLE (PREFIX_0F3821) },
7041 { PREFIX_TABLE (PREFIX_0F3822) },
7042 { PREFIX_TABLE (PREFIX_0F3823) },
7043 { PREFIX_TABLE (PREFIX_0F3824) },
7044 { PREFIX_TABLE (PREFIX_0F3825) },
592d1631
L
7045 { Bad_Opcode },
7046 { Bad_Opcode },
f88c9eb0
SP
7047 /* 28 */
7048 { PREFIX_TABLE (PREFIX_0F3828) },
7049 { PREFIX_TABLE (PREFIX_0F3829) },
7050 { PREFIX_TABLE (PREFIX_0F382A) },
7051 { PREFIX_TABLE (PREFIX_0F382B) },
592d1631
L
7052 { Bad_Opcode },
7053 { Bad_Opcode },
7054 { Bad_Opcode },
7055 { Bad_Opcode },
f88c9eb0
SP
7056 /* 30 */
7057 { PREFIX_TABLE (PREFIX_0F3830) },
7058 { PREFIX_TABLE (PREFIX_0F3831) },
7059 { PREFIX_TABLE (PREFIX_0F3832) },
7060 { PREFIX_TABLE (PREFIX_0F3833) },
7061 { PREFIX_TABLE (PREFIX_0F3834) },
7062 { PREFIX_TABLE (PREFIX_0F3835) },
592d1631 7063 { Bad_Opcode },
f88c9eb0
SP
7064 { PREFIX_TABLE (PREFIX_0F3837) },
7065 /* 38 */
7066 { PREFIX_TABLE (PREFIX_0F3838) },
7067 { PREFIX_TABLE (PREFIX_0F3839) },
7068 { PREFIX_TABLE (PREFIX_0F383A) },
7069 { PREFIX_TABLE (PREFIX_0F383B) },
7070 { PREFIX_TABLE (PREFIX_0F383C) },
7071 { PREFIX_TABLE (PREFIX_0F383D) },
7072 { PREFIX_TABLE (PREFIX_0F383E) },
7073 { PREFIX_TABLE (PREFIX_0F383F) },
7074 /* 40 */
7075 { PREFIX_TABLE (PREFIX_0F3840) },
7076 { PREFIX_TABLE (PREFIX_0F3841) },
592d1631
L
7077 { Bad_Opcode },
7078 { Bad_Opcode },
7079 { Bad_Opcode },
7080 { Bad_Opcode },
7081 { Bad_Opcode },
7082 { Bad_Opcode },
f88c9eb0 7083 /* 48 */
592d1631
L
7084 { Bad_Opcode },
7085 { Bad_Opcode },
7086 { Bad_Opcode },
7087 { Bad_Opcode },
7088 { Bad_Opcode },
7089 { Bad_Opcode },
7090 { Bad_Opcode },
7091 { Bad_Opcode },
f88c9eb0 7092 /* 50 */
592d1631
L
7093 { Bad_Opcode },
7094 { Bad_Opcode },
7095 { Bad_Opcode },
7096 { Bad_Opcode },
7097 { Bad_Opcode },
7098 { Bad_Opcode },
7099 { Bad_Opcode },
7100 { Bad_Opcode },
f88c9eb0 7101 /* 58 */
592d1631
L
7102 { Bad_Opcode },
7103 { Bad_Opcode },
7104 { Bad_Opcode },
7105 { Bad_Opcode },
7106 { Bad_Opcode },
7107 { Bad_Opcode },
7108 { Bad_Opcode },
7109 { Bad_Opcode },
f88c9eb0 7110 /* 60 */
592d1631
L
7111 { Bad_Opcode },
7112 { Bad_Opcode },
7113 { Bad_Opcode },
7114 { Bad_Opcode },
7115 { Bad_Opcode },
7116 { Bad_Opcode },
7117 { Bad_Opcode },
7118 { Bad_Opcode },
f88c9eb0 7119 /* 68 */
592d1631
L
7120 { Bad_Opcode },
7121 { Bad_Opcode },
7122 { Bad_Opcode },
7123 { Bad_Opcode },
7124 { Bad_Opcode },
7125 { Bad_Opcode },
7126 { Bad_Opcode },
7127 { Bad_Opcode },
f88c9eb0 7128 /* 70 */
592d1631
L
7129 { Bad_Opcode },
7130 { Bad_Opcode },
7131 { Bad_Opcode },
7132 { Bad_Opcode },
7133 { Bad_Opcode },
7134 { Bad_Opcode },
7135 { Bad_Opcode },
7136 { Bad_Opcode },
f88c9eb0 7137 /* 78 */
592d1631
L
7138 { Bad_Opcode },
7139 { Bad_Opcode },
7140 { Bad_Opcode },
7141 { Bad_Opcode },
7142 { Bad_Opcode },
7143 { Bad_Opcode },
7144 { Bad_Opcode },
7145 { Bad_Opcode },
f88c9eb0
SP
7146 /* 80 */
7147 { PREFIX_TABLE (PREFIX_0F3880) },
7148 { PREFIX_TABLE (PREFIX_0F3881) },
6c30d220 7149 { PREFIX_TABLE (PREFIX_0F3882) },
592d1631
L
7150 { Bad_Opcode },
7151 { Bad_Opcode },
7152 { Bad_Opcode },
7153 { Bad_Opcode },
7154 { Bad_Opcode },
f88c9eb0 7155 /* 88 */
592d1631
L
7156 { Bad_Opcode },
7157 { Bad_Opcode },
7158 { Bad_Opcode },
7159 { Bad_Opcode },
7160 { Bad_Opcode },
7161 { Bad_Opcode },
7162 { Bad_Opcode },
7163 { Bad_Opcode },
f88c9eb0 7164 /* 90 */
592d1631
L
7165 { Bad_Opcode },
7166 { Bad_Opcode },
7167 { Bad_Opcode },
7168 { Bad_Opcode },
7169 { Bad_Opcode },
7170 { Bad_Opcode },
7171 { Bad_Opcode },
7172 { Bad_Opcode },
f88c9eb0 7173 /* 98 */
592d1631
L
7174 { Bad_Opcode },
7175 { Bad_Opcode },
7176 { Bad_Opcode },
7177 { Bad_Opcode },
7178 { Bad_Opcode },
7179 { Bad_Opcode },
7180 { Bad_Opcode },
7181 { Bad_Opcode },
f88c9eb0 7182 /* a0 */
592d1631
L
7183 { Bad_Opcode },
7184 { Bad_Opcode },
7185 { Bad_Opcode },
7186 { Bad_Opcode },
7187 { Bad_Opcode },
7188 { Bad_Opcode },
7189 { Bad_Opcode },
7190 { Bad_Opcode },
f88c9eb0 7191 /* a8 */
592d1631
L
7192 { Bad_Opcode },
7193 { Bad_Opcode },
7194 { Bad_Opcode },
7195 { Bad_Opcode },
7196 { Bad_Opcode },
7197 { Bad_Opcode },
7198 { Bad_Opcode },
7199 { Bad_Opcode },
f88c9eb0 7200 /* b0 */
592d1631
L
7201 { Bad_Opcode },
7202 { Bad_Opcode },
7203 { Bad_Opcode },
7204 { Bad_Opcode },
7205 { Bad_Opcode },
7206 { Bad_Opcode },
7207 { Bad_Opcode },
7208 { Bad_Opcode },
f88c9eb0 7209 /* b8 */
592d1631
L
7210 { Bad_Opcode },
7211 { Bad_Opcode },
7212 { Bad_Opcode },
7213 { Bad_Opcode },
7214 { Bad_Opcode },
7215 { Bad_Opcode },
7216 { Bad_Opcode },
7217 { Bad_Opcode },
f88c9eb0 7218 /* c0 */
592d1631
L
7219 { Bad_Opcode },
7220 { Bad_Opcode },
7221 { Bad_Opcode },
7222 { Bad_Opcode },
7223 { Bad_Opcode },
7224 { Bad_Opcode },
7225 { Bad_Opcode },
7226 { Bad_Opcode },
f88c9eb0 7227 /* c8 */
a0046408
L
7228 { PREFIX_TABLE (PREFIX_0F38C8) },
7229 { PREFIX_TABLE (PREFIX_0F38C9) },
7230 { PREFIX_TABLE (PREFIX_0F38CA) },
7231 { PREFIX_TABLE (PREFIX_0F38CB) },
7232 { PREFIX_TABLE (PREFIX_0F38CC) },
7233 { PREFIX_TABLE (PREFIX_0F38CD) },
592d1631 7234 { Bad_Opcode },
48521003 7235 { PREFIX_TABLE (PREFIX_0F38CF) },
f88c9eb0 7236 /* d0 */
592d1631
L
7237 { Bad_Opcode },
7238 { Bad_Opcode },
7239 { Bad_Opcode },
7240 { Bad_Opcode },
7241 { Bad_Opcode },
7242 { Bad_Opcode },
7243 { Bad_Opcode },
7244 { Bad_Opcode },
f88c9eb0 7245 /* d8 */
592d1631
L
7246 { Bad_Opcode },
7247 { Bad_Opcode },
7248 { Bad_Opcode },
f88c9eb0
SP
7249 { PREFIX_TABLE (PREFIX_0F38DB) },
7250 { PREFIX_TABLE (PREFIX_0F38DC) },
7251 { PREFIX_TABLE (PREFIX_0F38DD) },
7252 { PREFIX_TABLE (PREFIX_0F38DE) },
7253 { PREFIX_TABLE (PREFIX_0F38DF) },
7254 /* e0 */
592d1631
L
7255 { Bad_Opcode },
7256 { Bad_Opcode },
7257 { Bad_Opcode },
7258 { Bad_Opcode },
7259 { Bad_Opcode },
7260 { Bad_Opcode },
7261 { Bad_Opcode },
7262 { Bad_Opcode },
f88c9eb0 7263 /* e8 */
592d1631
L
7264 { Bad_Opcode },
7265 { Bad_Opcode },
7266 { Bad_Opcode },
7267 { Bad_Opcode },
7268 { Bad_Opcode },
7269 { Bad_Opcode },
7270 { Bad_Opcode },
7271 { Bad_Opcode },
f88c9eb0
SP
7272 /* f0 */
7273 { PREFIX_TABLE (PREFIX_0F38F0) },
7274 { PREFIX_TABLE (PREFIX_0F38F1) },
592d1631
L
7275 { Bad_Opcode },
7276 { Bad_Opcode },
7277 { Bad_Opcode },
603555e5 7278 { PREFIX_TABLE (PREFIX_0F38F5) },
e2e1fcde 7279 { PREFIX_TABLE (PREFIX_0F38F6) },
592d1631 7280 { Bad_Opcode },
f88c9eb0 7281 /* f8 */
c0a30a9f
L
7282 { PREFIX_TABLE (PREFIX_0F38F8) },
7283 { PREFIX_TABLE (PREFIX_0F38F9) },
592d1631
L
7284 { Bad_Opcode },
7285 { Bad_Opcode },
7286 { Bad_Opcode },
7287 { Bad_Opcode },
7288 { Bad_Opcode },
7289 { Bad_Opcode },
f88c9eb0
SP
7290 },
7291 /* THREE_BYTE_0F3A */
7292 {
7293 /* 00 */
592d1631
L
7294 { Bad_Opcode },
7295 { Bad_Opcode },
7296 { Bad_Opcode },
7297 { Bad_Opcode },
7298 { Bad_Opcode },
7299 { Bad_Opcode },
7300 { Bad_Opcode },
7301 { Bad_Opcode },
f88c9eb0
SP
7302 /* 08 */
7303 { PREFIX_TABLE (PREFIX_0F3A08) },
7304 { PREFIX_TABLE (PREFIX_0F3A09) },
7305 { PREFIX_TABLE (PREFIX_0F3A0A) },
7306 { PREFIX_TABLE (PREFIX_0F3A0B) },
7307 { PREFIX_TABLE (PREFIX_0F3A0C) },
7308 { PREFIX_TABLE (PREFIX_0F3A0D) },
7309 { PREFIX_TABLE (PREFIX_0F3A0E) },
507bd325 7310 { "palignr", { MX, EM, Ib }, PREFIX_OPCODE },
f88c9eb0 7311 /* 10 */
592d1631
L
7312 { Bad_Opcode },
7313 { Bad_Opcode },
7314 { Bad_Opcode },
7315 { Bad_Opcode },
f88c9eb0
SP
7316 { PREFIX_TABLE (PREFIX_0F3A14) },
7317 { PREFIX_TABLE (PREFIX_0F3A15) },
7318 { PREFIX_TABLE (PREFIX_0F3A16) },
7319 { PREFIX_TABLE (PREFIX_0F3A17) },
7320 /* 18 */
592d1631
L
7321 { Bad_Opcode },
7322 { Bad_Opcode },
7323 { Bad_Opcode },
7324 { Bad_Opcode },
7325 { Bad_Opcode },
7326 { Bad_Opcode },
7327 { Bad_Opcode },
7328 { Bad_Opcode },
f88c9eb0
SP
7329 /* 20 */
7330 { PREFIX_TABLE (PREFIX_0F3A20) },
7331 { PREFIX_TABLE (PREFIX_0F3A21) },
7332 { PREFIX_TABLE (PREFIX_0F3A22) },
592d1631
L
7333 { Bad_Opcode },
7334 { Bad_Opcode },
7335 { Bad_Opcode },
7336 { Bad_Opcode },
7337 { Bad_Opcode },
f88c9eb0 7338 /* 28 */
592d1631
L
7339 { Bad_Opcode },
7340 { Bad_Opcode },
7341 { Bad_Opcode },
7342 { Bad_Opcode },
7343 { Bad_Opcode },
7344 { Bad_Opcode },
7345 { Bad_Opcode },
7346 { Bad_Opcode },
f88c9eb0 7347 /* 30 */
592d1631
L
7348 { Bad_Opcode },
7349 { Bad_Opcode },
7350 { Bad_Opcode },
7351 { Bad_Opcode },
7352 { Bad_Opcode },
7353 { Bad_Opcode },
7354 { Bad_Opcode },
7355 { Bad_Opcode },
f88c9eb0 7356 /* 38 */
592d1631
L
7357 { Bad_Opcode },
7358 { Bad_Opcode },
7359 { Bad_Opcode },
7360 { Bad_Opcode },
7361 { Bad_Opcode },
7362 { Bad_Opcode },
7363 { Bad_Opcode },
7364 { Bad_Opcode },
f88c9eb0
SP
7365 /* 40 */
7366 { PREFIX_TABLE (PREFIX_0F3A40) },
7367 { PREFIX_TABLE (PREFIX_0F3A41) },
7368 { PREFIX_TABLE (PREFIX_0F3A42) },
592d1631 7369 { Bad_Opcode },
f88c9eb0 7370 { PREFIX_TABLE (PREFIX_0F3A44) },
592d1631
L
7371 { Bad_Opcode },
7372 { Bad_Opcode },
7373 { Bad_Opcode },
f88c9eb0 7374 /* 48 */
592d1631
L
7375 { Bad_Opcode },
7376 { Bad_Opcode },
7377 { Bad_Opcode },
7378 { Bad_Opcode },
7379 { Bad_Opcode },
7380 { Bad_Opcode },
7381 { Bad_Opcode },
7382 { Bad_Opcode },
f88c9eb0 7383 /* 50 */
592d1631
L
7384 { Bad_Opcode },
7385 { Bad_Opcode },
7386 { Bad_Opcode },
7387 { Bad_Opcode },
7388 { Bad_Opcode },
7389 { Bad_Opcode },
7390 { Bad_Opcode },
7391 { Bad_Opcode },
f88c9eb0 7392 /* 58 */
592d1631
L
7393 { Bad_Opcode },
7394 { Bad_Opcode },
7395 { Bad_Opcode },
7396 { Bad_Opcode },
7397 { Bad_Opcode },
7398 { Bad_Opcode },
7399 { Bad_Opcode },
7400 { Bad_Opcode },
f88c9eb0
SP
7401 /* 60 */
7402 { PREFIX_TABLE (PREFIX_0F3A60) },
7403 { PREFIX_TABLE (PREFIX_0F3A61) },
7404 { PREFIX_TABLE (PREFIX_0F3A62) },
7405 { PREFIX_TABLE (PREFIX_0F3A63) },
592d1631
L
7406 { Bad_Opcode },
7407 { Bad_Opcode },
7408 { Bad_Opcode },
7409 { Bad_Opcode },
f88c9eb0 7410 /* 68 */
592d1631
L
7411 { Bad_Opcode },
7412 { Bad_Opcode },
7413 { Bad_Opcode },
7414 { Bad_Opcode },
7415 { Bad_Opcode },
7416 { Bad_Opcode },
7417 { Bad_Opcode },
7418 { Bad_Opcode },
f88c9eb0 7419 /* 70 */
592d1631
L
7420 { Bad_Opcode },
7421 { Bad_Opcode },
7422 { Bad_Opcode },
7423 { Bad_Opcode },
7424 { Bad_Opcode },
7425 { Bad_Opcode },
7426 { Bad_Opcode },
7427 { Bad_Opcode },
f88c9eb0 7428 /* 78 */
592d1631
L
7429 { Bad_Opcode },
7430 { Bad_Opcode },
7431 { Bad_Opcode },
7432 { Bad_Opcode },
7433 { Bad_Opcode },
7434 { Bad_Opcode },
7435 { Bad_Opcode },
7436 { Bad_Opcode },
f88c9eb0 7437 /* 80 */
592d1631
L
7438 { Bad_Opcode },
7439 { Bad_Opcode },
7440 { Bad_Opcode },
7441 { Bad_Opcode },
7442 { Bad_Opcode },
7443 { Bad_Opcode },
7444 { Bad_Opcode },
7445 { Bad_Opcode },
f88c9eb0 7446 /* 88 */
592d1631
L
7447 { Bad_Opcode },
7448 { Bad_Opcode },
7449 { Bad_Opcode },
7450 { Bad_Opcode },
7451 { Bad_Opcode },
7452 { Bad_Opcode },
7453 { Bad_Opcode },
7454 { Bad_Opcode },
f88c9eb0 7455 /* 90 */
592d1631
L
7456 { Bad_Opcode },
7457 { Bad_Opcode },
7458 { Bad_Opcode },
7459 { Bad_Opcode },
7460 { Bad_Opcode },
7461 { Bad_Opcode },
7462 { Bad_Opcode },
7463 { Bad_Opcode },
f88c9eb0 7464 /* 98 */
592d1631
L
7465 { Bad_Opcode },
7466 { Bad_Opcode },
7467 { Bad_Opcode },
7468 { Bad_Opcode },
7469 { Bad_Opcode },
7470 { Bad_Opcode },
7471 { Bad_Opcode },
7472 { Bad_Opcode },
f88c9eb0 7473 /* a0 */
592d1631
L
7474 { Bad_Opcode },
7475 { Bad_Opcode },
7476 { Bad_Opcode },
7477 { Bad_Opcode },
7478 { Bad_Opcode },
7479 { Bad_Opcode },
7480 { Bad_Opcode },
7481 { Bad_Opcode },
f88c9eb0 7482 /* a8 */
592d1631
L
7483 { Bad_Opcode },
7484 { Bad_Opcode },
7485 { Bad_Opcode },
7486 { Bad_Opcode },
7487 { Bad_Opcode },
7488 { Bad_Opcode },
7489 { Bad_Opcode },
7490 { Bad_Opcode },
f88c9eb0 7491 /* b0 */
592d1631
L
7492 { Bad_Opcode },
7493 { Bad_Opcode },
7494 { Bad_Opcode },
7495 { Bad_Opcode },
7496 { Bad_Opcode },
7497 { Bad_Opcode },
7498 { Bad_Opcode },
7499 { Bad_Opcode },
f88c9eb0 7500 /* b8 */
592d1631
L
7501 { Bad_Opcode },
7502 { Bad_Opcode },
7503 { Bad_Opcode },
7504 { Bad_Opcode },
7505 { Bad_Opcode },
7506 { Bad_Opcode },
7507 { Bad_Opcode },
7508 { Bad_Opcode },
f88c9eb0 7509 /* c0 */
592d1631
L
7510 { Bad_Opcode },
7511 { Bad_Opcode },
7512 { Bad_Opcode },
7513 { Bad_Opcode },
7514 { Bad_Opcode },
7515 { Bad_Opcode },
7516 { Bad_Opcode },
7517 { Bad_Opcode },
f88c9eb0 7518 /* c8 */
592d1631
L
7519 { Bad_Opcode },
7520 { Bad_Opcode },
7521 { Bad_Opcode },
7522 { Bad_Opcode },
a0046408 7523 { PREFIX_TABLE (PREFIX_0F3ACC) },
592d1631 7524 { Bad_Opcode },
48521003
IT
7525 { PREFIX_TABLE (PREFIX_0F3ACE) },
7526 { PREFIX_TABLE (PREFIX_0F3ACF) },
f88c9eb0 7527 /* d0 */
592d1631
L
7528 { Bad_Opcode },
7529 { Bad_Opcode },
7530 { Bad_Opcode },
7531 { Bad_Opcode },
7532 { Bad_Opcode },
7533 { Bad_Opcode },
7534 { Bad_Opcode },
7535 { Bad_Opcode },
f88c9eb0 7536 /* d8 */
592d1631
L
7537 { Bad_Opcode },
7538 { Bad_Opcode },
7539 { Bad_Opcode },
7540 { Bad_Opcode },
7541 { Bad_Opcode },
7542 { Bad_Opcode },
7543 { Bad_Opcode },
f88c9eb0
SP
7544 { PREFIX_TABLE (PREFIX_0F3ADF) },
7545 /* e0 */
592d1631
L
7546 { Bad_Opcode },
7547 { Bad_Opcode },
7548 { Bad_Opcode },
7549 { Bad_Opcode },
7550 { Bad_Opcode },
592d1631
L
7551 { Bad_Opcode },
7552 { Bad_Opcode },
7553 { Bad_Opcode },
85f10a01 7554 /* e8 */
592d1631
L
7555 { Bad_Opcode },
7556 { Bad_Opcode },
7557 { Bad_Opcode },
7558 { Bad_Opcode },
7559 { Bad_Opcode },
7560 { Bad_Opcode },
7561 { Bad_Opcode },
7562 { Bad_Opcode },
85f10a01 7563 /* f0 */
592d1631
L
7564 { Bad_Opcode },
7565 { Bad_Opcode },
7566 { Bad_Opcode },
7567 { Bad_Opcode },
7568 { Bad_Opcode },
7569 { Bad_Opcode },
7570 { Bad_Opcode },
7571 { Bad_Opcode },
85f10a01 7572 /* f8 */
592d1631
L
7573 { Bad_Opcode },
7574 { Bad_Opcode },
7575 { Bad_Opcode },
7576 { Bad_Opcode },
7577 { Bad_Opcode },
7578 { Bad_Opcode },
7579 { Bad_Opcode },
7580 { Bad_Opcode },
85f10a01 7581 },
f88c9eb0
SP
7582};
7583
7584static const struct dis386 xop_table[][256] = {
5dd85c99 7585 /* XOP_08 */
85f10a01
MM
7586 {
7587 /* 00 */
592d1631
L
7588 { Bad_Opcode },
7589 { Bad_Opcode },
7590 { Bad_Opcode },
7591 { Bad_Opcode },
7592 { Bad_Opcode },
7593 { Bad_Opcode },
7594 { Bad_Opcode },
7595 { Bad_Opcode },
85f10a01 7596 /* 08 */
592d1631
L
7597 { Bad_Opcode },
7598 { Bad_Opcode },
7599 { Bad_Opcode },
7600 { Bad_Opcode },
7601 { Bad_Opcode },
7602 { Bad_Opcode },
7603 { Bad_Opcode },
7604 { Bad_Opcode },
85f10a01 7605 /* 10 */
3929df09 7606 { Bad_Opcode },
592d1631
L
7607 { Bad_Opcode },
7608 { Bad_Opcode },
7609 { Bad_Opcode },
7610 { Bad_Opcode },
7611 { Bad_Opcode },
7612 { Bad_Opcode },
7613 { Bad_Opcode },
85f10a01 7614 /* 18 */
592d1631
L
7615 { Bad_Opcode },
7616 { Bad_Opcode },
7617 { Bad_Opcode },
7618 { Bad_Opcode },
7619 { Bad_Opcode },
7620 { Bad_Opcode },
7621 { Bad_Opcode },
7622 { Bad_Opcode },
85f10a01 7623 /* 20 */
592d1631
L
7624 { Bad_Opcode },
7625 { Bad_Opcode },
7626 { Bad_Opcode },
7627 { Bad_Opcode },
7628 { Bad_Opcode },
7629 { Bad_Opcode },
7630 { Bad_Opcode },
7631 { Bad_Opcode },
85f10a01 7632 /* 28 */
592d1631
L
7633 { Bad_Opcode },
7634 { Bad_Opcode },
7635 { Bad_Opcode },
7636 { Bad_Opcode },
7637 { Bad_Opcode },
7638 { Bad_Opcode },
7639 { Bad_Opcode },
7640 { Bad_Opcode },
c0f3af97 7641 /* 30 */
592d1631
L
7642 { Bad_Opcode },
7643 { Bad_Opcode },
7644 { Bad_Opcode },
7645 { Bad_Opcode },
7646 { Bad_Opcode },
7647 { Bad_Opcode },
7648 { Bad_Opcode },
7649 { Bad_Opcode },
c0f3af97 7650 /* 38 */
592d1631
L
7651 { Bad_Opcode },
7652 { Bad_Opcode },
7653 { Bad_Opcode },
7654 { Bad_Opcode },
7655 { Bad_Opcode },
7656 { Bad_Opcode },
7657 { Bad_Opcode },
7658 { Bad_Opcode },
c0f3af97 7659 /* 40 */
592d1631
L
7660 { Bad_Opcode },
7661 { Bad_Opcode },
7662 { Bad_Opcode },
7663 { Bad_Opcode },
7664 { Bad_Opcode },
7665 { Bad_Opcode },
7666 { Bad_Opcode },
7667 { Bad_Opcode },
85f10a01 7668 /* 48 */
592d1631
L
7669 { Bad_Opcode },
7670 { Bad_Opcode },
7671 { Bad_Opcode },
7672 { Bad_Opcode },
7673 { Bad_Opcode },
7674 { Bad_Opcode },
7675 { Bad_Opcode },
7676 { Bad_Opcode },
c0f3af97 7677 /* 50 */
592d1631
L
7678 { Bad_Opcode },
7679 { Bad_Opcode },
7680 { Bad_Opcode },
7681 { Bad_Opcode },
7682 { Bad_Opcode },
7683 { Bad_Opcode },
7684 { Bad_Opcode },
7685 { Bad_Opcode },
85f10a01 7686 /* 58 */
592d1631
L
7687 { Bad_Opcode },
7688 { Bad_Opcode },
7689 { Bad_Opcode },
7690 { Bad_Opcode },
7691 { Bad_Opcode },
7692 { Bad_Opcode },
7693 { Bad_Opcode },
7694 { Bad_Opcode },
c1e679ec 7695 /* 60 */
592d1631
L
7696 { Bad_Opcode },
7697 { Bad_Opcode },
7698 { Bad_Opcode },
7699 { Bad_Opcode },
7700 { Bad_Opcode },
7701 { Bad_Opcode },
7702 { Bad_Opcode },
7703 { Bad_Opcode },
c0f3af97 7704 /* 68 */
592d1631
L
7705 { Bad_Opcode },
7706 { Bad_Opcode },
7707 { Bad_Opcode },
7708 { Bad_Opcode },
7709 { Bad_Opcode },
7710 { Bad_Opcode },
7711 { Bad_Opcode },
7712 { Bad_Opcode },
85f10a01 7713 /* 70 */
592d1631
L
7714 { Bad_Opcode },
7715 { Bad_Opcode },
7716 { Bad_Opcode },
7717 { Bad_Opcode },
7718 { Bad_Opcode },
7719 { Bad_Opcode },
7720 { Bad_Opcode },
7721 { Bad_Opcode },
85f10a01 7722 /* 78 */
592d1631
L
7723 { Bad_Opcode },
7724 { Bad_Opcode },
7725 { Bad_Opcode },
7726 { Bad_Opcode },
7727 { Bad_Opcode },
7728 { Bad_Opcode },
7729 { Bad_Opcode },
7730 { Bad_Opcode },
85f10a01 7731 /* 80 */
592d1631
L
7732 { Bad_Opcode },
7733 { Bad_Opcode },
7734 { Bad_Opcode },
7735 { Bad_Opcode },
7736 { Bad_Opcode },
467bbef0
JB
7737 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_85) },
7738 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_86) },
7739 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_87) },
5dd85c99 7740 /* 88 */
592d1631
L
7741 { Bad_Opcode },
7742 { Bad_Opcode },
7743 { Bad_Opcode },
7744 { Bad_Opcode },
7745 { Bad_Opcode },
7746 { Bad_Opcode },
467bbef0
JB
7747 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_8E) },
7748 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_8F) },
5dd85c99 7749 /* 90 */
592d1631
L
7750 { Bad_Opcode },
7751 { Bad_Opcode },
7752 { Bad_Opcode },
7753 { Bad_Opcode },
7754 { Bad_Opcode },
467bbef0
JB
7755 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_95) },
7756 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_96) },
7757 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_97) },
5dd85c99 7758 /* 98 */
592d1631
L
7759 { Bad_Opcode },
7760 { Bad_Opcode },
7761 { Bad_Opcode },
7762 { Bad_Opcode },
7763 { Bad_Opcode },
7764 { Bad_Opcode },
467bbef0
JB
7765 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_9E) },
7766 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_9F) },
5dd85c99 7767 /* a0 */
592d1631
L
7768 { Bad_Opcode },
7769 { Bad_Opcode },
b13b1bc0 7770 { "vpcmov", { XM, Vex, EXx, XMVexI4 }, 0 },
467bbef0 7771 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_A3) },
592d1631
L
7772 { Bad_Opcode },
7773 { Bad_Opcode },
467bbef0 7774 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_A6) },
592d1631 7775 { Bad_Opcode },
5dd85c99 7776 /* a8 */
592d1631
L
7777 { Bad_Opcode },
7778 { Bad_Opcode },
7779 { Bad_Opcode },
7780 { Bad_Opcode },
7781 { Bad_Opcode },
7782 { Bad_Opcode },
7783 { Bad_Opcode },
7784 { Bad_Opcode },
5dd85c99 7785 /* b0 */
592d1631
L
7786 { Bad_Opcode },
7787 { Bad_Opcode },
7788 { Bad_Opcode },
7789 { Bad_Opcode },
7790 { Bad_Opcode },
7791 { Bad_Opcode },
467bbef0 7792 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_B6) },
592d1631 7793 { Bad_Opcode },
5dd85c99 7794 /* b8 */
592d1631
L
7795 { Bad_Opcode },
7796 { Bad_Opcode },
7797 { Bad_Opcode },
7798 { Bad_Opcode },
7799 { Bad_Opcode },
7800 { Bad_Opcode },
7801 { Bad_Opcode },
7802 { Bad_Opcode },
5dd85c99 7803 /* c0 */
467bbef0
JB
7804 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_C0) },
7805 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_C1) },
7806 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_C2) },
7807 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_C3) },
592d1631
L
7808 { Bad_Opcode },
7809 { Bad_Opcode },
7810 { Bad_Opcode },
7811 { Bad_Opcode },
5dd85c99 7812 /* c8 */
592d1631
L
7813 { Bad_Opcode },
7814 { Bad_Opcode },
7815 { Bad_Opcode },
7816 { Bad_Opcode },
ff688e1f
L
7817 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CC) },
7818 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CD) },
7819 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CE) },
7820 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CF) },
5dd85c99 7821 /* d0 */
592d1631
L
7822 { Bad_Opcode },
7823 { Bad_Opcode },
7824 { Bad_Opcode },
7825 { Bad_Opcode },
7826 { Bad_Opcode },
7827 { Bad_Opcode },
7828 { Bad_Opcode },
7829 { Bad_Opcode },
5dd85c99 7830 /* d8 */
592d1631
L
7831 { Bad_Opcode },
7832 { Bad_Opcode },
7833 { Bad_Opcode },
7834 { Bad_Opcode },
7835 { Bad_Opcode },
7836 { Bad_Opcode },
7837 { Bad_Opcode },
7838 { Bad_Opcode },
5dd85c99 7839 /* e0 */
592d1631
L
7840 { Bad_Opcode },
7841 { Bad_Opcode },
7842 { Bad_Opcode },
7843 { Bad_Opcode },
7844 { Bad_Opcode },
7845 { Bad_Opcode },
7846 { Bad_Opcode },
7847 { Bad_Opcode },
5dd85c99 7848 /* e8 */
592d1631
L
7849 { Bad_Opcode },
7850 { Bad_Opcode },
7851 { Bad_Opcode },
7852 { Bad_Opcode },
ff688e1f
L
7853 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EC) },
7854 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_ED) },
7855 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EE) },
7856 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EF) },
5dd85c99 7857 /* f0 */
592d1631
L
7858 { Bad_Opcode },
7859 { Bad_Opcode },
7860 { Bad_Opcode },
7861 { Bad_Opcode },
7862 { Bad_Opcode },
7863 { Bad_Opcode },
7864 { Bad_Opcode },
7865 { Bad_Opcode },
5dd85c99 7866 /* f8 */
592d1631
L
7867 { Bad_Opcode },
7868 { Bad_Opcode },
7869 { Bad_Opcode },
7870 { Bad_Opcode },
7871 { Bad_Opcode },
7872 { Bad_Opcode },
7873 { Bad_Opcode },
7874 { Bad_Opcode },
5dd85c99
SP
7875 },
7876 /* XOP_09 */
7877 {
7878 /* 00 */
592d1631 7879 { Bad_Opcode },
467bbef0
JB
7880 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_01) },
7881 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_02) },
592d1631
L
7882 { Bad_Opcode },
7883 { Bad_Opcode },
7884 { Bad_Opcode },
7885 { Bad_Opcode },
7886 { Bad_Opcode },
5dd85c99 7887 /* 08 */
592d1631
L
7888 { Bad_Opcode },
7889 { Bad_Opcode },
7890 { Bad_Opcode },
7891 { Bad_Opcode },
7892 { Bad_Opcode },
7893 { Bad_Opcode },
7894 { Bad_Opcode },
7895 { Bad_Opcode },
5dd85c99 7896 /* 10 */
592d1631
L
7897 { Bad_Opcode },
7898 { Bad_Opcode },
467bbef0 7899 { MOD_TABLE (MOD_VEX_0FXOP_09_12) },
592d1631
L
7900 { Bad_Opcode },
7901 { Bad_Opcode },
7902 { Bad_Opcode },
7903 { Bad_Opcode },
7904 { Bad_Opcode },
5dd85c99 7905 /* 18 */
592d1631
L
7906 { Bad_Opcode },
7907 { Bad_Opcode },
7908 { Bad_Opcode },
7909 { Bad_Opcode },
7910 { Bad_Opcode },
7911 { Bad_Opcode },
7912 { Bad_Opcode },
7913 { Bad_Opcode },
5dd85c99 7914 /* 20 */
592d1631
L
7915 { Bad_Opcode },
7916 { Bad_Opcode },
7917 { Bad_Opcode },
7918 { Bad_Opcode },
7919 { Bad_Opcode },
7920 { Bad_Opcode },
7921 { Bad_Opcode },
7922 { Bad_Opcode },
5dd85c99 7923 /* 28 */
592d1631
L
7924 { Bad_Opcode },
7925 { Bad_Opcode },
7926 { Bad_Opcode },
7927 { Bad_Opcode },
7928 { Bad_Opcode },
7929 { Bad_Opcode },
7930 { Bad_Opcode },
7931 { Bad_Opcode },
5dd85c99 7932 /* 30 */
592d1631
L
7933 { Bad_Opcode },
7934 { Bad_Opcode },
7935 { Bad_Opcode },
7936 { Bad_Opcode },
7937 { Bad_Opcode },
7938 { Bad_Opcode },
7939 { Bad_Opcode },
7940 { Bad_Opcode },
5dd85c99 7941 /* 38 */
592d1631
L
7942 { Bad_Opcode },
7943 { Bad_Opcode },
7944 { Bad_Opcode },
7945 { Bad_Opcode },
7946 { Bad_Opcode },
7947 { Bad_Opcode },
7948 { Bad_Opcode },
7949 { Bad_Opcode },
5dd85c99 7950 /* 40 */
592d1631
L
7951 { Bad_Opcode },
7952 { Bad_Opcode },
7953 { Bad_Opcode },
7954 { Bad_Opcode },
7955 { Bad_Opcode },
7956 { Bad_Opcode },
7957 { Bad_Opcode },
7958 { Bad_Opcode },
5dd85c99 7959 /* 48 */
592d1631
L
7960 { Bad_Opcode },
7961 { Bad_Opcode },
7962 { Bad_Opcode },
7963 { Bad_Opcode },
7964 { Bad_Opcode },
7965 { Bad_Opcode },
7966 { Bad_Opcode },
7967 { Bad_Opcode },
5dd85c99 7968 /* 50 */
592d1631
L
7969 { Bad_Opcode },
7970 { Bad_Opcode },
7971 { Bad_Opcode },
7972 { Bad_Opcode },
7973 { Bad_Opcode },
7974 { Bad_Opcode },
7975 { Bad_Opcode },
7976 { Bad_Opcode },
5dd85c99 7977 /* 58 */
592d1631
L
7978 { Bad_Opcode },
7979 { Bad_Opcode },
7980 { Bad_Opcode },
7981 { Bad_Opcode },
7982 { Bad_Opcode },
7983 { Bad_Opcode },
7984 { Bad_Opcode },
7985 { Bad_Opcode },
5dd85c99 7986 /* 60 */
592d1631
L
7987 { Bad_Opcode },
7988 { Bad_Opcode },
7989 { Bad_Opcode },
7990 { Bad_Opcode },
7991 { Bad_Opcode },
7992 { Bad_Opcode },
7993 { Bad_Opcode },
7994 { Bad_Opcode },
5dd85c99 7995 /* 68 */
592d1631
L
7996 { Bad_Opcode },
7997 { Bad_Opcode },
7998 { Bad_Opcode },
7999 { Bad_Opcode },
8000 { Bad_Opcode },
8001 { Bad_Opcode },
8002 { Bad_Opcode },
8003 { Bad_Opcode },
5dd85c99 8004 /* 70 */
592d1631
L
8005 { Bad_Opcode },
8006 { Bad_Opcode },
8007 { Bad_Opcode },
8008 { Bad_Opcode },
8009 { Bad_Opcode },
8010 { Bad_Opcode },
8011 { Bad_Opcode },
8012 { Bad_Opcode },
5dd85c99 8013 /* 78 */
592d1631
L
8014 { Bad_Opcode },
8015 { Bad_Opcode },
8016 { Bad_Opcode },
8017 { Bad_Opcode },
8018 { Bad_Opcode },
8019 { Bad_Opcode },
8020 { Bad_Opcode },
8021 { Bad_Opcode },
5dd85c99 8022 /* 80 */
b5b098c2
JB
8023 { VEX_W_TABLE (VEX_W_0FXOP_09_80) },
8024 { VEX_W_TABLE (VEX_W_0FXOP_09_81) },
8025 { VEX_W_TABLE (VEX_W_0FXOP_09_82) },
8026 { VEX_W_TABLE (VEX_W_0FXOP_09_83) },
592d1631
L
8027 { Bad_Opcode },
8028 { Bad_Opcode },
8029 { Bad_Opcode },
8030 { Bad_Opcode },
5dd85c99 8031 /* 88 */
592d1631
L
8032 { Bad_Opcode },
8033 { Bad_Opcode },
8034 { Bad_Opcode },
8035 { Bad_Opcode },
8036 { Bad_Opcode },
8037 { Bad_Opcode },
8038 { Bad_Opcode },
8039 { Bad_Opcode },
5dd85c99 8040 /* 90 */
467bbef0
JB
8041 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_90) },
8042 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_91) },
8043 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_92) },
8044 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_93) },
8045 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_94) },
8046 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_95) },
8047 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_96) },
8048 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_97) },
5dd85c99 8049 /* 98 */
467bbef0
JB
8050 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_98) },
8051 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_99) },
8052 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_9A) },
8053 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_9B) },
592d1631
L
8054 { Bad_Opcode },
8055 { Bad_Opcode },
8056 { Bad_Opcode },
8057 { Bad_Opcode },
5dd85c99 8058 /* a0 */
592d1631
L
8059 { Bad_Opcode },
8060 { Bad_Opcode },
8061 { Bad_Opcode },
8062 { Bad_Opcode },
8063 { Bad_Opcode },
8064 { Bad_Opcode },
8065 { Bad_Opcode },
8066 { Bad_Opcode },
5dd85c99 8067 /* a8 */
592d1631
L
8068 { Bad_Opcode },
8069 { Bad_Opcode },
8070 { Bad_Opcode },
8071 { Bad_Opcode },
8072 { Bad_Opcode },
8073 { Bad_Opcode },
8074 { Bad_Opcode },
8075 { Bad_Opcode },
5dd85c99 8076 /* b0 */
592d1631
L
8077 { Bad_Opcode },
8078 { Bad_Opcode },
8079 { Bad_Opcode },
8080 { Bad_Opcode },
8081 { Bad_Opcode },
8082 { Bad_Opcode },
8083 { Bad_Opcode },
8084 { Bad_Opcode },
5dd85c99 8085 /* b8 */
592d1631
L
8086 { Bad_Opcode },
8087 { Bad_Opcode },
8088 { Bad_Opcode },
8089 { Bad_Opcode },
8090 { Bad_Opcode },
8091 { Bad_Opcode },
8092 { Bad_Opcode },
8093 { Bad_Opcode },
5dd85c99 8094 /* c0 */
592d1631 8095 { Bad_Opcode },
467bbef0
JB
8096 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_C1) },
8097 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_C2) },
8098 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_C3) },
592d1631
L
8099 { Bad_Opcode },
8100 { Bad_Opcode },
467bbef0
JB
8101 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_C6) },
8102 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_C7) },
5dd85c99 8103 /* c8 */
592d1631
L
8104 { Bad_Opcode },
8105 { Bad_Opcode },
8106 { Bad_Opcode },
467bbef0 8107 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_CB) },
592d1631
L
8108 { Bad_Opcode },
8109 { Bad_Opcode },
8110 { Bad_Opcode },
8111 { Bad_Opcode },
5dd85c99 8112 /* d0 */
592d1631 8113 { Bad_Opcode },
467bbef0
JB
8114 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_D1) },
8115 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_D2) },
8116 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_D3) },
592d1631
L
8117 { Bad_Opcode },
8118 { Bad_Opcode },
467bbef0
JB
8119 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_D6) },
8120 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_D7) },
5dd85c99 8121 /* d8 */
592d1631
L
8122 { Bad_Opcode },
8123 { Bad_Opcode },
8124 { Bad_Opcode },
467bbef0 8125 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_DB) },
592d1631
L
8126 { Bad_Opcode },
8127 { Bad_Opcode },
8128 { Bad_Opcode },
8129 { Bad_Opcode },
5dd85c99 8130 /* e0 */
592d1631 8131 { Bad_Opcode },
467bbef0
JB
8132 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_E1) },
8133 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_E2) },
8134 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_E3) },
592d1631
L
8135 { Bad_Opcode },
8136 { Bad_Opcode },
8137 { Bad_Opcode },
8138 { Bad_Opcode },
4e7d34a6 8139 /* e8 */
592d1631
L
8140 { Bad_Opcode },
8141 { Bad_Opcode },
8142 { Bad_Opcode },
8143 { Bad_Opcode },
8144 { Bad_Opcode },
8145 { Bad_Opcode },
8146 { Bad_Opcode },
8147 { Bad_Opcode },
4e7d34a6 8148 /* f0 */
592d1631
L
8149 { Bad_Opcode },
8150 { Bad_Opcode },
8151 { Bad_Opcode },
8152 { Bad_Opcode },
8153 { Bad_Opcode },
8154 { Bad_Opcode },
8155 { Bad_Opcode },
8156 { Bad_Opcode },
4e7d34a6 8157 /* f8 */
592d1631
L
8158 { Bad_Opcode },
8159 { Bad_Opcode },
8160 { Bad_Opcode },
8161 { Bad_Opcode },
8162 { Bad_Opcode },
8163 { Bad_Opcode },
8164 { Bad_Opcode },
8165 { Bad_Opcode },
4e7d34a6 8166 },
f88c9eb0 8167 /* XOP_0A */
4e7d34a6
L
8168 {
8169 /* 00 */
592d1631
L
8170 { Bad_Opcode },
8171 { Bad_Opcode },
8172 { Bad_Opcode },
8173 { Bad_Opcode },
8174 { Bad_Opcode },
8175 { Bad_Opcode },
8176 { Bad_Opcode },
8177 { Bad_Opcode },
4e7d34a6 8178 /* 08 */
592d1631
L
8179 { Bad_Opcode },
8180 { Bad_Opcode },
8181 { Bad_Opcode },
8182 { Bad_Opcode },
8183 { Bad_Opcode },
8184 { Bad_Opcode },
8185 { Bad_Opcode },
8186 { Bad_Opcode },
4e7d34a6 8187 /* 10 */
c1dc7af5 8188 { "bextrS", { Gdq, Edq, Id }, 0 },
592d1631 8189 { Bad_Opcode },
467bbef0 8190 { VEX_LEN_TABLE (VEX_LEN_0FXOP_0A_12) },
592d1631
L
8191 { Bad_Opcode },
8192 { Bad_Opcode },
8193 { Bad_Opcode },
8194 { Bad_Opcode },
8195 { Bad_Opcode },
4e7d34a6 8196 /* 18 */
592d1631
L
8197 { Bad_Opcode },
8198 { Bad_Opcode },
8199 { Bad_Opcode },
8200 { Bad_Opcode },
8201 { Bad_Opcode },
8202 { Bad_Opcode },
8203 { Bad_Opcode },
8204 { Bad_Opcode },
4e7d34a6 8205 /* 20 */
592d1631
L
8206 { Bad_Opcode },
8207 { Bad_Opcode },
8208 { Bad_Opcode },
8209 { Bad_Opcode },
8210 { Bad_Opcode },
8211 { Bad_Opcode },
8212 { Bad_Opcode },
8213 { Bad_Opcode },
4e7d34a6 8214 /* 28 */
592d1631
L
8215 { Bad_Opcode },
8216 { Bad_Opcode },
8217 { Bad_Opcode },
8218 { Bad_Opcode },
8219 { Bad_Opcode },
8220 { Bad_Opcode },
8221 { Bad_Opcode },
8222 { Bad_Opcode },
4e7d34a6 8223 /* 30 */
592d1631
L
8224 { Bad_Opcode },
8225 { Bad_Opcode },
8226 { Bad_Opcode },
8227 { Bad_Opcode },
8228 { Bad_Opcode },
8229 { Bad_Opcode },
8230 { Bad_Opcode },
8231 { Bad_Opcode },
c0f3af97 8232 /* 38 */
592d1631
L
8233 { Bad_Opcode },
8234 { Bad_Opcode },
8235 { Bad_Opcode },
8236 { Bad_Opcode },
8237 { Bad_Opcode },
8238 { Bad_Opcode },
8239 { Bad_Opcode },
8240 { Bad_Opcode },
c0f3af97 8241 /* 40 */
592d1631
L
8242 { Bad_Opcode },
8243 { Bad_Opcode },
8244 { Bad_Opcode },
8245 { Bad_Opcode },
8246 { Bad_Opcode },
8247 { Bad_Opcode },
8248 { Bad_Opcode },
8249 { Bad_Opcode },
c1e679ec 8250 /* 48 */
592d1631
L
8251 { Bad_Opcode },
8252 { Bad_Opcode },
8253 { Bad_Opcode },
8254 { Bad_Opcode },
8255 { Bad_Opcode },
8256 { Bad_Opcode },
8257 { Bad_Opcode },
8258 { Bad_Opcode },
c1e679ec 8259 /* 50 */
592d1631
L
8260 { Bad_Opcode },
8261 { Bad_Opcode },
8262 { Bad_Opcode },
8263 { Bad_Opcode },
8264 { Bad_Opcode },
8265 { Bad_Opcode },
8266 { Bad_Opcode },
8267 { Bad_Opcode },
4e7d34a6 8268 /* 58 */
592d1631
L
8269 { Bad_Opcode },
8270 { Bad_Opcode },
8271 { Bad_Opcode },
8272 { Bad_Opcode },
8273 { Bad_Opcode },
8274 { Bad_Opcode },
8275 { Bad_Opcode },
8276 { Bad_Opcode },
4e7d34a6 8277 /* 60 */
592d1631
L
8278 { Bad_Opcode },
8279 { Bad_Opcode },
8280 { Bad_Opcode },
8281 { Bad_Opcode },
8282 { Bad_Opcode },
8283 { Bad_Opcode },
8284 { Bad_Opcode },
8285 { Bad_Opcode },
4e7d34a6 8286 /* 68 */
592d1631
L
8287 { Bad_Opcode },
8288 { Bad_Opcode },
8289 { Bad_Opcode },
8290 { Bad_Opcode },
8291 { Bad_Opcode },
8292 { Bad_Opcode },
8293 { Bad_Opcode },
8294 { Bad_Opcode },
4e7d34a6 8295 /* 70 */
592d1631
L
8296 { Bad_Opcode },
8297 { Bad_Opcode },
8298 { Bad_Opcode },
8299 { Bad_Opcode },
8300 { Bad_Opcode },
8301 { Bad_Opcode },
8302 { Bad_Opcode },
8303 { Bad_Opcode },
4e7d34a6 8304 /* 78 */
592d1631
L
8305 { Bad_Opcode },
8306 { Bad_Opcode },
8307 { Bad_Opcode },
8308 { Bad_Opcode },
8309 { Bad_Opcode },
8310 { Bad_Opcode },
8311 { Bad_Opcode },
8312 { Bad_Opcode },
4e7d34a6 8313 /* 80 */
592d1631
L
8314 { Bad_Opcode },
8315 { Bad_Opcode },
8316 { Bad_Opcode },
8317 { Bad_Opcode },
8318 { Bad_Opcode },
8319 { Bad_Opcode },
8320 { Bad_Opcode },
8321 { Bad_Opcode },
4e7d34a6 8322 /* 88 */
592d1631
L
8323 { Bad_Opcode },
8324 { Bad_Opcode },
8325 { Bad_Opcode },
8326 { Bad_Opcode },
8327 { Bad_Opcode },
8328 { Bad_Opcode },
8329 { Bad_Opcode },
8330 { Bad_Opcode },
4e7d34a6 8331 /* 90 */
592d1631
L
8332 { Bad_Opcode },
8333 { Bad_Opcode },
8334 { Bad_Opcode },
8335 { Bad_Opcode },
8336 { Bad_Opcode },
8337 { Bad_Opcode },
8338 { Bad_Opcode },
8339 { Bad_Opcode },
4e7d34a6 8340 /* 98 */
592d1631
L
8341 { Bad_Opcode },
8342 { Bad_Opcode },
8343 { Bad_Opcode },
8344 { Bad_Opcode },
8345 { Bad_Opcode },
8346 { Bad_Opcode },
8347 { Bad_Opcode },
8348 { Bad_Opcode },
4e7d34a6 8349 /* a0 */
592d1631
L
8350 { Bad_Opcode },
8351 { Bad_Opcode },
8352 { Bad_Opcode },
8353 { Bad_Opcode },
8354 { Bad_Opcode },
8355 { Bad_Opcode },
8356 { Bad_Opcode },
8357 { Bad_Opcode },
4e7d34a6 8358 /* a8 */
592d1631
L
8359 { Bad_Opcode },
8360 { Bad_Opcode },
8361 { Bad_Opcode },
8362 { Bad_Opcode },
8363 { Bad_Opcode },
8364 { Bad_Opcode },
8365 { Bad_Opcode },
8366 { Bad_Opcode },
d5d7db8e 8367 /* b0 */
592d1631
L
8368 { Bad_Opcode },
8369 { Bad_Opcode },
8370 { Bad_Opcode },
8371 { Bad_Opcode },
8372 { Bad_Opcode },
8373 { Bad_Opcode },
8374 { Bad_Opcode },
8375 { Bad_Opcode },
85f10a01 8376 /* b8 */
592d1631
L
8377 { Bad_Opcode },
8378 { Bad_Opcode },
8379 { Bad_Opcode },
8380 { Bad_Opcode },
8381 { Bad_Opcode },
8382 { Bad_Opcode },
8383 { Bad_Opcode },
8384 { Bad_Opcode },
85f10a01 8385 /* c0 */
592d1631
L
8386 { Bad_Opcode },
8387 { Bad_Opcode },
8388 { Bad_Opcode },
8389 { Bad_Opcode },
8390 { Bad_Opcode },
8391 { Bad_Opcode },
8392 { Bad_Opcode },
8393 { Bad_Opcode },
85f10a01 8394 /* c8 */
592d1631
L
8395 { Bad_Opcode },
8396 { Bad_Opcode },
8397 { Bad_Opcode },
8398 { Bad_Opcode },
8399 { Bad_Opcode },
8400 { Bad_Opcode },
8401 { Bad_Opcode },
8402 { Bad_Opcode },
85f10a01 8403 /* d0 */
592d1631
L
8404 { Bad_Opcode },
8405 { Bad_Opcode },
8406 { Bad_Opcode },
8407 { Bad_Opcode },
8408 { Bad_Opcode },
8409 { Bad_Opcode },
8410 { Bad_Opcode },
8411 { Bad_Opcode },
85f10a01 8412 /* d8 */
592d1631
L
8413 { Bad_Opcode },
8414 { Bad_Opcode },
8415 { Bad_Opcode },
8416 { Bad_Opcode },
8417 { Bad_Opcode },
8418 { Bad_Opcode },
8419 { Bad_Opcode },
8420 { Bad_Opcode },
85f10a01 8421 /* e0 */
592d1631
L
8422 { Bad_Opcode },
8423 { Bad_Opcode },
8424 { Bad_Opcode },
8425 { Bad_Opcode },
8426 { Bad_Opcode },
8427 { Bad_Opcode },
8428 { Bad_Opcode },
8429 { Bad_Opcode },
85f10a01 8430 /* e8 */
592d1631
L
8431 { Bad_Opcode },
8432 { Bad_Opcode },
8433 { Bad_Opcode },
8434 { Bad_Opcode },
8435 { Bad_Opcode },
8436 { Bad_Opcode },
8437 { Bad_Opcode },
8438 { Bad_Opcode },
85f10a01 8439 /* f0 */
592d1631
L
8440 { Bad_Opcode },
8441 { Bad_Opcode },
8442 { Bad_Opcode },
8443 { Bad_Opcode },
8444 { Bad_Opcode },
8445 { Bad_Opcode },
8446 { Bad_Opcode },
8447 { Bad_Opcode },
85f10a01 8448 /* f8 */
592d1631
L
8449 { Bad_Opcode },
8450 { Bad_Opcode },
8451 { Bad_Opcode },
8452 { Bad_Opcode },
8453 { Bad_Opcode },
8454 { Bad_Opcode },
8455 { Bad_Opcode },
8456 { Bad_Opcode },
85f10a01 8457 },
c0f3af97
L
8458};
8459
8460static const struct dis386 vex_table[][256] = {
8461 /* VEX_0F */
85f10a01
MM
8462 {
8463 /* 00 */
592d1631
L
8464 { Bad_Opcode },
8465 { Bad_Opcode },
8466 { Bad_Opcode },
8467 { Bad_Opcode },
8468 { Bad_Opcode },
8469 { Bad_Opcode },
8470 { Bad_Opcode },
8471 { Bad_Opcode },
85f10a01 8472 /* 08 */
592d1631
L
8473 { Bad_Opcode },
8474 { Bad_Opcode },
8475 { Bad_Opcode },
8476 { Bad_Opcode },
8477 { Bad_Opcode },
8478 { Bad_Opcode },
8479 { Bad_Opcode },
8480 { Bad_Opcode },
c0f3af97 8481 /* 10 */
592a252b
L
8482 { PREFIX_TABLE (PREFIX_VEX_0F10) },
8483 { PREFIX_TABLE (PREFIX_VEX_0F11) },
8484 { PREFIX_TABLE (PREFIX_VEX_0F12) },
8485 { MOD_TABLE (MOD_VEX_0F13) },
bf926894
JB
8486 { "vunpcklpX", { XM, Vex, EXx }, PREFIX_OPCODE },
8487 { "vunpckhpX", { XM, Vex, EXx }, PREFIX_OPCODE },
592a252b
L
8488 { PREFIX_TABLE (PREFIX_VEX_0F16) },
8489 { MOD_TABLE (MOD_VEX_0F17) },
c0f3af97 8490 /* 18 */
592d1631
L
8491 { Bad_Opcode },
8492 { Bad_Opcode },
8493 { Bad_Opcode },
8494 { Bad_Opcode },
8495 { Bad_Opcode },
8496 { Bad_Opcode },
8497 { Bad_Opcode },
8498 { Bad_Opcode },
c0f3af97 8499 /* 20 */
592d1631
L
8500 { Bad_Opcode },
8501 { Bad_Opcode },
8502 { Bad_Opcode },
8503 { Bad_Opcode },
8504 { Bad_Opcode },
8505 { Bad_Opcode },
8506 { Bad_Opcode },
8507 { Bad_Opcode },
c0f3af97 8508 /* 28 */
bf926894
JB
8509 { "vmovapX", { XM, EXx }, PREFIX_OPCODE },
8510 { "vmovapX", { EXxS, XM }, PREFIX_OPCODE },
592a252b
L
8511 { PREFIX_TABLE (PREFIX_VEX_0F2A) },
8512 { MOD_TABLE (MOD_VEX_0F2B) },
8513 { PREFIX_TABLE (PREFIX_VEX_0F2C) },
8514 { PREFIX_TABLE (PREFIX_VEX_0F2D) },
8515 { PREFIX_TABLE (PREFIX_VEX_0F2E) },
8516 { PREFIX_TABLE (PREFIX_VEX_0F2F) },
85f10a01 8517 /* 30 */
592d1631
L
8518 { Bad_Opcode },
8519 { Bad_Opcode },
8520 { Bad_Opcode },
8521 { Bad_Opcode },
8522 { Bad_Opcode },
8523 { Bad_Opcode },
8524 { Bad_Opcode },
8525 { Bad_Opcode },
4e7d34a6 8526 /* 38 */
592d1631
L
8527 { Bad_Opcode },
8528 { Bad_Opcode },
8529 { Bad_Opcode },
8530 { Bad_Opcode },
8531 { Bad_Opcode },
8532 { Bad_Opcode },
8533 { Bad_Opcode },
8534 { Bad_Opcode },
d5d7db8e 8535 /* 40 */
592d1631 8536 { Bad_Opcode },
43234a1e
L
8537 { PREFIX_TABLE (PREFIX_VEX_0F41) },
8538 { PREFIX_TABLE (PREFIX_VEX_0F42) },
592d1631 8539 { Bad_Opcode },
43234a1e
L
8540 { PREFIX_TABLE (PREFIX_VEX_0F44) },
8541 { PREFIX_TABLE (PREFIX_VEX_0F45) },
8542 { PREFIX_TABLE (PREFIX_VEX_0F46) },
8543 { PREFIX_TABLE (PREFIX_VEX_0F47) },
85f10a01 8544 /* 48 */
592d1631
L
8545 { Bad_Opcode },
8546 { Bad_Opcode },
1ba585e8 8547 { PREFIX_TABLE (PREFIX_VEX_0F4A) },
43234a1e 8548 { PREFIX_TABLE (PREFIX_VEX_0F4B) },
592d1631
L
8549 { Bad_Opcode },
8550 { Bad_Opcode },
8551 { Bad_Opcode },
8552 { Bad_Opcode },
d5d7db8e 8553 /* 50 */
592a252b
L
8554 { MOD_TABLE (MOD_VEX_0F50) },
8555 { PREFIX_TABLE (PREFIX_VEX_0F51) },
8556 { PREFIX_TABLE (PREFIX_VEX_0F52) },
8557 { PREFIX_TABLE (PREFIX_VEX_0F53) },
bf926894
JB
8558 { "vandpX", { XM, Vex, EXx }, PREFIX_OPCODE },
8559 { "vandnpX", { XM, Vex, EXx }, PREFIX_OPCODE },
8560 { "vorpX", { XM, Vex, EXx }, PREFIX_OPCODE },
8561 { "vxorpX", { XM, Vex, EXx }, PREFIX_OPCODE },
c0f3af97 8562 /* 58 */
592a252b
L
8563 { PREFIX_TABLE (PREFIX_VEX_0F58) },
8564 { PREFIX_TABLE (PREFIX_VEX_0F59) },
8565 { PREFIX_TABLE (PREFIX_VEX_0F5A) },
8566 { PREFIX_TABLE (PREFIX_VEX_0F5B) },
8567 { PREFIX_TABLE (PREFIX_VEX_0F5C) },
8568 { PREFIX_TABLE (PREFIX_VEX_0F5D) },
8569 { PREFIX_TABLE (PREFIX_VEX_0F5E) },
8570 { PREFIX_TABLE (PREFIX_VEX_0F5F) },
c0f3af97 8571 /* 60 */
592a252b
L
8572 { PREFIX_TABLE (PREFIX_VEX_0F60) },
8573 { PREFIX_TABLE (PREFIX_VEX_0F61) },
8574 { PREFIX_TABLE (PREFIX_VEX_0F62) },
8575 { PREFIX_TABLE (PREFIX_VEX_0F63) },
8576 { PREFIX_TABLE (PREFIX_VEX_0F64) },
8577 { PREFIX_TABLE (PREFIX_VEX_0F65) },
8578 { PREFIX_TABLE (PREFIX_VEX_0F66) },
8579 { PREFIX_TABLE (PREFIX_VEX_0F67) },
c0f3af97 8580 /* 68 */
592a252b
L
8581 { PREFIX_TABLE (PREFIX_VEX_0F68) },
8582 { PREFIX_TABLE (PREFIX_VEX_0F69) },
8583 { PREFIX_TABLE (PREFIX_VEX_0F6A) },
8584 { PREFIX_TABLE (PREFIX_VEX_0F6B) },
8585 { PREFIX_TABLE (PREFIX_VEX_0F6C) },
8586 { PREFIX_TABLE (PREFIX_VEX_0F6D) },
8587 { PREFIX_TABLE (PREFIX_VEX_0F6E) },
8588 { PREFIX_TABLE (PREFIX_VEX_0F6F) },
c0f3af97 8589 /* 70 */
592a252b
L
8590 { PREFIX_TABLE (PREFIX_VEX_0F70) },
8591 { REG_TABLE (REG_VEX_0F71) },
8592 { REG_TABLE (REG_VEX_0F72) },
8593 { REG_TABLE (REG_VEX_0F73) },
8594 { PREFIX_TABLE (PREFIX_VEX_0F74) },
8595 { PREFIX_TABLE (PREFIX_VEX_0F75) },
8596 { PREFIX_TABLE (PREFIX_VEX_0F76) },
8597 { PREFIX_TABLE (PREFIX_VEX_0F77) },
c0f3af97 8598 /* 78 */
592d1631
L
8599 { Bad_Opcode },
8600 { Bad_Opcode },
8601 { Bad_Opcode },
8602 { Bad_Opcode },
592a252b
L
8603 { PREFIX_TABLE (PREFIX_VEX_0F7C) },
8604 { PREFIX_TABLE (PREFIX_VEX_0F7D) },
8605 { PREFIX_TABLE (PREFIX_VEX_0F7E) },
8606 { PREFIX_TABLE (PREFIX_VEX_0F7F) },
c0f3af97 8607 /* 80 */
592d1631
L
8608 { Bad_Opcode },
8609 { Bad_Opcode },
8610 { Bad_Opcode },
8611 { Bad_Opcode },
8612 { Bad_Opcode },
8613 { Bad_Opcode },
8614 { Bad_Opcode },
8615 { Bad_Opcode },
c0f3af97 8616 /* 88 */
592d1631
L
8617 { Bad_Opcode },
8618 { Bad_Opcode },
8619 { Bad_Opcode },
8620 { Bad_Opcode },
8621 { Bad_Opcode },
8622 { Bad_Opcode },
8623 { Bad_Opcode },
8624 { Bad_Opcode },
c0f3af97 8625 /* 90 */
43234a1e
L
8626 { PREFIX_TABLE (PREFIX_VEX_0F90) },
8627 { PREFIX_TABLE (PREFIX_VEX_0F91) },
8628 { PREFIX_TABLE (PREFIX_VEX_0F92) },
8629 { PREFIX_TABLE (PREFIX_VEX_0F93) },
592d1631
L
8630 { Bad_Opcode },
8631 { Bad_Opcode },
8632 { Bad_Opcode },
8633 { Bad_Opcode },
c0f3af97 8634 /* 98 */
43234a1e 8635 { PREFIX_TABLE (PREFIX_VEX_0F98) },
1ba585e8 8636 { PREFIX_TABLE (PREFIX_VEX_0F99) },
592d1631
L
8637 { Bad_Opcode },
8638 { Bad_Opcode },
8639 { Bad_Opcode },
8640 { Bad_Opcode },
8641 { Bad_Opcode },
8642 { Bad_Opcode },
c0f3af97 8643 /* a0 */
592d1631
L
8644 { Bad_Opcode },
8645 { Bad_Opcode },
8646 { Bad_Opcode },
8647 { Bad_Opcode },
8648 { Bad_Opcode },
8649 { Bad_Opcode },
8650 { Bad_Opcode },
8651 { Bad_Opcode },
c0f3af97 8652 /* a8 */
592d1631
L
8653 { Bad_Opcode },
8654 { Bad_Opcode },
8655 { Bad_Opcode },
8656 { Bad_Opcode },
8657 { Bad_Opcode },
8658 { Bad_Opcode },
592a252b 8659 { REG_TABLE (REG_VEX_0FAE) },
592d1631 8660 { Bad_Opcode },
c0f3af97 8661 /* b0 */
592d1631
L
8662 { Bad_Opcode },
8663 { Bad_Opcode },
8664 { Bad_Opcode },
8665 { Bad_Opcode },
8666 { Bad_Opcode },
8667 { Bad_Opcode },
8668 { Bad_Opcode },
8669 { Bad_Opcode },
c0f3af97 8670 /* b8 */
592d1631
L
8671 { Bad_Opcode },
8672 { Bad_Opcode },
8673 { Bad_Opcode },
8674 { Bad_Opcode },
8675 { Bad_Opcode },
8676 { Bad_Opcode },
8677 { Bad_Opcode },
8678 { Bad_Opcode },
c0f3af97 8679 /* c0 */
592d1631
L
8680 { Bad_Opcode },
8681 { Bad_Opcode },
592a252b 8682 { PREFIX_TABLE (PREFIX_VEX_0FC2) },
592d1631 8683 { Bad_Opcode },
592a252b
L
8684 { PREFIX_TABLE (PREFIX_VEX_0FC4) },
8685 { PREFIX_TABLE (PREFIX_VEX_0FC5) },
bf926894 8686 { "vshufpX", { XM, Vex, EXx, Ib }, PREFIX_OPCODE },
592d1631 8687 { Bad_Opcode },
c0f3af97 8688 /* c8 */
592d1631
L
8689 { Bad_Opcode },
8690 { Bad_Opcode },
8691 { Bad_Opcode },
8692 { Bad_Opcode },
8693 { Bad_Opcode },
8694 { Bad_Opcode },
8695 { Bad_Opcode },
8696 { Bad_Opcode },
c0f3af97 8697 /* d0 */
592a252b
L
8698 { PREFIX_TABLE (PREFIX_VEX_0FD0) },
8699 { PREFIX_TABLE (PREFIX_VEX_0FD1) },
8700 { PREFIX_TABLE (PREFIX_VEX_0FD2) },
8701 { PREFIX_TABLE (PREFIX_VEX_0FD3) },
8702 { PREFIX_TABLE (PREFIX_VEX_0FD4) },
8703 { PREFIX_TABLE (PREFIX_VEX_0FD5) },
8704 { PREFIX_TABLE (PREFIX_VEX_0FD6) },
8705 { PREFIX_TABLE (PREFIX_VEX_0FD7) },
c0f3af97 8706 /* d8 */
592a252b
L
8707 { PREFIX_TABLE (PREFIX_VEX_0FD8) },
8708 { PREFIX_TABLE (PREFIX_VEX_0FD9) },
8709 { PREFIX_TABLE (PREFIX_VEX_0FDA) },
8710 { PREFIX_TABLE (PREFIX_VEX_0FDB) },
8711 { PREFIX_TABLE (PREFIX_VEX_0FDC) },
8712 { PREFIX_TABLE (PREFIX_VEX_0FDD) },
8713 { PREFIX_TABLE (PREFIX_VEX_0FDE) },
8714 { PREFIX_TABLE (PREFIX_VEX_0FDF) },
c0f3af97 8715 /* e0 */
592a252b
L
8716 { PREFIX_TABLE (PREFIX_VEX_0FE0) },
8717 { PREFIX_TABLE (PREFIX_VEX_0FE1) },
8718 { PREFIX_TABLE (PREFIX_VEX_0FE2) },
8719 { PREFIX_TABLE (PREFIX_VEX_0FE3) },
8720 { PREFIX_TABLE (PREFIX_VEX_0FE4) },
8721 { PREFIX_TABLE (PREFIX_VEX_0FE5) },
8722 { PREFIX_TABLE (PREFIX_VEX_0FE6) },
8723 { PREFIX_TABLE (PREFIX_VEX_0FE7) },
c0f3af97 8724 /* e8 */
592a252b
L
8725 { PREFIX_TABLE (PREFIX_VEX_0FE8) },
8726 { PREFIX_TABLE (PREFIX_VEX_0FE9) },
8727 { PREFIX_TABLE (PREFIX_VEX_0FEA) },
8728 { PREFIX_TABLE (PREFIX_VEX_0FEB) },
8729 { PREFIX_TABLE (PREFIX_VEX_0FEC) },
8730 { PREFIX_TABLE (PREFIX_VEX_0FED) },
8731 { PREFIX_TABLE (PREFIX_VEX_0FEE) },
8732 { PREFIX_TABLE (PREFIX_VEX_0FEF) },
c0f3af97 8733 /* f0 */
592a252b
L
8734 { PREFIX_TABLE (PREFIX_VEX_0FF0) },
8735 { PREFIX_TABLE (PREFIX_VEX_0FF1) },
8736 { PREFIX_TABLE (PREFIX_VEX_0FF2) },
8737 { PREFIX_TABLE (PREFIX_VEX_0FF3) },
8738 { PREFIX_TABLE (PREFIX_VEX_0FF4) },
8739 { PREFIX_TABLE (PREFIX_VEX_0FF5) },
8740 { PREFIX_TABLE (PREFIX_VEX_0FF6) },
8741 { PREFIX_TABLE (PREFIX_VEX_0FF7) },
c0f3af97 8742 /* f8 */
592a252b
L
8743 { PREFIX_TABLE (PREFIX_VEX_0FF8) },
8744 { PREFIX_TABLE (PREFIX_VEX_0FF9) },
8745 { PREFIX_TABLE (PREFIX_VEX_0FFA) },
8746 { PREFIX_TABLE (PREFIX_VEX_0FFB) },
8747 { PREFIX_TABLE (PREFIX_VEX_0FFC) },
8748 { PREFIX_TABLE (PREFIX_VEX_0FFD) },
8749 { PREFIX_TABLE (PREFIX_VEX_0FFE) },
592d1631 8750 { Bad_Opcode },
c0f3af97
L
8751 },
8752 /* VEX_0F38 */
8753 {
8754 /* 00 */
592a252b
L
8755 { PREFIX_TABLE (PREFIX_VEX_0F3800) },
8756 { PREFIX_TABLE (PREFIX_VEX_0F3801) },
8757 { PREFIX_TABLE (PREFIX_VEX_0F3802) },
8758 { PREFIX_TABLE (PREFIX_VEX_0F3803) },
8759 { PREFIX_TABLE (PREFIX_VEX_0F3804) },
8760 { PREFIX_TABLE (PREFIX_VEX_0F3805) },
8761 { PREFIX_TABLE (PREFIX_VEX_0F3806) },
8762 { PREFIX_TABLE (PREFIX_VEX_0F3807) },
c0f3af97 8763 /* 08 */
592a252b
L
8764 { PREFIX_TABLE (PREFIX_VEX_0F3808) },
8765 { PREFIX_TABLE (PREFIX_VEX_0F3809) },
8766 { PREFIX_TABLE (PREFIX_VEX_0F380A) },
8767 { PREFIX_TABLE (PREFIX_VEX_0F380B) },
8768 { PREFIX_TABLE (PREFIX_VEX_0F380C) },
8769 { PREFIX_TABLE (PREFIX_VEX_0F380D) },
8770 { PREFIX_TABLE (PREFIX_VEX_0F380E) },
8771 { PREFIX_TABLE (PREFIX_VEX_0F380F) },
c0f3af97 8772 /* 10 */
592d1631
L
8773 { Bad_Opcode },
8774 { Bad_Opcode },
8775 { Bad_Opcode },
592a252b 8776 { PREFIX_TABLE (PREFIX_VEX_0F3813) },
592d1631
L
8777 { Bad_Opcode },
8778 { Bad_Opcode },
6c30d220 8779 { PREFIX_TABLE (PREFIX_VEX_0F3816) },
592a252b 8780 { PREFIX_TABLE (PREFIX_VEX_0F3817) },
c0f3af97 8781 /* 18 */
592a252b
L
8782 { PREFIX_TABLE (PREFIX_VEX_0F3818) },
8783 { PREFIX_TABLE (PREFIX_VEX_0F3819) },
8784 { PREFIX_TABLE (PREFIX_VEX_0F381A) },
592d1631 8785 { Bad_Opcode },
592a252b
L
8786 { PREFIX_TABLE (PREFIX_VEX_0F381C) },
8787 { PREFIX_TABLE (PREFIX_VEX_0F381D) },
8788 { PREFIX_TABLE (PREFIX_VEX_0F381E) },
592d1631 8789 { Bad_Opcode },
c0f3af97 8790 /* 20 */
592a252b
L
8791 { PREFIX_TABLE (PREFIX_VEX_0F3820) },
8792 { PREFIX_TABLE (PREFIX_VEX_0F3821) },
8793 { PREFIX_TABLE (PREFIX_VEX_0F3822) },
8794 { PREFIX_TABLE (PREFIX_VEX_0F3823) },
8795 { PREFIX_TABLE (PREFIX_VEX_0F3824) },
8796 { PREFIX_TABLE (PREFIX_VEX_0F3825) },
592d1631
L
8797 { Bad_Opcode },
8798 { Bad_Opcode },
c0f3af97 8799 /* 28 */
592a252b
L
8800 { PREFIX_TABLE (PREFIX_VEX_0F3828) },
8801 { PREFIX_TABLE (PREFIX_VEX_0F3829) },
8802 { PREFIX_TABLE (PREFIX_VEX_0F382A) },
8803 { PREFIX_TABLE (PREFIX_VEX_0F382B) },
8804 { PREFIX_TABLE (PREFIX_VEX_0F382C) },
8805 { PREFIX_TABLE (PREFIX_VEX_0F382D) },
8806 { PREFIX_TABLE (PREFIX_VEX_0F382E) },
8807 { PREFIX_TABLE (PREFIX_VEX_0F382F) },
c0f3af97 8808 /* 30 */
592a252b
L
8809 { PREFIX_TABLE (PREFIX_VEX_0F3830) },
8810 { PREFIX_TABLE (PREFIX_VEX_0F3831) },
8811 { PREFIX_TABLE (PREFIX_VEX_0F3832) },
8812 { PREFIX_TABLE (PREFIX_VEX_0F3833) },
8813 { PREFIX_TABLE (PREFIX_VEX_0F3834) },
8814 { PREFIX_TABLE (PREFIX_VEX_0F3835) },
6c30d220 8815 { PREFIX_TABLE (PREFIX_VEX_0F3836) },
592a252b 8816 { PREFIX_TABLE (PREFIX_VEX_0F3837) },
c0f3af97 8817 /* 38 */
592a252b
L
8818 { PREFIX_TABLE (PREFIX_VEX_0F3838) },
8819 { PREFIX_TABLE (PREFIX_VEX_0F3839) },
8820 { PREFIX_TABLE (PREFIX_VEX_0F383A) },
8821 { PREFIX_TABLE (PREFIX_VEX_0F383B) },
8822 { PREFIX_TABLE (PREFIX_VEX_0F383C) },
8823 { PREFIX_TABLE (PREFIX_VEX_0F383D) },
8824 { PREFIX_TABLE (PREFIX_VEX_0F383E) },
8825 { PREFIX_TABLE (PREFIX_VEX_0F383F) },
c0f3af97 8826 /* 40 */
592a252b
L
8827 { PREFIX_TABLE (PREFIX_VEX_0F3840) },
8828 { PREFIX_TABLE (PREFIX_VEX_0F3841) },
592d1631
L
8829 { Bad_Opcode },
8830 { Bad_Opcode },
8831 { Bad_Opcode },
6c30d220
L
8832 { PREFIX_TABLE (PREFIX_VEX_0F3845) },
8833 { PREFIX_TABLE (PREFIX_VEX_0F3846) },
8834 { PREFIX_TABLE (PREFIX_VEX_0F3847) },
c0f3af97 8835 /* 48 */
592d1631 8836 { Bad_Opcode },
260cd341 8837 { X86_64_TABLE (X86_64_VEX_0F3849) },
592d1631 8838 { Bad_Opcode },
260cd341 8839 { X86_64_TABLE (X86_64_VEX_0F384B) },
592d1631
L
8840 { Bad_Opcode },
8841 { Bad_Opcode },
8842 { Bad_Opcode },
8843 { Bad_Opcode },
c0f3af97 8844 /* 50 */
592d1631
L
8845 { Bad_Opcode },
8846 { Bad_Opcode },
8847 { Bad_Opcode },
8848 { Bad_Opcode },
8849 { Bad_Opcode },
8850 { Bad_Opcode },
8851 { Bad_Opcode },
8852 { Bad_Opcode },
c0f3af97 8853 /* 58 */
6c30d220
L
8854 { PREFIX_TABLE (PREFIX_VEX_0F3858) },
8855 { PREFIX_TABLE (PREFIX_VEX_0F3859) },
8856 { PREFIX_TABLE (PREFIX_VEX_0F385A) },
592d1631 8857 { Bad_Opcode },
260cd341 8858 { X86_64_TABLE (X86_64_VEX_0F385C) },
592d1631 8859 { Bad_Opcode },
260cd341 8860 { X86_64_TABLE (X86_64_VEX_0F385E) },
592d1631 8861 { Bad_Opcode },
c0f3af97 8862 /* 60 */
592d1631
L
8863 { Bad_Opcode },
8864 { Bad_Opcode },
8865 { Bad_Opcode },
8866 { Bad_Opcode },
8867 { Bad_Opcode },
8868 { Bad_Opcode },
8869 { Bad_Opcode },
8870 { Bad_Opcode },
c0f3af97 8871 /* 68 */
592d1631
L
8872 { Bad_Opcode },
8873 { Bad_Opcode },
8874 { Bad_Opcode },
8875 { Bad_Opcode },
8876 { Bad_Opcode },
8877 { Bad_Opcode },
8878 { Bad_Opcode },
8879 { Bad_Opcode },
c0f3af97 8880 /* 70 */
592d1631
L
8881 { Bad_Opcode },
8882 { Bad_Opcode },
8883 { Bad_Opcode },
8884 { Bad_Opcode },
8885 { Bad_Opcode },
8886 { Bad_Opcode },
8887 { Bad_Opcode },
8888 { Bad_Opcode },
c0f3af97 8889 /* 78 */
6c30d220
L
8890 { PREFIX_TABLE (PREFIX_VEX_0F3878) },
8891 { PREFIX_TABLE (PREFIX_VEX_0F3879) },
592d1631
L
8892 { Bad_Opcode },
8893 { Bad_Opcode },
8894 { Bad_Opcode },
8895 { Bad_Opcode },
8896 { Bad_Opcode },
8897 { Bad_Opcode },
c0f3af97 8898 /* 80 */
592d1631
L
8899 { Bad_Opcode },
8900 { Bad_Opcode },
8901 { Bad_Opcode },
8902 { Bad_Opcode },
8903 { Bad_Opcode },
8904 { Bad_Opcode },
8905 { Bad_Opcode },
8906 { Bad_Opcode },
c0f3af97 8907 /* 88 */
592d1631
L
8908 { Bad_Opcode },
8909 { Bad_Opcode },
8910 { Bad_Opcode },
8911 { Bad_Opcode },
6c30d220 8912 { PREFIX_TABLE (PREFIX_VEX_0F388C) },
592d1631 8913 { Bad_Opcode },
6c30d220 8914 { PREFIX_TABLE (PREFIX_VEX_0F388E) },
592d1631 8915 { Bad_Opcode },
c0f3af97 8916 /* 90 */
6c30d220
L
8917 { PREFIX_TABLE (PREFIX_VEX_0F3890) },
8918 { PREFIX_TABLE (PREFIX_VEX_0F3891) },
8919 { PREFIX_TABLE (PREFIX_VEX_0F3892) },
8920 { PREFIX_TABLE (PREFIX_VEX_0F3893) },
592d1631
L
8921 { Bad_Opcode },
8922 { Bad_Opcode },
592a252b
L
8923 { PREFIX_TABLE (PREFIX_VEX_0F3896) },
8924 { PREFIX_TABLE (PREFIX_VEX_0F3897) },
c0f3af97 8925 /* 98 */
592a252b
L
8926 { PREFIX_TABLE (PREFIX_VEX_0F3898) },
8927 { PREFIX_TABLE (PREFIX_VEX_0F3899) },
8928 { PREFIX_TABLE (PREFIX_VEX_0F389A) },
8929 { PREFIX_TABLE (PREFIX_VEX_0F389B) },
8930 { PREFIX_TABLE (PREFIX_VEX_0F389C) },
8931 { PREFIX_TABLE (PREFIX_VEX_0F389D) },
8932 { PREFIX_TABLE (PREFIX_VEX_0F389E) },
8933 { PREFIX_TABLE (PREFIX_VEX_0F389F) },
c0f3af97 8934 /* a0 */
592d1631
L
8935 { Bad_Opcode },
8936 { Bad_Opcode },
8937 { Bad_Opcode },
8938 { Bad_Opcode },
8939 { Bad_Opcode },
8940 { Bad_Opcode },
592a252b
L
8941 { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
8942 { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
c0f3af97 8943 /* a8 */
592a252b
L
8944 { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
8945 { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
8946 { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
8947 { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
8948 { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
8949 { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
8950 { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
8951 { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
c0f3af97 8952 /* b0 */
592d1631
L
8953 { Bad_Opcode },
8954 { Bad_Opcode },
8955 { Bad_Opcode },
8956 { Bad_Opcode },
8957 { Bad_Opcode },
8958 { Bad_Opcode },
592a252b
L
8959 { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
8960 { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
c0f3af97 8961 /* b8 */
592a252b
L
8962 { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
8963 { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
8964 { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
8965 { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
8966 { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
8967 { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
8968 { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
8969 { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
c0f3af97 8970 /* c0 */
592d1631
L
8971 { Bad_Opcode },
8972 { Bad_Opcode },
8973 { Bad_Opcode },
8974 { Bad_Opcode },
8975 { Bad_Opcode },
8976 { Bad_Opcode },
8977 { Bad_Opcode },
8978 { Bad_Opcode },
c0f3af97 8979 /* c8 */
592d1631
L
8980 { Bad_Opcode },
8981 { Bad_Opcode },
8982 { Bad_Opcode },
8983 { Bad_Opcode },
8984 { Bad_Opcode },
8985 { Bad_Opcode },
8986 { Bad_Opcode },
48521003 8987 { PREFIX_TABLE (PREFIX_VEX_0F38CF) },
c0f3af97 8988 /* d0 */
592d1631
L
8989 { Bad_Opcode },
8990 { Bad_Opcode },
8991 { Bad_Opcode },
8992 { Bad_Opcode },
8993 { Bad_Opcode },
8994 { Bad_Opcode },
8995 { Bad_Opcode },
8996 { Bad_Opcode },
c0f3af97 8997 /* d8 */
592d1631
L
8998 { Bad_Opcode },
8999 { Bad_Opcode },
9000 { Bad_Opcode },
592a252b
L
9001 { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
9002 { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
9003 { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
9004 { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
9005 { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
c0f3af97 9006 /* e0 */
592d1631
L
9007 { Bad_Opcode },
9008 { Bad_Opcode },
9009 { Bad_Opcode },
9010 { Bad_Opcode },
9011 { Bad_Opcode },
9012 { Bad_Opcode },
9013 { Bad_Opcode },
9014 { Bad_Opcode },
c0f3af97 9015 /* e8 */
592d1631
L
9016 { Bad_Opcode },
9017 { Bad_Opcode },
9018 { Bad_Opcode },
9019 { Bad_Opcode },
9020 { Bad_Opcode },
9021 { Bad_Opcode },
9022 { Bad_Opcode },
9023 { Bad_Opcode },
c0f3af97 9024 /* f0 */
592d1631
L
9025 { Bad_Opcode },
9026 { Bad_Opcode },
f12dc422
L
9027 { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
9028 { REG_TABLE (REG_VEX_0F38F3) },
592d1631 9029 { Bad_Opcode },
6c30d220
L
9030 { PREFIX_TABLE (PREFIX_VEX_0F38F5) },
9031 { PREFIX_TABLE (PREFIX_VEX_0F38F6) },
f12dc422 9032 { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
c0f3af97 9033 /* f8 */
592d1631
L
9034 { Bad_Opcode },
9035 { Bad_Opcode },
9036 { Bad_Opcode },
9037 { Bad_Opcode },
9038 { Bad_Opcode },
9039 { Bad_Opcode },
9040 { Bad_Opcode },
9041 { Bad_Opcode },
c0f3af97
L
9042 },
9043 /* VEX_0F3A */
9044 {
9045 /* 00 */
6c30d220
L
9046 { PREFIX_TABLE (PREFIX_VEX_0F3A00) },
9047 { PREFIX_TABLE (PREFIX_VEX_0F3A01) },
9048 { PREFIX_TABLE (PREFIX_VEX_0F3A02) },
592d1631 9049 { Bad_Opcode },
592a252b
L
9050 { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
9051 { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
9052 { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
592d1631 9053 { Bad_Opcode },
c0f3af97 9054 /* 08 */
592a252b
L
9055 { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
9056 { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
9057 { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
9058 { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
9059 { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
9060 { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
9061 { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
9062 { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
c0f3af97 9063 /* 10 */
592d1631
L
9064 { Bad_Opcode },
9065 { Bad_Opcode },
9066 { Bad_Opcode },
9067 { Bad_Opcode },
592a252b
L
9068 { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
9069 { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
9070 { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
9071 { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
c0f3af97 9072 /* 18 */
592a252b
L
9073 { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
9074 { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
592d1631
L
9075 { Bad_Opcode },
9076 { Bad_Opcode },
9077 { Bad_Opcode },
592a252b 9078 { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
592d1631
L
9079 { Bad_Opcode },
9080 { Bad_Opcode },
c0f3af97 9081 /* 20 */
592a252b
L
9082 { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
9083 { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
9084 { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
592d1631
L
9085 { Bad_Opcode },
9086 { Bad_Opcode },
9087 { Bad_Opcode },
9088 { Bad_Opcode },
9089 { Bad_Opcode },
c0f3af97 9090 /* 28 */
592d1631
L
9091 { Bad_Opcode },
9092 { Bad_Opcode },
9093 { Bad_Opcode },
9094 { Bad_Opcode },
9095 { Bad_Opcode },
9096 { Bad_Opcode },
9097 { Bad_Opcode },
9098 { Bad_Opcode },
c0f3af97 9099 /* 30 */
43234a1e 9100 { PREFIX_TABLE (PREFIX_VEX_0F3A30) },
1ba585e8 9101 { PREFIX_TABLE (PREFIX_VEX_0F3A31) },
43234a1e 9102 { PREFIX_TABLE (PREFIX_VEX_0F3A32) },
1ba585e8 9103 { PREFIX_TABLE (PREFIX_VEX_0F3A33) },
592d1631
L
9104 { Bad_Opcode },
9105 { Bad_Opcode },
9106 { Bad_Opcode },
9107 { Bad_Opcode },
c0f3af97 9108 /* 38 */
6c30d220
L
9109 { PREFIX_TABLE (PREFIX_VEX_0F3A38) },
9110 { PREFIX_TABLE (PREFIX_VEX_0F3A39) },
592d1631
L
9111 { Bad_Opcode },
9112 { Bad_Opcode },
9113 { Bad_Opcode },
9114 { Bad_Opcode },
9115 { Bad_Opcode },
9116 { Bad_Opcode },
c0f3af97 9117 /* 40 */
592a252b
L
9118 { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
9119 { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
9120 { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
592d1631 9121 { Bad_Opcode },
592a252b 9122 { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
592d1631 9123 { Bad_Opcode },
6c30d220 9124 { PREFIX_TABLE (PREFIX_VEX_0F3A46) },
592d1631 9125 { Bad_Opcode },
c0f3af97 9126 /* 48 */
592a252b
L
9127 { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
9128 { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
9129 { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
9130 { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
9131 { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
592d1631
L
9132 { Bad_Opcode },
9133 { Bad_Opcode },
9134 { Bad_Opcode },
c0f3af97 9135 /* 50 */
592d1631
L
9136 { Bad_Opcode },
9137 { Bad_Opcode },
9138 { Bad_Opcode },
9139 { Bad_Opcode },
9140 { Bad_Opcode },
9141 { Bad_Opcode },
9142 { Bad_Opcode },
9143 { Bad_Opcode },
c0f3af97 9144 /* 58 */
592d1631
L
9145 { Bad_Opcode },
9146 { Bad_Opcode },
9147 { Bad_Opcode },
9148 { Bad_Opcode },
592a252b
L
9149 { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
9150 { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
9151 { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
9152 { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
c0f3af97 9153 /* 60 */
592a252b
L
9154 { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
9155 { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
9156 { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
9157 { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
592d1631
L
9158 { Bad_Opcode },
9159 { Bad_Opcode },
9160 { Bad_Opcode },
9161 { Bad_Opcode },
c0f3af97 9162 /* 68 */
592a252b
L
9163 { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
9164 { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
9165 { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
9166 { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
9167 { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
9168 { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
9169 { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
9170 { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
c0f3af97 9171 /* 70 */
592d1631
L
9172 { Bad_Opcode },
9173 { Bad_Opcode },
9174 { Bad_Opcode },
9175 { Bad_Opcode },
9176 { Bad_Opcode },
9177 { Bad_Opcode },
9178 { Bad_Opcode },
9179 { Bad_Opcode },
c0f3af97 9180 /* 78 */
592a252b
L
9181 { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
9182 { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
9183 { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
9184 { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
9185 { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
9186 { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
9187 { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
9188 { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
c0f3af97 9189 /* 80 */
592d1631
L
9190 { Bad_Opcode },
9191 { Bad_Opcode },
9192 { Bad_Opcode },
9193 { Bad_Opcode },
9194 { Bad_Opcode },
9195 { Bad_Opcode },
9196 { Bad_Opcode },
9197 { Bad_Opcode },
c0f3af97 9198 /* 88 */
592d1631
L
9199 { Bad_Opcode },
9200 { Bad_Opcode },
9201 { Bad_Opcode },
9202 { Bad_Opcode },
9203 { Bad_Opcode },
9204 { Bad_Opcode },
9205 { Bad_Opcode },
9206 { Bad_Opcode },
c0f3af97 9207 /* 90 */
592d1631
L
9208 { Bad_Opcode },
9209 { Bad_Opcode },
9210 { Bad_Opcode },
9211 { Bad_Opcode },
9212 { Bad_Opcode },
9213 { Bad_Opcode },
9214 { Bad_Opcode },
9215 { Bad_Opcode },
c0f3af97 9216 /* 98 */
592d1631
L
9217 { Bad_Opcode },
9218 { Bad_Opcode },
9219 { Bad_Opcode },
9220 { Bad_Opcode },
9221 { Bad_Opcode },
9222 { Bad_Opcode },
9223 { Bad_Opcode },
9224 { Bad_Opcode },
c0f3af97 9225 /* a0 */
592d1631
L
9226 { Bad_Opcode },
9227 { Bad_Opcode },
9228 { Bad_Opcode },
9229 { Bad_Opcode },
9230 { Bad_Opcode },
9231 { Bad_Opcode },
9232 { Bad_Opcode },
9233 { Bad_Opcode },
c0f3af97 9234 /* a8 */
592d1631
L
9235 { Bad_Opcode },
9236 { Bad_Opcode },
9237 { Bad_Opcode },
9238 { Bad_Opcode },
9239 { Bad_Opcode },
9240 { Bad_Opcode },
9241 { Bad_Opcode },
9242 { Bad_Opcode },
c0f3af97 9243 /* b0 */
592d1631
L
9244 { Bad_Opcode },
9245 { Bad_Opcode },
9246 { Bad_Opcode },
9247 { Bad_Opcode },
9248 { Bad_Opcode },
9249 { Bad_Opcode },
9250 { Bad_Opcode },
9251 { Bad_Opcode },
c0f3af97 9252 /* b8 */
592d1631
L
9253 { Bad_Opcode },
9254 { Bad_Opcode },
9255 { Bad_Opcode },
9256 { Bad_Opcode },
9257 { Bad_Opcode },
9258 { Bad_Opcode },
9259 { Bad_Opcode },
9260 { Bad_Opcode },
c0f3af97 9261 /* c0 */
592d1631
L
9262 { Bad_Opcode },
9263 { Bad_Opcode },
9264 { Bad_Opcode },
9265 { Bad_Opcode },
9266 { Bad_Opcode },
9267 { Bad_Opcode },
9268 { Bad_Opcode },
9269 { Bad_Opcode },
c0f3af97 9270 /* c8 */
592d1631
L
9271 { Bad_Opcode },
9272 { Bad_Opcode },
9273 { Bad_Opcode },
9274 { Bad_Opcode },
9275 { Bad_Opcode },
9276 { Bad_Opcode },
48521003
IT
9277 { PREFIX_TABLE(PREFIX_VEX_0F3ACE) },
9278 { PREFIX_TABLE(PREFIX_VEX_0F3ACF) },
c0f3af97 9279 /* d0 */
592d1631
L
9280 { Bad_Opcode },
9281 { Bad_Opcode },
9282 { Bad_Opcode },
9283 { Bad_Opcode },
9284 { Bad_Opcode },
9285 { Bad_Opcode },
9286 { Bad_Opcode },
9287 { Bad_Opcode },
c0f3af97 9288 /* d8 */
592d1631
L
9289 { Bad_Opcode },
9290 { Bad_Opcode },
9291 { Bad_Opcode },
9292 { Bad_Opcode },
9293 { Bad_Opcode },
9294 { Bad_Opcode },
9295 { Bad_Opcode },
592a252b 9296 { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
c0f3af97 9297 /* e0 */
592d1631
L
9298 { Bad_Opcode },
9299 { Bad_Opcode },
9300 { Bad_Opcode },
9301 { Bad_Opcode },
9302 { Bad_Opcode },
9303 { Bad_Opcode },
9304 { Bad_Opcode },
9305 { Bad_Opcode },
c0f3af97 9306 /* e8 */
592d1631
L
9307 { Bad_Opcode },
9308 { Bad_Opcode },
9309 { Bad_Opcode },
9310 { Bad_Opcode },
9311 { Bad_Opcode },
9312 { Bad_Opcode },
9313 { Bad_Opcode },
9314 { Bad_Opcode },
c0f3af97 9315 /* f0 */
6c30d220 9316 { PREFIX_TABLE (PREFIX_VEX_0F3AF0) },
592d1631
L
9317 { Bad_Opcode },
9318 { Bad_Opcode },
9319 { Bad_Opcode },
9320 { Bad_Opcode },
9321 { Bad_Opcode },
9322 { Bad_Opcode },
9323 { Bad_Opcode },
c0f3af97 9324 /* f8 */
592d1631
L
9325 { Bad_Opcode },
9326 { Bad_Opcode },
9327 { Bad_Opcode },
9328 { Bad_Opcode },
9329 { Bad_Opcode },
9330 { Bad_Opcode },
9331 { Bad_Opcode },
9332 { Bad_Opcode },
c0f3af97
L
9333 },
9334};
9335
43234a1e 9336#include "i386-dis-evex.h"
ad692897 9337
c0f3af97 9338static const struct dis386 vex_len_table[][2] = {
18897deb 9339 /* VEX_LEN_0F12_P_0_M_0 / VEX_LEN_0F12_P_2_M_0 */
c0f3af97 9340 {
89e65d17 9341 { "vmovlpX", { XM, Vex, EXq }, 0 },
c0f3af97
L
9342 },
9343
592a252b 9344 /* VEX_LEN_0F12_P_0_M_1 */
c0f3af97 9345 {
89e65d17 9346 { "vmovhlps", { XM, Vex, EXq }, 0 },
c0f3af97
L
9347 },
9348
592a252b 9349 /* VEX_LEN_0F13_M_0 */
c0f3af97 9350 {
bf926894 9351 { "vmovlpX", { EXq, XM }, PREFIX_OPCODE },
c0f3af97
L
9352 },
9353
18897deb 9354 /* VEX_LEN_0F16_P_0_M_0 / VEX_LEN_0F16_P_2_M_0 */
c0f3af97 9355 {
89e65d17 9356 { "vmovhpX", { XM, Vex, EXq }, 0 },
c0f3af97
L
9357 },
9358
592a252b 9359 /* VEX_LEN_0F16_P_0_M_1 */
c0f3af97 9360 {
89e65d17 9361 { "vmovlhps", { XM, Vex, EXq }, 0 },
c0f3af97
L
9362 },
9363
592a252b 9364 /* VEX_LEN_0F17_M_0 */
c0f3af97 9365 {
bf926894 9366 { "vmovhpX", { EXq, XM }, PREFIX_OPCODE },
c0f3af97
L
9367 },
9368
43234a1e
L
9369 /* VEX_LEN_0F41_P_0 */
9370 {
9371 { Bad_Opcode },
9372 { VEX_W_TABLE (VEX_W_0F41_P_0_LEN_1) },
9373 },
1ba585e8
IT
9374 /* VEX_LEN_0F41_P_2 */
9375 {
9376 { Bad_Opcode },
9377 { VEX_W_TABLE (VEX_W_0F41_P_2_LEN_1) },
9378 },
43234a1e
L
9379 /* VEX_LEN_0F42_P_0 */
9380 {
9381 { Bad_Opcode },
9382 { VEX_W_TABLE (VEX_W_0F42_P_0_LEN_1) },
9383 },
1ba585e8
IT
9384 /* VEX_LEN_0F42_P_2 */
9385 {
9386 { Bad_Opcode },
9387 { VEX_W_TABLE (VEX_W_0F42_P_2_LEN_1) },
9388 },
43234a1e
L
9389 /* VEX_LEN_0F44_P_0 */
9390 {
9391 { VEX_W_TABLE (VEX_W_0F44_P_0_LEN_0) },
9392 },
1ba585e8
IT
9393 /* VEX_LEN_0F44_P_2 */
9394 {
9395 { VEX_W_TABLE (VEX_W_0F44_P_2_LEN_0) },
9396 },
43234a1e
L
9397 /* VEX_LEN_0F45_P_0 */
9398 {
9399 { Bad_Opcode },
9400 { VEX_W_TABLE (VEX_W_0F45_P_0_LEN_1) },
9401 },
1ba585e8
IT
9402 /* VEX_LEN_0F45_P_2 */
9403 {
9404 { Bad_Opcode },
9405 { VEX_W_TABLE (VEX_W_0F45_P_2_LEN_1) },
9406 },
43234a1e
L
9407 /* VEX_LEN_0F46_P_0 */
9408 {
9409 { Bad_Opcode },
9410 { VEX_W_TABLE (VEX_W_0F46_P_0_LEN_1) },
9411 },
1ba585e8
IT
9412 /* VEX_LEN_0F46_P_2 */
9413 {
9414 { Bad_Opcode },
9415 { VEX_W_TABLE (VEX_W_0F46_P_2_LEN_1) },
9416 },
43234a1e
L
9417 /* VEX_LEN_0F47_P_0 */
9418 {
9419 { Bad_Opcode },
9420 { VEX_W_TABLE (VEX_W_0F47_P_0_LEN_1) },
9421 },
1ba585e8
IT
9422 /* VEX_LEN_0F47_P_2 */
9423 {
9424 { Bad_Opcode },
9425 { VEX_W_TABLE (VEX_W_0F47_P_2_LEN_1) },
9426 },
9427 /* VEX_LEN_0F4A_P_0 */
9428 {
9429 { Bad_Opcode },
9430 { VEX_W_TABLE (VEX_W_0F4A_P_0_LEN_1) },
9431 },
9432 /* VEX_LEN_0F4A_P_2 */
9433 {
9434 { Bad_Opcode },
9435 { VEX_W_TABLE (VEX_W_0F4A_P_2_LEN_1) },
9436 },
9437 /* VEX_LEN_0F4B_P_0 */
9438 {
9439 { Bad_Opcode },
9440 { VEX_W_TABLE (VEX_W_0F4B_P_0_LEN_1) },
9441 },
43234a1e
L
9442 /* VEX_LEN_0F4B_P_2 */
9443 {
9444 { Bad_Opcode },
9445 { VEX_W_TABLE (VEX_W_0F4B_P_2_LEN_1) },
9446 },
9447
ec6f095a 9448 /* VEX_LEN_0F6E_P_2 */
c0f3af97 9449 {
ec6f095a 9450 { "vmovK", { XMScalar, Edq }, 0 },
c0f3af97
L
9451 },
9452
ec6f095a 9453 /* VEX_LEN_0F77_P_1 */
c0f3af97 9454 {
ec6f095a
L
9455 { "vzeroupper", { XX }, 0 },
9456 { "vzeroall", { XX }, 0 },
c0f3af97
L
9457 },
9458
ec6f095a 9459 /* VEX_LEN_0F7E_P_1 */
c0f3af97 9460 {
5b872f7d 9461 { "vmovq", { XMScalar, EXxmm_mq }, 0 },
c0f3af97
L
9462 },
9463
ec6f095a 9464 /* VEX_LEN_0F7E_P_2 */
c0f3af97 9465 {
ec6f095a 9466 { "vmovK", { Edq, XMScalar }, 0 },
c0f3af97
L
9467 },
9468
ec6f095a 9469 /* VEX_LEN_0F90_P_0 */
c0f3af97 9470 {
ec6f095a 9471 { VEX_W_TABLE (VEX_W_0F90_P_0_LEN_0) },
c0f3af97
L
9472 },
9473
ec6f095a 9474 /* VEX_LEN_0F90_P_2 */
c0f3af97 9475 {
ec6f095a 9476 { VEX_W_TABLE (VEX_W_0F90_P_2_LEN_0) },
c0f3af97
L
9477 },
9478
ec6f095a 9479 /* VEX_LEN_0F91_P_0 */
c0f3af97 9480 {
ec6f095a 9481 { VEX_W_TABLE (VEX_W_0F91_P_0_LEN_0) },
c0f3af97
L
9482 },
9483
ec6f095a 9484 /* VEX_LEN_0F91_P_2 */
c0f3af97 9485 {
ec6f095a 9486 { VEX_W_TABLE (VEX_W_0F91_P_2_LEN_0) },
c0f3af97
L
9487 },
9488
ec6f095a 9489 /* VEX_LEN_0F92_P_0 */
c0f3af97 9490 {
ec6f095a 9491 { VEX_W_TABLE (VEX_W_0F92_P_0_LEN_0) },
c0f3af97
L
9492 },
9493
ec6f095a 9494 /* VEX_LEN_0F92_P_2 */
c0f3af97 9495 {
ec6f095a 9496 { VEX_W_TABLE (VEX_W_0F92_P_2_LEN_0) },
c0f3af97
L
9497 },
9498
ec6f095a 9499 /* VEX_LEN_0F92_P_3 */
c0f3af97 9500 {
58a211d2 9501 { MOD_TABLE (MOD_VEX_0F92_P_3_LEN_0) },
c0f3af97
L
9502 },
9503
ec6f095a 9504 /* VEX_LEN_0F93_P_0 */
c0f3af97 9505 {
ec6f095a 9506 { VEX_W_TABLE (VEX_W_0F93_P_0_LEN_0) },
c0f3af97
L
9507 },
9508
ec6f095a 9509 /* VEX_LEN_0F93_P_2 */
c0f3af97 9510 {
ec6f095a 9511 { VEX_W_TABLE (VEX_W_0F93_P_2_LEN_0) },
c0f3af97
L
9512 },
9513
ec6f095a 9514 /* VEX_LEN_0F93_P_3 */
c0f3af97 9515 {
58a211d2 9516 { MOD_TABLE (MOD_VEX_0F93_P_3_LEN_0) },
c0f3af97
L
9517 },
9518
ec6f095a 9519 /* VEX_LEN_0F98_P_0 */
43234a1e
L
9520 {
9521 { VEX_W_TABLE (VEX_W_0F98_P_0_LEN_0) },
9522 },
9523
1ba585e8
IT
9524 /* VEX_LEN_0F98_P_2 */
9525 {
9526 { VEX_W_TABLE (VEX_W_0F98_P_2_LEN_0) },
9527 },
9528
9529 /* VEX_LEN_0F99_P_0 */
9530 {
9531 { VEX_W_TABLE (VEX_W_0F99_P_0_LEN_0) },
9532 },
9533
9534 /* VEX_LEN_0F99_P_2 */
9535 {
9536 { VEX_W_TABLE (VEX_W_0F99_P_2_LEN_0) },
9537 },
9538
6c30d220 9539 /* VEX_LEN_0FAE_R_2_M_0 */
c0f3af97 9540 {
ec6f095a 9541 { "vldmxcsr", { Md }, 0 },
c0f3af97
L
9542 },
9543
6c30d220 9544 /* VEX_LEN_0FAE_R_3_M_0 */
c0f3af97 9545 {
ec6f095a 9546 { "vstmxcsr", { Md }, 0 },
c0f3af97
L
9547 },
9548
6c30d220 9549 /* VEX_LEN_0FC4_P_2 */
c0f3af97 9550 {
89e65d17 9551 { "vpinsrw", { XM, Vex, Edqw, Ib }, 0 },
c0f3af97
L
9552 },
9553
6c30d220 9554 /* VEX_LEN_0FC5_P_2 */
c0f3af97 9555 {
b50c9f31 9556 { "vpextrw", { Gdq, XS, Ib }, 0 },
c0f3af97
L
9557 },
9558
6c30d220 9559 /* VEX_LEN_0FD6_P_2 */
c0f3af97 9560 {
39e0f456 9561 { "vmovq", { EXqVexScalarS, XMScalar }, 0 },
c0f3af97
L
9562 },
9563
6c30d220 9564 /* VEX_LEN_0FF7_P_2 */
c0f3af97 9565 {
ec6f095a 9566 { "vmaskmovdqu", { XM, XS }, 0 },
c0f3af97
L
9567 },
9568
6c30d220 9569 /* VEX_LEN_0F3816_P_2 */
c0f3af97 9570 {
6c30d220
L
9571 { Bad_Opcode },
9572 { VEX_W_TABLE (VEX_W_0F3816_P_2) },
c0f3af97
L
9573 },
9574
6c30d220 9575 /* VEX_LEN_0F3819_P_2 */
c0f3af97 9576 {
6c30d220
L
9577 { Bad_Opcode },
9578 { VEX_W_TABLE (VEX_W_0F3819_P_2) },
c0f3af97
L
9579 },
9580
6c30d220 9581 /* VEX_LEN_0F381A_P_2_M_0 */
c0f3af97 9582 {
6c30d220 9583 { Bad_Opcode },
89e65d17 9584 { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0_L_0) },
c0f3af97
L
9585 },
9586
6c30d220 9587 /* VEX_LEN_0F3836_P_2 */
c0f3af97 9588 {
6c30d220
L
9589 { Bad_Opcode },
9590 { VEX_W_TABLE (VEX_W_0F3836_P_2) },
c0f3af97
L
9591 },
9592
592a252b 9593 /* VEX_LEN_0F3841_P_2 */
c0f3af97 9594 {
ec6f095a 9595 { "vphminposuw", { XM, EXx }, 0 },
c0f3af97
L
9596 },
9597
260cd341
LC
9598 /* VEX_LEN_0F3849_X86_64_P_0_W_0_M_0 */
9599 {
9600 { "ldtilecfg", { M }, 0 },
9601 },
9602
9603 /* VEX_LEN_0F3849_X86_64_P_0_W_0_M_1_REG_0_RM_0 */
9604 {
9605 { "tilerelease", { Skip_MODRM }, 0 },
9606 },
9607
9608 /* VEX_LEN_0F3849_X86_64_P_2_W_0_M_0 */
9609 {
9610 { "sttilecfg", { M }, 0 },
9611 },
9612
9613 /* VEX_LEN_0F3849_X86_64_P_3_W_0_M_0 */
9614 {
9615 { "tilezero", { TMM, Skip_MODRM }, 0 },
9616 },
9617
9618 /* VEX_LEN_0F384B_X86_64_P_1_W_0_M_0 */
9619 {
9620 { "tilestored", { MVexSIBMEM, TMM }, 0 },
9621 },
9622 /* VEX_LEN_0F384B_X86_64_P_2_W_0_M_0 */
9623 {
9624 { "tileloaddt1", { TMM, MVexSIBMEM }, 0 },
9625 },
9626
9627 /* VEX_LEN_0F384B_X86_64_P_3_W_0_M_0 */
9628 {
9629 { "tileloadd", { TMM, MVexSIBMEM }, 0 },
9630 },
9631
6c30d220
L
9632 /* VEX_LEN_0F385A_P_2_M_0 */
9633 {
9634 { Bad_Opcode },
89e65d17 9635 { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0_L_0) },
6c30d220
L
9636 },
9637
260cd341
LC
9638 /* VEX_LEN_0F385C_X86_64_P_1_W_0_M_0 */
9639 {
9640 { "tdpbf16ps", { TMM, EXtmm, VexTmm }, 0 },
9641 },
9642
9643 /* VEX_LEN_0F385E_X86_64_P_0_W_0_M_0 */
9644 {
9645 { "tdpbuud", {TMM, EXtmm, VexTmm }, 0 },
9646 },
9647
9648 /* VEX_LEN_0F385E_X86_64_P_1_W_0_M_0 */
9649 {
9650 { "tdpbsud", {TMM, EXtmm, VexTmm }, 0 },
9651 },
9652
9653 /* VEX_LEN_0F385E_X86_64_P_2_W_0_M_0 */
9654 {
9655 { "tdpbusd", {TMM, EXtmm, VexTmm }, 0 },
9656 },
9657
9658 /* VEX_LEN_0F385E_X86_64_P_3_W_0_M_0 */
9659 {
9660 { "tdpbssd", {TMM, EXtmm, VexTmm }, 0 },
9661 },
9662
592a252b 9663 /* VEX_LEN_0F38DB_P_2 */
a5ff0eb2 9664 {
ec6f095a 9665 { "vaesimc", { XM, EXx }, 0 },
a5ff0eb2
L
9666 },
9667
f12dc422
L
9668 /* VEX_LEN_0F38F2_P_0 */
9669 {
bf890a93 9670 { "andnS", { Gdq, VexGdq, Edq }, 0 },
f12dc422
L
9671 },
9672
9673 /* VEX_LEN_0F38F3_R_1_P_0 */
9674 {
bf890a93 9675 { "blsrS", { VexGdq, Edq }, 0 },
f12dc422
L
9676 },
9677
9678 /* VEX_LEN_0F38F3_R_2_P_0 */
9679 {
bf890a93 9680 { "blsmskS", { VexGdq, Edq }, 0 },
f12dc422
L
9681 },
9682
9683 /* VEX_LEN_0F38F3_R_3_P_0 */
9684 {
bf890a93 9685 { "blsiS", { VexGdq, Edq }, 0 },
f12dc422
L
9686 },
9687
6c30d220
L
9688 /* VEX_LEN_0F38F5_P_0 */
9689 {
bf890a93 9690 { "bzhiS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9691 },
9692
9693 /* VEX_LEN_0F38F5_P_1 */
9694 {
bf890a93 9695 { "pextS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9696 },
9697
9698 /* VEX_LEN_0F38F5_P_3 */
9699 {
bf890a93 9700 { "pdepS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9701 },
9702
9703 /* VEX_LEN_0F38F6_P_3 */
9704 {
bf890a93 9705 { "mulxS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9706 },
9707
f12dc422
L
9708 /* VEX_LEN_0F38F7_P_0 */
9709 {
bf890a93 9710 { "bextrS", { Gdq, Edq, VexGdq }, 0 },
f12dc422
L
9711 },
9712
6c30d220
L
9713 /* VEX_LEN_0F38F7_P_1 */
9714 {
bf890a93 9715 { "sarxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9716 },
9717
9718 /* VEX_LEN_0F38F7_P_2 */
9719 {
bf890a93 9720 { "shlxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9721 },
9722
9723 /* VEX_LEN_0F38F7_P_3 */
9724 {
bf890a93 9725 { "shrxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9726 },
9727
9728 /* VEX_LEN_0F3A00_P_2 */
9729 {
9730 { Bad_Opcode },
9731 { VEX_W_TABLE (VEX_W_0F3A00_P_2) },
9732 },
9733
9734 /* VEX_LEN_0F3A01_P_2 */
9735 {
9736 { Bad_Opcode },
9737 { VEX_W_TABLE (VEX_W_0F3A01_P_2) },
9738 },
9739
592a252b 9740 /* VEX_LEN_0F3A06_P_2 */
c0f3af97 9741 {
592d1631 9742 { Bad_Opcode },
89e65d17 9743 { VEX_W_TABLE (VEX_W_0F3A06_P_2_L_0) },
c0f3af97
L
9744 },
9745
592a252b 9746 /* VEX_LEN_0F3A14_P_2 */
c0f3af97 9747 {
b50c9f31 9748 { "vpextrb", { Edqb, XM, Ib }, 0 },
c0f3af97
L
9749 },
9750
592a252b 9751 /* VEX_LEN_0F3A15_P_2 */
c0f3af97 9752 {
b50c9f31 9753 { "vpextrw", { Edqw, XM, Ib }, 0 },
c0f3af97
L
9754 },
9755
592a252b 9756 /* VEX_LEN_0F3A16_P_2 */
c0f3af97 9757 {
bf890a93 9758 { "vpextrK", { Edq, XM, Ib }, 0 },
c0f3af97
L
9759 },
9760
592a252b 9761 /* VEX_LEN_0F3A17_P_2 */
c0f3af97 9762 {
bf890a93 9763 { "vextractps", { Edqd, XM, Ib }, 0 },
c0f3af97
L
9764 },
9765
592a252b 9766 /* VEX_LEN_0F3A18_P_2 */
c0f3af97 9767 {
592d1631 9768 { Bad_Opcode },
89e65d17 9769 { VEX_W_TABLE (VEX_W_0F3A18_P_2_L_0) },
c0f3af97
L
9770 },
9771
592a252b 9772 /* VEX_LEN_0F3A19_P_2 */
c0f3af97 9773 {
592d1631 9774 { Bad_Opcode },
89e65d17 9775 { VEX_W_TABLE (VEX_W_0F3A19_P_2_L_0) },
c0f3af97
L
9776 },
9777
592a252b 9778 /* VEX_LEN_0F3A20_P_2 */
c0f3af97 9779 {
89e65d17 9780 { "vpinsrb", { XM, Vex, Edqb, Ib }, 0 },
c0f3af97
L
9781 },
9782
592a252b 9783 /* VEX_LEN_0F3A21_P_2 */
c0f3af97 9784 {
89e65d17 9785 { "vinsertps", { XM, Vex, EXd, Ib }, 0 },
c0f3af97
L
9786 },
9787
592a252b 9788 /* VEX_LEN_0F3A22_P_2 */
c0f3af97 9789 {
89e65d17 9790 { "vpinsrK", { XM, Vex, Edq, Ib }, 0 },
c0f3af97
L
9791 },
9792
43234a1e
L
9793 /* VEX_LEN_0F3A30_P_2 */
9794 {
9795 { VEX_W_TABLE (VEX_W_0F3A30_P_2_LEN_0) },
9796 },
9797
1ba585e8
IT
9798 /* VEX_LEN_0F3A31_P_2 */
9799 {
9800 { VEX_W_TABLE (VEX_W_0F3A31_P_2_LEN_0) },
9801 },
9802
43234a1e
L
9803 /* VEX_LEN_0F3A32_P_2 */
9804 {
9805 { VEX_W_TABLE (VEX_W_0F3A32_P_2_LEN_0) },
9806 },
9807
1ba585e8
IT
9808 /* VEX_LEN_0F3A33_P_2 */
9809 {
9810 { VEX_W_TABLE (VEX_W_0F3A33_P_2_LEN_0) },
9811 },
9812
6c30d220 9813 /* VEX_LEN_0F3A38_P_2 */
c0f3af97 9814 {
6c30d220 9815 { Bad_Opcode },
89e65d17 9816 { VEX_W_TABLE (VEX_W_0F3A38_P_2_L_0) },
c0f3af97
L
9817 },
9818
6c30d220 9819 /* VEX_LEN_0F3A39_P_2 */
c0f3af97 9820 {
6c30d220 9821 { Bad_Opcode },
89e65d17 9822 { VEX_W_TABLE (VEX_W_0F3A39_P_2_L_0) },
6c30d220
L
9823 },
9824
9825 /* VEX_LEN_0F3A41_P_2 */
9826 {
89e65d17 9827 { "vdppd", { XM, Vex, EXx, Ib }, 0 },
c0f3af97
L
9828 },
9829
6c30d220 9830 /* VEX_LEN_0F3A46_P_2 */
c0f3af97 9831 {
6c30d220 9832 { Bad_Opcode },
89e65d17 9833 { VEX_W_TABLE (VEX_W_0F3A46_P_2_L_0) },
c0f3af97
L
9834 },
9835
592a252b 9836 /* VEX_LEN_0F3A60_P_2 */
c0f3af97 9837 {
b24d668c 9838 { "vpcmpestrm!%LQ", { XM, EXx, Ib }, 0 },
c0f3af97
L
9839 },
9840
592a252b 9841 /* VEX_LEN_0F3A61_P_2 */
c0f3af97 9842 {
b24d668c 9843 { "vpcmpestri!%LQ", { XM, EXx, Ib }, 0 },
c0f3af97
L
9844 },
9845
592a252b 9846 /* VEX_LEN_0F3A62_P_2 */
c0f3af97 9847 {
ec6f095a 9848 { "vpcmpistrm", { XM, EXx, Ib }, 0 },
c0f3af97
L
9849 },
9850
592a252b 9851 /* VEX_LEN_0F3A63_P_2 */
c0f3af97 9852 {
ec6f095a 9853 { "vpcmpistri", { XM, EXx, Ib }, 0 },
c0f3af97
L
9854 },
9855
592a252b 9856 /* VEX_LEN_0F3ADF_P_2 */
a5ff0eb2 9857 {
ec6f095a 9858 { "vaeskeygenassist", { XM, EXx, Ib }, 0 },
a5ff0eb2 9859 },
4c807e72 9860
6c30d220
L
9861 /* VEX_LEN_0F3AF0_P_3 */
9862 {
bf890a93 9863 { "rorxS", { Gdq, Edq, Ib }, 0 },
6c30d220
L
9864 },
9865
467bbef0
JB
9866 /* VEX_LEN_0FXOP_08_85 */
9867 {
9868 { VEX_W_TABLE (VEX_W_0FXOP_08_85_L_0) },
9869 },
9870
9871 /* VEX_LEN_0FXOP_08_86 */
9872 {
9873 { VEX_W_TABLE (VEX_W_0FXOP_08_86_L_0) },
9874 },
9875
9876 /* VEX_LEN_0FXOP_08_87 */
9877 {
9878 { VEX_W_TABLE (VEX_W_0FXOP_08_87_L_0) },
9879 },
9880
9881 /* VEX_LEN_0FXOP_08_8E */
9882 {
9883 { VEX_W_TABLE (VEX_W_0FXOP_08_8E_L_0) },
9884 },
9885
9886 /* VEX_LEN_0FXOP_08_8F */
9887 {
9888 { VEX_W_TABLE (VEX_W_0FXOP_08_8F_L_0) },
9889 },
9890
9891 /* VEX_LEN_0FXOP_08_95 */
9892 {
9893 { VEX_W_TABLE (VEX_W_0FXOP_08_95_L_0) },
9894 },
9895
9896 /* VEX_LEN_0FXOP_08_96 */
9897 {
9898 { VEX_W_TABLE (VEX_W_0FXOP_08_96_L_0) },
9899 },
9900
9901 /* VEX_LEN_0FXOP_08_97 */
9902 {
9903 { VEX_W_TABLE (VEX_W_0FXOP_08_97_L_0) },
9904 },
9905
9906 /* VEX_LEN_0FXOP_08_9E */
9907 {
9908 { VEX_W_TABLE (VEX_W_0FXOP_08_9E_L_0) },
9909 },
9910
9911 /* VEX_LEN_0FXOP_08_9F */
9912 {
9913 { VEX_W_TABLE (VEX_W_0FXOP_08_9F_L_0) },
9914 },
9915
9916 /* VEX_LEN_0FXOP_08_A3 */
9917 {
9918 { "vpperm", { XM, Vex, EXx, XMVexI4 }, 0 },
9919 },
9920
9921 /* VEX_LEN_0FXOP_08_A6 */
9922 {
9923 { VEX_W_TABLE (VEX_W_0FXOP_08_A6_L_0) },
9924 },
9925
9926 /* VEX_LEN_0FXOP_08_B6 */
9927 {
9928 { VEX_W_TABLE (VEX_W_0FXOP_08_B6_L_0) },
9929 },
9930
9931 /* VEX_LEN_0FXOP_08_C0 */
9932 {
9933 { VEX_W_TABLE (VEX_W_0FXOP_08_C0_L_0) },
9934 },
9935
9936 /* VEX_LEN_0FXOP_08_C1 */
9937 {
9938 { VEX_W_TABLE (VEX_W_0FXOP_08_C1_L_0) },
9939 },
9940
9941 /* VEX_LEN_0FXOP_08_C2 */
9942 {
9943 { VEX_W_TABLE (VEX_W_0FXOP_08_C2_L_0) },
9944 },
9945
9946 /* VEX_LEN_0FXOP_08_C3 */
9947 {
9948 { VEX_W_TABLE (VEX_W_0FXOP_08_C3_L_0) },
9949 },
9950
ff688e1f
L
9951 /* VEX_LEN_0FXOP_08_CC */
9952 {
467bbef0 9953 { VEX_W_TABLE (VEX_W_0FXOP_08_CC_L_0) },
ff688e1f
L
9954 },
9955
9956 /* VEX_LEN_0FXOP_08_CD */
9957 {
467bbef0 9958 { VEX_W_TABLE (VEX_W_0FXOP_08_CD_L_0) },
ff688e1f
L
9959 },
9960
9961 /* VEX_LEN_0FXOP_08_CE */
9962 {
467bbef0 9963 { VEX_W_TABLE (VEX_W_0FXOP_08_CE_L_0) },
ff688e1f
L
9964 },
9965
9966 /* VEX_LEN_0FXOP_08_CF */
9967 {
467bbef0 9968 { VEX_W_TABLE (VEX_W_0FXOP_08_CF_L_0) },
ff688e1f
L
9969 },
9970
9971 /* VEX_LEN_0FXOP_08_EC */
9972 {
467bbef0 9973 { VEX_W_TABLE (VEX_W_0FXOP_08_EC_L_0) },
ff688e1f
L
9974 },
9975
9976 /* VEX_LEN_0FXOP_08_ED */
9977 {
467bbef0 9978 { VEX_W_TABLE (VEX_W_0FXOP_08_ED_L_0) },
ff688e1f
L
9979 },
9980
9981 /* VEX_LEN_0FXOP_08_EE */
9982 {
467bbef0 9983 { VEX_W_TABLE (VEX_W_0FXOP_08_EE_L_0) },
ff688e1f
L
9984 },
9985
9986 /* VEX_LEN_0FXOP_08_EF */
9987 {
467bbef0
JB
9988 { VEX_W_TABLE (VEX_W_0FXOP_08_EF_L_0) },
9989 },
9990
9991 /* VEX_LEN_0FXOP_09_01 */
9992 {
9993 { REG_TABLE (REG_0FXOP_09_01_L_0) },
9994 },
9995
9996 /* VEX_LEN_0FXOP_09_02 */
9997 {
9998 { REG_TABLE (REG_0FXOP_09_02_L_0) },
9999 },
10000
10001 /* VEX_LEN_0FXOP_09_12_M_1 */
10002 {
10003 { REG_TABLE (REG_0FXOP_09_12_M_1_L_0) },
ff688e1f
L
10004 },
10005
b5b098c2 10006 /* VEX_LEN_0FXOP_09_82_W_0 */
5dd85c99 10007 {
b5b098c2 10008 { "vfrczss", { XM, EXd }, 0 },
5dd85c99 10009 },
4c807e72 10010
b5b098c2 10011 /* VEX_LEN_0FXOP_09_83_W_0 */
5dd85c99 10012 {
b5b098c2 10013 { "vfrczsd", { XM, EXq }, 0 },
5dd85c99 10014 },
467bbef0
JB
10015
10016 /* VEX_LEN_0FXOP_09_90 */
10017 {
10018 { "vprotb", { XM, EXx, VexW }, 0 },
10019 },
10020
10021 /* VEX_LEN_0FXOP_09_91 */
10022 {
10023 { "vprotw", { XM, EXx, VexW }, 0 },
10024 },
10025
10026 /* VEX_LEN_0FXOP_09_92 */
10027 {
10028 { "vprotd", { XM, EXx, VexW }, 0 },
10029 },
10030
10031 /* VEX_LEN_0FXOP_09_93 */
10032 {
10033 { "vprotq", { XM, EXx, VexW }, 0 },
10034 },
10035
10036 /* VEX_LEN_0FXOP_09_94 */
10037 {
10038 { "vpshlb", { XM, EXx, VexW }, 0 },
10039 },
10040
10041 /* VEX_LEN_0FXOP_09_95 */
10042 {
10043 { "vpshlw", { XM, EXx, VexW }, 0 },
10044 },
10045
10046 /* VEX_LEN_0FXOP_09_96 */
10047 {
10048 { "vpshld", { XM, EXx, VexW }, 0 },
10049 },
10050
10051 /* VEX_LEN_0FXOP_09_97 */
10052 {
10053 { "vpshlq", { XM, EXx, VexW }, 0 },
10054 },
10055
10056 /* VEX_LEN_0FXOP_09_98 */
10057 {
10058 { "vpshab", { XM, EXx, VexW }, 0 },
10059 },
10060
10061 /* VEX_LEN_0FXOP_09_99 */
10062 {
10063 { "vpshaw", { XM, EXx, VexW }, 0 },
10064 },
10065
10066 /* VEX_LEN_0FXOP_09_9A */
10067 {
10068 { "vpshad", { XM, EXx, VexW }, 0 },
10069 },
10070
10071 /* VEX_LEN_0FXOP_09_9B */
10072 {
10073 { "vpshaq", { XM, EXx, VexW }, 0 },
10074 },
10075
10076 /* VEX_LEN_0FXOP_09_C1 */
10077 {
10078 { VEX_W_TABLE (VEX_W_0FXOP_09_C1_L_0) },
10079 },
10080
10081 /* VEX_LEN_0FXOP_09_C2 */
10082 {
10083 { VEX_W_TABLE (VEX_W_0FXOP_09_C2_L_0) },
10084 },
10085
10086 /* VEX_LEN_0FXOP_09_C3 */
10087 {
10088 { VEX_W_TABLE (VEX_W_0FXOP_09_C3_L_0) },
10089 },
10090
10091 /* VEX_LEN_0FXOP_09_C6 */
10092 {
10093 { VEX_W_TABLE (VEX_W_0FXOP_09_C6_L_0) },
10094 },
10095
10096 /* VEX_LEN_0FXOP_09_C7 */
10097 {
10098 { VEX_W_TABLE (VEX_W_0FXOP_09_C7_L_0) },
10099 },
10100
10101 /* VEX_LEN_0FXOP_09_CB */
10102 {
10103 { VEX_W_TABLE (VEX_W_0FXOP_09_CB_L_0) },
10104 },
10105
10106 /* VEX_LEN_0FXOP_09_D1 */
10107 {
10108 { VEX_W_TABLE (VEX_W_0FXOP_09_D1_L_0) },
10109 },
10110
10111 /* VEX_LEN_0FXOP_09_D2 */
10112 {
10113 { VEX_W_TABLE (VEX_W_0FXOP_09_D2_L_0) },
10114 },
10115
10116 /* VEX_LEN_0FXOP_09_D3 */
10117 {
10118 { VEX_W_TABLE (VEX_W_0FXOP_09_D3_L_0) },
10119 },
10120
10121 /* VEX_LEN_0FXOP_09_D6 */
10122 {
10123 { VEX_W_TABLE (VEX_W_0FXOP_09_D6_L_0) },
10124 },
10125
10126 /* VEX_LEN_0FXOP_09_D7 */
10127 {
10128 { VEX_W_TABLE (VEX_W_0FXOP_09_D7_L_0) },
10129 },
10130
10131 /* VEX_LEN_0FXOP_09_DB */
10132 {
10133 { VEX_W_TABLE (VEX_W_0FXOP_09_DB_L_0) },
10134 },
10135
10136 /* VEX_LEN_0FXOP_09_E1 */
10137 {
10138 { VEX_W_TABLE (VEX_W_0FXOP_09_E1_L_0) },
10139 },
10140
10141 /* VEX_LEN_0FXOP_09_E2 */
10142 {
10143 { VEX_W_TABLE (VEX_W_0FXOP_09_E2_L_0) },
10144 },
10145
10146 /* VEX_LEN_0FXOP_09_E3 */
10147 {
10148 { VEX_W_TABLE (VEX_W_0FXOP_09_E3_L_0) },
10149 },
10150
10151 /* VEX_LEN_0FXOP_0A_12 */
10152 {
10153 { REG_TABLE (REG_0FXOP_0A_12_L_0) },
10154 },
331d2d0d
L
10155};
10156
ad692897 10157#include "i386-dis-evex-len.h"
04e2a182 10158
9e30b8e0 10159static const struct dis386 vex_w_table[][2] = {
43234a1e
L
10160 {
10161 /* VEX_W_0F41_P_0_LEN_1 */
ab4e4ed5
AF
10162 { MOD_TABLE (MOD_VEX_W_0_0F41_P_0_LEN_1) },
10163 { MOD_TABLE (MOD_VEX_W_1_0F41_P_0_LEN_1) },
1ba585e8
IT
10164 },
10165 {
10166 /* VEX_W_0F41_P_2_LEN_1 */
ab4e4ed5
AF
10167 { MOD_TABLE (MOD_VEX_W_0_0F41_P_2_LEN_1) },
10168 { MOD_TABLE (MOD_VEX_W_1_0F41_P_2_LEN_1) }
43234a1e
L
10169 },
10170 {
10171 /* VEX_W_0F42_P_0_LEN_1 */
ab4e4ed5
AF
10172 { MOD_TABLE (MOD_VEX_W_0_0F42_P_0_LEN_1) },
10173 { MOD_TABLE (MOD_VEX_W_1_0F42_P_0_LEN_1) },
1ba585e8
IT
10174 },
10175 {
10176 /* VEX_W_0F42_P_2_LEN_1 */
ab4e4ed5
AF
10177 { MOD_TABLE (MOD_VEX_W_0_0F42_P_2_LEN_1) },
10178 { MOD_TABLE (MOD_VEX_W_1_0F42_P_2_LEN_1) },
43234a1e
L
10179 },
10180 {
10181 /* VEX_W_0F44_P_0_LEN_0 */
ab4e4ed5
AF
10182 { MOD_TABLE (MOD_VEX_W_0_0F44_P_0_LEN_1) },
10183 { MOD_TABLE (MOD_VEX_W_1_0F44_P_0_LEN_1) },
1ba585e8
IT
10184 },
10185 {
10186 /* VEX_W_0F44_P_2_LEN_0 */
ab4e4ed5
AF
10187 { MOD_TABLE (MOD_VEX_W_0_0F44_P_2_LEN_1) },
10188 { MOD_TABLE (MOD_VEX_W_1_0F44_P_2_LEN_1) },
43234a1e
L
10189 },
10190 {
ec6f095a
L
10191 /* VEX_W_0F45_P_0_LEN_1 */
10192 { MOD_TABLE (MOD_VEX_W_0_0F45_P_0_LEN_1) },
10193 { MOD_TABLE (MOD_VEX_W_1_0F45_P_0_LEN_1) },
9e30b8e0
L
10194 },
10195 {
ec6f095a
L
10196 /* VEX_W_0F45_P_2_LEN_1 */
10197 { MOD_TABLE (MOD_VEX_W_0_0F45_P_2_LEN_1) },
10198 { MOD_TABLE (MOD_VEX_W_1_0F45_P_2_LEN_1) },
9e30b8e0
L
10199 },
10200 {
ec6f095a
L
10201 /* VEX_W_0F46_P_0_LEN_1 */
10202 { MOD_TABLE (MOD_VEX_W_0_0F46_P_0_LEN_1) },
10203 { MOD_TABLE (MOD_VEX_W_1_0F46_P_0_LEN_1) },
9e30b8e0
L
10204 },
10205 {
ec6f095a
L
10206 /* VEX_W_0F46_P_2_LEN_1 */
10207 { MOD_TABLE (MOD_VEX_W_0_0F46_P_2_LEN_1) },
10208 { MOD_TABLE (MOD_VEX_W_1_0F46_P_2_LEN_1) },
9e30b8e0
L
10209 },
10210 {
ec6f095a
L
10211 /* VEX_W_0F47_P_0_LEN_1 */
10212 { MOD_TABLE (MOD_VEX_W_0_0F47_P_0_LEN_1) },
10213 { MOD_TABLE (MOD_VEX_W_1_0F47_P_0_LEN_1) },
9e30b8e0
L
10214 },
10215 {
ec6f095a
L
10216 /* VEX_W_0F47_P_2_LEN_1 */
10217 { MOD_TABLE (MOD_VEX_W_0_0F47_P_2_LEN_1) },
10218 { MOD_TABLE (MOD_VEX_W_1_0F47_P_2_LEN_1) },
9e30b8e0
L
10219 },
10220 {
ec6f095a
L
10221 /* VEX_W_0F4A_P_0_LEN_1 */
10222 { MOD_TABLE (MOD_VEX_W_0_0F4A_P_0_LEN_1) },
10223 { MOD_TABLE (MOD_VEX_W_1_0F4A_P_0_LEN_1) },
9e30b8e0
L
10224 },
10225 {
ec6f095a
L
10226 /* VEX_W_0F4A_P_2_LEN_1 */
10227 { MOD_TABLE (MOD_VEX_W_0_0F4A_P_2_LEN_1) },
10228 { MOD_TABLE (MOD_VEX_W_1_0F4A_P_2_LEN_1) },
9e30b8e0
L
10229 },
10230 {
ec6f095a
L
10231 /* VEX_W_0F4B_P_0_LEN_1 */
10232 { MOD_TABLE (MOD_VEX_W_0_0F4B_P_0_LEN_1) },
10233 { MOD_TABLE (MOD_VEX_W_1_0F4B_P_0_LEN_1) },
9e30b8e0
L
10234 },
10235 {
ec6f095a
L
10236 /* VEX_W_0F4B_P_2_LEN_1 */
10237 { MOD_TABLE (MOD_VEX_W_0_0F4B_P_2_LEN_1) },
9e30b8e0
L
10238 },
10239 {
ec6f095a
L
10240 /* VEX_W_0F90_P_0_LEN_0 */
10241 { "kmovw", { MaskG, MaskE }, 0 },
10242 { "kmovq", { MaskG, MaskE }, 0 },
9e30b8e0
L
10243 },
10244 {
ec6f095a
L
10245 /* VEX_W_0F90_P_2_LEN_0 */
10246 { "kmovb", { MaskG, MaskBDE }, 0 },
10247 { "kmovd", { MaskG, MaskBDE }, 0 },
9e30b8e0
L
10248 },
10249 {
ec6f095a
L
10250 /* VEX_W_0F91_P_0_LEN_0 */
10251 { MOD_TABLE (MOD_VEX_W_0_0F91_P_0_LEN_0) },
10252 { MOD_TABLE (MOD_VEX_W_1_0F91_P_0_LEN_0) },
9e30b8e0
L
10253 },
10254 {
ec6f095a
L
10255 /* VEX_W_0F91_P_2_LEN_0 */
10256 { MOD_TABLE (MOD_VEX_W_0_0F91_P_2_LEN_0) },
10257 { MOD_TABLE (MOD_VEX_W_1_0F91_P_2_LEN_0) },
9e30b8e0
L
10258 },
10259 {
ec6f095a
L
10260 /* VEX_W_0F92_P_0_LEN_0 */
10261 { MOD_TABLE (MOD_VEX_W_0_0F92_P_0_LEN_0) },
9e30b8e0
L
10262 },
10263 {
ec6f095a
L
10264 /* VEX_W_0F92_P_2_LEN_0 */
10265 { MOD_TABLE (MOD_VEX_W_0_0F92_P_2_LEN_0) },
9e30b8e0 10266 },
9e30b8e0 10267 {
ec6f095a
L
10268 /* VEX_W_0F93_P_0_LEN_0 */
10269 { MOD_TABLE (MOD_VEX_W_0_0F93_P_0_LEN_0) },
9e30b8e0
L
10270 },
10271 {
ec6f095a
L
10272 /* VEX_W_0F93_P_2_LEN_0 */
10273 { MOD_TABLE (MOD_VEX_W_0_0F93_P_2_LEN_0) },
9e30b8e0 10274 },
9e30b8e0 10275 {
ec6f095a
L
10276 /* VEX_W_0F98_P_0_LEN_0 */
10277 { MOD_TABLE (MOD_VEX_W_0_0F98_P_0_LEN_0) },
10278 { MOD_TABLE (MOD_VEX_W_1_0F98_P_0_LEN_0) },
9e30b8e0
L
10279 },
10280 {
ec6f095a
L
10281 /* VEX_W_0F98_P_2_LEN_0 */
10282 { MOD_TABLE (MOD_VEX_W_0_0F98_P_2_LEN_0) },
10283 { MOD_TABLE (MOD_VEX_W_1_0F98_P_2_LEN_0) },
9e30b8e0
L
10284 },
10285 {
ec6f095a
L
10286 /* VEX_W_0F99_P_0_LEN_0 */
10287 { MOD_TABLE (MOD_VEX_W_0_0F99_P_0_LEN_0) },
10288 { MOD_TABLE (MOD_VEX_W_1_0F99_P_0_LEN_0) },
9e30b8e0
L
10289 },
10290 {
ec6f095a
L
10291 /* VEX_W_0F99_P_2_LEN_0 */
10292 { MOD_TABLE (MOD_VEX_W_0_0F99_P_2_LEN_0) },
10293 { MOD_TABLE (MOD_VEX_W_1_0F99_P_2_LEN_0) },
9e30b8e0 10294 },
9e30b8e0 10295 {
592a252b 10296 /* VEX_W_0F380C_P_2 */
bf890a93 10297 { "vpermilps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10298 },
10299 {
592a252b 10300 /* VEX_W_0F380D_P_2 */
bf890a93 10301 { "vpermilpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10302 },
10303 {
592a252b 10304 /* VEX_W_0F380E_P_2 */
bf890a93 10305 { "vtestps", { XM, EXx }, 0 },
9e30b8e0
L
10306 },
10307 {
592a252b 10308 /* VEX_W_0F380F_P_2 */
bf890a93 10309 { "vtestpd", { XM, EXx }, 0 },
9e30b8e0 10310 },
6431c801
JB
10311 {
10312 /* VEX_W_0F3813_P_2 */
10313 { "vcvtph2ps", { XM, EXxmmq }, 0 },
10314 },
6c30d220
L
10315 {
10316 /* VEX_W_0F3816_P_2 */
bf890a93 10317 { "vpermps", { XM, Vex, EXx }, 0 },
6c30d220 10318 },
bcf2684f 10319 {
6c30d220 10320 /* VEX_W_0F3818_P_2 */
bf890a93 10321 { "vbroadcastss", { XM, EXxmm_md }, 0 },
bcf2684f 10322 },
9e30b8e0 10323 {
6c30d220 10324 /* VEX_W_0F3819_P_2 */
bf890a93 10325 { "vbroadcastsd", { XM, EXxmm_mq }, 0 },
9e30b8e0
L
10326 },
10327 {
89e65d17 10328 /* VEX_W_0F381A_P_2_M_0_L_0 */
bf890a93 10329 { "vbroadcastf128", { XM, Mxmm }, 0 },
9e30b8e0 10330 },
53aa04a0 10331 {
592a252b 10332 /* VEX_W_0F382C_P_2_M_0 */
bf890a93 10333 { "vmaskmovps", { XM, Vex, Mx }, 0 },
53aa04a0
L
10334 },
10335 {
592a252b 10336 /* VEX_W_0F382D_P_2_M_0 */
bf890a93 10337 { "vmaskmovpd", { XM, Vex, Mx }, 0 },
53aa04a0
L
10338 },
10339 {
592a252b 10340 /* VEX_W_0F382E_P_2_M_0 */
bf890a93 10341 { "vmaskmovps", { Mx, Vex, XM }, 0 },
53aa04a0
L
10342 },
10343 {
592a252b 10344 /* VEX_W_0F382F_P_2_M_0 */
bf890a93 10345 { "vmaskmovpd", { Mx, Vex, XM }, 0 },
53aa04a0 10346 },
6c30d220
L
10347 {
10348 /* VEX_W_0F3836_P_2 */
bf890a93 10349 { "vpermd", { XM, Vex, EXx }, 0 },
9e30b8e0 10350 },
6c30d220
L
10351 {
10352 /* VEX_W_0F3846_P_2 */
bf890a93 10353 { "vpsravd", { XM, Vex, EXx }, 0 },
6c30d220 10354 },
260cd341
LC
10355 {
10356 /* VEX_W_0F3849_X86_64_P_0 */
10357 { MOD_TABLE (MOD_VEX_0F3849_X86_64_P_0_W_0) },
10358 },
10359 {
10360 /* VEX_W_0F3849_X86_64_P_2 */
10361 { MOD_TABLE (MOD_VEX_0F3849_X86_64_P_2_W_0) },
10362 },
10363 {
10364 /* VEX_W_0F3849_X86_64_P_3 */
10365 { MOD_TABLE (MOD_VEX_0F3849_X86_64_P_3_W_0) },
10366 },
10367 {
10368 /* VEX_W_0F384B_X86_64_P_1 */
10369 { MOD_TABLE (MOD_VEX_0F384B_X86_64_P_1_W_0) },
10370 },
10371 {
10372 /* VEX_W_0F384B_X86_64_P_2 */
10373 { MOD_TABLE (MOD_VEX_0F384B_X86_64_P_2_W_0) },
10374 },
10375 {
10376 /* VEX_W_0F384B_X86_64_P_3 */
10377 { MOD_TABLE (MOD_VEX_0F384B_X86_64_P_3_W_0) },
10378 },
6c30d220
L
10379 {
10380 /* VEX_W_0F3858_P_2 */
bf890a93 10381 { "vpbroadcastd", { XM, EXxmm_md }, 0 },
6c30d220
L
10382 },
10383 {
10384 /* VEX_W_0F3859_P_2 */
bf890a93 10385 { "vpbroadcastq", { XM, EXxmm_mq }, 0 },
6c30d220
L
10386 },
10387 {
89e65d17 10388 /* VEX_W_0F385A_P_2_M_0_L_0 */
bf890a93 10389 { "vbroadcasti128", { XM, Mxmm }, 0 },
6c30d220 10390 },
260cd341
LC
10391 {
10392 /* VEX_W_0F385C_X86_64_P_1 */
10393 { MOD_TABLE (MOD_VEX_0F385C_X86_64_P_1_W_0) },
10394 },
10395 {
10396 /* VEX_W_0F385E_X86_64_P_0 */
10397 { MOD_TABLE (MOD_VEX_0F385E_X86_64_P_0_W_0) },
10398 },
10399 {
10400 /* VEX_W_0F385E_X86_64_P_1 */
10401 { MOD_TABLE (MOD_VEX_0F385E_X86_64_P_1_W_0) },
10402 },
10403 {
10404 /* VEX_W_0F385E_X86_64_P_2 */
10405 { MOD_TABLE (MOD_VEX_0F385E_X86_64_P_2_W_0) },
10406 },
10407 {
10408 /* VEX_W_0F385E_X86_64_P_3 */
10409 { MOD_TABLE (MOD_VEX_0F385E_X86_64_P_3_W_0) },
10410 },
6c30d220
L
10411 {
10412 /* VEX_W_0F3878_P_2 */
bf890a93 10413 { "vpbroadcastb", { XM, EXxmm_mb }, 0 },
6c30d220
L
10414 },
10415 {
10416 /* VEX_W_0F3879_P_2 */
bf890a93 10417 { "vpbroadcastw", { XM, EXxmm_mw }, 0 },
6c30d220 10418 },
48521003
IT
10419 {
10420 /* VEX_W_0F38CF_P_2 */
10421 { "vgf2p8mulb", { XM, Vex, EXx }, 0 },
10422 },
6c30d220
L
10423 {
10424 /* VEX_W_0F3A00_P_2 */
10425 { Bad_Opcode },
bf890a93 10426 { "vpermq", { XM, EXx, Ib }, 0 },
6c30d220
L
10427 },
10428 {
10429 /* VEX_W_0F3A01_P_2 */
10430 { Bad_Opcode },
bf890a93 10431 { "vpermpd", { XM, EXx, Ib }, 0 },
6c30d220
L
10432 },
10433 {
10434 /* VEX_W_0F3A02_P_2 */
bf890a93 10435 { "vpblendd", { XM, Vex, EXx, Ib }, 0 },
6c30d220 10436 },
9e30b8e0 10437 {
592a252b 10438 /* VEX_W_0F3A04_P_2 */
bf890a93 10439 { "vpermilps", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10440 },
10441 {
592a252b 10442 /* VEX_W_0F3A05_P_2 */
bf890a93 10443 { "vpermilpd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10444 },
10445 {
89e65d17
JB
10446 /* VEX_W_0F3A06_P_2_L_0 */
10447 { "vperm2f128", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0 10448 },
9e30b8e0 10449 {
89e65d17
JB
10450 /* VEX_W_0F3A18_P_2_L_0 */
10451 { "vinsertf128", { XM, Vex, EXxmm, Ib }, 0 },
9e30b8e0
L
10452 },
10453 {
89e65d17 10454 /* VEX_W_0F3A19_P_2_L_0 */
bf890a93 10455 { "vextractf128", { EXxmm, XM, Ib }, 0 },
9e30b8e0 10456 },
6431c801
JB
10457 {
10458 /* VEX_W_0F3A1D_P_2 */
10459 { "vcvtps2ph", { EXxmmq, XM, EXxEVexS, Ib }, 0 },
10460 },
43234a1e 10461 {
1ba585e8 10462 /* VEX_W_0F3A30_P_2_LEN_0 */
ab4e4ed5
AF
10463 { MOD_TABLE (MOD_VEX_W_0_0F3A30_P_2_LEN_0) },
10464 { MOD_TABLE (MOD_VEX_W_1_0F3A30_P_2_LEN_0) },
43234a1e
L
10465 },
10466 {
1ba585e8 10467 /* VEX_W_0F3A31_P_2_LEN_0 */
ab4e4ed5
AF
10468 { MOD_TABLE (MOD_VEX_W_0_0F3A31_P_2_LEN_0) },
10469 { MOD_TABLE (MOD_VEX_W_1_0F3A31_P_2_LEN_0) },
1ba585e8
IT
10470 },
10471 {
10472 /* VEX_W_0F3A32_P_2_LEN_0 */
ab4e4ed5
AF
10473 { MOD_TABLE (MOD_VEX_W_0_0F3A32_P_2_LEN_0) },
10474 { MOD_TABLE (MOD_VEX_W_1_0F3A32_P_2_LEN_0) },
43234a1e 10475 },
1ba585e8
IT
10476 {
10477 /* VEX_W_0F3A33_P_2_LEN_0 */
ab4e4ed5
AF
10478 { MOD_TABLE (MOD_VEX_W_0_0F3A33_P_2_LEN_0) },
10479 { MOD_TABLE (MOD_VEX_W_1_0F3A33_P_2_LEN_0) },
1ba585e8 10480 },
6c30d220 10481 {
89e65d17
JB
10482 /* VEX_W_0F3A38_P_2_L_0 */
10483 { "vinserti128", { XM, Vex, EXxmm, Ib }, 0 },
6c30d220
L
10484 },
10485 {
89e65d17 10486 /* VEX_W_0F3A39_P_2_L_0 */
bf890a93 10487 { "vextracti128", { EXxmm, XM, Ib }, 0 },
6c30d220 10488 },
6c30d220 10489 {
89e65d17
JB
10490 /* VEX_W_0F3A46_P_2_L_0 */
10491 { "vperm2i128", { XM, Vex, EXx, Ib }, 0 },
6c30d220 10492 },
9e30b8e0 10493 {
592a252b 10494 /* VEX_W_0F3A4A_P_2 */
bf890a93 10495 { "vblendvps", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
10496 },
10497 {
592a252b 10498 /* VEX_W_0F3A4B_P_2 */
bf890a93 10499 { "vblendvpd", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
10500 },
10501 {
592a252b 10502 /* VEX_W_0F3A4C_P_2 */
bf890a93 10503 { "vpblendvb", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0 10504 },
48521003
IT
10505 {
10506 /* VEX_W_0F3ACE_P_2 */
10507 { Bad_Opcode },
10508 { "vgf2p8affineqb", { XM, Vex, EXx, Ib }, 0 },
10509 },
10510 {
10511 /* VEX_W_0F3ACF_P_2 */
10512 { Bad_Opcode },
10513 { "vgf2p8affineinvqb", { XM, Vex, EXx, Ib }, 0 },
10514 },
467bbef0
JB
10515 /* VEX_W_0FXOP_08_85_L_0 */
10516 {
10517 { "vpmacssww", { XM, Vex, EXx, XMVexI4 }, 0 },
10518 },
10519 /* VEX_W_0FXOP_08_86_L_0 */
10520 {
10521 { "vpmacsswd", { XM, Vex, EXx, XMVexI4 }, 0 },
10522 },
10523 /* VEX_W_0FXOP_08_87_L_0 */
10524 {
10525 { "vpmacssdql", { XM, Vex, EXx, XMVexI4 }, 0 },
10526 },
10527 /* VEX_W_0FXOP_08_8E_L_0 */
10528 {
10529 { "vpmacssdd", { XM, Vex, EXx, XMVexI4 }, 0 },
10530 },
10531 /* VEX_W_0FXOP_08_8F_L_0 */
10532 {
10533 { "vpmacssdqh", { XM, Vex, EXx, XMVexI4 }, 0 },
10534 },
10535 /* VEX_W_0FXOP_08_95_L_0 */
10536 {
10537 { "vpmacsww", { XM, Vex, EXx, XMVexI4 }, 0 },
10538 },
10539 /* VEX_W_0FXOP_08_96_L_0 */
10540 {
10541 { "vpmacswd", { XM, Vex, EXx, XMVexI4 }, 0 },
10542 },
10543 /* VEX_W_0FXOP_08_97_L_0 */
10544 {
10545 { "vpmacsdql", { XM, Vex, EXx, XMVexI4 }, 0 },
10546 },
10547 /* VEX_W_0FXOP_08_9E_L_0 */
10548 {
10549 { "vpmacsdd", { XM, Vex, EXx, XMVexI4 }, 0 },
10550 },
10551 /* VEX_W_0FXOP_08_9F_L_0 */
10552 {
10553 { "vpmacsdqh", { XM, Vex, EXx, XMVexI4 }, 0 },
10554 },
10555 /* VEX_W_0FXOP_08_A6_L_0 */
10556 {
10557 { "vpmadcsswd", { XM, Vex, EXx, XMVexI4 }, 0 },
10558 },
10559 /* VEX_W_0FXOP_08_B6_L_0 */
10560 {
10561 { "vpmadcswd", { XM, Vex, EXx, XMVexI4 }, 0 },
10562 },
10563 /* VEX_W_0FXOP_08_C0_L_0 */
10564 {
10565 { "vprotb", { XM, EXx, Ib }, 0 },
10566 },
10567 /* VEX_W_0FXOP_08_C1_L_0 */
10568 {
10569 { "vprotw", { XM, EXx, Ib }, 0 },
10570 },
10571 /* VEX_W_0FXOP_08_C2_L_0 */
10572 {
10573 { "vprotd", { XM, EXx, Ib }, 0 },
10574 },
10575 /* VEX_W_0FXOP_08_C3_L_0 */
10576 {
10577 { "vprotq", { XM, EXx, Ib }, 0 },
10578 },
10579 /* VEX_W_0FXOP_08_CC_L_0 */
10580 {
89e65d17 10581 { "vpcomb", { XM, Vex, EXx, VPCOM }, 0 },
467bbef0
JB
10582 },
10583 /* VEX_W_0FXOP_08_CD_L_0 */
10584 {
89e65d17 10585 { "vpcomw", { XM, Vex, EXx, VPCOM }, 0 },
467bbef0
JB
10586 },
10587 /* VEX_W_0FXOP_08_CE_L_0 */
10588 {
89e65d17 10589 { "vpcomd", { XM, Vex, EXx, VPCOM }, 0 },
467bbef0
JB
10590 },
10591 /* VEX_W_0FXOP_08_CF_L_0 */
10592 {
89e65d17 10593 { "vpcomq", { XM, Vex, EXx, VPCOM }, 0 },
467bbef0
JB
10594 },
10595 /* VEX_W_0FXOP_08_EC_L_0 */
10596 {
89e65d17 10597 { "vpcomub", { XM, Vex, EXx, VPCOM }, 0 },
467bbef0
JB
10598 },
10599 /* VEX_W_0FXOP_08_ED_L_0 */
10600 {
89e65d17 10601 { "vpcomuw", { XM, Vex, EXx, VPCOM }, 0 },
467bbef0
JB
10602 },
10603 /* VEX_W_0FXOP_08_EE_L_0 */
10604 {
89e65d17 10605 { "vpcomud", { XM, Vex, EXx, VPCOM }, 0 },
467bbef0
JB
10606 },
10607 /* VEX_W_0FXOP_08_EF_L_0 */
10608 {
89e65d17 10609 { "vpcomuq", { XM, Vex, EXx, VPCOM }, 0 },
467bbef0 10610 },
b5b098c2
JB
10611 /* VEX_W_0FXOP_09_80 */
10612 {
10613 { "vfrczps", { XM, EXx }, 0 },
10614 },
10615 /* VEX_W_0FXOP_09_81 */
10616 {
10617 { "vfrczpd", { XM, EXx }, 0 },
10618 },
10619 /* VEX_W_0FXOP_09_82 */
10620 {
10621 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_82_W_0) },
10622 },
10623 /* VEX_W_0FXOP_09_83 */
10624 {
10625 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_83_W_0) },
10626 },
467bbef0
JB
10627 /* VEX_W_0FXOP_09_C1_L_0 */
10628 {
10629 { "vphaddbw", { XM, EXxmm }, 0 },
10630 },
10631 /* VEX_W_0FXOP_09_C2_L_0 */
10632 {
10633 { "vphaddbd", { XM, EXxmm }, 0 },
10634 },
10635 /* VEX_W_0FXOP_09_C3_L_0 */
10636 {
10637 { "vphaddbq", { XM, EXxmm }, 0 },
10638 },
10639 /* VEX_W_0FXOP_09_C6_L_0 */
10640 {
10641 { "vphaddwd", { XM, EXxmm }, 0 },
10642 },
10643 /* VEX_W_0FXOP_09_C7_L_0 */
10644 {
10645 { "vphaddwq", { XM, EXxmm }, 0 },
10646 },
10647 /* VEX_W_0FXOP_09_CB_L_0 */
10648 {
10649 { "vphadddq", { XM, EXxmm }, 0 },
10650 },
10651 /* VEX_W_0FXOP_09_D1_L_0 */
10652 {
10653 { "vphaddubw", { XM, EXxmm }, 0 },
10654 },
10655 /* VEX_W_0FXOP_09_D2_L_0 */
10656 {
10657 { "vphaddubd", { XM, EXxmm }, 0 },
10658 },
10659 /* VEX_W_0FXOP_09_D3_L_0 */
10660 {
10661 { "vphaddubq", { XM, EXxmm }, 0 },
10662 },
10663 /* VEX_W_0FXOP_09_D6_L_0 */
10664 {
10665 { "vphadduwd", { XM, EXxmm }, 0 },
10666 },
10667 /* VEX_W_0FXOP_09_D7_L_0 */
10668 {
10669 { "vphadduwq", { XM, EXxmm }, 0 },
10670 },
10671 /* VEX_W_0FXOP_09_DB_L_0 */
10672 {
10673 { "vphaddudq", { XM, EXxmm }, 0 },
10674 },
10675 /* VEX_W_0FXOP_09_E1_L_0 */
10676 {
10677 { "vphsubbw", { XM, EXxmm }, 0 },
10678 },
10679 /* VEX_W_0FXOP_09_E2_L_0 */
10680 {
10681 { "vphsubwd", { XM, EXxmm }, 0 },
10682 },
10683 /* VEX_W_0FXOP_09_E3_L_0 */
10684 {
10685 { "vphsubdq", { XM, EXxmm }, 0 },
10686 },
ad692897
L
10687
10688#include "i386-dis-evex-w.h"
9e30b8e0
L
10689};
10690
10691static const struct dis386 mod_table[][2] = {
10692 {
10693 /* MOD_8D */
bf890a93 10694 { "leaS", { Gv, M }, 0 },
9e30b8e0 10695 },
42164a71
L
10696 {
10697 /* MOD_C6_REG_7 */
10698 { Bad_Opcode },
10699 { RM_TABLE (RM_C6_REG_7) },
10700 },
10701 {
10702 /* MOD_C7_REG_7 */
10703 { Bad_Opcode },
10704 { RM_TABLE (RM_C7_REG_7) },
10705 },
4a357820
MZ
10706 {
10707 /* MOD_FF_REG_3 */
8f570d62 10708 { "{l|}call^", { indirEp }, 0 },
4a357820
MZ
10709 },
10710 {
10711 /* MOD_FF_REG_5 */
8f570d62 10712 { "{l|}jmp^", { indirEp }, 0 },
4a357820 10713 },
9e30b8e0
L
10714 {
10715 /* MOD_0F01_REG_0 */
10716 { X86_64_TABLE (X86_64_0F01_REG_0) },
10717 { RM_TABLE (RM_0F01_REG_0) },
10718 },
10719 {
10720 /* MOD_0F01_REG_1 */
10721 { X86_64_TABLE (X86_64_0F01_REG_1) },
10722 { RM_TABLE (RM_0F01_REG_1) },
10723 },
10724 {
10725 /* MOD_0F01_REG_2 */
10726 { X86_64_TABLE (X86_64_0F01_REG_2) },
10727 { RM_TABLE (RM_0F01_REG_2) },
10728 },
10729 {
10730 /* MOD_0F01_REG_3 */
10731 { X86_64_TABLE (X86_64_0F01_REG_3) },
10732 { RM_TABLE (RM_0F01_REG_3) },
10733 },
8eab4136
L
10734 {
10735 /* MOD_0F01_REG_5 */
f8687e93
JB
10736 { PREFIX_TABLE (PREFIX_0F01_REG_5_MOD_0) },
10737 { RM_TABLE (RM_0F01_REG_5_MOD_3) },
8eab4136 10738 },
9e30b8e0
L
10739 {
10740 /* MOD_0F01_REG_7 */
bf890a93 10741 { "invlpg", { Mb }, 0 },
f8687e93 10742 { RM_TABLE (RM_0F01_REG_7_MOD_3) },
9e30b8e0
L
10743 },
10744 {
10745 /* MOD_0F12_PREFIX_0 */
18897deb
JB
10746 { "movlpX", { XM, EXq }, 0 },
10747 { "movhlps", { XM, EXq }, 0 },
10748 },
10749 {
10750 /* MOD_0F12_PREFIX_2 */
10751 { "movlpX", { XM, EXq }, 0 },
9e30b8e0
L
10752 },
10753 {
10754 /* MOD_0F13 */
507bd325 10755 { "movlpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
10756 },
10757 {
10758 /* MOD_0F16_PREFIX_0 */
18897deb 10759 { "movhpX", { XM, EXq }, 0 },
bf890a93 10760 { "movlhps", { XM, EXq }, 0 },
9e30b8e0 10761 },
18897deb
JB
10762 {
10763 /* MOD_0F16_PREFIX_2 */
10764 { "movhpX", { XM, EXq }, 0 },
10765 },
9e30b8e0
L
10766 {
10767 /* MOD_0F17 */
507bd325 10768 { "movhpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
10769 },
10770 {
10771 /* MOD_0F18_REG_0 */
bf890a93 10772 { "prefetchnta", { Mb }, 0 },
9e30b8e0
L
10773 },
10774 {
10775 /* MOD_0F18_REG_1 */
bf890a93 10776 { "prefetcht0", { Mb }, 0 },
9e30b8e0
L
10777 },
10778 {
10779 /* MOD_0F18_REG_2 */
bf890a93 10780 { "prefetcht1", { Mb }, 0 },
9e30b8e0
L
10781 },
10782 {
10783 /* MOD_0F18_REG_3 */
bf890a93 10784 { "prefetcht2", { Mb }, 0 },
9e30b8e0 10785 },
d7189fa5
RM
10786 {
10787 /* MOD_0F18_REG_4 */
bf890a93 10788 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
10789 },
10790 {
10791 /* MOD_0F18_REG_5 */
bf890a93 10792 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
10793 },
10794 {
10795 /* MOD_0F18_REG_6 */
bf890a93 10796 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
10797 },
10798 {
10799 /* MOD_0F18_REG_7 */
bf890a93 10800 { "nop/reserved", { Mb }, 0 },
d7189fa5 10801 },
7e8b059b
L
10802 {
10803 /* MOD_0F1A_PREFIX_0 */
d276ec69 10804 { "bndldx", { Gbnd, Mv_bnd }, 0 },
bf890a93 10805 { "nopQ", { Ev }, 0 },
7e8b059b
L
10806 },
10807 {
10808 /* MOD_0F1B_PREFIX_0 */
d276ec69 10809 { "bndstx", { Mv_bnd, Gbnd }, 0 },
bf890a93 10810 { "nopQ", { Ev }, 0 },
7e8b059b
L
10811 },
10812 {
10813 /* MOD_0F1B_PREFIX_1 */
d276ec69 10814 { "bndmk", { Gbnd, Mv_bnd }, 0 },
bf890a93 10815 { "nopQ", { Ev }, 0 },
7e8b059b 10816 },
c48935d7
IT
10817 {
10818 /* MOD_0F1C_PREFIX_0 */
f8687e93 10819 { REG_TABLE (REG_0F1C_P_0_MOD_0) },
c48935d7
IT
10820 { "nopQ", { Ev }, 0 },
10821 },
603555e5
L
10822 {
10823 /* MOD_0F1E_PREFIX_1 */
10824 { "nopQ", { Ev }, 0 },
f8687e93 10825 { REG_TABLE (REG_0F1E_P_1_MOD_3) },
603555e5 10826 },
b844680a 10827 {
92fddf8e 10828 /* MOD_0F24 */
7bb15c6f 10829 { Bad_Opcode },
bf890a93 10830 { "movL", { Rd, Td }, 0 },
b844680a
L
10831 },
10832 {
92fddf8e 10833 /* MOD_0F26 */
592d1631 10834 { Bad_Opcode },
bf890a93 10835 { "movL", { Td, Rd }, 0 },
b844680a 10836 },
75c135a8
L
10837 {
10838 /* MOD_0F2B_PREFIX_0 */
507bd325 10839 {"movntps", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
10840 },
10841 {
10842 /* MOD_0F2B_PREFIX_1 */
507bd325 10843 {"movntss", { Md, XM }, PREFIX_OPCODE },
75c135a8
L
10844 },
10845 {
10846 /* MOD_0F2B_PREFIX_2 */
507bd325 10847 {"movntpd", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
10848 },
10849 {
10850 /* MOD_0F2B_PREFIX_3 */
507bd325 10851 {"movntsd", { Mq, XM }, PREFIX_OPCODE },
75c135a8
L
10852 },
10853 {
a5aaedb9 10854 /* MOD_0F50 */
592d1631 10855 { Bad_Opcode },
507bd325 10856 { "movmskpX", { Gdq, XS }, PREFIX_OPCODE },
75c135a8 10857 },
b844680a 10858 {
1ceb70f8 10859 /* MOD_0F71_REG_2 */
592d1631 10860 { Bad_Opcode },
bf890a93 10861 { "psrlw", { MS, Ib }, 0 },
b844680a
L
10862 },
10863 {
1ceb70f8 10864 /* MOD_0F71_REG_4 */
592d1631 10865 { Bad_Opcode },
bf890a93 10866 { "psraw", { MS, Ib }, 0 },
b844680a
L
10867 },
10868 {
1ceb70f8 10869 /* MOD_0F71_REG_6 */
592d1631 10870 { Bad_Opcode },
bf890a93 10871 { "psllw", { MS, Ib }, 0 },
b844680a
L
10872 },
10873 {
1ceb70f8 10874 /* MOD_0F72_REG_2 */
592d1631 10875 { Bad_Opcode },
bf890a93 10876 { "psrld", { MS, Ib }, 0 },
b844680a
L
10877 },
10878 {
1ceb70f8 10879 /* MOD_0F72_REG_4 */
592d1631 10880 { Bad_Opcode },
bf890a93 10881 { "psrad", { MS, Ib }, 0 },
b844680a
L
10882 },
10883 {
1ceb70f8 10884 /* MOD_0F72_REG_6 */
592d1631 10885 { Bad_Opcode },
bf890a93 10886 { "pslld", { MS, Ib }, 0 },
b844680a
L
10887 },
10888 {
1ceb70f8 10889 /* MOD_0F73_REG_2 */
592d1631 10890 { Bad_Opcode },
bf890a93 10891 { "psrlq", { MS, Ib }, 0 },
b844680a
L
10892 },
10893 {
1ceb70f8 10894 /* MOD_0F73_REG_3 */
592d1631 10895 { Bad_Opcode },
c0f3af97
L
10896 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
10897 },
10898 {
10899 /* MOD_0F73_REG_6 */
592d1631 10900 { Bad_Opcode },
bf890a93 10901 { "psllq", { MS, Ib }, 0 },
c0f3af97
L
10902 },
10903 {
10904 /* MOD_0F73_REG_7 */
592d1631 10905 { Bad_Opcode },
c0f3af97
L
10906 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
10907 },
10908 {
10909 /* MOD_0FAE_REG_0 */
bf890a93 10910 { "fxsave", { FXSAVE }, 0 },
f8687e93 10911 { PREFIX_TABLE (PREFIX_0FAE_REG_0_MOD_3) },
c0f3af97
L
10912 },
10913 {
10914 /* MOD_0FAE_REG_1 */
bf890a93 10915 { "fxrstor", { FXSAVE }, 0 },
f8687e93 10916 { PREFIX_TABLE (PREFIX_0FAE_REG_1_MOD_3) },
c0f3af97
L
10917 },
10918 {
10919 /* MOD_0FAE_REG_2 */
bf890a93 10920 { "ldmxcsr", { Md }, 0 },
f8687e93 10921 { PREFIX_TABLE (PREFIX_0FAE_REG_2_MOD_3) },
c0f3af97
L
10922 },
10923 {
10924 /* MOD_0FAE_REG_3 */
bf890a93 10925 { "stmxcsr", { Md }, 0 },
f8687e93 10926 { PREFIX_TABLE (PREFIX_0FAE_REG_3_MOD_3) },
c0f3af97
L
10927 },
10928 {
10929 /* MOD_0FAE_REG_4 */
f8687e93
JB
10930 { PREFIX_TABLE (PREFIX_0FAE_REG_4_MOD_0) },
10931 { PREFIX_TABLE (PREFIX_0FAE_REG_4_MOD_3) },
c0f3af97
L
10932 },
10933 {
10934 /* MOD_0FAE_REG_5 */
f8687e93
JB
10935 { PREFIX_TABLE (PREFIX_0FAE_REG_5_MOD_0) },
10936 { PREFIX_TABLE (PREFIX_0FAE_REG_5_MOD_3) },
c0f3af97
L
10937 },
10938 {
10939 /* MOD_0FAE_REG_6 */
f8687e93
JB
10940 { PREFIX_TABLE (PREFIX_0FAE_REG_6_MOD_0) },
10941 { PREFIX_TABLE (PREFIX_0FAE_REG_6_MOD_3) },
c0f3af97
L
10942 },
10943 {
10944 /* MOD_0FAE_REG_7 */
f8687e93
JB
10945 { PREFIX_TABLE (PREFIX_0FAE_REG_7_MOD_0) },
10946 { RM_TABLE (RM_0FAE_REG_7_MOD_3) },
c0f3af97
L
10947 },
10948 {
10949 /* MOD_0FB2 */
bf890a93 10950 { "lssS", { Gv, Mp }, 0 },
c0f3af97
L
10951 },
10952 {
10953 /* MOD_0FB4 */
bf890a93 10954 { "lfsS", { Gv, Mp }, 0 },
c0f3af97
L
10955 },
10956 {
10957 /* MOD_0FB5 */
bf890a93 10958 { "lgsS", { Gv, Mp }, 0 },
c0f3af97 10959 },
a8484f96
L
10960 {
10961 /* MOD_0FC3 */
f8687e93 10962 { PREFIX_TABLE (PREFIX_0FC3_MOD_0) },
a8484f96 10963 },
963f3586
IT
10964 {
10965 /* MOD_0FC7_REG_3 */
a8484f96 10966 { "xrstors", { FXSAVE }, 0 },
963f3586
IT
10967 },
10968 {
10969 /* MOD_0FC7_REG_4 */
bf890a93 10970 { "xsavec", { FXSAVE }, 0 },
963f3586
IT
10971 },
10972 {
10973 /* MOD_0FC7_REG_5 */
bf890a93 10974 { "xsaves", { FXSAVE }, 0 },
963f3586 10975 },
c0f3af97
L
10976 {
10977 /* MOD_0FC7_REG_6 */
f8687e93
JB
10978 { PREFIX_TABLE (PREFIX_0FC7_REG_6_MOD_0) },
10979 { PREFIX_TABLE (PREFIX_0FC7_REG_6_MOD_3) }
c0f3af97
L
10980 },
10981 {
10982 /* MOD_0FC7_REG_7 */
bf890a93 10983 { "vmptrst", { Mq }, 0 },
f8687e93 10984 { PREFIX_TABLE (PREFIX_0FC7_REG_7_MOD_3) }
c0f3af97
L
10985 },
10986 {
10987 /* MOD_0FD7 */
592d1631 10988 { Bad_Opcode },
bf890a93 10989 { "pmovmskb", { Gdq, MS }, 0 },
c0f3af97
L
10990 },
10991 {
10992 /* MOD_0FE7_PREFIX_2 */
bf890a93 10993 { "movntdq", { Mx, XM }, 0 },
c0f3af97
L
10994 },
10995 {
10996 /* MOD_0FF0_PREFIX_3 */
bf890a93 10997 { "lddqu", { XM, M }, 0 },
c0f3af97
L
10998 },
10999 {
11000 /* MOD_0F382A_PREFIX_2 */
bf890a93 11001 { "movntdqa", { XM, Mx }, 0 },
c0f3af97 11002 },
260cd341
LC
11003 {
11004 /* MOD_VEX_0F3849_X86_64_P_0_W_0 */
11005 { VEX_LEN_TABLE (VEX_LEN_0F3849_X86_64_P_0_W_0_M_0) },
11006 { REG_TABLE (REG_VEX_0F3849_X86_64_P_0_W_0_M_1) },
11007 },
11008 {
11009 /* MOD_VEX_0F3849_X86_64_P_2_W_0 */
11010 { VEX_LEN_TABLE (VEX_LEN_0F3849_X86_64_P_2_W_0_M_0) },
11011 },
11012 {
11013 /* MOD_VEX_0F3849_X86_64_P_3_W_0 */
11014 { Bad_Opcode },
11015 { VEX_LEN_TABLE (VEX_LEN_0F3849_X86_64_P_3_W_0_M_0) },
11016 },
11017 {
11018 /* MOD_VEX_0F384B_X86_64_P_1_W_0 */
11019 { VEX_LEN_TABLE (VEX_LEN_0F384B_X86_64_P_1_W_0_M_0) },
11020 },
11021 {
11022 /* MOD_VEX_0F384B_X86_64_P_2_W_0 */
11023 { VEX_LEN_TABLE (VEX_LEN_0F384B_X86_64_P_2_W_0_M_0) },
11024 },
11025 {
11026 /* MOD_VEX_0F384B_X86_64_P_3_W_0 */
11027 { VEX_LEN_TABLE (VEX_LEN_0F384B_X86_64_P_3_W_0_M_0) },
11028 },
11029 {
11030 /* MOD_VEX_0F385C_X86_64_P_1_W_0 */
11031 { Bad_Opcode },
11032 { VEX_LEN_TABLE (VEX_LEN_0F385C_X86_64_P_1_W_0_M_0) },
11033 },
11034 {
11035 /* MOD_VEX_0F385E_X86_64_P_0_W_0 */
11036 { Bad_Opcode },
11037 { VEX_LEN_TABLE (VEX_LEN_0F385E_X86_64_P_0_W_0_M_0) },
11038 },
11039 {
11040 /* MOD_VEX_0F385E_X86_64_P_1_W_0 */
11041 { Bad_Opcode },
11042 { VEX_LEN_TABLE (VEX_LEN_0F385E_X86_64_P_1_W_0_M_0) },
11043 },
11044 {
11045 /* MOD_VEX_0F385E_X86_64_P_2_W_0 */
11046 { Bad_Opcode },
11047 { VEX_LEN_TABLE (VEX_LEN_0F385E_X86_64_P_2_W_0_M_0) },
11048 },
11049 {
11050 /* MOD_VEX_0F385E_X86_64_P_3_W_0 */
11051 { Bad_Opcode },
11052 { VEX_LEN_TABLE (VEX_LEN_0F385E_X86_64_P_3_W_0_M_0) },
11053 },
603555e5
L
11054 {
11055 /* MOD_0F38F5_PREFIX_2 */
11056 { "wrussK", { M, Gdq }, PREFIX_OPCODE },
11057 },
11058 {
11059 /* MOD_0F38F6_PREFIX_0 */
11060 { "wrssK", { M, Gdq }, PREFIX_OPCODE },
11061 },
5d79adc4
L
11062 {
11063 /* MOD_0F38F8_PREFIX_1 */
11064 { "enqcmds", { Gva, M }, PREFIX_OPCODE },
11065 },
c0a30a9f
L
11066 {
11067 /* MOD_0F38F8_PREFIX_2 */
11068 { "movdir64b", { Gva, M }, PREFIX_OPCODE },
11069 },
5d79adc4
L
11070 {
11071 /* MOD_0F38F8_PREFIX_3 */
11072 { "enqcmd", { Gva, M }, PREFIX_OPCODE },
11073 },
c0a30a9f
L
11074 {
11075 /* MOD_0F38F9_PREFIX_0 */
77ad8092 11076 { "movdiri", { Ev, Gv }, PREFIX_OPCODE },
c0a30a9f 11077 },
c0f3af97
L
11078 {
11079 /* MOD_62_32BIT */
bf890a93 11080 { "bound{S|}", { Gv, Ma }, 0 },
43234a1e 11081 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
11082 },
11083 {
11084 /* MOD_C4_32BIT */
bf890a93 11085 { "lesS", { Gv, Mp }, 0 },
c0f3af97
L
11086 { VEX_C4_TABLE (VEX_0F) },
11087 },
11088 {
11089 /* MOD_C5_32BIT */
bf890a93 11090 { "ldsS", { Gv, Mp }, 0 },
c0f3af97
L
11091 { VEX_C5_TABLE (VEX_0F) },
11092 },
11093 {
592a252b
L
11094 /* MOD_VEX_0F12_PREFIX_0 */
11095 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
11096 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
c0f3af97 11097 },
18897deb
JB
11098 {
11099 /* MOD_VEX_0F12_PREFIX_2 */
11100 { VEX_LEN_TABLE (VEX_LEN_0F12_P_2_M_0) },
11101 },
c0f3af97 11102 {
592a252b
L
11103 /* MOD_VEX_0F13 */
11104 { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
c0f3af97
L
11105 },
11106 {
592a252b
L
11107 /* MOD_VEX_0F16_PREFIX_0 */
11108 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
11109 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
c0f3af97 11110 },
18897deb
JB
11111 {
11112 /* MOD_VEX_0F16_PREFIX_2 */
11113 { VEX_LEN_TABLE (VEX_LEN_0F16_P_2_M_0) },
11114 },
c0f3af97 11115 {
592a252b
L
11116 /* MOD_VEX_0F17 */
11117 { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
c0f3af97
L
11118 },
11119 {
592a252b 11120 /* MOD_VEX_0F2B */
bf926894 11121 { "vmovntpX", { Mx, XM }, PREFIX_OPCODE },
c0f3af97 11122 },
ab4e4ed5
AF
11123 {
11124 /* MOD_VEX_W_0_0F41_P_0_LEN_1 */
11125 { Bad_Opcode },
11126 { "kandw", { MaskG, MaskVex, MaskR }, 0 },
11127 },
11128 {
11129 /* MOD_VEX_W_1_0F41_P_0_LEN_1 */
11130 { Bad_Opcode },
11131 { "kandq", { MaskG, MaskVex, MaskR }, 0 },
11132 },
11133 {
11134 /* MOD_VEX_W_0_0F41_P_2_LEN_1 */
11135 { Bad_Opcode },
11136 { "kandb", { MaskG, MaskVex, MaskR }, 0 },
11137 },
11138 {
11139 /* MOD_VEX_W_1_0F41_P_2_LEN_1 */
11140 { Bad_Opcode },
11141 { "kandd", { MaskG, MaskVex, MaskR }, 0 },
11142 },
11143 {
11144 /* MOD_VEX_W_0_0F42_P_0_LEN_1 */
11145 { Bad_Opcode },
11146 { "kandnw", { MaskG, MaskVex, MaskR }, 0 },
11147 },
11148 {
11149 /* MOD_VEX_W_1_0F42_P_0_LEN_1 */
11150 { Bad_Opcode },
11151 { "kandnq", { MaskG, MaskVex, MaskR }, 0 },
11152 },
11153 {
11154 /* MOD_VEX_W_0_0F42_P_2_LEN_1 */
11155 { Bad_Opcode },
11156 { "kandnb", { MaskG, MaskVex, MaskR }, 0 },
11157 },
11158 {
11159 /* MOD_VEX_W_1_0F42_P_2_LEN_1 */
11160 { Bad_Opcode },
11161 { "kandnd", { MaskG, MaskVex, MaskR }, 0 },
11162 },
11163 {
11164 /* MOD_VEX_W_0_0F44_P_0_LEN_0 */
11165 { Bad_Opcode },
11166 { "knotw", { MaskG, MaskR }, 0 },
11167 },
11168 {
11169 /* MOD_VEX_W_1_0F44_P_0_LEN_0 */
11170 { Bad_Opcode },
11171 { "knotq", { MaskG, MaskR }, 0 },
11172 },
11173 {
11174 /* MOD_VEX_W_0_0F44_P_2_LEN_0 */
11175 { Bad_Opcode },
11176 { "knotb", { MaskG, MaskR }, 0 },
11177 },
11178 {
11179 /* MOD_VEX_W_1_0F44_P_2_LEN_0 */
11180 { Bad_Opcode },
11181 { "knotd", { MaskG, MaskR }, 0 },
11182 },
11183 {
11184 /* MOD_VEX_W_0_0F45_P_0_LEN_1 */
11185 { Bad_Opcode },
11186 { "korw", { MaskG, MaskVex, MaskR }, 0 },
11187 },
11188 {
11189 /* MOD_VEX_W_1_0F45_P_0_LEN_1 */
11190 { Bad_Opcode },
11191 { "korq", { MaskG, MaskVex, MaskR }, 0 },
11192 },
11193 {
11194 /* MOD_VEX_W_0_0F45_P_2_LEN_1 */
11195 { Bad_Opcode },
11196 { "korb", { MaskG, MaskVex, MaskR }, 0 },
11197 },
11198 {
11199 /* MOD_VEX_W_1_0F45_P_2_LEN_1 */
11200 { Bad_Opcode },
11201 { "kord", { MaskG, MaskVex, MaskR }, 0 },
11202 },
11203 {
11204 /* MOD_VEX_W_0_0F46_P_0_LEN_1 */
11205 { Bad_Opcode },
11206 { "kxnorw", { MaskG, MaskVex, MaskR }, 0 },
11207 },
11208 {
11209 /* MOD_VEX_W_1_0F46_P_0_LEN_1 */
11210 { Bad_Opcode },
11211 { "kxnorq", { MaskG, MaskVex, MaskR }, 0 },
11212 },
11213 {
11214 /* MOD_VEX_W_0_0F46_P_2_LEN_1 */
11215 { Bad_Opcode },
11216 { "kxnorb", { MaskG, MaskVex, MaskR }, 0 },
11217 },
11218 {
11219 /* MOD_VEX_W_1_0F46_P_2_LEN_1 */
11220 { Bad_Opcode },
11221 { "kxnord", { MaskG, MaskVex, MaskR }, 0 },
11222 },
11223 {
11224 /* MOD_VEX_W_0_0F47_P_0_LEN_1 */
11225 { Bad_Opcode },
11226 { "kxorw", { MaskG, MaskVex, MaskR }, 0 },
11227 },
11228 {
11229 /* MOD_VEX_W_1_0F47_P_0_LEN_1 */
11230 { Bad_Opcode },
11231 { "kxorq", { MaskG, MaskVex, MaskR }, 0 },
11232 },
11233 {
11234 /* MOD_VEX_W_0_0F47_P_2_LEN_1 */
11235 { Bad_Opcode },
11236 { "kxorb", { MaskG, MaskVex, MaskR }, 0 },
11237 },
11238 {
11239 /* MOD_VEX_W_1_0F47_P_2_LEN_1 */
11240 { Bad_Opcode },
11241 { "kxord", { MaskG, MaskVex, MaskR }, 0 },
11242 },
11243 {
11244 /* MOD_VEX_W_0_0F4A_P_0_LEN_1 */
11245 { Bad_Opcode },
11246 { "kaddw", { MaskG, MaskVex, MaskR }, 0 },
11247 },
11248 {
11249 /* MOD_VEX_W_1_0F4A_P_0_LEN_1 */
11250 { Bad_Opcode },
11251 { "kaddq", { MaskG, MaskVex, MaskR }, 0 },
11252 },
11253 {
11254 /* MOD_VEX_W_0_0F4A_P_2_LEN_1 */
11255 { Bad_Opcode },
11256 { "kaddb", { MaskG, MaskVex, MaskR }, 0 },
11257 },
11258 {
11259 /* MOD_VEX_W_1_0F4A_P_2_LEN_1 */
11260 { Bad_Opcode },
11261 { "kaddd", { MaskG, MaskVex, MaskR }, 0 },
11262 },
11263 {
11264 /* MOD_VEX_W_0_0F4B_P_0_LEN_1 */
11265 { Bad_Opcode },
11266 { "kunpckwd", { MaskG, MaskVex, MaskR }, 0 },
11267 },
11268 {
11269 /* MOD_VEX_W_1_0F4B_P_0_LEN_1 */
11270 { Bad_Opcode },
11271 { "kunpckdq", { MaskG, MaskVex, MaskR }, 0 },
11272 },
11273 {
11274 /* MOD_VEX_W_0_0F4B_P_2_LEN_1 */
11275 { Bad_Opcode },
11276 { "kunpckbw", { MaskG, MaskVex, MaskR }, 0 },
11277 },
c0f3af97 11278 {
592a252b 11279 /* MOD_VEX_0F50 */
592d1631 11280 { Bad_Opcode },
bf926894 11281 { "vmovmskpX", { Gdq, XS }, PREFIX_OPCODE },
c0f3af97
L
11282 },
11283 {
592a252b 11284 /* MOD_VEX_0F71_REG_2 */
592d1631 11285 { Bad_Opcode },
592a252b 11286 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
b844680a
L
11287 },
11288 {
592a252b 11289 /* MOD_VEX_0F71_REG_4 */
592d1631 11290 { Bad_Opcode },
592a252b 11291 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
b844680a
L
11292 },
11293 {
592a252b 11294 /* MOD_VEX_0F71_REG_6 */
592d1631 11295 { Bad_Opcode },
592a252b 11296 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
b844680a
L
11297 },
11298 {
592a252b 11299 /* MOD_VEX_0F72_REG_2 */
592d1631 11300 { Bad_Opcode },
592a252b 11301 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
b844680a 11302 },
d8faab4e 11303 {
592a252b 11304 /* MOD_VEX_0F72_REG_4 */
592d1631 11305 { Bad_Opcode },
592a252b 11306 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
d8faab4e
L
11307 },
11308 {
592a252b 11309 /* MOD_VEX_0F72_REG_6 */
592d1631 11310 { Bad_Opcode },
592a252b 11311 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
d8faab4e 11312 },
876d4bfa 11313 {
592a252b 11314 /* MOD_VEX_0F73_REG_2 */
592d1631 11315 { Bad_Opcode },
592a252b 11316 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
876d4bfa
L
11317 },
11318 {
592a252b 11319 /* MOD_VEX_0F73_REG_3 */
592d1631 11320 { Bad_Opcode },
592a252b 11321 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
475a2301
L
11322 },
11323 {
592a252b 11324 /* MOD_VEX_0F73_REG_6 */
592d1631 11325 { Bad_Opcode },
592a252b 11326 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
876d4bfa
L
11327 },
11328 {
592a252b 11329 /* MOD_VEX_0F73_REG_7 */
592d1631 11330 { Bad_Opcode },
592a252b 11331 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
876d4bfa 11332 },
ab4e4ed5
AF
11333 {
11334 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
11335 { "kmovw", { Ew, MaskG }, 0 },
11336 { Bad_Opcode },
11337 },
11338 {
11339 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
11340 { "kmovq", { Eq, MaskG }, 0 },
11341 { Bad_Opcode },
11342 },
11343 {
11344 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
11345 { "kmovb", { Eb, MaskG }, 0 },
11346 { Bad_Opcode },
11347 },
11348 {
11349 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
11350 { "kmovd", { Ed, MaskG }, 0 },
11351 { Bad_Opcode },
11352 },
11353 {
11354 /* MOD_VEX_W_0_0F92_P_0_LEN_0 */
11355 { Bad_Opcode },
11356 { "kmovw", { MaskG, Rdq }, 0 },
11357 },
11358 {
11359 /* MOD_VEX_W_0_0F92_P_2_LEN_0 */
11360 { Bad_Opcode },
11361 { "kmovb", { MaskG, Rdq }, 0 },
11362 },
11363 {
58a211d2 11364 /* MOD_VEX_0F92_P_3_LEN_0 */
ab4e4ed5 11365 { Bad_Opcode },
58a211d2 11366 { "kmovK", { MaskG, Rdq }, 0 },
ab4e4ed5
AF
11367 },
11368 {
11369 /* MOD_VEX_W_0_0F93_P_0_LEN_0 */
11370 { Bad_Opcode },
11371 { "kmovw", { Gdq, MaskR }, 0 },
11372 },
11373 {
11374 /* MOD_VEX_W_0_0F93_P_2_LEN_0 */
11375 { Bad_Opcode },
11376 { "kmovb", { Gdq, MaskR }, 0 },
11377 },
11378 {
58a211d2 11379 /* MOD_VEX_0F93_P_3_LEN_0 */
ab4e4ed5 11380 { Bad_Opcode },
58a211d2 11381 { "kmovK", { Gdq, MaskR }, 0 },
ab4e4ed5
AF
11382 },
11383 {
11384 /* MOD_VEX_W_0_0F98_P_0_LEN_0 */
11385 { Bad_Opcode },
11386 { "kortestw", { MaskG, MaskR }, 0 },
11387 },
11388 {
11389 /* MOD_VEX_W_1_0F98_P_0_LEN_0 */
11390 { Bad_Opcode },
11391 { "kortestq", { MaskG, MaskR }, 0 },
11392 },
11393 {
11394 /* MOD_VEX_W_0_0F98_P_2_LEN_0 */
11395 { Bad_Opcode },
11396 { "kortestb", { MaskG, MaskR }, 0 },
11397 },
11398 {
11399 /* MOD_VEX_W_1_0F98_P_2_LEN_0 */
11400 { Bad_Opcode },
11401 { "kortestd", { MaskG, MaskR }, 0 },
11402 },
11403 {
11404 /* MOD_VEX_W_0_0F99_P_0_LEN_0 */
11405 { Bad_Opcode },
11406 { "ktestw", { MaskG, MaskR }, 0 },
11407 },
11408 {
11409 /* MOD_VEX_W_1_0F99_P_0_LEN_0 */
11410 { Bad_Opcode },
11411 { "ktestq", { MaskG, MaskR }, 0 },
11412 },
11413 {
11414 /* MOD_VEX_W_0_0F99_P_2_LEN_0 */
11415 { Bad_Opcode },
11416 { "ktestb", { MaskG, MaskR }, 0 },
11417 },
11418 {
11419 /* MOD_VEX_W_1_0F99_P_2_LEN_0 */
11420 { Bad_Opcode },
11421 { "ktestd", { MaskG, MaskR }, 0 },
11422 },
876d4bfa 11423 {
592a252b
L
11424 /* MOD_VEX_0FAE_REG_2 */
11425 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
876d4bfa 11426 },
bbedc832 11427 {
592a252b
L
11428 /* MOD_VEX_0FAE_REG_3 */
11429 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
bbedc832 11430 },
144c41d9 11431 {
592a252b 11432 /* MOD_VEX_0FD7_PREFIX_2 */
592d1631 11433 { Bad_Opcode },
ec6f095a 11434 { "vpmovmskb", { Gdq, XS }, 0 },
144c41d9 11435 },
1afd85e3 11436 {
592a252b 11437 /* MOD_VEX_0FE7_PREFIX_2 */
ec6f095a 11438 { "vmovntdq", { Mx, XM }, 0 },
1afd85e3
L
11439 },
11440 {
592a252b 11441 /* MOD_VEX_0FF0_PREFIX_3 */
ec6f095a 11442 { "vlddqu", { XM, M }, 0 },
92fddf8e 11443 },
75c135a8 11444 {
592a252b
L
11445 /* MOD_VEX_0F381A_PREFIX_2 */
11446 { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
75c135a8 11447 },
1afd85e3 11448 {
592a252b 11449 /* MOD_VEX_0F382A_PREFIX_2 */
ec6f095a 11450 { "vmovntdqa", { XM, Mx }, 0 },
1afd85e3 11451 },
75c135a8 11452 {
592a252b
L
11453 /* MOD_VEX_0F382C_PREFIX_2 */
11454 { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
75c135a8 11455 },
1afd85e3 11456 {
592a252b
L
11457 /* MOD_VEX_0F382D_PREFIX_2 */
11458 { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
1afd85e3
L
11459 },
11460 {
592a252b
L
11461 /* MOD_VEX_0F382E_PREFIX_2 */
11462 { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
1afd85e3
L
11463 },
11464 {
592a252b
L
11465 /* MOD_VEX_0F382F_PREFIX_2 */
11466 { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
1afd85e3 11467 },
6c30d220
L
11468 {
11469 /* MOD_VEX_0F385A_PREFIX_2 */
11470 { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) },
11471 },
11472 {
11473 /* MOD_VEX_0F388C_PREFIX_2 */
492a76aa 11474 { "vpmaskmov%DQ", { XM, Vex, Mx }, 0 },
6c30d220
L
11475 },
11476 {
11477 /* MOD_VEX_0F388E_PREFIX_2 */
492a76aa 11478 { "vpmaskmov%DQ", { Mx, Vex, XM }, 0 },
6c30d220 11479 },
ab4e4ed5
AF
11480 {
11481 /* MOD_VEX_W_0_0F3A30_P_2_LEN_0 */
11482 { Bad_Opcode },
11483 { "kshiftrb", { MaskG, MaskR, Ib }, 0 },
11484 },
11485 {
11486 /* MOD_VEX_W_1_0F3A30_P_2_LEN_0 */
11487 { Bad_Opcode },
11488 { "kshiftrw", { MaskG, MaskR, Ib }, 0 },
11489 },
11490 {
11491 /* MOD_VEX_W_0_0F3A31_P_2_LEN_0 */
11492 { Bad_Opcode },
11493 { "kshiftrd", { MaskG, MaskR, Ib }, 0 },
11494 },
11495 {
11496 /* MOD_VEX_W_1_0F3A31_P_2_LEN_0 */
11497 { Bad_Opcode },
11498 { "kshiftrq", { MaskG, MaskR, Ib }, 0 },
11499 },
11500 {
11501 /* MOD_VEX_W_0_0F3A32_P_2_LEN_0 */
11502 { Bad_Opcode },
11503 { "kshiftlb", { MaskG, MaskR, Ib }, 0 },
11504 },
11505 {
11506 /* MOD_VEX_W_1_0F3A32_P_2_LEN_0 */
11507 { Bad_Opcode },
11508 { "kshiftlw", { MaskG, MaskR, Ib }, 0 },
11509 },
11510 {
11511 /* MOD_VEX_W_0_0F3A33_P_2_LEN_0 */
11512 { Bad_Opcode },
11513 { "kshiftld", { MaskG, MaskR, Ib }, 0 },
11514 },
11515 {
11516 /* MOD_VEX_W_1_0F3A33_P_2_LEN_0 */
11517 { Bad_Opcode },
11518 { "kshiftlq", { MaskG, MaskR, Ib }, 0 },
11519 },
467bbef0
JB
11520 {
11521 /* MOD_VEX_0FXOP_09_12 */
11522 { Bad_Opcode },
11523 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_12_M_1) },
11524 },
ad692897
L
11525
11526#include "i386-dis-evex-mod.h"
b844680a
L
11527};
11528
1ceb70f8 11529static const struct dis386 rm_table[][8] = {
42164a71
L
11530 {
11531 /* RM_C6_REG_7 */
bf890a93 11532 { "xabort", { Skip_MODRM, Ib }, 0 },
42164a71
L
11533 },
11534 {
11535 /* RM_C7_REG_7 */
376cd056 11536 { "xbeginT", { Skip_MODRM, Jdqw }, 0 },
42164a71 11537 },
b844680a 11538 {
1ceb70f8 11539 /* RM_0F01_REG_0 */
a4e78aa5 11540 { "enclv", { Skip_MODRM }, 0 },
bf890a93
IT
11541 { "vmcall", { Skip_MODRM }, 0 },
11542 { "vmlaunch", { Skip_MODRM }, 0 },
11543 { "vmresume", { Skip_MODRM }, 0 },
11544 { "vmxoff", { Skip_MODRM }, 0 },
be3a8dca 11545 { "pconfig", { Skip_MODRM }, 0 },
b844680a
L
11546 },
11547 {
1ceb70f8 11548 /* RM_0F01_REG_1 */
bf890a93
IT
11549 { "monitor", { { OP_Monitor, 0 } }, 0 },
11550 { "mwait", { { OP_Mwait, 0 } }, 0 },
11551 { "clac", { Skip_MODRM }, 0 },
11552 { "stac", { Skip_MODRM }, 0 },
2cf200a4
IT
11553 { Bad_Opcode },
11554 { Bad_Opcode },
11555 { Bad_Opcode },
bf890a93 11556 { "encls", { Skip_MODRM }, 0 },
b844680a 11557 },
475a2301
L
11558 {
11559 /* RM_0F01_REG_2 */
bf890a93
IT
11560 { "xgetbv", { Skip_MODRM }, 0 },
11561 { "xsetbv", { Skip_MODRM }, 0 },
8729a6f6
L
11562 { Bad_Opcode },
11563 { Bad_Opcode },
bf890a93
IT
11564 { "vmfunc", { Skip_MODRM }, 0 },
11565 { "xend", { Skip_MODRM }, 0 },
11566 { "xtest", { Skip_MODRM }, 0 },
11567 { "enclu", { Skip_MODRM }, 0 },
475a2301 11568 },
b844680a 11569 {
1ceb70f8 11570 /* RM_0F01_REG_3 */
bf890a93 11571 { "vmrun", { Skip_MODRM }, 0 },
a847e322 11572 { PREFIX_TABLE (PREFIX_0F01_REG_3_RM_1) },
bf890a93
IT
11573 { "vmload", { Skip_MODRM }, 0 },
11574 { "vmsave", { Skip_MODRM }, 0 },
11575 { "stgi", { Skip_MODRM }, 0 },
11576 { "clgi", { Skip_MODRM }, 0 },
11577 { "skinit", { Skip_MODRM }, 0 },
11578 { "invlpga", { Skip_MODRM }, 0 },
4e7d34a6 11579 },
8eab4136 11580 {
f8687e93
JB
11581 /* RM_0F01_REG_5_MOD_3 */
11582 { PREFIX_TABLE (PREFIX_0F01_REG_5_MOD_3_RM_0) },
bb651e8b 11583 { PREFIX_TABLE (PREFIX_0F01_REG_5_MOD_3_RM_1) },
f8687e93 11584 { PREFIX_TABLE (PREFIX_0F01_REG_5_MOD_3_RM_2) },
8eab4136
L
11585 { Bad_Opcode },
11586 { Bad_Opcode },
11587 { Bad_Opcode },
11588 { "rdpkru", { Skip_MODRM }, 0 },
11589 { "wrpkru", { Skip_MODRM }, 0 },
11590 },
4e7d34a6 11591 {
f8687e93 11592 /* RM_0F01_REG_7_MOD_3 */
bf890a93
IT
11593 { "swapgs", { Skip_MODRM }, 0 },
11594 { "rdtscp", { Skip_MODRM }, 0 },
267b8516
JB
11595 { PREFIX_TABLE (PREFIX_0F01_REG_7_MOD_3_RM_2) },
11596 { PREFIX_TABLE (PREFIX_0F01_REG_7_MOD_3_RM_3) },
bf890a93 11597 { "clzero", { Skip_MODRM }, 0 },
142861df 11598 { "rdpru", { Skip_MODRM }, 0 },
b844680a 11599 },
603555e5 11600 {
f8687e93 11601 /* RM_0F1E_P_1_MOD_3_REG_7 */
603555e5
L
11602 { "nopQ", { Ev }, 0 },
11603 { "nopQ", { Ev }, 0 },
11604 { "endbr64", { Skip_MODRM }, PREFIX_OPCODE },
11605 { "endbr32", { Skip_MODRM }, PREFIX_OPCODE },
11606 { "nopQ", { Ev }, 0 },
11607 { "nopQ", { Ev }, 0 },
11608 { "nopQ", { Ev }, 0 },
11609 { "nopQ", { Ev }, 0 },
11610 },
b844680a 11611 {
f8687e93 11612 /* RM_0FAE_REG_6_MOD_3 */
bf890a93 11613 { "mfence", { Skip_MODRM }, 0 },
b844680a 11614 },
bbedc832 11615 {
f8687e93 11616 /* RM_0FAE_REG_7_MOD_3 */
b5cefcca
L
11617 { "sfence", { Skip_MODRM }, 0 },
11618
144c41d9 11619 },
260cd341
LC
11620 {
11621 /* RM_VEX_0F3849_X86_64_P_0_W_0_M_1_R_0 */
11622 { VEX_LEN_TABLE (VEX_LEN_0F3849_X86_64_P_0_W_0_M_1_REG_0_RM_0) },
11623 },
b844680a
L
11624};
11625
c608c12e
AM
11626#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
11627
f16cd0d5
L
11628/* We use the high bit to indicate different name for the same
11629 prefix. */
f16cd0d5 11630#define REP_PREFIX (0xf3 | 0x100)
42164a71
L
11631#define XACQUIRE_PREFIX (0xf2 | 0x200)
11632#define XRELEASE_PREFIX (0xf3 | 0x400)
7e8b059b 11633#define BND_PREFIX (0xf2 | 0x400)
04ef582a 11634#define NOTRACK_PREFIX (0x3e | 0x100)
f16cd0d5 11635
1d67fe3b
TT
11636/* Remember if the current op is a jump instruction. */
11637static bfd_boolean op_is_jump = FALSE;
11638
f16cd0d5 11639static int
26ca5450 11640ckprefix (void)
252b5132 11641{
f16cd0d5 11642 int newrex, i, length;
52b15da3 11643 rex = 0;
252b5132 11644 prefixes = 0;
7d421014 11645 used_prefixes = 0;
52b15da3 11646 rex_used = 0;
f16cd0d5
L
11647 last_lock_prefix = -1;
11648 last_repz_prefix = -1;
11649 last_repnz_prefix = -1;
11650 last_data_prefix = -1;
11651 last_addr_prefix = -1;
11652 last_rex_prefix = -1;
11653 last_seg_prefix = -1;
d9949a36 11654 fwait_prefix = -1;
285ca992 11655 active_seg_prefix = 0;
f310f33d
L
11656 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
11657 all_prefixes[i] = 0;
11658 i = 0;
f16cd0d5
L
11659 length = 0;
11660 /* The maximum instruction length is 15bytes. */
11661 while (length < MAX_CODE_LENGTH - 1)
252b5132
RH
11662 {
11663 FETCH_DATA (the_info, codep + 1);
52b15da3 11664 newrex = 0;
252b5132
RH
11665 switch (*codep)
11666 {
52b15da3
JH
11667 /* REX prefixes family. */
11668 case 0x40:
11669 case 0x41:
11670 case 0x42:
11671 case 0x43:
11672 case 0x44:
11673 case 0x45:
11674 case 0x46:
11675 case 0x47:
11676 case 0x48:
11677 case 0x49:
11678 case 0x4a:
11679 case 0x4b:
11680 case 0x4c:
11681 case 0x4d:
11682 case 0x4e:
11683 case 0x4f:
f16cd0d5
L
11684 if (address_mode == mode_64bit)
11685 newrex = *codep;
11686 else
11687 return 1;
11688 last_rex_prefix = i;
52b15da3 11689 break;
252b5132
RH
11690 case 0xf3:
11691 prefixes |= PREFIX_REPZ;
f16cd0d5 11692 last_repz_prefix = i;
252b5132
RH
11693 break;
11694 case 0xf2:
11695 prefixes |= PREFIX_REPNZ;
f16cd0d5 11696 last_repnz_prefix = i;
252b5132
RH
11697 break;
11698 case 0xf0:
11699 prefixes |= PREFIX_LOCK;
f16cd0d5 11700 last_lock_prefix = i;
252b5132
RH
11701 break;
11702 case 0x2e:
11703 prefixes |= PREFIX_CS;
f16cd0d5 11704 last_seg_prefix = i;
285ca992 11705 active_seg_prefix = PREFIX_CS;
252b5132
RH
11706 break;
11707 case 0x36:
11708 prefixes |= PREFIX_SS;
f16cd0d5 11709 last_seg_prefix = i;
285ca992 11710 active_seg_prefix = PREFIX_SS;
252b5132
RH
11711 break;
11712 case 0x3e:
11713 prefixes |= PREFIX_DS;
f16cd0d5 11714 last_seg_prefix = i;
285ca992 11715 active_seg_prefix = PREFIX_DS;
252b5132
RH
11716 break;
11717 case 0x26:
11718 prefixes |= PREFIX_ES;
f16cd0d5 11719 last_seg_prefix = i;
285ca992 11720 active_seg_prefix = PREFIX_ES;
252b5132
RH
11721 break;
11722 case 0x64:
11723 prefixes |= PREFIX_FS;
f16cd0d5 11724 last_seg_prefix = i;
285ca992 11725 active_seg_prefix = PREFIX_FS;
252b5132
RH
11726 break;
11727 case 0x65:
11728 prefixes |= PREFIX_GS;
f16cd0d5 11729 last_seg_prefix = i;
285ca992 11730 active_seg_prefix = PREFIX_GS;
252b5132
RH
11731 break;
11732 case 0x66:
11733 prefixes |= PREFIX_DATA;
f16cd0d5 11734 last_data_prefix = i;
252b5132
RH
11735 break;
11736 case 0x67:
11737 prefixes |= PREFIX_ADDR;
f16cd0d5 11738 last_addr_prefix = i;
252b5132 11739 break;
5076851f 11740 case FWAIT_OPCODE:
252b5132
RH
11741 /* fwait is really an instruction. If there are prefixes
11742 before the fwait, they belong to the fwait, *not* to the
11743 following instruction. */
d9949a36 11744 fwait_prefix = i;
3e7d61b2 11745 if (prefixes || rex)
252b5132
RH
11746 {
11747 prefixes |= PREFIX_FWAIT;
11748 codep++;
6c067bbb
RM
11749 /* This ensures that the previous REX prefixes are noticed
11750 as unused prefixes, as in the return case below. */
11751 rex_used = rex;
f16cd0d5 11752 return 1;
252b5132
RH
11753 }
11754 prefixes = PREFIX_FWAIT;
11755 break;
11756 default:
f16cd0d5 11757 return 1;
252b5132 11758 }
52b15da3
JH
11759 /* Rex is ignored when followed by another prefix. */
11760 if (rex)
11761 {
3e7d61b2 11762 rex_used = rex;
f16cd0d5 11763 return 1;
52b15da3 11764 }
f16cd0d5 11765 if (*codep != FWAIT_OPCODE)
4e9ac44a 11766 all_prefixes[i++] = *codep;
52b15da3 11767 rex = newrex;
252b5132 11768 codep++;
f16cd0d5
L
11769 length++;
11770 }
11771 return 0;
11772}
11773
7d421014
ILT
11774/* Return the name of the prefix byte PREF, or NULL if PREF is not a
11775 prefix byte. */
11776
11777static const char *
26ca5450 11778prefix_name (int pref, int sizeflag)
7d421014 11779{
0003779b
L
11780 static const char *rexes [16] =
11781 {
11782 "rex", /* 0x40 */
11783 "rex.B", /* 0x41 */
11784 "rex.X", /* 0x42 */
11785 "rex.XB", /* 0x43 */
11786 "rex.R", /* 0x44 */
11787 "rex.RB", /* 0x45 */
11788 "rex.RX", /* 0x46 */
11789 "rex.RXB", /* 0x47 */
11790 "rex.W", /* 0x48 */
11791 "rex.WB", /* 0x49 */
11792 "rex.WX", /* 0x4a */
11793 "rex.WXB", /* 0x4b */
11794 "rex.WR", /* 0x4c */
11795 "rex.WRB", /* 0x4d */
11796 "rex.WRX", /* 0x4e */
11797 "rex.WRXB", /* 0x4f */
11798 };
11799
7d421014
ILT
11800 switch (pref)
11801 {
52b15da3
JH
11802 /* REX prefixes family. */
11803 case 0x40:
52b15da3 11804 case 0x41:
52b15da3 11805 case 0x42:
52b15da3 11806 case 0x43:
52b15da3 11807 case 0x44:
52b15da3 11808 case 0x45:
52b15da3 11809 case 0x46:
52b15da3 11810 case 0x47:
52b15da3 11811 case 0x48:
52b15da3 11812 case 0x49:
52b15da3 11813 case 0x4a:
52b15da3 11814 case 0x4b:
52b15da3 11815 case 0x4c:
52b15da3 11816 case 0x4d:
52b15da3 11817 case 0x4e:
52b15da3 11818 case 0x4f:
0003779b 11819 return rexes [pref - 0x40];
7d421014
ILT
11820 case 0xf3:
11821 return "repz";
11822 case 0xf2:
11823 return "repnz";
11824 case 0xf0:
11825 return "lock";
11826 case 0x2e:
11827 return "cs";
11828 case 0x36:
11829 return "ss";
11830 case 0x3e:
11831 return "ds";
11832 case 0x26:
11833 return "es";
11834 case 0x64:
11835 return "fs";
11836 case 0x65:
11837 return "gs";
11838 case 0x66:
11839 return (sizeflag & DFLAG) ? "data16" : "data32";
11840 case 0x67:
cb712a9e 11841 if (address_mode == mode_64bit)
db6eb5be 11842 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 11843 else
2888cb7a 11844 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
11845 case FWAIT_OPCODE:
11846 return "fwait";
f16cd0d5
L
11847 case REP_PREFIX:
11848 return "rep";
42164a71
L
11849 case XACQUIRE_PREFIX:
11850 return "xacquire";
11851 case XRELEASE_PREFIX:
11852 return "xrelease";
7e8b059b
L
11853 case BND_PREFIX:
11854 return "bnd";
04ef582a
L
11855 case NOTRACK_PREFIX:
11856 return "notrack";
7d421014
ILT
11857 default:
11858 return NULL;
11859 }
11860}
11861
ce518a5f
L
11862static char op_out[MAX_OPERANDS][100];
11863static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 11864static int two_source_ops;
ce518a5f
L
11865static bfd_vma op_address[MAX_OPERANDS];
11866static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 11867static bfd_vma start_pc;
ce518a5f 11868
252b5132
RH
11869/*
11870 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
11871 * (see topic "Redundant prefixes" in the "Differences from 8086"
11872 * section of the "Virtual 8086 Mode" chapter.)
11873 * 'pc' should be the address of this instruction, it will
11874 * be used to print the target address if this is a relative jump or call
11875 * The function returns the length of this instruction in bytes.
11876 */
11877
252b5132 11878static char intel_syntax;
9d141669 11879static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
11880static char open_char;
11881static char close_char;
11882static char separator_char;
11883static char scale_char;
11884
5db04b09
L
11885enum x86_64_isa
11886{
d835a58b 11887 amd64 = 1,
5db04b09
L
11888 intel64
11889};
11890
11891static enum x86_64_isa isa64;
11892
e396998b
AM
11893/* Here for backwards compatibility. When gdb stops using
11894 print_insn_i386_att and print_insn_i386_intel these functions can
11895 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 11896int
26ca5450 11897print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
11898{
11899 intel_syntax = 0;
e396998b
AM
11900
11901 return print_insn (pc, info);
252b5132
RH
11902}
11903
11904int
26ca5450 11905print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
11906{
11907 intel_syntax = 1;
e396998b
AM
11908
11909 return print_insn (pc, info);
252b5132
RH
11910}
11911
e396998b 11912int
26ca5450 11913print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
11914{
11915 intel_syntax = -1;
11916
11917 return print_insn (pc, info);
11918}
11919
f59a29b9
L
11920void
11921print_i386_disassembler_options (FILE *stream)
11922{
11923 fprintf (stream, _("\n\
11924The following i386/x86-64 specific disassembler options are supported for use\n\
11925with the -M switch (multiple options should be separated by commas):\n"));
11926
11927 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
11928 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
11929 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
11930 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
11931 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
11932 fprintf (stream, _(" att-mnemonic\n"
11933 " Display instruction in AT&T mnemonic\n"));
11934 fprintf (stream, _(" intel-mnemonic\n"
11935 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
11936 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
11937 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
11938 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
11939 fprintf (stream, _(" data32 Assume 32bit data size\n"));
11940 fprintf (stream, _(" data16 Assume 16bit data size\n"));
11941 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
5db04b09
L
11942 fprintf (stream, _(" amd64 Display instruction in AMD64 ISA\n"));
11943 fprintf (stream, _(" intel64 Display instruction in Intel64 ISA\n"));
f59a29b9
L
11944}
11945
592d1631 11946/* Bad opcode. */
bf890a93 11947static const struct dis386 bad_opcode = { "(bad)", { XX }, 0 };
592d1631 11948
b844680a
L
11949/* Get a pointer to struct dis386 with a valid name. */
11950
11951static const struct dis386 *
8bb15339 11952get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 11953{
91d6fa6a 11954 int vindex, vex_table_index;
b844680a
L
11955
11956 if (dp->name != NULL)
11957 return dp;
11958
11959 switch (dp->op[0].bytemode)
11960 {
1ceb70f8
L
11961 case USE_REG_TABLE:
11962 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
11963 break;
11964
11965 case USE_MOD_TABLE:
91d6fa6a
NC
11966 vindex = modrm.mod == 0x3 ? 1 : 0;
11967 dp = &mod_table[dp->op[1].bytemode][vindex];
1ceb70f8
L
11968 break;
11969
11970 case USE_RM_TABLE:
11971 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
11972 break;
11973
4e7d34a6 11974 case USE_PREFIX_TABLE:
c0f3af97 11975 if (need_vex)
b844680a 11976 {
c0f3af97
L
11977 /* The prefix in VEX is implicit. */
11978 switch (vex.prefix)
11979 {
11980 case 0:
91d6fa6a 11981 vindex = 0;
c0f3af97
L
11982 break;
11983 case REPE_PREFIX_OPCODE:
91d6fa6a 11984 vindex = 1;
c0f3af97
L
11985 break;
11986 case DATA_PREFIX_OPCODE:
91d6fa6a 11987 vindex = 2;
c0f3af97
L
11988 break;
11989 case REPNE_PREFIX_OPCODE:
91d6fa6a 11990 vindex = 3;
c0f3af97
L
11991 break;
11992 default:
11993 abort ();
11994 break;
11995 }
b844680a 11996 }
7bb15c6f 11997 else
b844680a 11998 {
285ca992
L
11999 int last_prefix = -1;
12000 int prefix = 0;
91d6fa6a 12001 vindex = 0;
285ca992
L
12002 /* We check PREFIX_REPNZ and PREFIX_REPZ before PREFIX_DATA.
12003 When there are multiple PREFIX_REPNZ and PREFIX_REPZ, the
12004 last one wins. */
12005 if ((prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) != 0)
b844680a 12006 {
285ca992 12007 if (last_repz_prefix > last_repnz_prefix)
c0f3af97 12008 {
285ca992
L
12009 vindex = 1;
12010 prefix = PREFIX_REPZ;
12011 last_prefix = last_repz_prefix;
c0f3af97
L
12012 }
12013 else
b844680a 12014 {
285ca992
L
12015 vindex = 3;
12016 prefix = PREFIX_REPNZ;
12017 last_prefix = last_repnz_prefix;
b844680a 12018 }
285ca992 12019
507bd325
L
12020 /* Check if prefix should be ignored. */
12021 if ((((prefix_table[dp->op[1].bytemode][vindex].prefix_requirement
12022 & PREFIX_IGNORED) >> PREFIX_IGNORED_SHIFT)
12023 & prefix) != 0)
285ca992
L
12024 vindex = 0;
12025 }
12026
12027 if (vindex == 0 && (prefixes & PREFIX_DATA) != 0)
12028 {
12029 vindex = 2;
12030 prefix = PREFIX_DATA;
12031 last_prefix = last_data_prefix;
12032 }
12033
12034 if (vindex != 0)
12035 {
12036 used_prefixes |= prefix;
12037 all_prefixes[last_prefix] = 0;
b844680a
L
12038 }
12039 }
91d6fa6a 12040 dp = &prefix_table[dp->op[1].bytemode][vindex];
b844680a
L
12041 break;
12042
4e7d34a6 12043 case USE_X86_64_TABLE:
91d6fa6a
NC
12044 vindex = address_mode == mode_64bit ? 1 : 0;
12045 dp = &x86_64_table[dp->op[1].bytemode][vindex];
b844680a
L
12046 break;
12047
4e7d34a6 12048 case USE_3BYTE_TABLE:
8bb15339 12049 FETCH_DATA (info, codep + 2);
91d6fa6a
NC
12050 vindex = *codep++;
12051 dp = &three_byte_table[dp->op[1].bytemode][vindex];
285ca992 12052 end_codep = codep;
8bb15339
L
12053 modrm.mod = (*codep >> 6) & 3;
12054 modrm.reg = (*codep >> 3) & 7;
12055 modrm.rm = *codep & 7;
12056 break;
12057
c0f3af97
L
12058 case USE_VEX_LEN_TABLE:
12059 if (!need_vex)
12060 abort ();
12061
12062 switch (vex.length)
12063 {
12064 case 128:
91d6fa6a 12065 vindex = 0;
c0f3af97
L
12066 break;
12067 case 256:
91d6fa6a 12068 vindex = 1;
c0f3af97
L
12069 break;
12070 default:
12071 abort ();
12072 break;
12073 }
12074
91d6fa6a 12075 dp = &vex_len_table[dp->op[1].bytemode][vindex];
c0f3af97
L
12076 break;
12077
04e2a182
L
12078 case USE_EVEX_LEN_TABLE:
12079 if (!vex.evex)
12080 abort ();
12081
12082 switch (vex.length)
12083 {
12084 case 128:
12085 vindex = 0;
12086 break;
12087 case 256:
12088 vindex = 1;
12089 break;
12090 case 512:
12091 vindex = 2;
12092 break;
12093 default:
12094 abort ();
12095 break;
12096 }
12097
12098 dp = &evex_len_table[dp->op[1].bytemode][vindex];
12099 break;
12100
f88c9eb0
SP
12101 case USE_XOP_8F_TABLE:
12102 FETCH_DATA (info, codep + 3);
f88c9eb0
SP
12103 rex = ~(*codep >> 5) & 0x7;
12104
12105 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
12106 switch ((*codep & 0x1f))
12107 {
12108 default:
f07af43e
L
12109 dp = &bad_opcode;
12110 return dp;
5dd85c99
SP
12111 case 0x8:
12112 vex_table_index = XOP_08;
12113 break;
f88c9eb0
SP
12114 case 0x9:
12115 vex_table_index = XOP_09;
12116 break;
12117 case 0xa:
12118 vex_table_index = XOP_0A;
12119 break;
12120 }
12121 codep++;
12122 vex.w = *codep & 0x80;
12123 if (vex.w && address_mode == mode_64bit)
12124 rex |= REX_W;
12125
12126 vex.register_specifier = (~(*codep >> 3)) & 0xf;
abfcb414 12127 if (address_mode != mode_64bit)
f07af43e 12128 {
abfcb414
AP
12129 /* In 16/32-bit mode REX_B is silently ignored. */
12130 rex &= ~REX_B;
f07af43e 12131 }
f88c9eb0
SP
12132
12133 vex.length = (*codep & 0x4) ? 256 : 128;
12134 switch ((*codep & 0x3))
12135 {
12136 case 0:
f88c9eb0
SP
12137 break;
12138 case 1:
12139 vex.prefix = DATA_PREFIX_OPCODE;
12140 break;
12141 case 2:
12142 vex.prefix = REPE_PREFIX_OPCODE;
12143 break;
12144 case 3:
12145 vex.prefix = REPNE_PREFIX_OPCODE;
12146 break;
12147 }
12148 need_vex = 1;
12149 need_vex_reg = 1;
12150 codep++;
91d6fa6a
NC
12151 vindex = *codep++;
12152 dp = &xop_table[vex_table_index][vindex];
c48244a5 12153
285ca992 12154 end_codep = codep;
c48244a5
SP
12155 FETCH_DATA (info, codep + 1);
12156 modrm.mod = (*codep >> 6) & 3;
12157 modrm.reg = (*codep >> 3) & 7;
12158 modrm.rm = *codep & 7;
b5b098c2
JB
12159
12160 /* No XOP encoding so far allows for a non-zero embedded prefix. Avoid
12161 having to decode the bits for every otherwise valid encoding. */
12162 if (vex.prefix)
12163 return &bad_opcode;
f88c9eb0
SP
12164 break;
12165
c0f3af97 12166 case USE_VEX_C4_TABLE:
43234a1e 12167 /* VEX prefix. */
c0f3af97 12168 FETCH_DATA (info, codep + 3);
c0f3af97
L
12169 rex = ~(*codep >> 5) & 0x7;
12170 switch ((*codep & 0x1f))
12171 {
12172 default:
f07af43e
L
12173 dp = &bad_opcode;
12174 return dp;
c0f3af97 12175 case 0x1:
f88c9eb0 12176 vex_table_index = VEX_0F;
c0f3af97
L
12177 break;
12178 case 0x2:
f88c9eb0 12179 vex_table_index = VEX_0F38;
c0f3af97
L
12180 break;
12181 case 0x3:
f88c9eb0 12182 vex_table_index = VEX_0F3A;
c0f3af97
L
12183 break;
12184 }
12185 codep++;
12186 vex.w = *codep & 0x80;
9889cbb1 12187 if (address_mode == mode_64bit)
f07af43e 12188 {
9889cbb1
L
12189 if (vex.w)
12190 rex |= REX_W;
9889cbb1
L
12191 }
12192 else
12193 {
12194 /* For the 3-byte VEX prefix in 32-bit mode, the REX_B bit
12195 is ignored, other REX bits are 0 and the highest bit in
5f847646 12196 VEX.vvvv is also ignored (but we mustn't clear it here). */
9889cbb1 12197 rex = 0;
f07af43e 12198 }
5f847646 12199 vex.register_specifier = (~(*codep >> 3)) & 0xf;
c0f3af97
L
12200 vex.length = (*codep & 0x4) ? 256 : 128;
12201 switch ((*codep & 0x3))
12202 {
12203 case 0:
c0f3af97
L
12204 break;
12205 case 1:
12206 vex.prefix = DATA_PREFIX_OPCODE;
12207 break;
12208 case 2:
12209 vex.prefix = REPE_PREFIX_OPCODE;
12210 break;
12211 case 3:
12212 vex.prefix = REPNE_PREFIX_OPCODE;
12213 break;
12214 }
12215 need_vex = 1;
12216 need_vex_reg = 1;
12217 codep++;
91d6fa6a
NC
12218 vindex = *codep++;
12219 dp = &vex_table[vex_table_index][vindex];
285ca992 12220 end_codep = codep;
53c4d625
JB
12221 /* There is no MODRM byte for VEX0F 77. */
12222 if (vex_table_index != VEX_0F || vindex != 0x77)
c0f3af97
L
12223 {
12224 FETCH_DATA (info, codep + 1);
12225 modrm.mod = (*codep >> 6) & 3;
12226 modrm.reg = (*codep >> 3) & 7;
12227 modrm.rm = *codep & 7;
12228 }
12229 break;
12230
12231 case USE_VEX_C5_TABLE:
43234a1e 12232 /* VEX prefix. */
c0f3af97 12233 FETCH_DATA (info, codep + 2);
c0f3af97
L
12234 rex = (*codep & 0x80) ? 0 : REX_R;
12235
9889cbb1
L
12236 /* For the 2-byte VEX prefix in 32-bit mode, the highest bit in
12237 VEX.vvvv is 1. */
c0f3af97 12238 vex.register_specifier = (~(*codep >> 3)) & 0xf;
c0f3af97
L
12239 vex.length = (*codep & 0x4) ? 256 : 128;
12240 switch ((*codep & 0x3))
12241 {
12242 case 0:
c0f3af97
L
12243 break;
12244 case 1:
12245 vex.prefix = DATA_PREFIX_OPCODE;
12246 break;
12247 case 2:
12248 vex.prefix = REPE_PREFIX_OPCODE;
12249 break;
12250 case 3:
12251 vex.prefix = REPNE_PREFIX_OPCODE;
12252 break;
12253 }
12254 need_vex = 1;
12255 need_vex_reg = 1;
12256 codep++;
91d6fa6a
NC
12257 vindex = *codep++;
12258 dp = &vex_table[dp->op[1].bytemode][vindex];
285ca992 12259 end_codep = codep;
53c4d625
JB
12260 /* There is no MODRM byte for VEX 77. */
12261 if (vindex != 0x77)
c0f3af97
L
12262 {
12263 FETCH_DATA (info, codep + 1);
12264 modrm.mod = (*codep >> 6) & 3;
12265 modrm.reg = (*codep >> 3) & 7;
12266 modrm.rm = *codep & 7;
12267 }
12268 break;
12269
9e30b8e0
L
12270 case USE_VEX_W_TABLE:
12271 if (!need_vex)
12272 abort ();
12273
12274 dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
12275 break;
12276
43234a1e
L
12277 case USE_EVEX_TABLE:
12278 two_source_ops = 0;
12279 /* EVEX prefix. */
12280 vex.evex = 1;
12281 FETCH_DATA (info, codep + 4);
43234a1e
L
12282 /* The first byte after 0x62. */
12283 rex = ~(*codep >> 5) & 0x7;
12284 vex.r = *codep & 0x10;
12285 switch ((*codep & 0xf))
12286 {
12287 default:
12288 return &bad_opcode;
12289 case 0x1:
12290 vex_table_index = EVEX_0F;
12291 break;
12292 case 0x2:
12293 vex_table_index = EVEX_0F38;
12294 break;
12295 case 0x3:
12296 vex_table_index = EVEX_0F3A;
12297 break;
12298 }
12299
12300 /* The second byte after 0x62. */
12301 codep++;
12302 vex.w = *codep & 0x80;
12303 if (vex.w && address_mode == mode_64bit)
12304 rex |= REX_W;
12305
12306 vex.register_specifier = (~(*codep >> 3)) & 0xf;
43234a1e
L
12307
12308 /* The U bit. */
12309 if (!(*codep & 0x4))
12310 return &bad_opcode;
12311
12312 switch ((*codep & 0x3))
12313 {
12314 case 0:
43234a1e
L
12315 break;
12316 case 1:
12317 vex.prefix = DATA_PREFIX_OPCODE;
12318 break;
12319 case 2:
12320 vex.prefix = REPE_PREFIX_OPCODE;
12321 break;
12322 case 3:
12323 vex.prefix = REPNE_PREFIX_OPCODE;
12324 break;
12325 }
12326
12327 /* The third byte after 0x62. */
12328 codep++;
12329
12330 /* Remember the static rounding bits. */
12331 vex.ll = (*codep >> 5) & 3;
12332 vex.b = (*codep & 0x10) != 0;
12333
12334 vex.v = *codep & 0x8;
12335 vex.mask_register_specifier = *codep & 0x7;
12336 vex.zeroing = *codep & 0x80;
12337
5f847646
JB
12338 if (address_mode != mode_64bit)
12339 {
12340 /* In 16/32-bit mode silently ignore following bits. */
12341 rex &= ~REX_B;
12342 vex.r = 1;
12343 vex.v = 1;
12344 }
12345
43234a1e
L
12346 need_vex = 1;
12347 need_vex_reg = 1;
12348 codep++;
12349 vindex = *codep++;
12350 dp = &evex_table[vex_table_index][vindex];
285ca992 12351 end_codep = codep;
43234a1e
L
12352 FETCH_DATA (info, codep + 1);
12353 modrm.mod = (*codep >> 6) & 3;
12354 modrm.reg = (*codep >> 3) & 7;
12355 modrm.rm = *codep & 7;
12356
12357 /* Set vector length. */
12358 if (modrm.mod == 3 && vex.b)
12359 vex.length = 512;
12360 else
12361 {
12362 switch (vex.ll)
12363 {
12364 case 0x0:
12365 vex.length = 128;
12366 break;
12367 case 0x1:
12368 vex.length = 256;
12369 break;
12370 case 0x2:
12371 vex.length = 512;
12372 break;
12373 default:
12374 return &bad_opcode;
12375 }
12376 }
12377 break;
12378
592d1631
L
12379 case 0:
12380 dp = &bad_opcode;
12381 break;
12382
b844680a 12383 default:
d34b5006 12384 abort ();
b844680a
L
12385 }
12386
12387 if (dp->name != NULL)
12388 return dp;
12389 else
8bb15339 12390 return get_valid_dis386 (dp, info);
b844680a
L
12391}
12392
dfc8cf43 12393static void
55cf16e1 12394get_sib (disassemble_info *info, int sizeflag)
dfc8cf43
L
12395{
12396 /* If modrm.mod == 3, operand must be register. */
12397 if (need_modrm
55cf16e1 12398 && ((sizeflag & AFLAG) || address_mode == mode_64bit)
dfc8cf43
L
12399 && modrm.mod != 3
12400 && modrm.rm == 4)
12401 {
12402 FETCH_DATA (info, codep + 2);
12403 sib.index = (codep [1] >> 3) & 7;
12404 sib.scale = (codep [1] >> 6) & 3;
12405 sib.base = codep [1] & 7;
12406 }
12407}
12408
e396998b 12409static int
26ca5450 12410print_insn (bfd_vma pc, disassemble_info *info)
252b5132 12411{
2da11e11 12412 const struct dis386 *dp;
252b5132 12413 int i;
ce518a5f 12414 char *op_txt[MAX_OPERANDS];
252b5132 12415 int needcomma;
df18fdba 12416 int sizeflag, orig_sizeflag;
e396998b 12417 const char *p;
252b5132 12418 struct dis_private priv;
f16cd0d5 12419 int prefix_length;
252b5132 12420
d7921315
L
12421 priv.orig_sizeflag = AFLAG | DFLAG;
12422 if ((info->mach & bfd_mach_i386_i386) != 0)
cb712a9e 12423 address_mode = mode_32bit;
2da11e11 12424 else if (info->mach == bfd_mach_i386_i8086)
d7921315
L
12425 {
12426 address_mode = mode_16bit;
12427 priv.orig_sizeflag = 0;
12428 }
2da11e11 12429 else
d7921315
L
12430 address_mode = mode_64bit;
12431
12432 if (intel_syntax == (char) -1)
12433 intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
e396998b
AM
12434
12435 for (p = info->disassembler_options; p != NULL; )
12436 {
5db04b09
L
12437 if (CONST_STRNEQ (p, "amd64"))
12438 isa64 = amd64;
12439 else if (CONST_STRNEQ (p, "intel64"))
12440 isa64 = intel64;
12441 else if (CONST_STRNEQ (p, "x86-64"))
e396998b 12442 {
cb712a9e 12443 address_mode = mode_64bit;
2a1bb84c 12444 priv.orig_sizeflag |= AFLAG | DFLAG;
e396998b 12445 }
0112cd26 12446 else if (CONST_STRNEQ (p, "i386"))
e396998b 12447 {
cb712a9e 12448 address_mode = mode_32bit;
2a1bb84c 12449 priv.orig_sizeflag |= AFLAG | DFLAG;
e396998b 12450 }
0112cd26 12451 else if (CONST_STRNEQ (p, "i8086"))
e396998b 12452 {
cb712a9e 12453 address_mode = mode_16bit;
2a1bb84c 12454 priv.orig_sizeflag &= ~(AFLAG | DFLAG);
e396998b 12455 }
0112cd26 12456 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
12457 {
12458 intel_syntax = 1;
9d141669
L
12459 if (CONST_STRNEQ (p + 5, "-mnemonic"))
12460 intel_mnemonic = 1;
e396998b 12461 }
0112cd26 12462 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
12463 {
12464 intel_syntax = 0;
9d141669
L
12465 if (CONST_STRNEQ (p + 3, "-mnemonic"))
12466 intel_mnemonic = 0;
e396998b 12467 }
0112cd26 12468 else if (CONST_STRNEQ (p, "addr"))
e396998b 12469 {
f59a29b9
L
12470 if (address_mode == mode_64bit)
12471 {
12472 if (p[4] == '3' && p[5] == '2')
12473 priv.orig_sizeflag &= ~AFLAG;
12474 else if (p[4] == '6' && p[5] == '4')
12475 priv.orig_sizeflag |= AFLAG;
12476 }
12477 else
12478 {
12479 if (p[4] == '1' && p[5] == '6')
12480 priv.orig_sizeflag &= ~AFLAG;
12481 else if (p[4] == '3' && p[5] == '2')
12482 priv.orig_sizeflag |= AFLAG;
12483 }
e396998b 12484 }
0112cd26 12485 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
12486 {
12487 if (p[4] == '1' && p[5] == '6')
12488 priv.orig_sizeflag &= ~DFLAG;
12489 else if (p[4] == '3' && p[5] == '2')
12490 priv.orig_sizeflag |= DFLAG;
12491 }
0112cd26 12492 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
12493 priv.orig_sizeflag |= SUFFIX_ALWAYS;
12494
12495 p = strchr (p, ',');
12496 if (p != NULL)
12497 p++;
12498 }
12499
c0f92bf9
L
12500 if (address_mode == mode_64bit && sizeof (bfd_vma) < 8)
12501 {
12502 (*info->fprintf_func) (info->stream,
12503 _("64-bit address is disabled"));
12504 return -1;
12505 }
12506
e396998b
AM
12507 if (intel_syntax)
12508 {
12509 names64 = intel_names64;
12510 names32 = intel_names32;
12511 names16 = intel_names16;
12512 names8 = intel_names8;
12513 names8rex = intel_names8rex;
12514 names_seg = intel_names_seg;
b9733481 12515 names_mm = intel_names_mm;
7e8b059b 12516 names_bnd = intel_names_bnd;
b9733481
L
12517 names_xmm = intel_names_xmm;
12518 names_ymm = intel_names_ymm;
43234a1e 12519 names_zmm = intel_names_zmm;
260cd341 12520 names_tmm = intel_names_tmm;
db51cc60
L
12521 index64 = intel_index64;
12522 index32 = intel_index32;
43234a1e 12523 names_mask = intel_names_mask;
e396998b
AM
12524 index16 = intel_index16;
12525 open_char = '[';
12526 close_char = ']';
12527 separator_char = '+';
12528 scale_char = '*';
12529 }
12530 else
12531 {
12532 names64 = att_names64;
12533 names32 = att_names32;
12534 names16 = att_names16;
12535 names8 = att_names8;
12536 names8rex = att_names8rex;
12537 names_seg = att_names_seg;
b9733481 12538 names_mm = att_names_mm;
7e8b059b 12539 names_bnd = att_names_bnd;
b9733481
L
12540 names_xmm = att_names_xmm;
12541 names_ymm = att_names_ymm;
43234a1e 12542 names_zmm = att_names_zmm;
260cd341 12543 names_tmm = att_names_tmm;
db51cc60
L
12544 index64 = att_index64;
12545 index32 = att_index32;
43234a1e 12546 names_mask = att_names_mask;
e396998b
AM
12547 index16 = att_index16;
12548 open_char = '(';
12549 close_char = ')';
12550 separator_char = ',';
12551 scale_char = ',';
12552 }
2da11e11 12553
4fe53c98 12554 /* The output looks better if we put 7 bytes on a line, since that
8a9036a4
L
12555 puts most long word instructions on a single line. Use 8 bytes
12556 for Intel L1OM. */
d7921315 12557 if ((info->mach & bfd_mach_l1om) != 0)
8a9036a4
L
12558 info->bytes_per_line = 8;
12559 else
12560 info->bytes_per_line = 7;
252b5132 12561
26ca5450 12562 info->private_data = &priv;
252b5132
RH
12563 priv.max_fetched = priv.the_buffer;
12564 priv.insn_start = pc;
252b5132
RH
12565
12566 obuf[0] = 0;
ce518a5f
L
12567 for (i = 0; i < MAX_OPERANDS; ++i)
12568 {
12569 op_out[i][0] = 0;
12570 op_index[i] = -1;
12571 }
252b5132
RH
12572
12573 the_info = info;
12574 start_pc = pc;
e396998b
AM
12575 start_codep = priv.the_buffer;
12576 codep = priv.the_buffer;
252b5132 12577
8df14d78 12578 if (OPCODES_SIGSETJMP (priv.bailout) != 0)
5076851f 12579 {
7d421014
ILT
12580 const char *name;
12581
5076851f 12582 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
12583 means we have an incomplete instruction of some sort. Just
12584 print the first byte as a prefix or a .byte pseudo-op. */
12585 if (codep > priv.the_buffer)
5076851f 12586 {
e396998b 12587 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
12588 if (name != NULL)
12589 (*info->fprintf_func) (info->stream, "%s", name);
12590 else
5076851f 12591 {
7d421014
ILT
12592 /* Just print the first byte as a .byte instruction. */
12593 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 12594 (unsigned int) priv.the_buffer[0]);
5076851f 12595 }
5076851f 12596
7d421014 12597 return 1;
5076851f
ILT
12598 }
12599
12600 return -1;
12601 }
12602
52b15da3 12603 obufp = obuf;
f16cd0d5
L
12604 sizeflag = priv.orig_sizeflag;
12605
12606 if (!ckprefix () || rex_used)
12607 {
12608 /* Too many prefixes or unused REX prefixes. */
12609 for (i = 0;
f6dd4781 12610 i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
f16cd0d5 12611 i++)
de882298 12612 (*info->fprintf_func) (info->stream, "%s%s",
6c067bbb 12613 i == 0 ? "" : " ",
f16cd0d5 12614 prefix_name (all_prefixes[i], sizeflag));
de882298 12615 return i;
f16cd0d5 12616 }
252b5132
RH
12617
12618 insn_codep = codep;
12619
12620 FETCH_DATA (info, codep + 1);
12621 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
12622
3e7d61b2 12623 if (((prefixes & PREFIX_FWAIT)
f16cd0d5 12624 && ((*codep < 0xd8) || (*codep > 0xdf))))
252b5132 12625 {
86a80a50 12626 /* Handle prefixes before fwait. */
d9949a36 12627 for (i = 0; i < fwait_prefix && all_prefixes[i];
86a80a50
L
12628 i++)
12629 (*info->fprintf_func) (info->stream, "%s ",
12630 prefix_name (all_prefixes[i], sizeflag));
f16cd0d5 12631 (*info->fprintf_func) (info->stream, "fwait");
86a80a50 12632 return i + 1;
252b5132
RH
12633 }
12634
252b5132
RH
12635 if (*codep == 0x0f)
12636 {
eec0f4ca 12637 unsigned char threebyte;
5f40e14d
JS
12638
12639 codep++;
12640 FETCH_DATA (info, codep + 1);
12641 threebyte = *codep;
eec0f4ca 12642 dp = &dis386_twobyte[threebyte];
252b5132 12643 need_modrm = twobyte_has_modrm[*codep];
eec0f4ca 12644 codep++;
252b5132
RH
12645 }
12646 else
12647 {
6439fc28 12648 dp = &dis386[*codep];
252b5132 12649 need_modrm = onebyte_has_modrm[*codep];
eec0f4ca 12650 codep++;
252b5132 12651 }
246c51aa 12652
df18fdba
L
12653 /* Save sizeflag for printing the extra prefixes later before updating
12654 it for mnemonic and operand processing. The prefix names depend
12655 only on the address mode. */
12656 orig_sizeflag = sizeflag;
c608c12e 12657 if (prefixes & PREFIX_ADDR)
df18fdba 12658 sizeflag ^= AFLAG;
b844680a 12659 if ((prefixes & PREFIX_DATA))
df18fdba 12660 sizeflag ^= DFLAG;
3ffd33cf 12661
285ca992 12662 end_codep = codep;
8bb15339 12663 if (need_modrm)
252b5132
RH
12664 {
12665 FETCH_DATA (info, codep + 1);
7967e09e
L
12666 modrm.mod = (*codep >> 6) & 3;
12667 modrm.reg = (*codep >> 3) & 7;
12668 modrm.rm = *codep & 7;
252b5132
RH
12669 }
12670
42d5f9c6
MS
12671 need_vex = 0;
12672 need_vex_reg = 0;
caf0678c 12673 memset (&vex, 0, sizeof (vex));
55b126d4 12674
ce518a5f 12675 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132 12676 {
55cf16e1 12677 get_sib (info, sizeflag);
252b5132
RH
12678 dofloat (sizeflag);
12679 }
12680 else
12681 {
8bb15339 12682 dp = get_valid_dis386 (dp, info);
b844680a 12683 if (dp != NULL && putop (dp->name, sizeflag) == 0)
6c067bbb 12684 {
55cf16e1 12685 get_sib (info, sizeflag);
ce518a5f
L
12686 for (i = 0; i < MAX_OPERANDS; ++i)
12687 {
246c51aa 12688 obufp = op_out[i];
ce518a5f
L
12689 op_ad = MAX_OPERANDS - 1 - i;
12690 if (dp->op[i].rtn)
12691 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
43234a1e
L
12692 /* For EVEX instruction after the last operand masking
12693 should be printed. */
12694 if (i == 0 && vex.evex)
12695 {
12696 /* Don't print {%k0}. */
12697 if (vex.mask_register_specifier)
12698 {
12699 oappend ("{");
12700 oappend (names_mask[vex.mask_register_specifier]);
12701 oappend ("}");
12702 }
12703 if (vex.zeroing)
12704 oappend ("{z}");
12705 }
ce518a5f 12706 }
6439fc28 12707 }
252b5132
RH
12708 }
12709
1d67fe3b
TT
12710 /* Clear instruction information. */
12711 if (the_info)
12712 {
12713 the_info->insn_info_valid = 0;
12714 the_info->branch_delay_insns = 0;
12715 the_info->data_size = 0;
12716 the_info->insn_type = dis_noninsn;
12717 the_info->target = 0;
12718 the_info->target2 = 0;
12719 }
12720
12721 /* Reset jump operation indicator. */
12722 op_is_jump = FALSE;
12723
12724 {
12725 int jump_detection = 0;
12726
12727 /* Extract flags. */
12728 for (i = 0; i < MAX_OPERANDS; ++i)
12729 {
12730 if ((dp->op[i].rtn == OP_J)
12731 || (dp->op[i].rtn == OP_indirE))
12732 jump_detection |= 1;
12733 else if ((dp->op[i].rtn == BND_Fixup)
12734 || (!dp->op[i].rtn && !dp->op[i].bytemode))
12735 jump_detection |= 2;
12736 else if ((dp->op[i].bytemode == cond_jump_mode)
12737 || (dp->op[i].bytemode == loop_jcxz_mode))
12738 jump_detection |= 4;
12739 }
12740
12741 /* Determine if this is a jump or branch. */
12742 if ((jump_detection & 0x3) == 0x3)
12743 {
12744 op_is_jump = TRUE;
12745 if (jump_detection & 0x4)
12746 the_info->insn_type = dis_condbranch;
12747 else
12748 the_info->insn_type =
12749 (dp->name && !strncmp(dp->name, "call", 4))
12750 ? dis_jsr : dis_branch;
12751 }
12752 }
12753
63c6fc6c
L
12754 /* If VEX.vvvv and EVEX.vvvv are unused, they must be all 1s, which
12755 are all 0s in inverted form. */
12756 if (need_vex && vex.register_specifier != 0)
12757 {
12758 (*info->fprintf_func) (info->stream, "(bad)");
12759 return end_codep - priv.the_buffer;
12760 }
12761
d869730d 12762 /* Check if the REX prefix is used. */
73239888 12763 if ((rex ^ rex_used) == 0 && !need_vex && last_rex_prefix >= 0)
f16cd0d5
L
12764 all_prefixes[last_rex_prefix] = 0;
12765
5e6718e4 12766 /* Check if the SEG prefix is used. */
f16cd0d5
L
12767 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
12768 | PREFIX_FS | PREFIX_GS)) != 0
285ca992 12769 && (used_prefixes & active_seg_prefix) != 0)
f16cd0d5
L
12770 all_prefixes[last_seg_prefix] = 0;
12771
5e6718e4 12772 /* Check if the ADDR prefix is used. */
f16cd0d5
L
12773 if ((prefixes & PREFIX_ADDR) != 0
12774 && (used_prefixes & PREFIX_ADDR) != 0)
12775 all_prefixes[last_addr_prefix] = 0;
12776
df18fdba
L
12777 /* Check if the DATA prefix is used. */
12778 if ((prefixes & PREFIX_DATA) != 0
73239888
JB
12779 && (used_prefixes & PREFIX_DATA) != 0
12780 && !need_vex)
df18fdba 12781 all_prefixes[last_data_prefix] = 0;
f16cd0d5 12782
df18fdba 12783 /* Print the extra prefixes. */
f16cd0d5 12784 prefix_length = 0;
f310f33d 12785 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
f16cd0d5
L
12786 if (all_prefixes[i])
12787 {
12788 const char *name;
df18fdba 12789 name = prefix_name (all_prefixes[i], orig_sizeflag);
f16cd0d5
L
12790 if (name == NULL)
12791 abort ();
12792 prefix_length += strlen (name) + 1;
12793 (*info->fprintf_func) (info->stream, "%s ", name);
12794 }
b844680a 12795
285ca992
L
12796 /* If the mandatory PREFIX_REPZ/PREFIX_REPNZ/PREFIX_DATA prefix is
12797 unused, opcode is invalid. Since the PREFIX_DATA prefix may be
12798 used by putop and MMX/SSE operand and may be overriden by the
12799 PREFIX_REPZ/PREFIX_REPNZ fix, we check the PREFIX_DATA prefix
12800 separately. */
3888916d 12801 if (dp->prefix_requirement == PREFIX_OPCODE
bf926894
JB
12802 && (((need_vex
12803 ? vex.prefix == REPE_PREFIX_OPCODE
12804 || vex.prefix == REPNE_PREFIX_OPCODE
12805 : (prefixes
12806 & (PREFIX_REPZ | PREFIX_REPNZ)) != 0)
285ca992
L
12807 && (used_prefixes
12808 & (PREFIX_REPZ | PREFIX_REPNZ)) == 0)
bf926894
JB
12809 || (((need_vex
12810 ? vex.prefix == DATA_PREFIX_OPCODE
12811 : ((prefixes
12812 & (PREFIX_REPZ | PREFIX_REPNZ | PREFIX_DATA))
12813 == PREFIX_DATA))
97e6786a
JB
12814 && (used_prefixes & PREFIX_DATA) == 0))
12815 || (vex.evex && !vex.w != !(used_prefixes & PREFIX_DATA))))
285ca992
L
12816 {
12817 (*info->fprintf_func) (info->stream, "(bad)");
12818 return end_codep - priv.the_buffer;
12819 }
12820
f16cd0d5
L
12821 /* Check maximum code length. */
12822 if ((codep - start_codep) > MAX_CODE_LENGTH)
12823 {
12824 (*info->fprintf_func) (info->stream, "(bad)");
12825 return MAX_CODE_LENGTH;
12826 }
b844680a 12827
ea397f5b 12828 obufp = mnemonicendp;
f16cd0d5 12829 for (i = strlen (obuf) + prefix_length; i < 6; i++)
252b5132
RH
12830 oappend (" ");
12831 oappend (" ");
12832 (*info->fprintf_func) (info->stream, "%s", obuf);
12833
12834 /* The enter and bound instructions are printed with operands in the same
12835 order as the intel book; everything else is printed in reverse order. */
2da11e11 12836 if (intel_syntax || two_source_ops)
252b5132 12837 {
185b1163
L
12838 bfd_vma riprel;
12839
ce518a5f 12840 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 12841 op_txt[i] = op_out[i];
246c51aa 12842
3a8547d2
JB
12843 if (intel_syntax && dp && dp->op[2].rtn == OP_Rounding
12844 && dp->op[3].rtn == OP_E && dp->op[4].rtn == NULL)
12845 {
12846 op_txt[2] = op_out[3];
12847 op_txt[3] = op_out[2];
12848 }
12849
ce518a5f
L
12850 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
12851 {
6c067bbb
RM
12852 op_ad = op_index[i];
12853 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
12854 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
12855 riprel = op_riprel[i];
12856 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
12857 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 12858 }
252b5132
RH
12859 }
12860 else
12861 {
ce518a5f 12862 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 12863 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
12864 }
12865
ce518a5f
L
12866 needcomma = 0;
12867 for (i = 0; i < MAX_OPERANDS; ++i)
12868 if (*op_txt[i])
12869 {
12870 if (needcomma)
12871 (*info->fprintf_func) (info->stream, ",");
12872 if (op_index[i] != -1 && !op_riprel[i])
1d67fe3b
TT
12873 {
12874 bfd_vma target = (bfd_vma) op_address[op_index[i]];
12875
12876 if (the_info && op_is_jump)
12877 {
12878 the_info->insn_info_valid = 1;
12879 the_info->branch_delay_insns = 0;
12880 the_info->data_size = 0;
12881 the_info->target = target;
12882 the_info->target2 = 0;
12883 }
12884 (*info->print_address_func) (target, info);
12885 }
ce518a5f
L
12886 else
12887 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
12888 needcomma = 1;
12889 }
050dfa73 12890
ce518a5f 12891 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
12892 if (op_index[i] != -1 && op_riprel[i])
12893 {
12894 (*info->fprintf_func) (info->stream, " # ");
4fd7268a 12895 (*info->print_address_func) ((bfd_vma) (start_pc + (codep - start_codep)
52b15da3 12896 + op_address[op_index[i]]), info);
185b1163 12897 break;
52b15da3 12898 }
e396998b 12899 return codep - priv.the_buffer;
252b5132
RH
12900}
12901
6439fc28 12902static const char *float_mem[] = {
252b5132 12903 /* d8 */
7c52e0e8
L
12904 "fadd{s|}",
12905 "fmul{s|}",
12906 "fcom{s|}",
12907 "fcomp{s|}",
12908 "fsub{s|}",
12909 "fsubr{s|}",
12910 "fdiv{s|}",
12911 "fdivr{s|}",
db6eb5be 12912 /* d9 */
7c52e0e8 12913 "fld{s|}",
252b5132 12914 "(bad)",
7c52e0e8
L
12915 "fst{s|}",
12916 "fstp{s|}",
d1c36125 12917 "fldenv{C|C}",
252b5132 12918 "fldcw",
d1c36125 12919 "fNstenv{C|C}",
252b5132
RH
12920 "fNstcw",
12921 /* da */
7c52e0e8
L
12922 "fiadd{l|}",
12923 "fimul{l|}",
12924 "ficom{l|}",
12925 "ficomp{l|}",
12926 "fisub{l|}",
12927 "fisubr{l|}",
12928 "fidiv{l|}",
12929 "fidivr{l|}",
252b5132 12930 /* db */
7c52e0e8
L
12931 "fild{l|}",
12932 "fisttp{l|}",
12933 "fist{l|}",
12934 "fistp{l|}",
252b5132 12935 "(bad)",
464dc4af 12936 "fld{t|}",
252b5132 12937 "(bad)",
464dc4af 12938 "fstp{t|}",
252b5132 12939 /* dc */
7c52e0e8
L
12940 "fadd{l|}",
12941 "fmul{l|}",
12942 "fcom{l|}",
12943 "fcomp{l|}",
12944 "fsub{l|}",
12945 "fsubr{l|}",
12946 "fdiv{l|}",
12947 "fdivr{l|}",
252b5132 12948 /* dd */
7c52e0e8
L
12949 "fld{l|}",
12950 "fisttp{ll|}",
12951 "fst{l||}",
12952 "fstp{l|}",
d1c36125 12953 "frstor{C|C}",
252b5132 12954 "(bad)",
d1c36125 12955 "fNsave{C|C}",
252b5132
RH
12956 "fNstsw",
12957 /* de */
ac465521
JB
12958 "fiadd{s|}",
12959 "fimul{s|}",
12960 "ficom{s|}",
12961 "ficomp{s|}",
12962 "fisub{s|}",
12963 "fisubr{s|}",
12964 "fidiv{s|}",
12965 "fidivr{s|}",
252b5132 12966 /* df */
ac465521
JB
12967 "fild{s|}",
12968 "fisttp{s|}",
12969 "fist{s|}",
12970 "fistp{s|}",
252b5132 12971 "fbld",
7c52e0e8 12972 "fild{ll|}",
252b5132 12973 "fbstp",
7c52e0e8 12974 "fistp{ll|}",
1d9f512f
AM
12975};
12976
12977static const unsigned char float_mem_mode[] = {
12978 /* d8 */
12979 d_mode,
12980 d_mode,
12981 d_mode,
12982 d_mode,
12983 d_mode,
12984 d_mode,
12985 d_mode,
12986 d_mode,
12987 /* d9 */
12988 d_mode,
12989 0,
12990 d_mode,
12991 d_mode,
12992 0,
12993 w_mode,
12994 0,
12995 w_mode,
12996 /* da */
12997 d_mode,
12998 d_mode,
12999 d_mode,
13000 d_mode,
13001 d_mode,
13002 d_mode,
13003 d_mode,
13004 d_mode,
13005 /* db */
13006 d_mode,
13007 d_mode,
13008 d_mode,
13009 d_mode,
13010 0,
9306ca4a 13011 t_mode,
1d9f512f 13012 0,
9306ca4a 13013 t_mode,
1d9f512f
AM
13014 /* dc */
13015 q_mode,
13016 q_mode,
13017 q_mode,
13018 q_mode,
13019 q_mode,
13020 q_mode,
13021 q_mode,
13022 q_mode,
13023 /* dd */
13024 q_mode,
13025 q_mode,
13026 q_mode,
13027 q_mode,
13028 0,
13029 0,
13030 0,
13031 w_mode,
13032 /* de */
13033 w_mode,
13034 w_mode,
13035 w_mode,
13036 w_mode,
13037 w_mode,
13038 w_mode,
13039 w_mode,
13040 w_mode,
13041 /* df */
13042 w_mode,
13043 w_mode,
13044 w_mode,
13045 w_mode,
9306ca4a 13046 t_mode,
1d9f512f 13047 q_mode,
9306ca4a 13048 t_mode,
1d9f512f 13049 q_mode
252b5132
RH
13050};
13051
ce518a5f
L
13052#define ST { OP_ST, 0 }
13053#define STi { OP_STi, 0 }
252b5132 13054
48c97fa1
L
13055#define FGRPd9_2 NULL, { { NULL, 1 } }, 0
13056#define FGRPd9_4 NULL, { { NULL, 2 } }, 0
13057#define FGRPd9_5 NULL, { { NULL, 3 } }, 0
13058#define FGRPd9_6 NULL, { { NULL, 4 } }, 0
13059#define FGRPd9_7 NULL, { { NULL, 5 } }, 0
13060#define FGRPda_5 NULL, { { NULL, 6 } }, 0
13061#define FGRPdb_4 NULL, { { NULL, 7 } }, 0
13062#define FGRPde_3 NULL, { { NULL, 8 } }, 0
13063#define FGRPdf_4 NULL, { { NULL, 9 } }, 0
252b5132 13064
2da11e11 13065static const struct dis386 float_reg[][8] = {
252b5132
RH
13066 /* d8 */
13067 {
bf890a93
IT
13068 { "fadd", { ST, STi }, 0 },
13069 { "fmul", { ST, STi }, 0 },
13070 { "fcom", { STi }, 0 },
13071 { "fcomp", { STi }, 0 },
13072 { "fsub", { ST, STi }, 0 },
13073 { "fsubr", { ST, STi }, 0 },
13074 { "fdiv", { ST, STi }, 0 },
13075 { "fdivr", { ST, STi }, 0 },
252b5132
RH
13076 },
13077 /* d9 */
13078 {
bf890a93
IT
13079 { "fld", { STi }, 0 },
13080 { "fxch", { STi }, 0 },
252b5132 13081 { FGRPd9_2 },
592d1631 13082 { Bad_Opcode },
252b5132
RH
13083 { FGRPd9_4 },
13084 { FGRPd9_5 },
13085 { FGRPd9_6 },
13086 { FGRPd9_7 },
13087 },
13088 /* da */
13089 {
bf890a93
IT
13090 { "fcmovb", { ST, STi }, 0 },
13091 { "fcmove", { ST, STi }, 0 },
13092 { "fcmovbe",{ ST, STi }, 0 },
13093 { "fcmovu", { ST, STi }, 0 },
592d1631 13094 { Bad_Opcode },
252b5132 13095 { FGRPda_5 },
592d1631
L
13096 { Bad_Opcode },
13097 { Bad_Opcode },
252b5132
RH
13098 },
13099 /* db */
13100 {
bf890a93
IT
13101 { "fcmovnb",{ ST, STi }, 0 },
13102 { "fcmovne",{ ST, STi }, 0 },
13103 { "fcmovnbe",{ ST, STi }, 0 },
13104 { "fcmovnu",{ ST, STi }, 0 },
252b5132 13105 { FGRPdb_4 },
bf890a93
IT
13106 { "fucomi", { ST, STi }, 0 },
13107 { "fcomi", { ST, STi }, 0 },
592d1631 13108 { Bad_Opcode },
252b5132
RH
13109 },
13110 /* dc */
13111 {
bf890a93
IT
13112 { "fadd", { STi, ST }, 0 },
13113 { "fmul", { STi, ST }, 0 },
592d1631
L
13114 { Bad_Opcode },
13115 { Bad_Opcode },
d53e6b98
JB
13116 { "fsub{!M|r}", { STi, ST }, 0 },
13117 { "fsub{M|}", { STi, ST }, 0 },
13118 { "fdiv{!M|r}", { STi, ST }, 0 },
13119 { "fdiv{M|}", { STi, ST }, 0 },
252b5132
RH
13120 },
13121 /* dd */
13122 {
bf890a93 13123 { "ffree", { STi }, 0 },
592d1631 13124 { Bad_Opcode },
bf890a93
IT
13125 { "fst", { STi }, 0 },
13126 { "fstp", { STi }, 0 },
13127 { "fucom", { STi }, 0 },
13128 { "fucomp", { STi }, 0 },
592d1631
L
13129 { Bad_Opcode },
13130 { Bad_Opcode },
252b5132
RH
13131 },
13132 /* de */
13133 {
bf890a93
IT
13134 { "faddp", { STi, ST }, 0 },
13135 { "fmulp", { STi, ST }, 0 },
592d1631 13136 { Bad_Opcode },
252b5132 13137 { FGRPde_3 },
d53e6b98
JB
13138 { "fsub{!M|r}p", { STi, ST }, 0 },
13139 { "fsub{M|}p", { STi, ST }, 0 },
13140 { "fdiv{!M|r}p", { STi, ST }, 0 },
13141 { "fdiv{M|}p", { STi, ST }, 0 },
252b5132
RH
13142 },
13143 /* df */
13144 {
bf890a93 13145 { "ffreep", { STi }, 0 },
592d1631
L
13146 { Bad_Opcode },
13147 { Bad_Opcode },
13148 { Bad_Opcode },
252b5132 13149 { FGRPdf_4 },
bf890a93
IT
13150 { "fucomip", { ST, STi }, 0 },
13151 { "fcomip", { ST, STi }, 0 },
592d1631 13152 { Bad_Opcode },
252b5132
RH
13153 },
13154};
13155
252b5132 13156static char *fgrps[][8] = {
48c97fa1
L
13157 /* Bad opcode 0 */
13158 {
13159 "(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13160 },
13161
13162 /* d9_2 1 */
252b5132
RH
13163 {
13164 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13165 },
13166
48c97fa1 13167 /* d9_4 2 */
252b5132
RH
13168 {
13169 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
13170 },
13171
48c97fa1 13172 /* d9_5 3 */
252b5132
RH
13173 {
13174 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
13175 },
13176
48c97fa1 13177 /* d9_6 4 */
252b5132
RH
13178 {
13179 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
13180 },
13181
48c97fa1 13182 /* d9_7 5 */
252b5132
RH
13183 {
13184 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
13185 },
13186
48c97fa1 13187 /* da_5 6 */
252b5132
RH
13188 {
13189 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13190 },
13191
48c97fa1 13192 /* db_4 7 */
252b5132 13193 {
309d3373
JB
13194 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
13195 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
252b5132
RH
13196 },
13197
48c97fa1 13198 /* de_3 8 */
252b5132
RH
13199 {
13200 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13201 },
13202
48c97fa1 13203 /* df_4 9 */
252b5132
RH
13204 {
13205 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13206 },
13207};
13208
b6169b20
L
13209static void
13210swap_operand (void)
13211{
13212 mnemonicendp[0] = '.';
13213 mnemonicendp[1] = 's';
13214 mnemonicendp += 2;
13215}
13216
b844680a
L
13217static void
13218OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
13219 int sizeflag ATTRIBUTE_UNUSED)
13220{
13221 /* Skip mod/rm byte. */
13222 MODRM_CHECK;
13223 codep++;
13224}
13225
252b5132 13226static void
26ca5450 13227dofloat (int sizeflag)
252b5132 13228{
2da11e11 13229 const struct dis386 *dp;
252b5132
RH
13230 unsigned char floatop;
13231
13232 floatop = codep[-1];
13233
7967e09e 13234 if (modrm.mod != 3)
252b5132 13235 {
7967e09e 13236 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
13237
13238 putop (float_mem[fp_indx], sizeflag);
ce518a5f 13239 obufp = op_out[0];
6e50d963 13240 op_ad = 2;
1d9f512f 13241 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
13242 return;
13243 }
6608db57 13244 /* Skip mod/rm byte. */
4bba6815 13245 MODRM_CHECK;
252b5132
RH
13246 codep++;
13247
7967e09e 13248 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
13249 if (dp->name == NULL)
13250 {
7967e09e 13251 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 13252
6608db57 13253 /* Instruction fnstsw is only one with strange arg. */
252b5132 13254 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 13255 strcpy (op_out[0], names16[0]);
252b5132
RH
13256 }
13257 else
13258 {
13259 putop (dp->name, sizeflag);
13260
ce518a5f 13261 obufp = op_out[0];
6e50d963 13262 op_ad = 2;
ce518a5f
L
13263 if (dp->op[0].rtn)
13264 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 13265
ce518a5f 13266 obufp = op_out[1];
6e50d963 13267 op_ad = 1;
ce518a5f
L
13268 if (dp->op[1].rtn)
13269 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
13270 }
13271}
13272
9ce09ba2
RM
13273/* Like oappend (below), but S is a string starting with '%'.
13274 In Intel syntax, the '%' is elided. */
13275static void
13276oappend_maybe_intel (const char *s)
13277{
13278 oappend (s + intel_syntax);
13279}
13280
252b5132 13281static void
26ca5450 13282OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13283{
9ce09ba2 13284 oappend_maybe_intel ("%st");
252b5132
RH
13285}
13286
252b5132 13287static void
26ca5450 13288OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13289{
7967e09e 13290 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
9ce09ba2 13291 oappend_maybe_intel (scratchbuf);
252b5132
RH
13292}
13293
6608db57 13294/* Capital letters in template are macros. */
6439fc28 13295static int
d3ce72d0 13296putop (const char *in_template, int sizeflag)
252b5132 13297{
2da11e11 13298 const char *p;
9306ca4a 13299 int alt = 0;
9d141669 13300 int cond = 1;
21a3faeb 13301 unsigned int l = 0, len = 0;
98b528ac
L
13302 char last[4];
13303
d3ce72d0 13304 for (p = in_template; *p; p++)
252b5132 13305 {
21a3faeb
JB
13306 if (len > l)
13307 {
13308 if (l >= sizeof (last) || !ISUPPER (*p))
13309 abort ();
13310 last[l++] = *p;
13311 continue;
13312 }
252b5132
RH
13313 switch (*p)
13314 {
13315 default:
13316 *obufp++ = *p;
13317 break;
98b528ac
L
13318 case '%':
13319 len++;
13320 break;
9d141669
L
13321 case '!':
13322 cond = 0;
13323 break;
6439fc28 13324 case '{':
6439fc28 13325 if (intel_syntax)
6439fc28
AM
13326 {
13327 while (*++p != '|')
7c52e0e8
L
13328 if (*p == '}' || *p == '\0')
13329 abort ();
d1c36125 13330 alt = 1;
6439fc28 13331 }
d1c36125 13332 break;
6439fc28
AM
13333 case '|':
13334 while (*++p != '}')
13335 {
13336 if (*p == '\0')
13337 abort ();
13338 }
13339 break;
13340 case '}':
d1c36125 13341 alt = 0;
6439fc28 13342 break;
252b5132 13343 case 'A':
db6eb5be
AM
13344 if (intel_syntax)
13345 break;
7967e09e 13346 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
13347 *obufp++ = 'b';
13348 break;
13349 case 'B':
21a3faeb 13350 if (l == 0)
4b06377f 13351 {
dc1e8a47 13352 case_B:
4b06377f
L
13353 if (intel_syntax)
13354 break;
13355 if (sizeflag & SUFFIX_ALWAYS)
13356 *obufp++ = 'b';
13357 }
21a3faeb 13358 else if (l == 1 && last[0] == 'L')
4b06377f 13359 {
4b06377f
L
13360 if (address_mode == mode_64bit
13361 && !(prefixes & PREFIX_ADDR))
13362 {
13363 *obufp++ = 'a';
13364 *obufp++ = 'b';
13365 *obufp++ = 's';
13366 }
13367
13368 goto case_B;
13369 }
21a3faeb
JB
13370 else
13371 abort ();
252b5132 13372 break;
9306ca4a
JB
13373 case 'C':
13374 if (intel_syntax && !alt)
13375 break;
13376 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
13377 {
13378 if (sizeflag & DFLAG)
13379 *obufp++ = intel_syntax ? 'd' : 'l';
13380 else
13381 *obufp++ = intel_syntax ? 'w' : 's';
13382 used_prefixes |= (prefixes & PREFIX_DATA);
13383 }
13384 break;
ed7841b3
JB
13385 case 'D':
13386 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
13387 break;
161a04f6 13388 USED_REX (REX_W);
7967e09e 13389 if (modrm.mod == 3)
ed7841b3 13390 {
161a04f6 13391 if (rex & REX_W)
ed7841b3 13392 *obufp++ = 'q';
ed7841b3 13393 else
f16cd0d5
L
13394 {
13395 if (sizeflag & DFLAG)
13396 *obufp++ = intel_syntax ? 'd' : 'l';
13397 else
13398 *obufp++ = 'w';
13399 used_prefixes |= (prefixes & PREFIX_DATA);
13400 }
ed7841b3
JB
13401 }
13402 else
13403 *obufp++ = 'w';
13404 break;
252b5132 13405 case 'E': /* For jcxz/jecxz */
cb712a9e 13406 if (address_mode == mode_64bit)
c1a64871
JH
13407 {
13408 if (sizeflag & AFLAG)
13409 *obufp++ = 'r';
13410 else
13411 *obufp++ = 'e';
13412 }
13413 else
13414 if (sizeflag & AFLAG)
13415 *obufp++ = 'e';
3ffd33cf
AM
13416 used_prefixes |= (prefixes & PREFIX_ADDR);
13417 break;
13418 case 'F':
db6eb5be
AM
13419 if (intel_syntax)
13420 break;
e396998b 13421 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
13422 {
13423 if (sizeflag & AFLAG)
cb712a9e 13424 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 13425 else
cb712a9e 13426 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
13427 used_prefixes |= (prefixes & PREFIX_ADDR);
13428 }
252b5132 13429 break;
52fd6d94
JB
13430 case 'G':
13431 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
13432 break;
161a04f6 13433 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
13434 *obufp++ = 'l';
13435 else
13436 *obufp++ = 'w';
161a04f6 13437 if (!(rex & REX_W))
52fd6d94
JB
13438 used_prefixes |= (prefixes & PREFIX_DATA);
13439 break;
5dd0794d 13440 case 'H':
db6eb5be
AM
13441 if (intel_syntax)
13442 break;
5dd0794d
AM
13443 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
13444 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
13445 {
13446 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
13447 *obufp++ = ',';
13448 *obufp++ = 'p';
13449 if (prefixes & PREFIX_DS)
13450 *obufp++ = 't';
13451 else
13452 *obufp++ = 'n';
13453 }
13454 break;
42903f7f
L
13455 case 'K':
13456 USED_REX (REX_W);
13457 if (rex & REX_W)
13458 *obufp++ = 'q';
13459 else
13460 *obufp++ = 'd';
13461 break;
6dd5059a 13462 case 'Z':
21a3faeb 13463 if (l != 0)
04d824a4 13464 {
21a3faeb
JB
13465 if (l != 1 || last[0] != 'X')
13466 abort ();
04d824a4
JB
13467 if (!need_vex || !vex.evex)
13468 abort ();
13469 if (intel_syntax
13470 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
13471 break;
13472 switch (vex.length)
13473 {
13474 case 128:
13475 *obufp++ = 'x';
13476 break;
13477 case 256:
13478 *obufp++ = 'y';
13479 break;
13480 case 512:
13481 *obufp++ = 'z';
13482 break;
13483 default:
13484 abort ();
13485 }
13486 break;
13487 }
6dd5059a
L
13488 if (intel_syntax)
13489 break;
13490 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
13491 {
13492 *obufp++ = 'q';
13493 break;
13494 }
13495 /* Fall through. */
98b528ac 13496 goto case_L;
252b5132 13497 case 'L':
21a3faeb
JB
13498 if (l != 0)
13499 abort ();
dc1e8a47 13500 case_L:
db6eb5be
AM
13501 if (intel_syntax)
13502 break;
252b5132
RH
13503 if (sizeflag & SUFFIX_ALWAYS)
13504 *obufp++ = 'l';
252b5132 13505 break;
9d141669
L
13506 case 'M':
13507 if (intel_mnemonic != cond)
13508 *obufp++ = 'r';
13509 break;
252b5132
RH
13510 case 'N':
13511 if ((prefixes & PREFIX_FWAIT) == 0)
13512 *obufp++ = 'n';
7d421014
ILT
13513 else
13514 used_prefixes |= PREFIX_FWAIT;
252b5132 13515 break;
52b15da3 13516 case 'O':
161a04f6
L
13517 USED_REX (REX_W);
13518 if (rex & REX_W)
6439fc28 13519 *obufp++ = 'o';
a35ca55a
JB
13520 else if (intel_syntax && (sizeflag & DFLAG))
13521 *obufp++ = 'q';
52b15da3
JH
13522 else
13523 *obufp++ = 'd';
161a04f6 13524 if (!(rex & REX_W))
a35ca55a 13525 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 13526 break;
07f5af7d
L
13527 case '&':
13528 if (!intel_syntax
13529 && address_mode == mode_64bit
13530 && isa64 == intel64)
13531 {
13532 *obufp++ = 'q';
13533 break;
13534 }
13535 /* Fall through. */
6439fc28 13536 case 'T':
d9e3625e
L
13537 if (!intel_syntax
13538 && address_mode == mode_64bit
7bb15c6f 13539 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
13540 {
13541 *obufp++ = 'q';
13542 break;
13543 }
6608db57 13544 /* Fall through. */
4b4c407a 13545 goto case_P;
252b5132 13546 case 'P':
21a3faeb 13547 if (l == 0)
d9e3625e 13548 {
dc1e8a47 13549 case_P:
4b4c407a 13550 if (intel_syntax)
d9e3625e 13551 {
4b4c407a
L
13552 if ((rex & REX_W) == 0
13553 && (prefixes & PREFIX_DATA))
13554 {
13555 if ((sizeflag & DFLAG) == 0)
13556 *obufp++ = 'w';
13557 used_prefixes |= (prefixes & PREFIX_DATA);
13558 }
13559 break;
13560 }
13561 if ((prefixes & PREFIX_DATA)
13562 || (rex & REX_W)
13563 || (sizeflag & SUFFIX_ALWAYS))
13564 {
13565 USED_REX (REX_W);
13566 if (rex & REX_W)
13567 *obufp++ = 'q';
13568 else
13569 {
13570 if (sizeflag & DFLAG)
13571 *obufp++ = 'l';
13572 else
13573 *obufp++ = 'w';
13574 used_prefixes |= (prefixes & PREFIX_DATA);
13575 }
d9e3625e 13576 }
d9e3625e 13577 }
21a3faeb 13578 else if (l == 1 && last[0] == 'L')
252b5132 13579 {
4b4c407a
L
13580 if ((prefixes & PREFIX_DATA)
13581 || (rex & REX_W)
13582 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 13583 {
4b4c407a
L
13584 USED_REX (REX_W);
13585 if (rex & REX_W)
13586 *obufp++ = 'q';
13587 else
13588 {
13589 if (sizeflag & DFLAG)
13590 *obufp++ = intel_syntax ? 'd' : 'l';
13591 else
13592 *obufp++ = 'w';
13593 used_prefixes |= (prefixes & PREFIX_DATA);
13594 }
52b15da3 13595 }
252b5132 13596 }
21a3faeb
JB
13597 else
13598 abort ();
252b5132 13599 break;
6439fc28 13600 case 'U':
db6eb5be
AM
13601 if (intel_syntax)
13602 break;
7bb15c6f 13603 if (address_mode == mode_64bit
6c067bbb 13604 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28 13605 {
7967e09e 13606 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 13607 *obufp++ = 'q';
6439fc28
AM
13608 break;
13609 }
6608db57 13610 /* Fall through. */
98b528ac 13611 goto case_Q;
252b5132 13612 case 'Q':
21a3faeb 13613 if (l == 0)
252b5132 13614 {
dc1e8a47 13615 case_Q:
98b528ac
L
13616 if (intel_syntax && !alt)
13617 break;
13618 USED_REX (REX_W);
13619 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 13620 {
98b528ac
L
13621 if (rex & REX_W)
13622 *obufp++ = 'q';
52b15da3 13623 else
98b528ac
L
13624 {
13625 if (sizeflag & DFLAG)
13626 *obufp++ = intel_syntax ? 'd' : 'l';
13627 else
13628 *obufp++ = 'w';
f16cd0d5 13629 used_prefixes |= (prefixes & PREFIX_DATA);
98b528ac 13630 }
52b15da3 13631 }
98b528ac 13632 }
492a76aa
JB
13633 else if (l == 1 && last[0] == 'D')
13634 *obufp++ = vex.w ? 'q' : 'd';
21a3faeb 13635 else if (l == 1 && last[0] == 'L')
98b528ac 13636 {
b24d668c
JB
13637 if (cond ? modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)
13638 : address_mode != mode_64bit)
98b528ac
L
13639 break;
13640 if ((rex & REX_W))
13641 {
13642 USED_REX (REX_W);
13643 *obufp++ = 'q';
13644 }
b24d668c 13645 else if((address_mode == mode_64bit && need_modrm && cond)
589958d6
JB
13646 || (sizeflag & SUFFIX_ALWAYS))
13647 *obufp++ = intel_syntax? 'd' : 'l';
252b5132 13648 }
21a3faeb
JB
13649 else
13650 abort ();
252b5132
RH
13651 break;
13652 case 'R':
161a04f6
L
13653 USED_REX (REX_W);
13654 if (rex & REX_W)
a35ca55a
JB
13655 *obufp++ = 'q';
13656 else if (sizeflag & DFLAG)
c608c12e 13657 {
a35ca55a 13658 if (intel_syntax)
c608c12e 13659 *obufp++ = 'd';
c608c12e 13660 else
a35ca55a 13661 *obufp++ = 'l';
c608c12e 13662 }
252b5132 13663 else
a35ca55a
JB
13664 *obufp++ = 'w';
13665 if (intel_syntax && !p[1]
161a04f6 13666 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 13667 *obufp++ = 'e';
161a04f6 13668 if (!(rex & REX_W))
52b15da3 13669 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 13670 break;
1a114b12 13671 case 'V':
21a3faeb 13672 if (l == 0)
1a114b12 13673 {
4b06377f
L
13674 if (intel_syntax)
13675 break;
7bb15c6f 13676 if (address_mode == mode_64bit
6c067bbb 13677 && ((sizeflag & DFLAG) || (rex & REX_W)))
4b06377f
L
13678 {
13679 if (sizeflag & SUFFIX_ALWAYS)
13680 *obufp++ = 'q';
13681 break;
13682 }
13683 }
21a3faeb 13684 else if (l == 1 && last[0] == 'L')
4b06377f 13685 {
4b06377f
L
13686 if (rex & REX_W)
13687 {
13688 *obufp++ = 'a';
13689 *obufp++ = 'b';
13690 *obufp++ = 's';
13691 }
1a114b12 13692 }
21a3faeb
JB
13693 else
13694 abort ();
1a114b12 13695 /* Fall through. */
4b06377f 13696 goto case_S;
252b5132 13697 case 'S':
21a3faeb 13698 if (l == 0)
252b5132 13699 {
dc1e8a47 13700 case_S:
4b06377f
L
13701 if (intel_syntax)
13702 break;
13703 if (sizeflag & SUFFIX_ALWAYS)
52b15da3 13704 {
4b06377f
L
13705 if (rex & REX_W)
13706 *obufp++ = 'q';
52b15da3 13707 else
4b06377f
L
13708 {
13709 if (sizeflag & DFLAG)
13710 *obufp++ = 'l';
13711 else
13712 *obufp++ = 'w';
13713 used_prefixes |= (prefixes & PREFIX_DATA);
13714 }
13715 }
13716 }
21a3faeb 13717 else if (l == 1 && last[0] == 'L')
4b06377f 13718 {
4b06377f
L
13719 if (address_mode == mode_64bit
13720 && !(prefixes & PREFIX_ADDR))
13721 {
13722 *obufp++ = 'a';
13723 *obufp++ = 'b';
13724 *obufp++ = 's';
13725 }
13726
13727 goto case_S;
252b5132 13728 }
21a3faeb
JB
13729 else
13730 abort ();
252b5132 13731 break;
041bd2e0 13732 case 'X':
21a3faeb
JB
13733 if (l != 0)
13734 abort ();
bf926894
JB
13735 if (need_vex
13736 ? vex.prefix == DATA_PREFIX_OPCODE
13737 : prefixes & PREFIX_DATA)
c0f3af97 13738 {
bf926894
JB
13739 *obufp++ = 'd';
13740 used_prefixes |= PREFIX_DATA;
c0f3af97 13741 }
041bd2e0 13742 else
bf926894 13743 *obufp++ = 's';
041bd2e0 13744 break;
76f227a5 13745 case 'Y':
21a3faeb 13746 if (l == 1 && last[0] == 'X')
c0f3af97 13747 {
c0f3af97
L
13748 if (!need_vex)
13749 abort ();
13750 if (intel_syntax
04d824a4 13751 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
c0f3af97
L
13752 break;
13753 switch (vex.length)
13754 {
13755 case 128:
13756 *obufp++ = 'x';
13757 break;
13758 case 256:
13759 *obufp++ = 'y';
13760 break;
04d824a4
JB
13761 case 512:
13762 if (!vex.evex)
c0f3af97 13763 default:
04d824a4 13764 abort ();
c0f3af97 13765 }
76f227a5 13766 }
21a3faeb
JB
13767 else
13768 abort ();
76f227a5 13769 break;
252b5132 13770 case 'W':
21a3faeb 13771 if (l == 0)
a35ca55a 13772 {
0bfee649
L
13773 /* operand size flag for cwtl, cbtw */
13774 USED_REX (REX_W);
13775 if (rex & REX_W)
13776 {
13777 if (intel_syntax)
13778 *obufp++ = 'd';
13779 else
13780 *obufp++ = 'l';
13781 }
13782 else if (sizeflag & DFLAG)
13783 *obufp++ = 'w';
a35ca55a 13784 else
0bfee649
L
13785 *obufp++ = 'b';
13786 if (!(rex & REX_W))
13787 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 13788 }
21a3faeb 13789 else if (l == 1)
0bfee649 13790 {
0bfee649
L
13791 if (!need_vex)
13792 abort ();
6c30d220
L
13793 if (last[0] == 'X')
13794 *obufp++ = vex.w ? 'd': 's';
931452b6
JB
13795 else if (last[0] == 'B')
13796 *obufp++ = vex.w ? 'w': 'b';
21a3faeb
JB
13797 else
13798 abort ();
0bfee649 13799 }
21a3faeb
JB
13800 else
13801 abort ();
252b5132 13802 break;
a72d2af2
L
13803 case '^':
13804 if (intel_syntax)
13805 break;
5990e377
JB
13806 if (isa64 == intel64 && (rex & REX_W))
13807 {
13808 USED_REX (REX_W);
13809 *obufp++ = 'q';
13810 break;
13811 }
a72d2af2
L
13812 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
13813 {
13814 if (sizeflag & DFLAG)
13815 *obufp++ = 'l';
13816 else
13817 *obufp++ = 'w';
13818 used_prefixes |= (prefixes & PREFIX_DATA);
13819 }
13820 break;
5db04b09
L
13821 case '@':
13822 if (intel_syntax)
13823 break;
13824 if (address_mode == mode_64bit
13825 && (isa64 == intel64
13826 || ((sizeflag & DFLAG) || (rex & REX_W))))
13827 *obufp++ = 'q';
13828 else if ((prefixes & PREFIX_DATA))
13829 {
13830 if (!(sizeflag & DFLAG))
13831 *obufp++ = 'w';
13832 used_prefixes |= (prefixes & PREFIX_DATA);
13833 }
13834 break;
252b5132 13835 }
21a3faeb
JB
13836
13837 if (len == l)
13838 len = l = 0;
252b5132
RH
13839 }
13840 *obufp = 0;
ea397f5b 13841 mnemonicendp = obufp;
6439fc28 13842 return 0;
252b5132
RH
13843}
13844
13845static void
26ca5450 13846oappend (const char *s)
252b5132 13847{
ea397f5b 13848 obufp = stpcpy (obufp, s);
252b5132
RH
13849}
13850
13851static void
26ca5450 13852append_seg (void)
252b5132 13853{
285ca992
L
13854 /* Only print the active segment register. */
13855 if (!active_seg_prefix)
13856 return;
13857
13858 used_prefixes |= active_seg_prefix;
13859 switch (active_seg_prefix)
7d421014 13860 {
285ca992 13861 case PREFIX_CS:
9ce09ba2 13862 oappend_maybe_intel ("%cs:");
285ca992
L
13863 break;
13864 case PREFIX_DS:
9ce09ba2 13865 oappend_maybe_intel ("%ds:");
285ca992
L
13866 break;
13867 case PREFIX_SS:
9ce09ba2 13868 oappend_maybe_intel ("%ss:");
285ca992
L
13869 break;
13870 case PREFIX_ES:
9ce09ba2 13871 oappend_maybe_intel ("%es:");
285ca992
L
13872 break;
13873 case PREFIX_FS:
9ce09ba2 13874 oappend_maybe_intel ("%fs:");
285ca992
L
13875 break;
13876 case PREFIX_GS:
9ce09ba2 13877 oappend_maybe_intel ("%gs:");
285ca992
L
13878 break;
13879 default:
13880 break;
7d421014 13881 }
252b5132
RH
13882}
13883
13884static void
26ca5450 13885OP_indirE (int bytemode, int sizeflag)
252b5132
RH
13886{
13887 if (!intel_syntax)
13888 oappend ("*");
13889 OP_E (bytemode, sizeflag);
13890}
13891
52b15da3 13892static void
26ca5450 13893print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 13894{
cb712a9e 13895 if (address_mode == mode_64bit)
52b15da3
JH
13896 {
13897 if (hex)
13898 {
13899 char tmp[30];
13900 int i;
13901 buf[0] = '0';
13902 buf[1] = 'x';
13903 sprintf_vma (tmp, disp);
6608db57 13904 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
13905 strcpy (buf + 2, tmp + i);
13906 }
13907 else
13908 {
13909 bfd_signed_vma v = disp;
13910 char tmp[30];
13911 int i;
13912 if (v < 0)
13913 {
13914 *(buf++) = '-';
13915 v = -disp;
6608db57 13916 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
13917 if (v < 0)
13918 {
13919 strcpy (buf, "9223372036854775808");
13920 return;
13921 }
13922 }
13923 if (!v)
13924 {
13925 strcpy (buf, "0");
13926 return;
13927 }
13928
13929 i = 0;
13930 tmp[29] = 0;
13931 while (v)
13932 {
6608db57 13933 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
13934 v /= 10;
13935 i++;
13936 }
13937 strcpy (buf, tmp + 29 - i);
13938 }
13939 }
13940 else
13941 {
13942 if (hex)
13943 sprintf (buf, "0x%x", (unsigned int) disp);
13944 else
13945 sprintf (buf, "%d", (int) disp);
13946 }
13947}
13948
5d669648
L
13949/* Put DISP in BUF as signed hex number. */
13950
13951static void
13952print_displacement (char *buf, bfd_vma disp)
13953{
13954 bfd_signed_vma val = disp;
13955 char tmp[30];
13956 int i, j = 0;
13957
13958 if (val < 0)
13959 {
13960 buf[j++] = '-';
13961 val = -disp;
13962
13963 /* Check for possible overflow. */
13964 if (val < 0)
13965 {
13966 switch (address_mode)
13967 {
13968 case mode_64bit:
13969 strcpy (buf + j, "0x8000000000000000");
13970 break;
13971 case mode_32bit:
13972 strcpy (buf + j, "0x80000000");
13973 break;
13974 case mode_16bit:
13975 strcpy (buf + j, "0x8000");
13976 break;
13977 }
13978 return;
13979 }
13980 }
13981
13982 buf[j++] = '0';
13983 buf[j++] = 'x';
13984
0af1713e 13985 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
13986 for (i = 0; tmp[i] == '0'; i++)
13987 continue;
13988 if (tmp[i] == '\0')
13989 i--;
13990 strcpy (buf + j, tmp + i);
13991}
13992
3f31e633
JB
13993static void
13994intel_operand_size (int bytemode, int sizeflag)
13995{
43234a1e
L
13996 if (vex.evex
13997 && vex.b
13998 && (bytemode == x_mode
13999 || bytemode == evex_half_bcst_xmmq_mode))
14000 {
14001 if (vex.w)
14002 oappend ("QWORD PTR ");
14003 else
14004 oappend ("DWORD PTR ");
14005 return;
14006 }
3f31e633
JB
14007 switch (bytemode)
14008 {
14009 case b_mode:
b6169b20 14010 case b_swap_mode:
42903f7f 14011 case dqb_mode:
1ba585e8 14012 case db_mode:
3f31e633
JB
14013 oappend ("BYTE PTR ");
14014 break;
14015 case w_mode:
1ba585e8 14016 case dw_mode:
3f31e633
JB
14017 case dqw_mode:
14018 oappend ("WORD PTR ");
14019 break;
07f5af7d
L
14020 case indir_v_mode:
14021 if (address_mode == mode_64bit && isa64 == intel64)
14022 {
14023 oappend ("QWORD PTR ");
14024 break;
14025 }
1a0670f3 14026 /* Fall through. */
1a114b12 14027 case stack_v_mode:
7bb15c6f 14028 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
3f31e633
JB
14029 {
14030 oappend ("QWORD PTR ");
3f31e633
JB
14031 break;
14032 }
1a0670f3 14033 /* Fall through. */
3f31e633 14034 case v_mode:
b6169b20 14035 case v_swap_mode:
3f31e633 14036 case dq_mode:
161a04f6
L
14037 USED_REX (REX_W);
14038 if (rex & REX_W)
3f31e633 14039 oappend ("QWORD PTR ");
3f31e633 14040 else
f16cd0d5
L
14041 {
14042 if ((sizeflag & DFLAG) || bytemode == dq_mode)
14043 oappend ("DWORD PTR ");
14044 else
14045 oappend ("WORD PTR ");
14046 used_prefixes |= (prefixes & PREFIX_DATA);
14047 }
3f31e633 14048 break;
52fd6d94 14049 case z_mode:
161a04f6 14050 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
14051 *obufp++ = 'D';
14052 oappend ("WORD PTR ");
161a04f6 14053 if (!(rex & REX_W))
52fd6d94
JB
14054 used_prefixes |= (prefixes & PREFIX_DATA);
14055 break;
34b772a6
JB
14056 case a_mode:
14057 if (sizeflag & DFLAG)
14058 oappend ("QWORD PTR ");
14059 else
14060 oappend ("DWORD PTR ");
14061 used_prefixes |= (prefixes & PREFIX_DATA);
14062 break;
bc31405e
L
14063 case movsxd_mode:
14064 if (!(sizeflag & DFLAG) && isa64 == intel64)
14065 oappend ("WORD PTR ");
14066 else
14067 oappend ("DWORD PTR ");
14068 used_prefixes |= (prefixes & PREFIX_DATA);
14069 break;
3f31e633 14070 case d_mode:
539f890d 14071 case d_scalar_swap_mode:
fa99fab2 14072 case d_swap_mode:
42903f7f 14073 case dqd_mode:
3f31e633
JB
14074 oappend ("DWORD PTR ");
14075 break;
14076 case q_mode:
539f890d 14077 case q_scalar_swap_mode:
b6169b20 14078 case q_swap_mode:
3f31e633
JB
14079 oappend ("QWORD PTR ");
14080 break;
14081 case m_mode:
cb712a9e 14082 if (address_mode == mode_64bit)
3f31e633
JB
14083 oappend ("QWORD PTR ");
14084 else
14085 oappend ("DWORD PTR ");
14086 break;
14087 case f_mode:
14088 if (sizeflag & DFLAG)
14089 oappend ("FWORD PTR ");
14090 else
14091 oappend ("DWORD PTR ");
14092 used_prefixes |= (prefixes & PREFIX_DATA);
14093 break;
14094 case t_mode:
14095 oappend ("TBYTE PTR ");
14096 break;
14097 case x_mode:
b6169b20 14098 case x_swap_mode:
43234a1e
L
14099 case evex_x_gscat_mode:
14100 case evex_x_nobcst_mode:
4726e9a4 14101 case bw_unit_mode:
c0f3af97
L
14102 if (need_vex)
14103 {
14104 switch (vex.length)
14105 {
14106 case 128:
14107 oappend ("XMMWORD PTR ");
14108 break;
14109 case 256:
14110 oappend ("YMMWORD PTR ");
14111 break;
43234a1e
L
14112 case 512:
14113 oappend ("ZMMWORD PTR ");
14114 break;
c0f3af97
L
14115 default:
14116 abort ();
14117 }
14118 }
14119 else
14120 oappend ("XMMWORD PTR ");
14121 break;
14122 case xmm_mode:
3f31e633
JB
14123 oappend ("XMMWORD PTR ");
14124 break;
43234a1e
L
14125 case ymm_mode:
14126 oappend ("YMMWORD PTR ");
14127 break;
c0f3af97 14128 case xmmq_mode:
43234a1e 14129 case evex_half_bcst_xmmq_mode:
c0f3af97
L
14130 if (!need_vex)
14131 abort ();
14132
14133 switch (vex.length)
14134 {
14135 case 128:
14136 oappend ("QWORD PTR ");
14137 break;
14138 case 256:
14139 oappend ("XMMWORD PTR ");
14140 break;
43234a1e
L
14141 case 512:
14142 oappend ("YMMWORD PTR ");
14143 break;
c0f3af97
L
14144 default:
14145 abort ();
14146 }
14147 break;
6c30d220
L
14148 case xmm_mb_mode:
14149 if (!need_vex)
14150 abort ();
14151
14152 switch (vex.length)
14153 {
14154 case 128:
14155 case 256:
43234a1e 14156 case 512:
6c30d220
L
14157 oappend ("BYTE PTR ");
14158 break;
14159 default:
14160 abort ();
14161 }
14162 break;
14163 case xmm_mw_mode:
14164 if (!need_vex)
14165 abort ();
14166
14167 switch (vex.length)
14168 {
14169 case 128:
14170 case 256:
43234a1e 14171 case 512:
6c30d220
L
14172 oappend ("WORD PTR ");
14173 break;
14174 default:
14175 abort ();
14176 }
14177 break;
14178 case xmm_md_mode:
14179 if (!need_vex)
14180 abort ();
14181
14182 switch (vex.length)
14183 {
14184 case 128:
14185 case 256:
43234a1e 14186 case 512:
6c30d220
L
14187 oappend ("DWORD PTR ");
14188 break;
14189 default:
14190 abort ();
14191 }
14192 break;
14193 case xmm_mq_mode:
14194 if (!need_vex)
14195 abort ();
14196
14197 switch (vex.length)
14198 {
14199 case 128:
14200 case 256:
43234a1e 14201 case 512:
6c30d220
L
14202 oappend ("QWORD PTR ");
14203 break;
14204 default:
14205 abort ();
14206 }
14207 break;
14208 case xmmdw_mode:
14209 if (!need_vex)
14210 abort ();
14211
14212 switch (vex.length)
14213 {
14214 case 128:
14215 oappend ("WORD PTR ");
14216 break;
14217 case 256:
14218 oappend ("DWORD PTR ");
14219 break;
43234a1e
L
14220 case 512:
14221 oappend ("QWORD PTR ");
14222 break;
6c30d220
L
14223 default:
14224 abort ();
14225 }
14226 break;
14227 case xmmqd_mode:
14228 if (!need_vex)
14229 abort ();
14230
14231 switch (vex.length)
14232 {
14233 case 128:
14234 oappend ("DWORD PTR ");
14235 break;
14236 case 256:
14237 oappend ("QWORD PTR ");
14238 break;
43234a1e
L
14239 case 512:
14240 oappend ("XMMWORD PTR ");
14241 break;
6c30d220
L
14242 default:
14243 abort ();
14244 }
14245 break;
c0f3af97
L
14246 case ymmq_mode:
14247 if (!need_vex)
14248 abort ();
14249
14250 switch (vex.length)
14251 {
14252 case 128:
14253 oappend ("QWORD PTR ");
14254 break;
14255 case 256:
14256 oappend ("YMMWORD PTR ");
14257 break;
43234a1e
L
14258 case 512:
14259 oappend ("ZMMWORD PTR ");
14260 break;
c0f3af97
L
14261 default:
14262 abort ();
14263 }
14264 break;
6c30d220
L
14265 case ymmxmm_mode:
14266 if (!need_vex)
14267 abort ();
14268
14269 switch (vex.length)
14270 {
14271 case 128:
14272 case 256:
14273 oappend ("XMMWORD PTR ");
14274 break;
14275 default:
14276 abort ();
14277 }
14278 break;
fb9c77c7
L
14279 case o_mode:
14280 oappend ("OWORD PTR ");
14281 break;
1c480963 14282 case vex_scalar_w_dq_mode:
0bfee649
L
14283 if (!need_vex)
14284 abort ();
14285
14286 if (vex.w)
14287 oappend ("QWORD PTR ");
14288 else
14289 oappend ("DWORD PTR ");
14290 break;
43234a1e
L
14291 case vex_vsib_d_w_dq_mode:
14292 case vex_vsib_q_w_dq_mode:
14293 if (!need_vex)
14294 abort ();
14295
14296 if (!vex.evex)
14297 {
14298 if (vex.w)
14299 oappend ("QWORD PTR ");
14300 else
14301 oappend ("DWORD PTR ");
14302 }
14303 else
14304 {
b28d1bda
IT
14305 switch (vex.length)
14306 {
14307 case 128:
14308 oappend ("XMMWORD PTR ");
14309 break;
14310 case 256:
14311 oappend ("YMMWORD PTR ");
14312 break;
14313 case 512:
14314 oappend ("ZMMWORD PTR ");
14315 break;
14316 default:
14317 abort ();
14318 }
43234a1e
L
14319 }
14320 break;
5fc35d96
IT
14321 case vex_vsib_q_w_d_mode:
14322 case vex_vsib_d_w_d_mode:
b28d1bda 14323 if (!need_vex || !vex.evex)
5fc35d96
IT
14324 abort ();
14325
b28d1bda
IT
14326 switch (vex.length)
14327 {
14328 case 128:
14329 oappend ("QWORD PTR ");
14330 break;
14331 case 256:
14332 oappend ("XMMWORD PTR ");
14333 break;
14334 case 512:
14335 oappend ("YMMWORD PTR ");
14336 break;
14337 default:
14338 abort ();
14339 }
5fc35d96
IT
14340
14341 break;
1ba585e8
IT
14342 case mask_bd_mode:
14343 if (!need_vex || vex.length != 128)
14344 abort ();
14345 if (vex.w)
14346 oappend ("DWORD PTR ");
14347 else
14348 oappend ("BYTE PTR ");
14349 break;
43234a1e
L
14350 case mask_mode:
14351 if (!need_vex)
14352 abort ();
1ba585e8
IT
14353 if (vex.w)
14354 oappend ("QWORD PTR ");
14355 else
14356 oappend ("WORD PTR ");
43234a1e 14357 break;
6c75cc62 14358 case v_bnd_mode:
d276ec69 14359 case v_bndmk_mode:
3f31e633
JB
14360 default:
14361 break;
14362 }
14363}
14364
252b5132 14365static void
c0f3af97 14366OP_E_register (int bytemode, int sizeflag)
252b5132 14367{
c0f3af97
L
14368 int reg = modrm.rm;
14369 const char **names;
252b5132 14370
c0f3af97
L
14371 USED_REX (REX_B);
14372 if ((rex & REX_B))
14373 reg += 8;
252b5132 14374
b6169b20 14375 if ((sizeflag & SUFFIX_ALWAYS)
1ba585e8 14376 && (bytemode == b_swap_mode
9f79e886 14377 || bytemode == bnd_swap_mode
60227d64 14378 || bytemode == v_swap_mode))
b6169b20
L
14379 swap_operand ();
14380
c0f3af97 14381 switch (bytemode)
252b5132 14382 {
c0f3af97 14383 case b_mode:
b6169b20 14384 case b_swap_mode:
e184e611
JB
14385 if (reg & 4)
14386 USED_REX (0);
c0f3af97
L
14387 if (rex)
14388 names = names8rex;
14389 else
14390 names = names8;
14391 break;
14392 case w_mode:
14393 names = names16;
14394 break;
14395 case d_mode:
1ba585e8
IT
14396 case dw_mode:
14397 case db_mode:
c0f3af97
L
14398 names = names32;
14399 break;
14400 case q_mode:
14401 names = names64;
14402 break;
14403 case m_mode:
6c75cc62 14404 case v_bnd_mode:
c0f3af97
L
14405 names = address_mode == mode_64bit ? names64 : names32;
14406 break;
7e8b059b 14407 case bnd_mode:
9f79e886 14408 case bnd_swap_mode:
0d96e4df
L
14409 if (reg > 0x3)
14410 {
14411 oappend ("(bad)");
14412 return;
14413 }
7e8b059b
L
14414 names = names_bnd;
14415 break;
07f5af7d
L
14416 case indir_v_mode:
14417 if (address_mode == mode_64bit && isa64 == intel64)
14418 {
14419 names = names64;
14420 break;
14421 }
1a0670f3 14422 /* Fall through. */
c0f3af97 14423 case stack_v_mode:
7bb15c6f 14424 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
252b5132 14425 {
c0f3af97 14426 names = names64;
252b5132 14427 break;
252b5132 14428 }
c0f3af97 14429 bytemode = v_mode;
1a0670f3 14430 /* Fall through. */
c0f3af97 14431 case v_mode:
b6169b20 14432 case v_swap_mode:
c0f3af97
L
14433 case dq_mode:
14434 case dqb_mode:
14435 case dqd_mode:
14436 case dqw_mode:
14437 USED_REX (REX_W);
14438 if (rex & REX_W)
14439 names = names64;
c0f3af97 14440 else
f16cd0d5 14441 {
7bb15c6f 14442 if ((sizeflag & DFLAG)
f16cd0d5
L
14443 || (bytemode != v_mode
14444 && bytemode != v_swap_mode))
14445 names = names32;
14446 else
14447 names = names16;
14448 used_prefixes |= (prefixes & PREFIX_DATA);
14449 }
c0f3af97 14450 break;
bc31405e
L
14451 case movsxd_mode:
14452 if (!(sizeflag & DFLAG) && isa64 == intel64)
14453 names = names16;
14454 else
14455 names = names32;
14456 used_prefixes |= (prefixes & PREFIX_DATA);
14457 break;
de89d0a3
IT
14458 case va_mode:
14459 names = (address_mode == mode_64bit
14460 ? names64 : names32);
14461 if (!(prefixes & PREFIX_ADDR))
aa178437
IT
14462 names = (address_mode == mode_16bit
14463 ? names16 : names);
de89d0a3
IT
14464 else
14465 {
14466 /* Remove "addr16/addr32". */
14467 all_prefixes[last_addr_prefix] = 0;
14468 names = (address_mode != mode_32bit
14469 ? names32 : names16);
14470 used_prefixes |= PREFIX_ADDR;
14471 }
14472 break;
1ba585e8 14473 case mask_bd_mode:
43234a1e 14474 case mask_mode:
9889cbb1
L
14475 if (reg > 0x7)
14476 {
14477 oappend ("(bad)");
14478 return;
14479 }
43234a1e
L
14480 names = names_mask;
14481 break;
c0f3af97
L
14482 case 0:
14483 return;
14484 default:
14485 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
14486 return;
14487 }
c0f3af97
L
14488 oappend (names[reg]);
14489}
14490
14491static void
c1e679ec 14492OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
14493{
14494 bfd_vma disp = 0;
14495 int add = (rex & REX_B) ? 8 : 0;
14496 int riprel = 0;
43234a1e
L
14497 int shift;
14498
14499 if (vex.evex)
14500 {
14501 /* In EVEX, if operand doesn't allow broadcast, vex.b should be 0. */
14502 if (vex.b
14503 && bytemode != x_mode
90a915bf 14504 && bytemode != xmmq_mode
43234a1e
L
14505 && bytemode != evex_half_bcst_xmmq_mode)
14506 {
14507 BadOp ();
14508 return;
14509 }
14510 switch (bytemode)
14511 {
1ba585e8
IT
14512 case dqw_mode:
14513 case dw_mode:
059edf8b 14514 case xmm_mw_mode:
1ba585e8
IT
14515 shift = 1;
14516 break;
14517 case dqb_mode:
14518 case db_mode:
059edf8b 14519 case xmm_mb_mode:
1ba585e8
IT
14520 shift = 0;
14521 break;
b50c9f31
JB
14522 case dq_mode:
14523 if (address_mode != mode_64bit)
14524 {
059edf8b
JB
14525 case dqd_mode:
14526 case xmm_md_mode:
14527 case d_mode:
14528 case d_swap_mode:
14529 case d_scalar_swap_mode:
b50c9f31
JB
14530 shift = 2;
14531 break;
14532 }
14533 /* fall through */
4102be5c 14534 case vex_scalar_w_dq_mode:
43234a1e 14535 case vex_vsib_d_w_dq_mode:
5fc35d96 14536 case vex_vsib_d_w_d_mode:
eaa9d1ad 14537 case vex_vsib_q_w_dq_mode:
5fc35d96 14538 case vex_vsib_q_w_d_mode:
43234a1e 14539 case evex_x_gscat_mode:
43234a1e
L
14540 shift = vex.w ? 3 : 2;
14541 break;
43234a1e
L
14542 case x_mode:
14543 case evex_half_bcst_xmmq_mode:
90a915bf 14544 case xmmq_mode:
43234a1e
L
14545 if (vex.b)
14546 {
14547 shift = vex.w ? 3 : 2;
14548 break;
14549 }
1a0670f3 14550 /* Fall through. */
43234a1e
L
14551 case xmmqd_mode:
14552 case xmmdw_mode:
43234a1e
L
14553 case ymmq_mode:
14554 case evex_x_nobcst_mode:
14555 case x_swap_mode:
14556 switch (vex.length)
14557 {
14558 case 128:
14559 shift = 4;
14560 break;
14561 case 256:
14562 shift = 5;
14563 break;
14564 case 512:
14565 shift = 6;
14566 break;
14567 default:
14568 abort ();
14569 }
059edf8b
JB
14570 /* Make necessary corrections to shift for modes that need it. */
14571 if (bytemode == xmmq_mode
14572 || bytemode == evex_half_bcst_xmmq_mode
14573 || (bytemode == ymmq_mode && vex.length == 128))
14574 shift -= 1;
14575 else if (bytemode == xmmqd_mode)
14576 shift -= 2;
14577 else if (bytemode == xmmdw_mode)
14578 shift -= 3;
43234a1e
L
14579 break;
14580 case ymm_mode:
14581 shift = 5;
14582 break;
14583 case xmm_mode:
14584 shift = 4;
14585 break;
14586 case xmm_mq_mode:
14587 case q_mode:
43234a1e
L
14588 case q_swap_mode:
14589 case q_scalar_swap_mode:
14590 shift = 3;
14591 break;
4726e9a4
JB
14592 case bw_unit_mode:
14593 shift = vex.w ? 1 : 0;
14594 break;
43234a1e
L
14595 default:
14596 abort ();
14597 }
43234a1e
L
14598 }
14599 else
14600 shift = 0;
252b5132 14601
c0f3af97 14602 USED_REX (REX_B);
3f31e633
JB
14603 if (intel_syntax)
14604 intel_operand_size (bytemode, sizeflag);
252b5132
RH
14605 append_seg ();
14606
5d669648 14607 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 14608 {
5d669648
L
14609 /* 32/64 bit address mode */
14610 int havedisp;
252b5132
RH
14611 int havesib;
14612 int havebase;
0f7da397 14613 int haveindex;
20afcfb7 14614 int needindex;
1bc60e56 14615 int needaddr32;
82c18208 14616 int base, rbase;
91d6fa6a 14617 int vindex = 0;
252b5132 14618 int scale = 0;
7e8b059b
L
14619 int addr32flag = !((sizeflag & AFLAG)
14620 || bytemode == v_bnd_mode
d276ec69 14621 || bytemode == v_bndmk_mode
9f79e886
JB
14622 || bytemode == bnd_mode
14623 || bytemode == bnd_swap_mode);
6c30d220
L
14624 const char **indexes64 = names64;
14625 const char **indexes32 = names32;
252b5132
RH
14626
14627 havesib = 0;
14628 havebase = 1;
0f7da397 14629 haveindex = 0;
7967e09e 14630 base = modrm.rm;
252b5132
RH
14631
14632 if (base == 4)
14633 {
14634 havesib = 1;
dfc8cf43 14635 vindex = sib.index;
161a04f6
L
14636 USED_REX (REX_X);
14637 if (rex & REX_X)
91d6fa6a 14638 vindex += 8;
6c30d220
L
14639 switch (bytemode)
14640 {
14641 case vex_vsib_d_w_dq_mode:
5fc35d96 14642 case vex_vsib_d_w_d_mode:
6c30d220 14643 case vex_vsib_q_w_dq_mode:
5fc35d96 14644 case vex_vsib_q_w_d_mode:
6c30d220
L
14645 if (!need_vex)
14646 abort ();
43234a1e
L
14647 if (vex.evex)
14648 {
14649 if (!vex.v)
14650 vindex += 16;
14651 }
6c30d220
L
14652
14653 haveindex = 1;
14654 switch (vex.length)
14655 {
14656 case 128:
7bb15c6f 14657 indexes64 = indexes32 = names_xmm;
6c30d220
L
14658 break;
14659 case 256:
5fc35d96
IT
14660 if (!vex.w
14661 || bytemode == vex_vsib_q_w_dq_mode
14662 || bytemode == vex_vsib_q_w_d_mode)
7bb15c6f 14663 indexes64 = indexes32 = names_ymm;
6c30d220 14664 else
7bb15c6f 14665 indexes64 = indexes32 = names_xmm;
6c30d220 14666 break;
43234a1e 14667 case 512:
5fc35d96
IT
14668 if (!vex.w
14669 || bytemode == vex_vsib_q_w_dq_mode
14670 || bytemode == vex_vsib_q_w_d_mode)
43234a1e
L
14671 indexes64 = indexes32 = names_zmm;
14672 else
14673 indexes64 = indexes32 = names_ymm;
14674 break;
6c30d220
L
14675 default:
14676 abort ();
14677 }
14678 break;
14679 default:
14680 haveindex = vindex != 4;
14681 break;
14682 }
14683 scale = sib.scale;
14684 base = sib.base;
252b5132
RH
14685 codep++;
14686 }
260cd341
LC
14687 else
14688 {
14689 /* mandatory non-vector SIB must have sib */
14690 if (bytemode == vex_sibmem_mode)
14691 {
14692 oappend ("(bad)");
14693 return;
14694 }
14695 }
82c18208 14696 rbase = base + add;
252b5132 14697
7967e09e 14698 switch (modrm.mod)
252b5132
RH
14699 {
14700 case 0:
82c18208 14701 if (base == 5)
252b5132
RH
14702 {
14703 havebase = 0;
cb712a9e 14704 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
14705 riprel = 1;
14706 disp = get32s ();
d276ec69
JB
14707 if (riprel && bytemode == v_bndmk_mode)
14708 {
14709 oappend ("(bad)");
14710 return;
14711 }
252b5132
RH
14712 }
14713 break;
14714 case 1:
14715 FETCH_DATA (the_info, codep + 1);
14716 disp = *codep++;
14717 if ((disp & 0x80) != 0)
14718 disp -= 0x100;
43234a1e
L
14719 if (vex.evex && shift > 0)
14720 disp <<= shift;
252b5132
RH
14721 break;
14722 case 2:
52b15da3 14723 disp = get32s ();
252b5132
RH
14724 break;
14725 }
14726
1bc60e56
L
14727 needindex = 0;
14728 needaddr32 = 0;
14729 if (havesib
14730 && !havebase
14731 && !haveindex
14732 && address_mode != mode_16bit)
14733 {
14734 if (address_mode == mode_64bit)
14735 {
14736 /* Display eiz instead of addr32. */
14737 needindex = addr32flag;
14738 needaddr32 = 1;
14739 }
14740 else
14741 {
14742 /* In 32-bit mode, we need index register to tell [offset]
14743 from [eiz*1 + offset]. */
14744 needindex = 1;
14745 }
14746 }
14747
20afcfb7
L
14748 havedisp = (havebase
14749 || needindex
14750 || (havesib && (haveindex || scale != 0)));
5d669648 14751
252b5132 14752 if (!intel_syntax)
82c18208 14753 if (modrm.mod != 0 || base == 5)
db6eb5be 14754 {
5d669648
L
14755 if (havedisp || riprel)
14756 print_displacement (scratchbuf, disp);
14757 else
14758 print_operand_value (scratchbuf, 1, disp);
db6eb5be 14759 oappend (scratchbuf);
52b15da3
JH
14760 if (riprel)
14761 {
14762 set_op (disp, 1);
28596323 14763 oappend (!addr32flag ? "(%rip)" : "(%eip)");
52b15da3 14764 }
db6eb5be 14765 }
2da11e11 14766
c1dc7af5 14767 if ((havebase || haveindex || needindex || needaddr32 || riprel)
a23b33b3
JB
14768 && (address_mode != mode_64bit
14769 || ((bytemode != v_bnd_mode)
14770 && (bytemode != v_bndmk_mode)
14771 && (bytemode != bnd_mode)
14772 && (bytemode != bnd_swap_mode))))
87767711
JB
14773 used_prefixes |= PREFIX_ADDR;
14774
5d669648 14775 if (havedisp || (intel_syntax && riprel))
252b5132 14776 {
252b5132 14777 *obufp++ = open_char;
52b15da3 14778 if (intel_syntax && riprel)
185b1163
L
14779 {
14780 set_op (disp, 1);
28596323 14781 oappend (!addr32flag ? "rip" : "eip");
185b1163 14782 }
db6eb5be 14783 *obufp = '\0';
252b5132 14784 if (havebase)
7e8b059b 14785 oappend (address_mode == mode_64bit && !addr32flag
82c18208 14786 ? names64[rbase] : names32[rbase]);
252b5132
RH
14787 if (havesib)
14788 {
db51cc60
L
14789 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
14790 print index to tell base + index from base. */
14791 if (scale != 0
20afcfb7 14792 || needindex
db51cc60
L
14793 || haveindex
14794 || (havebase && base != ESP_REG_NUM))
252b5132 14795 {
9306ca4a 14796 if (!intel_syntax || havebase)
db6eb5be 14797 {
9306ca4a
JB
14798 *obufp++ = separator_char;
14799 *obufp = '\0';
db6eb5be 14800 }
db51cc60 14801 if (haveindex)
7e8b059b 14802 oappend (address_mode == mode_64bit && !addr32flag
6c30d220 14803 ? indexes64[vindex] : indexes32[vindex]);
db51cc60 14804 else
7e8b059b 14805 oappend (address_mode == mode_64bit && !addr32flag
db51cc60
L
14806 ? index64 : index32);
14807
db6eb5be
AM
14808 *obufp++ = scale_char;
14809 *obufp = '\0';
14810 sprintf (scratchbuf, "%d", 1 << scale);
14811 oappend (scratchbuf);
14812 }
252b5132 14813 }
185b1163 14814 if (intel_syntax
82c18208 14815 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 14816 {
db51cc60 14817 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
14818 {
14819 *obufp++ = '+';
14820 *obufp = '\0';
14821 }
05203043 14822 else if (modrm.mod != 1 && disp != -disp)
3d456fa1
JB
14823 {
14824 *obufp++ = '-';
14825 *obufp = '\0';
14826 disp = - (bfd_signed_vma) disp;
14827 }
14828
db51cc60
L
14829 if (havedisp)
14830 print_displacement (scratchbuf, disp);
14831 else
14832 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
14833 oappend (scratchbuf);
14834 }
252b5132
RH
14835
14836 *obufp++ = close_char;
db6eb5be 14837 *obufp = '\0';
252b5132
RH
14838 }
14839 else if (intel_syntax)
db6eb5be 14840 {
82c18208 14841 if (modrm.mod != 0 || base == 5)
db6eb5be 14842 {
285ca992 14843 if (!active_seg_prefix)
252b5132 14844 {
d708bcba 14845 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
14846 oappend (":");
14847 }
52b15da3 14848 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
14849 oappend (scratchbuf);
14850 }
14851 }
252b5132 14852 }
a23b33b3
JB
14853 else if (bytemode == v_bnd_mode
14854 || bytemode == v_bndmk_mode
14855 || bytemode == bnd_mode
14856 || bytemode == bnd_swap_mode)
14857 {
14858 oappend ("(bad)");
14859 return;
14860 }
252b5132 14861 else
f16cd0d5
L
14862 {
14863 /* 16 bit address mode */
14864 used_prefixes |= prefixes & PREFIX_ADDR;
7967e09e 14865 switch (modrm.mod)
252b5132
RH
14866 {
14867 case 0:
7967e09e 14868 if (modrm.rm == 6)
252b5132
RH
14869 {
14870 disp = get16 ();
14871 if ((disp & 0x8000) != 0)
14872 disp -= 0x10000;
14873 }
14874 break;
14875 case 1:
14876 FETCH_DATA (the_info, codep + 1);
14877 disp = *codep++;
14878 if ((disp & 0x80) != 0)
14879 disp -= 0x100;
65f3ed04
JB
14880 if (vex.evex && shift > 0)
14881 disp <<= shift;
252b5132
RH
14882 break;
14883 case 2:
14884 disp = get16 ();
14885 if ((disp & 0x8000) != 0)
14886 disp -= 0x10000;
14887 break;
14888 }
14889
14890 if (!intel_syntax)
7967e09e 14891 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 14892 {
5d669648 14893 print_displacement (scratchbuf, disp);
db6eb5be
AM
14894 oappend (scratchbuf);
14895 }
252b5132 14896
7967e09e 14897 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
14898 {
14899 *obufp++ = open_char;
db6eb5be 14900 *obufp = '\0';
7967e09e 14901 oappend (index16[modrm.rm]);
5d669648
L
14902 if (intel_syntax
14903 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 14904 {
5d669648 14905 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
14906 {
14907 *obufp++ = '+';
14908 *obufp = '\0';
14909 }
7967e09e 14910 else if (modrm.mod != 1)
3d456fa1
JB
14911 {
14912 *obufp++ = '-';
14913 *obufp = '\0';
14914 disp = - (bfd_signed_vma) disp;
14915 }
14916
5d669648 14917 print_displacement (scratchbuf, disp);
3d456fa1
JB
14918 oappend (scratchbuf);
14919 }
14920
db6eb5be
AM
14921 *obufp++ = close_char;
14922 *obufp = '\0';
252b5132 14923 }
3d456fa1
JB
14924 else if (intel_syntax)
14925 {
285ca992 14926 if (!active_seg_prefix)
3d456fa1
JB
14927 {
14928 oappend (names_seg[ds_reg - es_reg]);
14929 oappend (":");
14930 }
14931 print_operand_value (scratchbuf, 1, disp & 0xffff);
14932 oappend (scratchbuf);
14933 }
252b5132 14934 }
43234a1e
L
14935 if (vex.evex && vex.b
14936 && (bytemode == x_mode
90a915bf 14937 || bytemode == xmmq_mode
43234a1e
L
14938 || bytemode == evex_half_bcst_xmmq_mode))
14939 {
90a915bf
IT
14940 if (vex.w
14941 || bytemode == xmmq_mode
14942 || bytemode == evex_half_bcst_xmmq_mode)
b28d1bda
IT
14943 {
14944 switch (vex.length)
14945 {
14946 case 128:
14947 oappend ("{1to2}");
14948 break;
14949 case 256:
14950 oappend ("{1to4}");
14951 break;
14952 case 512:
14953 oappend ("{1to8}");
14954 break;
14955 default:
14956 abort ();
14957 }
14958 }
43234a1e 14959 else
b28d1bda
IT
14960 {
14961 switch (vex.length)
14962 {
14963 case 128:
14964 oappend ("{1to4}");
14965 break;
14966 case 256:
14967 oappend ("{1to8}");
14968 break;
14969 case 512:
14970 oappend ("{1to16}");
14971 break;
14972 default:
14973 abort ();
14974 }
14975 }
43234a1e 14976 }
252b5132
RH
14977}
14978
c0f3af97 14979static void
8b3f93e7 14980OP_E (int bytemode, int sizeflag)
c0f3af97
L
14981{
14982 /* Skip mod/rm byte. */
14983 MODRM_CHECK;
14984 codep++;
14985
14986 if (modrm.mod == 3)
14987 OP_E_register (bytemode, sizeflag);
14988 else
c1e679ec 14989 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
14990}
14991
252b5132 14992static void
26ca5450 14993OP_G (int bytemode, int sizeflag)
252b5132 14994{
52b15da3 14995 int add = 0;
c0a30a9f 14996 const char **names;
161a04f6
L
14997 USED_REX (REX_R);
14998 if (rex & REX_R)
52b15da3 14999 add += 8;
252b5132
RH
15000 switch (bytemode)
15001 {
15002 case b_mode:
e184e611
JB
15003 if (modrm.reg & 4)
15004 USED_REX (0);
52b15da3 15005 if (rex)
7967e09e 15006 oappend (names8rex[modrm.reg + add]);
52b15da3 15007 else
7967e09e 15008 oappend (names8[modrm.reg + add]);
252b5132
RH
15009 break;
15010 case w_mode:
7967e09e 15011 oappend (names16[modrm.reg + add]);
252b5132
RH
15012 break;
15013 case d_mode:
1ba585e8
IT
15014 case db_mode:
15015 case dw_mode:
7967e09e 15016 oappend (names32[modrm.reg + add]);
52b15da3
JH
15017 break;
15018 case q_mode:
7967e09e 15019 oappend (names64[modrm.reg + add]);
252b5132 15020 break;
7e8b059b 15021 case bnd_mode:
0d96e4df
L
15022 if (modrm.reg > 0x3)
15023 {
15024 oappend ("(bad)");
15025 return;
15026 }
7e8b059b
L
15027 oappend (names_bnd[modrm.reg]);
15028 break;
252b5132 15029 case v_mode:
9306ca4a 15030 case dq_mode:
42903f7f
L
15031 case dqb_mode:
15032 case dqd_mode:
9306ca4a 15033 case dqw_mode:
bc31405e 15034 case movsxd_mode:
161a04f6
L
15035 USED_REX (REX_W);
15036 if (rex & REX_W)
7967e09e 15037 oappend (names64[modrm.reg + add]);
252b5132 15038 else
f16cd0d5 15039 {
bc31405e
L
15040 if ((sizeflag & DFLAG)
15041 || (bytemode != v_mode && bytemode != movsxd_mode))
f16cd0d5
L
15042 oappend (names32[modrm.reg + add]);
15043 else
15044 oappend (names16[modrm.reg + add]);
15045 used_prefixes |= (prefixes & PREFIX_DATA);
15046 }
252b5132 15047 break;
c0a30a9f
L
15048 case va_mode:
15049 names = (address_mode == mode_64bit
15050 ? names64 : names32);
15051 if (!(prefixes & PREFIX_ADDR))
15052 {
15053 if (address_mode == mode_16bit)
15054 names = names16;
15055 }
15056 else
15057 {
15058 /* Remove "addr16/addr32". */
15059 all_prefixes[last_addr_prefix] = 0;
15060 names = (address_mode != mode_32bit
15061 ? names32 : names16);
15062 used_prefixes |= PREFIX_ADDR;
15063 }
15064 oappend (names[modrm.reg + add]);
15065 break;
90700ea2 15066 case m_mode:
cb712a9e 15067 if (address_mode == mode_64bit)
7967e09e 15068 oappend (names64[modrm.reg + add]);
90700ea2 15069 else
7967e09e 15070 oappend (names32[modrm.reg + add]);
90700ea2 15071 break;
1ba585e8 15072 case mask_bd_mode:
43234a1e 15073 case mask_mode:
9889cbb1
L
15074 if ((modrm.reg + add) > 0x7)
15075 {
15076 oappend ("(bad)");
15077 return;
15078 }
43234a1e
L
15079 oappend (names_mask[modrm.reg + add]);
15080 break;
252b5132
RH
15081 default:
15082 oappend (INTERNAL_DISASSEMBLER_ERROR);
15083 break;
15084 }
15085}
15086
52b15da3 15087static bfd_vma
26ca5450 15088get64 (void)
52b15da3 15089{
5dd0794d 15090 bfd_vma x;
52b15da3 15091#ifdef BFD64
5dd0794d
AM
15092 unsigned int a;
15093 unsigned int b;
15094
52b15da3
JH
15095 FETCH_DATA (the_info, codep + 8);
15096 a = *codep++ & 0xff;
15097 a |= (*codep++ & 0xff) << 8;
15098 a |= (*codep++ & 0xff) << 16;
070fe95d 15099 a |= (*codep++ & 0xffu) << 24;
5dd0794d 15100 b = *codep++ & 0xff;
52b15da3
JH
15101 b |= (*codep++ & 0xff) << 8;
15102 b |= (*codep++ & 0xff) << 16;
070fe95d 15103 b |= (*codep++ & 0xffu) << 24;
52b15da3
JH
15104 x = a + ((bfd_vma) b << 32);
15105#else
6608db57 15106 abort ();
5dd0794d 15107 x = 0;
52b15da3
JH
15108#endif
15109 return x;
15110}
15111
15112static bfd_signed_vma
26ca5450 15113get32 (void)
252b5132 15114{
52b15da3 15115 bfd_signed_vma x = 0;
252b5132
RH
15116
15117 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
15118 x = *codep++ & (bfd_signed_vma) 0xff;
15119 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
15120 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
15121 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
15122 return x;
15123}
15124
15125static bfd_signed_vma
26ca5450 15126get32s (void)
52b15da3
JH
15127{
15128 bfd_signed_vma x = 0;
15129
15130 FETCH_DATA (the_info, codep + 4);
15131 x = *codep++ & (bfd_signed_vma) 0xff;
15132 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
15133 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
15134 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
15135
15136 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
15137
252b5132
RH
15138 return x;
15139}
15140
15141static int
26ca5450 15142get16 (void)
252b5132
RH
15143{
15144 int x = 0;
15145
15146 FETCH_DATA (the_info, codep + 2);
15147 x = *codep++ & 0xff;
15148 x |= (*codep++ & 0xff) << 8;
15149 return x;
15150}
15151
15152static void
26ca5450 15153set_op (bfd_vma op, int riprel)
252b5132
RH
15154{
15155 op_index[op_ad] = op_ad;
cb712a9e 15156 if (address_mode == mode_64bit)
7081ff04
AJ
15157 {
15158 op_address[op_ad] = op;
15159 op_riprel[op_ad] = riprel;
15160 }
15161 else
15162 {
15163 /* Mask to get a 32-bit address. */
15164 op_address[op_ad] = op & 0xffffffff;
15165 op_riprel[op_ad] = riprel & 0xffffffff;
15166 }
252b5132
RH
15167}
15168
15169static void
26ca5450 15170OP_REG (int code, int sizeflag)
252b5132 15171{
2da11e11 15172 const char *s;
9b60702d 15173 int add;
de882298
RM
15174
15175 switch (code)
15176 {
15177 case es_reg: case ss_reg: case cs_reg:
15178 case ds_reg: case fs_reg: case gs_reg:
15179 oappend (names_seg[code - es_reg]);
15180 return;
15181 }
15182
161a04f6
L
15183 USED_REX (REX_B);
15184 if (rex & REX_B)
52b15da3 15185 add = 8;
9b60702d
L
15186 else
15187 add = 0;
52b15da3
JH
15188
15189 switch (code)
15190 {
52b15da3
JH
15191 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
15192 case sp_reg: case bp_reg: case si_reg: case di_reg:
15193 s = names16[code - ax_reg + add];
15194 break;
e184e611 15195 case ah_reg: case ch_reg: case dh_reg: case bh_reg:
52b15da3 15196 USED_REX (0);
e184e611
JB
15197 /* Fall through. */
15198 case al_reg: case cl_reg: case dl_reg: case bl_reg:
52b15da3
JH
15199 if (rex)
15200 s = names8rex[code - al_reg + add];
15201 else
15202 s = names8[code - al_reg];
15203 break;
6439fc28
AM
15204 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
15205 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
7bb15c6f 15206 if (address_mode == mode_64bit
6c067bbb 15207 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
15208 {
15209 s = names64[code - rAX_reg + add];
15210 break;
15211 }
15212 code += eAX_reg - rAX_reg;
6608db57 15213 /* Fall through. */
52b15da3
JH
15214 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
15215 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
15216 USED_REX (REX_W);
15217 if (rex & REX_W)
52b15da3 15218 s = names64[code - eAX_reg + add];
52b15da3 15219 else
f16cd0d5
L
15220 {
15221 if (sizeflag & DFLAG)
15222 s = names32[code - eAX_reg + add];
15223 else
15224 s = names16[code - eAX_reg + add];
15225 used_prefixes |= (prefixes & PREFIX_DATA);
15226 }
52b15da3 15227 break;
52b15da3
JH
15228 default:
15229 s = INTERNAL_DISASSEMBLER_ERROR;
15230 break;
15231 }
15232 oappend (s);
15233}
15234
15235static void
26ca5450 15236OP_IMREG (int code, int sizeflag)
52b15da3
JH
15237{
15238 const char *s;
252b5132
RH
15239
15240 switch (code)
15241 {
15242 case indir_dx_reg:
d708bcba 15243 if (intel_syntax)
52fd6d94 15244 s = "dx";
d708bcba 15245 else
db6eb5be 15246 s = "(%dx)";
252b5132 15247 break;
e8b5d5f9
JB
15248 case al_reg: case cl_reg:
15249 s = names8[code - al_reg];
252b5132 15250 break;
e8b5d5f9 15251 case eAX_reg:
161a04f6
L
15252 USED_REX (REX_W);
15253 if (rex & REX_W)
f16cd0d5 15254 {
e8b5d5f9
JB
15255 s = *names64;
15256 break;
f16cd0d5 15257 }
e8b5d5f9 15258 /* Fall through. */
52fd6d94 15259 case z_mode_ax_reg:
161a04f6 15260 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
15261 s = *names32;
15262 else
15263 s = *names16;
161a04f6 15264 if (!(rex & REX_W))
52fd6d94
JB
15265 used_prefixes |= (prefixes & PREFIX_DATA);
15266 break;
252b5132
RH
15267 default:
15268 s = INTERNAL_DISASSEMBLER_ERROR;
15269 break;
15270 }
15271 oappend (s);
15272}
15273
15274static void
26ca5450 15275OP_I (int bytemode, int sizeflag)
252b5132 15276{
52b15da3
JH
15277 bfd_signed_vma op;
15278 bfd_signed_vma mask = -1;
252b5132
RH
15279
15280 switch (bytemode)
15281 {
15282 case b_mode:
15283 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
15284 op = *codep++;
15285 mask = 0xff;
15286 break;
252b5132 15287 case v_mode:
161a04f6
L
15288 USED_REX (REX_W);
15289 if (rex & REX_W)
52b15da3 15290 op = get32s ();
252b5132 15291 else
52b15da3 15292 {
f16cd0d5
L
15293 if (sizeflag & DFLAG)
15294 {
15295 op = get32 ();
15296 mask = 0xffffffff;
15297 }
15298 else
15299 {
15300 op = get16 ();
15301 mask = 0xfffff;
15302 }
15303 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 15304 }
252b5132 15305 break;
c1dc7af5
JB
15306 case d_mode:
15307 mask = 0xffffffff;
15308 op = get32 ();
15309 break;
252b5132 15310 case w_mode:
52b15da3 15311 mask = 0xfffff;
252b5132
RH
15312 op = get16 ();
15313 break;
9306ca4a
JB
15314 case const_1_mode:
15315 if (intel_syntax)
6c067bbb 15316 oappend ("1");
9306ca4a 15317 return;
252b5132
RH
15318 default:
15319 oappend (INTERNAL_DISASSEMBLER_ERROR);
15320 return;
15321 }
15322
52b15da3
JH
15323 op &= mask;
15324 scratchbuf[0] = '$';
d708bcba 15325 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 15326 oappend_maybe_intel (scratchbuf);
52b15da3
JH
15327 scratchbuf[0] = '\0';
15328}
15329
15330static void
26ca5450 15331OP_I64 (int bytemode, int sizeflag)
52b15da3 15332{
a280ab8e 15333 if (bytemode != v_mode || address_mode != mode_64bit || !(rex & REX_W))
6439fc28
AM
15334 {
15335 OP_I (bytemode, sizeflag);
15336 return;
15337 }
15338
a280ab8e 15339 USED_REX (REX_W);
52b15da3 15340
52b15da3 15341 scratchbuf[0] = '$';
a280ab8e 15342 print_operand_value (scratchbuf + 1, 1, get64 ());
9ce09ba2 15343 oappend_maybe_intel (scratchbuf);
252b5132
RH
15344 scratchbuf[0] = '\0';
15345}
15346
15347static void
26ca5450 15348OP_sI (int bytemode, int sizeflag)
252b5132 15349{
52b15da3 15350 bfd_signed_vma op;
252b5132
RH
15351
15352 switch (bytemode)
15353 {
15354 case b_mode:
e3949f17 15355 case b_T_mode:
252b5132
RH
15356 FETCH_DATA (the_info, codep + 1);
15357 op = *codep++;
15358 if ((op & 0x80) != 0)
15359 op -= 0x100;
e3949f17
L
15360 if (bytemode == b_T_mode)
15361 {
15362 if (address_mode != mode_64bit
7bb15c6f 15363 || !((sizeflag & DFLAG) || (rex & REX_W)))
e3949f17 15364 {
6c067bbb
RM
15365 /* The operand-size prefix is overridden by a REX prefix. */
15366 if ((sizeflag & DFLAG) || (rex & REX_W))
e3949f17
L
15367 op &= 0xffffffff;
15368 else
15369 op &= 0xffff;
15370 }
15371 }
15372 else
15373 {
15374 if (!(rex & REX_W))
15375 {
15376 if (sizeflag & DFLAG)
15377 op &= 0xffffffff;
15378 else
15379 op &= 0xffff;
15380 }
15381 }
252b5132
RH
15382 break;
15383 case v_mode:
7bb15c6f
RM
15384 /* The operand-size prefix is overridden by a REX prefix. */
15385 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 15386 op = get32s ();
252b5132 15387 else
d9e3625e 15388 op = get16 ();
252b5132
RH
15389 break;
15390 default:
15391 oappend (INTERNAL_DISASSEMBLER_ERROR);
15392 return;
15393 }
52b15da3
JH
15394
15395 scratchbuf[0] = '$';
15396 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 15397 oappend_maybe_intel (scratchbuf);
252b5132
RH
15398}
15399
15400static void
26ca5450 15401OP_J (int bytemode, int sizeflag)
252b5132 15402{
52b15da3 15403 bfd_vma disp;
7081ff04 15404 bfd_vma mask = -1;
65ca155d 15405 bfd_vma segment = 0;
252b5132
RH
15406
15407 switch (bytemode)
15408 {
15409 case b_mode:
15410 FETCH_DATA (the_info, codep + 1);
15411 disp = *codep++;
15412 if ((disp & 0x80) != 0)
15413 disp -= 0x100;
15414 break;
15415 case v_mode:
d835a58b 15416 if (isa64 != intel64)
376cd056 15417 case dqw_mode:
5db04b09
L
15418 USED_REX (REX_W);
15419 if ((sizeflag & DFLAG)
15420 || (address_mode == mode_64bit
d835a58b 15421 && ((isa64 == intel64 && bytemode != dqw_mode)
376cd056 15422 || (rex & REX_W))))
52b15da3 15423 disp = get32s ();
252b5132
RH
15424 else
15425 {
15426 disp = get16 ();
206717e8
L
15427 if ((disp & 0x8000) != 0)
15428 disp -= 0x10000;
65ca155d
L
15429 /* In 16bit mode, address is wrapped around at 64k within
15430 the same segment. Otherwise, a data16 prefix on a jump
15431 instruction means that the pc is masked to 16 bits after
15432 the displacement is added! */
15433 mask = 0xffff;
15434 if ((prefixes & PREFIX_DATA) == 0)
4fd7268a 15435 segment = ((start_pc + (codep - start_codep))
65ca155d 15436 & ~((bfd_vma) 0xffff));
252b5132 15437 }
5db04b09 15438 if (address_mode != mode_64bit
d835a58b 15439 || (isa64 != intel64 && !(rex & REX_W)))
f16cd0d5 15440 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
15441 break;
15442 default:
15443 oappend (INTERNAL_DISASSEMBLER_ERROR);
15444 return;
15445 }
42d5f9c6 15446 disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
52b15da3
JH
15447 set_op (disp, 0);
15448 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
15449 oappend (scratchbuf);
15450}
15451
252b5132 15452static void
ed7841b3 15453OP_SEG (int bytemode, int sizeflag)
252b5132 15454{
ed7841b3 15455 if (bytemode == w_mode)
7967e09e 15456 oappend (names_seg[modrm.reg]);
ed7841b3 15457 else
7967e09e 15458 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
15459}
15460
15461static void
26ca5450 15462OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
15463{
15464 int seg, offset;
15465
c608c12e 15466 if (sizeflag & DFLAG)
252b5132 15467 {
c608c12e
AM
15468 offset = get32 ();
15469 seg = get16 ();
252b5132 15470 }
c608c12e
AM
15471 else
15472 {
15473 offset = get16 ();
15474 seg = get16 ();
15475 }
7d421014 15476 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 15477 if (intel_syntax)
3f31e633 15478 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
15479 else
15480 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 15481 oappend (scratchbuf);
252b5132
RH
15482}
15483
252b5132 15484static void
3f31e633 15485OP_OFF (int bytemode, int sizeflag)
252b5132 15486{
52b15da3 15487 bfd_vma off;
252b5132 15488
3f31e633
JB
15489 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
15490 intel_operand_size (bytemode, sizeflag);
252b5132
RH
15491 append_seg ();
15492
cb712a9e 15493 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
15494 off = get32 ();
15495 else
15496 off = get16 ();
15497
15498 if (intel_syntax)
15499 {
285ca992 15500 if (!active_seg_prefix)
252b5132 15501 {
d708bcba 15502 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
15503 oappend (":");
15504 }
15505 }
52b15da3
JH
15506 print_operand_value (scratchbuf, 1, off);
15507 oappend (scratchbuf);
15508}
6439fc28 15509
52b15da3 15510static void
3f31e633 15511OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
15512{
15513 bfd_vma off;
15514
539e75ad
L
15515 if (address_mode != mode_64bit
15516 || (prefixes & PREFIX_ADDR))
6439fc28
AM
15517 {
15518 OP_OFF (bytemode, sizeflag);
15519 return;
15520 }
15521
3f31e633
JB
15522 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
15523 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
15524 append_seg ();
15525
6608db57 15526 off = get64 ();
52b15da3
JH
15527
15528 if (intel_syntax)
15529 {
285ca992 15530 if (!active_seg_prefix)
52b15da3 15531 {
d708bcba 15532 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
15533 oappend (":");
15534 }
15535 }
15536 print_operand_value (scratchbuf, 1, off);
252b5132
RH
15537 oappend (scratchbuf);
15538}
15539
15540static void
26ca5450 15541ptr_reg (int code, int sizeflag)
252b5132 15542{
2da11e11 15543 const char *s;
d708bcba 15544
1d9f512f 15545 *obufp++ = open_char;
20f0a1fc 15546 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 15547 if (address_mode == mode_64bit)
c1a64871
JH
15548 {
15549 if (!(sizeflag & AFLAG))
db6eb5be 15550 s = names32[code - eAX_reg];
c1a64871 15551 else
db6eb5be 15552 s = names64[code - eAX_reg];
c1a64871 15553 }
52b15da3 15554 else if (sizeflag & AFLAG)
252b5132
RH
15555 s = names32[code - eAX_reg];
15556 else
15557 s = names16[code - eAX_reg];
15558 oappend (s);
1d9f512f
AM
15559 *obufp++ = close_char;
15560 *obufp = 0;
252b5132
RH
15561}
15562
15563static void
26ca5450 15564OP_ESreg (int code, int sizeflag)
252b5132 15565{
9306ca4a 15566 if (intel_syntax)
52fd6d94
JB
15567 {
15568 switch (codep[-1])
15569 {
15570 case 0x6d: /* insw/insl */
15571 intel_operand_size (z_mode, sizeflag);
15572 break;
15573 case 0xa5: /* movsw/movsl/movsq */
15574 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15575 case 0xab: /* stosw/stosl */
15576 case 0xaf: /* scasw/scasl */
15577 intel_operand_size (v_mode, sizeflag);
15578 break;
15579 default:
15580 intel_operand_size (b_mode, sizeflag);
15581 }
15582 }
9ce09ba2 15583 oappend_maybe_intel ("%es:");
252b5132
RH
15584 ptr_reg (code, sizeflag);
15585}
15586
15587static void
26ca5450 15588OP_DSreg (int code, int sizeflag)
252b5132 15589{
9306ca4a 15590 if (intel_syntax)
52fd6d94
JB
15591 {
15592 switch (codep[-1])
15593 {
15594 case 0x6f: /* outsw/outsl */
15595 intel_operand_size (z_mode, sizeflag);
15596 break;
15597 case 0xa5: /* movsw/movsl/movsq */
15598 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15599 case 0xad: /* lodsw/lodsl/lodsq */
15600 intel_operand_size (v_mode, sizeflag);
15601 break;
15602 default:
15603 intel_operand_size (b_mode, sizeflag);
15604 }
15605 }
285ca992
L
15606 /* Set active_seg_prefix to PREFIX_DS if it is unset so that the
15607 default segment register DS is printed. */
15608 if (!active_seg_prefix)
15609 active_seg_prefix = PREFIX_DS;
6608db57 15610 append_seg ();
252b5132
RH
15611 ptr_reg (code, sizeflag);
15612}
15613
252b5132 15614static void
26ca5450 15615OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15616{
9b60702d 15617 int add;
161a04f6 15618 if (rex & REX_R)
c4a530c5 15619 {
161a04f6 15620 USED_REX (REX_R);
c4a530c5
JB
15621 add = 8;
15622 }
cb712a9e 15623 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 15624 {
f16cd0d5 15625 all_prefixes[last_lock_prefix] = 0;
c4a530c5
JB
15626 used_prefixes |= PREFIX_LOCK;
15627 add = 8;
15628 }
9b60702d
L
15629 else
15630 add = 0;
7967e09e 15631 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
9ce09ba2 15632 oappend_maybe_intel (scratchbuf);
252b5132
RH
15633}
15634
252b5132 15635static void
26ca5450 15636OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15637{
9b60702d 15638 int add;
161a04f6
L
15639 USED_REX (REX_R);
15640 if (rex & REX_R)
52b15da3 15641 add = 8;
9b60702d
L
15642 else
15643 add = 0;
d708bcba 15644 if (intel_syntax)
7967e09e 15645 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 15646 else
7967e09e 15647 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
15648 oappend (scratchbuf);
15649}
15650
252b5132 15651static void
26ca5450 15652OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15653{
7967e09e 15654 sprintf (scratchbuf, "%%tr%d", modrm.reg);
9ce09ba2 15655 oappend_maybe_intel (scratchbuf);
252b5132
RH
15656}
15657
15658static void
6f74c397 15659OP_R (int bytemode, int sizeflag)
252b5132 15660{
68f34464
L
15661 /* Skip mod/rm byte. */
15662 MODRM_CHECK;
15663 codep++;
15664 OP_E_register (bytemode, sizeflag);
252b5132
RH
15665}
15666
15667static void
26ca5450 15668OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15669{
b9733481
L
15670 int reg = modrm.reg;
15671 const char **names;
15672
041bd2e0
JH
15673 used_prefixes |= (prefixes & PREFIX_DATA);
15674 if (prefixes & PREFIX_DATA)
20f0a1fc 15675 {
b9733481 15676 names = names_xmm;
161a04f6
L
15677 USED_REX (REX_R);
15678 if (rex & REX_R)
b9733481 15679 reg += 8;
20f0a1fc 15680 }
041bd2e0 15681 else
b9733481
L
15682 names = names_mm;
15683 oappend (names[reg]);
252b5132
RH
15684}
15685
c608c12e 15686static void
c0f3af97 15687OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 15688{
b9733481
L
15689 int reg = modrm.reg;
15690 const char **names;
15691
161a04f6
L
15692 USED_REX (REX_R);
15693 if (rex & REX_R)
b9733481 15694 reg += 8;
43234a1e
L
15695 if (vex.evex)
15696 {
15697 if (!vex.r)
15698 reg += 16;
15699 }
15700
539f890d
L
15701 if (need_vex
15702 && bytemode != xmm_mode
43234a1e
L
15703 && bytemode != xmmq_mode
15704 && bytemode != evex_half_bcst_xmmq_mode
15705 && bytemode != ymm_mode
260cd341 15706 && bytemode != tmm_mode
539f890d 15707 && bytemode != scalar_mode)
c0f3af97
L
15708 {
15709 switch (vex.length)
15710 {
15711 case 128:
b9733481 15712 names = names_xmm;
c0f3af97
L
15713 break;
15714 case 256:
5fc35d96
IT
15715 if (vex.w
15716 || (bytemode != vex_vsib_q_w_dq_mode
15717 && bytemode != vex_vsib_q_w_d_mode))
6c30d220
L
15718 names = names_ymm;
15719 else
15720 names = names_xmm;
c0f3af97 15721 break;
43234a1e
L
15722 case 512:
15723 names = names_zmm;
15724 break;
c0f3af97
L
15725 default:
15726 abort ();
15727 }
15728 }
43234a1e
L
15729 else if (bytemode == xmmq_mode
15730 || bytemode == evex_half_bcst_xmmq_mode)
15731 {
15732 switch (vex.length)
15733 {
15734 case 128:
15735 case 256:
15736 names = names_xmm;
15737 break;
15738 case 512:
15739 names = names_ymm;
15740 break;
15741 default:
15742 abort ();
15743 }
15744 }
260cd341
LC
15745 else if (bytemode == tmm_mode)
15746 {
15747 modrm.reg = reg;
15748 if (reg >= 8)
15749 {
15750 oappend ("(bad)");
15751 return;
15752 }
15753 names = names_tmm;
15754 }
43234a1e
L
15755 else if (bytemode == ymm_mode)
15756 names = names_ymm;
c0f3af97 15757 else
b9733481
L
15758 names = names_xmm;
15759 oappend (names[reg]);
c608c12e
AM
15760}
15761
252b5132 15762static void
26ca5450 15763OP_EM (int bytemode, int sizeflag)
252b5132 15764{
b9733481
L
15765 int reg;
15766 const char **names;
15767
7967e09e 15768 if (modrm.mod != 3)
252b5132 15769 {
b6169b20
L
15770 if (intel_syntax
15771 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
15772 {
15773 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15774 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 15775 }
252b5132
RH
15776 OP_E (bytemode, sizeflag);
15777 return;
15778 }
15779
b6169b20
L
15780 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
15781 swap_operand ();
15782
6608db57 15783 /* Skip mod/rm byte. */
4bba6815 15784 MODRM_CHECK;
252b5132 15785 codep++;
041bd2e0 15786 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15787 reg = modrm.rm;
041bd2e0 15788 if (prefixes & PREFIX_DATA)
20f0a1fc 15789 {
b9733481 15790 names = names_xmm;
161a04f6
L
15791 USED_REX (REX_B);
15792 if (rex & REX_B)
b9733481 15793 reg += 8;
20f0a1fc 15794 }
041bd2e0 15795 else
b9733481
L
15796 names = names_mm;
15797 oappend (names[reg]);
252b5132
RH
15798}
15799
246c51aa
L
15800/* cvt* are the only instructions in sse2 which have
15801 both SSE and MMX operands and also have 0x66 prefix
15802 in their opcode. 0x66 was originally used to differentiate
15803 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
15804 cvt* separately using OP_EMC and OP_MXC */
15805static void
15806OP_EMC (int bytemode, int sizeflag)
15807{
7967e09e 15808 if (modrm.mod != 3)
4d9567e0
MM
15809 {
15810 if (intel_syntax && bytemode == v_mode)
15811 {
15812 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15813 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 15814 }
4d9567e0
MM
15815 OP_E (bytemode, sizeflag);
15816 return;
15817 }
246c51aa 15818
4d9567e0
MM
15819 /* Skip mod/rm byte. */
15820 MODRM_CHECK;
15821 codep++;
15822 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15823 oappend (names_mm[modrm.rm]);
4d9567e0
MM
15824}
15825
15826static void
15827OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15828{
15829 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15830 oappend (names_mm[modrm.reg]);
4d9567e0
MM
15831}
15832
c608c12e 15833static void
26ca5450 15834OP_EX (int bytemode, int sizeflag)
c608c12e 15835{
b9733481
L
15836 int reg;
15837 const char **names;
d6f574e0
L
15838
15839 /* Skip mod/rm byte. */
15840 MODRM_CHECK;
15841 codep++;
15842
7967e09e 15843 if (modrm.mod != 3)
c608c12e 15844 {
c1e679ec 15845 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
15846 return;
15847 }
d6f574e0 15848
b9733481 15849 reg = modrm.rm;
161a04f6
L
15850 USED_REX (REX_B);
15851 if (rex & REX_B)
b9733481 15852 reg += 8;
43234a1e
L
15853 if (vex.evex)
15854 {
15855 USED_REX (REX_X);
15856 if ((rex & REX_X))
15857 reg += 16;
15858 }
c608c12e 15859
b6169b20 15860 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
15861 && (bytemode == x_swap_mode
15862 || bytemode == d_swap_mode
7bb15c6f 15863 || bytemode == d_scalar_swap_mode
539f890d
L
15864 || bytemode == q_swap_mode
15865 || bytemode == q_scalar_swap_mode))
b6169b20
L
15866 swap_operand ();
15867
c0f3af97
L
15868 if (need_vex
15869 && bytemode != xmm_mode
6c30d220
L
15870 && bytemode != xmmdw_mode
15871 && bytemode != xmmqd_mode
15872 && bytemode != xmm_mb_mode
15873 && bytemode != xmm_mw_mode
15874 && bytemode != xmm_md_mode
15875 && bytemode != xmm_mq_mode
539f890d 15876 && bytemode != xmmq_mode
43234a1e
L
15877 && bytemode != evex_half_bcst_xmmq_mode
15878 && bytemode != ymm_mode
260cd341 15879 && bytemode != tmm_mode
7bb15c6f 15880 && bytemode != d_scalar_swap_mode
1c480963
L
15881 && bytemode != q_scalar_swap_mode
15882 && bytemode != vex_scalar_w_dq_mode)
c0f3af97
L
15883 {
15884 switch (vex.length)
15885 {
15886 case 128:
b9733481 15887 names = names_xmm;
c0f3af97
L
15888 break;
15889 case 256:
b9733481 15890 names = names_ymm;
c0f3af97 15891 break;
43234a1e
L
15892 case 512:
15893 names = names_zmm;
15894 break;
c0f3af97
L
15895 default:
15896 abort ();
15897 }
15898 }
43234a1e
L
15899 else if (bytemode == xmmq_mode
15900 || bytemode == evex_half_bcst_xmmq_mode)
15901 {
15902 switch (vex.length)
15903 {
15904 case 128:
15905 case 256:
15906 names = names_xmm;
15907 break;
15908 case 512:
15909 names = names_ymm;
15910 break;
15911 default:
15912 abort ();
15913 }
15914 }
260cd341
LC
15915 else if (bytemode == tmm_mode)
15916 {
15917 modrm.rm = reg;
15918 if (reg >= 8)
15919 {
15920 oappend ("(bad)");
15921 return;
15922 }
15923 names = names_tmm;
15924 }
43234a1e
L
15925 else if (bytemode == ymm_mode)
15926 names = names_ymm;
c0f3af97 15927 else
b9733481
L
15928 names = names_xmm;
15929 oappend (names[reg]);
c608c12e
AM
15930}
15931
252b5132 15932static void
26ca5450 15933OP_MS (int bytemode, int sizeflag)
252b5132 15934{
7967e09e 15935 if (modrm.mod == 3)
2da11e11
AM
15936 OP_EM (bytemode, sizeflag);
15937 else
6608db57 15938 BadOp ();
252b5132
RH
15939}
15940
992aaec9 15941static void
26ca5450 15942OP_XS (int bytemode, int sizeflag)
992aaec9 15943{
7967e09e 15944 if (modrm.mod == 3)
992aaec9
AM
15945 OP_EX (bytemode, sizeflag);
15946 else
6608db57 15947 BadOp ();
992aaec9
AM
15948}
15949
cc0ec051
AM
15950static void
15951OP_M (int bytemode, int sizeflag)
15952{
7967e09e 15953 if (modrm.mod == 3)
75413a22
L
15954 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
15955 BadOp ();
cc0ec051
AM
15956 else
15957 OP_E (bytemode, sizeflag);
15958}
15959
15960static void
15961OP_0f07 (int bytemode, int sizeflag)
15962{
7967e09e 15963 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
15964 BadOp ();
15965 else
15966 OP_E (bytemode, sizeflag);
15967}
15968
46e883c5 15969/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 15970 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 15971
cc0ec051 15972static void
46e883c5 15973NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 15974{
8b38ad71
L
15975 if ((prefixes & PREFIX_DATA) != 0
15976 || (rex != 0
15977 && rex != 0x48
15978 && address_mode == mode_64bit))
46e883c5
L
15979 OP_REG (bytemode, sizeflag);
15980 else
15981 strcpy (obuf, "nop");
15982}
15983
15984static void
15985NOP_Fixup2 (int bytemode, int sizeflag)
15986{
8b38ad71
L
15987 if ((prefixes & PREFIX_DATA) != 0
15988 || (rex != 0
15989 && rex != 0x48
15990 && address_mode == mode_64bit))
46e883c5 15991 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
15992}
15993
84037f8c 15994static const char *const Suffix3DNow[] = {
252b5132
RH
15995/* 00 */ NULL, NULL, NULL, NULL,
15996/* 04 */ NULL, NULL, NULL, NULL,
15997/* 08 */ NULL, NULL, NULL, NULL,
9e525108 15998/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
15999/* 10 */ NULL, NULL, NULL, NULL,
16000/* 14 */ NULL, NULL, NULL, NULL,
16001/* 18 */ NULL, NULL, NULL, NULL,
9e525108 16002/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
16003/* 20 */ NULL, NULL, NULL, NULL,
16004/* 24 */ NULL, NULL, NULL, NULL,
16005/* 28 */ NULL, NULL, NULL, NULL,
16006/* 2C */ NULL, NULL, NULL, NULL,
16007/* 30 */ NULL, NULL, NULL, NULL,
16008/* 34 */ NULL, NULL, NULL, NULL,
16009/* 38 */ NULL, NULL, NULL, NULL,
16010/* 3C */ NULL, NULL, NULL, NULL,
16011/* 40 */ NULL, NULL, NULL, NULL,
16012/* 44 */ NULL, NULL, NULL, NULL,
16013/* 48 */ NULL, NULL, NULL, NULL,
16014/* 4C */ NULL, NULL, NULL, NULL,
16015/* 50 */ NULL, NULL, NULL, NULL,
16016/* 54 */ NULL, NULL, NULL, NULL,
16017/* 58 */ NULL, NULL, NULL, NULL,
16018/* 5C */ NULL, NULL, NULL, NULL,
16019/* 60 */ NULL, NULL, NULL, NULL,
16020/* 64 */ NULL, NULL, NULL, NULL,
16021/* 68 */ NULL, NULL, NULL, NULL,
16022/* 6C */ NULL, NULL, NULL, NULL,
16023/* 70 */ NULL, NULL, NULL, NULL,
16024/* 74 */ NULL, NULL, NULL, NULL,
16025/* 78 */ NULL, NULL, NULL, NULL,
16026/* 7C */ NULL, NULL, NULL, NULL,
16027/* 80 */ NULL, NULL, NULL, NULL,
16028/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
16029/* 88 */ NULL, NULL, "pfnacc", NULL,
16030/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
16031/* 90 */ "pfcmpge", NULL, NULL, NULL,
16032/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
16033/* 98 */ NULL, NULL, "pfsub", NULL,
16034/* 9C */ NULL, NULL, "pfadd", NULL,
16035/* A0 */ "pfcmpgt", NULL, NULL, NULL,
16036/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
16037/* A8 */ NULL, NULL, "pfsubr", NULL,
16038/* AC */ NULL, NULL, "pfacc", NULL,
16039/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 16040/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 16041/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
16042/* BC */ NULL, NULL, NULL, "pavgusb",
16043/* C0 */ NULL, NULL, NULL, NULL,
16044/* C4 */ NULL, NULL, NULL, NULL,
16045/* C8 */ NULL, NULL, NULL, NULL,
16046/* CC */ NULL, NULL, NULL, NULL,
16047/* D0 */ NULL, NULL, NULL, NULL,
16048/* D4 */ NULL, NULL, NULL, NULL,
16049/* D8 */ NULL, NULL, NULL, NULL,
16050/* DC */ NULL, NULL, NULL, NULL,
16051/* E0 */ NULL, NULL, NULL, NULL,
16052/* E4 */ NULL, NULL, NULL, NULL,
16053/* E8 */ NULL, NULL, NULL, NULL,
16054/* EC */ NULL, NULL, NULL, NULL,
16055/* F0 */ NULL, NULL, NULL, NULL,
16056/* F4 */ NULL, NULL, NULL, NULL,
16057/* F8 */ NULL, NULL, NULL, NULL,
16058/* FC */ NULL, NULL, NULL, NULL,
16059};
16060
16061static void
26ca5450 16062OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
16063{
16064 const char *mnemonic;
16065
16066 FETCH_DATA (the_info, codep + 1);
16067 /* AMD 3DNow! instructions are specified by an opcode suffix in the
16068 place where an 8-bit immediate would normally go. ie. the last
16069 byte of the instruction. */
ea397f5b 16070 obufp = mnemonicendp;
c608c12e 16071 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 16072 if (mnemonic)
2da11e11 16073 oappend (mnemonic);
252b5132
RH
16074 else
16075 {
16076 /* Since a variable sized modrm/sib chunk is between the start
16077 of the opcode (0x0f0f) and the opcode suffix, we need to do
16078 all the modrm processing first, and don't know until now that
16079 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
16080 op_out[0][0] = '\0';
16081 op_out[1][0] = '\0';
6608db57 16082 BadOp ();
252b5132 16083 }
ea397f5b 16084 mnemonicendp = obufp;
252b5132 16085}
c608c12e 16086
c4de7606 16087static const struct op simd_cmp_op[] =
ea397f5b
L
16088{
16089 { STRING_COMMA_LEN ("eq") },
16090 { STRING_COMMA_LEN ("lt") },
16091 { STRING_COMMA_LEN ("le") },
16092 { STRING_COMMA_LEN ("unord") },
16093 { STRING_COMMA_LEN ("neq") },
16094 { STRING_COMMA_LEN ("nlt") },
16095 { STRING_COMMA_LEN ("nle") },
16096 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
16097};
16098
c4de7606
JB
16099static const struct op vex_cmp_op[] =
16100{
16101 { STRING_COMMA_LEN ("eq_uq") },
16102 { STRING_COMMA_LEN ("nge") },
16103 { STRING_COMMA_LEN ("ngt") },
16104 { STRING_COMMA_LEN ("false") },
16105 { STRING_COMMA_LEN ("neq_oq") },
16106 { STRING_COMMA_LEN ("ge") },
16107 { STRING_COMMA_LEN ("gt") },
16108 { STRING_COMMA_LEN ("true") },
16109 { STRING_COMMA_LEN ("eq_os") },
16110 { STRING_COMMA_LEN ("lt_oq") },
16111 { STRING_COMMA_LEN ("le_oq") },
16112 { STRING_COMMA_LEN ("unord_s") },
16113 { STRING_COMMA_LEN ("neq_us") },
16114 { STRING_COMMA_LEN ("nlt_uq") },
16115 { STRING_COMMA_LEN ("nle_uq") },
16116 { STRING_COMMA_LEN ("ord_s") },
16117 { STRING_COMMA_LEN ("eq_us") },
16118 { STRING_COMMA_LEN ("nge_uq") },
16119 { STRING_COMMA_LEN ("ngt_uq") },
16120 { STRING_COMMA_LEN ("false_os") },
16121 { STRING_COMMA_LEN ("neq_os") },
16122 { STRING_COMMA_LEN ("ge_oq") },
16123 { STRING_COMMA_LEN ("gt_oq") },
16124 { STRING_COMMA_LEN ("true_us") },
16125};
16126
c608c12e 16127static void
ad19981d 16128CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
16129{
16130 unsigned int cmp_type;
16131
16132 FETCH_DATA (the_info, codep + 1);
16133 cmp_type = *codep++ & 0xff;
c0f3af97 16134 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 16135 {
ad19981d 16136 char suffix [3];
ea397f5b 16137 char *p = mnemonicendp - 2;
ad19981d
L
16138 suffix[0] = p[0];
16139 suffix[1] = p[1];
16140 suffix[2] = '\0';
ea397f5b
L
16141 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
16142 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e 16143 }
c4de7606
JB
16144 else if (need_vex
16145 && cmp_type < ARRAY_SIZE (simd_cmp_op) + ARRAY_SIZE (vex_cmp_op))
16146 {
16147 char suffix [3];
16148 char *p = mnemonicendp - 2;
16149 suffix[0] = p[0];
16150 suffix[1] = p[1];
16151 suffix[2] = '\0';
16152 cmp_type -= ARRAY_SIZE (simd_cmp_op);
16153 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
16154 mnemonicendp += vex_cmp_op[cmp_type].len;
16155 }
c608c12e
AM
16156 else
16157 {
ad19981d
L
16158 /* We have a reserved extension byte. Output it directly. */
16159 scratchbuf[0] = '$';
16160 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16161 oappend_maybe_intel (scratchbuf);
ad19981d 16162 scratchbuf[0] = '\0';
c608c12e
AM
16163 }
16164}
16165
9916071f 16166static void
7abb8d81 16167OP_Mwait (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
9916071f 16168{
7abb8d81 16169 /* mwait %eax,%ecx / mwaitx %eax,%ecx,%ebx */
b844680a
L
16170 if (!intel_syntax)
16171 {
081e283f
JB
16172 strcpy (op_out[0], names32[0]);
16173 strcpy (op_out[1], names32[1]);
7abb8d81 16174 if (bytemode == eBX_reg)
081e283f 16175 strcpy (op_out[2], names32[3]);
b844680a
L
16176 two_source_ops = 1;
16177 }
16178 /* Skip mod/rm byte. */
16179 MODRM_CHECK;
16180 codep++;
16181}
16182
16183static void
16184OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
16185 int sizeflag ATTRIBUTE_UNUSED)
ca164297 16186{
081e283f 16187 /* monitor %{e,r,}ax,%ecx,%edx" */
b844680a 16188 if (!intel_syntax)
ca164297 16189 {
cb712a9e
L
16190 const char **names = (address_mode == mode_64bit
16191 ? names64 : names32);
1d9f512f 16192
081e283f 16193 if (prefixes & PREFIX_ADDR)
ca164297 16194 {
b844680a 16195 /* Remove "addr16/addr32". */
f16cd0d5 16196 all_prefixes[last_addr_prefix] = 0;
081e283f
JB
16197 names = (address_mode != mode_32bit
16198 ? names32 : names16);
b844680a 16199 used_prefixes |= PREFIX_ADDR;
ca164297 16200 }
081e283f
JB
16201 else if (address_mode == mode_16bit)
16202 names = names16;
16203 strcpy (op_out[0], names[0]);
16204 strcpy (op_out[1], names32[1]);
16205 strcpy (op_out[2], names32[2]);
b844680a 16206 two_source_ops = 1;
ca164297 16207 }
b844680a
L
16208 /* Skip mod/rm byte. */
16209 MODRM_CHECK;
16210 codep++;
30123838
JB
16211}
16212
6608db57
KH
16213static void
16214BadOp (void)
2da11e11 16215{
6608db57
KH
16216 /* Throw away prefixes and 1st. opcode byte. */
16217 codep = insn_codep + 1;
2da11e11
AM
16218 oappend ("(bad)");
16219}
4cc91dba 16220
35c52694
L
16221static void
16222REP_Fixup (int bytemode, int sizeflag)
16223{
16224 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
16225 lods and stos. */
35c52694 16226 if (prefixes & PREFIX_REPZ)
f16cd0d5 16227 all_prefixes[last_repz_prefix] = REP_PREFIX;
35c52694
L
16228
16229 switch (bytemode)
16230 {
16231 case al_reg:
16232 case eAX_reg:
16233 case indir_dx_reg:
16234 OP_IMREG (bytemode, sizeflag);
16235 break;
16236 case eDI_reg:
16237 OP_ESreg (bytemode, sizeflag);
16238 break;
16239 case eSI_reg:
16240 OP_DSreg (bytemode, sizeflag);
16241 break;
16242 default:
16243 abort ();
16244 break;
16245 }
16246}
f5804c90 16247
d835a58b
JB
16248static void
16249SEP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16250{
16251 if ( isa64 != amd64 )
16252 return;
16253
16254 obufp = obuf;
16255 BadOp ();
16256 mnemonicendp = obufp;
16257 ++codep;
16258}
16259
7e8b059b
L
16260/* For BND-prefixed instructions 0xF2 prefix should be displayed as
16261 "bnd". */
16262
16263static void
16264BND_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16265{
16266 if (prefixes & PREFIX_REPNZ)
16267 all_prefixes[last_repnz_prefix] = BND_PREFIX;
16268}
16269
04ef582a
L
16270/* For NOTRACK-prefixed instructions, 0x3E prefix should be displayed as
16271 "notrack". */
16272
16273static void
16274NOTRACK_Fixup (int bytemode ATTRIBUTE_UNUSED,
16275 int sizeflag ATTRIBUTE_UNUSED)
16276{
9fef80d6 16277 if (active_seg_prefix == PREFIX_DS
04ef582a
L
16278 && (address_mode != mode_64bit || last_data_prefix < 0))
16279 {
4e9ac44a 16280 /* NOTRACK prefix is only valid on indirect branch instructions.
9fef80d6 16281 NB: DATA prefix is unsupported for Intel64. */
04ef582a
L
16282 active_seg_prefix = 0;
16283 all_prefixes[last_seg_prefix] = NOTRACK_PREFIX;
16284 }
16285}
16286
42164a71
L
16287/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
16288 "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
16289 */
16290
16291static void
16292HLE_Fixup1 (int bytemode, int sizeflag)
16293{
16294 if (modrm.mod != 3
16295 && (prefixes & PREFIX_LOCK) != 0)
16296 {
16297 if (prefixes & PREFIX_REPZ)
16298 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16299 if (prefixes & PREFIX_REPNZ)
16300 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
16301 }
16302
16303 OP_E (bytemode, sizeflag);
16304}
16305
16306/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
16307 "xacquire"/"xrelease" for memory operand. No check for LOCK prefix.
16308 */
16309
16310static void
16311HLE_Fixup2 (int bytemode, int sizeflag)
16312{
16313 if (modrm.mod != 3)
16314 {
16315 if (prefixes & PREFIX_REPZ)
16316 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16317 if (prefixes & PREFIX_REPNZ)
16318 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
16319 }
16320
16321 OP_E (bytemode, sizeflag);
16322}
16323
16324/* Similar to OP_E. But the 0xf3 prefixes should be displayed as
16325 "xrelease" for memory operand. No check for LOCK prefix. */
16326
16327static void
16328HLE_Fixup3 (int bytemode, int sizeflag)
16329{
16330 if (modrm.mod != 3
16331 && last_repz_prefix > last_repnz_prefix
16332 && (prefixes & PREFIX_REPZ) != 0)
16333 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16334
16335 OP_E (bytemode, sizeflag);
16336}
16337
f5804c90
L
16338static void
16339CMPXCHG8B_Fixup (int bytemode, int sizeflag)
16340{
161a04f6
L
16341 USED_REX (REX_W);
16342 if (rex & REX_W)
f5804c90
L
16343 {
16344 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
16345 char *p = mnemonicendp - 2;
16346 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 16347 bytemode = o_mode;
f5804c90 16348 }
42164a71
L
16349 else if ((prefixes & PREFIX_LOCK) != 0)
16350 {
16351 if (prefixes & PREFIX_REPZ)
16352 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16353 if (prefixes & PREFIX_REPNZ)
16354 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
16355 }
16356
f5804c90
L
16357 OP_M (bytemode, sizeflag);
16358}
42903f7f
L
16359
16360static void
16361XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
16362{
b9733481
L
16363 const char **names;
16364
c0f3af97
L
16365 if (need_vex)
16366 {
16367 switch (vex.length)
16368 {
16369 case 128:
b9733481 16370 names = names_xmm;
c0f3af97
L
16371 break;
16372 case 256:
b9733481 16373 names = names_ymm;
c0f3af97
L
16374 break;
16375 default:
16376 abort ();
16377 }
16378 }
16379 else
b9733481
L
16380 names = names_xmm;
16381 oappend (names[reg]);
42903f7f 16382}
381d071f
L
16383
16384static void
eacc9c89
L
16385FXSAVE_Fixup (int bytemode, int sizeflag)
16386{
16387 /* Add proper suffix to "fxsave" and "fxrstor". */
16388 USED_REX (REX_W);
16389 if (rex & REX_W)
16390 {
16391 char *p = mnemonicendp;
16392 *p++ = '6';
16393 *p++ = '4';
16394 *p = '\0';
16395 mnemonicendp = p;
16396 }
16397 OP_M (bytemode, sizeflag);
15c7c1d8
JB
16398}
16399
c0f3af97
L
16400/* Display the destination register operand for instructions with
16401 VEX. */
16402
16403static void
16404OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16405{
539f890d 16406 int reg;
b9733481
L
16407 const char **names;
16408
c0f3af97
L
16409 if (!need_vex)
16410 abort ();
16411
16412 if (!need_vex_reg)
16413 return;
16414
539f890d 16415 reg = vex.register_specifier;
63c6fc6c 16416 vex.register_specifier = 0;
5f847646
JB
16417 if (address_mode != mode_64bit)
16418 reg &= 7;
16419 else if (vex.evex && !vex.v)
16420 reg += 16;
43234a1e 16421
539f890d
L
16422 if (bytemode == vex_scalar_mode)
16423 {
16424 oappend (names_xmm[reg]);
16425 return;
16426 }
16427
260cd341
LC
16428 if (bytemode == tmm_mode)
16429 {
16430 /* All 3 TMM registers must be distinct. */
16431 if (reg >= 8)
16432 oappend ("(bad)");
16433 else
16434 {
16435 /* This must be the 3rd operand. */
16436 if (obufp != op_out[2])
16437 abort ();
16438 oappend (names_tmm[reg]);
16439 if (reg == modrm.reg || reg == modrm.rm)
16440 strcpy (obufp, "/(bad)");
16441 }
16442
16443 if (modrm.reg == modrm.rm || modrm.reg == reg || modrm.rm == reg)
16444 {
16445 if (modrm.reg <= 8
16446 && (modrm.reg == modrm.rm || modrm.reg == reg))
16447 strcat (op_out[0], "/(bad)");
16448 if (modrm.rm <= 8
16449 && (modrm.rm == modrm.reg || modrm.rm == reg))
16450 strcat (op_out[1], "/(bad)");
16451 }
16452
16453 return;
16454 }
16455
c0f3af97
L
16456 switch (vex.length)
16457 {
16458 case 128:
16459 switch (bytemode)
16460 {
16461 case vex_mode:
6c30d220 16462 case vex_vsib_q_w_dq_mode:
5fc35d96 16463 case vex_vsib_q_w_d_mode:
cb21baef
L
16464 names = names_xmm;
16465 break;
16466 case dq_mode:
390a6789 16467 if (rex & REX_W)
cb21baef
L
16468 names = names64;
16469 else
16470 names = names32;
c0f3af97 16471 break;
1ba585e8 16472 case mask_bd_mode:
43234a1e 16473 case mask_mode:
9889cbb1
L
16474 if (reg > 0x7)
16475 {
16476 oappend ("(bad)");
16477 return;
16478 }
43234a1e
L
16479 names = names_mask;
16480 break;
c0f3af97
L
16481 default:
16482 abort ();
16483 return;
16484 }
c0f3af97
L
16485 break;
16486 case 256:
16487 switch (bytemode)
16488 {
16489 case vex_mode:
6c30d220
L
16490 names = names_ymm;
16491 break;
16492 case vex_vsib_q_w_dq_mode:
5fc35d96 16493 case vex_vsib_q_w_d_mode:
6c30d220 16494 names = vex.w ? names_ymm : names_xmm;
c0f3af97 16495 break;
1ba585e8 16496 case mask_bd_mode:
43234a1e 16497 case mask_mode:
9889cbb1
L
16498 if (reg > 0x7)
16499 {
16500 oappend ("(bad)");
16501 return;
16502 }
43234a1e
L
16503 names = names_mask;
16504 break;
c0f3af97 16505 default:
a37a2806
NC
16506 /* See PR binutils/20893 for a reproducer. */
16507 oappend ("(bad)");
c0f3af97
L
16508 return;
16509 }
c0f3af97 16510 break;
43234a1e
L
16511 case 512:
16512 names = names_zmm;
16513 break;
c0f3af97
L
16514 default:
16515 abort ();
16516 break;
16517 }
539f890d 16518 oappend (names[reg]);
c0f3af97
L
16519}
16520
5dd85c99 16521static void
e6123d0c 16522OP_VexW (int bytemode, int sizeflag)
5dd85c99 16523{
e6123d0c 16524 OP_VEX (bytemode, sizeflag);
5dd85c99 16525
5dd85c99 16526 if (vex.w)
5f847646 16527 {
e6123d0c
JB
16528 /* Swap 2nd and 3rd operands. */
16529 strcpy (scratchbuf, op_out[2]);
16530 strcpy (op_out[2], op_out[1]);
16531 strcpy (op_out[1], scratchbuf);
5f847646 16532 }
5dd85c99
SP
16533}
16534
c0f3af97
L
16535static void
16536OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16537{
16538 int reg;
6384fd9e 16539 const char **names = names_xmm;
b9733481 16540
c0f3af97
L
16541 FETCH_DATA (the_info, codep + 1);
16542 reg = *codep++;
16543
6384fd9e 16544 if (bytemode != x_mode && bytemode != scalar_mode)
c0f3af97
L
16545 abort ();
16546
c0f3af97 16547 reg >>= 4;
5f847646
JB
16548 if (address_mode != mode_64bit)
16549 reg &= 7;
dae39acc 16550
6384fd9e
JB
16551 if (bytemode == x_mode && vex.length == 256)
16552 names = names_ymm;
16553
b9733481 16554 oappend (names[reg]);
b13b1bc0
JB
16555
16556 if (vex.w)
16557 {
16558 /* Swap 3rd and 4th operands. */
16559 strcpy (scratchbuf, op_out[3]);
16560 strcpy (op_out[3], op_out[2]);
16561 strcpy (op_out[2], scratchbuf);
16562 }
c0f3af97
L
16563}
16564
922d8de8 16565static void
93abb146
JB
16566OP_VexI4 (int bytemode ATTRIBUTE_UNUSED,
16567 int sizeflag ATTRIBUTE_UNUSED)
922d8de8 16568{
93abb146
JB
16569 scratchbuf[0] = '$';
16570 print_operand_value (scratchbuf + 1, 1, codep[-1] & 0xf);
16571 oappend_maybe_intel (scratchbuf);
922d8de8
DR
16572}
16573
c0f3af97
L
16574static void
16575OP_EX_Vex (int bytemode, int sizeflag)
16576{
16577 if (modrm.mod != 3)
63c6fc6c 16578 need_vex_reg = 0;
c0f3af97
L
16579 OP_EX (bytemode, sizeflag);
16580}
16581
16582static void
16583OP_XMM_Vex (int bytemode, int sizeflag)
16584{
16585 if (modrm.mod != 3)
63c6fc6c 16586 need_vex_reg = 0;
c0f3af97
L
16587 OP_XMM (bytemode, sizeflag);
16588}
16589
43234a1e
L
16590static void
16591VPCMP_Fixup (int bytemode ATTRIBUTE_UNUSED,
16592 int sizeflag ATTRIBUTE_UNUSED)
16593{
16594 unsigned int cmp_type;
16595
16596 if (!vex.evex)
16597 abort ();
16598
16599 FETCH_DATA (the_info, codep + 1);
16600 cmp_type = *codep++ & 0xff;
16601 /* There are aliases for immediates 0, 1, 2, 4, 5, 6.
16602 If it's the case, print suffix, otherwise - print the immediate. */
16603 if (cmp_type < ARRAY_SIZE (simd_cmp_op)
16604 && cmp_type != 3
16605 && cmp_type != 7)
16606 {
16607 char suffix [3];
16608 char *p = mnemonicendp - 2;
16609
16610 /* vpcmp* can have both one- and two-lettered suffix. */
16611 if (p[0] == 'p')
16612 {
16613 p++;
16614 suffix[0] = p[0];
16615 suffix[1] = '\0';
16616 }
16617 else
16618 {
16619 suffix[0] = p[0];
16620 suffix[1] = p[1];
16621 suffix[2] = '\0';
16622 }
16623
16624 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
16625 mnemonicendp += simd_cmp_op[cmp_type].len;
16626 }
be92cb14
JB
16627 else
16628 {
16629 /* We have a reserved extension byte. Output it directly. */
16630 scratchbuf[0] = '$';
16631 print_operand_value (scratchbuf + 1, 1, cmp_type);
16632 oappend_maybe_intel (scratchbuf);
16633 scratchbuf[0] = '\0';
16634 }
16635}
16636
16637static const struct op xop_cmp_op[] =
16638{
16639 { STRING_COMMA_LEN ("lt") },
16640 { STRING_COMMA_LEN ("le") },
16641 { STRING_COMMA_LEN ("gt") },
16642 { STRING_COMMA_LEN ("ge") },
16643 { STRING_COMMA_LEN ("eq") },
16644 { STRING_COMMA_LEN ("neq") },
16645 { STRING_COMMA_LEN ("false") },
16646 { STRING_COMMA_LEN ("true") }
16647};
16648
16649static void
16650VPCOM_Fixup (int bytemode ATTRIBUTE_UNUSED,
16651 int sizeflag ATTRIBUTE_UNUSED)
16652{
16653 unsigned int cmp_type;
16654
16655 FETCH_DATA (the_info, codep + 1);
16656 cmp_type = *codep++ & 0xff;
16657 if (cmp_type < ARRAY_SIZE (xop_cmp_op))
16658 {
16659 char suffix[3];
16660 char *p = mnemonicendp - 2;
16661
16662 /* vpcom* can have both one- and two-lettered suffix. */
16663 if (p[0] == 'm')
16664 {
16665 p++;
16666 suffix[0] = p[0];
16667 suffix[1] = '\0';
16668 }
16669 else
16670 {
16671 suffix[0] = p[0];
16672 suffix[1] = p[1];
16673 suffix[2] = '\0';
16674 }
16675
16676 sprintf (p, "%s%s", xop_cmp_op[cmp_type].name, suffix);
16677 mnemonicendp += xop_cmp_op[cmp_type].len;
16678 }
43234a1e
L
16679 else
16680 {
16681 /* We have a reserved extension byte. Output it directly. */
16682 scratchbuf[0] = '$';
16683 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16684 oappend_maybe_intel (scratchbuf);
43234a1e
L
16685 scratchbuf[0] = '\0';
16686 }
16687}
16688
ea397f5b
L
16689static const struct op pclmul_op[] =
16690{
16691 { STRING_COMMA_LEN ("lql") },
16692 { STRING_COMMA_LEN ("hql") },
16693 { STRING_COMMA_LEN ("lqh") },
16694 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
16695};
16696
16697static void
16698PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
16699 int sizeflag ATTRIBUTE_UNUSED)
16700{
16701 unsigned int pclmul_type;
16702
16703 FETCH_DATA (the_info, codep + 1);
16704 pclmul_type = *codep++ & 0xff;
16705 switch (pclmul_type)
16706 {
16707 case 0x10:
16708 pclmul_type = 2;
16709 break;
16710 case 0x11:
16711 pclmul_type = 3;
16712 break;
16713 default:
16714 break;
7bb15c6f 16715 }
c0f3af97
L
16716 if (pclmul_type < ARRAY_SIZE (pclmul_op))
16717 {
16718 char suffix [4];
ea397f5b 16719 char *p = mnemonicendp - 3;
c0f3af97
L
16720 suffix[0] = p[0];
16721 suffix[1] = p[1];
16722 suffix[2] = p[2];
16723 suffix[3] = '\0';
ea397f5b
L
16724 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
16725 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
16726 }
16727 else
16728 {
16729 /* We have a reserved extension byte. Output it directly. */
16730 scratchbuf[0] = '$';
16731 print_operand_value (scratchbuf + 1, 1, pclmul_type);
9ce09ba2 16732 oappend_maybe_intel (scratchbuf);
c0f3af97
L
16733 scratchbuf[0] = '\0';
16734 }
16735}
16736
bc31405e
L
16737static void
16738MOVSXD_Fixup (int bytemode, int sizeflag)
16739{
16740 /* Add proper suffix to "movsxd". */
16741 char *p = mnemonicendp;
16742
16743 switch (bytemode)
16744 {
16745 case movsxd_mode:
16746 if (intel_syntax)
16747 {
16748 *p++ = 'x';
16749 *p++ = 'd';
16750 goto skip;
16751 }
16752
16753 USED_REX (REX_W);
16754 if (rex & REX_W)
16755 {
16756 *p++ = 'l';
16757 *p++ = 'q';
16758 }
16759 else
16760 {
16761 *p++ = 'x';
16762 *p++ = 'd';
16763 }
16764 break;
16765 default:
16766 oappend (INTERNAL_DISASSEMBLER_ERROR);
16767 break;
16768 }
16769
dc1e8a47 16770 skip:
bc31405e
L
16771 mnemonicendp = p;
16772 *p = '\0';
16773 OP_E (bytemode, sizeflag);
16774}
16775
43234a1e
L
16776static void
16777OP_Mask (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16778{
16779 if (!vex.evex
1ba585e8 16780 || (bytemode != mask_mode && bytemode != mask_bd_mode))
43234a1e
L
16781 abort ();
16782
16783 USED_REX (REX_R);
16784 if ((rex & REX_R) != 0 || !vex.r)
16785 {
16786 BadOp ();
16787 return;
16788 }
16789
16790 oappend (names_mask [modrm.reg]);
16791}
16792
16793static void
16794OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16795{
43234a1e
L
16796 if (modrm.mod == 3 && vex.b)
16797 switch (bytemode)
16798 {
70df6fc9
L
16799 case evex_rounding_64_mode:
16800 if (address_mode != mode_64bit)
16801 {
16802 oappend ("(bad)");
16803 break;
16804 }
16805 /* Fall through. */
43234a1e
L
16806 case evex_rounding_mode:
16807 oappend (names_rounding[vex.ll]);
16808 break;
16809 case evex_sae_mode:
16810 oappend ("{sae}");
16811 break;
16812 default:
6df22cf6 16813 abort ();
43234a1e
L
16814 break;
16815 }
16816}
This page took 2.45769 seconds and 4 git commands to generate.