mach-o: reject 64 bit targets when not configured for.
[deliverable/binutils-gdb.git] / opcodes / i386-dis.c
CommitLineData
252b5132 1/* Print i386 instructions for GDB, the GNU debugger.
4b95cf5c 2 Copyright (C) 1988-2014 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"
dabbade6 36#include "dis-asm.h"
252b5132 37#include "opintl.h"
0b1cf022 38#include "opcode/i386.h"
85f10a01 39#include "libiberty.h"
252b5132
RH
40
41#include <setjmp.h>
42
26ca5450
AJ
43static int print_insn (bfd_vma, disassemble_info *);
44static void dofloat (int);
45static void OP_ST (int, int);
46static void OP_STi (int, int);
47static int putop (const char *, int);
48static void oappend (const char *);
49static void append_seg (void);
50static void OP_indirE (int, int);
51static void print_operand_value (char *, int, bfd_vma);
c0f3af97 52static void OP_E_register (int, int);
c1e679ec 53static void OP_E_memory (int, int);
5d669648 54static void print_displacement (char *, bfd_vma);
26ca5450
AJ
55static void OP_E (int, int);
56static void OP_G (int, int);
57static bfd_vma get64 (void);
58static bfd_signed_vma get32 (void);
59static bfd_signed_vma get32s (void);
60static int get16 (void);
61static void set_op (bfd_vma, int);
b844680a 62static void OP_Skip_MODRM (int, int);
26ca5450
AJ
63static void OP_REG (int, int);
64static void OP_IMREG (int, int);
65static void OP_I (int, int);
66static void OP_I64 (int, int);
67static void OP_sI (int, int);
68static void OP_J (int, int);
69static void OP_SEG (int, int);
70static void OP_DIR (int, int);
71static void OP_OFF (int, int);
72static void OP_OFF64 (int, int);
73static void ptr_reg (int, int);
74static void OP_ESreg (int, int);
75static void OP_DSreg (int, int);
76static void OP_C (int, int);
77static void OP_D (int, int);
78static void OP_T (int, int);
6f74c397 79static void OP_R (int, int);
26ca5450
AJ
80static void OP_MMX (int, int);
81static void OP_XMM (int, int);
82static void OP_EM (int, int);
83static void OP_EX (int, int);
4d9567e0
MM
84static void OP_EMC (int,int);
85static void OP_MXC (int,int);
26ca5450
AJ
86static void OP_MS (int, int);
87static void OP_XS (int, int);
cc0ec051 88static void OP_M (int, int);
c0f3af97
L
89static void OP_VEX (int, int);
90static void OP_EX_Vex (int, int);
922d8de8 91static void OP_EX_VexW (int, int);
a683cc34 92static void OP_EX_VexImmW (int, int);
c0f3af97 93static void OP_XMM_Vex (int, int);
922d8de8 94static void OP_XMM_VexW (int, int);
43234a1e 95static void OP_Rounding (int, int);
c0f3af97
L
96static void OP_REG_VexI4 (int, int);
97static void PCLMUL_Fixup (int, int);
922d8de8 98static void VEXI4_Fixup (int, int);
c0f3af97
L
99static void VZERO_Fixup (int, int);
100static void VCMP_Fixup (int, int);
43234a1e 101static void VPCMP_Fixup (int, int);
cc0ec051 102static void OP_0f07 (int, int);
b844680a
L
103static void OP_Monitor (int, int);
104static void OP_Mwait (int, int);
46e883c5
L
105static void NOP_Fixup1 (int, int);
106static void NOP_Fixup2 (int, int);
26ca5450 107static void OP_3DNowSuffix (int, int);
ad19981d 108static void CMP_Fixup (int, int);
26ca5450 109static void BadOp (void);
35c52694 110static void REP_Fixup (int, int);
7e8b059b 111static void BND_Fixup (int, int);
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);
381d071f 117static void CRC32_Fixup (int, int);
eacc9c89 118static void FXSAVE_Fixup (int, int);
f88c9eb0
SP
119static void OP_LWPCB_E (int, int);
120static void OP_LWP_E (int, int);
5dd85c99
SP
121static void OP_Vex_2src_1 (int, int);
122static void OP_Vex_2src_2 (int, int);
c1e679ec 123
f1f8f695 124static void MOVBE_Fixup (int, int);
252b5132 125
43234a1e
L
126static void OP_Mask (int, int);
127
6608db57 128struct dis_private {
252b5132
RH
129 /* Points to first byte not fetched. */
130 bfd_byte *max_fetched;
0b1cf022 131 bfd_byte the_buffer[MAX_MNEM_SIZE];
252b5132 132 bfd_vma insn_start;
e396998b 133 int orig_sizeflag;
252b5132
RH
134 jmp_buf bailout;
135};
136
cb712a9e
L
137enum address_mode
138{
139 mode_16bit,
140 mode_32bit,
141 mode_64bit
142};
143
144enum address_mode address_mode;
52b15da3 145
5076851f
ILT
146/* Flags for the prefixes for the current instruction. See below. */
147static int prefixes;
148
52b15da3
JH
149/* REX prefix the current instruction. See below. */
150static int rex;
151/* Bits of REX we've already used. */
152static int rex_used;
d869730d 153/* REX bits in original REX prefix ignored. */
c0f3af97 154static int rex_ignored;
52b15da3
JH
155/* Mark parts used in the REX prefix. When we are testing for
156 empty prefix (for 8bit register REX extension), just mask it
157 out. Otherwise test for REX bit is excuse for existence of REX
158 only in case value is nonzero. */
159#define USED_REX(value) \
160 { \
161 if (value) \
161a04f6
L
162 { \
163 if ((rex & value)) \
164 rex_used |= (value) | REX_OPCODE; \
165 } \
52b15da3 166 else \
161a04f6 167 rex_used |= REX_OPCODE; \
52b15da3
JH
168 }
169
7d421014
ILT
170/* Flags for prefixes which we somehow handled when printing the
171 current instruction. */
172static int used_prefixes;
173
5076851f
ILT
174/* Flags stored in PREFIXES. */
175#define PREFIX_REPZ 1
176#define PREFIX_REPNZ 2
177#define PREFIX_LOCK 4
178#define PREFIX_CS 8
179#define PREFIX_SS 0x10
180#define PREFIX_DS 0x20
181#define PREFIX_ES 0x40
182#define PREFIX_FS 0x80
183#define PREFIX_GS 0x100
184#define PREFIX_DATA 0x200
185#define PREFIX_ADDR 0x400
186#define PREFIX_FWAIT 0x800
187
252b5132
RH
188/* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
189 to ADDR (exclusive) are valid. Returns 1 for success, longjmps
190 on error. */
191#define FETCH_DATA(info, addr) \
6608db57 192 ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
252b5132
RH
193 ? 1 : fetch_data ((info), (addr)))
194
195static int
26ca5450 196fetch_data (struct disassemble_info *info, bfd_byte *addr)
252b5132
RH
197{
198 int status;
6608db57 199 struct dis_private *priv = (struct dis_private *) info->private_data;
252b5132
RH
200 bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
201
0b1cf022 202 if (addr <= priv->the_buffer + MAX_MNEM_SIZE)
272c9217
JB
203 status = (*info->read_memory_func) (start,
204 priv->max_fetched,
205 addr - priv->max_fetched,
206 info);
207 else
208 status = -1;
252b5132
RH
209 if (status != 0)
210 {
7d421014 211 /* If we did manage to read at least one byte, then
db6eb5be
AM
212 print_insn_i386 will do something sensible. Otherwise, print
213 an error. We do that here because this is where we know
214 STATUS. */
7d421014 215 if (priv->max_fetched == priv->the_buffer)
5076851f 216 (*info->memory_error_func) (status, start, info);
252b5132
RH
217 longjmp (priv->bailout, 1);
218 }
219 else
220 priv->max_fetched = addr;
221 return 1;
222}
223
ce518a5f 224#define XX { NULL, 0 }
592d1631 225#define Bad_Opcode NULL, { { NULL, 0 } }
ce518a5f
L
226
227#define Eb { OP_E, b_mode }
7e8b059b 228#define Ebnd { OP_E, bnd_mode }
b6169b20 229#define EbS { OP_E, b_swap_mode }
ce518a5f 230#define Ev { OP_E, v_mode }
7e8b059b 231#define Ev_bnd { OP_E, v_bnd_mode }
b6169b20 232#define EvS { OP_E, v_swap_mode }
ce518a5f
L
233#define Ed { OP_E, d_mode }
234#define Edq { OP_E, dq_mode }
235#define Edqw { OP_E, dqw_mode }
42903f7f
L
236#define Edqb { OP_E, dqb_mode }
237#define Edqd { OP_E, dqd_mode }
09335d05 238#define Eq { OP_E, q_mode }
ce518a5f
L
239#define indirEv { OP_indirE, stack_v_mode }
240#define indirEp { OP_indirE, f_mode }
241#define stackEv { OP_E, stack_v_mode }
242#define Em { OP_E, m_mode }
243#define Ew { OP_E, w_mode }
244#define M { OP_M, 0 } /* lea, lgdt, etc. */
34b772a6 245#define Ma { OP_M, a_mode }
b844680a 246#define Mb { OP_M, b_mode }
d9a5e5e5 247#define Md { OP_M, d_mode }
f1f8f695 248#define Mo { OP_M, o_mode }
ce518a5f
L
249#define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for LDS, LES etc */
250#define Mq { OP_M, q_mode }
4ee52178 251#define Mx { OP_M, x_mode }
c0f3af97 252#define Mxmm { OP_M, xmm_mode }
ce518a5f 253#define Gb { OP_G, b_mode }
7e8b059b 254#define Gbnd { OP_G, bnd_mode }
ce518a5f
L
255#define Gv { OP_G, v_mode }
256#define Gd { OP_G, d_mode }
257#define Gdq { OP_G, dq_mode }
258#define Gm { OP_G, m_mode }
259#define Gw { OP_G, w_mode }
6f74c397 260#define Rd { OP_R, d_mode }
43234a1e 261#define Rdq { OP_R, dq_mode }
6f74c397 262#define Rm { OP_R, m_mode }
ce518a5f
L
263#define Ib { OP_I, b_mode }
264#define sIb { OP_sI, b_mode } /* sign extened byte */
e3949f17 265#define sIbT { OP_sI, b_T_mode } /* sign extened byte like 'T' */
ce518a5f 266#define Iv { OP_I, v_mode }
7bb15c6f 267#define sIv { OP_sI, v_mode }
ce518a5f
L
268#define Iq { OP_I, q_mode }
269#define Iv64 { OP_I64, v_mode }
270#define Iw { OP_I, w_mode }
271#define I1 { OP_I, const_1_mode }
272#define Jb { OP_J, b_mode }
273#define Jv { OP_J, v_mode }
274#define Cm { OP_C, m_mode }
275#define Dm { OP_D, m_mode }
276#define Td { OP_T, d_mode }
b844680a 277#define Skip_MODRM { OP_Skip_MODRM, 0 }
ce518a5f
L
278
279#define RMeAX { OP_REG, eAX_reg }
280#define RMeBX { OP_REG, eBX_reg }
281#define RMeCX { OP_REG, eCX_reg }
282#define RMeDX { OP_REG, eDX_reg }
283#define RMeSP { OP_REG, eSP_reg }
284#define RMeBP { OP_REG, eBP_reg }
285#define RMeSI { OP_REG, eSI_reg }
286#define RMeDI { OP_REG, eDI_reg }
287#define RMrAX { OP_REG, rAX_reg }
288#define RMrBX { OP_REG, rBX_reg }
289#define RMrCX { OP_REG, rCX_reg }
290#define RMrDX { OP_REG, rDX_reg }
291#define RMrSP { OP_REG, rSP_reg }
292#define RMrBP { OP_REG, rBP_reg }
293#define RMrSI { OP_REG, rSI_reg }
294#define RMrDI { OP_REG, rDI_reg }
295#define RMAL { OP_REG, al_reg }
ce518a5f
L
296#define RMCL { OP_REG, cl_reg }
297#define RMDL { OP_REG, dl_reg }
298#define RMBL { OP_REG, bl_reg }
299#define RMAH { OP_REG, ah_reg }
300#define RMCH { OP_REG, ch_reg }
301#define RMDH { OP_REG, dh_reg }
302#define RMBH { OP_REG, bh_reg }
303#define RMAX { OP_REG, ax_reg }
304#define RMDX { OP_REG, dx_reg }
305
306#define eAX { OP_IMREG, eAX_reg }
307#define eBX { OP_IMREG, eBX_reg }
308#define eCX { OP_IMREG, eCX_reg }
309#define eDX { OP_IMREG, eDX_reg }
310#define eSP { OP_IMREG, eSP_reg }
311#define eBP { OP_IMREG, eBP_reg }
312#define eSI { OP_IMREG, eSI_reg }
313#define eDI { OP_IMREG, eDI_reg }
314#define AL { OP_IMREG, al_reg }
315#define CL { OP_IMREG, cl_reg }
316#define DL { OP_IMREG, dl_reg }
317#define BL { OP_IMREG, bl_reg }
318#define AH { OP_IMREG, ah_reg }
319#define CH { OP_IMREG, ch_reg }
320#define DH { OP_IMREG, dh_reg }
321#define BH { OP_IMREG, bh_reg }
322#define AX { OP_IMREG, ax_reg }
323#define DX { OP_IMREG, dx_reg }
324#define zAX { OP_IMREG, z_mode_ax_reg }
325#define indirDX { OP_IMREG, indir_dx_reg }
326
327#define Sw { OP_SEG, w_mode }
328#define Sv { OP_SEG, v_mode }
329#define Ap { OP_DIR, 0 }
330#define Ob { OP_OFF64, b_mode }
331#define Ov { OP_OFF64, v_mode }
332#define Xb { OP_DSreg, eSI_reg }
333#define Xv { OP_DSreg, eSI_reg }
334#define Xz { OP_DSreg, eSI_reg }
335#define Yb { OP_ESreg, eDI_reg }
336#define Yv { OP_ESreg, eDI_reg }
337#define DSBX { OP_DSreg, eBX_reg }
338
339#define es { OP_REG, es_reg }
340#define ss { OP_REG, ss_reg }
341#define cs { OP_REG, cs_reg }
342#define ds { OP_REG, ds_reg }
343#define fs { OP_REG, fs_reg }
344#define gs { OP_REG, gs_reg }
345
346#define MX { OP_MMX, 0 }
347#define XM { OP_XMM, 0 }
539f890d 348#define XMScalar { OP_XMM, scalar_mode }
6c30d220 349#define XMGatherQ { OP_XMM, vex_vsib_q_w_dq_mode }
c0f3af97 350#define XMM { OP_XMM, xmm_mode }
43234a1e 351#define XMxmmq { OP_XMM, xmmq_mode }
ce518a5f 352#define EM { OP_EM, v_mode }
b6169b20 353#define EMS { OP_EM, v_swap_mode }
09a2c6cf 354#define EMd { OP_EM, d_mode }
14051056 355#define EMx { OP_EM, x_mode }
8976381e 356#define EXw { OP_EX, w_mode }
09a2c6cf 357#define EXd { OP_EX, d_mode }
539f890d 358#define EXdScalar { OP_EX, d_scalar_mode }
fa99fab2 359#define EXdS { OP_EX, d_swap_mode }
43234a1e 360#define EXdScalarS { OP_EX, d_scalar_swap_mode }
09a2c6cf 361#define EXq { OP_EX, q_mode }
539f890d
L
362#define EXqScalar { OP_EX, q_scalar_mode }
363#define EXqScalarS { OP_EX, q_scalar_swap_mode }
b6169b20 364#define EXqS { OP_EX, q_swap_mode }
09a2c6cf 365#define EXx { OP_EX, x_mode }
b6169b20 366#define EXxS { OP_EX, x_swap_mode }
c0f3af97 367#define EXxmm { OP_EX, xmm_mode }
43234a1e 368#define EXymm { OP_EX, ymm_mode }
c0f3af97 369#define EXxmmq { OP_EX, xmmq_mode }
43234a1e 370#define EXEvexHalfBcstXmmq { OP_EX, evex_half_bcst_xmmq_mode }
6c30d220
L
371#define EXxmm_mb { OP_EX, xmm_mb_mode }
372#define EXxmm_mw { OP_EX, xmm_mw_mode }
373#define EXxmm_md { OP_EX, xmm_md_mode }
374#define EXxmm_mq { OP_EX, xmm_mq_mode }
43234a1e 375#define EXxmm_mdq { OP_EX, xmm_mdq_mode }
6c30d220
L
376#define EXxmmdw { OP_EX, xmmdw_mode }
377#define EXxmmqd { OP_EX, xmmqd_mode }
c0f3af97 378#define EXymmq { OP_EX, ymmq_mode }
0bfee649 379#define EXVexWdq { OP_EX, vex_w_dq_mode }
1c480963 380#define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
43234a1e
L
381#define EXEvexXGscat { OP_EX, evex_x_gscat_mode }
382#define EXEvexXNoBcst { OP_EX, evex_x_nobcst_mode }
ce518a5f
L
383#define MS { OP_MS, v_mode }
384#define XS { OP_XS, v_mode }
09335d05 385#define EMCq { OP_EMC, q_mode }
ce518a5f 386#define MXC { OP_MXC, 0 }
ce518a5f 387#define OPSUF { OP_3DNowSuffix, 0 }
ad19981d 388#define CMP { CMP_Fixup, 0 }
42903f7f 389#define XMM0 { XMM_Fixup, 0 }
eacc9c89 390#define FXSAVE { FXSAVE_Fixup, 0 }
5dd85c99
SP
391#define Vex_2src_1 { OP_Vex_2src_1, 0 }
392#define Vex_2src_2 { OP_Vex_2src_2, 0 }
252b5132 393
c0f3af97 394#define Vex { OP_VEX, vex_mode }
539f890d 395#define VexScalar { OP_VEX, vex_scalar_mode }
6c30d220 396#define VexGatherQ { OP_VEX, vex_vsib_q_w_dq_mode }
c0f3af97
L
397#define Vex128 { OP_VEX, vex128_mode }
398#define Vex256 { OP_VEX, vex256_mode }
cb21baef 399#define VexGdq { OP_VEX, dq_mode }
922d8de8 400#define VexI4 { VEXI4_Fixup, 0}
c0f3af97 401#define EXdVex { OP_EX_Vex, d_mode }
fa99fab2 402#define EXdVexS { OP_EX_Vex, d_swap_mode }
539f890d 403#define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode }
c0f3af97 404#define EXqVex { OP_EX_Vex, q_mode }
fa99fab2 405#define EXqVexS { OP_EX_Vex, q_swap_mode }
539f890d 406#define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode }
922d8de8
DR
407#define EXVexW { OP_EX_VexW, x_mode }
408#define EXdVexW { OP_EX_VexW, d_mode }
409#define EXqVexW { OP_EX_VexW, q_mode }
a683cc34 410#define EXVexImmW { OP_EX_VexImmW, x_mode }
c0f3af97 411#define XMVex { OP_XMM_Vex, 0 }
539f890d 412#define XMVexScalar { OP_XMM_Vex, scalar_mode }
922d8de8 413#define XMVexW { OP_XMM_VexW, 0 }
c0f3af97
L
414#define XMVexI4 { OP_REG_VexI4, x_mode }
415#define PCLMUL { PCLMUL_Fixup, 0 }
416#define VZERO { VZERO_Fixup, 0 }
417#define VCMP { VCMP_Fixup, 0 }
43234a1e
L
418#define VPCMP { VPCMP_Fixup, 0 }
419
420#define EXxEVexR { OP_Rounding, evex_rounding_mode }
421#define EXxEVexS { OP_Rounding, evex_sae_mode }
422
423#define XMask { OP_Mask, mask_mode }
424#define MaskG { OP_G, mask_mode }
425#define MaskE { OP_E, mask_mode }
426#define MaskR { OP_R, mask_mode }
427#define MaskVex { OP_VEX, mask_mode }
c0f3af97 428
6c30d220 429#define MVexVSIBDWpX { OP_M, vex_vsib_d_w_dq_mode }
5fc35d96 430#define MVexVSIBDQWpX { OP_M, vex_vsib_d_w_d_mode }
6c30d220 431#define MVexVSIBQWpX { OP_M, vex_vsib_q_w_dq_mode }
5fc35d96 432#define MVexVSIBQDWpX { OP_M, vex_vsib_q_w_d_mode }
6c30d220 433
35c52694 434/* Used handle "rep" prefix for string instructions. */
ce518a5f
L
435#define Xbr { REP_Fixup, eSI_reg }
436#define Xvr { REP_Fixup, eSI_reg }
437#define Ybr { REP_Fixup, eDI_reg }
438#define Yvr { REP_Fixup, eDI_reg }
439#define Yzr { REP_Fixup, eDI_reg }
440#define indirDXr { REP_Fixup, indir_dx_reg }
441#define ALr { REP_Fixup, al_reg }
442#define eAXr { REP_Fixup, eAX_reg }
443
42164a71
L
444/* Used handle HLE prefix for lockable instructions. */
445#define Ebh1 { HLE_Fixup1, b_mode }
446#define Evh1 { HLE_Fixup1, v_mode }
447#define Ebh2 { HLE_Fixup2, b_mode }
448#define Evh2 { HLE_Fixup2, v_mode }
449#define Ebh3 { HLE_Fixup3, b_mode }
450#define Evh3 { HLE_Fixup3, v_mode }
451
7e8b059b
L
452#define BND { BND_Fixup, 0 }
453
ce518a5f
L
454#define cond_jump_flag { NULL, cond_jump_mode }
455#define loop_jcxz_flag { NULL, loop_jcxz_mode }
3ffd33cf 456
252b5132 457/* bits in sizeflag */
252b5132 458#define SUFFIX_ALWAYS 4
252b5132
RH
459#define AFLAG 2
460#define DFLAG 1
461
51e7da1b
L
462enum
463{
464 /* byte operand */
465 b_mode = 1,
466 /* byte operand with operand swapped */
3873ba12 467 b_swap_mode,
e3949f17
L
468 /* byte operand, sign extend like 'T' suffix */
469 b_T_mode,
51e7da1b 470 /* operand size depends on prefixes */
3873ba12 471 v_mode,
51e7da1b 472 /* operand size depends on prefixes with operand swapped */
3873ba12 473 v_swap_mode,
51e7da1b 474 /* word operand */
3873ba12 475 w_mode,
51e7da1b 476 /* double word operand */
3873ba12 477 d_mode,
51e7da1b 478 /* double word operand with operand swapped */
3873ba12 479 d_swap_mode,
51e7da1b 480 /* quad word operand */
3873ba12 481 q_mode,
51e7da1b 482 /* quad word operand with operand swapped */
3873ba12 483 q_swap_mode,
51e7da1b 484 /* ten-byte operand */
3873ba12 485 t_mode,
43234a1e
L
486 /* 16-byte XMM, 32-byte YMM or 64-byte ZMM operand. In EVEX with
487 broadcast enabled. */
3873ba12 488 x_mode,
43234a1e
L
489 /* Similar to x_mode, but with different EVEX mem shifts. */
490 evex_x_gscat_mode,
491 /* Similar to x_mode, but with disabled broadcast. */
492 evex_x_nobcst_mode,
493 /* Similar to x_mode, but with operands swapped and disabled broadcast
494 in EVEX. */
3873ba12 495 x_swap_mode,
51e7da1b 496 /* 16-byte XMM operand */
3873ba12 497 xmm_mode,
43234a1e
L
498 /* XMM, XMM or YMM register operand, or quad word, xmmword or ymmword
499 memory operand (depending on vector length). Broadcast isn't
500 allowed. */
3873ba12 501 xmmq_mode,
43234a1e
L
502 /* Same as xmmq_mode, but broadcast is allowed. */
503 evex_half_bcst_xmmq_mode,
6c30d220
L
504 /* XMM register or byte memory operand */
505 xmm_mb_mode,
506 /* XMM register or word memory operand */
507 xmm_mw_mode,
508 /* XMM register or double word memory operand */
509 xmm_md_mode,
510 /* XMM register or quad word memory operand */
511 xmm_mq_mode,
43234a1e
L
512 /* XMM register or double/quad word memory operand, depending on
513 VEX.W. */
514 xmm_mdq_mode,
515 /* 16-byte XMM, word, double word or quad word operand. */
6c30d220 516 xmmdw_mode,
43234a1e 517 /* 16-byte XMM, double word, quad word operand or xmm word operand. */
6c30d220 518 xmmqd_mode,
43234a1e
L
519 /* 32-byte YMM operand */
520 ymm_mode,
521 /* quad word, ymmword or zmmword memory operand. */
3873ba12 522 ymmq_mode,
6c30d220
L
523 /* 32-byte YMM or 16-byte word operand */
524 ymmxmm_mode,
51e7da1b 525 /* d_mode in 32bit, q_mode in 64bit mode. */
3873ba12 526 m_mode,
51e7da1b 527 /* pair of v_mode operands */
3873ba12
L
528 a_mode,
529 cond_jump_mode,
530 loop_jcxz_mode,
7e8b059b 531 v_bnd_mode,
51e7da1b 532 /* operand size depends on REX prefixes. */
3873ba12 533 dq_mode,
51e7da1b 534 /* registers like dq_mode, memory like w_mode. */
3873ba12 535 dqw_mode,
7e8b059b 536 bnd_mode,
51e7da1b 537 /* 4- or 6-byte pointer operand */
3873ba12
L
538 f_mode,
539 const_1_mode,
51e7da1b 540 /* v_mode for stack-related opcodes. */
3873ba12 541 stack_v_mode,
51e7da1b 542 /* non-quad operand size depends on prefixes */
3873ba12 543 z_mode,
51e7da1b 544 /* 16-byte operand */
3873ba12 545 o_mode,
51e7da1b 546 /* registers like dq_mode, memory like b_mode. */
3873ba12 547 dqb_mode,
51e7da1b 548 /* registers like dq_mode, memory like d_mode. */
3873ba12 549 dqd_mode,
51e7da1b 550 /* normal vex mode */
3873ba12 551 vex_mode,
51e7da1b 552 /* 128bit vex mode */
3873ba12 553 vex128_mode,
51e7da1b 554 /* 256bit vex mode */
3873ba12 555 vex256_mode,
51e7da1b 556 /* operand size depends on the VEX.W bit. */
3873ba12 557 vex_w_dq_mode,
d55ee72f 558
6c30d220
L
559 /* Similar to vex_w_dq_mode, with VSIB dword indices. */
560 vex_vsib_d_w_dq_mode,
5fc35d96
IT
561 /* Similar to vex_vsib_d_w_dq_mode, with smaller memory. */
562 vex_vsib_d_w_d_mode,
6c30d220
L
563 /* Similar to vex_w_dq_mode, with VSIB qword indices. */
564 vex_vsib_q_w_dq_mode,
5fc35d96
IT
565 /* Similar to vex_vsib_q_w_dq_mode, with smaller memory. */
566 vex_vsib_q_w_d_mode,
6c30d220 567
539f890d
L
568 /* scalar, ignore vector length. */
569 scalar_mode,
570 /* like d_mode, ignore vector length. */
571 d_scalar_mode,
572 /* like d_swap_mode, ignore vector length. */
573 d_scalar_swap_mode,
574 /* like q_mode, ignore vector length. */
575 q_scalar_mode,
576 /* like q_swap_mode, ignore vector length. */
577 q_scalar_swap_mode,
578 /* like vex_mode, ignore vector length. */
579 vex_scalar_mode,
1c480963
L
580 /* like vex_w_dq_mode, ignore vector length. */
581 vex_scalar_w_dq_mode,
539f890d 582
43234a1e
L
583 /* Static rounding. */
584 evex_rounding_mode,
585 /* Supress all exceptions. */
586 evex_sae_mode,
587
588 /* Mask register operand. */
589 mask_mode,
590
3873ba12
L
591 es_reg,
592 cs_reg,
593 ss_reg,
594 ds_reg,
595 fs_reg,
596 gs_reg,
d55ee72f 597
3873ba12
L
598 eAX_reg,
599 eCX_reg,
600 eDX_reg,
601 eBX_reg,
602 eSP_reg,
603 eBP_reg,
604 eSI_reg,
605 eDI_reg,
d55ee72f 606
3873ba12
L
607 al_reg,
608 cl_reg,
609 dl_reg,
610 bl_reg,
611 ah_reg,
612 ch_reg,
613 dh_reg,
614 bh_reg,
d55ee72f 615
3873ba12
L
616 ax_reg,
617 cx_reg,
618 dx_reg,
619 bx_reg,
620 sp_reg,
621 bp_reg,
622 si_reg,
623 di_reg,
d55ee72f 624
3873ba12
L
625 rAX_reg,
626 rCX_reg,
627 rDX_reg,
628 rBX_reg,
629 rSP_reg,
630 rBP_reg,
631 rSI_reg,
632 rDI_reg,
d55ee72f 633
3873ba12
L
634 z_mode_ax_reg,
635 indir_dx_reg
51e7da1b 636};
252b5132 637
51e7da1b
L
638enum
639{
640 FLOATCODE = 1,
3873ba12
L
641 USE_REG_TABLE,
642 USE_MOD_TABLE,
643 USE_RM_TABLE,
644 USE_PREFIX_TABLE,
645 USE_X86_64_TABLE,
646 USE_3BYTE_TABLE,
f88c9eb0 647 USE_XOP_8F_TABLE,
3873ba12
L
648 USE_VEX_C4_TABLE,
649 USE_VEX_C5_TABLE,
9e30b8e0 650 USE_VEX_LEN_TABLE,
43234a1e
L
651 USE_VEX_W_TABLE,
652 USE_EVEX_TABLE
51e7da1b 653};
6439fc28 654
1ceb70f8 655#define FLOAT NULL, { { NULL, FLOATCODE } }
4efba78c 656
4e7d34a6 657#define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }
1ceb70f8
L
658#define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
659#define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
660#define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
661#define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
4e7d34a6
L
662#define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
663#define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
f88c9eb0 664#define XOP_8F_TABLE(I) DIS386 (USE_XOP_8F_TABLE, (I))
c0f3af97
L
665#define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
666#define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
667#define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
9e30b8e0 668#define VEX_W_TABLE(I) DIS386 (USE_VEX_W_TABLE, (I))
43234a1e 669#define EVEX_TABLE(I) DIS386 (USE_EVEX_TABLE, (I))
1ceb70f8 670
51e7da1b
L
671enum
672{
673 REG_80 = 0,
3873ba12
L
674 REG_81,
675 REG_82,
676 REG_8F,
677 REG_C0,
678 REG_C1,
679 REG_C6,
680 REG_C7,
681 REG_D0,
682 REG_D1,
683 REG_D2,
684 REG_D3,
685 REG_F6,
686 REG_F7,
687 REG_FE,
688 REG_FF,
689 REG_0F00,
690 REG_0F01,
691 REG_0F0D,
692 REG_0F18,
693 REG_0F71,
694 REG_0F72,
695 REG_0F73,
696 REG_0FA6,
697 REG_0FA7,
698 REG_0FAE,
699 REG_0FBA,
700 REG_0FC7,
592a252b
L
701 REG_VEX_0F71,
702 REG_VEX_0F72,
703 REG_VEX_0F73,
704 REG_VEX_0FAE,
f12dc422 705 REG_VEX_0F38F3,
f88c9eb0 706 REG_XOP_LWPCB,
2a2a0f38
QN
707 REG_XOP_LWP,
708 REG_XOP_TBM_01,
43234a1e
L
709 REG_XOP_TBM_02,
710
711 REG_EVEX_0F72,
712 REG_EVEX_0F73,
713 REG_EVEX_0F38C6,
714 REG_EVEX_0F38C7
51e7da1b 715};
1ceb70f8 716
51e7da1b
L
717enum
718{
719 MOD_8D = 0,
42164a71
L
720 MOD_C6_REG_7,
721 MOD_C7_REG_7,
4a357820
MZ
722 MOD_FF_REG_3,
723 MOD_FF_REG_5,
3873ba12
L
724 MOD_0F01_REG_0,
725 MOD_0F01_REG_1,
726 MOD_0F01_REG_2,
727 MOD_0F01_REG_3,
728 MOD_0F01_REG_7,
729 MOD_0F12_PREFIX_0,
730 MOD_0F13,
731 MOD_0F16_PREFIX_0,
732 MOD_0F17,
733 MOD_0F18_REG_0,
734 MOD_0F18_REG_1,
735 MOD_0F18_REG_2,
736 MOD_0F18_REG_3,
d7189fa5
RM
737 MOD_0F18_REG_4,
738 MOD_0F18_REG_5,
739 MOD_0F18_REG_6,
740 MOD_0F18_REG_7,
7e8b059b
L
741 MOD_0F1A_PREFIX_0,
742 MOD_0F1B_PREFIX_0,
743 MOD_0F1B_PREFIX_1,
3873ba12
L
744 MOD_0F20,
745 MOD_0F21,
746 MOD_0F22,
747 MOD_0F23,
748 MOD_0F24,
749 MOD_0F26,
750 MOD_0F2B_PREFIX_0,
751 MOD_0F2B_PREFIX_1,
752 MOD_0F2B_PREFIX_2,
753 MOD_0F2B_PREFIX_3,
754 MOD_0F51,
755 MOD_0F71_REG_2,
756 MOD_0F71_REG_4,
757 MOD_0F71_REG_6,
758 MOD_0F72_REG_2,
759 MOD_0F72_REG_4,
760 MOD_0F72_REG_6,
761 MOD_0F73_REG_2,
762 MOD_0F73_REG_3,
763 MOD_0F73_REG_6,
764 MOD_0F73_REG_7,
765 MOD_0FAE_REG_0,
766 MOD_0FAE_REG_1,
767 MOD_0FAE_REG_2,
768 MOD_0FAE_REG_3,
769 MOD_0FAE_REG_4,
770 MOD_0FAE_REG_5,
771 MOD_0FAE_REG_6,
772 MOD_0FAE_REG_7,
773 MOD_0FB2,
774 MOD_0FB4,
775 MOD_0FB5,
963f3586
IT
776 MOD_0FC7_REG_3,
777 MOD_0FC7_REG_4,
778 MOD_0FC7_REG_5,
3873ba12
L
779 MOD_0FC7_REG_6,
780 MOD_0FC7_REG_7,
781 MOD_0FD7,
782 MOD_0FE7_PREFIX_2,
783 MOD_0FF0_PREFIX_3,
784 MOD_0F382A_PREFIX_2,
785 MOD_62_32BIT,
786 MOD_C4_32BIT,
787 MOD_C5_32BIT,
592a252b
L
788 MOD_VEX_0F12_PREFIX_0,
789 MOD_VEX_0F13,
790 MOD_VEX_0F16_PREFIX_0,
791 MOD_VEX_0F17,
792 MOD_VEX_0F2B,
793 MOD_VEX_0F50,
794 MOD_VEX_0F71_REG_2,
795 MOD_VEX_0F71_REG_4,
796 MOD_VEX_0F71_REG_6,
797 MOD_VEX_0F72_REG_2,
798 MOD_VEX_0F72_REG_4,
799 MOD_VEX_0F72_REG_6,
800 MOD_VEX_0F73_REG_2,
801 MOD_VEX_0F73_REG_3,
802 MOD_VEX_0F73_REG_6,
803 MOD_VEX_0F73_REG_7,
804 MOD_VEX_0FAE_REG_2,
805 MOD_VEX_0FAE_REG_3,
806 MOD_VEX_0FD7_PREFIX_2,
807 MOD_VEX_0FE7_PREFIX_2,
808 MOD_VEX_0FF0_PREFIX_3,
592a252b
L
809 MOD_VEX_0F381A_PREFIX_2,
810 MOD_VEX_0F382A_PREFIX_2,
811 MOD_VEX_0F382C_PREFIX_2,
812 MOD_VEX_0F382D_PREFIX_2,
813 MOD_VEX_0F382E_PREFIX_2,
6c30d220
L
814 MOD_VEX_0F382F_PREFIX_2,
815 MOD_VEX_0F385A_PREFIX_2,
816 MOD_VEX_0F388C_PREFIX_2,
817 MOD_VEX_0F388E_PREFIX_2,
43234a1e
L
818
819 MOD_EVEX_0F10_PREFIX_1,
820 MOD_EVEX_0F10_PREFIX_3,
821 MOD_EVEX_0F11_PREFIX_1,
822 MOD_EVEX_0F11_PREFIX_3,
823 MOD_EVEX_0F12_PREFIX_0,
824 MOD_EVEX_0F16_PREFIX_0,
825 MOD_EVEX_0F38C6_REG_1,
826 MOD_EVEX_0F38C6_REG_2,
827 MOD_EVEX_0F38C6_REG_5,
828 MOD_EVEX_0F38C6_REG_6,
829 MOD_EVEX_0F38C7_REG_1,
830 MOD_EVEX_0F38C7_REG_2,
831 MOD_EVEX_0F38C7_REG_5,
832 MOD_EVEX_0F38C7_REG_6
51e7da1b 833};
1ceb70f8 834
51e7da1b
L
835enum
836{
42164a71
L
837 RM_C6_REG_7 = 0,
838 RM_C7_REG_7,
839 RM_0F01_REG_0,
3873ba12
L
840 RM_0F01_REG_1,
841 RM_0F01_REG_2,
842 RM_0F01_REG_3,
843 RM_0F01_REG_7,
844 RM_0FAE_REG_5,
845 RM_0FAE_REG_6,
846 RM_0FAE_REG_7
51e7da1b 847};
1ceb70f8 848
51e7da1b
L
849enum
850{
851 PREFIX_90 = 0,
3873ba12
L
852 PREFIX_0F10,
853 PREFIX_0F11,
854 PREFIX_0F12,
855 PREFIX_0F16,
7e8b059b
L
856 PREFIX_0F1A,
857 PREFIX_0F1B,
3873ba12
L
858 PREFIX_0F2A,
859 PREFIX_0F2B,
860 PREFIX_0F2C,
861 PREFIX_0F2D,
862 PREFIX_0F2E,
863 PREFIX_0F2F,
864 PREFIX_0F51,
865 PREFIX_0F52,
866 PREFIX_0F53,
867 PREFIX_0F58,
868 PREFIX_0F59,
869 PREFIX_0F5A,
870 PREFIX_0F5B,
871 PREFIX_0F5C,
872 PREFIX_0F5D,
873 PREFIX_0F5E,
874 PREFIX_0F5F,
875 PREFIX_0F60,
876 PREFIX_0F61,
877 PREFIX_0F62,
878 PREFIX_0F6C,
879 PREFIX_0F6D,
880 PREFIX_0F6F,
881 PREFIX_0F70,
882 PREFIX_0F73_REG_3,
883 PREFIX_0F73_REG_7,
884 PREFIX_0F78,
885 PREFIX_0F79,
886 PREFIX_0F7C,
887 PREFIX_0F7D,
888 PREFIX_0F7E,
889 PREFIX_0F7F,
c7b8aa3a
L
890 PREFIX_0FAE_REG_0,
891 PREFIX_0FAE_REG_1,
892 PREFIX_0FAE_REG_2,
893 PREFIX_0FAE_REG_3,
963f3586 894 PREFIX_0FAE_REG_7,
3873ba12 895 PREFIX_0FB8,
f12dc422 896 PREFIX_0FBC,
3873ba12
L
897 PREFIX_0FBD,
898 PREFIX_0FC2,
899 PREFIX_0FC3,
900 PREFIX_0FC7_REG_6,
901 PREFIX_0FD0,
902 PREFIX_0FD6,
903 PREFIX_0FE6,
904 PREFIX_0FE7,
905 PREFIX_0FF0,
906 PREFIX_0FF7,
907 PREFIX_0F3810,
908 PREFIX_0F3814,
909 PREFIX_0F3815,
910 PREFIX_0F3817,
911 PREFIX_0F3820,
912 PREFIX_0F3821,
913 PREFIX_0F3822,
914 PREFIX_0F3823,
915 PREFIX_0F3824,
916 PREFIX_0F3825,
917 PREFIX_0F3828,
918 PREFIX_0F3829,
919 PREFIX_0F382A,
920 PREFIX_0F382B,
921 PREFIX_0F3830,
922 PREFIX_0F3831,
923 PREFIX_0F3832,
924 PREFIX_0F3833,
925 PREFIX_0F3834,
926 PREFIX_0F3835,
927 PREFIX_0F3837,
928 PREFIX_0F3838,
929 PREFIX_0F3839,
930 PREFIX_0F383A,
931 PREFIX_0F383B,
932 PREFIX_0F383C,
933 PREFIX_0F383D,
934 PREFIX_0F383E,
935 PREFIX_0F383F,
936 PREFIX_0F3840,
937 PREFIX_0F3841,
938 PREFIX_0F3880,
939 PREFIX_0F3881,
6c30d220 940 PREFIX_0F3882,
a0046408
L
941 PREFIX_0F38C8,
942 PREFIX_0F38C9,
943 PREFIX_0F38CA,
944 PREFIX_0F38CB,
945 PREFIX_0F38CC,
946 PREFIX_0F38CD,
3873ba12
L
947 PREFIX_0F38DB,
948 PREFIX_0F38DC,
949 PREFIX_0F38DD,
950 PREFIX_0F38DE,
951 PREFIX_0F38DF,
952 PREFIX_0F38F0,
953 PREFIX_0F38F1,
e2e1fcde 954 PREFIX_0F38F6,
3873ba12
L
955 PREFIX_0F3A08,
956 PREFIX_0F3A09,
957 PREFIX_0F3A0A,
958 PREFIX_0F3A0B,
959 PREFIX_0F3A0C,
960 PREFIX_0F3A0D,
961 PREFIX_0F3A0E,
962 PREFIX_0F3A14,
963 PREFIX_0F3A15,
964 PREFIX_0F3A16,
965 PREFIX_0F3A17,
966 PREFIX_0F3A20,
967 PREFIX_0F3A21,
968 PREFIX_0F3A22,
969 PREFIX_0F3A40,
970 PREFIX_0F3A41,
971 PREFIX_0F3A42,
972 PREFIX_0F3A44,
973 PREFIX_0F3A60,
974 PREFIX_0F3A61,
975 PREFIX_0F3A62,
976 PREFIX_0F3A63,
a0046408 977 PREFIX_0F3ACC,
3873ba12 978 PREFIX_0F3ADF,
592a252b
L
979 PREFIX_VEX_0F10,
980 PREFIX_VEX_0F11,
981 PREFIX_VEX_0F12,
982 PREFIX_VEX_0F16,
983 PREFIX_VEX_0F2A,
984 PREFIX_VEX_0F2C,
985 PREFIX_VEX_0F2D,
986 PREFIX_VEX_0F2E,
987 PREFIX_VEX_0F2F,
43234a1e
L
988 PREFIX_VEX_0F41,
989 PREFIX_VEX_0F42,
990 PREFIX_VEX_0F44,
991 PREFIX_VEX_0F45,
992 PREFIX_VEX_0F46,
993 PREFIX_VEX_0F47,
994 PREFIX_VEX_0F4B,
592a252b
L
995 PREFIX_VEX_0F51,
996 PREFIX_VEX_0F52,
997 PREFIX_VEX_0F53,
998 PREFIX_VEX_0F58,
999 PREFIX_VEX_0F59,
1000 PREFIX_VEX_0F5A,
1001 PREFIX_VEX_0F5B,
1002 PREFIX_VEX_0F5C,
1003 PREFIX_VEX_0F5D,
1004 PREFIX_VEX_0F5E,
1005 PREFIX_VEX_0F5F,
1006 PREFIX_VEX_0F60,
1007 PREFIX_VEX_0F61,
1008 PREFIX_VEX_0F62,
1009 PREFIX_VEX_0F63,
1010 PREFIX_VEX_0F64,
1011 PREFIX_VEX_0F65,
1012 PREFIX_VEX_0F66,
1013 PREFIX_VEX_0F67,
1014 PREFIX_VEX_0F68,
1015 PREFIX_VEX_0F69,
1016 PREFIX_VEX_0F6A,
1017 PREFIX_VEX_0F6B,
1018 PREFIX_VEX_0F6C,
1019 PREFIX_VEX_0F6D,
1020 PREFIX_VEX_0F6E,
1021 PREFIX_VEX_0F6F,
1022 PREFIX_VEX_0F70,
1023 PREFIX_VEX_0F71_REG_2,
1024 PREFIX_VEX_0F71_REG_4,
1025 PREFIX_VEX_0F71_REG_6,
1026 PREFIX_VEX_0F72_REG_2,
1027 PREFIX_VEX_0F72_REG_4,
1028 PREFIX_VEX_0F72_REG_6,
1029 PREFIX_VEX_0F73_REG_2,
1030 PREFIX_VEX_0F73_REG_3,
1031 PREFIX_VEX_0F73_REG_6,
1032 PREFIX_VEX_0F73_REG_7,
1033 PREFIX_VEX_0F74,
1034 PREFIX_VEX_0F75,
1035 PREFIX_VEX_0F76,
1036 PREFIX_VEX_0F77,
1037 PREFIX_VEX_0F7C,
1038 PREFIX_VEX_0F7D,
1039 PREFIX_VEX_0F7E,
1040 PREFIX_VEX_0F7F,
43234a1e
L
1041 PREFIX_VEX_0F90,
1042 PREFIX_VEX_0F91,
1043 PREFIX_VEX_0F92,
1044 PREFIX_VEX_0F93,
1045 PREFIX_VEX_0F98,
592a252b
L
1046 PREFIX_VEX_0FC2,
1047 PREFIX_VEX_0FC4,
1048 PREFIX_VEX_0FC5,
1049 PREFIX_VEX_0FD0,
1050 PREFIX_VEX_0FD1,
1051 PREFIX_VEX_0FD2,
1052 PREFIX_VEX_0FD3,
1053 PREFIX_VEX_0FD4,
1054 PREFIX_VEX_0FD5,
1055 PREFIX_VEX_0FD6,
1056 PREFIX_VEX_0FD7,
1057 PREFIX_VEX_0FD8,
1058 PREFIX_VEX_0FD9,
1059 PREFIX_VEX_0FDA,
1060 PREFIX_VEX_0FDB,
1061 PREFIX_VEX_0FDC,
1062 PREFIX_VEX_0FDD,
1063 PREFIX_VEX_0FDE,
1064 PREFIX_VEX_0FDF,
1065 PREFIX_VEX_0FE0,
1066 PREFIX_VEX_0FE1,
1067 PREFIX_VEX_0FE2,
1068 PREFIX_VEX_0FE3,
1069 PREFIX_VEX_0FE4,
1070 PREFIX_VEX_0FE5,
1071 PREFIX_VEX_0FE6,
1072 PREFIX_VEX_0FE7,
1073 PREFIX_VEX_0FE8,
1074 PREFIX_VEX_0FE9,
1075 PREFIX_VEX_0FEA,
1076 PREFIX_VEX_0FEB,
1077 PREFIX_VEX_0FEC,
1078 PREFIX_VEX_0FED,
1079 PREFIX_VEX_0FEE,
1080 PREFIX_VEX_0FEF,
1081 PREFIX_VEX_0FF0,
1082 PREFIX_VEX_0FF1,
1083 PREFIX_VEX_0FF2,
1084 PREFIX_VEX_0FF3,
1085 PREFIX_VEX_0FF4,
1086 PREFIX_VEX_0FF5,
1087 PREFIX_VEX_0FF6,
1088 PREFIX_VEX_0FF7,
1089 PREFIX_VEX_0FF8,
1090 PREFIX_VEX_0FF9,
1091 PREFIX_VEX_0FFA,
1092 PREFIX_VEX_0FFB,
1093 PREFIX_VEX_0FFC,
1094 PREFIX_VEX_0FFD,
1095 PREFIX_VEX_0FFE,
1096 PREFIX_VEX_0F3800,
1097 PREFIX_VEX_0F3801,
1098 PREFIX_VEX_0F3802,
1099 PREFIX_VEX_0F3803,
1100 PREFIX_VEX_0F3804,
1101 PREFIX_VEX_0F3805,
1102 PREFIX_VEX_0F3806,
1103 PREFIX_VEX_0F3807,
1104 PREFIX_VEX_0F3808,
1105 PREFIX_VEX_0F3809,
1106 PREFIX_VEX_0F380A,
1107 PREFIX_VEX_0F380B,
1108 PREFIX_VEX_0F380C,
1109 PREFIX_VEX_0F380D,
1110 PREFIX_VEX_0F380E,
1111 PREFIX_VEX_0F380F,
1112 PREFIX_VEX_0F3813,
6c30d220 1113 PREFIX_VEX_0F3816,
592a252b
L
1114 PREFIX_VEX_0F3817,
1115 PREFIX_VEX_0F3818,
1116 PREFIX_VEX_0F3819,
1117 PREFIX_VEX_0F381A,
1118 PREFIX_VEX_0F381C,
1119 PREFIX_VEX_0F381D,
1120 PREFIX_VEX_0F381E,
1121 PREFIX_VEX_0F3820,
1122 PREFIX_VEX_0F3821,
1123 PREFIX_VEX_0F3822,
1124 PREFIX_VEX_0F3823,
1125 PREFIX_VEX_0F3824,
1126 PREFIX_VEX_0F3825,
1127 PREFIX_VEX_0F3828,
1128 PREFIX_VEX_0F3829,
1129 PREFIX_VEX_0F382A,
1130 PREFIX_VEX_0F382B,
1131 PREFIX_VEX_0F382C,
1132 PREFIX_VEX_0F382D,
1133 PREFIX_VEX_0F382E,
1134 PREFIX_VEX_0F382F,
1135 PREFIX_VEX_0F3830,
1136 PREFIX_VEX_0F3831,
1137 PREFIX_VEX_0F3832,
1138 PREFIX_VEX_0F3833,
1139 PREFIX_VEX_0F3834,
1140 PREFIX_VEX_0F3835,
6c30d220 1141 PREFIX_VEX_0F3836,
592a252b
L
1142 PREFIX_VEX_0F3837,
1143 PREFIX_VEX_0F3838,
1144 PREFIX_VEX_0F3839,
1145 PREFIX_VEX_0F383A,
1146 PREFIX_VEX_0F383B,
1147 PREFIX_VEX_0F383C,
1148 PREFIX_VEX_0F383D,
1149 PREFIX_VEX_0F383E,
1150 PREFIX_VEX_0F383F,
1151 PREFIX_VEX_0F3840,
1152 PREFIX_VEX_0F3841,
6c30d220
L
1153 PREFIX_VEX_0F3845,
1154 PREFIX_VEX_0F3846,
1155 PREFIX_VEX_0F3847,
1156 PREFIX_VEX_0F3858,
1157 PREFIX_VEX_0F3859,
1158 PREFIX_VEX_0F385A,
1159 PREFIX_VEX_0F3878,
1160 PREFIX_VEX_0F3879,
1161 PREFIX_VEX_0F388C,
1162 PREFIX_VEX_0F388E,
1163 PREFIX_VEX_0F3890,
1164 PREFIX_VEX_0F3891,
1165 PREFIX_VEX_0F3892,
1166 PREFIX_VEX_0F3893,
592a252b
L
1167 PREFIX_VEX_0F3896,
1168 PREFIX_VEX_0F3897,
1169 PREFIX_VEX_0F3898,
1170 PREFIX_VEX_0F3899,
1171 PREFIX_VEX_0F389A,
1172 PREFIX_VEX_0F389B,
1173 PREFIX_VEX_0F389C,
1174 PREFIX_VEX_0F389D,
1175 PREFIX_VEX_0F389E,
1176 PREFIX_VEX_0F389F,
1177 PREFIX_VEX_0F38A6,
1178 PREFIX_VEX_0F38A7,
1179 PREFIX_VEX_0F38A8,
1180 PREFIX_VEX_0F38A9,
1181 PREFIX_VEX_0F38AA,
1182 PREFIX_VEX_0F38AB,
1183 PREFIX_VEX_0F38AC,
1184 PREFIX_VEX_0F38AD,
1185 PREFIX_VEX_0F38AE,
1186 PREFIX_VEX_0F38AF,
1187 PREFIX_VEX_0F38B6,
1188 PREFIX_VEX_0F38B7,
1189 PREFIX_VEX_0F38B8,
1190 PREFIX_VEX_0F38B9,
1191 PREFIX_VEX_0F38BA,
1192 PREFIX_VEX_0F38BB,
1193 PREFIX_VEX_0F38BC,
1194 PREFIX_VEX_0F38BD,
1195 PREFIX_VEX_0F38BE,
1196 PREFIX_VEX_0F38BF,
1197 PREFIX_VEX_0F38DB,
1198 PREFIX_VEX_0F38DC,
1199 PREFIX_VEX_0F38DD,
1200 PREFIX_VEX_0F38DE,
1201 PREFIX_VEX_0F38DF,
f12dc422
L
1202 PREFIX_VEX_0F38F2,
1203 PREFIX_VEX_0F38F3_REG_1,
1204 PREFIX_VEX_0F38F3_REG_2,
1205 PREFIX_VEX_0F38F3_REG_3,
6c30d220
L
1206 PREFIX_VEX_0F38F5,
1207 PREFIX_VEX_0F38F6,
f12dc422 1208 PREFIX_VEX_0F38F7,
6c30d220
L
1209 PREFIX_VEX_0F3A00,
1210 PREFIX_VEX_0F3A01,
1211 PREFIX_VEX_0F3A02,
592a252b
L
1212 PREFIX_VEX_0F3A04,
1213 PREFIX_VEX_0F3A05,
1214 PREFIX_VEX_0F3A06,
1215 PREFIX_VEX_0F3A08,
1216 PREFIX_VEX_0F3A09,
1217 PREFIX_VEX_0F3A0A,
1218 PREFIX_VEX_0F3A0B,
1219 PREFIX_VEX_0F3A0C,
1220 PREFIX_VEX_0F3A0D,
1221 PREFIX_VEX_0F3A0E,
1222 PREFIX_VEX_0F3A0F,
1223 PREFIX_VEX_0F3A14,
1224 PREFIX_VEX_0F3A15,
1225 PREFIX_VEX_0F3A16,
1226 PREFIX_VEX_0F3A17,
1227 PREFIX_VEX_0F3A18,
1228 PREFIX_VEX_0F3A19,
1229 PREFIX_VEX_0F3A1D,
1230 PREFIX_VEX_0F3A20,
1231 PREFIX_VEX_0F3A21,
1232 PREFIX_VEX_0F3A22,
43234a1e
L
1233 PREFIX_VEX_0F3A30,
1234 PREFIX_VEX_0F3A32,
6c30d220
L
1235 PREFIX_VEX_0F3A38,
1236 PREFIX_VEX_0F3A39,
592a252b
L
1237 PREFIX_VEX_0F3A40,
1238 PREFIX_VEX_0F3A41,
1239 PREFIX_VEX_0F3A42,
1240 PREFIX_VEX_0F3A44,
6c30d220 1241 PREFIX_VEX_0F3A46,
592a252b
L
1242 PREFIX_VEX_0F3A48,
1243 PREFIX_VEX_0F3A49,
1244 PREFIX_VEX_0F3A4A,
1245 PREFIX_VEX_0F3A4B,
1246 PREFIX_VEX_0F3A4C,
1247 PREFIX_VEX_0F3A5C,
1248 PREFIX_VEX_0F3A5D,
1249 PREFIX_VEX_0F3A5E,
1250 PREFIX_VEX_0F3A5F,
1251 PREFIX_VEX_0F3A60,
1252 PREFIX_VEX_0F3A61,
1253 PREFIX_VEX_0F3A62,
1254 PREFIX_VEX_0F3A63,
1255 PREFIX_VEX_0F3A68,
1256 PREFIX_VEX_0F3A69,
1257 PREFIX_VEX_0F3A6A,
1258 PREFIX_VEX_0F3A6B,
1259 PREFIX_VEX_0F3A6C,
1260 PREFIX_VEX_0F3A6D,
1261 PREFIX_VEX_0F3A6E,
1262 PREFIX_VEX_0F3A6F,
1263 PREFIX_VEX_0F3A78,
1264 PREFIX_VEX_0F3A79,
1265 PREFIX_VEX_0F3A7A,
1266 PREFIX_VEX_0F3A7B,
1267 PREFIX_VEX_0F3A7C,
1268 PREFIX_VEX_0F3A7D,
1269 PREFIX_VEX_0F3A7E,
1270 PREFIX_VEX_0F3A7F,
6c30d220 1271 PREFIX_VEX_0F3ADF,
43234a1e
L
1272 PREFIX_VEX_0F3AF0,
1273
1274 PREFIX_EVEX_0F10,
1275 PREFIX_EVEX_0F11,
1276 PREFIX_EVEX_0F12,
1277 PREFIX_EVEX_0F13,
1278 PREFIX_EVEX_0F14,
1279 PREFIX_EVEX_0F15,
1280 PREFIX_EVEX_0F16,
1281 PREFIX_EVEX_0F17,
1282 PREFIX_EVEX_0F28,
1283 PREFIX_EVEX_0F29,
1284 PREFIX_EVEX_0F2A,
1285 PREFIX_EVEX_0F2B,
1286 PREFIX_EVEX_0F2C,
1287 PREFIX_EVEX_0F2D,
1288 PREFIX_EVEX_0F2E,
1289 PREFIX_EVEX_0F2F,
1290 PREFIX_EVEX_0F51,
1291 PREFIX_EVEX_0F58,
1292 PREFIX_EVEX_0F59,
1293 PREFIX_EVEX_0F5A,
1294 PREFIX_EVEX_0F5B,
1295 PREFIX_EVEX_0F5C,
1296 PREFIX_EVEX_0F5D,
1297 PREFIX_EVEX_0F5E,
1298 PREFIX_EVEX_0F5F,
1299 PREFIX_EVEX_0F62,
1300 PREFIX_EVEX_0F66,
1301 PREFIX_EVEX_0F6A,
1302 PREFIX_EVEX_0F6C,
1303 PREFIX_EVEX_0F6D,
1304 PREFIX_EVEX_0F6E,
1305 PREFIX_EVEX_0F6F,
1306 PREFIX_EVEX_0F70,
1307 PREFIX_EVEX_0F72_REG_0,
1308 PREFIX_EVEX_0F72_REG_1,
1309 PREFIX_EVEX_0F72_REG_2,
1310 PREFIX_EVEX_0F72_REG_4,
1311 PREFIX_EVEX_0F72_REG_6,
1312 PREFIX_EVEX_0F73_REG_2,
1313 PREFIX_EVEX_0F73_REG_6,
1314 PREFIX_EVEX_0F76,
1315 PREFIX_EVEX_0F78,
1316 PREFIX_EVEX_0F79,
1317 PREFIX_EVEX_0F7A,
1318 PREFIX_EVEX_0F7B,
1319 PREFIX_EVEX_0F7E,
1320 PREFIX_EVEX_0F7F,
1321 PREFIX_EVEX_0FC2,
1322 PREFIX_EVEX_0FC6,
1323 PREFIX_EVEX_0FD2,
1324 PREFIX_EVEX_0FD3,
1325 PREFIX_EVEX_0FD4,
1326 PREFIX_EVEX_0FD6,
1327 PREFIX_EVEX_0FDB,
1328 PREFIX_EVEX_0FDF,
1329 PREFIX_EVEX_0FE2,
1330 PREFIX_EVEX_0FE6,
1331 PREFIX_EVEX_0FE7,
1332 PREFIX_EVEX_0FEB,
1333 PREFIX_EVEX_0FEF,
1334 PREFIX_EVEX_0FF2,
1335 PREFIX_EVEX_0FF3,
1336 PREFIX_EVEX_0FF4,
1337 PREFIX_EVEX_0FFA,
1338 PREFIX_EVEX_0FFB,
1339 PREFIX_EVEX_0FFE,
1340 PREFIX_EVEX_0F380C,
1341 PREFIX_EVEX_0F380D,
1342 PREFIX_EVEX_0F3811,
1343 PREFIX_EVEX_0F3812,
1344 PREFIX_EVEX_0F3813,
1345 PREFIX_EVEX_0F3814,
1346 PREFIX_EVEX_0F3815,
1347 PREFIX_EVEX_0F3816,
1348 PREFIX_EVEX_0F3818,
1349 PREFIX_EVEX_0F3819,
1350 PREFIX_EVEX_0F381A,
1351 PREFIX_EVEX_0F381B,
1352 PREFIX_EVEX_0F381E,
1353 PREFIX_EVEX_0F381F,
1354 PREFIX_EVEX_0F3821,
1355 PREFIX_EVEX_0F3822,
1356 PREFIX_EVEX_0F3823,
1357 PREFIX_EVEX_0F3824,
1358 PREFIX_EVEX_0F3825,
1359 PREFIX_EVEX_0F3827,
1360 PREFIX_EVEX_0F3828,
1361 PREFIX_EVEX_0F3829,
1362 PREFIX_EVEX_0F382A,
1363 PREFIX_EVEX_0F382C,
1364 PREFIX_EVEX_0F382D,
1365 PREFIX_EVEX_0F3831,
1366 PREFIX_EVEX_0F3832,
1367 PREFIX_EVEX_0F3833,
1368 PREFIX_EVEX_0F3834,
1369 PREFIX_EVEX_0F3835,
1370 PREFIX_EVEX_0F3836,
1371 PREFIX_EVEX_0F3837,
1372 PREFIX_EVEX_0F3839,
1373 PREFIX_EVEX_0F383A,
1374 PREFIX_EVEX_0F383B,
1375 PREFIX_EVEX_0F383D,
1376 PREFIX_EVEX_0F383F,
1377 PREFIX_EVEX_0F3840,
1378 PREFIX_EVEX_0F3842,
1379 PREFIX_EVEX_0F3843,
1380 PREFIX_EVEX_0F3844,
1381 PREFIX_EVEX_0F3845,
1382 PREFIX_EVEX_0F3846,
1383 PREFIX_EVEX_0F3847,
1384 PREFIX_EVEX_0F384C,
1385 PREFIX_EVEX_0F384D,
1386 PREFIX_EVEX_0F384E,
1387 PREFIX_EVEX_0F384F,
1388 PREFIX_EVEX_0F3858,
1389 PREFIX_EVEX_0F3859,
1390 PREFIX_EVEX_0F385A,
1391 PREFIX_EVEX_0F385B,
1392 PREFIX_EVEX_0F3864,
1393 PREFIX_EVEX_0F3865,
1394 PREFIX_EVEX_0F3876,
1395 PREFIX_EVEX_0F3877,
1396 PREFIX_EVEX_0F387C,
1397 PREFIX_EVEX_0F387E,
1398 PREFIX_EVEX_0F387F,
1399 PREFIX_EVEX_0F3888,
1400 PREFIX_EVEX_0F3889,
1401 PREFIX_EVEX_0F388A,
1402 PREFIX_EVEX_0F388B,
1403 PREFIX_EVEX_0F3890,
1404 PREFIX_EVEX_0F3891,
1405 PREFIX_EVEX_0F3892,
1406 PREFIX_EVEX_0F3893,
1407 PREFIX_EVEX_0F3896,
1408 PREFIX_EVEX_0F3897,
1409 PREFIX_EVEX_0F3898,
1410 PREFIX_EVEX_0F3899,
1411 PREFIX_EVEX_0F389A,
1412 PREFIX_EVEX_0F389B,
1413 PREFIX_EVEX_0F389C,
1414 PREFIX_EVEX_0F389D,
1415 PREFIX_EVEX_0F389E,
1416 PREFIX_EVEX_0F389F,
1417 PREFIX_EVEX_0F38A0,
1418 PREFIX_EVEX_0F38A1,
1419 PREFIX_EVEX_0F38A2,
1420 PREFIX_EVEX_0F38A3,
1421 PREFIX_EVEX_0F38A6,
1422 PREFIX_EVEX_0F38A7,
1423 PREFIX_EVEX_0F38A8,
1424 PREFIX_EVEX_0F38A9,
1425 PREFIX_EVEX_0F38AA,
1426 PREFIX_EVEX_0F38AB,
1427 PREFIX_EVEX_0F38AC,
1428 PREFIX_EVEX_0F38AD,
1429 PREFIX_EVEX_0F38AE,
1430 PREFIX_EVEX_0F38AF,
1431 PREFIX_EVEX_0F38B6,
1432 PREFIX_EVEX_0F38B7,
1433 PREFIX_EVEX_0F38B8,
1434 PREFIX_EVEX_0F38B9,
1435 PREFIX_EVEX_0F38BA,
1436 PREFIX_EVEX_0F38BB,
1437 PREFIX_EVEX_0F38BC,
1438 PREFIX_EVEX_0F38BD,
1439 PREFIX_EVEX_0F38BE,
1440 PREFIX_EVEX_0F38BF,
1441 PREFIX_EVEX_0F38C4,
1442 PREFIX_EVEX_0F38C6_REG_1,
1443 PREFIX_EVEX_0F38C6_REG_2,
1444 PREFIX_EVEX_0F38C6_REG_5,
1445 PREFIX_EVEX_0F38C6_REG_6,
1446 PREFIX_EVEX_0F38C7_REG_1,
1447 PREFIX_EVEX_0F38C7_REG_2,
1448 PREFIX_EVEX_0F38C7_REG_5,
1449 PREFIX_EVEX_0F38C7_REG_6,
1450 PREFIX_EVEX_0F38C8,
1451 PREFIX_EVEX_0F38CA,
1452 PREFIX_EVEX_0F38CB,
1453 PREFIX_EVEX_0F38CC,
1454 PREFIX_EVEX_0F38CD,
1455
1456 PREFIX_EVEX_0F3A00,
1457 PREFIX_EVEX_0F3A01,
1458 PREFIX_EVEX_0F3A03,
1459 PREFIX_EVEX_0F3A04,
1460 PREFIX_EVEX_0F3A05,
1461 PREFIX_EVEX_0F3A08,
1462 PREFIX_EVEX_0F3A09,
1463 PREFIX_EVEX_0F3A0A,
1464 PREFIX_EVEX_0F3A0B,
1465 PREFIX_EVEX_0F3A17,
1466 PREFIX_EVEX_0F3A18,
1467 PREFIX_EVEX_0F3A19,
1468 PREFIX_EVEX_0F3A1A,
1469 PREFIX_EVEX_0F3A1B,
1470 PREFIX_EVEX_0F3A1D,
1471 PREFIX_EVEX_0F3A1E,
1472 PREFIX_EVEX_0F3A1F,
1473 PREFIX_EVEX_0F3A21,
1474 PREFIX_EVEX_0F3A23,
1475 PREFIX_EVEX_0F3A25,
1476 PREFIX_EVEX_0F3A26,
1477 PREFIX_EVEX_0F3A27,
1478 PREFIX_EVEX_0F3A38,
1479 PREFIX_EVEX_0F3A39,
1480 PREFIX_EVEX_0F3A3A,
1481 PREFIX_EVEX_0F3A3B,
43234a1e
L
1482 PREFIX_EVEX_0F3A43,
1483 PREFIX_EVEX_0F3A54,
1484 PREFIX_EVEX_0F3A55,
51e7da1b 1485};
4e7d34a6 1486
51e7da1b
L
1487enum
1488{
1489 X86_64_06 = 0,
3873ba12
L
1490 X86_64_07,
1491 X86_64_0D,
1492 X86_64_16,
1493 X86_64_17,
1494 X86_64_1E,
1495 X86_64_1F,
1496 X86_64_27,
1497 X86_64_2F,
1498 X86_64_37,
1499 X86_64_3F,
1500 X86_64_60,
1501 X86_64_61,
1502 X86_64_62,
1503 X86_64_63,
1504 X86_64_6D,
1505 X86_64_6F,
1506 X86_64_9A,
1507 X86_64_C4,
1508 X86_64_C5,
1509 X86_64_CE,
1510 X86_64_D4,
1511 X86_64_D5,
1512 X86_64_EA,
1513 X86_64_0F01_REG_0,
1514 X86_64_0F01_REG_1,
1515 X86_64_0F01_REG_2,
1516 X86_64_0F01_REG_3
51e7da1b 1517};
4e7d34a6 1518
51e7da1b
L
1519enum
1520{
1521 THREE_BYTE_0F38 = 0,
3873ba12
L
1522 THREE_BYTE_0F3A,
1523 THREE_BYTE_0F7A
51e7da1b 1524};
4e7d34a6 1525
f88c9eb0
SP
1526enum
1527{
5dd85c99
SP
1528 XOP_08 = 0,
1529 XOP_09,
f88c9eb0
SP
1530 XOP_0A
1531};
1532
51e7da1b
L
1533enum
1534{
1535 VEX_0F = 0,
3873ba12
L
1536 VEX_0F38,
1537 VEX_0F3A
51e7da1b 1538};
c0f3af97 1539
43234a1e
L
1540enum
1541{
1542 EVEX_0F = 0,
1543 EVEX_0F38,
1544 EVEX_0F3A
1545};
1546
51e7da1b
L
1547enum
1548{
592a252b
L
1549 VEX_LEN_0F10_P_1 = 0,
1550 VEX_LEN_0F10_P_3,
1551 VEX_LEN_0F11_P_1,
1552 VEX_LEN_0F11_P_3,
1553 VEX_LEN_0F12_P_0_M_0,
1554 VEX_LEN_0F12_P_0_M_1,
1555 VEX_LEN_0F12_P_2,
1556 VEX_LEN_0F13_M_0,
1557 VEX_LEN_0F16_P_0_M_0,
1558 VEX_LEN_0F16_P_0_M_1,
1559 VEX_LEN_0F16_P_2,
1560 VEX_LEN_0F17_M_0,
1561 VEX_LEN_0F2A_P_1,
1562 VEX_LEN_0F2A_P_3,
1563 VEX_LEN_0F2C_P_1,
1564 VEX_LEN_0F2C_P_3,
1565 VEX_LEN_0F2D_P_1,
1566 VEX_LEN_0F2D_P_3,
1567 VEX_LEN_0F2E_P_0,
1568 VEX_LEN_0F2E_P_2,
1569 VEX_LEN_0F2F_P_0,
1570 VEX_LEN_0F2F_P_2,
43234a1e
L
1571 VEX_LEN_0F41_P_0,
1572 VEX_LEN_0F42_P_0,
1573 VEX_LEN_0F44_P_0,
1574 VEX_LEN_0F45_P_0,
1575 VEX_LEN_0F46_P_0,
1576 VEX_LEN_0F47_P_0,
1577 VEX_LEN_0F4B_P_2,
592a252b
L
1578 VEX_LEN_0F51_P_1,
1579 VEX_LEN_0F51_P_3,
1580 VEX_LEN_0F52_P_1,
1581 VEX_LEN_0F53_P_1,
1582 VEX_LEN_0F58_P_1,
1583 VEX_LEN_0F58_P_3,
1584 VEX_LEN_0F59_P_1,
1585 VEX_LEN_0F59_P_3,
1586 VEX_LEN_0F5A_P_1,
1587 VEX_LEN_0F5A_P_3,
1588 VEX_LEN_0F5C_P_1,
1589 VEX_LEN_0F5C_P_3,
1590 VEX_LEN_0F5D_P_1,
1591 VEX_LEN_0F5D_P_3,
1592 VEX_LEN_0F5E_P_1,
1593 VEX_LEN_0F5E_P_3,
1594 VEX_LEN_0F5F_P_1,
1595 VEX_LEN_0F5F_P_3,
592a252b 1596 VEX_LEN_0F6E_P_2,
592a252b
L
1597 VEX_LEN_0F7E_P_1,
1598 VEX_LEN_0F7E_P_2,
43234a1e
L
1599 VEX_LEN_0F90_P_0,
1600 VEX_LEN_0F91_P_0,
1601 VEX_LEN_0F92_P_0,
1602 VEX_LEN_0F93_P_0,
1603 VEX_LEN_0F98_P_0,
592a252b
L
1604 VEX_LEN_0FAE_R_2_M_0,
1605 VEX_LEN_0FAE_R_3_M_0,
1606 VEX_LEN_0FC2_P_1,
1607 VEX_LEN_0FC2_P_3,
1608 VEX_LEN_0FC4_P_2,
1609 VEX_LEN_0FC5_P_2,
592a252b 1610 VEX_LEN_0FD6_P_2,
592a252b 1611 VEX_LEN_0FF7_P_2,
6c30d220
L
1612 VEX_LEN_0F3816_P_2,
1613 VEX_LEN_0F3819_P_2,
592a252b 1614 VEX_LEN_0F381A_P_2_M_0,
6c30d220 1615 VEX_LEN_0F3836_P_2,
592a252b 1616 VEX_LEN_0F3841_P_2,
6c30d220 1617 VEX_LEN_0F385A_P_2_M_0,
592a252b
L
1618 VEX_LEN_0F38DB_P_2,
1619 VEX_LEN_0F38DC_P_2,
1620 VEX_LEN_0F38DD_P_2,
1621 VEX_LEN_0F38DE_P_2,
1622 VEX_LEN_0F38DF_P_2,
f12dc422
L
1623 VEX_LEN_0F38F2_P_0,
1624 VEX_LEN_0F38F3_R_1_P_0,
1625 VEX_LEN_0F38F3_R_2_P_0,
1626 VEX_LEN_0F38F3_R_3_P_0,
6c30d220
L
1627 VEX_LEN_0F38F5_P_0,
1628 VEX_LEN_0F38F5_P_1,
1629 VEX_LEN_0F38F5_P_3,
1630 VEX_LEN_0F38F6_P_3,
f12dc422 1631 VEX_LEN_0F38F7_P_0,
6c30d220
L
1632 VEX_LEN_0F38F7_P_1,
1633 VEX_LEN_0F38F7_P_2,
1634 VEX_LEN_0F38F7_P_3,
1635 VEX_LEN_0F3A00_P_2,
1636 VEX_LEN_0F3A01_P_2,
592a252b
L
1637 VEX_LEN_0F3A06_P_2,
1638 VEX_LEN_0F3A0A_P_2,
1639 VEX_LEN_0F3A0B_P_2,
592a252b
L
1640 VEX_LEN_0F3A14_P_2,
1641 VEX_LEN_0F3A15_P_2,
1642 VEX_LEN_0F3A16_P_2,
1643 VEX_LEN_0F3A17_P_2,
1644 VEX_LEN_0F3A18_P_2,
1645 VEX_LEN_0F3A19_P_2,
1646 VEX_LEN_0F3A20_P_2,
1647 VEX_LEN_0F3A21_P_2,
1648 VEX_LEN_0F3A22_P_2,
43234a1e
L
1649 VEX_LEN_0F3A30_P_2,
1650 VEX_LEN_0F3A32_P_2,
6c30d220
L
1651 VEX_LEN_0F3A38_P_2,
1652 VEX_LEN_0F3A39_P_2,
592a252b 1653 VEX_LEN_0F3A41_P_2,
592a252b 1654 VEX_LEN_0F3A44_P_2,
6c30d220 1655 VEX_LEN_0F3A46_P_2,
592a252b
L
1656 VEX_LEN_0F3A60_P_2,
1657 VEX_LEN_0F3A61_P_2,
1658 VEX_LEN_0F3A62_P_2,
1659 VEX_LEN_0F3A63_P_2,
1660 VEX_LEN_0F3A6A_P_2,
1661 VEX_LEN_0F3A6B_P_2,
1662 VEX_LEN_0F3A6E_P_2,
1663 VEX_LEN_0F3A6F_P_2,
1664 VEX_LEN_0F3A7A_P_2,
1665 VEX_LEN_0F3A7B_P_2,
1666 VEX_LEN_0F3A7E_P_2,
1667 VEX_LEN_0F3A7F_P_2,
1668 VEX_LEN_0F3ADF_P_2,
6c30d220 1669 VEX_LEN_0F3AF0_P_3,
ff688e1f
L
1670 VEX_LEN_0FXOP_08_CC,
1671 VEX_LEN_0FXOP_08_CD,
1672 VEX_LEN_0FXOP_08_CE,
1673 VEX_LEN_0FXOP_08_CF,
1674 VEX_LEN_0FXOP_08_EC,
1675 VEX_LEN_0FXOP_08_ED,
1676 VEX_LEN_0FXOP_08_EE,
1677 VEX_LEN_0FXOP_08_EF,
592a252b
L
1678 VEX_LEN_0FXOP_09_80,
1679 VEX_LEN_0FXOP_09_81
51e7da1b 1680};
c0f3af97 1681
9e30b8e0
L
1682enum
1683{
592a252b
L
1684 VEX_W_0F10_P_0 = 0,
1685 VEX_W_0F10_P_1,
1686 VEX_W_0F10_P_2,
1687 VEX_W_0F10_P_3,
1688 VEX_W_0F11_P_0,
1689 VEX_W_0F11_P_1,
1690 VEX_W_0F11_P_2,
1691 VEX_W_0F11_P_3,
1692 VEX_W_0F12_P_0_M_0,
1693 VEX_W_0F12_P_0_M_1,
1694 VEX_W_0F12_P_1,
1695 VEX_W_0F12_P_2,
1696 VEX_W_0F12_P_3,
1697 VEX_W_0F13_M_0,
1698 VEX_W_0F14,
1699 VEX_W_0F15,
1700 VEX_W_0F16_P_0_M_0,
1701 VEX_W_0F16_P_0_M_1,
1702 VEX_W_0F16_P_1,
1703 VEX_W_0F16_P_2,
1704 VEX_W_0F17_M_0,
1705 VEX_W_0F28,
1706 VEX_W_0F29,
1707 VEX_W_0F2B_M_0,
1708 VEX_W_0F2E_P_0,
1709 VEX_W_0F2E_P_2,
1710 VEX_W_0F2F_P_0,
1711 VEX_W_0F2F_P_2,
43234a1e
L
1712 VEX_W_0F41_P_0_LEN_1,
1713 VEX_W_0F42_P_0_LEN_1,
1714 VEX_W_0F44_P_0_LEN_0,
1715 VEX_W_0F45_P_0_LEN_1,
1716 VEX_W_0F46_P_0_LEN_1,
1717 VEX_W_0F47_P_0_LEN_1,
1718 VEX_W_0F4B_P_2_LEN_1,
592a252b
L
1719 VEX_W_0F50_M_0,
1720 VEX_W_0F51_P_0,
1721 VEX_W_0F51_P_1,
1722 VEX_W_0F51_P_2,
1723 VEX_W_0F51_P_3,
1724 VEX_W_0F52_P_0,
1725 VEX_W_0F52_P_1,
1726 VEX_W_0F53_P_0,
1727 VEX_W_0F53_P_1,
1728 VEX_W_0F58_P_0,
1729 VEX_W_0F58_P_1,
1730 VEX_W_0F58_P_2,
1731 VEX_W_0F58_P_3,
1732 VEX_W_0F59_P_0,
1733 VEX_W_0F59_P_1,
1734 VEX_W_0F59_P_2,
1735 VEX_W_0F59_P_3,
1736 VEX_W_0F5A_P_0,
1737 VEX_W_0F5A_P_1,
1738 VEX_W_0F5A_P_3,
1739 VEX_W_0F5B_P_0,
1740 VEX_W_0F5B_P_1,
1741 VEX_W_0F5B_P_2,
1742 VEX_W_0F5C_P_0,
1743 VEX_W_0F5C_P_1,
1744 VEX_W_0F5C_P_2,
1745 VEX_W_0F5C_P_3,
1746 VEX_W_0F5D_P_0,
1747 VEX_W_0F5D_P_1,
1748 VEX_W_0F5D_P_2,
1749 VEX_W_0F5D_P_3,
1750 VEX_W_0F5E_P_0,
1751 VEX_W_0F5E_P_1,
1752 VEX_W_0F5E_P_2,
1753 VEX_W_0F5E_P_3,
1754 VEX_W_0F5F_P_0,
1755 VEX_W_0F5F_P_1,
1756 VEX_W_0F5F_P_2,
1757 VEX_W_0F5F_P_3,
1758 VEX_W_0F60_P_2,
1759 VEX_W_0F61_P_2,
1760 VEX_W_0F62_P_2,
1761 VEX_W_0F63_P_2,
1762 VEX_W_0F64_P_2,
1763 VEX_W_0F65_P_2,
1764 VEX_W_0F66_P_2,
1765 VEX_W_0F67_P_2,
1766 VEX_W_0F68_P_2,
1767 VEX_W_0F69_P_2,
1768 VEX_W_0F6A_P_2,
1769 VEX_W_0F6B_P_2,
1770 VEX_W_0F6C_P_2,
1771 VEX_W_0F6D_P_2,
1772 VEX_W_0F6F_P_1,
1773 VEX_W_0F6F_P_2,
1774 VEX_W_0F70_P_1,
1775 VEX_W_0F70_P_2,
1776 VEX_W_0F70_P_3,
1777 VEX_W_0F71_R_2_P_2,
1778 VEX_W_0F71_R_4_P_2,
1779 VEX_W_0F71_R_6_P_2,
1780 VEX_W_0F72_R_2_P_2,
1781 VEX_W_0F72_R_4_P_2,
1782 VEX_W_0F72_R_6_P_2,
1783 VEX_W_0F73_R_2_P_2,
1784 VEX_W_0F73_R_3_P_2,
1785 VEX_W_0F73_R_6_P_2,
1786 VEX_W_0F73_R_7_P_2,
1787 VEX_W_0F74_P_2,
1788 VEX_W_0F75_P_2,
1789 VEX_W_0F76_P_2,
1790 VEX_W_0F77_P_0,
1791 VEX_W_0F7C_P_2,
1792 VEX_W_0F7C_P_3,
1793 VEX_W_0F7D_P_2,
1794 VEX_W_0F7D_P_3,
1795 VEX_W_0F7E_P_1,
1796 VEX_W_0F7F_P_1,
1797 VEX_W_0F7F_P_2,
43234a1e
L
1798 VEX_W_0F90_P_0_LEN_0,
1799 VEX_W_0F91_P_0_LEN_0,
1800 VEX_W_0F92_P_0_LEN_0,
1801 VEX_W_0F93_P_0_LEN_0,
1802 VEX_W_0F98_P_0_LEN_0,
592a252b
L
1803 VEX_W_0FAE_R_2_M_0,
1804 VEX_W_0FAE_R_3_M_0,
1805 VEX_W_0FC2_P_0,
1806 VEX_W_0FC2_P_1,
1807 VEX_W_0FC2_P_2,
1808 VEX_W_0FC2_P_3,
1809 VEX_W_0FC4_P_2,
1810 VEX_W_0FC5_P_2,
1811 VEX_W_0FD0_P_2,
1812 VEX_W_0FD0_P_3,
1813 VEX_W_0FD1_P_2,
1814 VEX_W_0FD2_P_2,
1815 VEX_W_0FD3_P_2,
1816 VEX_W_0FD4_P_2,
1817 VEX_W_0FD5_P_2,
1818 VEX_W_0FD6_P_2,
1819 VEX_W_0FD7_P_2_M_1,
1820 VEX_W_0FD8_P_2,
1821 VEX_W_0FD9_P_2,
1822 VEX_W_0FDA_P_2,
1823 VEX_W_0FDB_P_2,
1824 VEX_W_0FDC_P_2,
1825 VEX_W_0FDD_P_2,
1826 VEX_W_0FDE_P_2,
1827 VEX_W_0FDF_P_2,
1828 VEX_W_0FE0_P_2,
1829 VEX_W_0FE1_P_2,
1830 VEX_W_0FE2_P_2,
1831 VEX_W_0FE3_P_2,
1832 VEX_W_0FE4_P_2,
1833 VEX_W_0FE5_P_2,
1834 VEX_W_0FE6_P_1,
1835 VEX_W_0FE6_P_2,
1836 VEX_W_0FE6_P_3,
1837 VEX_W_0FE7_P_2_M_0,
1838 VEX_W_0FE8_P_2,
1839 VEX_W_0FE9_P_2,
1840 VEX_W_0FEA_P_2,
1841 VEX_W_0FEB_P_2,
1842 VEX_W_0FEC_P_2,
1843 VEX_W_0FED_P_2,
1844 VEX_W_0FEE_P_2,
1845 VEX_W_0FEF_P_2,
1846 VEX_W_0FF0_P_3_M_0,
1847 VEX_W_0FF1_P_2,
1848 VEX_W_0FF2_P_2,
1849 VEX_W_0FF3_P_2,
1850 VEX_W_0FF4_P_2,
1851 VEX_W_0FF5_P_2,
1852 VEX_W_0FF6_P_2,
1853 VEX_W_0FF7_P_2,
1854 VEX_W_0FF8_P_2,
1855 VEX_W_0FF9_P_2,
1856 VEX_W_0FFA_P_2,
1857 VEX_W_0FFB_P_2,
1858 VEX_W_0FFC_P_2,
1859 VEX_W_0FFD_P_2,
1860 VEX_W_0FFE_P_2,
1861 VEX_W_0F3800_P_2,
1862 VEX_W_0F3801_P_2,
1863 VEX_W_0F3802_P_2,
1864 VEX_W_0F3803_P_2,
1865 VEX_W_0F3804_P_2,
1866 VEX_W_0F3805_P_2,
1867 VEX_W_0F3806_P_2,
1868 VEX_W_0F3807_P_2,
1869 VEX_W_0F3808_P_2,
1870 VEX_W_0F3809_P_2,
1871 VEX_W_0F380A_P_2,
1872 VEX_W_0F380B_P_2,
1873 VEX_W_0F380C_P_2,
1874 VEX_W_0F380D_P_2,
1875 VEX_W_0F380E_P_2,
1876 VEX_W_0F380F_P_2,
6c30d220 1877 VEX_W_0F3816_P_2,
592a252b 1878 VEX_W_0F3817_P_2,
6c30d220
L
1879 VEX_W_0F3818_P_2,
1880 VEX_W_0F3819_P_2,
592a252b
L
1881 VEX_W_0F381A_P_2_M_0,
1882 VEX_W_0F381C_P_2,
1883 VEX_W_0F381D_P_2,
1884 VEX_W_0F381E_P_2,
1885 VEX_W_0F3820_P_2,
1886 VEX_W_0F3821_P_2,
1887 VEX_W_0F3822_P_2,
1888 VEX_W_0F3823_P_2,
1889 VEX_W_0F3824_P_2,
1890 VEX_W_0F3825_P_2,
1891 VEX_W_0F3828_P_2,
1892 VEX_W_0F3829_P_2,
1893 VEX_W_0F382A_P_2_M_0,
1894 VEX_W_0F382B_P_2,
1895 VEX_W_0F382C_P_2_M_0,
1896 VEX_W_0F382D_P_2_M_0,
1897 VEX_W_0F382E_P_2_M_0,
1898 VEX_W_0F382F_P_2_M_0,
1899 VEX_W_0F3830_P_2,
1900 VEX_W_0F3831_P_2,
1901 VEX_W_0F3832_P_2,
1902 VEX_W_0F3833_P_2,
1903 VEX_W_0F3834_P_2,
1904 VEX_W_0F3835_P_2,
6c30d220 1905 VEX_W_0F3836_P_2,
592a252b
L
1906 VEX_W_0F3837_P_2,
1907 VEX_W_0F3838_P_2,
1908 VEX_W_0F3839_P_2,
1909 VEX_W_0F383A_P_2,
1910 VEX_W_0F383B_P_2,
1911 VEX_W_0F383C_P_2,
1912 VEX_W_0F383D_P_2,
1913 VEX_W_0F383E_P_2,
1914 VEX_W_0F383F_P_2,
1915 VEX_W_0F3840_P_2,
1916 VEX_W_0F3841_P_2,
6c30d220
L
1917 VEX_W_0F3846_P_2,
1918 VEX_W_0F3858_P_2,
1919 VEX_W_0F3859_P_2,
1920 VEX_W_0F385A_P_2_M_0,
1921 VEX_W_0F3878_P_2,
1922 VEX_W_0F3879_P_2,
592a252b
L
1923 VEX_W_0F38DB_P_2,
1924 VEX_W_0F38DC_P_2,
1925 VEX_W_0F38DD_P_2,
1926 VEX_W_0F38DE_P_2,
1927 VEX_W_0F38DF_P_2,
6c30d220
L
1928 VEX_W_0F3A00_P_2,
1929 VEX_W_0F3A01_P_2,
1930 VEX_W_0F3A02_P_2,
592a252b
L
1931 VEX_W_0F3A04_P_2,
1932 VEX_W_0F3A05_P_2,
1933 VEX_W_0F3A06_P_2,
1934 VEX_W_0F3A08_P_2,
1935 VEX_W_0F3A09_P_2,
1936 VEX_W_0F3A0A_P_2,
1937 VEX_W_0F3A0B_P_2,
1938 VEX_W_0F3A0C_P_2,
1939 VEX_W_0F3A0D_P_2,
1940 VEX_W_0F3A0E_P_2,
1941 VEX_W_0F3A0F_P_2,
1942 VEX_W_0F3A14_P_2,
1943 VEX_W_0F3A15_P_2,
1944 VEX_W_0F3A18_P_2,
1945 VEX_W_0F3A19_P_2,
1946 VEX_W_0F3A20_P_2,
1947 VEX_W_0F3A21_P_2,
43234a1e
L
1948 VEX_W_0F3A30_P_2_LEN_0,
1949 VEX_W_0F3A32_P_2_LEN_0,
6c30d220
L
1950 VEX_W_0F3A38_P_2,
1951 VEX_W_0F3A39_P_2,
592a252b
L
1952 VEX_W_0F3A40_P_2,
1953 VEX_W_0F3A41_P_2,
1954 VEX_W_0F3A42_P_2,
1955 VEX_W_0F3A44_P_2,
6c30d220 1956 VEX_W_0F3A46_P_2,
592a252b
L
1957 VEX_W_0F3A48_P_2,
1958 VEX_W_0F3A49_P_2,
1959 VEX_W_0F3A4A_P_2,
1960 VEX_W_0F3A4B_P_2,
1961 VEX_W_0F3A4C_P_2,
1962 VEX_W_0F3A60_P_2,
1963 VEX_W_0F3A61_P_2,
1964 VEX_W_0F3A62_P_2,
1965 VEX_W_0F3A63_P_2,
43234a1e
L
1966 VEX_W_0F3ADF_P_2,
1967
1968 EVEX_W_0F10_P_0,
1969 EVEX_W_0F10_P_1_M_0,
1970 EVEX_W_0F10_P_1_M_1,
1971 EVEX_W_0F10_P_2,
1972 EVEX_W_0F10_P_3_M_0,
1973 EVEX_W_0F10_P_3_M_1,
1974 EVEX_W_0F11_P_0,
1975 EVEX_W_0F11_P_1_M_0,
1976 EVEX_W_0F11_P_1_M_1,
1977 EVEX_W_0F11_P_2,
1978 EVEX_W_0F11_P_3_M_0,
1979 EVEX_W_0F11_P_3_M_1,
1980 EVEX_W_0F12_P_0_M_0,
1981 EVEX_W_0F12_P_0_M_1,
1982 EVEX_W_0F12_P_1,
1983 EVEX_W_0F12_P_2,
1984 EVEX_W_0F12_P_3,
1985 EVEX_W_0F13_P_0,
1986 EVEX_W_0F13_P_2,
1987 EVEX_W_0F14_P_0,
1988 EVEX_W_0F14_P_2,
1989 EVEX_W_0F15_P_0,
1990 EVEX_W_0F15_P_2,
1991 EVEX_W_0F16_P_0_M_0,
1992 EVEX_W_0F16_P_0_M_1,
1993 EVEX_W_0F16_P_1,
1994 EVEX_W_0F16_P_2,
1995 EVEX_W_0F17_P_0,
1996 EVEX_W_0F17_P_2,
1997 EVEX_W_0F28_P_0,
1998 EVEX_W_0F28_P_2,
1999 EVEX_W_0F29_P_0,
2000 EVEX_W_0F29_P_2,
2001 EVEX_W_0F2A_P_1,
2002 EVEX_W_0F2A_P_3,
2003 EVEX_W_0F2B_P_0,
2004 EVEX_W_0F2B_P_2,
2005 EVEX_W_0F2E_P_0,
2006 EVEX_W_0F2E_P_2,
2007 EVEX_W_0F2F_P_0,
2008 EVEX_W_0F2F_P_2,
2009 EVEX_W_0F51_P_0,
2010 EVEX_W_0F51_P_1,
2011 EVEX_W_0F51_P_2,
2012 EVEX_W_0F51_P_3,
2013 EVEX_W_0F58_P_0,
2014 EVEX_W_0F58_P_1,
2015 EVEX_W_0F58_P_2,
2016 EVEX_W_0F58_P_3,
2017 EVEX_W_0F59_P_0,
2018 EVEX_W_0F59_P_1,
2019 EVEX_W_0F59_P_2,
2020 EVEX_W_0F59_P_3,
2021 EVEX_W_0F5A_P_0,
2022 EVEX_W_0F5A_P_1,
2023 EVEX_W_0F5A_P_2,
2024 EVEX_W_0F5A_P_3,
2025 EVEX_W_0F5B_P_0,
2026 EVEX_W_0F5B_P_1,
2027 EVEX_W_0F5B_P_2,
2028 EVEX_W_0F5C_P_0,
2029 EVEX_W_0F5C_P_1,
2030 EVEX_W_0F5C_P_2,
2031 EVEX_W_0F5C_P_3,
2032 EVEX_W_0F5D_P_0,
2033 EVEX_W_0F5D_P_1,
2034 EVEX_W_0F5D_P_2,
2035 EVEX_W_0F5D_P_3,
2036 EVEX_W_0F5E_P_0,
2037 EVEX_W_0F5E_P_1,
2038 EVEX_W_0F5E_P_2,
2039 EVEX_W_0F5E_P_3,
2040 EVEX_W_0F5F_P_0,
2041 EVEX_W_0F5F_P_1,
2042 EVEX_W_0F5F_P_2,
2043 EVEX_W_0F5F_P_3,
2044 EVEX_W_0F62_P_2,
2045 EVEX_W_0F66_P_2,
2046 EVEX_W_0F6A_P_2,
2047 EVEX_W_0F6C_P_2,
2048 EVEX_W_0F6D_P_2,
2049 EVEX_W_0F6E_P_2,
2050 EVEX_W_0F6F_P_1,
2051 EVEX_W_0F6F_P_2,
2052 EVEX_W_0F70_P_2,
2053 EVEX_W_0F72_R_2_P_2,
2054 EVEX_W_0F72_R_6_P_2,
2055 EVEX_W_0F73_R_2_P_2,
2056 EVEX_W_0F73_R_6_P_2,
2057 EVEX_W_0F76_P_2,
2058 EVEX_W_0F78_P_0,
2059 EVEX_W_0F79_P_0,
2060 EVEX_W_0F7A_P_1,
2061 EVEX_W_0F7A_P_3,
2062 EVEX_W_0F7B_P_1,
2063 EVEX_W_0F7B_P_3,
2064 EVEX_W_0F7E_P_1,
2065 EVEX_W_0F7E_P_2,
2066 EVEX_W_0F7F_P_1,
2067 EVEX_W_0F7F_P_2,
2068 EVEX_W_0FC2_P_0,
2069 EVEX_W_0FC2_P_1,
2070 EVEX_W_0FC2_P_2,
2071 EVEX_W_0FC2_P_3,
2072 EVEX_W_0FC6_P_0,
2073 EVEX_W_0FC6_P_2,
2074 EVEX_W_0FD2_P_2,
2075 EVEX_W_0FD3_P_2,
2076 EVEX_W_0FD4_P_2,
2077 EVEX_W_0FD6_P_2,
2078 EVEX_W_0FE6_P_1,
2079 EVEX_W_0FE6_P_2,
2080 EVEX_W_0FE6_P_3,
2081 EVEX_W_0FE7_P_2,
2082 EVEX_W_0FF2_P_2,
2083 EVEX_W_0FF3_P_2,
2084 EVEX_W_0FF4_P_2,
2085 EVEX_W_0FFA_P_2,
2086 EVEX_W_0FFB_P_2,
2087 EVEX_W_0FFE_P_2,
2088 EVEX_W_0F380C_P_2,
2089 EVEX_W_0F380D_P_2,
2090 EVEX_W_0F3811_P_1,
2091 EVEX_W_0F3812_P_1,
2092 EVEX_W_0F3813_P_1,
2093 EVEX_W_0F3813_P_2,
2094 EVEX_W_0F3814_P_1,
2095 EVEX_W_0F3815_P_1,
2096 EVEX_W_0F3818_P_2,
2097 EVEX_W_0F3819_P_2,
2098 EVEX_W_0F381A_P_2,
2099 EVEX_W_0F381B_P_2,
2100 EVEX_W_0F381E_P_2,
2101 EVEX_W_0F381F_P_2,
2102 EVEX_W_0F3821_P_1,
2103 EVEX_W_0F3822_P_1,
2104 EVEX_W_0F3823_P_1,
2105 EVEX_W_0F3824_P_1,
2106 EVEX_W_0F3825_P_1,
2107 EVEX_W_0F3825_P_2,
2108 EVEX_W_0F3828_P_2,
2109 EVEX_W_0F3829_P_2,
2110 EVEX_W_0F382A_P_1,
2111 EVEX_W_0F382A_P_2,
2112 EVEX_W_0F3831_P_1,
2113 EVEX_W_0F3832_P_1,
2114 EVEX_W_0F3833_P_1,
2115 EVEX_W_0F3834_P_1,
2116 EVEX_W_0F3835_P_1,
2117 EVEX_W_0F3835_P_2,
2118 EVEX_W_0F3837_P_2,
2119 EVEX_W_0F383A_P_1,
2120 EVEX_W_0F3840_P_2,
2121 EVEX_W_0F3858_P_2,
2122 EVEX_W_0F3859_P_2,
2123 EVEX_W_0F385A_P_2,
2124 EVEX_W_0F385B_P_2,
2125 EVEX_W_0F3891_P_2,
2126 EVEX_W_0F3893_P_2,
2127 EVEX_W_0F38A1_P_2,
2128 EVEX_W_0F38A3_P_2,
2129 EVEX_W_0F38C7_R_1_P_2,
2130 EVEX_W_0F38C7_R_2_P_2,
2131 EVEX_W_0F38C7_R_5_P_2,
2132 EVEX_W_0F38C7_R_6_P_2,
2133
2134 EVEX_W_0F3A00_P_2,
2135 EVEX_W_0F3A01_P_2,
2136 EVEX_W_0F3A04_P_2,
2137 EVEX_W_0F3A05_P_2,
2138 EVEX_W_0F3A08_P_2,
2139 EVEX_W_0F3A09_P_2,
2140 EVEX_W_0F3A0A_P_2,
2141 EVEX_W_0F3A0B_P_2,
2142 EVEX_W_0F3A18_P_2,
2143 EVEX_W_0F3A19_P_2,
2144 EVEX_W_0F3A1A_P_2,
2145 EVEX_W_0F3A1B_P_2,
2146 EVEX_W_0F3A1D_P_2,
2147 EVEX_W_0F3A21_P_2,
2148 EVEX_W_0F3A23_P_2,
2149 EVEX_W_0F3A38_P_2,
2150 EVEX_W_0F3A39_P_2,
2151 EVEX_W_0F3A3A_P_2,
2152 EVEX_W_0F3A3B_P_2,
2153 EVEX_W_0F3A43_P_2,
9e30b8e0
L
2154};
2155
26ca5450 2156typedef void (*op_rtn) (int bytemode, int sizeflag);
252b5132
RH
2157
2158struct dis386 {
2da11e11 2159 const char *name;
ce518a5f
L
2160 struct
2161 {
2162 op_rtn rtn;
2163 int bytemode;
2164 } op[MAX_OPERANDS];
252b5132
RH
2165};
2166
2167/* Upper case letters in the instruction names here are macros.
2168 'A' => print 'b' if no register operands or suffix_always is true
2169 'B' => print 'b' if suffix_always is true
9306ca4a 2170 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
98b528ac 2171 size prefix
ed7841b3 2172 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
98b528ac 2173 suffix_always is true
252b5132 2174 'E' => print 'e' if 32-bit form of jcxz
3ffd33cf 2175 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
52fd6d94 2176 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
5dd0794d 2177 'H' => print ",pt" or ",pn" branch hint
9306ca4a 2178 'I' => honor following macro letter even in Intel mode (implemented only
98b528ac 2179 for some of the macro letters)
9306ca4a 2180 'J' => print 'l'
42903f7f 2181 'K' => print 'd' or 'q' if rex prefix is present.
252b5132 2182 'L' => print 'l' if suffix_always is true
9d141669 2183 'M' => print 'r' if intel_mnemonic is false.
252b5132 2184 'N' => print 'n' if instruction has no wait "prefix"
a35ca55a 2185 'O' => print 'd' or 'o' (or 'q' in Intel mode)
52b15da3 2186 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
98b528ac
L
2187 or suffix_always is true. print 'q' if rex prefix is present.
2188 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
2189 is true
a35ca55a 2190 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
52b15da3 2191 'S' => print 'w', 'l' or 'q' if suffix_always is true
6439fc28
AM
2192 'T' => print 'q' in 64bit mode and behave as 'P' otherwise
2193 'U' => print 'q' in 64bit mode and behave as 'Q' otherwise
1a114b12 2194 'V' => print 'q' in 64bit mode and behave as 'S' otherwise
a35ca55a 2195 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
9306ca4a 2196 'X' => print 's', 'd' depending on data16 prefix (for XMM)
8a72226a
L
2197 'Y' => 'q' if instruction has an REX 64bit overwrite prefix and
2198 suffix_always is true.
6dd5059a 2199 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
9d141669 2200 '!' => change condition from true to false or from false to true.
98b528ac
L
2201 '%' => add 1 upper case letter to the macro.
2202
2203 2 upper case letter macros:
c0f3af97
L
2204 "XY" => print 'x' or 'y' if no register operands or suffix_always
2205 is true.
4b06377f
L
2206 "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
2207 "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
98b528ac 2208 or suffix_always is true
4b06377f
L
2209 "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
2210 "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
2211 "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
6c30d220 2212 "LW" => print 'd', 'q' depending on the VEX.W bit
52b15da3 2213
6439fc28
AM
2214 Many of the above letters print nothing in Intel mode. See "putop"
2215 for the details.
52b15da3 2216
6439fc28 2217 Braces '{' and '}', and vertical bars '|', indicate alternative
7c52e0e8 2218 mnemonic strings for AT&T and Intel. */
252b5132 2219
6439fc28 2220static const struct dis386 dis386[] = {
252b5132 2221 /* 00 */
42164a71
L
2222 { "addB", { Ebh1, Gb } },
2223 { "addS", { Evh1, Gv } },
c7532693
L
2224 { "addB", { Gb, EbS } },
2225 { "addS", { Gv, EvS } },
ce518a5f
L
2226 { "addB", { AL, Ib } },
2227 { "addS", { eAX, Iv } },
4e7d34a6
L
2228 { X86_64_TABLE (X86_64_06) },
2229 { X86_64_TABLE (X86_64_07) },
252b5132 2230 /* 08 */
42164a71
L
2231 { "orB", { Ebh1, Gb } },
2232 { "orS", { Evh1, Gv } },
c7532693
L
2233 { "orB", { Gb, EbS } },
2234 { "orS", { Gv, EvS } },
ce518a5f
L
2235 { "orB", { AL, Ib } },
2236 { "orS", { eAX, Iv } },
4e7d34a6 2237 { X86_64_TABLE (X86_64_0D) },
592d1631 2238 { Bad_Opcode }, /* 0x0f extended opcode escape */
252b5132 2239 /* 10 */
42164a71
L
2240 { "adcB", { Ebh1, Gb } },
2241 { "adcS", { Evh1, Gv } },
c7532693
L
2242 { "adcB", { Gb, EbS } },
2243 { "adcS", { Gv, EvS } },
ce518a5f
L
2244 { "adcB", { AL, Ib } },
2245 { "adcS", { eAX, Iv } },
4e7d34a6
L
2246 { X86_64_TABLE (X86_64_16) },
2247 { X86_64_TABLE (X86_64_17) },
252b5132 2248 /* 18 */
42164a71
L
2249 { "sbbB", { Ebh1, Gb } },
2250 { "sbbS", { Evh1, Gv } },
c7532693
L
2251 { "sbbB", { Gb, EbS } },
2252 { "sbbS", { Gv, EvS } },
ce518a5f
L
2253 { "sbbB", { AL, Ib } },
2254 { "sbbS", { eAX, Iv } },
4e7d34a6
L
2255 { X86_64_TABLE (X86_64_1E) },
2256 { X86_64_TABLE (X86_64_1F) },
252b5132 2257 /* 20 */
42164a71
L
2258 { "andB", { Ebh1, Gb } },
2259 { "andS", { Evh1, Gv } },
c7532693
L
2260 { "andB", { Gb, EbS } },
2261 { "andS", { Gv, EvS } },
ce518a5f
L
2262 { "andB", { AL, Ib } },
2263 { "andS", { eAX, Iv } },
592d1631 2264 { Bad_Opcode }, /* SEG ES prefix */
4e7d34a6 2265 { X86_64_TABLE (X86_64_27) },
252b5132 2266 /* 28 */
42164a71
L
2267 { "subB", { Ebh1, Gb } },
2268 { "subS", { Evh1, Gv } },
c7532693
L
2269 { "subB", { Gb, EbS } },
2270 { "subS", { Gv, EvS } },
ce518a5f
L
2271 { "subB", { AL, Ib } },
2272 { "subS", { eAX, Iv } },
592d1631 2273 { Bad_Opcode }, /* SEG CS prefix */
4e7d34a6 2274 { X86_64_TABLE (X86_64_2F) },
252b5132 2275 /* 30 */
42164a71
L
2276 { "xorB", { Ebh1, Gb } },
2277 { "xorS", { Evh1, Gv } },
c7532693
L
2278 { "xorB", { Gb, EbS } },
2279 { "xorS", { Gv, EvS } },
ce518a5f
L
2280 { "xorB", { AL, Ib } },
2281 { "xorS", { eAX, Iv } },
592d1631 2282 { Bad_Opcode }, /* SEG SS prefix */
4e7d34a6 2283 { X86_64_TABLE (X86_64_37) },
252b5132 2284 /* 38 */
ce518a5f
L
2285 { "cmpB", { Eb, Gb } },
2286 { "cmpS", { Ev, Gv } },
c7532693
L
2287 { "cmpB", { Gb, EbS } },
2288 { "cmpS", { Gv, EvS } },
ce518a5f
L
2289 { "cmpB", { AL, Ib } },
2290 { "cmpS", { eAX, Iv } },
592d1631 2291 { Bad_Opcode }, /* SEG DS prefix */
4e7d34a6 2292 { X86_64_TABLE (X86_64_3F) },
252b5132 2293 /* 40 */
ce518a5f
L
2294 { "inc{S|}", { RMeAX } },
2295 { "inc{S|}", { RMeCX } },
2296 { "inc{S|}", { RMeDX } },
2297 { "inc{S|}", { RMeBX } },
2298 { "inc{S|}", { RMeSP } },
2299 { "inc{S|}", { RMeBP } },
2300 { "inc{S|}", { RMeSI } },
2301 { "inc{S|}", { RMeDI } },
252b5132 2302 /* 48 */
ce518a5f
L
2303 { "dec{S|}", { RMeAX } },
2304 { "dec{S|}", { RMeCX } },
2305 { "dec{S|}", { RMeDX } },
2306 { "dec{S|}", { RMeBX } },
2307 { "dec{S|}", { RMeSP } },
2308 { "dec{S|}", { RMeBP } },
2309 { "dec{S|}", { RMeSI } },
2310 { "dec{S|}", { RMeDI } },
252b5132 2311 /* 50 */
ce518a5f
L
2312 { "pushV", { RMrAX } },
2313 { "pushV", { RMrCX } },
2314 { "pushV", { RMrDX } },
2315 { "pushV", { RMrBX } },
2316 { "pushV", { RMrSP } },
2317 { "pushV", { RMrBP } },
2318 { "pushV", { RMrSI } },
2319 { "pushV", { RMrDI } },
252b5132 2320 /* 58 */
ce518a5f
L
2321 { "popV", { RMrAX } },
2322 { "popV", { RMrCX } },
2323 { "popV", { RMrDX } },
2324 { "popV", { RMrBX } },
2325 { "popV", { RMrSP } },
2326 { "popV", { RMrBP } },
2327 { "popV", { RMrSI } },
2328 { "popV", { RMrDI } },
252b5132 2329 /* 60 */
4e7d34a6
L
2330 { X86_64_TABLE (X86_64_60) },
2331 { X86_64_TABLE (X86_64_61) },
2332 { X86_64_TABLE (X86_64_62) },
2333 { X86_64_TABLE (X86_64_63) },
592d1631
L
2334 { Bad_Opcode }, /* seg fs */
2335 { Bad_Opcode }, /* seg gs */
2336 { Bad_Opcode }, /* op size prefix */
2337 { Bad_Opcode }, /* adr size prefix */
252b5132 2338 /* 68 */
d9e3625e 2339 { "pushT", { sIv } },
ce518a5f 2340 { "imulS", { Gv, Ev, Iv } },
e3949f17 2341 { "pushT", { sIbT } },
ce518a5f 2342 { "imulS", { Gv, Ev, sIb } },
7c52e0e8 2343 { "ins{b|}", { Ybr, indirDX } },
4e7d34a6 2344 { X86_64_TABLE (X86_64_6D) },
7c52e0e8 2345 { "outs{b|}", { indirDXr, Xb } },
4e7d34a6 2346 { X86_64_TABLE (X86_64_6F) },
252b5132 2347 /* 70 */
7e8b059b
L
2348 { "joH", { Jb, BND, cond_jump_flag } },
2349 { "jnoH", { Jb, BND, cond_jump_flag } },
2350 { "jbH", { Jb, BND, cond_jump_flag } },
2351 { "jaeH", { Jb, BND, cond_jump_flag } },
2352 { "jeH", { Jb, BND, cond_jump_flag } },
2353 { "jneH", { Jb, BND, cond_jump_flag } },
2354 { "jbeH", { Jb, BND, cond_jump_flag } },
2355 { "jaH", { Jb, BND, cond_jump_flag } },
252b5132 2356 /* 78 */
7e8b059b
L
2357 { "jsH", { Jb, BND, cond_jump_flag } },
2358 { "jnsH", { Jb, BND, cond_jump_flag } },
2359 { "jpH", { Jb, BND, cond_jump_flag } },
2360 { "jnpH", { Jb, BND, cond_jump_flag } },
2361 { "jlH", { Jb, BND, cond_jump_flag } },
2362 { "jgeH", { Jb, BND, cond_jump_flag } },
2363 { "jleH", { Jb, BND, cond_jump_flag } },
2364 { "jgH", { Jb, BND, cond_jump_flag } },
252b5132 2365 /* 80 */
1ceb70f8
L
2366 { REG_TABLE (REG_80) },
2367 { REG_TABLE (REG_81) },
592d1631 2368 { Bad_Opcode },
1ceb70f8 2369 { REG_TABLE (REG_82) },
ce518a5f
L
2370 { "testB", { Eb, Gb } },
2371 { "testS", { Ev, Gv } },
42164a71
L
2372 { "xchgB", { Ebh2, Gb } },
2373 { "xchgS", { Evh2, Gv } },
252b5132 2374 /* 88 */
42164a71
L
2375 { "movB", { Ebh3, Gb } },
2376 { "movS", { Evh3, Gv } },
b6169b20
L
2377 { "movB", { Gb, EbS } },
2378 { "movS", { Gv, EvS } },
ce518a5f 2379 { "movD", { Sv, Sw } },
1ceb70f8 2380 { MOD_TABLE (MOD_8D) },
ce518a5f 2381 { "movD", { Sw, Sv } },
1ceb70f8 2382 { REG_TABLE (REG_8F) },
252b5132 2383 /* 90 */
1ceb70f8 2384 { PREFIX_TABLE (PREFIX_90) },
ce518a5f
L
2385 { "xchgS", { RMeCX, eAX } },
2386 { "xchgS", { RMeDX, eAX } },
2387 { "xchgS", { RMeBX, eAX } },
2388 { "xchgS", { RMeSP, eAX } },
2389 { "xchgS", { RMeBP, eAX } },
2390 { "xchgS", { RMeSI, eAX } },
2391 { "xchgS", { RMeDI, eAX } },
252b5132 2392 /* 98 */
7c52e0e8
L
2393 { "cW{t|}R", { XX } },
2394 { "cR{t|}O", { XX } },
4e7d34a6 2395 { X86_64_TABLE (X86_64_9A) },
592d1631 2396 { Bad_Opcode }, /* fwait */
ce518a5f
L
2397 { "pushfT", { XX } },
2398 { "popfT", { XX } },
7c52e0e8
L
2399 { "sahf", { XX } },
2400 { "lahf", { XX } },
252b5132 2401 /* a0 */
4b06377f
L
2402 { "mov%LB", { AL, Ob } },
2403 { "mov%LS", { eAX, Ov } },
2404 { "mov%LB", { Ob, AL } },
2405 { "mov%LS", { Ov, eAX } },
7c52e0e8
L
2406 { "movs{b|}", { Ybr, Xb } },
2407 { "movs{R|}", { Yvr, Xv } },
2408 { "cmps{b|}", { Xb, Yb } },
2409 { "cmps{R|}", { Xv, Yv } },
252b5132 2410 /* a8 */
ce518a5f
L
2411 { "testB", { AL, Ib } },
2412 { "testS", { eAX, Iv } },
2413 { "stosB", { Ybr, AL } },
2414 { "stosS", { Yvr, eAX } },
2415 { "lodsB", { ALr, Xb } },
2416 { "lodsS", { eAXr, Xv } },
2417 { "scasB", { AL, Yb } },
2418 { "scasS", { eAX, Yv } },
252b5132 2419 /* b0 */
ce518a5f
L
2420 { "movB", { RMAL, Ib } },
2421 { "movB", { RMCL, Ib } },
2422 { "movB", { RMDL, Ib } },
2423 { "movB", { RMBL, Ib } },
2424 { "movB", { RMAH, Ib } },
2425 { "movB", { RMCH, Ib } },
2426 { "movB", { RMDH, Ib } },
2427 { "movB", { RMBH, Ib } },
252b5132 2428 /* b8 */
4b06377f
L
2429 { "mov%LV", { RMeAX, Iv64 } },
2430 { "mov%LV", { RMeCX, Iv64 } },
2431 { "mov%LV", { RMeDX, Iv64 } },
2432 { "mov%LV", { RMeBX, Iv64 } },
2433 { "mov%LV", { RMeSP, Iv64 } },
2434 { "mov%LV", { RMeBP, Iv64 } },
2435 { "mov%LV", { RMeSI, Iv64 } },
2436 { "mov%LV", { RMeDI, Iv64 } },
252b5132 2437 /* c0 */
1ceb70f8
L
2438 { REG_TABLE (REG_C0) },
2439 { REG_TABLE (REG_C1) },
7e8b059b
L
2440 { "retT", { Iw, BND } },
2441 { "retT", { BND } },
4e7d34a6
L
2442 { X86_64_TABLE (X86_64_C4) },
2443 { X86_64_TABLE (X86_64_C5) },
1ceb70f8
L
2444 { REG_TABLE (REG_C6) },
2445 { REG_TABLE (REG_C7) },
252b5132 2446 /* c8 */
ce518a5f
L
2447 { "enterT", { Iw, Ib } },
2448 { "leaveT", { XX } },
ddab3d59
JB
2449 { "Jret{|f}P", { Iw } },
2450 { "Jret{|f}P", { XX } },
ce518a5f
L
2451 { "int3", { XX } },
2452 { "int", { Ib } },
4e7d34a6 2453 { X86_64_TABLE (X86_64_CE) },
ce518a5f 2454 { "iretP", { XX } },
252b5132 2455 /* d0 */
1ceb70f8
L
2456 { REG_TABLE (REG_D0) },
2457 { REG_TABLE (REG_D1) },
2458 { REG_TABLE (REG_D2) },
2459 { REG_TABLE (REG_D3) },
4e7d34a6
L
2460 { X86_64_TABLE (X86_64_D4) },
2461 { X86_64_TABLE (X86_64_D5) },
592d1631 2462 { Bad_Opcode },
ce518a5f 2463 { "xlat", { DSBX } },
252b5132
RH
2464 /* d8 */
2465 { FLOAT },
2466 { FLOAT },
2467 { FLOAT },
2468 { FLOAT },
2469 { FLOAT },
2470 { FLOAT },
2471 { FLOAT },
2472 { FLOAT },
2473 /* e0 */
ce518a5f
L
2474 { "loopneFH", { Jb, XX, loop_jcxz_flag } },
2475 { "loopeFH", { Jb, XX, loop_jcxz_flag } },
2476 { "loopFH", { Jb, XX, loop_jcxz_flag } },
2477 { "jEcxzH", { Jb, XX, loop_jcxz_flag } },
2478 { "inB", { AL, Ib } },
2479 { "inG", { zAX, Ib } },
2480 { "outB", { Ib, AL } },
2481 { "outG", { Ib, zAX } },
252b5132 2482 /* e8 */
7e8b059b
L
2483 { "callT", { Jv, BND } },
2484 { "jmpT", { Jv, BND } },
4e7d34a6 2485 { X86_64_TABLE (X86_64_EA) },
7e8b059b 2486 { "jmp", { Jb, BND } },
ce518a5f
L
2487 { "inB", { AL, indirDX } },
2488 { "inG", { zAX, indirDX } },
2489 { "outB", { indirDX, AL } },
2490 { "outG", { indirDX, zAX } },
252b5132 2491 /* f0 */
592d1631 2492 { Bad_Opcode }, /* lock prefix */
ce518a5f 2493 { "icebp", { XX } },
592d1631
L
2494 { Bad_Opcode }, /* repne */
2495 { Bad_Opcode }, /* repz */
ce518a5f
L
2496 { "hlt", { XX } },
2497 { "cmc", { XX } },
1ceb70f8
L
2498 { REG_TABLE (REG_F6) },
2499 { REG_TABLE (REG_F7) },
252b5132 2500 /* f8 */
ce518a5f
L
2501 { "clc", { XX } },
2502 { "stc", { XX } },
2503 { "cli", { XX } },
2504 { "sti", { XX } },
2505 { "cld", { XX } },
2506 { "std", { XX } },
1ceb70f8
L
2507 { REG_TABLE (REG_FE) },
2508 { REG_TABLE (REG_FF) },
252b5132
RH
2509};
2510
6439fc28 2511static const struct dis386 dis386_twobyte[] = {
252b5132 2512 /* 00 */
1ceb70f8
L
2513 { REG_TABLE (REG_0F00 ) },
2514 { REG_TABLE (REG_0F01 ) },
ce518a5f
L
2515 { "larS", { Gv, Ew } },
2516 { "lslS", { Gv, Ew } },
592d1631 2517 { Bad_Opcode },
ce518a5f
L
2518 { "syscall", { XX } },
2519 { "clts", { XX } },
2520 { "sysretP", { XX } },
252b5132 2521 /* 08 */
ce518a5f
L
2522 { "invd", { XX } },
2523 { "wbinvd", { XX } },
592d1631 2524 { Bad_Opcode },
b414985b 2525 { "ud2", { XX } },
592d1631 2526 { Bad_Opcode },
b5b1fc4f 2527 { REG_TABLE (REG_0F0D) },
ce518a5f
L
2528 { "femms", { XX } },
2529 { "", { MX, EM, OPSUF } }, /* See OP_3DNowSuffix. */
252b5132 2530 /* 10 */
1ceb70f8
L
2531 { PREFIX_TABLE (PREFIX_0F10) },
2532 { PREFIX_TABLE (PREFIX_0F11) },
2533 { PREFIX_TABLE (PREFIX_0F12) },
2534 { MOD_TABLE (MOD_0F13) },
f2a421c4
L
2535 { "unpcklpX", { XM, EXx } },
2536 { "unpckhpX", { XM, EXx } },
1ceb70f8
L
2537 { PREFIX_TABLE (PREFIX_0F16) },
2538 { MOD_TABLE (MOD_0F17) },
252b5132 2539 /* 18 */
1ceb70f8 2540 { REG_TABLE (REG_0F18) },
b5b1fc4f 2541 { "nopQ", { Ev } },
7e8b059b
L
2542 { PREFIX_TABLE (PREFIX_0F1A) },
2543 { PREFIX_TABLE (PREFIX_0F1B) },
b5b1fc4f
L
2544 { "nopQ", { Ev } },
2545 { "nopQ", { Ev } },
2546 { "nopQ", { Ev } },
ce518a5f 2547 { "nopQ", { Ev } },
252b5132 2548 /* 20 */
1ceb70f8
L
2549 { MOD_TABLE (MOD_0F20) },
2550 { MOD_TABLE (MOD_0F21) },
2551 { MOD_TABLE (MOD_0F22) },
2552 { MOD_TABLE (MOD_0F23) },
2553 { MOD_TABLE (MOD_0F24) },
592d1631 2554 { Bad_Opcode },
1ceb70f8 2555 { MOD_TABLE (MOD_0F26) },
592d1631 2556 { Bad_Opcode },
252b5132 2557 /* 28 */
09a2c6cf 2558 { "movapX", { XM, EXx } },
b6169b20 2559 { "movapX", { EXxS, XM } },
1ceb70f8
L
2560 { PREFIX_TABLE (PREFIX_0F2A) },
2561 { PREFIX_TABLE (PREFIX_0F2B) },
2562 { PREFIX_TABLE (PREFIX_0F2C) },
2563 { PREFIX_TABLE (PREFIX_0F2D) },
2564 { PREFIX_TABLE (PREFIX_0F2E) },
2565 { PREFIX_TABLE (PREFIX_0F2F) },
252b5132 2566 /* 30 */
ce518a5f
L
2567 { "wrmsr", { XX } },
2568 { "rdtsc", { XX } },
2569 { "rdmsr", { XX } },
2570 { "rdpmc", { XX } },
2571 { "sysenter", { XX } },
2572 { "sysexit", { XX } },
592d1631 2573 { Bad_Opcode },
47dd174c 2574 { "getsec", { XX } },
252b5132 2575 /* 38 */
4e7d34a6 2576 { THREE_BYTE_TABLE (THREE_BYTE_0F38) },
592d1631 2577 { Bad_Opcode },
4e7d34a6 2578 { THREE_BYTE_TABLE (THREE_BYTE_0F3A) },
592d1631
L
2579 { Bad_Opcode },
2580 { Bad_Opcode },
2581 { Bad_Opcode },
2582 { Bad_Opcode },
2583 { Bad_Opcode },
252b5132 2584 /* 40 */
b19d5385
JB
2585 { "cmovoS", { Gv, Ev } },
2586 { "cmovnoS", { Gv, Ev } },
2587 { "cmovbS", { Gv, Ev } },
2588 { "cmovaeS", { Gv, Ev } },
2589 { "cmoveS", { Gv, Ev } },
2590 { "cmovneS", { Gv, Ev } },
2591 { "cmovbeS", { Gv, Ev } },
2592 { "cmovaS", { Gv, Ev } },
252b5132 2593 /* 48 */
b19d5385
JB
2594 { "cmovsS", { Gv, Ev } },
2595 { "cmovnsS", { Gv, Ev } },
2596 { "cmovpS", { Gv, Ev } },
2597 { "cmovnpS", { Gv, Ev } },
2598 { "cmovlS", { Gv, Ev } },
2599 { "cmovgeS", { Gv, Ev } },
2600 { "cmovleS", { Gv, Ev } },
2601 { "cmovgS", { Gv, Ev } },
252b5132 2602 /* 50 */
75c135a8 2603 { MOD_TABLE (MOD_0F51) },
1ceb70f8
L
2604 { PREFIX_TABLE (PREFIX_0F51) },
2605 { PREFIX_TABLE (PREFIX_0F52) },
2606 { PREFIX_TABLE (PREFIX_0F53) },
09a2c6cf
L
2607 { "andpX", { XM, EXx } },
2608 { "andnpX", { XM, EXx } },
2609 { "orpX", { XM, EXx } },
2610 { "xorpX", { XM, EXx } },
252b5132 2611 /* 58 */
1ceb70f8
L
2612 { PREFIX_TABLE (PREFIX_0F58) },
2613 { PREFIX_TABLE (PREFIX_0F59) },
2614 { PREFIX_TABLE (PREFIX_0F5A) },
2615 { PREFIX_TABLE (PREFIX_0F5B) },
2616 { PREFIX_TABLE (PREFIX_0F5C) },
2617 { PREFIX_TABLE (PREFIX_0F5D) },
2618 { PREFIX_TABLE (PREFIX_0F5E) },
2619 { PREFIX_TABLE (PREFIX_0F5F) },
252b5132 2620 /* 60 */
1ceb70f8
L
2621 { PREFIX_TABLE (PREFIX_0F60) },
2622 { PREFIX_TABLE (PREFIX_0F61) },
2623 { PREFIX_TABLE (PREFIX_0F62) },
ce518a5f
L
2624 { "packsswb", { MX, EM } },
2625 { "pcmpgtb", { MX, EM } },
2626 { "pcmpgtw", { MX, EM } },
2627 { "pcmpgtd", { MX, EM } },
2628 { "packuswb", { MX, EM } },
252b5132 2629 /* 68 */
ce518a5f
L
2630 { "punpckhbw", { MX, EM } },
2631 { "punpckhwd", { MX, EM } },
2632 { "punpckhdq", { MX, EM } },
2633 { "packssdw", { MX, EM } },
1ceb70f8
L
2634 { PREFIX_TABLE (PREFIX_0F6C) },
2635 { PREFIX_TABLE (PREFIX_0F6D) },
231af070 2636 { "movK", { MX, Edq } },
1ceb70f8 2637 { PREFIX_TABLE (PREFIX_0F6F) },
252b5132 2638 /* 70 */
1ceb70f8
L
2639 { PREFIX_TABLE (PREFIX_0F70) },
2640 { REG_TABLE (REG_0F71) },
2641 { REG_TABLE (REG_0F72) },
2642 { REG_TABLE (REG_0F73) },
ce518a5f
L
2643 { "pcmpeqb", { MX, EM } },
2644 { "pcmpeqw", { MX, EM } },
2645 { "pcmpeqd", { MX, EM } },
2646 { "emms", { XX } },
252b5132 2647 /* 78 */
1ceb70f8
L
2648 { PREFIX_TABLE (PREFIX_0F78) },
2649 { PREFIX_TABLE (PREFIX_0F79) },
4e7d34a6 2650 { THREE_BYTE_TABLE (THREE_BYTE_0F7A) },
592d1631 2651 { Bad_Opcode },
1ceb70f8
L
2652 { PREFIX_TABLE (PREFIX_0F7C) },
2653 { PREFIX_TABLE (PREFIX_0F7D) },
2654 { PREFIX_TABLE (PREFIX_0F7E) },
2655 { PREFIX_TABLE (PREFIX_0F7F) },
252b5132 2656 /* 80 */
7e8b059b
L
2657 { "joH", { Jv, BND, cond_jump_flag } },
2658 { "jnoH", { Jv, BND, cond_jump_flag } },
2659 { "jbH", { Jv, BND, cond_jump_flag } },
2660 { "jaeH", { Jv, BND, cond_jump_flag } },
2661 { "jeH", { Jv, BND, cond_jump_flag } },
2662 { "jneH", { Jv, BND, cond_jump_flag } },
2663 { "jbeH", { Jv, BND, cond_jump_flag } },
2664 { "jaH", { Jv, BND, cond_jump_flag } },
252b5132 2665 /* 88 */
7e8b059b
L
2666 { "jsH", { Jv, BND, cond_jump_flag } },
2667 { "jnsH", { Jv, BND, cond_jump_flag } },
2668 { "jpH", { Jv, BND, cond_jump_flag } },
2669 { "jnpH", { Jv, BND, cond_jump_flag } },
2670 { "jlH", { Jv, BND, cond_jump_flag } },
2671 { "jgeH", { Jv, BND, cond_jump_flag } },
2672 { "jleH", { Jv, BND, cond_jump_flag } },
2673 { "jgH", { Jv, BND, cond_jump_flag } },
252b5132 2674 /* 90 */
ce518a5f
L
2675 { "seto", { Eb } },
2676 { "setno", { Eb } },
2677 { "setb", { Eb } },
2678 { "setae", { Eb } },
2679 { "sete", { Eb } },
2680 { "setne", { Eb } },
2681 { "setbe", { Eb } },
2682 { "seta", { Eb } },
252b5132 2683 /* 98 */
ce518a5f
L
2684 { "sets", { Eb } },
2685 { "setns", { Eb } },
2686 { "setp", { Eb } },
2687 { "setnp", { Eb } },
2688 { "setl", { Eb } },
2689 { "setge", { Eb } },
2690 { "setle", { Eb } },
2691 { "setg", { Eb } },
252b5132 2692 /* a0 */
ce518a5f
L
2693 { "pushT", { fs } },
2694 { "popT", { fs } },
2695 { "cpuid", { XX } },
2696 { "btS", { Ev, Gv } },
2697 { "shldS", { Ev, Gv, Ib } },
2698 { "shldS", { Ev, Gv, CL } },
1ceb70f8
L
2699 { REG_TABLE (REG_0FA6) },
2700 { REG_TABLE (REG_0FA7) },
252b5132 2701 /* a8 */
ce518a5f
L
2702 { "pushT", { gs } },
2703 { "popT", { gs } },
2704 { "rsm", { XX } },
42164a71 2705 { "btsS", { Evh1, Gv } },
ce518a5f
L
2706 { "shrdS", { Ev, Gv, Ib } },
2707 { "shrdS", { Ev, Gv, CL } },
1ceb70f8 2708 { REG_TABLE (REG_0FAE) },
ce518a5f 2709 { "imulS", { Gv, Ev } },
252b5132 2710 /* b0 */
42164a71
L
2711 { "cmpxchgB", { Ebh1, Gb } },
2712 { "cmpxchgS", { Evh1, Gv } },
1ceb70f8 2713 { MOD_TABLE (MOD_0FB2) },
42164a71 2714 { "btrS", { Evh1, Gv } },
1ceb70f8
L
2715 { MOD_TABLE (MOD_0FB4) },
2716 { MOD_TABLE (MOD_0FB5) },
7c52e0e8
L
2717 { "movz{bR|x}", { Gv, Eb } },
2718 { "movz{wR|x}", { Gv, Ew } }, /* yes, there really is movzww ! */
252b5132 2719 /* b8 */
1ceb70f8 2720 { PREFIX_TABLE (PREFIX_0FB8) },
b414985b 2721 { "ud1", { XX } },
1ceb70f8 2722 { REG_TABLE (REG_0FBA) },
42164a71 2723 { "btcS", { Evh1, Gv } },
f12dc422 2724 { PREFIX_TABLE (PREFIX_0FBC) },
1ceb70f8 2725 { PREFIX_TABLE (PREFIX_0FBD) },
7c52e0e8
L
2726 { "movs{bR|x}", { Gv, Eb } },
2727 { "movs{wR|x}", { Gv, Ew } }, /* yes, there really is movsww ! */
252b5132 2728 /* c0 */
42164a71
L
2729 { "xaddB", { Ebh1, Gb } },
2730 { "xaddS", { Evh1, Gv } },
1ceb70f8 2731 { PREFIX_TABLE (PREFIX_0FC2) },
4ee52178 2732 { PREFIX_TABLE (PREFIX_0FC3) },
ce518a5f
L
2733 { "pinsrw", { MX, Edqw, Ib } },
2734 { "pextrw", { Gdq, MS, Ib } },
09a2c6cf 2735 { "shufpX", { XM, EXx, Ib } },
1ceb70f8 2736 { REG_TABLE (REG_0FC7) },
252b5132 2737 /* c8 */
ce518a5f
L
2738 { "bswap", { RMeAX } },
2739 { "bswap", { RMeCX } },
2740 { "bswap", { RMeDX } },
2741 { "bswap", { RMeBX } },
2742 { "bswap", { RMeSP } },
2743 { "bswap", { RMeBP } },
2744 { "bswap", { RMeSI } },
2745 { "bswap", { RMeDI } },
252b5132 2746 /* d0 */
1ceb70f8 2747 { PREFIX_TABLE (PREFIX_0FD0) },
ce518a5f
L
2748 { "psrlw", { MX, EM } },
2749 { "psrld", { MX, EM } },
2750 { "psrlq", { MX, EM } },
2751 { "paddq", { MX, EM } },
2752 { "pmullw", { MX, EM } },
1ceb70f8 2753 { PREFIX_TABLE (PREFIX_0FD6) },
75c135a8 2754 { MOD_TABLE (MOD_0FD7) },
252b5132 2755 /* d8 */
ce518a5f
L
2756 { "psubusb", { MX, EM } },
2757 { "psubusw", { MX, EM } },
2758 { "pminub", { MX, EM } },
2759 { "pand", { MX, EM } },
2760 { "paddusb", { MX, EM } },
2761 { "paddusw", { MX, EM } },
2762 { "pmaxub", { MX, EM } },
2763 { "pandn", { MX, EM } },
252b5132 2764 /* e0 */
ce518a5f
L
2765 { "pavgb", { MX, EM } },
2766 { "psraw", { MX, EM } },
2767 { "psrad", { MX, EM } },
2768 { "pavgw", { MX, EM } },
2769 { "pmulhuw", { MX, EM } },
2770 { "pmulhw", { MX, EM } },
1ceb70f8
L
2771 { PREFIX_TABLE (PREFIX_0FE6) },
2772 { PREFIX_TABLE (PREFIX_0FE7) },
252b5132 2773 /* e8 */
ce518a5f
L
2774 { "psubsb", { MX, EM } },
2775 { "psubsw", { MX, EM } },
2776 { "pminsw", { MX, EM } },
2777 { "por", { MX, EM } },
2778 { "paddsb", { MX, EM } },
2779 { "paddsw", { MX, EM } },
2780 { "pmaxsw", { MX, EM } },
2781 { "pxor", { MX, EM } },
252b5132 2782 /* f0 */
1ceb70f8 2783 { PREFIX_TABLE (PREFIX_0FF0) },
ce518a5f
L
2784 { "psllw", { MX, EM } },
2785 { "pslld", { MX, EM } },
2786 { "psllq", { MX, EM } },
2787 { "pmuludq", { MX, EM } },
2788 { "pmaddwd", { MX, EM } },
2789 { "psadbw", { MX, EM } },
1ceb70f8 2790 { PREFIX_TABLE (PREFIX_0FF7) },
252b5132 2791 /* f8 */
ce518a5f
L
2792 { "psubb", { MX, EM } },
2793 { "psubw", { MX, EM } },
2794 { "psubd", { MX, EM } },
2795 { "psubq", { MX, EM } },
2796 { "paddb", { MX, EM } },
2797 { "paddw", { MX, EM } },
2798 { "paddd", { MX, EM } },
592d1631 2799 { Bad_Opcode },
252b5132
RH
2800};
2801
2802static const unsigned char onebyte_has_modrm[256] = {
c608c12e
AM
2803 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2804 /* ------------------------------- */
2805 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
2806 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
2807 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
2808 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
2809 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
2810 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
2811 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
2812 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
2813 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
2814 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
2815 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
2816 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
2817 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
2818 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
2819 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
2820 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
2821 /* ------------------------------- */
2822 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
252b5132
RH
2823};
2824
2825static const unsigned char twobyte_has_modrm[256] = {
c608c12e
AM
2826 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2827 /* ------------------------------- */
252b5132 2828 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
b5b1fc4f 2829 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
85f10a01 2830 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
331d2d0d 2831 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
252b5132 2832 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
4bba6815
AM
2833 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
2834 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
85f10a01 2835 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
252b5132
RH
2836 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
2837 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
30d1c836 2838 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
050dfa73 2839 /* b0 */ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* bf */
252b5132 2840 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
ca164297 2841 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
4bba6815 2842 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
ca164297 2843 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* ff */
c608c12e
AM
2844 /* ------------------------------- */
2845 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2846};
2847
252b5132
RH
2848static char obuf[100];
2849static char *obufp;
ea397f5b 2850static char *mnemonicendp;
252b5132
RH
2851static char scratchbuf[100];
2852static unsigned char *start_codep;
2853static unsigned char *insn_codep;
2854static unsigned char *codep;
f16cd0d5
L
2855static int last_lock_prefix;
2856static int last_repz_prefix;
2857static int last_repnz_prefix;
2858static int last_data_prefix;
2859static int last_addr_prefix;
2860static int last_rex_prefix;
2861static int last_seg_prefix;
2862#define MAX_CODE_LENGTH 15
2863/* We can up to 14 prefixes since the maximum instruction length is
2864 15bytes. */
2865static int all_prefixes[MAX_CODE_LENGTH - 1];
252b5132 2866static disassemble_info *the_info;
7967e09e
L
2867static struct
2868 {
2869 int mod;
7967e09e 2870 int reg;
484c222e 2871 int rm;
7967e09e
L
2872 }
2873modrm;
4bba6815 2874static unsigned char need_modrm;
dfc8cf43
L
2875static struct
2876 {
2877 int scale;
2878 int index;
2879 int base;
2880 }
2881sib;
c0f3af97
L
2882static struct
2883 {
2884 int register_specifier;
2885 int length;
2886 int prefix;
2887 int w;
43234a1e
L
2888 int evex;
2889 int r;
2890 int v;
2891 int mask_register_specifier;
2892 int zeroing;
2893 int ll;
2894 int b;
c0f3af97
L
2895 }
2896vex;
2897static unsigned char need_vex;
2898static unsigned char need_vex_reg;
dae39acc 2899static unsigned char vex_w_done;
252b5132 2900
ea397f5b
L
2901struct op
2902 {
2903 const char *name;
2904 unsigned int len;
2905 };
2906
4bba6815
AM
2907/* If we are accessing mod/rm/reg without need_modrm set, then the
2908 values are stale. Hitting this abort likely indicates that you
2909 need to update onebyte_has_modrm or twobyte_has_modrm. */
2910#define MODRM_CHECK if (!need_modrm) abort ()
2911
d708bcba
AM
2912static const char **names64;
2913static const char **names32;
2914static const char **names16;
2915static const char **names8;
2916static const char **names8rex;
2917static const char **names_seg;
db51cc60
L
2918static const char *index64;
2919static const char *index32;
d708bcba 2920static const char **index16;
7e8b059b 2921static const char **names_bnd;
d708bcba
AM
2922
2923static const char *intel_names64[] = {
2924 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
2925 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
2926};
2927static const char *intel_names32[] = {
2928 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
2929 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
2930};
2931static const char *intel_names16[] = {
2932 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
2933 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
2934};
2935static const char *intel_names8[] = {
2936 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
2937};
2938static const char *intel_names8rex[] = {
2939 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
2940 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
2941};
2942static const char *intel_names_seg[] = {
2943 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
2944};
db51cc60
L
2945static const char *intel_index64 = "riz";
2946static const char *intel_index32 = "eiz";
d708bcba
AM
2947static const char *intel_index16[] = {
2948 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
2949};
2950
2951static const char *att_names64[] = {
2952 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
52b15da3
JH
2953 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
2954};
d708bcba
AM
2955static const char *att_names32[] = {
2956 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
52b15da3 2957 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
252b5132 2958};
d708bcba
AM
2959static const char *att_names16[] = {
2960 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
52b15da3 2961 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
252b5132 2962};
d708bcba
AM
2963static const char *att_names8[] = {
2964 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
252b5132 2965};
d708bcba
AM
2966static const char *att_names8rex[] = {
2967 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
52b15da3
JH
2968 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
2969};
d708bcba
AM
2970static const char *att_names_seg[] = {
2971 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
252b5132 2972};
db51cc60
L
2973static const char *att_index64 = "%riz";
2974static const char *att_index32 = "%eiz";
d708bcba
AM
2975static const char *att_index16[] = {
2976 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
252b5132
RH
2977};
2978
b9733481
L
2979static const char **names_mm;
2980static const char *intel_names_mm[] = {
2981 "mm0", "mm1", "mm2", "mm3",
2982 "mm4", "mm5", "mm6", "mm7"
2983};
2984static const char *att_names_mm[] = {
2985 "%mm0", "%mm1", "%mm2", "%mm3",
2986 "%mm4", "%mm5", "%mm6", "%mm7"
2987};
2988
7e8b059b
L
2989static const char *intel_names_bnd[] = {
2990 "bnd0", "bnd1", "bnd2", "bnd3"
2991};
2992
2993static const char *att_names_bnd[] = {
2994 "%bnd0", "%bnd1", "%bnd2", "%bnd3"
2995};
2996
b9733481
L
2997static const char **names_xmm;
2998static const char *intel_names_xmm[] = {
2999 "xmm0", "xmm1", "xmm2", "xmm3",
3000 "xmm4", "xmm5", "xmm6", "xmm7",
3001 "xmm8", "xmm9", "xmm10", "xmm11",
43234a1e
L
3002 "xmm12", "xmm13", "xmm14", "xmm15",
3003 "xmm16", "xmm17", "xmm18", "xmm19",
3004 "xmm20", "xmm21", "xmm22", "xmm23",
3005 "xmm24", "xmm25", "xmm26", "xmm27",
3006 "xmm28", "xmm29", "xmm30", "xmm31"
b9733481
L
3007};
3008static const char *att_names_xmm[] = {
3009 "%xmm0", "%xmm1", "%xmm2", "%xmm3",
3010 "%xmm4", "%xmm5", "%xmm6", "%xmm7",
3011 "%xmm8", "%xmm9", "%xmm10", "%xmm11",
43234a1e
L
3012 "%xmm12", "%xmm13", "%xmm14", "%xmm15",
3013 "%xmm16", "%xmm17", "%xmm18", "%xmm19",
3014 "%xmm20", "%xmm21", "%xmm22", "%xmm23",
3015 "%xmm24", "%xmm25", "%xmm26", "%xmm27",
3016 "%xmm28", "%xmm29", "%xmm30", "%xmm31"
b9733481
L
3017};
3018
3019static const char **names_ymm;
3020static const char *intel_names_ymm[] = {
3021 "ymm0", "ymm1", "ymm2", "ymm3",
3022 "ymm4", "ymm5", "ymm6", "ymm7",
3023 "ymm8", "ymm9", "ymm10", "ymm11",
43234a1e
L
3024 "ymm12", "ymm13", "ymm14", "ymm15",
3025 "ymm16", "ymm17", "ymm18", "ymm19",
3026 "ymm20", "ymm21", "ymm22", "ymm23",
3027 "ymm24", "ymm25", "ymm26", "ymm27",
3028 "ymm28", "ymm29", "ymm30", "ymm31"
b9733481
L
3029};
3030static const char *att_names_ymm[] = {
3031 "%ymm0", "%ymm1", "%ymm2", "%ymm3",
3032 "%ymm4", "%ymm5", "%ymm6", "%ymm7",
3033 "%ymm8", "%ymm9", "%ymm10", "%ymm11",
43234a1e
L
3034 "%ymm12", "%ymm13", "%ymm14", "%ymm15",
3035 "%ymm16", "%ymm17", "%ymm18", "%ymm19",
3036 "%ymm20", "%ymm21", "%ymm22", "%ymm23",
3037 "%ymm24", "%ymm25", "%ymm26", "%ymm27",
3038 "%ymm28", "%ymm29", "%ymm30", "%ymm31"
3039};
3040
3041static const char **names_zmm;
3042static const char *intel_names_zmm[] = {
3043 "zmm0", "zmm1", "zmm2", "zmm3",
3044 "zmm4", "zmm5", "zmm6", "zmm7",
3045 "zmm8", "zmm9", "zmm10", "zmm11",
3046 "zmm12", "zmm13", "zmm14", "zmm15",
3047 "zmm16", "zmm17", "zmm18", "zmm19",
3048 "zmm20", "zmm21", "zmm22", "zmm23",
3049 "zmm24", "zmm25", "zmm26", "zmm27",
3050 "zmm28", "zmm29", "zmm30", "zmm31"
3051};
3052static const char *att_names_zmm[] = {
3053 "%zmm0", "%zmm1", "%zmm2", "%zmm3",
3054 "%zmm4", "%zmm5", "%zmm6", "%zmm7",
3055 "%zmm8", "%zmm9", "%zmm10", "%zmm11",
3056 "%zmm12", "%zmm13", "%zmm14", "%zmm15",
3057 "%zmm16", "%zmm17", "%zmm18", "%zmm19",
3058 "%zmm20", "%zmm21", "%zmm22", "%zmm23",
3059 "%zmm24", "%zmm25", "%zmm26", "%zmm27",
3060 "%zmm28", "%zmm29", "%zmm30", "%zmm31"
3061};
3062
3063static const char **names_mask;
3064static const char *intel_names_mask[] = {
3065 "k0", "k1", "k2", "k3", "k4", "k5", "k6", "k7"
3066};
3067static const char *att_names_mask[] = {
3068 "%k0", "%k1", "%k2", "%k3", "%k4", "%k5", "%k6", "%k7"
3069};
3070
3071static const char *names_rounding[] =
3072{
3073 "{rn-sae}",
3074 "{rd-sae}",
3075 "{ru-sae}",
3076 "{rz-sae}"
b9733481
L
3077};
3078
1ceb70f8
L
3079static const struct dis386 reg_table[][8] = {
3080 /* REG_80 */
252b5132 3081 {
42164a71
L
3082 { "addA", { Ebh1, Ib } },
3083 { "orA", { Ebh1, Ib } },
3084 { "adcA", { Ebh1, Ib } },
3085 { "sbbA", { Ebh1, Ib } },
3086 { "andA", { Ebh1, Ib } },
3087 { "subA", { Ebh1, Ib } },
3088 { "xorA", { Ebh1, Ib } },
ce518a5f 3089 { "cmpA", { Eb, Ib } },
252b5132 3090 },
1ceb70f8 3091 /* REG_81 */
252b5132 3092 {
42164a71
L
3093 { "addQ", { Evh1, Iv } },
3094 { "orQ", { Evh1, Iv } },
3095 { "adcQ", { Evh1, Iv } },
3096 { "sbbQ", { Evh1, Iv } },
3097 { "andQ", { Evh1, Iv } },
3098 { "subQ", { Evh1, Iv } },
3099 { "xorQ", { Evh1, Iv } },
ce518a5f 3100 { "cmpQ", { Ev, Iv } },
252b5132 3101 },
1ceb70f8 3102 /* REG_82 */
252b5132 3103 {
42164a71
L
3104 { "addQ", { Evh1, sIb } },
3105 { "orQ", { Evh1, sIb } },
3106 { "adcQ", { Evh1, sIb } },
3107 { "sbbQ", { Evh1, sIb } },
3108 { "andQ", { Evh1, sIb } },
3109 { "subQ", { Evh1, sIb } },
3110 { "xorQ", { Evh1, sIb } },
ce518a5f 3111 { "cmpQ", { Ev, sIb } },
252b5132 3112 },
1ceb70f8 3113 /* REG_8F */
4e7d34a6
L
3114 {
3115 { "popU", { stackEv } },
c48244a5 3116 { XOP_8F_TABLE (XOP_09) },
592d1631
L
3117 { Bad_Opcode },
3118 { Bad_Opcode },
3119 { Bad_Opcode },
f88c9eb0 3120 { XOP_8F_TABLE (XOP_09) },
4e7d34a6 3121 },
1ceb70f8 3122 /* REG_C0 */
252b5132 3123 {
ce518a5f
L
3124 { "rolA", { Eb, Ib } },
3125 { "rorA", { Eb, Ib } },
3126 { "rclA", { Eb, Ib } },
3127 { "rcrA", { Eb, Ib } },
3128 { "shlA", { Eb, Ib } },
3129 { "shrA", { Eb, Ib } },
592d1631 3130 { Bad_Opcode },
ce518a5f 3131 { "sarA", { Eb, Ib } },
252b5132 3132 },
1ceb70f8 3133 /* REG_C1 */
252b5132 3134 {
ce518a5f
L
3135 { "rolQ", { Ev, Ib } },
3136 { "rorQ", { Ev, Ib } },
3137 { "rclQ", { Ev, Ib } },
3138 { "rcrQ", { Ev, Ib } },
3139 { "shlQ", { Ev, Ib } },
3140 { "shrQ", { Ev, Ib } },
592d1631 3141 { Bad_Opcode },
ce518a5f 3142 { "sarQ", { Ev, Ib } },
252b5132 3143 },
1ceb70f8 3144 /* REG_C6 */
4e7d34a6 3145 {
42164a71
L
3146 { "movA", { Ebh3, Ib } },
3147 { Bad_Opcode },
3148 { Bad_Opcode },
3149 { Bad_Opcode },
3150 { Bad_Opcode },
3151 { Bad_Opcode },
3152 { Bad_Opcode },
3153 { MOD_TABLE (MOD_C6_REG_7) },
4e7d34a6 3154 },
1ceb70f8 3155 /* REG_C7 */
4e7d34a6 3156 {
42164a71
L
3157 { "movQ", { Evh3, Iv } },
3158 { Bad_Opcode },
3159 { Bad_Opcode },
3160 { Bad_Opcode },
3161 { Bad_Opcode },
3162 { Bad_Opcode },
3163 { Bad_Opcode },
3164 { MOD_TABLE (MOD_C7_REG_7) },
4e7d34a6 3165 },
1ceb70f8 3166 /* REG_D0 */
252b5132 3167 {
ce518a5f
L
3168 { "rolA", { Eb, I1 } },
3169 { "rorA", { Eb, I1 } },
3170 { "rclA", { Eb, I1 } },
3171 { "rcrA", { Eb, I1 } },
3172 { "shlA", { Eb, I1 } },
3173 { "shrA", { Eb, I1 } },
592d1631 3174 { Bad_Opcode },
ce518a5f 3175 { "sarA", { Eb, I1 } },
252b5132 3176 },
1ceb70f8 3177 /* REG_D1 */
252b5132 3178 {
ce518a5f
L
3179 { "rolQ", { Ev, I1 } },
3180 { "rorQ", { Ev, I1 } },
3181 { "rclQ", { Ev, I1 } },
3182 { "rcrQ", { Ev, I1 } },
3183 { "shlQ", { Ev, I1 } },
3184 { "shrQ", { Ev, I1 } },
592d1631 3185 { Bad_Opcode },
ce518a5f 3186 { "sarQ", { Ev, I1 } },
252b5132 3187 },
1ceb70f8 3188 /* REG_D2 */
252b5132 3189 {
ce518a5f
L
3190 { "rolA", { Eb, CL } },
3191 { "rorA", { Eb, CL } },
3192 { "rclA", { Eb, CL } },
3193 { "rcrA", { Eb, CL } },
3194 { "shlA", { Eb, CL } },
3195 { "shrA", { Eb, CL } },
592d1631 3196 { Bad_Opcode },
ce518a5f 3197 { "sarA", { Eb, CL } },
252b5132 3198 },
1ceb70f8 3199 /* REG_D3 */
252b5132 3200 {
ce518a5f
L
3201 { "rolQ", { Ev, CL } },
3202 { "rorQ", { Ev, CL } },
3203 { "rclQ", { Ev, CL } },
3204 { "rcrQ", { Ev, CL } },
3205 { "shlQ", { Ev, CL } },
3206 { "shrQ", { Ev, CL } },
592d1631 3207 { Bad_Opcode },
ce518a5f 3208 { "sarQ", { Ev, CL } },
252b5132 3209 },
1ceb70f8 3210 /* REG_F6 */
252b5132 3211 {
ce518a5f 3212 { "testA", { Eb, Ib } },
592d1631 3213 { Bad_Opcode },
42164a71
L
3214 { "notA", { Ebh1 } },
3215 { "negA", { Ebh1 } },
ce518a5f
L
3216 { "mulA", { Eb } }, /* Don't print the implicit %al register, */
3217 { "imulA", { Eb } }, /* to distinguish these opcodes from other */
3218 { "divA", { Eb } }, /* mul/imul opcodes. Do the same for div */
3219 { "idivA", { Eb } }, /* and idiv for consistency. */
252b5132 3220 },
1ceb70f8 3221 /* REG_F7 */
252b5132 3222 {
ce518a5f 3223 { "testQ", { Ev, Iv } },
592d1631 3224 { Bad_Opcode },
42164a71
L
3225 { "notQ", { Evh1 } },
3226 { "negQ", { Evh1 } },
ce518a5f
L
3227 { "mulQ", { Ev } }, /* Don't print the implicit register. */
3228 { "imulQ", { Ev } },
3229 { "divQ", { Ev } },
3230 { "idivQ", { Ev } },
252b5132 3231 },
1ceb70f8 3232 /* REG_FE */
252b5132 3233 {
42164a71
L
3234 { "incA", { Ebh1 } },
3235 { "decA", { Ebh1 } },
252b5132 3236 },
1ceb70f8 3237 /* REG_FF */
252b5132 3238 {
42164a71
L
3239 { "incQ", { Evh1 } },
3240 { "decQ", { Evh1 } },
7e8b059b 3241 { "call{T|}", { indirEv, BND } },
4a357820 3242 { MOD_TABLE (MOD_FF_REG_3) },
7e8b059b 3243 { "jmp{T|}", { indirEv, BND } },
4a357820 3244 { MOD_TABLE (MOD_FF_REG_5) },
ce518a5f 3245 { "pushU", { stackEv } },
592d1631 3246 { Bad_Opcode },
252b5132 3247 },
1ceb70f8 3248 /* REG_0F00 */
252b5132 3249 {
ce518a5f
L
3250 { "sldtD", { Sv } },
3251 { "strD", { Sv } },
3252 { "lldt", { Ew } },
3253 { "ltr", { Ew } },
3254 { "verr", { Ew } },
3255 { "verw", { Ew } },
592d1631
L
3256 { Bad_Opcode },
3257 { Bad_Opcode },
252b5132 3258 },
1ceb70f8 3259 /* REG_0F01 */
252b5132 3260 {
1ceb70f8
L
3261 { MOD_TABLE (MOD_0F01_REG_0) },
3262 { MOD_TABLE (MOD_0F01_REG_1) },
3263 { MOD_TABLE (MOD_0F01_REG_2) },
3264 { MOD_TABLE (MOD_0F01_REG_3) },
ce518a5f 3265 { "smswD", { Sv } },
592d1631 3266 { Bad_Opcode },
ce518a5f 3267 { "lmsw", { Ew } },
1ceb70f8 3268 { MOD_TABLE (MOD_0F01_REG_7) },
252b5132 3269 },
b5b1fc4f 3270 /* REG_0F0D */
252b5132 3271 {
1ab03f4b
L
3272 { "prefetch", { Mb } },
3273 { "prefetchw", { Mb } },
43234a1e 3274 { "prefetchwt1", { Mb } },
d7189fa5
RM
3275 { "prefetch", { Mb } },
3276 { "prefetch", { Mb } },
3277 { "prefetch", { Mb } },
3278 { "prefetch", { Mb } },
3279 { "prefetch", { Mb } },
252b5132 3280 },
1ceb70f8 3281 /* REG_0F18 */
252b5132 3282 {
1ceb70f8
L
3283 { MOD_TABLE (MOD_0F18_REG_0) },
3284 { MOD_TABLE (MOD_0F18_REG_1) },
3285 { MOD_TABLE (MOD_0F18_REG_2) },
3286 { MOD_TABLE (MOD_0F18_REG_3) },
d7189fa5
RM
3287 { MOD_TABLE (MOD_0F18_REG_4) },
3288 { MOD_TABLE (MOD_0F18_REG_5) },
3289 { MOD_TABLE (MOD_0F18_REG_6) },
3290 { MOD_TABLE (MOD_0F18_REG_7) },
252b5132 3291 },
1ceb70f8 3292 /* REG_0F71 */
a6bd098c 3293 {
592d1631
L
3294 { Bad_Opcode },
3295 { Bad_Opcode },
1ceb70f8 3296 { MOD_TABLE (MOD_0F71_REG_2) },
592d1631 3297 { Bad_Opcode },
1ceb70f8 3298 { MOD_TABLE (MOD_0F71_REG_4) },
592d1631 3299 { Bad_Opcode },
1ceb70f8 3300 { MOD_TABLE (MOD_0F71_REG_6) },
a6bd098c 3301 },
1ceb70f8 3302 /* REG_0F72 */
a6bd098c 3303 {
592d1631
L
3304 { Bad_Opcode },
3305 { Bad_Opcode },
1ceb70f8 3306 { MOD_TABLE (MOD_0F72_REG_2) },
592d1631 3307 { Bad_Opcode },
1ceb70f8 3308 { MOD_TABLE (MOD_0F72_REG_4) },
592d1631 3309 { Bad_Opcode },
1ceb70f8 3310 { MOD_TABLE (MOD_0F72_REG_6) },
a6bd098c 3311 },
1ceb70f8 3312 /* REG_0F73 */
252b5132 3313 {
592d1631
L
3314 { Bad_Opcode },
3315 { Bad_Opcode },
1ceb70f8
L
3316 { MOD_TABLE (MOD_0F73_REG_2) },
3317 { MOD_TABLE (MOD_0F73_REG_3) },
592d1631
L
3318 { Bad_Opcode },
3319 { Bad_Opcode },
1ceb70f8
L
3320 { MOD_TABLE (MOD_0F73_REG_6) },
3321 { MOD_TABLE (MOD_0F73_REG_7) },
252b5132 3322 },
1ceb70f8 3323 /* REG_0FA6 */
252b5132 3324 {
4e7d34a6
L
3325 { "montmul", { { OP_0f07, 0 } } },
3326 { "xsha1", { { OP_0f07, 0 } } },
3327 { "xsha256", { { OP_0f07, 0 } } },
4e7d34a6 3328 },
1ceb70f8 3329 /* REG_0FA7 */
4e7d34a6
L
3330 {
3331 { "xstore-rng", { { OP_0f07, 0 } } },
3332 { "xcrypt-ecb", { { OP_0f07, 0 } } },
3333 { "xcrypt-cbc", { { OP_0f07, 0 } } },
3334 { "xcrypt-ctr", { { OP_0f07, 0 } } },
3335 { "xcrypt-cfb", { { OP_0f07, 0 } } },
3336 { "xcrypt-ofb", { { OP_0f07, 0 } } },
4e7d34a6 3337 },
1ceb70f8 3338 /* REG_0FAE */
4e7d34a6 3339 {
1ceb70f8
L
3340 { MOD_TABLE (MOD_0FAE_REG_0) },
3341 { MOD_TABLE (MOD_0FAE_REG_1) },
3342 { MOD_TABLE (MOD_0FAE_REG_2) },
3343 { MOD_TABLE (MOD_0FAE_REG_3) },
475a2301 3344 { MOD_TABLE (MOD_0FAE_REG_4) },
1ceb70f8
L
3345 { MOD_TABLE (MOD_0FAE_REG_5) },
3346 { MOD_TABLE (MOD_0FAE_REG_6) },
3347 { MOD_TABLE (MOD_0FAE_REG_7) },
252b5132 3348 },
1ceb70f8 3349 /* REG_0FBA */
252b5132 3350 {
592d1631
L
3351 { Bad_Opcode },
3352 { Bad_Opcode },
3353 { Bad_Opcode },
3354 { Bad_Opcode },
4e7d34a6 3355 { "btQ", { Ev, Ib } },
42164a71
L
3356 { "btsQ", { Evh1, Ib } },
3357 { "btrQ", { Evh1, Ib } },
3358 { "btcQ", { Evh1, Ib } },
c608c12e 3359 },
1ceb70f8 3360 /* REG_0FC7 */
c608c12e 3361 {
592d1631 3362 { Bad_Opcode },
4e7d34a6 3363 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } } },
592d1631 3364 { Bad_Opcode },
963f3586
IT
3365 { MOD_TABLE (MOD_0FC7_REG_3) },
3366 { MOD_TABLE (MOD_0FC7_REG_4) },
3367 { MOD_TABLE (MOD_0FC7_REG_5) },
1ceb70f8
L
3368 { MOD_TABLE (MOD_0FC7_REG_6) },
3369 { MOD_TABLE (MOD_0FC7_REG_7) },
252b5132 3370 },
592a252b 3371 /* REG_VEX_0F71 */
c0f3af97 3372 {
592d1631
L
3373 { Bad_Opcode },
3374 { Bad_Opcode },
592a252b 3375 { MOD_TABLE (MOD_VEX_0F71_REG_2) },
592d1631 3376 { Bad_Opcode },
592a252b 3377 { MOD_TABLE (MOD_VEX_0F71_REG_4) },
592d1631 3378 { Bad_Opcode },
592a252b 3379 { MOD_TABLE (MOD_VEX_0F71_REG_6) },
c0f3af97 3380 },
592a252b 3381 /* REG_VEX_0F72 */
c0f3af97 3382 {
592d1631
L
3383 { Bad_Opcode },
3384 { Bad_Opcode },
592a252b 3385 { MOD_TABLE (MOD_VEX_0F72_REG_2) },
592d1631 3386 { Bad_Opcode },
592a252b 3387 { MOD_TABLE (MOD_VEX_0F72_REG_4) },
592d1631 3388 { Bad_Opcode },
592a252b 3389 { MOD_TABLE (MOD_VEX_0F72_REG_6) },
c0f3af97 3390 },
592a252b 3391 /* REG_VEX_0F73 */
c0f3af97 3392 {
592d1631
L
3393 { Bad_Opcode },
3394 { Bad_Opcode },
592a252b
L
3395 { MOD_TABLE (MOD_VEX_0F73_REG_2) },
3396 { MOD_TABLE (MOD_VEX_0F73_REG_3) },
592d1631
L
3397 { Bad_Opcode },
3398 { Bad_Opcode },
592a252b
L
3399 { MOD_TABLE (MOD_VEX_0F73_REG_6) },
3400 { MOD_TABLE (MOD_VEX_0F73_REG_7) },
c0f3af97 3401 },
592a252b 3402 /* REG_VEX_0FAE */
c0f3af97 3403 {
592d1631
L
3404 { Bad_Opcode },
3405 { Bad_Opcode },
592a252b
L
3406 { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
3407 { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
c0f3af97 3408 },
f12dc422
L
3409 /* REG_VEX_0F38F3 */
3410 {
3411 { Bad_Opcode },
3412 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
3413 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
3414 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
3415 },
f88c9eb0
SP
3416 /* REG_XOP_LWPCB */
3417 {
3418 { "llwpcb", { { OP_LWPCB_E, 0 } } },
3419 { "slwpcb", { { OP_LWPCB_E, 0 } } },
f88c9eb0
SP
3420 },
3421 /* REG_XOP_LWP */
3422 {
ce7d077e
SP
3423 { "lwpins", { { OP_LWP_E, 0 }, Ed, Iq } },
3424 { "lwpval", { { OP_LWP_E, 0 }, Ed, Iq } },
f88c9eb0 3425 },
2a2a0f38
QN
3426 /* REG_XOP_TBM_01 */
3427 {
3428 { Bad_Opcode },
3429 { "blcfill", { { OP_LWP_E, 0 }, Ev } },
3430 { "blsfill", { { OP_LWP_E, 0 }, Ev } },
3431 { "blcs", { { OP_LWP_E, 0 }, Ev } },
3432 { "tzmsk", { { OP_LWP_E, 0 }, Ev } },
3433 { "blcic", { { OP_LWP_E, 0 }, Ev } },
3434 { "blsic", { { OP_LWP_E, 0 }, Ev } },
3435 { "t1mskc", { { OP_LWP_E, 0 }, Ev } },
3436 },
3437 /* REG_XOP_TBM_02 */
3438 {
3439 { Bad_Opcode },
3440 { "blcmsk", { { OP_LWP_E, 0 }, Ev } },
3441 { Bad_Opcode },
3442 { Bad_Opcode },
3443 { Bad_Opcode },
3444 { Bad_Opcode },
3445 { "blci", { { OP_LWP_E, 0 }, Ev } },
3446 },
43234a1e
L
3447#define NEED_REG_TABLE
3448#include "i386-dis-evex.h"
3449#undef NEED_REG_TABLE
4e7d34a6
L
3450};
3451
1ceb70f8
L
3452static const struct dis386 prefix_table[][4] = {
3453 /* PREFIX_90 */
252b5132 3454 {
4e7d34a6
L
3455 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
3456 { "pause", { XX } },
3457 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
0f10071e 3458 },
4e7d34a6 3459
1ceb70f8 3460 /* PREFIX_0F10 */
cc0ec051 3461 {
4e7d34a6
L
3462 { "movups", { XM, EXx } },
3463 { "movss", { XM, EXd } },
3464 { "movupd", { XM, EXx } },
3465 { "movsd", { XM, EXq } },
30d1c836 3466 },
4e7d34a6 3467
1ceb70f8 3468 /* PREFIX_0F11 */
30d1c836 3469 {
b6169b20 3470 { "movups", { EXxS, XM } },
fa99fab2 3471 { "movss", { EXdS, XM } },
b6169b20 3472 { "movupd", { EXxS, XM } },
fa99fab2 3473 { "movsd", { EXqS, XM } },
4e7d34a6 3474 },
252b5132 3475
1ceb70f8 3476 /* PREFIX_0F12 */
c608c12e 3477 {
1ceb70f8 3478 { MOD_TABLE (MOD_0F12_PREFIX_0) },
4e7d34a6
L
3479 { "movsldup", { XM, EXx } },
3480 { "movlpd", { XM, EXq } },
3481 { "movddup", { XM, EXq } },
c608c12e 3482 },
4e7d34a6 3483
1ceb70f8 3484 /* PREFIX_0F16 */
c608c12e 3485 {
1ceb70f8 3486 { MOD_TABLE (MOD_0F16_PREFIX_0) },
4e7d34a6
L
3487 { "movshdup", { XM, EXx } },
3488 { "movhpd", { XM, EXq } },
c608c12e 3489 },
4e7d34a6 3490
7e8b059b
L
3491 /* PREFIX_0F1A */
3492 {
3493 { MOD_TABLE (MOD_0F1A_PREFIX_0) },
3494 { "bndcl", { Gbnd, Ev_bnd } },
3495 { "bndmov", { Gbnd, Ebnd } },
3496 { "bndcu", { Gbnd, Ev_bnd } },
3497 },
3498
3499 /* PREFIX_0F1B */
3500 {
3501 { MOD_TABLE (MOD_0F1B_PREFIX_0) },
3502 { MOD_TABLE (MOD_0F1B_PREFIX_1) },
3503 { "bndmov", { Ebnd, Gbnd } },
3504 { "bndcn", { Gbnd, Ev_bnd } },
3505 },
3506
1ceb70f8 3507 /* PREFIX_0F2A */
c608c12e 3508 {
09335d05 3509 { "cvtpi2ps", { XM, EMCq } },
98b528ac 3510 { "cvtsi2ss%LQ", { XM, Ev } },
09335d05 3511 { "cvtpi2pd", { XM, EMCq } },
98b528ac 3512 { "cvtsi2sd%LQ", { XM, Ev } },
c608c12e 3513 },
4e7d34a6 3514
1ceb70f8 3515 /* PREFIX_0F2B */
c608c12e 3516 {
75c135a8
L
3517 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
3518 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
3519 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
3520 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
c608c12e 3521 },
4e7d34a6 3522
1ceb70f8 3523 /* PREFIX_0F2C */
c608c12e 3524 {
09335d05
L
3525 { "cvttps2pi", { MXC, EXq } },
3526 { "cvttss2siY", { Gv, EXd } },
09a2c6cf 3527 { "cvttpd2pi", { MXC, EXx } },
09335d05 3528 { "cvttsd2siY", { Gv, EXq } },
c608c12e 3529 },
4e7d34a6 3530
1ceb70f8 3531 /* PREFIX_0F2D */
c608c12e 3532 {
4e7d34a6
L
3533 { "cvtps2pi", { MXC, EXq } },
3534 { "cvtss2siY", { Gv, EXd } },
3535 { "cvtpd2pi", { MXC, EXx } },
3536 { "cvtsd2siY", { Gv, EXq } },
c608c12e 3537 },
4e7d34a6 3538
1ceb70f8 3539 /* PREFIX_0F2E */
c608c12e 3540 {
7bb15c6f 3541 { "ucomiss",{ XM, EXd } },
592d1631 3542 { Bad_Opcode },
7bb15c6f 3543 { "ucomisd",{ XM, EXq } },
c608c12e 3544 },
4e7d34a6 3545
1ceb70f8 3546 /* PREFIX_0F2F */
c608c12e 3547 {
4e7d34a6 3548 { "comiss", { XM, EXd } },
592d1631 3549 { Bad_Opcode },
4e7d34a6 3550 { "comisd", { XM, EXq } },
c608c12e 3551 },
4e7d34a6 3552
1ceb70f8 3553 /* PREFIX_0F51 */
c608c12e 3554 {
4e7d34a6
L
3555 { "sqrtps", { XM, EXx } },
3556 { "sqrtss", { XM, EXd } },
3557 { "sqrtpd", { XM, EXx } },
3558 { "sqrtsd", { XM, EXq } },
c608c12e 3559 },
4e7d34a6 3560
1ceb70f8 3561 /* PREFIX_0F52 */
c608c12e 3562 {
4e7d34a6
L
3563 { "rsqrtps",{ XM, EXx } },
3564 { "rsqrtss",{ XM, EXd } },
c608c12e 3565 },
4e7d34a6 3566
1ceb70f8 3567 /* PREFIX_0F53 */
c608c12e 3568 {
4e7d34a6
L
3569 { "rcpps", { XM, EXx } },
3570 { "rcpss", { XM, EXd } },
c608c12e 3571 },
4e7d34a6 3572
1ceb70f8 3573 /* PREFIX_0F58 */
c608c12e 3574 {
4e7d34a6
L
3575 { "addps", { XM, EXx } },
3576 { "addss", { XM, EXd } },
3577 { "addpd", { XM, EXx } },
3578 { "addsd", { XM, EXq } },
c608c12e 3579 },
4e7d34a6 3580
1ceb70f8 3581 /* PREFIX_0F59 */
c608c12e 3582 {
4e7d34a6
L
3583 { "mulps", { XM, EXx } },
3584 { "mulss", { XM, EXd } },
3585 { "mulpd", { XM, EXx } },
3586 { "mulsd", { XM, EXq } },
041bd2e0 3587 },
4e7d34a6 3588
1ceb70f8 3589 /* PREFIX_0F5A */
041bd2e0 3590 {
4e7d34a6
L
3591 { "cvtps2pd", { XM, EXq } },
3592 { "cvtss2sd", { XM, EXd } },
3593 { "cvtpd2ps", { XM, EXx } },
3594 { "cvtsd2ss", { XM, EXq } },
041bd2e0 3595 },
4e7d34a6 3596
1ceb70f8 3597 /* PREFIX_0F5B */
041bd2e0 3598 {
09a2c6cf
L
3599 { "cvtdq2ps", { XM, EXx } },
3600 { "cvttps2dq", { XM, EXx } },
3601 { "cvtps2dq", { XM, EXx } },
041bd2e0 3602 },
4e7d34a6 3603
1ceb70f8 3604 /* PREFIX_0F5C */
041bd2e0 3605 {
4e7d34a6
L
3606 { "subps", { XM, EXx } },
3607 { "subss", { XM, EXd } },
3608 { "subpd", { XM, EXx } },
3609 { "subsd", { XM, EXq } },
041bd2e0 3610 },
4e7d34a6 3611
1ceb70f8 3612 /* PREFIX_0F5D */
041bd2e0 3613 {
4e7d34a6
L
3614 { "minps", { XM, EXx } },
3615 { "minss", { XM, EXd } },
3616 { "minpd", { XM, EXx } },
3617 { "minsd", { XM, EXq } },
041bd2e0 3618 },
4e7d34a6 3619
1ceb70f8 3620 /* PREFIX_0F5E */
041bd2e0 3621 {
4e7d34a6
L
3622 { "divps", { XM, EXx } },
3623 { "divss", { XM, EXd } },
3624 { "divpd", { XM, EXx } },
3625 { "divsd", { XM, EXq } },
041bd2e0 3626 },
4e7d34a6 3627
1ceb70f8 3628 /* PREFIX_0F5F */
041bd2e0 3629 {
4e7d34a6
L
3630 { "maxps", { XM, EXx } },
3631 { "maxss", { XM, EXd } },
3632 { "maxpd", { XM, EXx } },
3633 { "maxsd", { XM, EXq } },
041bd2e0 3634 },
4e7d34a6 3635
1ceb70f8 3636 /* PREFIX_0F60 */
041bd2e0 3637 {
4e7d34a6 3638 { "punpcklbw",{ MX, EMd } },
592d1631 3639 { Bad_Opcode },
4e7d34a6 3640 { "punpcklbw",{ MX, EMx } },
041bd2e0 3641 },
4e7d34a6 3642
1ceb70f8 3643 /* PREFIX_0F61 */
041bd2e0 3644 {
4e7d34a6 3645 { "punpcklwd",{ MX, EMd } },
592d1631 3646 { Bad_Opcode },
4e7d34a6 3647 { "punpcklwd",{ MX, EMx } },
041bd2e0 3648 },
4e7d34a6 3649
1ceb70f8 3650 /* PREFIX_0F62 */
041bd2e0 3651 {
4e7d34a6 3652 { "punpckldq",{ MX, EMd } },
592d1631 3653 { Bad_Opcode },
4e7d34a6 3654 { "punpckldq",{ MX, EMx } },
041bd2e0 3655 },
4e7d34a6 3656
1ceb70f8 3657 /* PREFIX_0F6C */
041bd2e0 3658 {
592d1631
L
3659 { Bad_Opcode },
3660 { Bad_Opcode },
4e7d34a6 3661 { "punpcklqdq", { XM, EXx } },
0f17484f 3662 },
4e7d34a6 3663
1ceb70f8 3664 /* PREFIX_0F6D */
0f17484f 3665 {
592d1631
L
3666 { Bad_Opcode },
3667 { Bad_Opcode },
4e7d34a6 3668 { "punpckhqdq", { XM, EXx } },
041bd2e0 3669 },
4e7d34a6 3670
1ceb70f8 3671 /* PREFIX_0F6F */
ca164297 3672 {
4e7d34a6
L
3673 { "movq", { MX, EM } },
3674 { "movdqu", { XM, EXx } },
3675 { "movdqa", { XM, EXx } },
ca164297 3676 },
4e7d34a6 3677
1ceb70f8 3678 /* PREFIX_0F70 */
4e7d34a6
L
3679 {
3680 { "pshufw", { MX, EM, Ib } },
3681 { "pshufhw",{ XM, EXx, Ib } },
3682 { "pshufd", { XM, EXx, Ib } },
3683 { "pshuflw",{ XM, EXx, Ib } },
3684 },
3685
92fddf8e
L
3686 /* PREFIX_0F73_REG_3 */
3687 {
592d1631
L
3688 { Bad_Opcode },
3689 { Bad_Opcode },
92fddf8e 3690 { "psrldq", { XS, Ib } },
92fddf8e
L
3691 },
3692
3693 /* PREFIX_0F73_REG_7 */
3694 {
592d1631
L
3695 { Bad_Opcode },
3696 { Bad_Opcode },
92fddf8e 3697 { "pslldq", { XS, Ib } },
92fddf8e
L
3698 },
3699
1ceb70f8 3700 /* PREFIX_0F78 */
4e7d34a6
L
3701 {
3702 {"vmread", { Em, Gm } },
592d1631 3703 { Bad_Opcode },
4e7d34a6
L
3704 {"extrq", { XS, Ib, Ib } },
3705 {"insertq", { XM, XS, Ib, Ib } },
3706 },
3707
1ceb70f8 3708 /* PREFIX_0F79 */
4e7d34a6
L
3709 {
3710 {"vmwrite", { Gm, Em } },
592d1631 3711 { Bad_Opcode },
4e7d34a6
L
3712 {"extrq", { XM, XS } },
3713 {"insertq", { XM, XS } },
3714 },
3715
1ceb70f8 3716 /* PREFIX_0F7C */
ca164297 3717 {
592d1631
L
3718 { Bad_Opcode },
3719 { Bad_Opcode },
09a2c6cf
L
3720 { "haddpd", { XM, EXx } },
3721 { "haddps", { XM, EXx } },
ca164297 3722 },
4e7d34a6 3723
1ceb70f8 3724 /* PREFIX_0F7D */
ca164297 3725 {
592d1631
L
3726 { Bad_Opcode },
3727 { Bad_Opcode },
09a2c6cf
L
3728 { "hsubpd", { XM, EXx } },
3729 { "hsubps", { XM, EXx } },
ca164297 3730 },
4e7d34a6 3731
1ceb70f8 3732 /* PREFIX_0F7E */
ca164297 3733 {
4e7d34a6
L
3734 { "movK", { Edq, MX } },
3735 { "movq", { XM, EXq } },
3736 { "movK", { Edq, XM } },
ca164297 3737 },
4e7d34a6 3738
1ceb70f8 3739 /* PREFIX_0F7F */
ca164297 3740 {
b6169b20
L
3741 { "movq", { EMS, MX } },
3742 { "movdqu", { EXxS, XM } },
3743 { "movdqa", { EXxS, XM } },
ca164297 3744 },
4e7d34a6 3745
c7b8aa3a
L
3746 /* PREFIX_0FAE_REG_0 */
3747 {
3748 { Bad_Opcode },
3749 { "rdfsbase", { Ev } },
3750 },
3751
3752 /* PREFIX_0FAE_REG_1 */
3753 {
3754 { Bad_Opcode },
3755 { "rdgsbase", { Ev } },
3756 },
3757
3758 /* PREFIX_0FAE_REG_2 */
3759 {
3760 { Bad_Opcode },
3761 { "wrfsbase", { Ev } },
3762 },
3763
3764 /* PREFIX_0FAE_REG_3 */
3765 {
3766 { Bad_Opcode },
3767 { "wrgsbase", { Ev } },
3768 },
3769
963f3586
IT
3770 /* PREFIX_0FAE_REG_7 */
3771 {
3772 { "clflush", { Mb } },
3773 { Bad_Opcode },
3774 { "clflushopt", { Mb } },
3775 },
3776
1ceb70f8 3777 /* PREFIX_0FB8 */
ca164297 3778 {
592d1631 3779 { Bad_Opcode },
4e7d34a6 3780 { "popcntS", { Gv, Ev } },
ca164297 3781 },
4e7d34a6 3782
f12dc422
L
3783 /* PREFIX_0FBC */
3784 {
3785 { "bsfS", { Gv, Ev } },
3786 { "tzcntS", { Gv, Ev } },
3787 { "bsfS", { Gv, Ev } },
3788 },
3789
1ceb70f8 3790 /* PREFIX_0FBD */
050dfa73 3791 {
4e7d34a6
L
3792 { "bsrS", { Gv, Ev } },
3793 { "lzcntS", { Gv, Ev } },
3794 { "bsrS", { Gv, Ev } },
050dfa73
MM
3795 },
3796
1ceb70f8 3797 /* PREFIX_0FC2 */
050dfa73 3798 {
ad19981d
L
3799 { "cmpps", { XM, EXx, CMP } },
3800 { "cmpss", { XM, EXd, CMP } },
3801 { "cmppd", { XM, EXx, CMP } },
3802 { "cmpsd", { XM, EXq, CMP } },
050dfa73 3803 },
246c51aa 3804
4ee52178
L
3805 /* PREFIX_0FC3 */
3806 {
3807 { "movntiS", { Ma, Gv } },
4ee52178
L
3808 },
3809
92fddf8e
L
3810 /* PREFIX_0FC7_REG_6 */
3811 {
3812 { "vmptrld",{ Mq } },
3813 { "vmxon", { Mq } },
3814 { "vmclear",{ Mq } },
92fddf8e
L
3815 },
3816
1ceb70f8 3817 /* PREFIX_0FD0 */
050dfa73 3818 {
592d1631
L
3819 { Bad_Opcode },
3820 { Bad_Opcode },
4e7d34a6
L
3821 { "addsubpd", { XM, EXx } },
3822 { "addsubps", { XM, EXx } },
246c51aa 3823 },
050dfa73 3824
1ceb70f8 3825 /* PREFIX_0FD6 */
050dfa73 3826 {
592d1631 3827 { Bad_Opcode },
4e7d34a6 3828 { "movq2dq",{ XM, MS } },
b6169b20 3829 { "movq", { EXqS, XM } },
4e7d34a6 3830 { "movdq2q",{ MX, XS } },
050dfa73
MM
3831 },
3832
1ceb70f8 3833 /* PREFIX_0FE6 */
7918206c 3834 {
592d1631 3835 { Bad_Opcode },
4e7d34a6
L
3836 { "cvtdq2pd", { XM, EXq } },
3837 { "cvttpd2dq", { XM, EXx } },
3838 { "cvtpd2dq", { XM, EXx } },
7918206c 3839 },
8b38ad71 3840
1ceb70f8 3841 /* PREFIX_0FE7 */
8b38ad71 3842 {
4ee52178 3843 { "movntq", { Mq, MX } },
592d1631 3844 { Bad_Opcode },
75c135a8 3845 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
4e7d34a6
L
3846 },
3847
1ceb70f8 3848 /* PREFIX_0FF0 */
4e7d34a6 3849 {
592d1631
L
3850 { Bad_Opcode },
3851 { Bad_Opcode },
3852 { Bad_Opcode },
1ceb70f8 3853 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4e7d34a6
L
3854 },
3855
1ceb70f8 3856 /* PREFIX_0FF7 */
4e7d34a6
L
3857 {
3858 { "maskmovq", { MX, MS } },
592d1631 3859 { Bad_Opcode },
4e7d34a6 3860 { "maskmovdqu", { XM, XS } },
8b38ad71 3861 },
42903f7f 3862
1ceb70f8 3863 /* PREFIX_0F3810 */
42903f7f 3864 {
592d1631
L
3865 { Bad_Opcode },
3866 { Bad_Opcode },
88a94849 3867 { "pblendvb", { XM, EXx, XMM0 } },
42903f7f
L
3868 },
3869
1ceb70f8 3870 /* PREFIX_0F3814 */
42903f7f 3871 {
592d1631
L
3872 { Bad_Opcode },
3873 { Bad_Opcode },
88a94849 3874 { "blendvps", { XM, EXx, XMM0 } },
42903f7f
L
3875 },
3876
1ceb70f8 3877 /* PREFIX_0F3815 */
42903f7f 3878 {
592d1631
L
3879 { Bad_Opcode },
3880 { Bad_Opcode },
09a2c6cf 3881 { "blendvpd", { XM, EXx, XMM0 } },
42903f7f
L
3882 },
3883
1ceb70f8 3884 /* PREFIX_0F3817 */
42903f7f 3885 {
592d1631
L
3886 { Bad_Opcode },
3887 { Bad_Opcode },
09a2c6cf 3888 { "ptest", { XM, EXx } },
42903f7f
L
3889 },
3890
1ceb70f8 3891 /* PREFIX_0F3820 */
42903f7f 3892 {
592d1631
L
3893 { Bad_Opcode },
3894 { Bad_Opcode },
8976381e 3895 { "pmovsxbw", { XM, EXq } },
42903f7f
L
3896 },
3897
1ceb70f8 3898 /* PREFIX_0F3821 */
42903f7f 3899 {
592d1631
L
3900 { Bad_Opcode },
3901 { Bad_Opcode },
8976381e 3902 { "pmovsxbd", { XM, EXd } },
42903f7f
L
3903 },
3904
1ceb70f8 3905 /* PREFIX_0F3822 */
42903f7f 3906 {
592d1631
L
3907 { Bad_Opcode },
3908 { Bad_Opcode },
8976381e 3909 { "pmovsxbq", { XM, EXw } },
42903f7f
L
3910 },
3911
1ceb70f8 3912 /* PREFIX_0F3823 */
42903f7f 3913 {
592d1631
L
3914 { Bad_Opcode },
3915 { Bad_Opcode },
8976381e 3916 { "pmovsxwd", { XM, EXq } },
42903f7f
L
3917 },
3918
1ceb70f8 3919 /* PREFIX_0F3824 */
42903f7f 3920 {
592d1631
L
3921 { Bad_Opcode },
3922 { Bad_Opcode },
8976381e 3923 { "pmovsxwq", { XM, EXd } },
42903f7f
L
3924 },
3925
1ceb70f8 3926 /* PREFIX_0F3825 */
42903f7f 3927 {
592d1631
L
3928 { Bad_Opcode },
3929 { Bad_Opcode },
8976381e 3930 { "pmovsxdq", { XM, EXq } },
42903f7f
L
3931 },
3932
1ceb70f8 3933 /* PREFIX_0F3828 */
42903f7f 3934 {
592d1631
L
3935 { Bad_Opcode },
3936 { Bad_Opcode },
09a2c6cf 3937 { "pmuldq", { XM, EXx } },
42903f7f
L
3938 },
3939
1ceb70f8 3940 /* PREFIX_0F3829 */
42903f7f 3941 {
592d1631
L
3942 { Bad_Opcode },
3943 { Bad_Opcode },
09a2c6cf 3944 { "pcmpeqq", { XM, EXx } },
42903f7f
L
3945 },
3946
1ceb70f8 3947 /* PREFIX_0F382A */
42903f7f 3948 {
592d1631
L
3949 { Bad_Opcode },
3950 { Bad_Opcode },
75c135a8 3951 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
42903f7f
L
3952 },
3953
1ceb70f8 3954 /* PREFIX_0F382B */
42903f7f 3955 {
592d1631
L
3956 { Bad_Opcode },
3957 { Bad_Opcode },
09a2c6cf 3958 { "packusdw", { XM, EXx } },
42903f7f
L
3959 },
3960
1ceb70f8 3961 /* PREFIX_0F3830 */
42903f7f 3962 {
592d1631
L
3963 { Bad_Opcode },
3964 { Bad_Opcode },
8976381e 3965 { "pmovzxbw", { XM, EXq } },
42903f7f
L
3966 },
3967
1ceb70f8 3968 /* PREFIX_0F3831 */
42903f7f 3969 {
592d1631
L
3970 { Bad_Opcode },
3971 { Bad_Opcode },
8976381e 3972 { "pmovzxbd", { XM, EXd } },
42903f7f
L
3973 },
3974
1ceb70f8 3975 /* PREFIX_0F3832 */
42903f7f 3976 {
592d1631
L
3977 { Bad_Opcode },
3978 { Bad_Opcode },
8976381e 3979 { "pmovzxbq", { XM, EXw } },
42903f7f
L
3980 },
3981
1ceb70f8 3982 /* PREFIX_0F3833 */
42903f7f 3983 {
592d1631
L
3984 { Bad_Opcode },
3985 { Bad_Opcode },
8976381e 3986 { "pmovzxwd", { XM, EXq } },
42903f7f
L
3987 },
3988
1ceb70f8 3989 /* PREFIX_0F3834 */
42903f7f 3990 {
592d1631
L
3991 { Bad_Opcode },
3992 { Bad_Opcode },
8976381e 3993 { "pmovzxwq", { XM, EXd } },
42903f7f
L
3994 },
3995
1ceb70f8 3996 /* PREFIX_0F3835 */
42903f7f 3997 {
592d1631
L
3998 { Bad_Opcode },
3999 { Bad_Opcode },
8976381e 4000 { "pmovzxdq", { XM, EXq } },
42903f7f
L
4001 },
4002
1ceb70f8 4003 /* PREFIX_0F3837 */
4e7d34a6 4004 {
592d1631
L
4005 { Bad_Opcode },
4006 { Bad_Opcode },
4e7d34a6 4007 { "pcmpgtq", { XM, EXx } },
4e7d34a6
L
4008 },
4009
1ceb70f8 4010 /* PREFIX_0F3838 */
42903f7f 4011 {
592d1631
L
4012 { Bad_Opcode },
4013 { Bad_Opcode },
09a2c6cf 4014 { "pminsb", { XM, EXx } },
42903f7f
L
4015 },
4016
1ceb70f8 4017 /* PREFIX_0F3839 */
42903f7f 4018 {
592d1631
L
4019 { Bad_Opcode },
4020 { Bad_Opcode },
09a2c6cf 4021 { "pminsd", { XM, EXx } },
42903f7f
L
4022 },
4023
1ceb70f8 4024 /* PREFIX_0F383A */
42903f7f 4025 {
592d1631
L
4026 { Bad_Opcode },
4027 { Bad_Opcode },
09a2c6cf 4028 { "pminuw", { XM, EXx } },
42903f7f
L
4029 },
4030
1ceb70f8 4031 /* PREFIX_0F383B */
42903f7f 4032 {
592d1631
L
4033 { Bad_Opcode },
4034 { Bad_Opcode },
09a2c6cf 4035 { "pminud", { XM, EXx } },
42903f7f
L
4036 },
4037
1ceb70f8 4038 /* PREFIX_0F383C */
42903f7f 4039 {
592d1631
L
4040 { Bad_Opcode },
4041 { Bad_Opcode },
09a2c6cf 4042 { "pmaxsb", { XM, EXx } },
42903f7f
L
4043 },
4044
1ceb70f8 4045 /* PREFIX_0F383D */
42903f7f 4046 {
592d1631
L
4047 { Bad_Opcode },
4048 { Bad_Opcode },
09a2c6cf 4049 { "pmaxsd", { XM, EXx } },
42903f7f
L
4050 },
4051
1ceb70f8 4052 /* PREFIX_0F383E */
42903f7f 4053 {
592d1631
L
4054 { Bad_Opcode },
4055 { Bad_Opcode },
09a2c6cf 4056 { "pmaxuw", { XM, EXx } },
42903f7f
L
4057 },
4058
1ceb70f8 4059 /* PREFIX_0F383F */
42903f7f 4060 {
592d1631
L
4061 { Bad_Opcode },
4062 { Bad_Opcode },
09a2c6cf 4063 { "pmaxud", { XM, EXx } },
42903f7f
L
4064 },
4065
1ceb70f8 4066 /* PREFIX_0F3840 */
42903f7f 4067 {
592d1631
L
4068 { Bad_Opcode },
4069 { Bad_Opcode },
09a2c6cf 4070 { "pmulld", { XM, EXx } },
42903f7f
L
4071 },
4072
1ceb70f8 4073 /* PREFIX_0F3841 */
42903f7f 4074 {
592d1631
L
4075 { Bad_Opcode },
4076 { Bad_Opcode },
09a2c6cf 4077 { "phminposuw", { XM, EXx } },
42903f7f
L
4078 },
4079
f1f8f695
L
4080 /* PREFIX_0F3880 */
4081 {
592d1631
L
4082 { Bad_Opcode },
4083 { Bad_Opcode },
f1f8f695 4084 { "invept", { Gm, Mo } },
f1f8f695
L
4085 },
4086
4087 /* PREFIX_0F3881 */
4088 {
592d1631
L
4089 { Bad_Opcode },
4090 { Bad_Opcode },
f1f8f695 4091 { "invvpid", { Gm, Mo } },
f1f8f695
L
4092 },
4093
6c30d220
L
4094 /* PREFIX_0F3882 */
4095 {
4096 { Bad_Opcode },
4097 { Bad_Opcode },
4098 { "invpcid", { Gm, M } },
4099 },
4100
a0046408
L
4101 /* PREFIX_0F38C8 */
4102 {
4103 { "sha1nexte", { XM, EXxmm } },
4104 },
4105
4106 /* PREFIX_0F38C9 */
4107 {
4108 { "sha1msg1", { XM, EXxmm } },
4109 },
4110
4111 /* PREFIX_0F38CA */
4112 {
4113 { "sha1msg2", { XM, EXxmm } },
4114 },
4115
4116 /* PREFIX_0F38CB */
4117 {
4118 { "sha256rnds2", { XM, EXxmm, XMM0 } },
4119 },
4120
4121 /* PREFIX_0F38CC */
4122 {
4123 { "sha256msg1", { XM, EXxmm } },
4124 },
4125
4126 /* PREFIX_0F38CD */
4127 {
4128 { "sha256msg2", { XM, EXxmm } },
4129 },
4130
c0f3af97
L
4131 /* PREFIX_0F38DB */
4132 {
592d1631
L
4133 { Bad_Opcode },
4134 { Bad_Opcode },
c0f3af97 4135 { "aesimc", { XM, EXx } },
c0f3af97
L
4136 },
4137
4138 /* PREFIX_0F38DC */
4139 {
592d1631
L
4140 { Bad_Opcode },
4141 { Bad_Opcode },
c0f3af97 4142 { "aesenc", { XM, EXx } },
c0f3af97
L
4143 },
4144
4145 /* PREFIX_0F38DD */
4146 {
592d1631
L
4147 { Bad_Opcode },
4148 { Bad_Opcode },
c0f3af97 4149 { "aesenclast", { XM, EXx } },
c0f3af97
L
4150 },
4151
4152 /* PREFIX_0F38DE */
4153 {
592d1631
L
4154 { Bad_Opcode },
4155 { Bad_Opcode },
c0f3af97 4156 { "aesdec", { XM, EXx } },
c0f3af97
L
4157 },
4158
4159 /* PREFIX_0F38DF */
4160 {
592d1631
L
4161 { Bad_Opcode },
4162 { Bad_Opcode },
c0f3af97 4163 { "aesdeclast", { XM, EXx } },
c0f3af97
L
4164 },
4165
1ceb70f8 4166 /* PREFIX_0F38F0 */
4e7d34a6 4167 {
f1f8f695 4168 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
592d1631 4169 { Bad_Opcode },
f1f8f695 4170 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
7bb15c6f 4171 { "crc32", { Gdq, { CRC32_Fixup, b_mode } } },
4e7d34a6
L
4172 },
4173
1ceb70f8 4174 /* PREFIX_0F38F1 */
4e7d34a6 4175 {
f1f8f695 4176 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
592d1631 4177 { Bad_Opcode },
f1f8f695 4178 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
7bb15c6f 4179 { "crc32", { Gdq, { CRC32_Fixup, v_mode } } },
4e7d34a6
L
4180 },
4181
e2e1fcde
L
4182 /* PREFIX_0F38F6 */
4183 {
4184 { Bad_Opcode },
4185 { "adoxS", { Gdq, Edq} },
4186 { "adcxS", { Gdq, Edq} },
4187 { Bad_Opcode },
4188 },
4189
1ceb70f8 4190 /* PREFIX_0F3A08 */
42903f7f 4191 {
592d1631
L
4192 { Bad_Opcode },
4193 { Bad_Opcode },
09a2c6cf 4194 { "roundps", { XM, EXx, Ib } },
42903f7f
L
4195 },
4196
1ceb70f8 4197 /* PREFIX_0F3A09 */
42903f7f 4198 {
592d1631
L
4199 { Bad_Opcode },
4200 { Bad_Opcode },
09a2c6cf 4201 { "roundpd", { XM, EXx, Ib } },
42903f7f
L
4202 },
4203
1ceb70f8 4204 /* PREFIX_0F3A0A */
42903f7f 4205 {
592d1631
L
4206 { Bad_Opcode },
4207 { Bad_Opcode },
09335d05 4208 { "roundss", { XM, EXd, Ib } },
42903f7f
L
4209 },
4210
1ceb70f8 4211 /* PREFIX_0F3A0B */
42903f7f 4212 {
592d1631
L
4213 { Bad_Opcode },
4214 { Bad_Opcode },
09335d05 4215 { "roundsd", { XM, EXq, Ib } },
42903f7f
L
4216 },
4217
1ceb70f8 4218 /* PREFIX_0F3A0C */
42903f7f 4219 {
592d1631
L
4220 { Bad_Opcode },
4221 { Bad_Opcode },
09a2c6cf 4222 { "blendps", { XM, EXx, Ib } },
42903f7f
L
4223 },
4224
1ceb70f8 4225 /* PREFIX_0F3A0D */
42903f7f 4226 {
592d1631
L
4227 { Bad_Opcode },
4228 { Bad_Opcode },
09a2c6cf 4229 { "blendpd", { XM, EXx, Ib } },
42903f7f
L
4230 },
4231
1ceb70f8 4232 /* PREFIX_0F3A0E */
42903f7f 4233 {
592d1631
L
4234 { Bad_Opcode },
4235 { Bad_Opcode },
09a2c6cf 4236 { "pblendw", { XM, EXx, Ib } },
42903f7f
L
4237 },
4238
1ceb70f8 4239 /* PREFIX_0F3A14 */
42903f7f 4240 {
592d1631
L
4241 { Bad_Opcode },
4242 { Bad_Opcode },
42903f7f 4243 { "pextrb", { Edqb, XM, Ib } },
42903f7f
L
4244 },
4245
1ceb70f8 4246 /* PREFIX_0F3A15 */
42903f7f 4247 {
592d1631
L
4248 { Bad_Opcode },
4249 { Bad_Opcode },
42903f7f 4250 { "pextrw", { Edqw, XM, Ib } },
42903f7f
L
4251 },
4252
1ceb70f8 4253 /* PREFIX_0F3A16 */
42903f7f 4254 {
592d1631
L
4255 { Bad_Opcode },
4256 { Bad_Opcode },
42903f7f 4257 { "pextrK", { Edq, XM, Ib } },
42903f7f
L
4258 },
4259
1ceb70f8 4260 /* PREFIX_0F3A17 */
42903f7f 4261 {
592d1631
L
4262 { Bad_Opcode },
4263 { Bad_Opcode },
42903f7f 4264 { "extractps", { Edqd, XM, Ib } },
42903f7f
L
4265 },
4266
1ceb70f8 4267 /* PREFIX_0F3A20 */
42903f7f 4268 {
592d1631
L
4269 { Bad_Opcode },
4270 { Bad_Opcode },
42903f7f 4271 { "pinsrb", { XM, Edqb, Ib } },
42903f7f
L
4272 },
4273
1ceb70f8 4274 /* PREFIX_0F3A21 */
42903f7f 4275 {
592d1631
L
4276 { Bad_Opcode },
4277 { Bad_Opcode },
8976381e 4278 { "insertps", { XM, EXd, Ib } },
42903f7f
L
4279 },
4280
1ceb70f8 4281 /* PREFIX_0F3A22 */
42903f7f 4282 {
592d1631
L
4283 { Bad_Opcode },
4284 { Bad_Opcode },
42903f7f 4285 { "pinsrK", { XM, Edq, Ib } },
42903f7f
L
4286 },
4287
1ceb70f8 4288 /* PREFIX_0F3A40 */
42903f7f 4289 {
592d1631
L
4290 { Bad_Opcode },
4291 { Bad_Opcode },
09a2c6cf 4292 { "dpps", { XM, EXx, Ib } },
42903f7f
L
4293 },
4294
1ceb70f8 4295 /* PREFIX_0F3A41 */
42903f7f 4296 {
592d1631
L
4297 { Bad_Opcode },
4298 { Bad_Opcode },
09a2c6cf 4299 { "dppd", { XM, EXx, Ib } },
42903f7f
L
4300 },
4301
1ceb70f8 4302 /* PREFIX_0F3A42 */
42903f7f 4303 {
592d1631
L
4304 { Bad_Opcode },
4305 { Bad_Opcode },
09a2c6cf 4306 { "mpsadbw", { XM, EXx, Ib } },
42903f7f 4307 },
381d071f 4308
c0f3af97
L
4309 /* PREFIX_0F3A44 */
4310 {
592d1631
L
4311 { Bad_Opcode },
4312 { Bad_Opcode },
c0f3af97 4313 { "pclmulqdq", { XM, EXx, PCLMUL } },
c0f3af97
L
4314 },
4315
1ceb70f8 4316 /* PREFIX_0F3A60 */
381d071f 4317 {
592d1631
L
4318 { Bad_Opcode },
4319 { Bad_Opcode },
4e7d34a6 4320 { "pcmpestrm", { XM, EXx, Ib } },
381d071f
L
4321 },
4322
1ceb70f8 4323 /* PREFIX_0F3A61 */
381d071f 4324 {
592d1631
L
4325 { Bad_Opcode },
4326 { Bad_Opcode },
4e7d34a6 4327 { "pcmpestri", { XM, EXx, Ib } },
381d071f
L
4328 },
4329
1ceb70f8 4330 /* PREFIX_0F3A62 */
381d071f 4331 {
592d1631
L
4332 { Bad_Opcode },
4333 { Bad_Opcode },
4e7d34a6 4334 { "pcmpistrm", { XM, EXx, Ib } },
381d071f
L
4335 },
4336
1ceb70f8 4337 /* PREFIX_0F3A63 */
381d071f 4338 {
592d1631
L
4339 { Bad_Opcode },
4340 { Bad_Opcode },
4e7d34a6 4341 { "pcmpistri", { XM, EXx, Ib } },
381d071f 4342 },
09a2c6cf 4343
a0046408
L
4344 /* PREFIX_0F3ACC */
4345 {
4346 { "sha1rnds4", { XM, EXxmm, Ib } },
4347 },
4348
c0f3af97 4349 /* PREFIX_0F3ADF */
09a2c6cf 4350 {
592d1631
L
4351 { Bad_Opcode },
4352 { Bad_Opcode },
c0f3af97 4353 { "aeskeygenassist", { XM, EXx, Ib } },
09a2c6cf
L
4354 },
4355
592a252b 4356 /* PREFIX_VEX_0F10 */
09a2c6cf 4357 {
592a252b
L
4358 { VEX_W_TABLE (VEX_W_0F10_P_0) },
4359 { VEX_LEN_TABLE (VEX_LEN_0F10_P_1) },
4360 { VEX_W_TABLE (VEX_W_0F10_P_2) },
4361 { VEX_LEN_TABLE (VEX_LEN_0F10_P_3) },
09a2c6cf
L
4362 },
4363
592a252b 4364 /* PREFIX_VEX_0F11 */
09a2c6cf 4365 {
592a252b
L
4366 { VEX_W_TABLE (VEX_W_0F11_P_0) },
4367 { VEX_LEN_TABLE (VEX_LEN_0F11_P_1) },
4368 { VEX_W_TABLE (VEX_W_0F11_P_2) },
4369 { VEX_LEN_TABLE (VEX_LEN_0F11_P_3) },
09a2c6cf
L
4370 },
4371
592a252b 4372 /* PREFIX_VEX_0F12 */
09a2c6cf 4373 {
592a252b
L
4374 { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
4375 { VEX_W_TABLE (VEX_W_0F12_P_1) },
4376 { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) },
4377 { VEX_W_TABLE (VEX_W_0F12_P_3) },
09a2c6cf
L
4378 },
4379
592a252b 4380 /* PREFIX_VEX_0F16 */
09a2c6cf 4381 {
592a252b
L
4382 { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
4383 { VEX_W_TABLE (VEX_W_0F16_P_1) },
4384 { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) },
5f754f58 4385 },
7c52e0e8 4386
592a252b 4387 /* PREFIX_VEX_0F2A */
5f754f58 4388 {
592d1631 4389 { Bad_Opcode },
592a252b 4390 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_1) },
592d1631 4391 { Bad_Opcode },
592a252b 4392 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_3) },
5f754f58 4393 },
7c52e0e8 4394
592a252b 4395 /* PREFIX_VEX_0F2C */
5f754f58 4396 {
592d1631 4397 { Bad_Opcode },
592a252b 4398 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_1) },
592d1631 4399 { Bad_Opcode },
592a252b 4400 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_3) },
5f754f58 4401 },
7c52e0e8 4402
592a252b 4403 /* PREFIX_VEX_0F2D */
7c52e0e8 4404 {
592d1631 4405 { Bad_Opcode },
592a252b 4406 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_1) },
592d1631 4407 { Bad_Opcode },
592a252b 4408 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_3) },
7c52e0e8
L
4409 },
4410
592a252b 4411 /* PREFIX_VEX_0F2E */
7c52e0e8 4412 {
592a252b 4413 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_0) },
592d1631 4414 { Bad_Opcode },
592a252b 4415 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_2) },
7c52e0e8
L
4416 },
4417
592a252b 4418 /* PREFIX_VEX_0F2F */
7c52e0e8 4419 {
592a252b 4420 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_0) },
592d1631 4421 { Bad_Opcode },
592a252b 4422 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_2) },
7c52e0e8
L
4423 },
4424
43234a1e
L
4425 /* PREFIX_VEX_0F41 */
4426 {
4427 { VEX_LEN_TABLE (VEX_LEN_0F41_P_0) },
4428 },
4429
4430 /* PREFIX_VEX_0F42 */
4431 {
4432 { VEX_LEN_TABLE (VEX_LEN_0F42_P_0) },
4433 },
4434
4435 /* PREFIX_VEX_0F44 */
4436 {
4437 { VEX_LEN_TABLE (VEX_LEN_0F44_P_0) },
4438 },
4439
4440 /* PREFIX_VEX_0F45 */
4441 {
4442 { VEX_LEN_TABLE (VEX_LEN_0F45_P_0) },
4443 },
4444
4445 /* PREFIX_VEX_0F46 */
4446 {
4447 { VEX_LEN_TABLE (VEX_LEN_0F46_P_0) },
4448 },
4449
4450 /* PREFIX_VEX_0F47 */
4451 {
4452 { VEX_LEN_TABLE (VEX_LEN_0F47_P_0) },
4453 },
4454
4455 /* PREFIX_VEX_0F4B */
4456 {
4457 { Bad_Opcode },
4458 { Bad_Opcode },
4459 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_2) },
4460 },
4461
592a252b 4462 /* PREFIX_VEX_0F51 */
7c52e0e8 4463 {
592a252b
L
4464 { VEX_W_TABLE (VEX_W_0F51_P_0) },
4465 { VEX_LEN_TABLE (VEX_LEN_0F51_P_1) },
4466 { VEX_W_TABLE (VEX_W_0F51_P_2) },
4467 { VEX_LEN_TABLE (VEX_LEN_0F51_P_3) },
7c52e0e8
L
4468 },
4469
592a252b 4470 /* PREFIX_VEX_0F52 */
7c52e0e8 4471 {
592a252b
L
4472 { VEX_W_TABLE (VEX_W_0F52_P_0) },
4473 { VEX_LEN_TABLE (VEX_LEN_0F52_P_1) },
7c52e0e8
L
4474 },
4475
592a252b 4476 /* PREFIX_VEX_0F53 */
7c52e0e8 4477 {
592a252b
L
4478 { VEX_W_TABLE (VEX_W_0F53_P_0) },
4479 { VEX_LEN_TABLE (VEX_LEN_0F53_P_1) },
7c52e0e8
L
4480 },
4481
592a252b 4482 /* PREFIX_VEX_0F58 */
7c52e0e8 4483 {
592a252b
L
4484 { VEX_W_TABLE (VEX_W_0F58_P_0) },
4485 { VEX_LEN_TABLE (VEX_LEN_0F58_P_1) },
4486 { VEX_W_TABLE (VEX_W_0F58_P_2) },
4487 { VEX_LEN_TABLE (VEX_LEN_0F58_P_3) },
7c52e0e8
L
4488 },
4489
592a252b 4490 /* PREFIX_VEX_0F59 */
7c52e0e8 4491 {
592a252b
L
4492 { VEX_W_TABLE (VEX_W_0F59_P_0) },
4493 { VEX_LEN_TABLE (VEX_LEN_0F59_P_1) },
4494 { VEX_W_TABLE (VEX_W_0F59_P_2) },
4495 { VEX_LEN_TABLE (VEX_LEN_0F59_P_3) },
7c52e0e8
L
4496 },
4497
592a252b 4498 /* PREFIX_VEX_0F5A */
7c52e0e8 4499 {
592a252b
L
4500 { VEX_W_TABLE (VEX_W_0F5A_P_0) },
4501 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_1) },
c0f3af97 4502 { "vcvtpd2ps%XY", { XMM, EXx } },
592a252b 4503 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_3) },
7c52e0e8
L
4504 },
4505
592a252b 4506 /* PREFIX_VEX_0F5B */
7c52e0e8 4507 {
592a252b
L
4508 { VEX_W_TABLE (VEX_W_0F5B_P_0) },
4509 { VEX_W_TABLE (VEX_W_0F5B_P_1) },
4510 { VEX_W_TABLE (VEX_W_0F5B_P_2) },
7c52e0e8
L
4511 },
4512
592a252b 4513 /* PREFIX_VEX_0F5C */
7c52e0e8 4514 {
592a252b
L
4515 { VEX_W_TABLE (VEX_W_0F5C_P_0) },
4516 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_1) },
4517 { VEX_W_TABLE (VEX_W_0F5C_P_2) },
4518 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_3) },
7c52e0e8
L
4519 },
4520
592a252b 4521 /* PREFIX_VEX_0F5D */
7c52e0e8 4522 {
592a252b
L
4523 { VEX_W_TABLE (VEX_W_0F5D_P_0) },
4524 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_1) },
4525 { VEX_W_TABLE (VEX_W_0F5D_P_2) },
4526 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_3) },
7c52e0e8
L
4527 },
4528
592a252b 4529 /* PREFIX_VEX_0F5E */
7c52e0e8 4530 {
592a252b
L
4531 { VEX_W_TABLE (VEX_W_0F5E_P_0) },
4532 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_1) },
4533 { VEX_W_TABLE (VEX_W_0F5E_P_2) },
4534 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_3) },
7c52e0e8
L
4535 },
4536
592a252b 4537 /* PREFIX_VEX_0F5F */
7c52e0e8 4538 {
592a252b
L
4539 { VEX_W_TABLE (VEX_W_0F5F_P_0) },
4540 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_1) },
4541 { VEX_W_TABLE (VEX_W_0F5F_P_2) },
4542 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_3) },
7c52e0e8
L
4543 },
4544
592a252b 4545 /* PREFIX_VEX_0F60 */
7c52e0e8 4546 {
592d1631
L
4547 { Bad_Opcode },
4548 { Bad_Opcode },
6c30d220 4549 { VEX_W_TABLE (VEX_W_0F60_P_2) },
7c52e0e8
L
4550 },
4551
592a252b 4552 /* PREFIX_VEX_0F61 */
7c52e0e8 4553 {
592d1631
L
4554 { Bad_Opcode },
4555 { Bad_Opcode },
6c30d220 4556 { VEX_W_TABLE (VEX_W_0F61_P_2) },
7c52e0e8
L
4557 },
4558
592a252b 4559 /* PREFIX_VEX_0F62 */
7c52e0e8 4560 {
592d1631
L
4561 { Bad_Opcode },
4562 { Bad_Opcode },
6c30d220 4563 { VEX_W_TABLE (VEX_W_0F62_P_2) },
7c52e0e8
L
4564 },
4565
592a252b 4566 /* PREFIX_VEX_0F63 */
7c52e0e8 4567 {
592d1631
L
4568 { Bad_Opcode },
4569 { Bad_Opcode },
6c30d220 4570 { VEX_W_TABLE (VEX_W_0F63_P_2) },
7c52e0e8
L
4571 },
4572
592a252b 4573 /* PREFIX_VEX_0F64 */
7c52e0e8 4574 {
592d1631
L
4575 { Bad_Opcode },
4576 { Bad_Opcode },
6c30d220 4577 { VEX_W_TABLE (VEX_W_0F64_P_2) },
7c52e0e8
L
4578 },
4579
592a252b 4580 /* PREFIX_VEX_0F65 */
7c52e0e8 4581 {
592d1631
L
4582 { Bad_Opcode },
4583 { Bad_Opcode },
6c30d220 4584 { VEX_W_TABLE (VEX_W_0F65_P_2) },
7c52e0e8
L
4585 },
4586
592a252b 4587 /* PREFIX_VEX_0F66 */
7c52e0e8 4588 {
592d1631
L
4589 { Bad_Opcode },
4590 { Bad_Opcode },
6c30d220 4591 { VEX_W_TABLE (VEX_W_0F66_P_2) },
7c52e0e8 4592 },
6439fc28 4593
592a252b 4594 /* PREFIX_VEX_0F67 */
331d2d0d 4595 {
592d1631
L
4596 { Bad_Opcode },
4597 { Bad_Opcode },
6c30d220 4598 { VEX_W_TABLE (VEX_W_0F67_P_2) },
c0f3af97
L
4599 },
4600
592a252b 4601 /* PREFIX_VEX_0F68 */
c0f3af97 4602 {
592d1631
L
4603 { Bad_Opcode },
4604 { Bad_Opcode },
6c30d220 4605 { VEX_W_TABLE (VEX_W_0F68_P_2) },
c0f3af97
L
4606 },
4607
592a252b 4608 /* PREFIX_VEX_0F69 */
c0f3af97 4609 {
592d1631
L
4610 { Bad_Opcode },
4611 { Bad_Opcode },
6c30d220 4612 { VEX_W_TABLE (VEX_W_0F69_P_2) },
c0f3af97
L
4613 },
4614
592a252b 4615 /* PREFIX_VEX_0F6A */
c0f3af97 4616 {
592d1631
L
4617 { Bad_Opcode },
4618 { Bad_Opcode },
6c30d220 4619 { VEX_W_TABLE (VEX_W_0F6A_P_2) },
c0f3af97
L
4620 },
4621
592a252b 4622 /* PREFIX_VEX_0F6B */
c0f3af97 4623 {
592d1631
L
4624 { Bad_Opcode },
4625 { Bad_Opcode },
6c30d220 4626 { VEX_W_TABLE (VEX_W_0F6B_P_2) },
c0f3af97
L
4627 },
4628
592a252b 4629 /* PREFIX_VEX_0F6C */
c0f3af97 4630 {
592d1631
L
4631 { Bad_Opcode },
4632 { Bad_Opcode },
6c30d220 4633 { VEX_W_TABLE (VEX_W_0F6C_P_2) },
c0f3af97
L
4634 },
4635
592a252b 4636 /* PREFIX_VEX_0F6D */
c0f3af97 4637 {
592d1631
L
4638 { Bad_Opcode },
4639 { Bad_Opcode },
6c30d220 4640 { VEX_W_TABLE (VEX_W_0F6D_P_2) },
c0f3af97
L
4641 },
4642
592a252b 4643 /* PREFIX_VEX_0F6E */
c0f3af97 4644 {
592d1631
L
4645 { Bad_Opcode },
4646 { Bad_Opcode },
592a252b 4647 { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) },
c0f3af97
L
4648 },
4649
592a252b 4650 /* PREFIX_VEX_0F6F */
c0f3af97 4651 {
592d1631 4652 { Bad_Opcode },
592a252b
L
4653 { VEX_W_TABLE (VEX_W_0F6F_P_1) },
4654 { VEX_W_TABLE (VEX_W_0F6F_P_2) },
c0f3af97
L
4655 },
4656
592a252b 4657 /* PREFIX_VEX_0F70 */
c0f3af97 4658 {
592d1631 4659 { Bad_Opcode },
6c30d220
L
4660 { VEX_W_TABLE (VEX_W_0F70_P_1) },
4661 { VEX_W_TABLE (VEX_W_0F70_P_2) },
4662 { VEX_W_TABLE (VEX_W_0F70_P_3) },
c0f3af97
L
4663 },
4664
592a252b 4665 /* PREFIX_VEX_0F71_REG_2 */
c0f3af97 4666 {
592d1631
L
4667 { Bad_Opcode },
4668 { Bad_Opcode },
6c30d220 4669 { VEX_W_TABLE (VEX_W_0F71_R_2_P_2) },
c0f3af97
L
4670 },
4671
592a252b 4672 /* PREFIX_VEX_0F71_REG_4 */
c0f3af97 4673 {
592d1631
L
4674 { Bad_Opcode },
4675 { Bad_Opcode },
6c30d220 4676 { VEX_W_TABLE (VEX_W_0F71_R_4_P_2) },
c0f3af97
L
4677 },
4678
592a252b 4679 /* PREFIX_VEX_0F71_REG_6 */
c0f3af97 4680 {
592d1631
L
4681 { Bad_Opcode },
4682 { Bad_Opcode },
6c30d220 4683 { VEX_W_TABLE (VEX_W_0F71_R_6_P_2) },
c0f3af97
L
4684 },
4685
592a252b 4686 /* PREFIX_VEX_0F72_REG_2 */
c0f3af97 4687 {
592d1631
L
4688 { Bad_Opcode },
4689 { Bad_Opcode },
6c30d220 4690 { VEX_W_TABLE (VEX_W_0F72_R_2_P_2) },
c0f3af97
L
4691 },
4692
592a252b 4693 /* PREFIX_VEX_0F72_REG_4 */
c0f3af97 4694 {
592d1631
L
4695 { Bad_Opcode },
4696 { Bad_Opcode },
6c30d220 4697 { VEX_W_TABLE (VEX_W_0F72_R_4_P_2) },
c0f3af97
L
4698 },
4699
592a252b 4700 /* PREFIX_VEX_0F72_REG_6 */
c0f3af97 4701 {
592d1631
L
4702 { Bad_Opcode },
4703 { Bad_Opcode },
6c30d220 4704 { VEX_W_TABLE (VEX_W_0F72_R_6_P_2) },
c0f3af97
L
4705 },
4706
592a252b 4707 /* PREFIX_VEX_0F73_REG_2 */
c0f3af97 4708 {
592d1631
L
4709 { Bad_Opcode },
4710 { Bad_Opcode },
6c30d220 4711 { VEX_W_TABLE (VEX_W_0F73_R_2_P_2) },
c0f3af97
L
4712 },
4713
592a252b 4714 /* PREFIX_VEX_0F73_REG_3 */
c0f3af97 4715 {
592d1631
L
4716 { Bad_Opcode },
4717 { Bad_Opcode },
6c30d220 4718 { VEX_W_TABLE (VEX_W_0F73_R_3_P_2) },
c0f3af97
L
4719 },
4720
592a252b 4721 /* PREFIX_VEX_0F73_REG_6 */
c0f3af97 4722 {
592d1631
L
4723 { Bad_Opcode },
4724 { Bad_Opcode },
6c30d220 4725 { VEX_W_TABLE (VEX_W_0F73_R_6_P_2) },
c0f3af97
L
4726 },
4727
592a252b 4728 /* PREFIX_VEX_0F73_REG_7 */
c0f3af97 4729 {
592d1631
L
4730 { Bad_Opcode },
4731 { Bad_Opcode },
6c30d220 4732 { VEX_W_TABLE (VEX_W_0F73_R_7_P_2) },
c0f3af97
L
4733 },
4734
592a252b 4735 /* PREFIX_VEX_0F74 */
c0f3af97 4736 {
592d1631
L
4737 { Bad_Opcode },
4738 { Bad_Opcode },
6c30d220 4739 { VEX_W_TABLE (VEX_W_0F74_P_2) },
c0f3af97
L
4740 },
4741
592a252b 4742 /* PREFIX_VEX_0F75 */
c0f3af97 4743 {
592d1631
L
4744 { Bad_Opcode },
4745 { Bad_Opcode },
6c30d220 4746 { VEX_W_TABLE (VEX_W_0F75_P_2) },
c0f3af97
L
4747 },
4748
592a252b 4749 /* PREFIX_VEX_0F76 */
c0f3af97 4750 {
592d1631
L
4751 { Bad_Opcode },
4752 { Bad_Opcode },
6c30d220 4753 { VEX_W_TABLE (VEX_W_0F76_P_2) },
c0f3af97
L
4754 },
4755
592a252b 4756 /* PREFIX_VEX_0F77 */
c0f3af97 4757 {
592a252b 4758 { VEX_W_TABLE (VEX_W_0F77_P_0) },
c0f3af97
L
4759 },
4760
592a252b 4761 /* PREFIX_VEX_0F7C */
c0f3af97 4762 {
592d1631
L
4763 { Bad_Opcode },
4764 { Bad_Opcode },
592a252b
L
4765 { VEX_W_TABLE (VEX_W_0F7C_P_2) },
4766 { VEX_W_TABLE (VEX_W_0F7C_P_3) },
c0f3af97
L
4767 },
4768
592a252b 4769 /* PREFIX_VEX_0F7D */
c0f3af97 4770 {
592d1631
L
4771 { Bad_Opcode },
4772 { Bad_Opcode },
592a252b
L
4773 { VEX_W_TABLE (VEX_W_0F7D_P_2) },
4774 { VEX_W_TABLE (VEX_W_0F7D_P_3) },
c0f3af97
L
4775 },
4776
592a252b 4777 /* PREFIX_VEX_0F7E */
c0f3af97 4778 {
592d1631 4779 { Bad_Opcode },
592a252b
L
4780 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) },
4781 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
c0f3af97
L
4782 },
4783
592a252b 4784 /* PREFIX_VEX_0F7F */
c0f3af97 4785 {
592d1631 4786 { Bad_Opcode },
592a252b
L
4787 { VEX_W_TABLE (VEX_W_0F7F_P_1) },
4788 { VEX_W_TABLE (VEX_W_0F7F_P_2) },
c0f3af97
L
4789 },
4790
43234a1e
L
4791 /* PREFIX_VEX_0F90 */
4792 {
4793 { VEX_LEN_TABLE (VEX_LEN_0F90_P_0) },
4794 },
4795
4796 /* PREFIX_VEX_0F91 */
4797 {
4798 { VEX_LEN_TABLE (VEX_LEN_0F91_P_0) },
4799 },
4800
4801 /* PREFIX_VEX_0F92 */
4802 {
4803 { VEX_LEN_TABLE (VEX_LEN_0F92_P_0) },
4804 },
4805
4806 /* PREFIX_VEX_0F93 */
4807 {
4808 { VEX_LEN_TABLE (VEX_LEN_0F93_P_0) },
4809 },
4810
4811 /* PREFIX_VEX_0F98 */
4812 {
4813 { VEX_LEN_TABLE (VEX_LEN_0F98_P_0) },
4814 },
4815
592a252b 4816 /* PREFIX_VEX_0FC2 */
c0f3af97 4817 {
592a252b
L
4818 { VEX_W_TABLE (VEX_W_0FC2_P_0) },
4819 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_1) },
4820 { VEX_W_TABLE (VEX_W_0FC2_P_2) },
4821 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_3) },
c0f3af97
L
4822 },
4823
592a252b 4824 /* PREFIX_VEX_0FC4 */
c0f3af97 4825 {
592d1631
L
4826 { Bad_Opcode },
4827 { Bad_Opcode },
592a252b 4828 { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) },
c0f3af97
L
4829 },
4830
592a252b 4831 /* PREFIX_VEX_0FC5 */
c0f3af97 4832 {
592d1631
L
4833 { Bad_Opcode },
4834 { Bad_Opcode },
592a252b 4835 { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) },
c0f3af97
L
4836 },
4837
592a252b 4838 /* PREFIX_VEX_0FD0 */
c0f3af97 4839 {
592d1631
L
4840 { Bad_Opcode },
4841 { Bad_Opcode },
592a252b
L
4842 { VEX_W_TABLE (VEX_W_0FD0_P_2) },
4843 { VEX_W_TABLE (VEX_W_0FD0_P_3) },
c0f3af97
L
4844 },
4845
592a252b 4846 /* PREFIX_VEX_0FD1 */
c0f3af97 4847 {
592d1631
L
4848 { Bad_Opcode },
4849 { Bad_Opcode },
6c30d220 4850 { VEX_W_TABLE (VEX_W_0FD1_P_2) },
c0f3af97
L
4851 },
4852
592a252b 4853 /* PREFIX_VEX_0FD2 */
c0f3af97 4854 {
592d1631
L
4855 { Bad_Opcode },
4856 { Bad_Opcode },
6c30d220 4857 { VEX_W_TABLE (VEX_W_0FD2_P_2) },
c0f3af97
L
4858 },
4859
592a252b 4860 /* PREFIX_VEX_0FD3 */
c0f3af97 4861 {
592d1631
L
4862 { Bad_Opcode },
4863 { Bad_Opcode },
6c30d220 4864 { VEX_W_TABLE (VEX_W_0FD3_P_2) },
c0f3af97
L
4865 },
4866
592a252b 4867 /* PREFIX_VEX_0FD4 */
c0f3af97 4868 {
592d1631
L
4869 { Bad_Opcode },
4870 { Bad_Opcode },
6c30d220 4871 { VEX_W_TABLE (VEX_W_0FD4_P_2) },
c0f3af97
L
4872 },
4873
592a252b 4874 /* PREFIX_VEX_0FD5 */
c0f3af97 4875 {
592d1631
L
4876 { Bad_Opcode },
4877 { Bad_Opcode },
6c30d220 4878 { VEX_W_TABLE (VEX_W_0FD5_P_2) },
c0f3af97
L
4879 },
4880
592a252b 4881 /* PREFIX_VEX_0FD6 */
c0f3af97 4882 {
592d1631
L
4883 { Bad_Opcode },
4884 { Bad_Opcode },
592a252b 4885 { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) },
c0f3af97
L
4886 },
4887
592a252b 4888 /* PREFIX_VEX_0FD7 */
c0f3af97 4889 {
592d1631
L
4890 { Bad_Opcode },
4891 { Bad_Opcode },
592a252b 4892 { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) },
c0f3af97
L
4893 },
4894
592a252b 4895 /* PREFIX_VEX_0FD8 */
c0f3af97 4896 {
592d1631
L
4897 { Bad_Opcode },
4898 { Bad_Opcode },
6c30d220 4899 { VEX_W_TABLE (VEX_W_0FD8_P_2) },
c0f3af97
L
4900 },
4901
592a252b 4902 /* PREFIX_VEX_0FD9 */
c0f3af97 4903 {
592d1631
L
4904 { Bad_Opcode },
4905 { Bad_Opcode },
6c30d220 4906 { VEX_W_TABLE (VEX_W_0FD9_P_2) },
c0f3af97
L
4907 },
4908
592a252b 4909 /* PREFIX_VEX_0FDA */
c0f3af97 4910 {
592d1631
L
4911 { Bad_Opcode },
4912 { Bad_Opcode },
6c30d220 4913 { VEX_W_TABLE (VEX_W_0FDA_P_2) },
c0f3af97
L
4914 },
4915
592a252b 4916 /* PREFIX_VEX_0FDB */
c0f3af97 4917 {
592d1631
L
4918 { Bad_Opcode },
4919 { Bad_Opcode },
6c30d220 4920 { VEX_W_TABLE (VEX_W_0FDB_P_2) },
c0f3af97
L
4921 },
4922
592a252b 4923 /* PREFIX_VEX_0FDC */
c0f3af97 4924 {
592d1631
L
4925 { Bad_Opcode },
4926 { Bad_Opcode },
6c30d220 4927 { VEX_W_TABLE (VEX_W_0FDC_P_2) },
c0f3af97
L
4928 },
4929
592a252b 4930 /* PREFIX_VEX_0FDD */
c0f3af97 4931 {
592d1631
L
4932 { Bad_Opcode },
4933 { Bad_Opcode },
6c30d220 4934 { VEX_W_TABLE (VEX_W_0FDD_P_2) },
c0f3af97
L
4935 },
4936
592a252b 4937 /* PREFIX_VEX_0FDE */
c0f3af97 4938 {
592d1631
L
4939 { Bad_Opcode },
4940 { Bad_Opcode },
6c30d220 4941 { VEX_W_TABLE (VEX_W_0FDE_P_2) },
c0f3af97
L
4942 },
4943
592a252b 4944 /* PREFIX_VEX_0FDF */
c0f3af97 4945 {
592d1631
L
4946 { Bad_Opcode },
4947 { Bad_Opcode },
6c30d220 4948 { VEX_W_TABLE (VEX_W_0FDF_P_2) },
c0f3af97
L
4949 },
4950
592a252b 4951 /* PREFIX_VEX_0FE0 */
c0f3af97 4952 {
592d1631
L
4953 { Bad_Opcode },
4954 { Bad_Opcode },
6c30d220 4955 { VEX_W_TABLE (VEX_W_0FE0_P_2) },
c0f3af97
L
4956 },
4957
592a252b 4958 /* PREFIX_VEX_0FE1 */
c0f3af97 4959 {
592d1631
L
4960 { Bad_Opcode },
4961 { Bad_Opcode },
6c30d220 4962 { VEX_W_TABLE (VEX_W_0FE1_P_2) },
c0f3af97
L
4963 },
4964
592a252b 4965 /* PREFIX_VEX_0FE2 */
c0f3af97 4966 {
592d1631
L
4967 { Bad_Opcode },
4968 { Bad_Opcode },
6c30d220 4969 { VEX_W_TABLE (VEX_W_0FE2_P_2) },
c0f3af97
L
4970 },
4971
592a252b 4972 /* PREFIX_VEX_0FE3 */
c0f3af97 4973 {
592d1631
L
4974 { Bad_Opcode },
4975 { Bad_Opcode },
6c30d220 4976 { VEX_W_TABLE (VEX_W_0FE3_P_2) },
c0f3af97
L
4977 },
4978
592a252b 4979 /* PREFIX_VEX_0FE4 */
c0f3af97 4980 {
592d1631
L
4981 { Bad_Opcode },
4982 { Bad_Opcode },
6c30d220 4983 { VEX_W_TABLE (VEX_W_0FE4_P_2) },
c0f3af97
L
4984 },
4985
592a252b 4986 /* PREFIX_VEX_0FE5 */
c0f3af97 4987 {
592d1631
L
4988 { Bad_Opcode },
4989 { Bad_Opcode },
6c30d220 4990 { VEX_W_TABLE (VEX_W_0FE5_P_2) },
c0f3af97
L
4991 },
4992
592a252b 4993 /* PREFIX_VEX_0FE6 */
c0f3af97 4994 {
592d1631 4995 { Bad_Opcode },
592a252b
L
4996 { VEX_W_TABLE (VEX_W_0FE6_P_1) },
4997 { VEX_W_TABLE (VEX_W_0FE6_P_2) },
4998 { VEX_W_TABLE (VEX_W_0FE6_P_3) },
c0f3af97
L
4999 },
5000
592a252b 5001 /* PREFIX_VEX_0FE7 */
c0f3af97 5002 {
592d1631
L
5003 { Bad_Opcode },
5004 { Bad_Opcode },
592a252b 5005 { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) },
c0f3af97
L
5006 },
5007
592a252b 5008 /* PREFIX_VEX_0FE8 */
c0f3af97 5009 {
592d1631
L
5010 { Bad_Opcode },
5011 { Bad_Opcode },
6c30d220 5012 { VEX_W_TABLE (VEX_W_0FE8_P_2) },
c0f3af97
L
5013 },
5014
592a252b 5015 /* PREFIX_VEX_0FE9 */
c0f3af97 5016 {
592d1631
L
5017 { Bad_Opcode },
5018 { Bad_Opcode },
6c30d220 5019 { VEX_W_TABLE (VEX_W_0FE9_P_2) },
c0f3af97
L
5020 },
5021
592a252b 5022 /* PREFIX_VEX_0FEA */
c0f3af97 5023 {
592d1631
L
5024 { Bad_Opcode },
5025 { Bad_Opcode },
6c30d220 5026 { VEX_W_TABLE (VEX_W_0FEA_P_2) },
c0f3af97
L
5027 },
5028
592a252b 5029 /* PREFIX_VEX_0FEB */
c0f3af97 5030 {
592d1631
L
5031 { Bad_Opcode },
5032 { Bad_Opcode },
6c30d220 5033 { VEX_W_TABLE (VEX_W_0FEB_P_2) },
c0f3af97
L
5034 },
5035
592a252b 5036 /* PREFIX_VEX_0FEC */
c0f3af97 5037 {
592d1631
L
5038 { Bad_Opcode },
5039 { Bad_Opcode },
6c30d220 5040 { VEX_W_TABLE (VEX_W_0FEC_P_2) },
c0f3af97
L
5041 },
5042
592a252b 5043 /* PREFIX_VEX_0FED */
c0f3af97 5044 {
592d1631
L
5045 { Bad_Opcode },
5046 { Bad_Opcode },
6c30d220 5047 { VEX_W_TABLE (VEX_W_0FED_P_2) },
c0f3af97
L
5048 },
5049
592a252b 5050 /* PREFIX_VEX_0FEE */
c0f3af97 5051 {
592d1631
L
5052 { Bad_Opcode },
5053 { Bad_Opcode },
6c30d220 5054 { VEX_W_TABLE (VEX_W_0FEE_P_2) },
c0f3af97
L
5055 },
5056
592a252b 5057 /* PREFIX_VEX_0FEF */
c0f3af97 5058 {
592d1631
L
5059 { Bad_Opcode },
5060 { Bad_Opcode },
6c30d220 5061 { VEX_W_TABLE (VEX_W_0FEF_P_2) },
c0f3af97
L
5062 },
5063
592a252b 5064 /* PREFIX_VEX_0FF0 */
c0f3af97 5065 {
592d1631
L
5066 { Bad_Opcode },
5067 { Bad_Opcode },
5068 { Bad_Opcode },
592a252b 5069 { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) },
c0f3af97
L
5070 },
5071
592a252b 5072 /* PREFIX_VEX_0FF1 */
c0f3af97 5073 {
592d1631
L
5074 { Bad_Opcode },
5075 { Bad_Opcode },
6c30d220 5076 { VEX_W_TABLE (VEX_W_0FF1_P_2) },
c0f3af97
L
5077 },
5078
592a252b 5079 /* PREFIX_VEX_0FF2 */
c0f3af97 5080 {
592d1631
L
5081 { Bad_Opcode },
5082 { Bad_Opcode },
6c30d220 5083 { VEX_W_TABLE (VEX_W_0FF2_P_2) },
c0f3af97
L
5084 },
5085
592a252b 5086 /* PREFIX_VEX_0FF3 */
c0f3af97 5087 {
592d1631
L
5088 { Bad_Opcode },
5089 { Bad_Opcode },
6c30d220 5090 { VEX_W_TABLE (VEX_W_0FF3_P_2) },
c0f3af97
L
5091 },
5092
592a252b 5093 /* PREFIX_VEX_0FF4 */
c0f3af97 5094 {
592d1631
L
5095 { Bad_Opcode },
5096 { Bad_Opcode },
6c30d220 5097 { VEX_W_TABLE (VEX_W_0FF4_P_2) },
c0f3af97
L
5098 },
5099
592a252b 5100 /* PREFIX_VEX_0FF5 */
c0f3af97 5101 {
592d1631
L
5102 { Bad_Opcode },
5103 { Bad_Opcode },
6c30d220 5104 { VEX_W_TABLE (VEX_W_0FF5_P_2) },
c0f3af97
L
5105 },
5106
592a252b 5107 /* PREFIX_VEX_0FF6 */
c0f3af97 5108 {
592d1631
L
5109 { Bad_Opcode },
5110 { Bad_Opcode },
6c30d220 5111 { VEX_W_TABLE (VEX_W_0FF6_P_2) },
c0f3af97
L
5112 },
5113
592a252b 5114 /* PREFIX_VEX_0FF7 */
c0f3af97 5115 {
592d1631
L
5116 { Bad_Opcode },
5117 { Bad_Opcode },
592a252b 5118 { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) },
c0f3af97
L
5119 },
5120
592a252b 5121 /* PREFIX_VEX_0FF8 */
c0f3af97 5122 {
592d1631
L
5123 { Bad_Opcode },
5124 { Bad_Opcode },
6c30d220 5125 { VEX_W_TABLE (VEX_W_0FF8_P_2) },
c0f3af97
L
5126 },
5127
592a252b 5128 /* PREFIX_VEX_0FF9 */
c0f3af97 5129 {
592d1631
L
5130 { Bad_Opcode },
5131 { Bad_Opcode },
6c30d220 5132 { VEX_W_TABLE (VEX_W_0FF9_P_2) },
c0f3af97
L
5133 },
5134
592a252b 5135 /* PREFIX_VEX_0FFA */
c0f3af97 5136 {
592d1631
L
5137 { Bad_Opcode },
5138 { Bad_Opcode },
6c30d220 5139 { VEX_W_TABLE (VEX_W_0FFA_P_2) },
c0f3af97
L
5140 },
5141
592a252b 5142 /* PREFIX_VEX_0FFB */
c0f3af97 5143 {
592d1631
L
5144 { Bad_Opcode },
5145 { Bad_Opcode },
6c30d220 5146 { VEX_W_TABLE (VEX_W_0FFB_P_2) },
c0f3af97
L
5147 },
5148
592a252b 5149 /* PREFIX_VEX_0FFC */
c0f3af97 5150 {
592d1631
L
5151 { Bad_Opcode },
5152 { Bad_Opcode },
6c30d220 5153 { VEX_W_TABLE (VEX_W_0FFC_P_2) },
c0f3af97
L
5154 },
5155
592a252b 5156 /* PREFIX_VEX_0FFD */
c0f3af97 5157 {
592d1631
L
5158 { Bad_Opcode },
5159 { Bad_Opcode },
6c30d220 5160 { VEX_W_TABLE (VEX_W_0FFD_P_2) },
c0f3af97
L
5161 },
5162
592a252b 5163 /* PREFIX_VEX_0FFE */
c0f3af97 5164 {
592d1631
L
5165 { Bad_Opcode },
5166 { Bad_Opcode },
6c30d220 5167 { VEX_W_TABLE (VEX_W_0FFE_P_2) },
c0f3af97
L
5168 },
5169
592a252b 5170 /* PREFIX_VEX_0F3800 */
c0f3af97 5171 {
592d1631
L
5172 { Bad_Opcode },
5173 { Bad_Opcode },
6c30d220 5174 { VEX_W_TABLE (VEX_W_0F3800_P_2) },
c0f3af97
L
5175 },
5176
592a252b 5177 /* PREFIX_VEX_0F3801 */
c0f3af97 5178 {
592d1631
L
5179 { Bad_Opcode },
5180 { Bad_Opcode },
6c30d220 5181 { VEX_W_TABLE (VEX_W_0F3801_P_2) },
c0f3af97
L
5182 },
5183
592a252b 5184 /* PREFIX_VEX_0F3802 */
c0f3af97 5185 {
592d1631
L
5186 { Bad_Opcode },
5187 { Bad_Opcode },
6c30d220 5188 { VEX_W_TABLE (VEX_W_0F3802_P_2) },
c0f3af97
L
5189 },
5190
592a252b 5191 /* PREFIX_VEX_0F3803 */
c0f3af97 5192 {
592d1631
L
5193 { Bad_Opcode },
5194 { Bad_Opcode },
6c30d220 5195 { VEX_W_TABLE (VEX_W_0F3803_P_2) },
c0f3af97
L
5196 },
5197
592a252b 5198 /* PREFIX_VEX_0F3804 */
c0f3af97 5199 {
592d1631
L
5200 { Bad_Opcode },
5201 { Bad_Opcode },
6c30d220 5202 { VEX_W_TABLE (VEX_W_0F3804_P_2) },
c0f3af97
L
5203 },
5204
592a252b 5205 /* PREFIX_VEX_0F3805 */
c0f3af97 5206 {
592d1631
L
5207 { Bad_Opcode },
5208 { Bad_Opcode },
6c30d220 5209 { VEX_W_TABLE (VEX_W_0F3805_P_2) },
c0f3af97
L
5210 },
5211
592a252b 5212 /* PREFIX_VEX_0F3806 */
c0f3af97 5213 {
592d1631
L
5214 { Bad_Opcode },
5215 { Bad_Opcode },
6c30d220 5216 { VEX_W_TABLE (VEX_W_0F3806_P_2) },
c0f3af97
L
5217 },
5218
592a252b 5219 /* PREFIX_VEX_0F3807 */
c0f3af97 5220 {
592d1631
L
5221 { Bad_Opcode },
5222 { Bad_Opcode },
6c30d220 5223 { VEX_W_TABLE (VEX_W_0F3807_P_2) },
c0f3af97
L
5224 },
5225
592a252b 5226 /* PREFIX_VEX_0F3808 */
c0f3af97 5227 {
592d1631
L
5228 { Bad_Opcode },
5229 { Bad_Opcode },
6c30d220 5230 { VEX_W_TABLE (VEX_W_0F3808_P_2) },
c0f3af97
L
5231 },
5232
592a252b 5233 /* PREFIX_VEX_0F3809 */
c0f3af97 5234 {
592d1631
L
5235 { Bad_Opcode },
5236 { Bad_Opcode },
6c30d220 5237 { VEX_W_TABLE (VEX_W_0F3809_P_2) },
c0f3af97
L
5238 },
5239
592a252b 5240 /* PREFIX_VEX_0F380A */
c0f3af97 5241 {
592d1631
L
5242 { Bad_Opcode },
5243 { Bad_Opcode },
6c30d220 5244 { VEX_W_TABLE (VEX_W_0F380A_P_2) },
c0f3af97
L
5245 },
5246
592a252b 5247 /* PREFIX_VEX_0F380B */
c0f3af97 5248 {
592d1631
L
5249 { Bad_Opcode },
5250 { Bad_Opcode },
6c30d220 5251 { VEX_W_TABLE (VEX_W_0F380B_P_2) },
c0f3af97
L
5252 },
5253
592a252b 5254 /* PREFIX_VEX_0F380C */
c0f3af97 5255 {
592d1631
L
5256 { Bad_Opcode },
5257 { Bad_Opcode },
592a252b 5258 { VEX_W_TABLE (VEX_W_0F380C_P_2) },
c0f3af97
L
5259 },
5260
592a252b 5261 /* PREFIX_VEX_0F380D */
c0f3af97 5262 {
592d1631
L
5263 { Bad_Opcode },
5264 { Bad_Opcode },
592a252b 5265 { VEX_W_TABLE (VEX_W_0F380D_P_2) },
c0f3af97
L
5266 },
5267
592a252b 5268 /* PREFIX_VEX_0F380E */
c0f3af97 5269 {
592d1631
L
5270 { Bad_Opcode },
5271 { Bad_Opcode },
592a252b 5272 { VEX_W_TABLE (VEX_W_0F380E_P_2) },
c0f3af97
L
5273 },
5274
592a252b 5275 /* PREFIX_VEX_0F380F */
c0f3af97 5276 {
592d1631
L
5277 { Bad_Opcode },
5278 { Bad_Opcode },
592a252b 5279 { VEX_W_TABLE (VEX_W_0F380F_P_2) },
c0f3af97
L
5280 },
5281
592a252b 5282 /* PREFIX_VEX_0F3813 */
c7b8aa3a
L
5283 {
5284 { Bad_Opcode },
5285 { Bad_Opcode },
5286 { "vcvtph2ps", { XM, EXxmmq } },
5287 },
5288
6c30d220
L
5289 /* PREFIX_VEX_0F3816 */
5290 {
5291 { Bad_Opcode },
5292 { Bad_Opcode },
5293 { VEX_LEN_TABLE (VEX_LEN_0F3816_P_2) },
5294 },
5295
592a252b 5296 /* PREFIX_VEX_0F3817 */
c0f3af97 5297 {
592d1631
L
5298 { Bad_Opcode },
5299 { Bad_Opcode },
592a252b 5300 { VEX_W_TABLE (VEX_W_0F3817_P_2) },
c0f3af97
L
5301 },
5302
592a252b 5303 /* PREFIX_VEX_0F3818 */
c0f3af97 5304 {
592d1631
L
5305 { Bad_Opcode },
5306 { Bad_Opcode },
6c30d220 5307 { VEX_W_TABLE (VEX_W_0F3818_P_2) },
c0f3af97
L
5308 },
5309
592a252b 5310 /* PREFIX_VEX_0F3819 */
c0f3af97 5311 {
592d1631
L
5312 { Bad_Opcode },
5313 { Bad_Opcode },
6c30d220 5314 { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2) },
c0f3af97
L
5315 },
5316
592a252b 5317 /* PREFIX_VEX_0F381A */
c0f3af97 5318 {
592d1631
L
5319 { Bad_Opcode },
5320 { Bad_Opcode },
592a252b 5321 { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) },
c0f3af97
L
5322 },
5323
592a252b 5324 /* PREFIX_VEX_0F381C */
c0f3af97 5325 {
592d1631
L
5326 { Bad_Opcode },
5327 { Bad_Opcode },
6c30d220 5328 { VEX_W_TABLE (VEX_W_0F381C_P_2) },
c0f3af97
L
5329 },
5330
592a252b 5331 /* PREFIX_VEX_0F381D */
c0f3af97 5332 {
592d1631
L
5333 { Bad_Opcode },
5334 { Bad_Opcode },
6c30d220 5335 { VEX_W_TABLE (VEX_W_0F381D_P_2) },
c0f3af97
L
5336 },
5337
592a252b 5338 /* PREFIX_VEX_0F381E */
c0f3af97 5339 {
592d1631
L
5340 { Bad_Opcode },
5341 { Bad_Opcode },
6c30d220 5342 { VEX_W_TABLE (VEX_W_0F381E_P_2) },
c0f3af97
L
5343 },
5344
592a252b 5345 /* PREFIX_VEX_0F3820 */
c0f3af97 5346 {
592d1631
L
5347 { Bad_Opcode },
5348 { Bad_Opcode },
6c30d220 5349 { VEX_W_TABLE (VEX_W_0F3820_P_2) },
c0f3af97
L
5350 },
5351
592a252b 5352 /* PREFIX_VEX_0F3821 */
c0f3af97 5353 {
592d1631
L
5354 { Bad_Opcode },
5355 { Bad_Opcode },
6c30d220 5356 { VEX_W_TABLE (VEX_W_0F3821_P_2) },
c0f3af97
L
5357 },
5358
592a252b 5359 /* PREFIX_VEX_0F3822 */
c0f3af97 5360 {
592d1631
L
5361 { Bad_Opcode },
5362 { Bad_Opcode },
6c30d220 5363 { VEX_W_TABLE (VEX_W_0F3822_P_2) },
c0f3af97
L
5364 },
5365
592a252b 5366 /* PREFIX_VEX_0F3823 */
c0f3af97 5367 {
592d1631
L
5368 { Bad_Opcode },
5369 { Bad_Opcode },
6c30d220 5370 { VEX_W_TABLE (VEX_W_0F3823_P_2) },
c0f3af97
L
5371 },
5372
592a252b 5373 /* PREFIX_VEX_0F3824 */
c0f3af97 5374 {
592d1631
L
5375 { Bad_Opcode },
5376 { Bad_Opcode },
6c30d220 5377 { VEX_W_TABLE (VEX_W_0F3824_P_2) },
c0f3af97
L
5378 },
5379
592a252b 5380 /* PREFIX_VEX_0F3825 */
c0f3af97 5381 {
592d1631
L
5382 { Bad_Opcode },
5383 { Bad_Opcode },
6c30d220 5384 { VEX_W_TABLE (VEX_W_0F3825_P_2) },
c0f3af97
L
5385 },
5386
592a252b 5387 /* PREFIX_VEX_0F3828 */
c0f3af97 5388 {
592d1631
L
5389 { Bad_Opcode },
5390 { Bad_Opcode },
6c30d220 5391 { VEX_W_TABLE (VEX_W_0F3828_P_2) },
c0f3af97
L
5392 },
5393
592a252b 5394 /* PREFIX_VEX_0F3829 */
c0f3af97 5395 {
592d1631
L
5396 { Bad_Opcode },
5397 { Bad_Opcode },
6c30d220 5398 { VEX_W_TABLE (VEX_W_0F3829_P_2) },
c0f3af97
L
5399 },
5400
592a252b 5401 /* PREFIX_VEX_0F382A */
c0f3af97 5402 {
592d1631
L
5403 { Bad_Opcode },
5404 { Bad_Opcode },
592a252b 5405 { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) },
c0f3af97
L
5406 },
5407
592a252b 5408 /* PREFIX_VEX_0F382B */
c0f3af97 5409 {
592d1631
L
5410 { Bad_Opcode },
5411 { Bad_Opcode },
6c30d220 5412 { VEX_W_TABLE (VEX_W_0F382B_P_2) },
c0f3af97
L
5413 },
5414
592a252b 5415 /* PREFIX_VEX_0F382C */
c0f3af97 5416 {
592d1631
L
5417 { Bad_Opcode },
5418 { Bad_Opcode },
592a252b 5419 { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) },
c0f3af97
L
5420 },
5421
592a252b 5422 /* PREFIX_VEX_0F382D */
c0f3af97 5423 {
592d1631
L
5424 { Bad_Opcode },
5425 { Bad_Opcode },
592a252b 5426 { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) },
c0f3af97
L
5427 },
5428
592a252b 5429 /* PREFIX_VEX_0F382E */
c0f3af97 5430 {
592d1631
L
5431 { Bad_Opcode },
5432 { Bad_Opcode },
592a252b 5433 { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) },
c0f3af97
L
5434 },
5435
592a252b 5436 /* PREFIX_VEX_0F382F */
c0f3af97 5437 {
592d1631
L
5438 { Bad_Opcode },
5439 { Bad_Opcode },
592a252b 5440 { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) },
c0f3af97
L
5441 },
5442
592a252b 5443 /* PREFIX_VEX_0F3830 */
c0f3af97 5444 {
592d1631
L
5445 { Bad_Opcode },
5446 { Bad_Opcode },
6c30d220 5447 { VEX_W_TABLE (VEX_W_0F3830_P_2) },
c0f3af97
L
5448 },
5449
592a252b 5450 /* PREFIX_VEX_0F3831 */
c0f3af97 5451 {
592d1631
L
5452 { Bad_Opcode },
5453 { Bad_Opcode },
6c30d220 5454 { VEX_W_TABLE (VEX_W_0F3831_P_2) },
c0f3af97
L
5455 },
5456
592a252b 5457 /* PREFIX_VEX_0F3832 */
c0f3af97 5458 {
592d1631
L
5459 { Bad_Opcode },
5460 { Bad_Opcode },
6c30d220 5461 { VEX_W_TABLE (VEX_W_0F3832_P_2) },
c0f3af97
L
5462 },
5463
592a252b 5464 /* PREFIX_VEX_0F3833 */
c0f3af97 5465 {
592d1631
L
5466 { Bad_Opcode },
5467 { Bad_Opcode },
6c30d220 5468 { VEX_W_TABLE (VEX_W_0F3833_P_2) },
c0f3af97
L
5469 },
5470
592a252b 5471 /* PREFIX_VEX_0F3834 */
c0f3af97 5472 {
592d1631
L
5473 { Bad_Opcode },
5474 { Bad_Opcode },
6c30d220 5475 { VEX_W_TABLE (VEX_W_0F3834_P_2) },
c0f3af97
L
5476 },
5477
592a252b 5478 /* PREFIX_VEX_0F3835 */
c0f3af97 5479 {
592d1631
L
5480 { Bad_Opcode },
5481 { Bad_Opcode },
6c30d220
L
5482 { VEX_W_TABLE (VEX_W_0F3835_P_2) },
5483 },
5484
5485 /* PREFIX_VEX_0F3836 */
5486 {
5487 { Bad_Opcode },
5488 { Bad_Opcode },
5489 { VEX_LEN_TABLE (VEX_LEN_0F3836_P_2) },
c0f3af97
L
5490 },
5491
592a252b 5492 /* PREFIX_VEX_0F3837 */
c0f3af97 5493 {
592d1631
L
5494 { Bad_Opcode },
5495 { Bad_Opcode },
6c30d220 5496 { VEX_W_TABLE (VEX_W_0F3837_P_2) },
c0f3af97
L
5497 },
5498
592a252b 5499 /* PREFIX_VEX_0F3838 */
c0f3af97 5500 {
592d1631
L
5501 { Bad_Opcode },
5502 { Bad_Opcode },
6c30d220 5503 { VEX_W_TABLE (VEX_W_0F3838_P_2) },
c0f3af97
L
5504 },
5505
592a252b 5506 /* PREFIX_VEX_0F3839 */
c0f3af97 5507 {
592d1631
L
5508 { Bad_Opcode },
5509 { Bad_Opcode },
6c30d220 5510 { VEX_W_TABLE (VEX_W_0F3839_P_2) },
c0f3af97
L
5511 },
5512
592a252b 5513 /* PREFIX_VEX_0F383A */
c0f3af97 5514 {
592d1631
L
5515 { Bad_Opcode },
5516 { Bad_Opcode },
6c30d220 5517 { VEX_W_TABLE (VEX_W_0F383A_P_2) },
c0f3af97
L
5518 },
5519
592a252b 5520 /* PREFIX_VEX_0F383B */
c0f3af97 5521 {
592d1631
L
5522 { Bad_Opcode },
5523 { Bad_Opcode },
6c30d220 5524 { VEX_W_TABLE (VEX_W_0F383B_P_2) },
c0f3af97
L
5525 },
5526
592a252b 5527 /* PREFIX_VEX_0F383C */
c0f3af97 5528 {
592d1631
L
5529 { Bad_Opcode },
5530 { Bad_Opcode },
6c30d220 5531 { VEX_W_TABLE (VEX_W_0F383C_P_2) },
c0f3af97
L
5532 },
5533
592a252b 5534 /* PREFIX_VEX_0F383D */
c0f3af97 5535 {
592d1631
L
5536 { Bad_Opcode },
5537 { Bad_Opcode },
6c30d220 5538 { VEX_W_TABLE (VEX_W_0F383D_P_2) },
c0f3af97
L
5539 },
5540
592a252b 5541 /* PREFIX_VEX_0F383E */
c0f3af97 5542 {
592d1631
L
5543 { Bad_Opcode },
5544 { Bad_Opcode },
6c30d220 5545 { VEX_W_TABLE (VEX_W_0F383E_P_2) },
c0f3af97
L
5546 },
5547
592a252b 5548 /* PREFIX_VEX_0F383F */
c0f3af97 5549 {
592d1631
L
5550 { Bad_Opcode },
5551 { Bad_Opcode },
6c30d220 5552 { VEX_W_TABLE (VEX_W_0F383F_P_2) },
c0f3af97
L
5553 },
5554
592a252b 5555 /* PREFIX_VEX_0F3840 */
c0f3af97 5556 {
592d1631
L
5557 { Bad_Opcode },
5558 { Bad_Opcode },
6c30d220 5559 { VEX_W_TABLE (VEX_W_0F3840_P_2) },
c0f3af97
L
5560 },
5561
592a252b 5562 /* PREFIX_VEX_0F3841 */
c0f3af97 5563 {
592d1631
L
5564 { Bad_Opcode },
5565 { Bad_Opcode },
592a252b 5566 { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) },
c0f3af97
L
5567 },
5568
6c30d220
L
5569 /* PREFIX_VEX_0F3845 */
5570 {
5571 { Bad_Opcode },
5572 { Bad_Opcode },
5573 { "vpsrlv%LW", { XM, Vex, EXx } },
5574 },
5575
5576 /* PREFIX_VEX_0F3846 */
5577 {
5578 { Bad_Opcode },
5579 { Bad_Opcode },
5580 { VEX_W_TABLE (VEX_W_0F3846_P_2) },
5581 },
5582
5583 /* PREFIX_VEX_0F3847 */
5584 {
5585 { Bad_Opcode },
5586 { Bad_Opcode },
5587 { "vpsllv%LW", { XM, Vex, EXx } },
5588 },
5589
5590 /* PREFIX_VEX_0F3858 */
5591 {
5592 { Bad_Opcode },
5593 { Bad_Opcode },
5594 { VEX_W_TABLE (VEX_W_0F3858_P_2) },
5595 },
5596
5597 /* PREFIX_VEX_0F3859 */
5598 {
5599 { Bad_Opcode },
5600 { Bad_Opcode },
5601 { VEX_W_TABLE (VEX_W_0F3859_P_2) },
5602 },
5603
5604 /* PREFIX_VEX_0F385A */
5605 {
5606 { Bad_Opcode },
5607 { Bad_Opcode },
5608 { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) },
5609 },
5610
5611 /* PREFIX_VEX_0F3878 */
5612 {
5613 { Bad_Opcode },
5614 { Bad_Opcode },
5615 { VEX_W_TABLE (VEX_W_0F3878_P_2) },
5616 },
5617
5618 /* PREFIX_VEX_0F3879 */
5619 {
5620 { Bad_Opcode },
5621 { Bad_Opcode },
5622 { VEX_W_TABLE (VEX_W_0F3879_P_2) },
5623 },
5624
5625 /* PREFIX_VEX_0F388C */
5626 {
5627 { Bad_Opcode },
5628 { Bad_Opcode },
f7002f42 5629 { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) },
6c30d220
L
5630 },
5631
5632 /* PREFIX_VEX_0F388E */
5633 {
5634 { Bad_Opcode },
5635 { Bad_Opcode },
f7002f42 5636 { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) },
6c30d220
L
5637 },
5638
5639 /* PREFIX_VEX_0F3890 */
5640 {
5641 { Bad_Opcode },
5642 { Bad_Opcode },
5643 { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex } },
5644 },
5645
5646 /* PREFIX_VEX_0F3891 */
5647 {
5648 { Bad_Opcode },
5649 { Bad_Opcode },
5650 { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ } },
5651 },
5652
5653 /* PREFIX_VEX_0F3892 */
5654 {
5655 { Bad_Opcode },
5656 { Bad_Opcode },
5657 { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex } },
5658 },
5659
5660 /* PREFIX_VEX_0F3893 */
5661 {
5662 { Bad_Opcode },
5663 { Bad_Opcode },
5664 { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ } },
5665 },
5666
592a252b 5667 /* PREFIX_VEX_0F3896 */
a5ff0eb2 5668 {
592d1631
L
5669 { Bad_Opcode },
5670 { Bad_Opcode },
0bfee649 5671 { "vfmaddsub132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
5672 },
5673
592a252b 5674 /* PREFIX_VEX_0F3897 */
a5ff0eb2 5675 {
592d1631
L
5676 { Bad_Opcode },
5677 { Bad_Opcode },
0bfee649 5678 { "vfmsubadd132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
5679 },
5680
592a252b 5681 /* PREFIX_VEX_0F3898 */
a5ff0eb2 5682 {
592d1631
L
5683 { Bad_Opcode },
5684 { Bad_Opcode },
0bfee649 5685 { "vfmadd132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
5686 },
5687
592a252b 5688 /* PREFIX_VEX_0F3899 */
a5ff0eb2 5689 {
592d1631
L
5690 { Bad_Opcode },
5691 { Bad_Opcode },
1c480963 5692 { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
a5ff0eb2
L
5693 },
5694
592a252b 5695 /* PREFIX_VEX_0F389A */
a5ff0eb2 5696 {
592d1631
L
5697 { Bad_Opcode },
5698 { Bad_Opcode },
0bfee649 5699 { "vfmsub132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
5700 },
5701
592a252b 5702 /* PREFIX_VEX_0F389B */
c0f3af97 5703 {
592d1631
L
5704 { Bad_Opcode },
5705 { Bad_Opcode },
1c480963 5706 { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5707 },
5708
592a252b 5709 /* PREFIX_VEX_0F389C */
c0f3af97 5710 {
592d1631
L
5711 { Bad_Opcode },
5712 { Bad_Opcode },
0bfee649 5713 { "vfnmadd132p%XW", { XM, Vex, EXx } },
c0f3af97
L
5714 },
5715
592a252b 5716 /* PREFIX_VEX_0F389D */
c0f3af97 5717 {
592d1631
L
5718 { Bad_Opcode },
5719 { Bad_Opcode },
1c480963 5720 { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5721 },
5722
592a252b 5723 /* PREFIX_VEX_0F389E */
c0f3af97 5724 {
592d1631
L
5725 { Bad_Opcode },
5726 { Bad_Opcode },
0bfee649 5727 { "vfnmsub132p%XW", { XM, Vex, EXx } },
c0f3af97
L
5728 },
5729
592a252b 5730 /* PREFIX_VEX_0F389F */
c0f3af97 5731 {
592d1631
L
5732 { Bad_Opcode },
5733 { Bad_Opcode },
1c480963 5734 { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5735 },
5736
592a252b 5737 /* PREFIX_VEX_0F38A6 */
c0f3af97 5738 {
592d1631
L
5739 { Bad_Opcode },
5740 { Bad_Opcode },
0bfee649 5741 { "vfmaddsub213p%XW", { XM, Vex, EXx } },
592d1631 5742 { Bad_Opcode },
c0f3af97
L
5743 },
5744
592a252b 5745 /* PREFIX_VEX_0F38A7 */
c0f3af97 5746 {
592d1631
L
5747 { Bad_Opcode },
5748 { Bad_Opcode },
0bfee649 5749 { "vfmsubadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
5750 },
5751
592a252b 5752 /* PREFIX_VEX_0F38A8 */
c0f3af97 5753 {
592d1631
L
5754 { Bad_Opcode },
5755 { Bad_Opcode },
0bfee649 5756 { "vfmadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
5757 },
5758
592a252b 5759 /* PREFIX_VEX_0F38A9 */
c0f3af97 5760 {
592d1631
L
5761 { Bad_Opcode },
5762 { Bad_Opcode },
1c480963 5763 { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5764 },
5765
592a252b 5766 /* PREFIX_VEX_0F38AA */
c0f3af97 5767 {
592d1631
L
5768 { Bad_Opcode },
5769 { Bad_Opcode },
0bfee649 5770 { "vfmsub213p%XW", { XM, Vex, EXx } },
c0f3af97
L
5771 },
5772
592a252b 5773 /* PREFIX_VEX_0F38AB */
c0f3af97 5774 {
592d1631
L
5775 { Bad_Opcode },
5776 { Bad_Opcode },
1c480963 5777 { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5778 },
5779
592a252b 5780 /* PREFIX_VEX_0F38AC */
c0f3af97 5781 {
592d1631
L
5782 { Bad_Opcode },
5783 { Bad_Opcode },
0bfee649 5784 { "vfnmadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
5785 },
5786
592a252b 5787 /* PREFIX_VEX_0F38AD */
c0f3af97 5788 {
592d1631
L
5789 { Bad_Opcode },
5790 { Bad_Opcode },
1c480963 5791 { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5792 },
5793
592a252b 5794 /* PREFIX_VEX_0F38AE */
c0f3af97 5795 {
592d1631
L
5796 { Bad_Opcode },
5797 { Bad_Opcode },
0bfee649 5798 { "vfnmsub213p%XW", { XM, Vex, EXx } },
c0f3af97
L
5799 },
5800
592a252b 5801 /* PREFIX_VEX_0F38AF */
c0f3af97 5802 {
592d1631
L
5803 { Bad_Opcode },
5804 { Bad_Opcode },
1c480963 5805 { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5806 },
5807
592a252b 5808 /* PREFIX_VEX_0F38B6 */
c0f3af97 5809 {
592d1631
L
5810 { Bad_Opcode },
5811 { Bad_Opcode },
0bfee649 5812 { "vfmaddsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
5813 },
5814
592a252b 5815 /* PREFIX_VEX_0F38B7 */
c0f3af97 5816 {
592d1631
L
5817 { Bad_Opcode },
5818 { Bad_Opcode },
0bfee649 5819 { "vfmsubadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
5820 },
5821
592a252b 5822 /* PREFIX_VEX_0F38B8 */
c0f3af97 5823 {
592d1631
L
5824 { Bad_Opcode },
5825 { Bad_Opcode },
0bfee649 5826 { "vfmadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
5827 },
5828
592a252b 5829 /* PREFIX_VEX_0F38B9 */
c0f3af97 5830 {
592d1631
L
5831 { Bad_Opcode },
5832 { Bad_Opcode },
1c480963 5833 { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5834 },
5835
592a252b 5836 /* PREFIX_VEX_0F38BA */
c0f3af97 5837 {
592d1631
L
5838 { Bad_Opcode },
5839 { Bad_Opcode },
0bfee649 5840 { "vfmsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
5841 },
5842
592a252b 5843 /* PREFIX_VEX_0F38BB */
c0f3af97 5844 {
592d1631
L
5845 { Bad_Opcode },
5846 { Bad_Opcode },
1c480963 5847 { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5848 },
5849
592a252b 5850 /* PREFIX_VEX_0F38BC */
c0f3af97 5851 {
592d1631
L
5852 { Bad_Opcode },
5853 { Bad_Opcode },
0bfee649 5854 { "vfnmadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
5855 },
5856
592a252b 5857 /* PREFIX_VEX_0F38BD */
c0f3af97 5858 {
592d1631
L
5859 { Bad_Opcode },
5860 { Bad_Opcode },
1c480963 5861 { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5862 },
5863
592a252b 5864 /* PREFIX_VEX_0F38BE */
c0f3af97 5865 {
592d1631
L
5866 { Bad_Opcode },
5867 { Bad_Opcode },
0bfee649 5868 { "vfnmsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
5869 },
5870
592a252b 5871 /* PREFIX_VEX_0F38BF */
c0f3af97 5872 {
592d1631
L
5873 { Bad_Opcode },
5874 { Bad_Opcode },
1c480963 5875 { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5876 },
5877
592a252b 5878 /* PREFIX_VEX_0F38DB */
c0f3af97 5879 {
592d1631
L
5880 { Bad_Opcode },
5881 { Bad_Opcode },
592a252b 5882 { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
c0f3af97
L
5883 },
5884
592a252b 5885 /* PREFIX_VEX_0F38DC */
c0f3af97 5886 {
592d1631
L
5887 { Bad_Opcode },
5888 { Bad_Opcode },
592a252b 5889 { VEX_LEN_TABLE (VEX_LEN_0F38DC_P_2) },
c0f3af97
L
5890 },
5891
592a252b 5892 /* PREFIX_VEX_0F38DD */
c0f3af97 5893 {
592d1631
L
5894 { Bad_Opcode },
5895 { Bad_Opcode },
592a252b 5896 { VEX_LEN_TABLE (VEX_LEN_0F38DD_P_2) },
c0f3af97
L
5897 },
5898
592a252b 5899 /* PREFIX_VEX_0F38DE */
c0f3af97 5900 {
592d1631
L
5901 { Bad_Opcode },
5902 { Bad_Opcode },
592a252b 5903 { VEX_LEN_TABLE (VEX_LEN_0F38DE_P_2) },
c0f3af97
L
5904 },
5905
592a252b 5906 /* PREFIX_VEX_0F38DF */
c0f3af97 5907 {
592d1631
L
5908 { Bad_Opcode },
5909 { Bad_Opcode },
592a252b 5910 { VEX_LEN_TABLE (VEX_LEN_0F38DF_P_2) },
c0f3af97
L
5911 },
5912
f12dc422
L
5913 /* PREFIX_VEX_0F38F2 */
5914 {
5915 { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
5916 },
5917
5918 /* PREFIX_VEX_0F38F3_REG_1 */
5919 {
5920 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
5921 },
5922
5923 /* PREFIX_VEX_0F38F3_REG_2 */
5924 {
5925 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
5926 },
5927
5928 /* PREFIX_VEX_0F38F3_REG_3 */
5929 {
5930 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
5931 },
5932
6c30d220
L
5933 /* PREFIX_VEX_0F38F5 */
5934 {
5935 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) },
5936 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) },
5937 { Bad_Opcode },
5938 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) },
5939 },
5940
5941 /* PREFIX_VEX_0F38F6 */
5942 {
5943 { Bad_Opcode },
5944 { Bad_Opcode },
5945 { Bad_Opcode },
5946 { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) },
5947 },
5948
f12dc422
L
5949 /* PREFIX_VEX_0F38F7 */
5950 {
5951 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
6c30d220
L
5952 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) },
5953 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) },
5954 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) },
5955 },
5956
5957 /* PREFIX_VEX_0F3A00 */
5958 {
5959 { Bad_Opcode },
5960 { Bad_Opcode },
5961 { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) },
5962 },
5963
5964 /* PREFIX_VEX_0F3A01 */
5965 {
5966 { Bad_Opcode },
5967 { Bad_Opcode },
5968 { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) },
5969 },
5970
5971 /* PREFIX_VEX_0F3A02 */
5972 {
5973 { Bad_Opcode },
5974 { Bad_Opcode },
5975 { VEX_W_TABLE (VEX_W_0F3A02_P_2) },
f12dc422
L
5976 },
5977
592a252b 5978 /* PREFIX_VEX_0F3A04 */
c0f3af97 5979 {
592d1631
L
5980 { Bad_Opcode },
5981 { Bad_Opcode },
592a252b 5982 { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
c0f3af97
L
5983 },
5984
592a252b 5985 /* PREFIX_VEX_0F3A05 */
c0f3af97 5986 {
592d1631
L
5987 { Bad_Opcode },
5988 { Bad_Opcode },
592a252b 5989 { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
c0f3af97
L
5990 },
5991
592a252b 5992 /* PREFIX_VEX_0F3A06 */
c0f3af97 5993 {
592d1631
L
5994 { Bad_Opcode },
5995 { Bad_Opcode },
592a252b 5996 { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
c0f3af97
L
5997 },
5998
592a252b 5999 /* PREFIX_VEX_0F3A08 */
c0f3af97 6000 {
592d1631
L
6001 { Bad_Opcode },
6002 { Bad_Opcode },
592a252b 6003 { VEX_W_TABLE (VEX_W_0F3A08_P_2) },
c0f3af97
L
6004 },
6005
592a252b 6006 /* PREFIX_VEX_0F3A09 */
c0f3af97 6007 {
592d1631
L
6008 { Bad_Opcode },
6009 { Bad_Opcode },
592a252b 6010 { VEX_W_TABLE (VEX_W_0F3A09_P_2) },
c0f3af97
L
6011 },
6012
592a252b 6013 /* PREFIX_VEX_0F3A0A */
c0f3af97 6014 {
592d1631
L
6015 { Bad_Opcode },
6016 { Bad_Opcode },
592a252b 6017 { VEX_LEN_TABLE (VEX_LEN_0F3A0A_P_2) },
0bfee649
L
6018 },
6019
592a252b 6020 /* PREFIX_VEX_0F3A0B */
0bfee649 6021 {
592d1631
L
6022 { Bad_Opcode },
6023 { Bad_Opcode },
592a252b 6024 { VEX_LEN_TABLE (VEX_LEN_0F3A0B_P_2) },
0bfee649
L
6025 },
6026
592a252b 6027 /* PREFIX_VEX_0F3A0C */
0bfee649 6028 {
592d1631
L
6029 { Bad_Opcode },
6030 { Bad_Opcode },
592a252b 6031 { VEX_W_TABLE (VEX_W_0F3A0C_P_2) },
0bfee649
L
6032 },
6033
592a252b 6034 /* PREFIX_VEX_0F3A0D */
0bfee649 6035 {
592d1631
L
6036 { Bad_Opcode },
6037 { Bad_Opcode },
592a252b 6038 { VEX_W_TABLE (VEX_W_0F3A0D_P_2) },
c0f3af97
L
6039 },
6040
592a252b 6041 /* PREFIX_VEX_0F3A0E */
0bfee649 6042 {
592d1631
L
6043 { Bad_Opcode },
6044 { Bad_Opcode },
6c30d220 6045 { VEX_W_TABLE (VEX_W_0F3A0E_P_2) },
0bfee649
L
6046 },
6047
592a252b 6048 /* PREFIX_VEX_0F3A0F */
0bfee649 6049 {
592d1631
L
6050 { Bad_Opcode },
6051 { Bad_Opcode },
6c30d220 6052 { VEX_W_TABLE (VEX_W_0F3A0F_P_2) },
0bfee649
L
6053 },
6054
592a252b 6055 /* PREFIX_VEX_0F3A14 */
0bfee649 6056 {
592d1631
L
6057 { Bad_Opcode },
6058 { Bad_Opcode },
592a252b 6059 { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
0bfee649
L
6060 },
6061
592a252b 6062 /* PREFIX_VEX_0F3A15 */
0bfee649 6063 {
592d1631
L
6064 { Bad_Opcode },
6065 { Bad_Opcode },
592a252b 6066 { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
0bfee649
L
6067 },
6068
592a252b 6069 /* PREFIX_VEX_0F3A16 */
c0f3af97 6070 {
592d1631
L
6071 { Bad_Opcode },
6072 { Bad_Opcode },
592a252b 6073 { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
c0f3af97
L
6074 },
6075
592a252b 6076 /* PREFIX_VEX_0F3A17 */
c0f3af97 6077 {
592d1631
L
6078 { Bad_Opcode },
6079 { Bad_Opcode },
592a252b 6080 { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
c0f3af97
L
6081 },
6082
592a252b 6083 /* PREFIX_VEX_0F3A18 */
c0f3af97 6084 {
592d1631
L
6085 { Bad_Opcode },
6086 { Bad_Opcode },
592a252b 6087 { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
c0f3af97
L
6088 },
6089
592a252b 6090 /* PREFIX_VEX_0F3A19 */
c0f3af97 6091 {
592d1631
L
6092 { Bad_Opcode },
6093 { Bad_Opcode },
592a252b 6094 { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
c0f3af97
L
6095 },
6096
592a252b 6097 /* PREFIX_VEX_0F3A1D */
c7b8aa3a
L
6098 {
6099 { Bad_Opcode },
6100 { Bad_Opcode },
6101 { "vcvtps2ph", { EXxmmq, XM, Ib } },
6102 },
6103
592a252b 6104 /* PREFIX_VEX_0F3A20 */
c0f3af97 6105 {
592d1631
L
6106 { Bad_Opcode },
6107 { Bad_Opcode },
592a252b 6108 { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
c0f3af97
L
6109 },
6110
592a252b 6111 /* PREFIX_VEX_0F3A21 */
c0f3af97 6112 {
592d1631
L
6113 { Bad_Opcode },
6114 { Bad_Opcode },
592a252b 6115 { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
c0f3af97
L
6116 },
6117
592a252b 6118 /* PREFIX_VEX_0F3A22 */
0bfee649 6119 {
592d1631
L
6120 { Bad_Opcode },
6121 { Bad_Opcode },
592a252b 6122 { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
0bfee649
L
6123 },
6124
43234a1e
L
6125 /* PREFIX_VEX_0F3A30 */
6126 {
6127 { Bad_Opcode },
6128 { Bad_Opcode },
6129 { VEX_LEN_TABLE (VEX_LEN_0F3A30_P_2) },
6130 },
6131
6132 /* PREFIX_VEX_0F3A32 */
6133 {
6134 { Bad_Opcode },
6135 { Bad_Opcode },
6136 { VEX_LEN_TABLE (VEX_LEN_0F3A32_P_2) },
6137 },
6138
6c30d220
L
6139 /* PREFIX_VEX_0F3A38 */
6140 {
6141 { Bad_Opcode },
6142 { Bad_Opcode },
6143 { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) },
6144 },
6145
6146 /* PREFIX_VEX_0F3A39 */
6147 {
6148 { Bad_Opcode },
6149 { Bad_Opcode },
6150 { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) },
6151 },
6152
592a252b 6153 /* PREFIX_VEX_0F3A40 */
c0f3af97 6154 {
592d1631
L
6155 { Bad_Opcode },
6156 { Bad_Opcode },
592a252b 6157 { VEX_W_TABLE (VEX_W_0F3A40_P_2) },
c0f3af97
L
6158 },
6159
592a252b 6160 /* PREFIX_VEX_0F3A41 */
c0f3af97 6161 {
592d1631
L
6162 { Bad_Opcode },
6163 { Bad_Opcode },
592a252b 6164 { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
c0f3af97
L
6165 },
6166
592a252b 6167 /* PREFIX_VEX_0F3A42 */
c0f3af97 6168 {
592d1631
L
6169 { Bad_Opcode },
6170 { Bad_Opcode },
6c30d220 6171 { VEX_W_TABLE (VEX_W_0F3A42_P_2) },
c0f3af97
L
6172 },
6173
592a252b 6174 /* PREFIX_VEX_0F3A44 */
ce2f5b3c 6175 {
592d1631
L
6176 { Bad_Opcode },
6177 { Bad_Opcode },
592a252b 6178 { VEX_LEN_TABLE (VEX_LEN_0F3A44_P_2) },
ce2f5b3c
L
6179 },
6180
6c30d220
L
6181 /* PREFIX_VEX_0F3A46 */
6182 {
6183 { Bad_Opcode },
6184 { Bad_Opcode },
6185 { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) },
6186 },
6187
592a252b 6188 /* PREFIX_VEX_0F3A48 */
a683cc34
SP
6189 {
6190 { Bad_Opcode },
6191 { Bad_Opcode },
592a252b 6192 { VEX_W_TABLE (VEX_W_0F3A48_P_2) },
a683cc34
SP
6193 },
6194
592a252b 6195 /* PREFIX_VEX_0F3A49 */
a683cc34
SP
6196 {
6197 { Bad_Opcode },
6198 { Bad_Opcode },
592a252b 6199 { VEX_W_TABLE (VEX_W_0F3A49_P_2) },
a683cc34
SP
6200 },
6201
592a252b 6202 /* PREFIX_VEX_0F3A4A */
c0f3af97 6203 {
592d1631
L
6204 { Bad_Opcode },
6205 { Bad_Opcode },
592a252b 6206 { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
c0f3af97
L
6207 },
6208
592a252b 6209 /* PREFIX_VEX_0F3A4B */
c0f3af97 6210 {
592d1631
L
6211 { Bad_Opcode },
6212 { Bad_Opcode },
592a252b 6213 { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
c0f3af97
L
6214 },
6215
592a252b 6216 /* PREFIX_VEX_0F3A4C */
c0f3af97 6217 {
592d1631
L
6218 { Bad_Opcode },
6219 { Bad_Opcode },
6c30d220 6220 { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
c0f3af97
L
6221 },
6222
592a252b 6223 /* PREFIX_VEX_0F3A5C */
922d8de8 6224 {
592d1631
L
6225 { Bad_Opcode },
6226 { Bad_Opcode },
206c2556 6227 { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6228 },
6229
592a252b 6230 /* PREFIX_VEX_0F3A5D */
922d8de8 6231 {
592d1631
L
6232 { Bad_Opcode },
6233 { Bad_Opcode },
206c2556 6234 { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6235 },
6236
592a252b 6237 /* PREFIX_VEX_0F3A5E */
922d8de8 6238 {
592d1631
L
6239 { Bad_Opcode },
6240 { Bad_Opcode },
206c2556 6241 { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6242 },
6243
592a252b 6244 /* PREFIX_VEX_0F3A5F */
922d8de8 6245 {
592d1631
L
6246 { Bad_Opcode },
6247 { Bad_Opcode },
206c2556 6248 { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6249 },
6250
592a252b 6251 /* PREFIX_VEX_0F3A60 */
c0f3af97 6252 {
592d1631
L
6253 { Bad_Opcode },
6254 { Bad_Opcode },
592a252b 6255 { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
592d1631 6256 { Bad_Opcode },
c0f3af97
L
6257 },
6258
592a252b 6259 /* PREFIX_VEX_0F3A61 */
c0f3af97 6260 {
592d1631
L
6261 { Bad_Opcode },
6262 { Bad_Opcode },
592a252b 6263 { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
c0f3af97
L
6264 },
6265
592a252b 6266 /* PREFIX_VEX_0F3A62 */
c0f3af97 6267 {
592d1631
L
6268 { Bad_Opcode },
6269 { Bad_Opcode },
592a252b 6270 { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
c0f3af97
L
6271 },
6272
592a252b 6273 /* PREFIX_VEX_0F3A63 */
c0f3af97 6274 {
592d1631
L
6275 { Bad_Opcode },
6276 { Bad_Opcode },
592a252b 6277 { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
c0f3af97 6278 },
a5ff0eb2 6279
592a252b 6280 /* PREFIX_VEX_0F3A68 */
922d8de8 6281 {
592d1631
L
6282 { Bad_Opcode },
6283 { Bad_Opcode },
206c2556 6284 { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6285 },
6286
592a252b 6287 /* PREFIX_VEX_0F3A69 */
922d8de8 6288 {
592d1631
L
6289 { Bad_Opcode },
6290 { Bad_Opcode },
206c2556 6291 { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6292 },
6293
592a252b 6294 /* PREFIX_VEX_0F3A6A */
922d8de8 6295 {
592d1631
L
6296 { Bad_Opcode },
6297 { Bad_Opcode },
592a252b 6298 { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) },
922d8de8
DR
6299 },
6300
592a252b 6301 /* PREFIX_VEX_0F3A6B */
922d8de8 6302 {
592d1631
L
6303 { Bad_Opcode },
6304 { Bad_Opcode },
592a252b 6305 { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) },
922d8de8
DR
6306 },
6307
592a252b 6308 /* PREFIX_VEX_0F3A6C */
922d8de8 6309 {
592d1631
L
6310 { Bad_Opcode },
6311 { Bad_Opcode },
206c2556 6312 { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6313 },
6314
592a252b 6315 /* PREFIX_VEX_0F3A6D */
922d8de8 6316 {
592d1631
L
6317 { Bad_Opcode },
6318 { Bad_Opcode },
206c2556 6319 { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6320 },
6321
592a252b 6322 /* PREFIX_VEX_0F3A6E */
922d8de8 6323 {
592d1631
L
6324 { Bad_Opcode },
6325 { Bad_Opcode },
592a252b 6326 { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) },
922d8de8
DR
6327 },
6328
592a252b 6329 /* PREFIX_VEX_0F3A6F */
922d8de8 6330 {
592d1631
L
6331 { Bad_Opcode },
6332 { Bad_Opcode },
592a252b 6333 { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) },
922d8de8
DR
6334 },
6335
592a252b 6336 /* PREFIX_VEX_0F3A78 */
922d8de8 6337 {
592d1631
L
6338 { Bad_Opcode },
6339 { Bad_Opcode },
206c2556 6340 { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6341 },
6342
592a252b 6343 /* PREFIX_VEX_0F3A79 */
922d8de8 6344 {
592d1631
L
6345 { Bad_Opcode },
6346 { Bad_Opcode },
206c2556 6347 { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6348 },
6349
592a252b 6350 /* PREFIX_VEX_0F3A7A */
922d8de8 6351 {
592d1631
L
6352 { Bad_Opcode },
6353 { Bad_Opcode },
592a252b 6354 { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) },
922d8de8
DR
6355 },
6356
592a252b 6357 /* PREFIX_VEX_0F3A7B */
922d8de8 6358 {
592d1631
L
6359 { Bad_Opcode },
6360 { Bad_Opcode },
592a252b 6361 { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) },
922d8de8
DR
6362 },
6363
592a252b 6364 /* PREFIX_VEX_0F3A7C */
922d8de8 6365 {
592d1631
L
6366 { Bad_Opcode },
6367 { Bad_Opcode },
206c2556 6368 { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631 6369 { Bad_Opcode },
922d8de8
DR
6370 },
6371
592a252b 6372 /* PREFIX_VEX_0F3A7D */
922d8de8 6373 {
592d1631
L
6374 { Bad_Opcode },
6375 { Bad_Opcode },
206c2556 6376 { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6377 },
6378
592a252b 6379 /* PREFIX_VEX_0F3A7E */
922d8de8 6380 {
592d1631
L
6381 { Bad_Opcode },
6382 { Bad_Opcode },
592a252b 6383 { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) },
922d8de8
DR
6384 },
6385
592a252b 6386 /* PREFIX_VEX_0F3A7F */
922d8de8 6387 {
592d1631
L
6388 { Bad_Opcode },
6389 { Bad_Opcode },
592a252b 6390 { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) },
922d8de8
DR
6391 },
6392
592a252b 6393 /* PREFIX_VEX_0F3ADF */
a5ff0eb2 6394 {
592d1631
L
6395 { Bad_Opcode },
6396 { Bad_Opcode },
592a252b 6397 { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
a5ff0eb2 6398 },
6c30d220
L
6399
6400 /* PREFIX_VEX_0F3AF0 */
6401 {
6402 { Bad_Opcode },
6403 { Bad_Opcode },
6404 { Bad_Opcode },
6405 { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) },
6406 },
43234a1e
L
6407
6408#define NEED_PREFIX_TABLE
6409#include "i386-dis-evex.h"
6410#undef NEED_PREFIX_TABLE
c0f3af97
L
6411};
6412
6413static const struct dis386 x86_64_table[][2] = {
6414 /* X86_64_06 */
6415 {
d9e3625e 6416 { "pushP", { es } },
c0f3af97
L
6417 },
6418
6419 /* X86_64_07 */
6420 {
d9e3625e 6421 { "popP", { es } },
c0f3af97
L
6422 },
6423
6424 /* X86_64_0D */
6425 {
d9e3625e 6426 { "pushP", { cs } },
c0f3af97
L
6427 },
6428
6429 /* X86_64_16 */
6430 {
d9e3625e 6431 { "pushP", { ss } },
c0f3af97
L
6432 },
6433
6434 /* X86_64_17 */
6435 {
d9e3625e 6436 { "popP", { ss } },
c0f3af97
L
6437 },
6438
6439 /* X86_64_1E */
6440 {
d9e3625e 6441 { "pushP", { ds } },
c0f3af97
L
6442 },
6443
6444 /* X86_64_1F */
6445 {
d9e3625e 6446 { "popP", { ds } },
c0f3af97
L
6447 },
6448
6449 /* X86_64_27 */
6450 {
6451 { "daa", { XX } },
c0f3af97
L
6452 },
6453
6454 /* X86_64_2F */
6455 {
6456 { "das", { XX } },
c0f3af97
L
6457 },
6458
6459 /* X86_64_37 */
6460 {
6461 { "aaa", { XX } },
c0f3af97
L
6462 },
6463
6464 /* X86_64_3F */
6465 {
6466 { "aas", { XX } },
c0f3af97
L
6467 },
6468
6469 /* X86_64_60 */
6470 {
d9e3625e 6471 { "pushaP", { XX } },
c0f3af97
L
6472 },
6473
6474 /* X86_64_61 */
6475 {
d9e3625e 6476 { "popaP", { XX } },
c0f3af97
L
6477 },
6478
6479 /* X86_64_62 */
6480 {
6481 { MOD_TABLE (MOD_62_32BIT) },
43234a1e 6482 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
6483 },
6484
6485 /* X86_64_63 */
6486 {
6487 { "arpl", { Ew, Gw } },
6488 { "movs{lq|xd}", { Gv, Ed } },
6489 },
6490
6491 /* X86_64_6D */
6492 {
6493 { "ins{R|}", { Yzr, indirDX } },
6494 { "ins{G|}", { Yzr, indirDX } },
6495 },
6496
6497 /* X86_64_6F */
6498 {
6499 { "outs{R|}", { indirDXr, Xz } },
6500 { "outs{G|}", { indirDXr, Xz } },
6501 },
6502
6503 /* X86_64_9A */
6504 {
6505 { "Jcall{T|}", { Ap } },
c0f3af97
L
6506 },
6507
6508 /* X86_64_C4 */
6509 {
6510 { MOD_TABLE (MOD_C4_32BIT) },
6511 { VEX_C4_TABLE (VEX_0F) },
6512 },
6513
6514 /* X86_64_C5 */
6515 {
6516 { MOD_TABLE (MOD_C5_32BIT) },
6517 { VEX_C5_TABLE (VEX_0F) },
6518 },
6519
6520 /* X86_64_CE */
6521 {
6522 { "into", { XX } },
c0f3af97
L
6523 },
6524
6525 /* X86_64_D4 */
6526 {
e3949f17 6527 { "aam", { Ib } },
c0f3af97
L
6528 },
6529
6530 /* X86_64_D5 */
6531 {
e3949f17 6532 { "aad", { Ib } },
c0f3af97
L
6533 },
6534
6535 /* X86_64_EA */
6536 {
6537 { "Jjmp{T|}", { Ap } },
c0f3af97
L
6538 },
6539
6540 /* X86_64_0F01_REG_0 */
6541 {
6542 { "sgdt{Q|IQ}", { M } },
6543 { "sgdt", { M } },
6544 },
6545
6546 /* X86_64_0F01_REG_1 */
6547 {
6548 { "sidt{Q|IQ}", { M } },
6549 { "sidt", { M } },
6550 },
6551
6552 /* X86_64_0F01_REG_2 */
6553 {
6554 { "lgdt{Q|Q}", { M } },
6555 { "lgdt", { M } },
6556 },
6557
6558 /* X86_64_0F01_REG_3 */
6559 {
6560 { "lidt{Q|Q}", { M } },
6561 { "lidt", { M } },
6562 },
6563};
6564
6565static const struct dis386 three_byte_table[][256] = {
c1e679ec
DR
6566
6567 /* THREE_BYTE_0F38 */
c0f3af97
L
6568 {
6569 /* 00 */
c1e679ec
DR
6570 { "pshufb", { MX, EM } },
6571 { "phaddw", { MX, EM } },
6572 { "phaddd", { MX, EM } },
6573 { "phaddsw", { MX, EM } },
6574 { "pmaddubsw", { MX, EM } },
6575 { "phsubw", { MX, EM } },
6576 { "phsubd", { MX, EM } },
6577 { "phsubsw", { MX, EM } },
c0f3af97 6578 /* 08 */
c1e679ec
DR
6579 { "psignb", { MX, EM } },
6580 { "psignw", { MX, EM } },
6581 { "psignd", { MX, EM } },
6582 { "pmulhrsw", { MX, EM } },
592d1631
L
6583 { Bad_Opcode },
6584 { Bad_Opcode },
6585 { Bad_Opcode },
6586 { Bad_Opcode },
f88c9eb0
SP
6587 /* 10 */
6588 { PREFIX_TABLE (PREFIX_0F3810) },
592d1631
L
6589 { Bad_Opcode },
6590 { Bad_Opcode },
6591 { Bad_Opcode },
f88c9eb0
SP
6592 { PREFIX_TABLE (PREFIX_0F3814) },
6593 { PREFIX_TABLE (PREFIX_0F3815) },
592d1631 6594 { Bad_Opcode },
f88c9eb0
SP
6595 { PREFIX_TABLE (PREFIX_0F3817) },
6596 /* 18 */
592d1631
L
6597 { Bad_Opcode },
6598 { Bad_Opcode },
6599 { Bad_Opcode },
6600 { Bad_Opcode },
f88c9eb0
SP
6601 { "pabsb", { MX, EM } },
6602 { "pabsw", { MX, EM } },
6603 { "pabsd", { MX, EM } },
592d1631 6604 { Bad_Opcode },
f88c9eb0
SP
6605 /* 20 */
6606 { PREFIX_TABLE (PREFIX_0F3820) },
6607 { PREFIX_TABLE (PREFIX_0F3821) },
6608 { PREFIX_TABLE (PREFIX_0F3822) },
6609 { PREFIX_TABLE (PREFIX_0F3823) },
6610 { PREFIX_TABLE (PREFIX_0F3824) },
6611 { PREFIX_TABLE (PREFIX_0F3825) },
592d1631
L
6612 { Bad_Opcode },
6613 { Bad_Opcode },
f88c9eb0
SP
6614 /* 28 */
6615 { PREFIX_TABLE (PREFIX_0F3828) },
6616 { PREFIX_TABLE (PREFIX_0F3829) },
6617 { PREFIX_TABLE (PREFIX_0F382A) },
6618 { PREFIX_TABLE (PREFIX_0F382B) },
592d1631
L
6619 { Bad_Opcode },
6620 { Bad_Opcode },
6621 { Bad_Opcode },
6622 { Bad_Opcode },
f88c9eb0
SP
6623 /* 30 */
6624 { PREFIX_TABLE (PREFIX_0F3830) },
6625 { PREFIX_TABLE (PREFIX_0F3831) },
6626 { PREFIX_TABLE (PREFIX_0F3832) },
6627 { PREFIX_TABLE (PREFIX_0F3833) },
6628 { PREFIX_TABLE (PREFIX_0F3834) },
6629 { PREFIX_TABLE (PREFIX_0F3835) },
592d1631 6630 { Bad_Opcode },
f88c9eb0
SP
6631 { PREFIX_TABLE (PREFIX_0F3837) },
6632 /* 38 */
6633 { PREFIX_TABLE (PREFIX_0F3838) },
6634 { PREFIX_TABLE (PREFIX_0F3839) },
6635 { PREFIX_TABLE (PREFIX_0F383A) },
6636 { PREFIX_TABLE (PREFIX_0F383B) },
6637 { PREFIX_TABLE (PREFIX_0F383C) },
6638 { PREFIX_TABLE (PREFIX_0F383D) },
6639 { PREFIX_TABLE (PREFIX_0F383E) },
6640 { PREFIX_TABLE (PREFIX_0F383F) },
6641 /* 40 */
6642 { PREFIX_TABLE (PREFIX_0F3840) },
6643 { PREFIX_TABLE (PREFIX_0F3841) },
592d1631
L
6644 { Bad_Opcode },
6645 { Bad_Opcode },
6646 { Bad_Opcode },
6647 { Bad_Opcode },
6648 { Bad_Opcode },
6649 { Bad_Opcode },
f88c9eb0 6650 /* 48 */
592d1631
L
6651 { Bad_Opcode },
6652 { Bad_Opcode },
6653 { Bad_Opcode },
6654 { Bad_Opcode },
6655 { Bad_Opcode },
6656 { Bad_Opcode },
6657 { Bad_Opcode },
6658 { Bad_Opcode },
f88c9eb0 6659 /* 50 */
592d1631
L
6660 { Bad_Opcode },
6661 { Bad_Opcode },
6662 { Bad_Opcode },
6663 { Bad_Opcode },
6664 { Bad_Opcode },
6665 { Bad_Opcode },
6666 { Bad_Opcode },
6667 { Bad_Opcode },
f88c9eb0 6668 /* 58 */
592d1631
L
6669 { Bad_Opcode },
6670 { Bad_Opcode },
6671 { Bad_Opcode },
6672 { Bad_Opcode },
6673 { Bad_Opcode },
6674 { Bad_Opcode },
6675 { Bad_Opcode },
6676 { Bad_Opcode },
f88c9eb0 6677 /* 60 */
592d1631
L
6678 { Bad_Opcode },
6679 { Bad_Opcode },
6680 { Bad_Opcode },
6681 { Bad_Opcode },
6682 { Bad_Opcode },
6683 { Bad_Opcode },
6684 { Bad_Opcode },
6685 { Bad_Opcode },
f88c9eb0 6686 /* 68 */
592d1631
L
6687 { Bad_Opcode },
6688 { Bad_Opcode },
6689 { Bad_Opcode },
6690 { Bad_Opcode },
6691 { Bad_Opcode },
6692 { Bad_Opcode },
6693 { Bad_Opcode },
6694 { Bad_Opcode },
f88c9eb0 6695 /* 70 */
592d1631
L
6696 { Bad_Opcode },
6697 { Bad_Opcode },
6698 { Bad_Opcode },
6699 { Bad_Opcode },
6700 { Bad_Opcode },
6701 { Bad_Opcode },
6702 { Bad_Opcode },
6703 { Bad_Opcode },
f88c9eb0 6704 /* 78 */
592d1631
L
6705 { Bad_Opcode },
6706 { Bad_Opcode },
6707 { Bad_Opcode },
6708 { Bad_Opcode },
6709 { Bad_Opcode },
6710 { Bad_Opcode },
6711 { Bad_Opcode },
6712 { Bad_Opcode },
f88c9eb0
SP
6713 /* 80 */
6714 { PREFIX_TABLE (PREFIX_0F3880) },
6715 { PREFIX_TABLE (PREFIX_0F3881) },
6c30d220 6716 { PREFIX_TABLE (PREFIX_0F3882) },
592d1631
L
6717 { Bad_Opcode },
6718 { Bad_Opcode },
6719 { Bad_Opcode },
6720 { Bad_Opcode },
6721 { Bad_Opcode },
f88c9eb0 6722 /* 88 */
592d1631
L
6723 { Bad_Opcode },
6724 { Bad_Opcode },
6725 { Bad_Opcode },
6726 { Bad_Opcode },
6727 { Bad_Opcode },
6728 { Bad_Opcode },
6729 { Bad_Opcode },
6730 { Bad_Opcode },
f88c9eb0 6731 /* 90 */
592d1631
L
6732 { Bad_Opcode },
6733 { Bad_Opcode },
6734 { Bad_Opcode },
6735 { Bad_Opcode },
6736 { Bad_Opcode },
6737 { Bad_Opcode },
6738 { Bad_Opcode },
6739 { Bad_Opcode },
f88c9eb0 6740 /* 98 */
592d1631
L
6741 { Bad_Opcode },
6742 { Bad_Opcode },
6743 { Bad_Opcode },
6744 { Bad_Opcode },
6745 { Bad_Opcode },
6746 { Bad_Opcode },
6747 { Bad_Opcode },
6748 { Bad_Opcode },
f88c9eb0 6749 /* a0 */
592d1631
L
6750 { Bad_Opcode },
6751 { Bad_Opcode },
6752 { Bad_Opcode },
6753 { Bad_Opcode },
6754 { Bad_Opcode },
6755 { Bad_Opcode },
6756 { Bad_Opcode },
6757 { Bad_Opcode },
f88c9eb0 6758 /* a8 */
592d1631
L
6759 { Bad_Opcode },
6760 { Bad_Opcode },
6761 { Bad_Opcode },
6762 { Bad_Opcode },
6763 { Bad_Opcode },
6764 { Bad_Opcode },
6765 { Bad_Opcode },
6766 { Bad_Opcode },
f88c9eb0 6767 /* b0 */
592d1631
L
6768 { Bad_Opcode },
6769 { Bad_Opcode },
6770 { Bad_Opcode },
6771 { Bad_Opcode },
6772 { Bad_Opcode },
6773 { Bad_Opcode },
6774 { Bad_Opcode },
6775 { Bad_Opcode },
f88c9eb0 6776 /* b8 */
592d1631
L
6777 { Bad_Opcode },
6778 { Bad_Opcode },
6779 { Bad_Opcode },
6780 { Bad_Opcode },
6781 { Bad_Opcode },
6782 { Bad_Opcode },
6783 { Bad_Opcode },
6784 { Bad_Opcode },
f88c9eb0 6785 /* c0 */
592d1631
L
6786 { Bad_Opcode },
6787 { Bad_Opcode },
6788 { Bad_Opcode },
6789 { Bad_Opcode },
6790 { Bad_Opcode },
6791 { Bad_Opcode },
6792 { Bad_Opcode },
6793 { Bad_Opcode },
f88c9eb0 6794 /* c8 */
a0046408
L
6795 { PREFIX_TABLE (PREFIX_0F38C8) },
6796 { PREFIX_TABLE (PREFIX_0F38C9) },
6797 { PREFIX_TABLE (PREFIX_0F38CA) },
6798 { PREFIX_TABLE (PREFIX_0F38CB) },
6799 { PREFIX_TABLE (PREFIX_0F38CC) },
6800 { PREFIX_TABLE (PREFIX_0F38CD) },
592d1631
L
6801 { Bad_Opcode },
6802 { Bad_Opcode },
f88c9eb0 6803 /* d0 */
592d1631
L
6804 { Bad_Opcode },
6805 { Bad_Opcode },
6806 { Bad_Opcode },
6807 { Bad_Opcode },
6808 { Bad_Opcode },
6809 { Bad_Opcode },
6810 { Bad_Opcode },
6811 { Bad_Opcode },
f88c9eb0 6812 /* d8 */
592d1631
L
6813 { Bad_Opcode },
6814 { Bad_Opcode },
6815 { Bad_Opcode },
f88c9eb0
SP
6816 { PREFIX_TABLE (PREFIX_0F38DB) },
6817 { PREFIX_TABLE (PREFIX_0F38DC) },
6818 { PREFIX_TABLE (PREFIX_0F38DD) },
6819 { PREFIX_TABLE (PREFIX_0F38DE) },
6820 { PREFIX_TABLE (PREFIX_0F38DF) },
6821 /* e0 */
592d1631
L
6822 { Bad_Opcode },
6823 { Bad_Opcode },
6824 { Bad_Opcode },
6825 { Bad_Opcode },
6826 { Bad_Opcode },
6827 { Bad_Opcode },
6828 { Bad_Opcode },
6829 { Bad_Opcode },
f88c9eb0 6830 /* e8 */
592d1631
L
6831 { Bad_Opcode },
6832 { Bad_Opcode },
6833 { Bad_Opcode },
6834 { Bad_Opcode },
6835 { Bad_Opcode },
6836 { Bad_Opcode },
6837 { Bad_Opcode },
6838 { Bad_Opcode },
f88c9eb0
SP
6839 /* f0 */
6840 { PREFIX_TABLE (PREFIX_0F38F0) },
6841 { PREFIX_TABLE (PREFIX_0F38F1) },
592d1631
L
6842 { Bad_Opcode },
6843 { Bad_Opcode },
6844 { Bad_Opcode },
6845 { Bad_Opcode },
e2e1fcde 6846 { PREFIX_TABLE (PREFIX_0F38F6) },
592d1631 6847 { Bad_Opcode },
f88c9eb0 6848 /* f8 */
592d1631
L
6849 { Bad_Opcode },
6850 { Bad_Opcode },
6851 { Bad_Opcode },
6852 { Bad_Opcode },
6853 { Bad_Opcode },
6854 { Bad_Opcode },
6855 { Bad_Opcode },
6856 { Bad_Opcode },
f88c9eb0
SP
6857 },
6858 /* THREE_BYTE_0F3A */
6859 {
6860 /* 00 */
592d1631
L
6861 { Bad_Opcode },
6862 { Bad_Opcode },
6863 { Bad_Opcode },
6864 { Bad_Opcode },
6865 { Bad_Opcode },
6866 { Bad_Opcode },
6867 { Bad_Opcode },
6868 { Bad_Opcode },
f88c9eb0
SP
6869 /* 08 */
6870 { PREFIX_TABLE (PREFIX_0F3A08) },
6871 { PREFIX_TABLE (PREFIX_0F3A09) },
6872 { PREFIX_TABLE (PREFIX_0F3A0A) },
6873 { PREFIX_TABLE (PREFIX_0F3A0B) },
6874 { PREFIX_TABLE (PREFIX_0F3A0C) },
6875 { PREFIX_TABLE (PREFIX_0F3A0D) },
6876 { PREFIX_TABLE (PREFIX_0F3A0E) },
6877 { "palignr", { MX, EM, Ib } },
6878 /* 10 */
592d1631
L
6879 { Bad_Opcode },
6880 { Bad_Opcode },
6881 { Bad_Opcode },
6882 { Bad_Opcode },
f88c9eb0
SP
6883 { PREFIX_TABLE (PREFIX_0F3A14) },
6884 { PREFIX_TABLE (PREFIX_0F3A15) },
6885 { PREFIX_TABLE (PREFIX_0F3A16) },
6886 { PREFIX_TABLE (PREFIX_0F3A17) },
6887 /* 18 */
592d1631
L
6888 { Bad_Opcode },
6889 { Bad_Opcode },
6890 { Bad_Opcode },
6891 { Bad_Opcode },
6892 { Bad_Opcode },
6893 { Bad_Opcode },
6894 { Bad_Opcode },
6895 { Bad_Opcode },
f88c9eb0
SP
6896 /* 20 */
6897 { PREFIX_TABLE (PREFIX_0F3A20) },
6898 { PREFIX_TABLE (PREFIX_0F3A21) },
6899 { PREFIX_TABLE (PREFIX_0F3A22) },
592d1631
L
6900 { Bad_Opcode },
6901 { Bad_Opcode },
6902 { Bad_Opcode },
6903 { Bad_Opcode },
6904 { Bad_Opcode },
f88c9eb0 6905 /* 28 */
592d1631
L
6906 { Bad_Opcode },
6907 { Bad_Opcode },
6908 { Bad_Opcode },
6909 { Bad_Opcode },
6910 { Bad_Opcode },
6911 { Bad_Opcode },
6912 { Bad_Opcode },
6913 { Bad_Opcode },
f88c9eb0 6914 /* 30 */
592d1631
L
6915 { Bad_Opcode },
6916 { Bad_Opcode },
6917 { Bad_Opcode },
6918 { Bad_Opcode },
6919 { Bad_Opcode },
6920 { Bad_Opcode },
6921 { Bad_Opcode },
6922 { Bad_Opcode },
f88c9eb0 6923 /* 38 */
592d1631
L
6924 { Bad_Opcode },
6925 { Bad_Opcode },
6926 { Bad_Opcode },
6927 { Bad_Opcode },
6928 { Bad_Opcode },
6929 { Bad_Opcode },
6930 { Bad_Opcode },
6931 { Bad_Opcode },
f88c9eb0
SP
6932 /* 40 */
6933 { PREFIX_TABLE (PREFIX_0F3A40) },
6934 { PREFIX_TABLE (PREFIX_0F3A41) },
6935 { PREFIX_TABLE (PREFIX_0F3A42) },
592d1631 6936 { Bad_Opcode },
f88c9eb0 6937 { PREFIX_TABLE (PREFIX_0F3A44) },
592d1631
L
6938 { Bad_Opcode },
6939 { Bad_Opcode },
6940 { Bad_Opcode },
f88c9eb0 6941 /* 48 */
592d1631
L
6942 { Bad_Opcode },
6943 { Bad_Opcode },
6944 { Bad_Opcode },
6945 { Bad_Opcode },
6946 { Bad_Opcode },
6947 { Bad_Opcode },
6948 { Bad_Opcode },
6949 { Bad_Opcode },
f88c9eb0 6950 /* 50 */
592d1631
L
6951 { Bad_Opcode },
6952 { Bad_Opcode },
6953 { Bad_Opcode },
6954 { Bad_Opcode },
6955 { Bad_Opcode },
6956 { Bad_Opcode },
6957 { Bad_Opcode },
6958 { Bad_Opcode },
f88c9eb0 6959 /* 58 */
592d1631
L
6960 { Bad_Opcode },
6961 { Bad_Opcode },
6962 { Bad_Opcode },
6963 { Bad_Opcode },
6964 { Bad_Opcode },
6965 { Bad_Opcode },
6966 { Bad_Opcode },
6967 { Bad_Opcode },
f88c9eb0
SP
6968 /* 60 */
6969 { PREFIX_TABLE (PREFIX_0F3A60) },
6970 { PREFIX_TABLE (PREFIX_0F3A61) },
6971 { PREFIX_TABLE (PREFIX_0F3A62) },
6972 { PREFIX_TABLE (PREFIX_0F3A63) },
592d1631
L
6973 { Bad_Opcode },
6974 { Bad_Opcode },
6975 { Bad_Opcode },
6976 { Bad_Opcode },
f88c9eb0 6977 /* 68 */
592d1631
L
6978 { Bad_Opcode },
6979 { Bad_Opcode },
6980 { Bad_Opcode },
6981 { Bad_Opcode },
6982 { Bad_Opcode },
6983 { Bad_Opcode },
6984 { Bad_Opcode },
6985 { Bad_Opcode },
f88c9eb0 6986 /* 70 */
592d1631
L
6987 { Bad_Opcode },
6988 { Bad_Opcode },
6989 { Bad_Opcode },
6990 { Bad_Opcode },
6991 { Bad_Opcode },
6992 { Bad_Opcode },
6993 { Bad_Opcode },
6994 { Bad_Opcode },
f88c9eb0 6995 /* 78 */
592d1631
L
6996 { Bad_Opcode },
6997 { Bad_Opcode },
6998 { Bad_Opcode },
6999 { Bad_Opcode },
7000 { Bad_Opcode },
7001 { Bad_Opcode },
7002 { Bad_Opcode },
7003 { Bad_Opcode },
f88c9eb0 7004 /* 80 */
592d1631
L
7005 { Bad_Opcode },
7006 { Bad_Opcode },
7007 { Bad_Opcode },
7008 { Bad_Opcode },
7009 { Bad_Opcode },
7010 { Bad_Opcode },
7011 { Bad_Opcode },
7012 { Bad_Opcode },
f88c9eb0 7013 /* 88 */
592d1631
L
7014 { Bad_Opcode },
7015 { Bad_Opcode },
7016 { Bad_Opcode },
7017 { Bad_Opcode },
7018 { Bad_Opcode },
7019 { Bad_Opcode },
7020 { Bad_Opcode },
7021 { Bad_Opcode },
f88c9eb0 7022 /* 90 */
592d1631
L
7023 { Bad_Opcode },
7024 { Bad_Opcode },
7025 { Bad_Opcode },
7026 { Bad_Opcode },
7027 { Bad_Opcode },
7028 { Bad_Opcode },
7029 { Bad_Opcode },
7030 { Bad_Opcode },
f88c9eb0 7031 /* 98 */
592d1631
L
7032 { Bad_Opcode },
7033 { Bad_Opcode },
7034 { Bad_Opcode },
7035 { Bad_Opcode },
7036 { Bad_Opcode },
7037 { Bad_Opcode },
7038 { Bad_Opcode },
7039 { Bad_Opcode },
f88c9eb0 7040 /* a0 */
592d1631
L
7041 { Bad_Opcode },
7042 { Bad_Opcode },
7043 { Bad_Opcode },
7044 { Bad_Opcode },
7045 { Bad_Opcode },
7046 { Bad_Opcode },
7047 { Bad_Opcode },
7048 { Bad_Opcode },
f88c9eb0 7049 /* a8 */
592d1631
L
7050 { Bad_Opcode },
7051 { Bad_Opcode },
7052 { Bad_Opcode },
7053 { Bad_Opcode },
7054 { Bad_Opcode },
7055 { Bad_Opcode },
7056 { Bad_Opcode },
7057 { Bad_Opcode },
f88c9eb0 7058 /* b0 */
592d1631
L
7059 { Bad_Opcode },
7060 { Bad_Opcode },
7061 { Bad_Opcode },
7062 { Bad_Opcode },
7063 { Bad_Opcode },
7064 { Bad_Opcode },
7065 { Bad_Opcode },
7066 { Bad_Opcode },
f88c9eb0 7067 /* b8 */
592d1631
L
7068 { Bad_Opcode },
7069 { Bad_Opcode },
7070 { Bad_Opcode },
7071 { Bad_Opcode },
7072 { Bad_Opcode },
7073 { Bad_Opcode },
7074 { Bad_Opcode },
7075 { Bad_Opcode },
f88c9eb0 7076 /* c0 */
592d1631
L
7077 { Bad_Opcode },
7078 { Bad_Opcode },
7079 { Bad_Opcode },
7080 { Bad_Opcode },
7081 { Bad_Opcode },
7082 { Bad_Opcode },
7083 { Bad_Opcode },
7084 { Bad_Opcode },
f88c9eb0 7085 /* c8 */
592d1631
L
7086 { Bad_Opcode },
7087 { Bad_Opcode },
7088 { Bad_Opcode },
7089 { Bad_Opcode },
a0046408 7090 { PREFIX_TABLE (PREFIX_0F3ACC) },
592d1631
L
7091 { Bad_Opcode },
7092 { Bad_Opcode },
7093 { Bad_Opcode },
f88c9eb0 7094 /* d0 */
592d1631
L
7095 { Bad_Opcode },
7096 { Bad_Opcode },
7097 { Bad_Opcode },
7098 { Bad_Opcode },
7099 { Bad_Opcode },
7100 { Bad_Opcode },
7101 { Bad_Opcode },
7102 { Bad_Opcode },
f88c9eb0 7103 /* d8 */
592d1631
L
7104 { Bad_Opcode },
7105 { Bad_Opcode },
7106 { Bad_Opcode },
7107 { Bad_Opcode },
7108 { Bad_Opcode },
7109 { Bad_Opcode },
7110 { Bad_Opcode },
f88c9eb0
SP
7111 { PREFIX_TABLE (PREFIX_0F3ADF) },
7112 /* e0 */
592d1631
L
7113 { Bad_Opcode },
7114 { Bad_Opcode },
7115 { Bad_Opcode },
7116 { Bad_Opcode },
7117 { Bad_Opcode },
7118 { Bad_Opcode },
7119 { Bad_Opcode },
7120 { Bad_Opcode },
f88c9eb0 7121 /* e8 */
592d1631
L
7122 { Bad_Opcode },
7123 { Bad_Opcode },
7124 { Bad_Opcode },
7125 { Bad_Opcode },
7126 { Bad_Opcode },
7127 { Bad_Opcode },
7128 { Bad_Opcode },
7129 { Bad_Opcode },
f88c9eb0 7130 /* f0 */
592d1631
L
7131 { Bad_Opcode },
7132 { Bad_Opcode },
7133 { Bad_Opcode },
7134 { Bad_Opcode },
7135 { Bad_Opcode },
7136 { Bad_Opcode },
7137 { Bad_Opcode },
7138 { Bad_Opcode },
f88c9eb0 7139 /* f8 */
592d1631
L
7140 { Bad_Opcode },
7141 { Bad_Opcode },
7142 { Bad_Opcode },
7143 { Bad_Opcode },
7144 { Bad_Opcode },
7145 { Bad_Opcode },
7146 { Bad_Opcode },
7147 { Bad_Opcode },
f88c9eb0
SP
7148 },
7149
7150 /* THREE_BYTE_0F7A */
7151 {
7152 /* 00 */
592d1631
L
7153 { Bad_Opcode },
7154 { Bad_Opcode },
7155 { Bad_Opcode },
7156 { Bad_Opcode },
7157 { Bad_Opcode },
7158 { Bad_Opcode },
7159 { Bad_Opcode },
7160 { Bad_Opcode },
f88c9eb0 7161 /* 08 */
592d1631
L
7162 { Bad_Opcode },
7163 { Bad_Opcode },
7164 { Bad_Opcode },
7165 { Bad_Opcode },
7166 { Bad_Opcode },
7167 { Bad_Opcode },
7168 { Bad_Opcode },
7169 { Bad_Opcode },
f88c9eb0 7170 /* 10 */
592d1631
L
7171 { Bad_Opcode },
7172 { Bad_Opcode },
7173 { Bad_Opcode },
7174 { Bad_Opcode },
7175 { Bad_Opcode },
7176 { Bad_Opcode },
7177 { Bad_Opcode },
7178 { Bad_Opcode },
f88c9eb0 7179 /* 18 */
592d1631
L
7180 { Bad_Opcode },
7181 { Bad_Opcode },
7182 { Bad_Opcode },
7183 { Bad_Opcode },
7184 { Bad_Opcode },
7185 { Bad_Opcode },
7186 { Bad_Opcode },
7187 { Bad_Opcode },
f88c9eb0
SP
7188 /* 20 */
7189 { "ptest", { XX } },
592d1631
L
7190 { Bad_Opcode },
7191 { Bad_Opcode },
7192 { Bad_Opcode },
7193 { Bad_Opcode },
7194 { Bad_Opcode },
7195 { Bad_Opcode },
7196 { Bad_Opcode },
f88c9eb0 7197 /* 28 */
592d1631
L
7198 { Bad_Opcode },
7199 { Bad_Opcode },
7200 { Bad_Opcode },
7201 { Bad_Opcode },
7202 { Bad_Opcode },
7203 { Bad_Opcode },
7204 { Bad_Opcode },
7205 { Bad_Opcode },
f88c9eb0 7206 /* 30 */
592d1631
L
7207 { Bad_Opcode },
7208 { Bad_Opcode },
7209 { Bad_Opcode },
7210 { Bad_Opcode },
7211 { Bad_Opcode },
7212 { Bad_Opcode },
7213 { Bad_Opcode },
7214 { Bad_Opcode },
f88c9eb0 7215 /* 38 */
592d1631
L
7216 { Bad_Opcode },
7217 { Bad_Opcode },
7218 { Bad_Opcode },
7219 { Bad_Opcode },
7220 { Bad_Opcode },
7221 { Bad_Opcode },
7222 { Bad_Opcode },
7223 { Bad_Opcode },
f88c9eb0 7224 /* 40 */
592d1631 7225 { Bad_Opcode },
f88c9eb0
SP
7226 { "phaddbw", { XM, EXq } },
7227 { "phaddbd", { XM, EXq } },
7228 { "phaddbq", { XM, EXq } },
592d1631
L
7229 { Bad_Opcode },
7230 { Bad_Opcode },
f88c9eb0
SP
7231 { "phaddwd", { XM, EXq } },
7232 { "phaddwq", { XM, EXq } },
7233 /* 48 */
592d1631
L
7234 { Bad_Opcode },
7235 { Bad_Opcode },
7236 { Bad_Opcode },
f88c9eb0 7237 { "phadddq", { XM, EXq } },
592d1631
L
7238 { Bad_Opcode },
7239 { Bad_Opcode },
7240 { Bad_Opcode },
7241 { Bad_Opcode },
f88c9eb0 7242 /* 50 */
592d1631 7243 { Bad_Opcode },
f88c9eb0
SP
7244 { "phaddubw", { XM, EXq } },
7245 { "phaddubd", { XM, EXq } },
7246 { "phaddubq", { XM, EXq } },
592d1631
L
7247 { Bad_Opcode },
7248 { Bad_Opcode },
f88c9eb0
SP
7249 { "phadduwd", { XM, EXq } },
7250 { "phadduwq", { XM, EXq } },
7251 /* 58 */
592d1631
L
7252 { Bad_Opcode },
7253 { Bad_Opcode },
7254 { Bad_Opcode },
f88c9eb0 7255 { "phaddudq", { XM, EXq } },
592d1631
L
7256 { Bad_Opcode },
7257 { Bad_Opcode },
7258 { Bad_Opcode },
7259 { Bad_Opcode },
f88c9eb0 7260 /* 60 */
592d1631 7261 { Bad_Opcode },
f88c9eb0
SP
7262 { "phsubbw", { XM, EXq } },
7263 { "phsubbd", { XM, EXq } },
7264 { "phsubbq", { XM, EXq } },
592d1631
L
7265 { Bad_Opcode },
7266 { Bad_Opcode },
7267 { Bad_Opcode },
7268 { Bad_Opcode },
4e7d34a6 7269 /* 68 */
592d1631
L
7270 { Bad_Opcode },
7271 { Bad_Opcode },
7272 { Bad_Opcode },
7273 { Bad_Opcode },
7274 { Bad_Opcode },
7275 { Bad_Opcode },
7276 { Bad_Opcode },
7277 { Bad_Opcode },
85f10a01 7278 /* 70 */
592d1631
L
7279 { Bad_Opcode },
7280 { Bad_Opcode },
7281 { Bad_Opcode },
7282 { Bad_Opcode },
7283 { Bad_Opcode },
7284 { Bad_Opcode },
7285 { Bad_Opcode },
7286 { Bad_Opcode },
85f10a01 7287 /* 78 */
592d1631
L
7288 { Bad_Opcode },
7289 { Bad_Opcode },
7290 { Bad_Opcode },
7291 { Bad_Opcode },
7292 { Bad_Opcode },
7293 { Bad_Opcode },
7294 { Bad_Opcode },
7295 { Bad_Opcode },
85f10a01 7296 /* 80 */
592d1631
L
7297 { Bad_Opcode },
7298 { Bad_Opcode },
7299 { Bad_Opcode },
7300 { Bad_Opcode },
7301 { Bad_Opcode },
7302 { Bad_Opcode },
7303 { Bad_Opcode },
7304 { Bad_Opcode },
85f10a01 7305 /* 88 */
592d1631
L
7306 { Bad_Opcode },
7307 { Bad_Opcode },
7308 { Bad_Opcode },
7309 { Bad_Opcode },
7310 { Bad_Opcode },
7311 { Bad_Opcode },
7312 { Bad_Opcode },
7313 { Bad_Opcode },
85f10a01 7314 /* 90 */
592d1631
L
7315 { Bad_Opcode },
7316 { Bad_Opcode },
7317 { Bad_Opcode },
7318 { Bad_Opcode },
7319 { Bad_Opcode },
7320 { Bad_Opcode },
7321 { Bad_Opcode },
7322 { Bad_Opcode },
85f10a01 7323 /* 98 */
592d1631
L
7324 { Bad_Opcode },
7325 { Bad_Opcode },
7326 { Bad_Opcode },
7327 { Bad_Opcode },
7328 { Bad_Opcode },
7329 { Bad_Opcode },
7330 { Bad_Opcode },
7331 { Bad_Opcode },
85f10a01 7332 /* a0 */
592d1631
L
7333 { Bad_Opcode },
7334 { Bad_Opcode },
7335 { Bad_Opcode },
7336 { Bad_Opcode },
7337 { Bad_Opcode },
7338 { Bad_Opcode },
7339 { Bad_Opcode },
7340 { Bad_Opcode },
85f10a01 7341 /* a8 */
592d1631
L
7342 { Bad_Opcode },
7343 { Bad_Opcode },
7344 { Bad_Opcode },
7345 { Bad_Opcode },
7346 { Bad_Opcode },
7347 { Bad_Opcode },
7348 { Bad_Opcode },
7349 { Bad_Opcode },
85f10a01 7350 /* b0 */
592d1631
L
7351 { Bad_Opcode },
7352 { Bad_Opcode },
7353 { Bad_Opcode },
7354 { Bad_Opcode },
7355 { Bad_Opcode },
7356 { Bad_Opcode },
7357 { Bad_Opcode },
7358 { Bad_Opcode },
85f10a01 7359 /* b8 */
592d1631
L
7360 { Bad_Opcode },
7361 { Bad_Opcode },
7362 { Bad_Opcode },
7363 { Bad_Opcode },
7364 { Bad_Opcode },
7365 { Bad_Opcode },
7366 { Bad_Opcode },
7367 { Bad_Opcode },
85f10a01 7368 /* c0 */
592d1631
L
7369 { Bad_Opcode },
7370 { Bad_Opcode },
7371 { Bad_Opcode },
7372 { Bad_Opcode },
7373 { Bad_Opcode },
7374 { Bad_Opcode },
7375 { Bad_Opcode },
7376 { Bad_Opcode },
85f10a01 7377 /* c8 */
592d1631
L
7378 { Bad_Opcode },
7379 { Bad_Opcode },
7380 { Bad_Opcode },
7381 { Bad_Opcode },
7382 { Bad_Opcode },
7383 { Bad_Opcode },
7384 { Bad_Opcode },
7385 { Bad_Opcode },
85f10a01 7386 /* d0 */
592d1631
L
7387 { Bad_Opcode },
7388 { Bad_Opcode },
7389 { Bad_Opcode },
7390 { Bad_Opcode },
7391 { Bad_Opcode },
7392 { Bad_Opcode },
7393 { Bad_Opcode },
7394 { Bad_Opcode },
85f10a01 7395 /* d8 */
592d1631
L
7396 { Bad_Opcode },
7397 { Bad_Opcode },
7398 { Bad_Opcode },
7399 { Bad_Opcode },
7400 { Bad_Opcode },
7401 { Bad_Opcode },
7402 { Bad_Opcode },
7403 { Bad_Opcode },
85f10a01 7404 /* e0 */
592d1631
L
7405 { Bad_Opcode },
7406 { Bad_Opcode },
7407 { Bad_Opcode },
7408 { Bad_Opcode },
7409 { Bad_Opcode },
7410 { Bad_Opcode },
7411 { Bad_Opcode },
7412 { Bad_Opcode },
85f10a01 7413 /* e8 */
592d1631
L
7414 { Bad_Opcode },
7415 { Bad_Opcode },
7416 { Bad_Opcode },
7417 { Bad_Opcode },
7418 { Bad_Opcode },
7419 { Bad_Opcode },
7420 { Bad_Opcode },
7421 { Bad_Opcode },
85f10a01 7422 /* f0 */
592d1631
L
7423 { Bad_Opcode },
7424 { Bad_Opcode },
7425 { Bad_Opcode },
7426 { Bad_Opcode },
7427 { Bad_Opcode },
7428 { Bad_Opcode },
7429 { Bad_Opcode },
7430 { Bad_Opcode },
85f10a01 7431 /* f8 */
592d1631
L
7432 { Bad_Opcode },
7433 { Bad_Opcode },
7434 { Bad_Opcode },
7435 { Bad_Opcode },
7436 { Bad_Opcode },
7437 { Bad_Opcode },
7438 { Bad_Opcode },
7439 { Bad_Opcode },
85f10a01 7440 },
f88c9eb0
SP
7441};
7442
7443static const struct dis386 xop_table[][256] = {
5dd85c99 7444 /* XOP_08 */
85f10a01
MM
7445 {
7446 /* 00 */
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 },
85f10a01 7455 /* 08 */
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 },
85f10a01 7464 /* 10 */
3929df09 7465 { Bad_Opcode },
592d1631
L
7466 { Bad_Opcode },
7467 { Bad_Opcode },
7468 { Bad_Opcode },
7469 { Bad_Opcode },
7470 { Bad_Opcode },
7471 { Bad_Opcode },
7472 { Bad_Opcode },
85f10a01 7473 /* 18 */
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 },
85f10a01 7482 /* 20 */
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 },
85f10a01 7491 /* 28 */
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 },
c0f3af97 7500 /* 30 */
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 },
c0f3af97 7509 /* 38 */
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 },
c0f3af97 7518 /* 40 */
592d1631
L
7519 { Bad_Opcode },
7520 { Bad_Opcode },
7521 { Bad_Opcode },
7522 { Bad_Opcode },
7523 { Bad_Opcode },
7524 { Bad_Opcode },
7525 { Bad_Opcode },
7526 { Bad_Opcode },
85f10a01 7527 /* 48 */
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 },
c0f3af97 7536 /* 50 */
592d1631
L
7537 { Bad_Opcode },
7538 { Bad_Opcode },
7539 { Bad_Opcode },
7540 { Bad_Opcode },
7541 { Bad_Opcode },
7542 { Bad_Opcode },
7543 { Bad_Opcode },
7544 { Bad_Opcode },
85f10a01 7545 /* 58 */
592d1631
L
7546 { Bad_Opcode },
7547 { Bad_Opcode },
7548 { Bad_Opcode },
7549 { Bad_Opcode },
7550 { Bad_Opcode },
7551 { Bad_Opcode },
7552 { Bad_Opcode },
7553 { Bad_Opcode },
c1e679ec 7554 /* 60 */
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 },
c0f3af97 7563 /* 68 */
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 /* 70 */
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 /* 78 */
592d1631
L
7582 { Bad_Opcode },
7583 { Bad_Opcode },
7584 { Bad_Opcode },
7585 { Bad_Opcode },
7586 { Bad_Opcode },
7587 { Bad_Opcode },
7588 { Bad_Opcode },
7589 { Bad_Opcode },
85f10a01 7590 /* 80 */
592d1631
L
7591 { Bad_Opcode },
7592 { Bad_Opcode },
7593 { Bad_Opcode },
7594 { Bad_Opcode },
7595 { Bad_Opcode },
5dd85c99
SP
7596 { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7597 { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7598 { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7599 /* 88 */
592d1631
L
7600 { Bad_Opcode },
7601 { Bad_Opcode },
7602 { Bad_Opcode },
7603 { Bad_Opcode },
7604 { Bad_Opcode },
7605 { Bad_Opcode },
5dd85c99
SP
7606 { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7607 { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7608 /* 90 */
592d1631
L
7609 { Bad_Opcode },
7610 { Bad_Opcode },
7611 { Bad_Opcode },
7612 { Bad_Opcode },
7613 { Bad_Opcode },
5dd85c99
SP
7614 { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7615 { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7616 { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7617 /* 98 */
592d1631
L
7618 { Bad_Opcode },
7619 { Bad_Opcode },
7620 { Bad_Opcode },
7621 { Bad_Opcode },
7622 { Bad_Opcode },
7623 { Bad_Opcode },
5dd85c99
SP
7624 { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7625 { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7626 /* a0 */
592d1631
L
7627 { Bad_Opcode },
7628 { Bad_Opcode },
5dd85c99
SP
7629 { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7630 { "vpperm", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631
L
7631 { Bad_Opcode },
7632 { Bad_Opcode },
5dd85c99 7633 { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631 7634 { Bad_Opcode },
5dd85c99 7635 /* a8 */
592d1631
L
7636 { Bad_Opcode },
7637 { Bad_Opcode },
7638 { Bad_Opcode },
7639 { Bad_Opcode },
7640 { Bad_Opcode },
7641 { Bad_Opcode },
7642 { Bad_Opcode },
7643 { Bad_Opcode },
5dd85c99 7644 /* b0 */
592d1631
L
7645 { Bad_Opcode },
7646 { Bad_Opcode },
7647 { Bad_Opcode },
7648 { Bad_Opcode },
7649 { Bad_Opcode },
7650 { Bad_Opcode },
5dd85c99 7651 { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631 7652 { Bad_Opcode },
5dd85c99 7653 /* b8 */
592d1631
L
7654 { Bad_Opcode },
7655 { Bad_Opcode },
7656 { Bad_Opcode },
7657 { Bad_Opcode },
7658 { Bad_Opcode },
7659 { Bad_Opcode },
7660 { Bad_Opcode },
7661 { Bad_Opcode },
5dd85c99
SP
7662 /* c0 */
7663 { "vprotb", { XM, Vex_2src_1, Ib } },
7664 { "vprotw", { XM, Vex_2src_1, Ib } },
7665 { "vprotd", { XM, Vex_2src_1, Ib } },
7666 { "vprotq", { XM, Vex_2src_1, Ib } },
592d1631
L
7667 { Bad_Opcode },
7668 { Bad_Opcode },
7669 { Bad_Opcode },
7670 { Bad_Opcode },
5dd85c99 7671 /* c8 */
592d1631
L
7672 { Bad_Opcode },
7673 { Bad_Opcode },
7674 { Bad_Opcode },
7675 { Bad_Opcode },
ff688e1f
L
7676 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CC) },
7677 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CD) },
7678 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CE) },
7679 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CF) },
5dd85c99 7680 /* d0 */
592d1631
L
7681 { Bad_Opcode },
7682 { Bad_Opcode },
7683 { Bad_Opcode },
7684 { Bad_Opcode },
7685 { Bad_Opcode },
7686 { Bad_Opcode },
7687 { Bad_Opcode },
7688 { Bad_Opcode },
5dd85c99 7689 /* d8 */
592d1631
L
7690 { Bad_Opcode },
7691 { Bad_Opcode },
7692 { Bad_Opcode },
7693 { Bad_Opcode },
7694 { Bad_Opcode },
7695 { Bad_Opcode },
7696 { Bad_Opcode },
7697 { Bad_Opcode },
5dd85c99 7698 /* e0 */
592d1631
L
7699 { Bad_Opcode },
7700 { Bad_Opcode },
7701 { Bad_Opcode },
7702 { Bad_Opcode },
7703 { Bad_Opcode },
7704 { Bad_Opcode },
7705 { Bad_Opcode },
7706 { Bad_Opcode },
5dd85c99 7707 /* e8 */
592d1631
L
7708 { Bad_Opcode },
7709 { Bad_Opcode },
7710 { Bad_Opcode },
7711 { Bad_Opcode },
ff688e1f
L
7712 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EC) },
7713 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_ED) },
7714 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EE) },
7715 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EF) },
5dd85c99 7716 /* f0 */
592d1631
L
7717 { Bad_Opcode },
7718 { Bad_Opcode },
7719 { Bad_Opcode },
7720 { Bad_Opcode },
7721 { Bad_Opcode },
7722 { Bad_Opcode },
7723 { Bad_Opcode },
7724 { Bad_Opcode },
5dd85c99 7725 /* f8 */
592d1631
L
7726 { Bad_Opcode },
7727 { Bad_Opcode },
7728 { Bad_Opcode },
7729 { Bad_Opcode },
7730 { Bad_Opcode },
7731 { Bad_Opcode },
7732 { Bad_Opcode },
7733 { Bad_Opcode },
5dd85c99
SP
7734 },
7735 /* XOP_09 */
7736 {
7737 /* 00 */
592d1631 7738 { Bad_Opcode },
2a2a0f38
QN
7739 { REG_TABLE (REG_XOP_TBM_01) },
7740 { REG_TABLE (REG_XOP_TBM_02) },
592d1631
L
7741 { Bad_Opcode },
7742 { Bad_Opcode },
7743 { Bad_Opcode },
7744 { Bad_Opcode },
7745 { Bad_Opcode },
5dd85c99 7746 /* 08 */
592d1631
L
7747 { Bad_Opcode },
7748 { Bad_Opcode },
7749 { Bad_Opcode },
7750 { Bad_Opcode },
7751 { Bad_Opcode },
7752 { Bad_Opcode },
7753 { Bad_Opcode },
7754 { Bad_Opcode },
5dd85c99 7755 /* 10 */
592d1631
L
7756 { Bad_Opcode },
7757 { Bad_Opcode },
5dd85c99 7758 { REG_TABLE (REG_XOP_LWPCB) },
592d1631
L
7759 { Bad_Opcode },
7760 { Bad_Opcode },
7761 { Bad_Opcode },
7762 { Bad_Opcode },
7763 { Bad_Opcode },
5dd85c99 7764 /* 18 */
592d1631
L
7765 { Bad_Opcode },
7766 { Bad_Opcode },
7767 { Bad_Opcode },
7768 { Bad_Opcode },
7769 { Bad_Opcode },
7770 { Bad_Opcode },
7771 { Bad_Opcode },
7772 { Bad_Opcode },
5dd85c99 7773 /* 20 */
592d1631
L
7774 { Bad_Opcode },
7775 { Bad_Opcode },
7776 { Bad_Opcode },
7777 { Bad_Opcode },
7778 { Bad_Opcode },
7779 { Bad_Opcode },
7780 { Bad_Opcode },
7781 { Bad_Opcode },
5dd85c99 7782 /* 28 */
592d1631
L
7783 { Bad_Opcode },
7784 { Bad_Opcode },
7785 { Bad_Opcode },
7786 { Bad_Opcode },
7787 { Bad_Opcode },
7788 { Bad_Opcode },
7789 { Bad_Opcode },
7790 { Bad_Opcode },
5dd85c99 7791 /* 30 */
592d1631
L
7792 { Bad_Opcode },
7793 { Bad_Opcode },
7794 { Bad_Opcode },
7795 { Bad_Opcode },
7796 { Bad_Opcode },
7797 { Bad_Opcode },
7798 { Bad_Opcode },
7799 { Bad_Opcode },
5dd85c99 7800 /* 38 */
592d1631
L
7801 { Bad_Opcode },
7802 { Bad_Opcode },
7803 { Bad_Opcode },
7804 { Bad_Opcode },
7805 { Bad_Opcode },
7806 { Bad_Opcode },
7807 { Bad_Opcode },
7808 { Bad_Opcode },
5dd85c99 7809 /* 40 */
592d1631
L
7810 { Bad_Opcode },
7811 { Bad_Opcode },
7812 { Bad_Opcode },
7813 { Bad_Opcode },
7814 { Bad_Opcode },
7815 { Bad_Opcode },
7816 { Bad_Opcode },
7817 { Bad_Opcode },
5dd85c99 7818 /* 48 */
592d1631
L
7819 { Bad_Opcode },
7820 { Bad_Opcode },
7821 { Bad_Opcode },
7822 { Bad_Opcode },
7823 { Bad_Opcode },
7824 { Bad_Opcode },
7825 { Bad_Opcode },
7826 { Bad_Opcode },
5dd85c99 7827 /* 50 */
592d1631
L
7828 { Bad_Opcode },
7829 { Bad_Opcode },
7830 { Bad_Opcode },
7831 { Bad_Opcode },
7832 { Bad_Opcode },
7833 { Bad_Opcode },
7834 { Bad_Opcode },
7835 { Bad_Opcode },
5dd85c99 7836 /* 58 */
592d1631
L
7837 { Bad_Opcode },
7838 { Bad_Opcode },
7839 { Bad_Opcode },
7840 { Bad_Opcode },
7841 { Bad_Opcode },
7842 { Bad_Opcode },
7843 { Bad_Opcode },
7844 { Bad_Opcode },
5dd85c99 7845 /* 60 */
592d1631
L
7846 { Bad_Opcode },
7847 { Bad_Opcode },
7848 { Bad_Opcode },
7849 { Bad_Opcode },
7850 { Bad_Opcode },
7851 { Bad_Opcode },
7852 { Bad_Opcode },
7853 { Bad_Opcode },
5dd85c99 7854 /* 68 */
592d1631
L
7855 { Bad_Opcode },
7856 { Bad_Opcode },
7857 { Bad_Opcode },
7858 { Bad_Opcode },
7859 { Bad_Opcode },
7860 { Bad_Opcode },
7861 { Bad_Opcode },
7862 { Bad_Opcode },
5dd85c99 7863 /* 70 */
592d1631
L
7864 { Bad_Opcode },
7865 { Bad_Opcode },
7866 { Bad_Opcode },
7867 { Bad_Opcode },
7868 { Bad_Opcode },
7869 { Bad_Opcode },
7870 { Bad_Opcode },
7871 { Bad_Opcode },
5dd85c99 7872 /* 78 */
592d1631
L
7873 { Bad_Opcode },
7874 { Bad_Opcode },
7875 { Bad_Opcode },
7876 { Bad_Opcode },
7877 { Bad_Opcode },
7878 { Bad_Opcode },
7879 { Bad_Opcode },
7880 { Bad_Opcode },
5dd85c99 7881 /* 80 */
592a252b
L
7882 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) },
7883 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) },
5dd85c99
SP
7884 { "vfrczss", { XM, EXd } },
7885 { "vfrczsd", { XM, EXq } },
592d1631
L
7886 { Bad_Opcode },
7887 { Bad_Opcode },
7888 { Bad_Opcode },
7889 { Bad_Opcode },
5dd85c99 7890 /* 88 */
592d1631
L
7891 { Bad_Opcode },
7892 { Bad_Opcode },
7893 { Bad_Opcode },
7894 { Bad_Opcode },
7895 { Bad_Opcode },
7896 { Bad_Opcode },
7897 { Bad_Opcode },
7898 { Bad_Opcode },
5dd85c99
SP
7899 /* 90 */
7900 { "vprotb", { XM, Vex_2src_1, Vex_2src_2 } },
7901 { "vprotw", { XM, Vex_2src_1, Vex_2src_2 } },
7902 { "vprotd", { XM, Vex_2src_1, Vex_2src_2 } },
7903 { "vprotq", { XM, Vex_2src_1, Vex_2src_2 } },
7904 { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 } },
7905 { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 } },
7906 { "vpshld", { XM, Vex_2src_1, Vex_2src_2 } },
7907 { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 } },
7908 /* 98 */
7909 { "vpshab", { XM, Vex_2src_1, Vex_2src_2 } },
7910 { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 } },
7911 { "vpshad", { XM, Vex_2src_1, Vex_2src_2 } },
7912 { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 } },
592d1631
L
7913 { Bad_Opcode },
7914 { Bad_Opcode },
7915 { Bad_Opcode },
7916 { Bad_Opcode },
5dd85c99 7917 /* a0 */
592d1631
L
7918 { Bad_Opcode },
7919 { Bad_Opcode },
7920 { Bad_Opcode },
7921 { Bad_Opcode },
7922 { Bad_Opcode },
7923 { Bad_Opcode },
7924 { Bad_Opcode },
7925 { Bad_Opcode },
5dd85c99 7926 /* a8 */
592d1631
L
7927 { Bad_Opcode },
7928 { Bad_Opcode },
7929 { Bad_Opcode },
7930 { Bad_Opcode },
7931 { Bad_Opcode },
7932 { Bad_Opcode },
7933 { Bad_Opcode },
7934 { Bad_Opcode },
5dd85c99 7935 /* b0 */
592d1631
L
7936 { Bad_Opcode },
7937 { Bad_Opcode },
7938 { Bad_Opcode },
7939 { Bad_Opcode },
7940 { Bad_Opcode },
7941 { Bad_Opcode },
7942 { Bad_Opcode },
7943 { Bad_Opcode },
5dd85c99 7944 /* b8 */
592d1631
L
7945 { Bad_Opcode },
7946 { Bad_Opcode },
7947 { Bad_Opcode },
7948 { Bad_Opcode },
7949 { Bad_Opcode },
7950 { Bad_Opcode },
7951 { Bad_Opcode },
7952 { Bad_Opcode },
5dd85c99 7953 /* c0 */
592d1631 7954 { Bad_Opcode },
5dd85c99
SP
7955 { "vphaddbw", { XM, EXxmm } },
7956 { "vphaddbd", { XM, EXxmm } },
7957 { "vphaddbq", { XM, EXxmm } },
592d1631
L
7958 { Bad_Opcode },
7959 { Bad_Opcode },
5dd85c99
SP
7960 { "vphaddwd", { XM, EXxmm } },
7961 { "vphaddwq", { XM, EXxmm } },
7962 /* c8 */
592d1631
L
7963 { Bad_Opcode },
7964 { Bad_Opcode },
7965 { Bad_Opcode },
5dd85c99 7966 { "vphadddq", { XM, EXxmm } },
592d1631
L
7967 { Bad_Opcode },
7968 { Bad_Opcode },
7969 { Bad_Opcode },
7970 { Bad_Opcode },
5dd85c99 7971 /* d0 */
592d1631 7972 { Bad_Opcode },
5dd85c99
SP
7973 { "vphaddubw", { XM, EXxmm } },
7974 { "vphaddubd", { XM, EXxmm } },
7975 { "vphaddubq", { XM, EXxmm } },
592d1631
L
7976 { Bad_Opcode },
7977 { Bad_Opcode },
5dd85c99
SP
7978 { "vphadduwd", { XM, EXxmm } },
7979 { "vphadduwq", { XM, EXxmm } },
7980 /* d8 */
592d1631
L
7981 { Bad_Opcode },
7982 { Bad_Opcode },
7983 { Bad_Opcode },
5dd85c99 7984 { "vphaddudq", { XM, EXxmm } },
592d1631
L
7985 { Bad_Opcode },
7986 { Bad_Opcode },
7987 { Bad_Opcode },
7988 { Bad_Opcode },
5dd85c99 7989 /* e0 */
592d1631 7990 { Bad_Opcode },
5dd85c99
SP
7991 { "vphsubbw", { XM, EXxmm } },
7992 { "vphsubwd", { XM, EXxmm } },
7993 { "vphsubdq", { XM, EXxmm } },
592d1631
L
7994 { Bad_Opcode },
7995 { Bad_Opcode },
7996 { Bad_Opcode },
7997 { Bad_Opcode },
4e7d34a6 7998 /* e8 */
592d1631
L
7999 { Bad_Opcode },
8000 { Bad_Opcode },
8001 { Bad_Opcode },
8002 { Bad_Opcode },
8003 { Bad_Opcode },
8004 { Bad_Opcode },
8005 { Bad_Opcode },
8006 { Bad_Opcode },
4e7d34a6 8007 /* f0 */
592d1631
L
8008 { Bad_Opcode },
8009 { Bad_Opcode },
8010 { Bad_Opcode },
8011 { Bad_Opcode },
8012 { Bad_Opcode },
8013 { Bad_Opcode },
8014 { Bad_Opcode },
8015 { Bad_Opcode },
4e7d34a6 8016 /* f8 */
592d1631
L
8017 { Bad_Opcode },
8018 { Bad_Opcode },
8019 { Bad_Opcode },
8020 { Bad_Opcode },
8021 { Bad_Opcode },
8022 { Bad_Opcode },
8023 { Bad_Opcode },
8024 { Bad_Opcode },
4e7d34a6 8025 },
f88c9eb0 8026 /* XOP_0A */
4e7d34a6
L
8027 {
8028 /* 00 */
592d1631
L
8029 { Bad_Opcode },
8030 { Bad_Opcode },
8031 { Bad_Opcode },
8032 { Bad_Opcode },
8033 { Bad_Opcode },
8034 { Bad_Opcode },
8035 { Bad_Opcode },
8036 { Bad_Opcode },
4e7d34a6 8037 /* 08 */
592d1631
L
8038 { Bad_Opcode },
8039 { Bad_Opcode },
8040 { Bad_Opcode },
8041 { Bad_Opcode },
8042 { Bad_Opcode },
8043 { Bad_Opcode },
8044 { Bad_Opcode },
8045 { Bad_Opcode },
4e7d34a6 8046 /* 10 */
2a2a0f38 8047 { "bextr", { Gv, Ev, Iq } },
592d1631 8048 { Bad_Opcode },
f88c9eb0 8049 { REG_TABLE (REG_XOP_LWP) },
592d1631
L
8050 { Bad_Opcode },
8051 { Bad_Opcode },
8052 { Bad_Opcode },
8053 { Bad_Opcode },
8054 { Bad_Opcode },
4e7d34a6 8055 /* 18 */
592d1631
L
8056 { Bad_Opcode },
8057 { Bad_Opcode },
8058 { Bad_Opcode },
8059 { Bad_Opcode },
8060 { Bad_Opcode },
8061 { Bad_Opcode },
8062 { Bad_Opcode },
8063 { Bad_Opcode },
4e7d34a6 8064 /* 20 */
592d1631
L
8065 { Bad_Opcode },
8066 { Bad_Opcode },
8067 { Bad_Opcode },
8068 { Bad_Opcode },
8069 { Bad_Opcode },
8070 { Bad_Opcode },
8071 { Bad_Opcode },
8072 { Bad_Opcode },
4e7d34a6 8073 /* 28 */
592d1631
L
8074 { Bad_Opcode },
8075 { Bad_Opcode },
8076 { Bad_Opcode },
8077 { Bad_Opcode },
8078 { Bad_Opcode },
8079 { Bad_Opcode },
8080 { Bad_Opcode },
8081 { Bad_Opcode },
4e7d34a6 8082 /* 30 */
592d1631
L
8083 { Bad_Opcode },
8084 { Bad_Opcode },
8085 { Bad_Opcode },
8086 { Bad_Opcode },
8087 { Bad_Opcode },
8088 { Bad_Opcode },
8089 { Bad_Opcode },
8090 { Bad_Opcode },
c0f3af97 8091 /* 38 */
592d1631
L
8092 { Bad_Opcode },
8093 { Bad_Opcode },
8094 { Bad_Opcode },
8095 { Bad_Opcode },
8096 { Bad_Opcode },
8097 { Bad_Opcode },
8098 { Bad_Opcode },
8099 { Bad_Opcode },
c0f3af97 8100 /* 40 */
592d1631
L
8101 { Bad_Opcode },
8102 { Bad_Opcode },
8103 { Bad_Opcode },
8104 { Bad_Opcode },
8105 { Bad_Opcode },
8106 { Bad_Opcode },
8107 { Bad_Opcode },
8108 { Bad_Opcode },
c1e679ec 8109 /* 48 */
592d1631
L
8110 { Bad_Opcode },
8111 { Bad_Opcode },
8112 { Bad_Opcode },
8113 { Bad_Opcode },
8114 { Bad_Opcode },
8115 { Bad_Opcode },
8116 { Bad_Opcode },
8117 { Bad_Opcode },
c1e679ec 8118 /* 50 */
592d1631
L
8119 { Bad_Opcode },
8120 { Bad_Opcode },
8121 { Bad_Opcode },
8122 { Bad_Opcode },
8123 { Bad_Opcode },
8124 { Bad_Opcode },
8125 { Bad_Opcode },
8126 { Bad_Opcode },
4e7d34a6 8127 /* 58 */
592d1631
L
8128 { Bad_Opcode },
8129 { Bad_Opcode },
8130 { Bad_Opcode },
8131 { Bad_Opcode },
8132 { Bad_Opcode },
8133 { Bad_Opcode },
8134 { Bad_Opcode },
8135 { Bad_Opcode },
4e7d34a6 8136 /* 60 */
592d1631
L
8137 { Bad_Opcode },
8138 { Bad_Opcode },
8139 { Bad_Opcode },
8140 { Bad_Opcode },
8141 { Bad_Opcode },
8142 { Bad_Opcode },
8143 { Bad_Opcode },
8144 { Bad_Opcode },
4e7d34a6 8145 /* 68 */
592d1631
L
8146 { Bad_Opcode },
8147 { Bad_Opcode },
8148 { Bad_Opcode },
8149 { Bad_Opcode },
8150 { Bad_Opcode },
8151 { Bad_Opcode },
8152 { Bad_Opcode },
8153 { Bad_Opcode },
4e7d34a6 8154 /* 70 */
592d1631
L
8155 { Bad_Opcode },
8156 { Bad_Opcode },
8157 { Bad_Opcode },
8158 { Bad_Opcode },
8159 { Bad_Opcode },
8160 { Bad_Opcode },
8161 { Bad_Opcode },
8162 { Bad_Opcode },
4e7d34a6 8163 /* 78 */
592d1631
L
8164 { Bad_Opcode },
8165 { Bad_Opcode },
8166 { Bad_Opcode },
8167 { Bad_Opcode },
8168 { Bad_Opcode },
8169 { Bad_Opcode },
8170 { Bad_Opcode },
8171 { Bad_Opcode },
4e7d34a6 8172 /* 80 */
592d1631
L
8173 { Bad_Opcode },
8174 { Bad_Opcode },
8175 { Bad_Opcode },
8176 { Bad_Opcode },
8177 { Bad_Opcode },
8178 { Bad_Opcode },
8179 { Bad_Opcode },
8180 { Bad_Opcode },
4e7d34a6 8181 /* 88 */
592d1631
L
8182 { Bad_Opcode },
8183 { Bad_Opcode },
8184 { Bad_Opcode },
8185 { Bad_Opcode },
8186 { Bad_Opcode },
8187 { Bad_Opcode },
8188 { Bad_Opcode },
8189 { Bad_Opcode },
4e7d34a6 8190 /* 90 */
592d1631
L
8191 { Bad_Opcode },
8192 { Bad_Opcode },
8193 { Bad_Opcode },
8194 { Bad_Opcode },
8195 { Bad_Opcode },
8196 { Bad_Opcode },
8197 { Bad_Opcode },
8198 { Bad_Opcode },
4e7d34a6 8199 /* 98 */
592d1631
L
8200 { Bad_Opcode },
8201 { Bad_Opcode },
8202 { Bad_Opcode },
8203 { Bad_Opcode },
8204 { Bad_Opcode },
8205 { Bad_Opcode },
8206 { Bad_Opcode },
8207 { Bad_Opcode },
4e7d34a6 8208 /* a0 */
592d1631
L
8209 { Bad_Opcode },
8210 { Bad_Opcode },
8211 { Bad_Opcode },
8212 { Bad_Opcode },
8213 { Bad_Opcode },
8214 { Bad_Opcode },
8215 { Bad_Opcode },
8216 { Bad_Opcode },
4e7d34a6 8217 /* a8 */
592d1631
L
8218 { Bad_Opcode },
8219 { Bad_Opcode },
8220 { Bad_Opcode },
8221 { Bad_Opcode },
8222 { Bad_Opcode },
8223 { Bad_Opcode },
8224 { Bad_Opcode },
8225 { Bad_Opcode },
d5d7db8e 8226 /* b0 */
592d1631
L
8227 { Bad_Opcode },
8228 { Bad_Opcode },
8229 { Bad_Opcode },
8230 { Bad_Opcode },
8231 { Bad_Opcode },
8232 { Bad_Opcode },
8233 { Bad_Opcode },
8234 { Bad_Opcode },
85f10a01 8235 /* b8 */
592d1631
L
8236 { Bad_Opcode },
8237 { Bad_Opcode },
8238 { Bad_Opcode },
8239 { Bad_Opcode },
8240 { Bad_Opcode },
8241 { Bad_Opcode },
8242 { Bad_Opcode },
8243 { Bad_Opcode },
85f10a01 8244 /* c0 */
592d1631
L
8245 { Bad_Opcode },
8246 { Bad_Opcode },
8247 { Bad_Opcode },
8248 { Bad_Opcode },
8249 { Bad_Opcode },
8250 { Bad_Opcode },
8251 { Bad_Opcode },
8252 { Bad_Opcode },
85f10a01 8253 /* c8 */
592d1631
L
8254 { Bad_Opcode },
8255 { Bad_Opcode },
8256 { Bad_Opcode },
8257 { Bad_Opcode },
8258 { Bad_Opcode },
8259 { Bad_Opcode },
8260 { Bad_Opcode },
8261 { Bad_Opcode },
85f10a01 8262 /* d0 */
592d1631
L
8263 { Bad_Opcode },
8264 { Bad_Opcode },
8265 { Bad_Opcode },
8266 { Bad_Opcode },
8267 { Bad_Opcode },
8268 { Bad_Opcode },
8269 { Bad_Opcode },
8270 { Bad_Opcode },
85f10a01 8271 /* d8 */
592d1631
L
8272 { Bad_Opcode },
8273 { Bad_Opcode },
8274 { Bad_Opcode },
8275 { Bad_Opcode },
8276 { Bad_Opcode },
8277 { Bad_Opcode },
8278 { Bad_Opcode },
8279 { Bad_Opcode },
85f10a01 8280 /* e0 */
592d1631
L
8281 { Bad_Opcode },
8282 { Bad_Opcode },
8283 { Bad_Opcode },
8284 { Bad_Opcode },
8285 { Bad_Opcode },
8286 { Bad_Opcode },
8287 { Bad_Opcode },
8288 { Bad_Opcode },
85f10a01 8289 /* e8 */
592d1631
L
8290 { Bad_Opcode },
8291 { Bad_Opcode },
8292 { Bad_Opcode },
8293 { Bad_Opcode },
8294 { Bad_Opcode },
8295 { Bad_Opcode },
8296 { Bad_Opcode },
8297 { Bad_Opcode },
85f10a01 8298 /* f0 */
592d1631
L
8299 { Bad_Opcode },
8300 { Bad_Opcode },
8301 { Bad_Opcode },
8302 { Bad_Opcode },
8303 { Bad_Opcode },
8304 { Bad_Opcode },
8305 { Bad_Opcode },
8306 { Bad_Opcode },
85f10a01 8307 /* f8 */
592d1631
L
8308 { Bad_Opcode },
8309 { Bad_Opcode },
8310 { Bad_Opcode },
8311 { Bad_Opcode },
8312 { Bad_Opcode },
8313 { Bad_Opcode },
8314 { Bad_Opcode },
8315 { Bad_Opcode },
85f10a01 8316 },
c0f3af97
L
8317};
8318
8319static const struct dis386 vex_table[][256] = {
8320 /* VEX_0F */
85f10a01
MM
8321 {
8322 /* 00 */
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 },
85f10a01 8331 /* 08 */
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 },
c0f3af97 8340 /* 10 */
592a252b
L
8341 { PREFIX_TABLE (PREFIX_VEX_0F10) },
8342 { PREFIX_TABLE (PREFIX_VEX_0F11) },
8343 { PREFIX_TABLE (PREFIX_VEX_0F12) },
8344 { MOD_TABLE (MOD_VEX_0F13) },
8345 { VEX_W_TABLE (VEX_W_0F14) },
8346 { VEX_W_TABLE (VEX_W_0F15) },
8347 { PREFIX_TABLE (PREFIX_VEX_0F16) },
8348 { MOD_TABLE (MOD_VEX_0F17) },
c0f3af97 8349 /* 18 */
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 },
c0f3af97 8358 /* 20 */
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 },
c0f3af97 8367 /* 28 */
592a252b
L
8368 { VEX_W_TABLE (VEX_W_0F28) },
8369 { VEX_W_TABLE (VEX_W_0F29) },
8370 { PREFIX_TABLE (PREFIX_VEX_0F2A) },
8371 { MOD_TABLE (MOD_VEX_0F2B) },
8372 { PREFIX_TABLE (PREFIX_VEX_0F2C) },
8373 { PREFIX_TABLE (PREFIX_VEX_0F2D) },
8374 { PREFIX_TABLE (PREFIX_VEX_0F2E) },
8375 { PREFIX_TABLE (PREFIX_VEX_0F2F) },
85f10a01 8376 /* 30 */
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 },
4e7d34a6 8385 /* 38 */
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 },
d5d7db8e 8394 /* 40 */
592d1631 8395 { Bad_Opcode },
43234a1e
L
8396 { PREFIX_TABLE (PREFIX_VEX_0F41) },
8397 { PREFIX_TABLE (PREFIX_VEX_0F42) },
592d1631 8398 { Bad_Opcode },
43234a1e
L
8399 { PREFIX_TABLE (PREFIX_VEX_0F44) },
8400 { PREFIX_TABLE (PREFIX_VEX_0F45) },
8401 { PREFIX_TABLE (PREFIX_VEX_0F46) },
8402 { PREFIX_TABLE (PREFIX_VEX_0F47) },
85f10a01 8403 /* 48 */
592d1631
L
8404 { Bad_Opcode },
8405 { Bad_Opcode },
8406 { Bad_Opcode },
43234a1e 8407 { PREFIX_TABLE (PREFIX_VEX_0F4B) },
592d1631
L
8408 { Bad_Opcode },
8409 { Bad_Opcode },
8410 { Bad_Opcode },
8411 { Bad_Opcode },
d5d7db8e 8412 /* 50 */
592a252b
L
8413 { MOD_TABLE (MOD_VEX_0F50) },
8414 { PREFIX_TABLE (PREFIX_VEX_0F51) },
8415 { PREFIX_TABLE (PREFIX_VEX_0F52) },
8416 { PREFIX_TABLE (PREFIX_VEX_0F53) },
c0f3af97
L
8417 { "vandpX", { XM, Vex, EXx } },
8418 { "vandnpX", { XM, Vex, EXx } },
8419 { "vorpX", { XM, Vex, EXx } },
8420 { "vxorpX", { XM, Vex, EXx } },
8421 /* 58 */
592a252b
L
8422 { PREFIX_TABLE (PREFIX_VEX_0F58) },
8423 { PREFIX_TABLE (PREFIX_VEX_0F59) },
8424 { PREFIX_TABLE (PREFIX_VEX_0F5A) },
8425 { PREFIX_TABLE (PREFIX_VEX_0F5B) },
8426 { PREFIX_TABLE (PREFIX_VEX_0F5C) },
8427 { PREFIX_TABLE (PREFIX_VEX_0F5D) },
8428 { PREFIX_TABLE (PREFIX_VEX_0F5E) },
8429 { PREFIX_TABLE (PREFIX_VEX_0F5F) },
c0f3af97 8430 /* 60 */
592a252b
L
8431 { PREFIX_TABLE (PREFIX_VEX_0F60) },
8432 { PREFIX_TABLE (PREFIX_VEX_0F61) },
8433 { PREFIX_TABLE (PREFIX_VEX_0F62) },
8434 { PREFIX_TABLE (PREFIX_VEX_0F63) },
8435 { PREFIX_TABLE (PREFIX_VEX_0F64) },
8436 { PREFIX_TABLE (PREFIX_VEX_0F65) },
8437 { PREFIX_TABLE (PREFIX_VEX_0F66) },
8438 { PREFIX_TABLE (PREFIX_VEX_0F67) },
c0f3af97 8439 /* 68 */
592a252b
L
8440 { PREFIX_TABLE (PREFIX_VEX_0F68) },
8441 { PREFIX_TABLE (PREFIX_VEX_0F69) },
8442 { PREFIX_TABLE (PREFIX_VEX_0F6A) },
8443 { PREFIX_TABLE (PREFIX_VEX_0F6B) },
8444 { PREFIX_TABLE (PREFIX_VEX_0F6C) },
8445 { PREFIX_TABLE (PREFIX_VEX_0F6D) },
8446 { PREFIX_TABLE (PREFIX_VEX_0F6E) },
8447 { PREFIX_TABLE (PREFIX_VEX_0F6F) },
c0f3af97 8448 /* 70 */
592a252b
L
8449 { PREFIX_TABLE (PREFIX_VEX_0F70) },
8450 { REG_TABLE (REG_VEX_0F71) },
8451 { REG_TABLE (REG_VEX_0F72) },
8452 { REG_TABLE (REG_VEX_0F73) },
8453 { PREFIX_TABLE (PREFIX_VEX_0F74) },
8454 { PREFIX_TABLE (PREFIX_VEX_0F75) },
8455 { PREFIX_TABLE (PREFIX_VEX_0F76) },
8456 { PREFIX_TABLE (PREFIX_VEX_0F77) },
c0f3af97 8457 /* 78 */
592d1631
L
8458 { Bad_Opcode },
8459 { Bad_Opcode },
8460 { Bad_Opcode },
8461 { Bad_Opcode },
592a252b
L
8462 { PREFIX_TABLE (PREFIX_VEX_0F7C) },
8463 { PREFIX_TABLE (PREFIX_VEX_0F7D) },
8464 { PREFIX_TABLE (PREFIX_VEX_0F7E) },
8465 { PREFIX_TABLE (PREFIX_VEX_0F7F) },
c0f3af97 8466 /* 80 */
592d1631
L
8467 { Bad_Opcode },
8468 { Bad_Opcode },
8469 { Bad_Opcode },
8470 { Bad_Opcode },
8471 { Bad_Opcode },
8472 { Bad_Opcode },
8473 { Bad_Opcode },
8474 { Bad_Opcode },
c0f3af97 8475 /* 88 */
592d1631
L
8476 { Bad_Opcode },
8477 { Bad_Opcode },
8478 { Bad_Opcode },
8479 { Bad_Opcode },
8480 { Bad_Opcode },
8481 { Bad_Opcode },
8482 { Bad_Opcode },
8483 { Bad_Opcode },
c0f3af97 8484 /* 90 */
43234a1e
L
8485 { PREFIX_TABLE (PREFIX_VEX_0F90) },
8486 { PREFIX_TABLE (PREFIX_VEX_0F91) },
8487 { PREFIX_TABLE (PREFIX_VEX_0F92) },
8488 { PREFIX_TABLE (PREFIX_VEX_0F93) },
592d1631
L
8489 { Bad_Opcode },
8490 { Bad_Opcode },
8491 { Bad_Opcode },
8492 { Bad_Opcode },
c0f3af97 8493 /* 98 */
43234a1e 8494 { PREFIX_TABLE (PREFIX_VEX_0F98) },
592d1631
L
8495 { Bad_Opcode },
8496 { Bad_Opcode },
8497 { Bad_Opcode },
8498 { Bad_Opcode },
8499 { Bad_Opcode },
8500 { Bad_Opcode },
8501 { Bad_Opcode },
c0f3af97 8502 /* a0 */
592d1631
L
8503 { Bad_Opcode },
8504 { Bad_Opcode },
8505 { Bad_Opcode },
8506 { Bad_Opcode },
8507 { Bad_Opcode },
8508 { Bad_Opcode },
8509 { Bad_Opcode },
8510 { Bad_Opcode },
c0f3af97 8511 /* a8 */
592d1631
L
8512 { Bad_Opcode },
8513 { Bad_Opcode },
8514 { Bad_Opcode },
8515 { Bad_Opcode },
8516 { Bad_Opcode },
8517 { Bad_Opcode },
592a252b 8518 { REG_TABLE (REG_VEX_0FAE) },
592d1631 8519 { Bad_Opcode },
c0f3af97 8520 /* b0 */
592d1631
L
8521 { Bad_Opcode },
8522 { Bad_Opcode },
8523 { Bad_Opcode },
8524 { Bad_Opcode },
8525 { Bad_Opcode },
8526 { Bad_Opcode },
8527 { Bad_Opcode },
8528 { Bad_Opcode },
c0f3af97 8529 /* b8 */
592d1631
L
8530 { Bad_Opcode },
8531 { Bad_Opcode },
8532 { Bad_Opcode },
8533 { Bad_Opcode },
8534 { Bad_Opcode },
8535 { Bad_Opcode },
8536 { Bad_Opcode },
8537 { Bad_Opcode },
c0f3af97 8538 /* c0 */
592d1631
L
8539 { Bad_Opcode },
8540 { Bad_Opcode },
592a252b 8541 { PREFIX_TABLE (PREFIX_VEX_0FC2) },
592d1631 8542 { Bad_Opcode },
592a252b
L
8543 { PREFIX_TABLE (PREFIX_VEX_0FC4) },
8544 { PREFIX_TABLE (PREFIX_VEX_0FC5) },
c0f3af97 8545 { "vshufpX", { XM, Vex, EXx, Ib } },
592d1631 8546 { Bad_Opcode },
c0f3af97 8547 /* c8 */
592d1631
L
8548 { Bad_Opcode },
8549 { Bad_Opcode },
8550 { Bad_Opcode },
8551 { Bad_Opcode },
8552 { Bad_Opcode },
8553 { Bad_Opcode },
8554 { Bad_Opcode },
8555 { Bad_Opcode },
c0f3af97 8556 /* d0 */
592a252b
L
8557 { PREFIX_TABLE (PREFIX_VEX_0FD0) },
8558 { PREFIX_TABLE (PREFIX_VEX_0FD1) },
8559 { PREFIX_TABLE (PREFIX_VEX_0FD2) },
8560 { PREFIX_TABLE (PREFIX_VEX_0FD3) },
8561 { PREFIX_TABLE (PREFIX_VEX_0FD4) },
8562 { PREFIX_TABLE (PREFIX_VEX_0FD5) },
8563 { PREFIX_TABLE (PREFIX_VEX_0FD6) },
8564 { PREFIX_TABLE (PREFIX_VEX_0FD7) },
c0f3af97 8565 /* d8 */
592a252b
L
8566 { PREFIX_TABLE (PREFIX_VEX_0FD8) },
8567 { PREFIX_TABLE (PREFIX_VEX_0FD9) },
8568 { PREFIX_TABLE (PREFIX_VEX_0FDA) },
8569 { PREFIX_TABLE (PREFIX_VEX_0FDB) },
8570 { PREFIX_TABLE (PREFIX_VEX_0FDC) },
8571 { PREFIX_TABLE (PREFIX_VEX_0FDD) },
8572 { PREFIX_TABLE (PREFIX_VEX_0FDE) },
8573 { PREFIX_TABLE (PREFIX_VEX_0FDF) },
c0f3af97 8574 /* e0 */
592a252b
L
8575 { PREFIX_TABLE (PREFIX_VEX_0FE0) },
8576 { PREFIX_TABLE (PREFIX_VEX_0FE1) },
8577 { PREFIX_TABLE (PREFIX_VEX_0FE2) },
8578 { PREFIX_TABLE (PREFIX_VEX_0FE3) },
8579 { PREFIX_TABLE (PREFIX_VEX_0FE4) },
8580 { PREFIX_TABLE (PREFIX_VEX_0FE5) },
8581 { PREFIX_TABLE (PREFIX_VEX_0FE6) },
8582 { PREFIX_TABLE (PREFIX_VEX_0FE7) },
c0f3af97 8583 /* e8 */
592a252b
L
8584 { PREFIX_TABLE (PREFIX_VEX_0FE8) },
8585 { PREFIX_TABLE (PREFIX_VEX_0FE9) },
8586 { PREFIX_TABLE (PREFIX_VEX_0FEA) },
8587 { PREFIX_TABLE (PREFIX_VEX_0FEB) },
8588 { PREFIX_TABLE (PREFIX_VEX_0FEC) },
8589 { PREFIX_TABLE (PREFIX_VEX_0FED) },
8590 { PREFIX_TABLE (PREFIX_VEX_0FEE) },
8591 { PREFIX_TABLE (PREFIX_VEX_0FEF) },
c0f3af97 8592 /* f0 */
592a252b
L
8593 { PREFIX_TABLE (PREFIX_VEX_0FF0) },
8594 { PREFIX_TABLE (PREFIX_VEX_0FF1) },
8595 { PREFIX_TABLE (PREFIX_VEX_0FF2) },
8596 { PREFIX_TABLE (PREFIX_VEX_0FF3) },
8597 { PREFIX_TABLE (PREFIX_VEX_0FF4) },
8598 { PREFIX_TABLE (PREFIX_VEX_0FF5) },
8599 { PREFIX_TABLE (PREFIX_VEX_0FF6) },
8600 { PREFIX_TABLE (PREFIX_VEX_0FF7) },
c0f3af97 8601 /* f8 */
592a252b
L
8602 { PREFIX_TABLE (PREFIX_VEX_0FF8) },
8603 { PREFIX_TABLE (PREFIX_VEX_0FF9) },
8604 { PREFIX_TABLE (PREFIX_VEX_0FFA) },
8605 { PREFIX_TABLE (PREFIX_VEX_0FFB) },
8606 { PREFIX_TABLE (PREFIX_VEX_0FFC) },
8607 { PREFIX_TABLE (PREFIX_VEX_0FFD) },
8608 { PREFIX_TABLE (PREFIX_VEX_0FFE) },
592d1631 8609 { Bad_Opcode },
c0f3af97
L
8610 },
8611 /* VEX_0F38 */
8612 {
8613 /* 00 */
592a252b
L
8614 { PREFIX_TABLE (PREFIX_VEX_0F3800) },
8615 { PREFIX_TABLE (PREFIX_VEX_0F3801) },
8616 { PREFIX_TABLE (PREFIX_VEX_0F3802) },
8617 { PREFIX_TABLE (PREFIX_VEX_0F3803) },
8618 { PREFIX_TABLE (PREFIX_VEX_0F3804) },
8619 { PREFIX_TABLE (PREFIX_VEX_0F3805) },
8620 { PREFIX_TABLE (PREFIX_VEX_0F3806) },
8621 { PREFIX_TABLE (PREFIX_VEX_0F3807) },
c0f3af97 8622 /* 08 */
592a252b
L
8623 { PREFIX_TABLE (PREFIX_VEX_0F3808) },
8624 { PREFIX_TABLE (PREFIX_VEX_0F3809) },
8625 { PREFIX_TABLE (PREFIX_VEX_0F380A) },
8626 { PREFIX_TABLE (PREFIX_VEX_0F380B) },
8627 { PREFIX_TABLE (PREFIX_VEX_0F380C) },
8628 { PREFIX_TABLE (PREFIX_VEX_0F380D) },
8629 { PREFIX_TABLE (PREFIX_VEX_0F380E) },
8630 { PREFIX_TABLE (PREFIX_VEX_0F380F) },
c0f3af97 8631 /* 10 */
592d1631
L
8632 { Bad_Opcode },
8633 { Bad_Opcode },
8634 { Bad_Opcode },
592a252b 8635 { PREFIX_TABLE (PREFIX_VEX_0F3813) },
592d1631
L
8636 { Bad_Opcode },
8637 { Bad_Opcode },
6c30d220 8638 { PREFIX_TABLE (PREFIX_VEX_0F3816) },
592a252b 8639 { PREFIX_TABLE (PREFIX_VEX_0F3817) },
c0f3af97 8640 /* 18 */
592a252b
L
8641 { PREFIX_TABLE (PREFIX_VEX_0F3818) },
8642 { PREFIX_TABLE (PREFIX_VEX_0F3819) },
8643 { PREFIX_TABLE (PREFIX_VEX_0F381A) },
592d1631 8644 { Bad_Opcode },
592a252b
L
8645 { PREFIX_TABLE (PREFIX_VEX_0F381C) },
8646 { PREFIX_TABLE (PREFIX_VEX_0F381D) },
8647 { PREFIX_TABLE (PREFIX_VEX_0F381E) },
592d1631 8648 { Bad_Opcode },
c0f3af97 8649 /* 20 */
592a252b
L
8650 { PREFIX_TABLE (PREFIX_VEX_0F3820) },
8651 { PREFIX_TABLE (PREFIX_VEX_0F3821) },
8652 { PREFIX_TABLE (PREFIX_VEX_0F3822) },
8653 { PREFIX_TABLE (PREFIX_VEX_0F3823) },
8654 { PREFIX_TABLE (PREFIX_VEX_0F3824) },
8655 { PREFIX_TABLE (PREFIX_VEX_0F3825) },
592d1631
L
8656 { Bad_Opcode },
8657 { Bad_Opcode },
c0f3af97 8658 /* 28 */
592a252b
L
8659 { PREFIX_TABLE (PREFIX_VEX_0F3828) },
8660 { PREFIX_TABLE (PREFIX_VEX_0F3829) },
8661 { PREFIX_TABLE (PREFIX_VEX_0F382A) },
8662 { PREFIX_TABLE (PREFIX_VEX_0F382B) },
8663 { PREFIX_TABLE (PREFIX_VEX_0F382C) },
8664 { PREFIX_TABLE (PREFIX_VEX_0F382D) },
8665 { PREFIX_TABLE (PREFIX_VEX_0F382E) },
8666 { PREFIX_TABLE (PREFIX_VEX_0F382F) },
c0f3af97 8667 /* 30 */
592a252b
L
8668 { PREFIX_TABLE (PREFIX_VEX_0F3830) },
8669 { PREFIX_TABLE (PREFIX_VEX_0F3831) },
8670 { PREFIX_TABLE (PREFIX_VEX_0F3832) },
8671 { PREFIX_TABLE (PREFIX_VEX_0F3833) },
8672 { PREFIX_TABLE (PREFIX_VEX_0F3834) },
8673 { PREFIX_TABLE (PREFIX_VEX_0F3835) },
6c30d220 8674 { PREFIX_TABLE (PREFIX_VEX_0F3836) },
592a252b 8675 { PREFIX_TABLE (PREFIX_VEX_0F3837) },
c0f3af97 8676 /* 38 */
592a252b
L
8677 { PREFIX_TABLE (PREFIX_VEX_0F3838) },
8678 { PREFIX_TABLE (PREFIX_VEX_0F3839) },
8679 { PREFIX_TABLE (PREFIX_VEX_0F383A) },
8680 { PREFIX_TABLE (PREFIX_VEX_0F383B) },
8681 { PREFIX_TABLE (PREFIX_VEX_0F383C) },
8682 { PREFIX_TABLE (PREFIX_VEX_0F383D) },
8683 { PREFIX_TABLE (PREFIX_VEX_0F383E) },
8684 { PREFIX_TABLE (PREFIX_VEX_0F383F) },
c0f3af97 8685 /* 40 */
592a252b
L
8686 { PREFIX_TABLE (PREFIX_VEX_0F3840) },
8687 { PREFIX_TABLE (PREFIX_VEX_0F3841) },
592d1631
L
8688 { Bad_Opcode },
8689 { Bad_Opcode },
8690 { Bad_Opcode },
6c30d220
L
8691 { PREFIX_TABLE (PREFIX_VEX_0F3845) },
8692 { PREFIX_TABLE (PREFIX_VEX_0F3846) },
8693 { PREFIX_TABLE (PREFIX_VEX_0F3847) },
c0f3af97 8694 /* 48 */
592d1631
L
8695 { Bad_Opcode },
8696 { Bad_Opcode },
8697 { Bad_Opcode },
8698 { Bad_Opcode },
8699 { Bad_Opcode },
8700 { Bad_Opcode },
8701 { Bad_Opcode },
8702 { Bad_Opcode },
c0f3af97 8703 /* 50 */
592d1631
L
8704 { Bad_Opcode },
8705 { Bad_Opcode },
8706 { Bad_Opcode },
8707 { Bad_Opcode },
8708 { Bad_Opcode },
8709 { Bad_Opcode },
8710 { Bad_Opcode },
8711 { Bad_Opcode },
c0f3af97 8712 /* 58 */
6c30d220
L
8713 { PREFIX_TABLE (PREFIX_VEX_0F3858) },
8714 { PREFIX_TABLE (PREFIX_VEX_0F3859) },
8715 { PREFIX_TABLE (PREFIX_VEX_0F385A) },
592d1631
L
8716 { Bad_Opcode },
8717 { Bad_Opcode },
8718 { Bad_Opcode },
8719 { Bad_Opcode },
8720 { Bad_Opcode },
c0f3af97 8721 /* 60 */
592d1631
L
8722 { Bad_Opcode },
8723 { Bad_Opcode },
8724 { Bad_Opcode },
8725 { Bad_Opcode },
8726 { Bad_Opcode },
8727 { Bad_Opcode },
8728 { Bad_Opcode },
8729 { Bad_Opcode },
c0f3af97 8730 /* 68 */
592d1631
L
8731 { Bad_Opcode },
8732 { Bad_Opcode },
8733 { Bad_Opcode },
8734 { Bad_Opcode },
8735 { Bad_Opcode },
8736 { Bad_Opcode },
8737 { Bad_Opcode },
8738 { Bad_Opcode },
c0f3af97 8739 /* 70 */
592d1631
L
8740 { Bad_Opcode },
8741 { Bad_Opcode },
8742 { Bad_Opcode },
8743 { Bad_Opcode },
8744 { Bad_Opcode },
8745 { Bad_Opcode },
8746 { Bad_Opcode },
8747 { Bad_Opcode },
c0f3af97 8748 /* 78 */
6c30d220
L
8749 { PREFIX_TABLE (PREFIX_VEX_0F3878) },
8750 { PREFIX_TABLE (PREFIX_VEX_0F3879) },
592d1631
L
8751 { Bad_Opcode },
8752 { Bad_Opcode },
8753 { Bad_Opcode },
8754 { Bad_Opcode },
8755 { Bad_Opcode },
8756 { Bad_Opcode },
c0f3af97 8757 /* 80 */
592d1631
L
8758 { Bad_Opcode },
8759 { Bad_Opcode },
8760 { Bad_Opcode },
8761 { Bad_Opcode },
8762 { Bad_Opcode },
8763 { Bad_Opcode },
8764 { Bad_Opcode },
8765 { Bad_Opcode },
c0f3af97 8766 /* 88 */
592d1631
L
8767 { Bad_Opcode },
8768 { Bad_Opcode },
8769 { Bad_Opcode },
8770 { Bad_Opcode },
6c30d220 8771 { PREFIX_TABLE (PREFIX_VEX_0F388C) },
592d1631 8772 { Bad_Opcode },
6c30d220 8773 { PREFIX_TABLE (PREFIX_VEX_0F388E) },
592d1631 8774 { Bad_Opcode },
c0f3af97 8775 /* 90 */
6c30d220
L
8776 { PREFIX_TABLE (PREFIX_VEX_0F3890) },
8777 { PREFIX_TABLE (PREFIX_VEX_0F3891) },
8778 { PREFIX_TABLE (PREFIX_VEX_0F3892) },
8779 { PREFIX_TABLE (PREFIX_VEX_0F3893) },
592d1631
L
8780 { Bad_Opcode },
8781 { Bad_Opcode },
592a252b
L
8782 { PREFIX_TABLE (PREFIX_VEX_0F3896) },
8783 { PREFIX_TABLE (PREFIX_VEX_0F3897) },
c0f3af97 8784 /* 98 */
592a252b
L
8785 { PREFIX_TABLE (PREFIX_VEX_0F3898) },
8786 { PREFIX_TABLE (PREFIX_VEX_0F3899) },
8787 { PREFIX_TABLE (PREFIX_VEX_0F389A) },
8788 { PREFIX_TABLE (PREFIX_VEX_0F389B) },
8789 { PREFIX_TABLE (PREFIX_VEX_0F389C) },
8790 { PREFIX_TABLE (PREFIX_VEX_0F389D) },
8791 { PREFIX_TABLE (PREFIX_VEX_0F389E) },
8792 { PREFIX_TABLE (PREFIX_VEX_0F389F) },
c0f3af97 8793 /* a0 */
592d1631
L
8794 { Bad_Opcode },
8795 { Bad_Opcode },
8796 { Bad_Opcode },
8797 { Bad_Opcode },
8798 { Bad_Opcode },
8799 { Bad_Opcode },
592a252b
L
8800 { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
8801 { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
c0f3af97 8802 /* a8 */
592a252b
L
8803 { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
8804 { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
8805 { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
8806 { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
8807 { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
8808 { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
8809 { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
8810 { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
c0f3af97 8811 /* b0 */
592d1631
L
8812 { Bad_Opcode },
8813 { Bad_Opcode },
8814 { Bad_Opcode },
8815 { Bad_Opcode },
8816 { Bad_Opcode },
8817 { Bad_Opcode },
592a252b
L
8818 { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
8819 { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
c0f3af97 8820 /* b8 */
592a252b
L
8821 { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
8822 { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
8823 { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
8824 { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
8825 { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
8826 { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
8827 { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
8828 { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
c0f3af97 8829 /* c0 */
592d1631
L
8830 { Bad_Opcode },
8831 { Bad_Opcode },
8832 { Bad_Opcode },
8833 { Bad_Opcode },
8834 { Bad_Opcode },
8835 { Bad_Opcode },
8836 { Bad_Opcode },
8837 { Bad_Opcode },
c0f3af97 8838 /* c8 */
592d1631
L
8839 { Bad_Opcode },
8840 { Bad_Opcode },
8841 { Bad_Opcode },
8842 { Bad_Opcode },
8843 { Bad_Opcode },
8844 { Bad_Opcode },
8845 { Bad_Opcode },
8846 { Bad_Opcode },
c0f3af97 8847 /* d0 */
592d1631
L
8848 { Bad_Opcode },
8849 { Bad_Opcode },
8850 { Bad_Opcode },
8851 { Bad_Opcode },
8852 { Bad_Opcode },
8853 { Bad_Opcode },
8854 { Bad_Opcode },
8855 { Bad_Opcode },
c0f3af97 8856 /* d8 */
592d1631
L
8857 { Bad_Opcode },
8858 { Bad_Opcode },
8859 { Bad_Opcode },
592a252b
L
8860 { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
8861 { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
8862 { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
8863 { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
8864 { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
c0f3af97 8865 /* e0 */
592d1631
L
8866 { Bad_Opcode },
8867 { Bad_Opcode },
8868 { Bad_Opcode },
8869 { Bad_Opcode },
8870 { Bad_Opcode },
8871 { Bad_Opcode },
8872 { Bad_Opcode },
8873 { Bad_Opcode },
c0f3af97 8874 /* e8 */
592d1631
L
8875 { Bad_Opcode },
8876 { Bad_Opcode },
8877 { Bad_Opcode },
8878 { Bad_Opcode },
8879 { Bad_Opcode },
8880 { Bad_Opcode },
8881 { Bad_Opcode },
8882 { Bad_Opcode },
c0f3af97 8883 /* f0 */
592d1631
L
8884 { Bad_Opcode },
8885 { Bad_Opcode },
f12dc422
L
8886 { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
8887 { REG_TABLE (REG_VEX_0F38F3) },
592d1631 8888 { Bad_Opcode },
6c30d220
L
8889 { PREFIX_TABLE (PREFIX_VEX_0F38F5) },
8890 { PREFIX_TABLE (PREFIX_VEX_0F38F6) },
f12dc422 8891 { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
c0f3af97 8892 /* f8 */
592d1631
L
8893 { Bad_Opcode },
8894 { Bad_Opcode },
8895 { Bad_Opcode },
8896 { Bad_Opcode },
8897 { Bad_Opcode },
8898 { Bad_Opcode },
8899 { Bad_Opcode },
8900 { Bad_Opcode },
c0f3af97
L
8901 },
8902 /* VEX_0F3A */
8903 {
8904 /* 00 */
6c30d220
L
8905 { PREFIX_TABLE (PREFIX_VEX_0F3A00) },
8906 { PREFIX_TABLE (PREFIX_VEX_0F3A01) },
8907 { PREFIX_TABLE (PREFIX_VEX_0F3A02) },
592d1631 8908 { Bad_Opcode },
592a252b
L
8909 { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
8910 { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
8911 { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
592d1631 8912 { Bad_Opcode },
c0f3af97 8913 /* 08 */
592a252b
L
8914 { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
8915 { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
8916 { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
8917 { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
8918 { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
8919 { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
8920 { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
8921 { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
c0f3af97 8922 /* 10 */
592d1631
L
8923 { Bad_Opcode },
8924 { Bad_Opcode },
8925 { Bad_Opcode },
8926 { Bad_Opcode },
592a252b
L
8927 { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
8928 { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
8929 { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
8930 { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
c0f3af97 8931 /* 18 */
592a252b
L
8932 { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
8933 { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
592d1631
L
8934 { Bad_Opcode },
8935 { Bad_Opcode },
8936 { Bad_Opcode },
592a252b 8937 { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
592d1631
L
8938 { Bad_Opcode },
8939 { Bad_Opcode },
c0f3af97 8940 /* 20 */
592a252b
L
8941 { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
8942 { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
8943 { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
592d1631
L
8944 { Bad_Opcode },
8945 { Bad_Opcode },
8946 { Bad_Opcode },
8947 { Bad_Opcode },
8948 { Bad_Opcode },
c0f3af97 8949 /* 28 */
592d1631
L
8950 { Bad_Opcode },
8951 { Bad_Opcode },
8952 { Bad_Opcode },
8953 { Bad_Opcode },
8954 { Bad_Opcode },
8955 { Bad_Opcode },
8956 { Bad_Opcode },
8957 { Bad_Opcode },
c0f3af97 8958 /* 30 */
43234a1e 8959 { PREFIX_TABLE (PREFIX_VEX_0F3A30) },
592d1631 8960 { Bad_Opcode },
43234a1e 8961 { PREFIX_TABLE (PREFIX_VEX_0F3A32) },
592d1631
L
8962 { Bad_Opcode },
8963 { Bad_Opcode },
8964 { Bad_Opcode },
8965 { Bad_Opcode },
8966 { Bad_Opcode },
c0f3af97 8967 /* 38 */
6c30d220
L
8968 { PREFIX_TABLE (PREFIX_VEX_0F3A38) },
8969 { PREFIX_TABLE (PREFIX_VEX_0F3A39) },
592d1631
L
8970 { Bad_Opcode },
8971 { Bad_Opcode },
8972 { Bad_Opcode },
8973 { Bad_Opcode },
8974 { Bad_Opcode },
8975 { Bad_Opcode },
c0f3af97 8976 /* 40 */
592a252b
L
8977 { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
8978 { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
8979 { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
592d1631 8980 { Bad_Opcode },
592a252b 8981 { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
592d1631 8982 { Bad_Opcode },
6c30d220 8983 { PREFIX_TABLE (PREFIX_VEX_0F3A46) },
592d1631 8984 { Bad_Opcode },
c0f3af97 8985 /* 48 */
592a252b
L
8986 { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
8987 { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
8988 { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
8989 { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
8990 { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
592d1631
L
8991 { Bad_Opcode },
8992 { Bad_Opcode },
8993 { Bad_Opcode },
c0f3af97 8994 /* 50 */
592d1631
L
8995 { Bad_Opcode },
8996 { Bad_Opcode },
8997 { Bad_Opcode },
8998 { Bad_Opcode },
8999 { Bad_Opcode },
9000 { Bad_Opcode },
9001 { Bad_Opcode },
9002 { Bad_Opcode },
c0f3af97 9003 /* 58 */
592d1631
L
9004 { Bad_Opcode },
9005 { Bad_Opcode },
9006 { Bad_Opcode },
9007 { Bad_Opcode },
592a252b
L
9008 { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
9009 { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
9010 { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
9011 { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
c0f3af97 9012 /* 60 */
592a252b
L
9013 { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
9014 { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
9015 { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
9016 { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
592d1631
L
9017 { Bad_Opcode },
9018 { Bad_Opcode },
9019 { Bad_Opcode },
9020 { Bad_Opcode },
c0f3af97 9021 /* 68 */
592a252b
L
9022 { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
9023 { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
9024 { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
9025 { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
9026 { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
9027 { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
9028 { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
9029 { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
c0f3af97 9030 /* 70 */
592d1631
L
9031 { Bad_Opcode },
9032 { Bad_Opcode },
9033 { Bad_Opcode },
9034 { Bad_Opcode },
9035 { Bad_Opcode },
9036 { Bad_Opcode },
9037 { Bad_Opcode },
9038 { Bad_Opcode },
c0f3af97 9039 /* 78 */
592a252b
L
9040 { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
9041 { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
9042 { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
9043 { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
9044 { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
9045 { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
9046 { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
9047 { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
c0f3af97 9048 /* 80 */
592d1631
L
9049 { Bad_Opcode },
9050 { Bad_Opcode },
9051 { Bad_Opcode },
9052 { Bad_Opcode },
9053 { Bad_Opcode },
9054 { Bad_Opcode },
9055 { Bad_Opcode },
9056 { Bad_Opcode },
c0f3af97 9057 /* 88 */
592d1631
L
9058 { Bad_Opcode },
9059 { Bad_Opcode },
9060 { Bad_Opcode },
9061 { Bad_Opcode },
9062 { Bad_Opcode },
9063 { Bad_Opcode },
9064 { Bad_Opcode },
9065 { Bad_Opcode },
c0f3af97 9066 /* 90 */
592d1631
L
9067 { Bad_Opcode },
9068 { Bad_Opcode },
9069 { Bad_Opcode },
9070 { Bad_Opcode },
9071 { Bad_Opcode },
9072 { Bad_Opcode },
9073 { Bad_Opcode },
9074 { Bad_Opcode },
c0f3af97 9075 /* 98 */
592d1631
L
9076 { Bad_Opcode },
9077 { Bad_Opcode },
9078 { Bad_Opcode },
9079 { Bad_Opcode },
9080 { Bad_Opcode },
9081 { Bad_Opcode },
9082 { Bad_Opcode },
9083 { Bad_Opcode },
c0f3af97 9084 /* a0 */
592d1631
L
9085 { Bad_Opcode },
9086 { Bad_Opcode },
9087 { Bad_Opcode },
9088 { Bad_Opcode },
9089 { Bad_Opcode },
9090 { Bad_Opcode },
9091 { Bad_Opcode },
9092 { Bad_Opcode },
c0f3af97 9093 /* a8 */
592d1631
L
9094 { Bad_Opcode },
9095 { Bad_Opcode },
9096 { Bad_Opcode },
9097 { Bad_Opcode },
9098 { Bad_Opcode },
9099 { Bad_Opcode },
9100 { Bad_Opcode },
9101 { Bad_Opcode },
c0f3af97 9102 /* b0 */
592d1631
L
9103 { Bad_Opcode },
9104 { Bad_Opcode },
9105 { Bad_Opcode },
9106 { Bad_Opcode },
9107 { Bad_Opcode },
9108 { Bad_Opcode },
9109 { Bad_Opcode },
9110 { Bad_Opcode },
c0f3af97 9111 /* b8 */
592d1631
L
9112 { Bad_Opcode },
9113 { Bad_Opcode },
9114 { Bad_Opcode },
9115 { Bad_Opcode },
9116 { Bad_Opcode },
9117 { Bad_Opcode },
9118 { Bad_Opcode },
9119 { Bad_Opcode },
c0f3af97 9120 /* c0 */
592d1631
L
9121 { Bad_Opcode },
9122 { Bad_Opcode },
9123 { Bad_Opcode },
9124 { Bad_Opcode },
9125 { Bad_Opcode },
9126 { Bad_Opcode },
9127 { Bad_Opcode },
9128 { Bad_Opcode },
c0f3af97 9129 /* c8 */
592d1631
L
9130 { Bad_Opcode },
9131 { Bad_Opcode },
9132 { Bad_Opcode },
9133 { Bad_Opcode },
9134 { Bad_Opcode },
9135 { Bad_Opcode },
9136 { Bad_Opcode },
9137 { Bad_Opcode },
c0f3af97 9138 /* d0 */
592d1631
L
9139 { Bad_Opcode },
9140 { Bad_Opcode },
9141 { Bad_Opcode },
9142 { Bad_Opcode },
9143 { Bad_Opcode },
9144 { Bad_Opcode },
9145 { Bad_Opcode },
9146 { Bad_Opcode },
c0f3af97 9147 /* d8 */
592d1631
L
9148 { Bad_Opcode },
9149 { Bad_Opcode },
9150 { Bad_Opcode },
9151 { Bad_Opcode },
9152 { Bad_Opcode },
9153 { Bad_Opcode },
9154 { Bad_Opcode },
592a252b 9155 { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
c0f3af97 9156 /* e0 */
592d1631
L
9157 { Bad_Opcode },
9158 { Bad_Opcode },
9159 { Bad_Opcode },
9160 { Bad_Opcode },
9161 { Bad_Opcode },
9162 { Bad_Opcode },
9163 { Bad_Opcode },
9164 { Bad_Opcode },
c0f3af97 9165 /* e8 */
592d1631
L
9166 { Bad_Opcode },
9167 { Bad_Opcode },
9168 { Bad_Opcode },
9169 { Bad_Opcode },
9170 { Bad_Opcode },
9171 { Bad_Opcode },
9172 { Bad_Opcode },
9173 { Bad_Opcode },
c0f3af97 9174 /* f0 */
6c30d220 9175 { PREFIX_TABLE (PREFIX_VEX_0F3AF0) },
592d1631
L
9176 { Bad_Opcode },
9177 { Bad_Opcode },
9178 { Bad_Opcode },
9179 { Bad_Opcode },
9180 { Bad_Opcode },
9181 { Bad_Opcode },
9182 { Bad_Opcode },
c0f3af97 9183 /* f8 */
592d1631
L
9184 { Bad_Opcode },
9185 { Bad_Opcode },
9186 { Bad_Opcode },
9187 { Bad_Opcode },
9188 { Bad_Opcode },
9189 { Bad_Opcode },
9190 { Bad_Opcode },
9191 { Bad_Opcode },
c0f3af97
L
9192 },
9193};
9194
43234a1e
L
9195#define NEED_OPCODE_TABLE
9196#include "i386-dis-evex.h"
9197#undef NEED_OPCODE_TABLE
c0f3af97 9198static const struct dis386 vex_len_table[][2] = {
592a252b 9199 /* VEX_LEN_0F10_P_1 */
c0f3af97 9200 {
592a252b
L
9201 { VEX_W_TABLE (VEX_W_0F10_P_1) },
9202 { VEX_W_TABLE (VEX_W_0F10_P_1) },
c0f3af97
L
9203 },
9204
592a252b 9205 /* VEX_LEN_0F10_P_3 */
c0f3af97 9206 {
592a252b
L
9207 { VEX_W_TABLE (VEX_W_0F10_P_3) },
9208 { VEX_W_TABLE (VEX_W_0F10_P_3) },
c0f3af97
L
9209 },
9210
592a252b 9211 /* VEX_LEN_0F11_P_1 */
c0f3af97 9212 {
592a252b
L
9213 { VEX_W_TABLE (VEX_W_0F11_P_1) },
9214 { VEX_W_TABLE (VEX_W_0F11_P_1) },
c0f3af97
L
9215 },
9216
592a252b 9217 /* VEX_LEN_0F11_P_3 */
c0f3af97 9218 {
592a252b
L
9219 { VEX_W_TABLE (VEX_W_0F11_P_3) },
9220 { VEX_W_TABLE (VEX_W_0F11_P_3) },
c0f3af97
L
9221 },
9222
592a252b 9223 /* VEX_LEN_0F12_P_0_M_0 */
c0f3af97 9224 {
592a252b 9225 { VEX_W_TABLE (VEX_W_0F12_P_0_M_0) },
c0f3af97
L
9226 },
9227
592a252b 9228 /* VEX_LEN_0F12_P_0_M_1 */
c0f3af97 9229 {
592a252b 9230 { VEX_W_TABLE (VEX_W_0F12_P_0_M_1) },
c0f3af97
L
9231 },
9232
592a252b 9233 /* VEX_LEN_0F12_P_2 */
c0f3af97 9234 {
592a252b 9235 { VEX_W_TABLE (VEX_W_0F12_P_2) },
c0f3af97
L
9236 },
9237
592a252b 9238 /* VEX_LEN_0F13_M_0 */
c0f3af97 9239 {
592a252b 9240 { VEX_W_TABLE (VEX_W_0F13_M_0) },
c0f3af97
L
9241 },
9242
592a252b 9243 /* VEX_LEN_0F16_P_0_M_0 */
c0f3af97 9244 {
592a252b 9245 { VEX_W_TABLE (VEX_W_0F16_P_0_M_0) },
c0f3af97
L
9246 },
9247
592a252b 9248 /* VEX_LEN_0F16_P_0_M_1 */
c0f3af97 9249 {
592a252b 9250 { VEX_W_TABLE (VEX_W_0F16_P_0_M_1) },
c0f3af97
L
9251 },
9252
592a252b 9253 /* VEX_LEN_0F16_P_2 */
c0f3af97 9254 {
592a252b 9255 { VEX_W_TABLE (VEX_W_0F16_P_2) },
c0f3af97
L
9256 },
9257
592a252b 9258 /* VEX_LEN_0F17_M_0 */
c0f3af97 9259 {
592a252b 9260 { VEX_W_TABLE (VEX_W_0F17_M_0) },
c0f3af97
L
9261 },
9262
592a252b 9263 /* VEX_LEN_0F2A_P_1 */
c0f3af97 9264 {
539f890d
L
9265 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev } },
9266 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev } },
c0f3af97
L
9267 },
9268
592a252b 9269 /* VEX_LEN_0F2A_P_3 */
c0f3af97 9270 {
539f890d
L
9271 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev } },
9272 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev } },
c0f3af97
L
9273 },
9274
592a252b 9275 /* VEX_LEN_0F2C_P_1 */
c0f3af97 9276 {
539f890d
L
9277 { "vcvttss2siY", { Gv, EXdScalar } },
9278 { "vcvttss2siY", { Gv, EXdScalar } },
c0f3af97
L
9279 },
9280
592a252b 9281 /* VEX_LEN_0F2C_P_3 */
c0f3af97 9282 {
539f890d
L
9283 { "vcvttsd2siY", { Gv, EXqScalar } },
9284 { "vcvttsd2siY", { Gv, EXqScalar } },
c0f3af97
L
9285 },
9286
592a252b 9287 /* VEX_LEN_0F2D_P_1 */
c0f3af97 9288 {
539f890d
L
9289 { "vcvtss2siY", { Gv, EXdScalar } },
9290 { "vcvtss2siY", { Gv, EXdScalar } },
c0f3af97
L
9291 },
9292
592a252b 9293 /* VEX_LEN_0F2D_P_3 */
c0f3af97 9294 {
539f890d
L
9295 { "vcvtsd2siY", { Gv, EXqScalar } },
9296 { "vcvtsd2siY", { Gv, EXqScalar } },
c0f3af97
L
9297 },
9298
592a252b 9299 /* VEX_LEN_0F2E_P_0 */
c0f3af97 9300 {
592a252b
L
9301 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
9302 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
c0f3af97
L
9303 },
9304
592a252b 9305 /* VEX_LEN_0F2E_P_2 */
c0f3af97 9306 {
592a252b
L
9307 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
9308 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
c0f3af97
L
9309 },
9310
592a252b 9311 /* VEX_LEN_0F2F_P_0 */
c0f3af97 9312 {
592a252b
L
9313 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
9314 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
c0f3af97
L
9315 },
9316
592a252b 9317 /* VEX_LEN_0F2F_P_2 */
c0f3af97 9318 {
592a252b
L
9319 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
9320 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
c0f3af97
L
9321 },
9322
43234a1e
L
9323 /* VEX_LEN_0F41_P_0 */
9324 {
9325 { Bad_Opcode },
9326 { VEX_W_TABLE (VEX_W_0F41_P_0_LEN_1) },
9327 },
9328 /* VEX_LEN_0F42_P_0 */
9329 {
9330 { Bad_Opcode },
9331 { VEX_W_TABLE (VEX_W_0F42_P_0_LEN_1) },
9332 },
9333 /* VEX_LEN_0F44_P_0 */
9334 {
9335 { VEX_W_TABLE (VEX_W_0F44_P_0_LEN_0) },
9336 },
9337 /* VEX_LEN_0F45_P_0 */
9338 {
9339 { Bad_Opcode },
9340 { VEX_W_TABLE (VEX_W_0F45_P_0_LEN_1) },
9341 },
9342 /* VEX_LEN_0F46_P_0 */
9343 {
9344 { Bad_Opcode },
9345 { VEX_W_TABLE (VEX_W_0F46_P_0_LEN_1) },
9346 },
9347 /* VEX_LEN_0F47_P_0 */
9348 {
9349 { Bad_Opcode },
9350 { VEX_W_TABLE (VEX_W_0F47_P_0_LEN_1) },
9351 },
9352 /* VEX_LEN_0F4B_P_2 */
9353 {
9354 { Bad_Opcode },
9355 { VEX_W_TABLE (VEX_W_0F4B_P_2_LEN_1) },
9356 },
9357
592a252b 9358 /* VEX_LEN_0F51_P_1 */
c0f3af97 9359 {
592a252b
L
9360 { VEX_W_TABLE (VEX_W_0F51_P_1) },
9361 { VEX_W_TABLE (VEX_W_0F51_P_1) },
c0f3af97
L
9362 },
9363
592a252b 9364 /* VEX_LEN_0F51_P_3 */
c0f3af97 9365 {
592a252b
L
9366 { VEX_W_TABLE (VEX_W_0F51_P_3) },
9367 { VEX_W_TABLE (VEX_W_0F51_P_3) },
c0f3af97
L
9368 },
9369
592a252b 9370 /* VEX_LEN_0F52_P_1 */
c0f3af97 9371 {
592a252b
L
9372 { VEX_W_TABLE (VEX_W_0F52_P_1) },
9373 { VEX_W_TABLE (VEX_W_0F52_P_1) },
c0f3af97
L
9374 },
9375
592a252b 9376 /* VEX_LEN_0F53_P_1 */
c0f3af97 9377 {
592a252b
L
9378 { VEX_W_TABLE (VEX_W_0F53_P_1) },
9379 { VEX_W_TABLE (VEX_W_0F53_P_1) },
c0f3af97
L
9380 },
9381
592a252b 9382 /* VEX_LEN_0F58_P_1 */
c0f3af97 9383 {
592a252b
L
9384 { VEX_W_TABLE (VEX_W_0F58_P_1) },
9385 { VEX_W_TABLE (VEX_W_0F58_P_1) },
c0f3af97
L
9386 },
9387
592a252b 9388 /* VEX_LEN_0F58_P_3 */
c0f3af97 9389 {
592a252b
L
9390 { VEX_W_TABLE (VEX_W_0F58_P_3) },
9391 { VEX_W_TABLE (VEX_W_0F58_P_3) },
c0f3af97
L
9392 },
9393
592a252b 9394 /* VEX_LEN_0F59_P_1 */
c0f3af97 9395 {
592a252b
L
9396 { VEX_W_TABLE (VEX_W_0F59_P_1) },
9397 { VEX_W_TABLE (VEX_W_0F59_P_1) },
c0f3af97
L
9398 },
9399
592a252b 9400 /* VEX_LEN_0F59_P_3 */
c0f3af97 9401 {
592a252b
L
9402 { VEX_W_TABLE (VEX_W_0F59_P_3) },
9403 { VEX_W_TABLE (VEX_W_0F59_P_3) },
c0f3af97
L
9404 },
9405
592a252b 9406 /* VEX_LEN_0F5A_P_1 */
c0f3af97 9407 {
592a252b
L
9408 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
9409 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
c0f3af97
L
9410 },
9411
592a252b 9412 /* VEX_LEN_0F5A_P_3 */
c0f3af97 9413 {
592a252b
L
9414 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
9415 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
c0f3af97
L
9416 },
9417
592a252b 9418 /* VEX_LEN_0F5C_P_1 */
c0f3af97 9419 {
592a252b
L
9420 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
9421 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
c0f3af97
L
9422 },
9423
592a252b 9424 /* VEX_LEN_0F5C_P_3 */
c0f3af97 9425 {
592a252b
L
9426 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
9427 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
c0f3af97
L
9428 },
9429
592a252b 9430 /* VEX_LEN_0F5D_P_1 */
c0f3af97 9431 {
592a252b
L
9432 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
9433 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
c0f3af97
L
9434 },
9435
592a252b 9436 /* VEX_LEN_0F5D_P_3 */
c0f3af97 9437 {
592a252b
L
9438 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
9439 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
c0f3af97
L
9440 },
9441
592a252b 9442 /* VEX_LEN_0F5E_P_1 */
c0f3af97 9443 {
592a252b
L
9444 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
9445 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
c0f3af97
L
9446 },
9447
592a252b 9448 /* VEX_LEN_0F5E_P_3 */
c0f3af97 9449 {
592a252b
L
9450 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
9451 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
c0f3af97
L
9452 },
9453
592a252b 9454 /* VEX_LEN_0F5F_P_1 */
c0f3af97 9455 {
592a252b
L
9456 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
9457 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
c0f3af97
L
9458 },
9459
592a252b 9460 /* VEX_LEN_0F5F_P_3 */
c0f3af97 9461 {
592a252b
L
9462 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
9463 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
c0f3af97
L
9464 },
9465
592a252b 9466 /* VEX_LEN_0F6E_P_2 */
c0f3af97 9467 {
539f890d
L
9468 { "vmovK", { XMScalar, Edq } },
9469 { "vmovK", { XMScalar, Edq } },
c0f3af97
L
9470 },
9471
592a252b 9472 /* VEX_LEN_0F7E_P_1 */
c0f3af97 9473 {
592a252b
L
9474 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
9475 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
c0f3af97
L
9476 },
9477
592a252b 9478 /* VEX_LEN_0F7E_P_2 */
c0f3af97 9479 {
539f890d 9480 { "vmovK", { Edq, XMScalar } },
6c30d220 9481 { "vmovK", { Edq, XMScalar } },
c0f3af97
L
9482 },
9483
43234a1e
L
9484 /* VEX_LEN_0F90_P_0 */
9485 {
9486 { VEX_W_TABLE (VEX_W_0F90_P_0_LEN_0) },
9487 },
9488
9489 /* VEX_LEN_0F91_P_0 */
9490 {
9491 { VEX_W_TABLE (VEX_W_0F91_P_0_LEN_0) },
9492 },
9493
9494 /* VEX_LEN_0F92_P_0 */
9495 {
9496 { VEX_W_TABLE (VEX_W_0F92_P_0_LEN_0) },
9497 },
9498
9499 /* VEX_LEN_0F93_P_0 */
9500 {
9501 { VEX_W_TABLE (VEX_W_0F93_P_0_LEN_0) },
9502 },
9503
9504 /* VEX_LEN_0F98_P_0 */
9505 {
9506 { VEX_W_TABLE (VEX_W_0F98_P_0_LEN_0) },
9507 },
9508
6c30d220 9509 /* VEX_LEN_0FAE_R_2_M_0 */
c0f3af97 9510 {
6c30d220 9511 { VEX_W_TABLE (VEX_W_0FAE_R_2_M_0) },
c0f3af97
L
9512 },
9513
6c30d220 9514 /* VEX_LEN_0FAE_R_3_M_0 */
c0f3af97 9515 {
6c30d220 9516 { VEX_W_TABLE (VEX_W_0FAE_R_3_M_0) },
c0f3af97
L
9517 },
9518
6c30d220 9519 /* VEX_LEN_0FC2_P_1 */
c0f3af97 9520 {
6c30d220
L
9521 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
9522 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
c0f3af97
L
9523 },
9524
6c30d220 9525 /* VEX_LEN_0FC2_P_3 */
c0f3af97 9526 {
6c30d220
L
9527 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
9528 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
c0f3af97
L
9529 },
9530
6c30d220 9531 /* VEX_LEN_0FC4_P_2 */
c0f3af97 9532 {
6c30d220 9533 { VEX_W_TABLE (VEX_W_0FC4_P_2) },
c0f3af97
L
9534 },
9535
6c30d220 9536 /* VEX_LEN_0FC5_P_2 */
c0f3af97 9537 {
6c30d220 9538 { VEX_W_TABLE (VEX_W_0FC5_P_2) },
c0f3af97
L
9539 },
9540
6c30d220 9541 /* VEX_LEN_0FD6_P_2 */
c0f3af97 9542 {
6c30d220
L
9543 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
9544 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
c0f3af97
L
9545 },
9546
6c30d220 9547 /* VEX_LEN_0FF7_P_2 */
c0f3af97 9548 {
6c30d220 9549 { VEX_W_TABLE (VEX_W_0FF7_P_2) },
c0f3af97
L
9550 },
9551
6c30d220 9552 /* VEX_LEN_0F3816_P_2 */
c0f3af97 9553 {
6c30d220
L
9554 { Bad_Opcode },
9555 { VEX_W_TABLE (VEX_W_0F3816_P_2) },
c0f3af97
L
9556 },
9557
6c30d220 9558 /* VEX_LEN_0F3819_P_2 */
c0f3af97 9559 {
6c30d220
L
9560 { Bad_Opcode },
9561 { VEX_W_TABLE (VEX_W_0F3819_P_2) },
c0f3af97
L
9562 },
9563
6c30d220 9564 /* VEX_LEN_0F381A_P_2_M_0 */
c0f3af97 9565 {
6c30d220
L
9566 { Bad_Opcode },
9567 { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
c0f3af97
L
9568 },
9569
6c30d220 9570 /* VEX_LEN_0F3836_P_2 */
c0f3af97 9571 {
6c30d220
L
9572 { Bad_Opcode },
9573 { VEX_W_TABLE (VEX_W_0F3836_P_2) },
c0f3af97
L
9574 },
9575
592a252b 9576 /* VEX_LEN_0F3841_P_2 */
c0f3af97 9577 {
592a252b 9578 { VEX_W_TABLE (VEX_W_0F3841_P_2) },
c0f3af97
L
9579 },
9580
6c30d220
L
9581 /* VEX_LEN_0F385A_P_2_M_0 */
9582 {
9583 { Bad_Opcode },
9584 { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) },
9585 },
9586
592a252b 9587 /* VEX_LEN_0F38DB_P_2 */
a5ff0eb2 9588 {
592a252b 9589 { VEX_W_TABLE (VEX_W_0F38DB_P_2) },
a5ff0eb2
L
9590 },
9591
592a252b 9592 /* VEX_LEN_0F38DC_P_2 */
a5ff0eb2 9593 {
592a252b 9594 { VEX_W_TABLE (VEX_W_0F38DC_P_2) },
a5ff0eb2
L
9595 },
9596
592a252b 9597 /* VEX_LEN_0F38DD_P_2 */
a5ff0eb2 9598 {
592a252b 9599 { VEX_W_TABLE (VEX_W_0F38DD_P_2) },
a5ff0eb2
L
9600 },
9601
592a252b 9602 /* VEX_LEN_0F38DE_P_2 */
a5ff0eb2 9603 {
592a252b 9604 { VEX_W_TABLE (VEX_W_0F38DE_P_2) },
a5ff0eb2
L
9605 },
9606
592a252b 9607 /* VEX_LEN_0F38DF_P_2 */
a5ff0eb2 9608 {
592a252b 9609 { VEX_W_TABLE (VEX_W_0F38DF_P_2) },
a5ff0eb2
L
9610 },
9611
f12dc422
L
9612 /* VEX_LEN_0F38F2_P_0 */
9613 {
9614 { "andnS", { Gdq, VexGdq, Edq } },
9615 },
9616
9617 /* VEX_LEN_0F38F3_R_1_P_0 */
9618 {
9619 { "blsrS", { VexGdq, Edq } },
9620 },
9621
9622 /* VEX_LEN_0F38F3_R_2_P_0 */
9623 {
9624 { "blsmskS", { VexGdq, Edq } },
9625 },
9626
9627 /* VEX_LEN_0F38F3_R_3_P_0 */
9628 {
9629 { "blsiS", { VexGdq, Edq } },
9630 },
9631
6c30d220
L
9632 /* VEX_LEN_0F38F5_P_0 */
9633 {
9634 { "bzhiS", { Gdq, Edq, VexGdq } },
9635 },
9636
9637 /* VEX_LEN_0F38F5_P_1 */
9638 {
9639 { "pextS", { Gdq, VexGdq, Edq } },
9640 },
9641
9642 /* VEX_LEN_0F38F5_P_3 */
9643 {
9644 { "pdepS", { Gdq, VexGdq, Edq } },
9645 },
9646
9647 /* VEX_LEN_0F38F6_P_3 */
9648 {
9649 { "mulxS", { Gdq, VexGdq, Edq } },
9650 },
9651
f12dc422
L
9652 /* VEX_LEN_0F38F7_P_0 */
9653 {
9654 { "bextrS", { Gdq, Edq, VexGdq } },
9655 },
9656
6c30d220
L
9657 /* VEX_LEN_0F38F7_P_1 */
9658 {
9659 { "sarxS", { Gdq, Edq, VexGdq } },
9660 },
9661
9662 /* VEX_LEN_0F38F7_P_2 */
9663 {
9664 { "shlxS", { Gdq, Edq, VexGdq } },
9665 },
9666
9667 /* VEX_LEN_0F38F7_P_3 */
9668 {
9669 { "shrxS", { Gdq, Edq, VexGdq } },
9670 },
9671
9672 /* VEX_LEN_0F3A00_P_2 */
9673 {
9674 { Bad_Opcode },
9675 { VEX_W_TABLE (VEX_W_0F3A00_P_2) },
9676 },
9677
9678 /* VEX_LEN_0F3A01_P_2 */
9679 {
9680 { Bad_Opcode },
9681 { VEX_W_TABLE (VEX_W_0F3A01_P_2) },
9682 },
9683
592a252b 9684 /* VEX_LEN_0F3A06_P_2 */
c0f3af97 9685 {
592d1631 9686 { Bad_Opcode },
592a252b 9687 { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
c0f3af97
L
9688 },
9689
592a252b 9690 /* VEX_LEN_0F3A0A_P_2 */
c0f3af97 9691 {
592a252b
L
9692 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
9693 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
c0f3af97
L
9694 },
9695
592a252b 9696 /* VEX_LEN_0F3A0B_P_2 */
c0f3af97 9697 {
592a252b
L
9698 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
9699 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
c0f3af97
L
9700 },
9701
592a252b 9702 /* VEX_LEN_0F3A14_P_2 */
c0f3af97 9703 {
592a252b 9704 { VEX_W_TABLE (VEX_W_0F3A14_P_2) },
c0f3af97
L
9705 },
9706
592a252b 9707 /* VEX_LEN_0F3A15_P_2 */
c0f3af97 9708 {
592a252b 9709 { VEX_W_TABLE (VEX_W_0F3A15_P_2) },
c0f3af97
L
9710 },
9711
592a252b 9712 /* VEX_LEN_0F3A16_P_2 */
c0f3af97
L
9713 {
9714 { "vpextrK", { Edq, XM, Ib } },
c0f3af97
L
9715 },
9716
592a252b 9717 /* VEX_LEN_0F3A17_P_2 */
c0f3af97
L
9718 {
9719 { "vextractps", { Edqd, XM, Ib } },
c0f3af97
L
9720 },
9721
592a252b 9722 /* VEX_LEN_0F3A18_P_2 */
c0f3af97 9723 {
592d1631 9724 { Bad_Opcode },
592a252b 9725 { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
c0f3af97
L
9726 },
9727
592a252b 9728 /* VEX_LEN_0F3A19_P_2 */
c0f3af97 9729 {
592d1631 9730 { Bad_Opcode },
592a252b 9731 { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
c0f3af97
L
9732 },
9733
592a252b 9734 /* VEX_LEN_0F3A20_P_2 */
c0f3af97 9735 {
592a252b 9736 { VEX_W_TABLE (VEX_W_0F3A20_P_2) },
c0f3af97
L
9737 },
9738
592a252b 9739 /* VEX_LEN_0F3A21_P_2 */
c0f3af97 9740 {
592a252b 9741 { VEX_W_TABLE (VEX_W_0F3A21_P_2) },
c0f3af97
L
9742 },
9743
592a252b 9744 /* VEX_LEN_0F3A22_P_2 */
c0f3af97
L
9745 {
9746 { "vpinsrK", { XM, Vex128, Edq, Ib } },
c0f3af97
L
9747 },
9748
43234a1e
L
9749 /* VEX_LEN_0F3A30_P_2 */
9750 {
9751 { VEX_W_TABLE (VEX_W_0F3A30_P_2_LEN_0) },
9752 },
9753
9754 /* VEX_LEN_0F3A32_P_2 */
9755 {
9756 { VEX_W_TABLE (VEX_W_0F3A32_P_2_LEN_0) },
9757 },
9758
6c30d220 9759 /* VEX_LEN_0F3A38_P_2 */
c0f3af97 9760 {
6c30d220
L
9761 { Bad_Opcode },
9762 { VEX_W_TABLE (VEX_W_0F3A38_P_2) },
c0f3af97
L
9763 },
9764
6c30d220 9765 /* VEX_LEN_0F3A39_P_2 */
c0f3af97 9766 {
6c30d220
L
9767 { Bad_Opcode },
9768 { VEX_W_TABLE (VEX_W_0F3A39_P_2) },
9769 },
9770
9771 /* VEX_LEN_0F3A41_P_2 */
9772 {
9773 { VEX_W_TABLE (VEX_W_0F3A41_P_2) },
c0f3af97
L
9774 },
9775
592a252b 9776 /* VEX_LEN_0F3A44_P_2 */
ce2f5b3c 9777 {
592a252b 9778 { VEX_W_TABLE (VEX_W_0F3A44_P_2) },
ce2f5b3c
L
9779 },
9780
6c30d220 9781 /* VEX_LEN_0F3A46_P_2 */
c0f3af97 9782 {
6c30d220
L
9783 { Bad_Opcode },
9784 { VEX_W_TABLE (VEX_W_0F3A46_P_2) },
c0f3af97
L
9785 },
9786
592a252b 9787 /* VEX_LEN_0F3A60_P_2 */
c0f3af97 9788 {
592a252b 9789 { VEX_W_TABLE (VEX_W_0F3A60_P_2) },
c0f3af97
L
9790 },
9791
592a252b 9792 /* VEX_LEN_0F3A61_P_2 */
c0f3af97 9793 {
592a252b 9794 { VEX_W_TABLE (VEX_W_0F3A61_P_2) },
c0f3af97
L
9795 },
9796
592a252b 9797 /* VEX_LEN_0F3A62_P_2 */
c0f3af97 9798 {
592a252b 9799 { VEX_W_TABLE (VEX_W_0F3A62_P_2) },
c0f3af97
L
9800 },
9801
592a252b 9802 /* VEX_LEN_0F3A63_P_2 */
c0f3af97 9803 {
592a252b 9804 { VEX_W_TABLE (VEX_W_0F3A63_P_2) },
c0f3af97
L
9805 },
9806
592a252b 9807 /* VEX_LEN_0F3A6A_P_2 */
922d8de8 9808 {
206c2556 9809 { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9810 },
9811
592a252b 9812 /* VEX_LEN_0F3A6B_P_2 */
922d8de8 9813 {
206c2556 9814 { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9815 },
9816
592a252b 9817 /* VEX_LEN_0F3A6E_P_2 */
922d8de8 9818 {
206c2556 9819 { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9820 },
9821
592a252b 9822 /* VEX_LEN_0F3A6F_P_2 */
922d8de8 9823 {
206c2556 9824 { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9825 },
9826
592a252b 9827 /* VEX_LEN_0F3A7A_P_2 */
922d8de8 9828 {
206c2556 9829 { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9830 },
9831
592a252b 9832 /* VEX_LEN_0F3A7B_P_2 */
922d8de8 9833 {
206c2556 9834 { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9835 },
9836
592a252b 9837 /* VEX_LEN_0F3A7E_P_2 */
922d8de8 9838 {
206c2556 9839 { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9840 },
9841
592a252b 9842 /* VEX_LEN_0F3A7F_P_2 */
922d8de8 9843 {
206c2556 9844 { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9845 },
9846
592a252b 9847 /* VEX_LEN_0F3ADF_P_2 */
a5ff0eb2 9848 {
592a252b 9849 { VEX_W_TABLE (VEX_W_0F3ADF_P_2) },
a5ff0eb2 9850 },
4c807e72 9851
6c30d220
L
9852 /* VEX_LEN_0F3AF0_P_3 */
9853 {
182ae480 9854 { "rorxS", { Gdq, Edq, Ib } },
6c30d220
L
9855 },
9856
ff688e1f
L
9857 /* VEX_LEN_0FXOP_08_CC */
9858 {
9859 { "vpcomb", { XM, Vex128, EXx, Ib } },
9860 },
9861
9862 /* VEX_LEN_0FXOP_08_CD */
9863 {
9864 { "vpcomw", { XM, Vex128, EXx, Ib } },
9865 },
9866
9867 /* VEX_LEN_0FXOP_08_CE */
9868 {
9869 { "vpcomd", { XM, Vex128, EXx, Ib } },
9870 },
9871
9872 /* VEX_LEN_0FXOP_08_CF */
9873 {
9874 { "vpcomq", { XM, Vex128, EXx, Ib } },
9875 },
9876
9877 /* VEX_LEN_0FXOP_08_EC */
9878 {
9879 { "vpcomub", { XM, Vex128, EXx, Ib } },
9880 },
9881
9882 /* VEX_LEN_0FXOP_08_ED */
9883 {
9884 { "vpcomuw", { XM, Vex128, EXx, Ib } },
9885 },
9886
9887 /* VEX_LEN_0FXOP_08_EE */
9888 {
9889 { "vpcomud", { XM, Vex128, EXx, Ib } },
9890 },
9891
9892 /* VEX_LEN_0FXOP_08_EF */
9893 {
9894 { "vpcomuq", { XM, Vex128, EXx, Ib } },
9895 },
9896
592a252b 9897 /* VEX_LEN_0FXOP_09_80 */
5dd85c99 9898 {
4c807e72
L
9899 { "vfrczps", { XM, EXxmm } },
9900 { "vfrczps", { XM, EXymmq } },
5dd85c99 9901 },
4c807e72 9902
592a252b 9903 /* VEX_LEN_0FXOP_09_81 */
5dd85c99 9904 {
4c807e72
L
9905 { "vfrczpd", { XM, EXxmm } },
9906 { "vfrczpd", { XM, EXymmq } },
5dd85c99 9907 },
331d2d0d
L
9908};
9909
9e30b8e0 9910static const struct dis386 vex_w_table[][2] = {
b844680a 9911 {
592a252b 9912 /* VEX_W_0F10_P_0 */
9e30b8e0 9913 { "vmovups", { XM, EXx } },
d8faab4e
L
9914 },
9915 {
592a252b 9916 /* VEX_W_0F10_P_1 */
539f890d 9917 { "vmovss", { XMVexScalar, VexScalar, EXdScalar } },
d8faab4e
L
9918 },
9919 {
592a252b 9920 /* VEX_W_0F10_P_2 */
9e30b8e0 9921 { "vmovupd", { XM, EXx } },
d8faab4e
L
9922 },
9923 {
592a252b 9924 /* VEX_W_0F10_P_3 */
539f890d 9925 { "vmovsd", { XMVexScalar, VexScalar, EXqScalar } },
d8faab4e
L
9926 },
9927 {
592a252b 9928 /* VEX_W_0F11_P_0 */
9e30b8e0 9929 { "vmovups", { EXxS, XM } },
d8faab4e
L
9930 },
9931 {
592a252b 9932 /* VEX_W_0F11_P_1 */
539f890d 9933 { "vmovss", { EXdVexScalarS, VexScalar, XMScalar } },
b844680a
L
9934 },
9935 {
592a252b 9936 /* VEX_W_0F11_P_2 */
9e30b8e0 9937 { "vmovupd", { EXxS, XM } },
b844680a
L
9938 },
9939 {
592a252b 9940 /* VEX_W_0F11_P_3 */
539f890d 9941 { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar } },
d8faab4e
L
9942 },
9943 {
592a252b 9944 /* VEX_W_0F12_P_0_M_0 */
9e30b8e0 9945 { "vmovlps", { XM, Vex128, EXq } },
b844680a
L
9946 },
9947 {
592a252b 9948 /* VEX_W_0F12_P_0_M_1 */
9e30b8e0 9949 { "vmovhlps", { XM, Vex128, EXq } },
b844680a
L
9950 },
9951 {
592a252b 9952 /* VEX_W_0F12_P_1 */
9e30b8e0 9953 { "vmovsldup", { XM, EXx } },
b844680a
L
9954 },
9955 {
592a252b 9956 /* VEX_W_0F12_P_2 */
9e30b8e0 9957 { "vmovlpd", { XM, Vex128, EXq } },
b844680a
L
9958 },
9959 {
592a252b 9960 /* VEX_W_0F12_P_3 */
9e30b8e0 9961 { "vmovddup", { XM, EXymmq } },
b844680a
L
9962 },
9963 {
592a252b 9964 /* VEX_W_0F13_M_0 */
9e30b8e0 9965 { "vmovlpX", { EXq, XM } },
b844680a
L
9966 },
9967 {
592a252b 9968 /* VEX_W_0F14 */
9e30b8e0 9969 { "vunpcklpX", { XM, Vex, EXx } },
b844680a
L
9970 },
9971 {
592a252b 9972 /* VEX_W_0F15 */
9e30b8e0 9973 { "vunpckhpX", { XM, Vex, EXx } },
b844680a
L
9974 },
9975 {
592a252b 9976 /* VEX_W_0F16_P_0_M_0 */
9e30b8e0 9977 { "vmovhps", { XM, Vex128, EXq } },
9e30b8e0
L
9978 },
9979 {
592a252b 9980 /* VEX_W_0F16_P_0_M_1 */
9e30b8e0 9981 { "vmovlhps", { XM, Vex128, EXq } },
9e30b8e0
L
9982 },
9983 {
592a252b 9984 /* VEX_W_0F16_P_1 */
9e30b8e0 9985 { "vmovshdup", { XM, EXx } },
9e30b8e0
L
9986 },
9987 {
592a252b 9988 /* VEX_W_0F16_P_2 */
9e30b8e0 9989 { "vmovhpd", { XM, Vex128, EXq } },
9e30b8e0
L
9990 },
9991 {
592a252b 9992 /* VEX_W_0F17_M_0 */
9e30b8e0 9993 { "vmovhpX", { EXq, XM } },
9e30b8e0
L
9994 },
9995 {
592a252b 9996 /* VEX_W_0F28 */
9e30b8e0 9997 { "vmovapX", { XM, EXx } },
9e30b8e0
L
9998 },
9999 {
592a252b 10000 /* VEX_W_0F29 */
9e30b8e0 10001 { "vmovapX", { EXxS, XM } },
9e30b8e0
L
10002 },
10003 {
592a252b 10004 /* VEX_W_0F2B_M_0 */
9e30b8e0 10005 { "vmovntpX", { Mx, XM } },
9e30b8e0
L
10006 },
10007 {
592a252b 10008 /* VEX_W_0F2E_P_0 */
7bb15c6f 10009 { "vucomiss", { XMScalar, EXdScalar } },
9e30b8e0
L
10010 },
10011 {
592a252b 10012 /* VEX_W_0F2E_P_2 */
7bb15c6f 10013 { "vucomisd", { XMScalar, EXqScalar } },
9e30b8e0
L
10014 },
10015 {
592a252b 10016 /* VEX_W_0F2F_P_0 */
539f890d 10017 { "vcomiss", { XMScalar, EXdScalar } },
9e30b8e0
L
10018 },
10019 {
592a252b 10020 /* VEX_W_0F2F_P_2 */
539f890d 10021 { "vcomisd", { XMScalar, EXqScalar } },
9e30b8e0 10022 },
43234a1e
L
10023 {
10024 /* VEX_W_0F41_P_0_LEN_1 */
10025 { "kandw", { MaskG, MaskVex, MaskR } },
10026 },
10027 {
10028 /* VEX_W_0F42_P_0_LEN_1 */
10029 { "kandnw", { MaskG, MaskVex, MaskR } },
10030 },
10031 {
10032 /* VEX_W_0F44_P_0_LEN_0 */
10033 { "knotw", { MaskG, MaskR } },
10034 },
10035 {
10036 /* VEX_W_0F45_P_0_LEN_1 */
10037 { "korw", { MaskG, MaskVex, MaskR } },
10038 },
10039 {
10040 /* VEX_W_0F46_P_0_LEN_1 */
10041 { "kxnorw", { MaskG, MaskVex, MaskR } },
10042 },
10043 {
10044 /* VEX_W_0F47_P_0_LEN_1 */
10045 { "kxorw", { MaskG, MaskVex, MaskR } },
10046 },
10047 {
10048 /* VEX_W_0F4B_P_2_LEN_1 */
10049 { "kunpckbw", { MaskG, MaskVex, MaskR } },
10050 },
9e30b8e0 10051 {
592a252b 10052 /* VEX_W_0F50_M_0 */
9e30b8e0 10053 { "vmovmskpX", { Gdq, XS } },
9e30b8e0
L
10054 },
10055 {
592a252b 10056 /* VEX_W_0F51_P_0 */
9e30b8e0 10057 { "vsqrtps", { XM, EXx } },
9e30b8e0
L
10058 },
10059 {
592a252b 10060 /* VEX_W_0F51_P_1 */
539f890d 10061 { "vsqrtss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10062 },
10063 {
592a252b 10064 /* VEX_W_0F51_P_2 */
9e30b8e0 10065 { "vsqrtpd", { XM, EXx } },
9e30b8e0
L
10066 },
10067 {
592a252b 10068 /* VEX_W_0F51_P_3 */
539f890d 10069 { "vsqrtsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10070 },
10071 {
592a252b 10072 /* VEX_W_0F52_P_0 */
9e30b8e0 10073 { "vrsqrtps", { XM, EXx } },
9e30b8e0
L
10074 },
10075 {
592a252b 10076 /* VEX_W_0F52_P_1 */
539f890d 10077 { "vrsqrtss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10078 },
10079 {
592a252b 10080 /* VEX_W_0F53_P_0 */
9e30b8e0 10081 { "vrcpps", { XM, EXx } },
9e30b8e0
L
10082 },
10083 {
592a252b 10084 /* VEX_W_0F53_P_1 */
539f890d 10085 { "vrcpss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10086 },
10087 {
592a252b 10088 /* VEX_W_0F58_P_0 */
9e30b8e0 10089 { "vaddps", { XM, Vex, EXx } },
9e30b8e0
L
10090 },
10091 {
592a252b 10092 /* VEX_W_0F58_P_1 */
539f890d 10093 { "vaddss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10094 },
10095 {
592a252b 10096 /* VEX_W_0F58_P_2 */
9e30b8e0 10097 { "vaddpd", { XM, Vex, EXx } },
9e30b8e0
L
10098 },
10099 {
592a252b 10100 /* VEX_W_0F58_P_3 */
539f890d 10101 { "vaddsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10102 },
10103 {
592a252b 10104 /* VEX_W_0F59_P_0 */
9e30b8e0 10105 { "vmulps", { XM, Vex, EXx } },
9e30b8e0
L
10106 },
10107 {
592a252b 10108 /* VEX_W_0F59_P_1 */
539f890d 10109 { "vmulss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10110 },
10111 {
592a252b 10112 /* VEX_W_0F59_P_2 */
9e30b8e0 10113 { "vmulpd", { XM, Vex, EXx } },
9e30b8e0
L
10114 },
10115 {
592a252b 10116 /* VEX_W_0F59_P_3 */
539f890d 10117 { "vmulsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10118 },
10119 {
592a252b 10120 /* VEX_W_0F5A_P_0 */
9e30b8e0 10121 { "vcvtps2pd", { XM, EXxmmq } },
9e30b8e0
L
10122 },
10123 {
592a252b 10124 /* VEX_W_0F5A_P_1 */
539f890d 10125 { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10126 },
10127 {
592a252b 10128 /* VEX_W_0F5A_P_3 */
539f890d 10129 { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10130 },
10131 {
592a252b 10132 /* VEX_W_0F5B_P_0 */
9e30b8e0 10133 { "vcvtdq2ps", { XM, EXx } },
9e30b8e0
L
10134 },
10135 {
592a252b 10136 /* VEX_W_0F5B_P_1 */
9e30b8e0 10137 { "vcvttps2dq", { XM, EXx } },
9e30b8e0
L
10138 },
10139 {
592a252b 10140 /* VEX_W_0F5B_P_2 */
9e30b8e0 10141 { "vcvtps2dq", { XM, EXx } },
9e30b8e0
L
10142 },
10143 {
592a252b 10144 /* VEX_W_0F5C_P_0 */
9e30b8e0 10145 { "vsubps", { XM, Vex, EXx } },
9e30b8e0
L
10146 },
10147 {
592a252b 10148 /* VEX_W_0F5C_P_1 */
539f890d 10149 { "vsubss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10150 },
10151 {
592a252b 10152 /* VEX_W_0F5C_P_2 */
9e30b8e0 10153 { "vsubpd", { XM, Vex, EXx } },
9e30b8e0
L
10154 },
10155 {
592a252b 10156 /* VEX_W_0F5C_P_3 */
539f890d 10157 { "vsubsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10158 },
10159 {
592a252b 10160 /* VEX_W_0F5D_P_0 */
9e30b8e0 10161 { "vminps", { XM, Vex, EXx } },
9e30b8e0
L
10162 },
10163 {
592a252b 10164 /* VEX_W_0F5D_P_1 */
539f890d 10165 { "vminss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10166 },
10167 {
592a252b 10168 /* VEX_W_0F5D_P_2 */
9e30b8e0 10169 { "vminpd", { XM, Vex, EXx } },
9e30b8e0
L
10170 },
10171 {
592a252b 10172 /* VEX_W_0F5D_P_3 */
539f890d 10173 { "vminsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10174 },
10175 {
592a252b 10176 /* VEX_W_0F5E_P_0 */
9e30b8e0 10177 { "vdivps", { XM, Vex, EXx } },
9e30b8e0
L
10178 },
10179 {
592a252b 10180 /* VEX_W_0F5E_P_1 */
539f890d 10181 { "vdivss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10182 },
10183 {
592a252b 10184 /* VEX_W_0F5E_P_2 */
9e30b8e0 10185 { "vdivpd", { XM, Vex, EXx } },
9e30b8e0
L
10186 },
10187 {
592a252b 10188 /* VEX_W_0F5E_P_3 */
539f890d 10189 { "vdivsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10190 },
10191 {
592a252b 10192 /* VEX_W_0F5F_P_0 */
9e30b8e0 10193 { "vmaxps", { XM, Vex, EXx } },
9e30b8e0
L
10194 },
10195 {
592a252b 10196 /* VEX_W_0F5F_P_1 */
539f890d 10197 { "vmaxss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10198 },
10199 {
592a252b 10200 /* VEX_W_0F5F_P_2 */
9e30b8e0 10201 { "vmaxpd", { XM, Vex, EXx } },
9e30b8e0
L
10202 },
10203 {
592a252b 10204 /* VEX_W_0F5F_P_3 */
539f890d 10205 { "vmaxsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10206 },
10207 {
592a252b 10208 /* VEX_W_0F60_P_2 */
6c30d220 10209 { "vpunpcklbw", { XM, Vex, EXx } },
9e30b8e0
L
10210 },
10211 {
592a252b 10212 /* VEX_W_0F61_P_2 */
6c30d220 10213 { "vpunpcklwd", { XM, Vex, EXx } },
9e30b8e0
L
10214 },
10215 {
592a252b 10216 /* VEX_W_0F62_P_2 */
6c30d220 10217 { "vpunpckldq", { XM, Vex, EXx } },
9e30b8e0
L
10218 },
10219 {
592a252b 10220 /* VEX_W_0F63_P_2 */
6c30d220 10221 { "vpacksswb", { XM, Vex, EXx } },
9e30b8e0
L
10222 },
10223 {
592a252b 10224 /* VEX_W_0F64_P_2 */
6c30d220 10225 { "vpcmpgtb", { XM, Vex, EXx } },
9e30b8e0
L
10226 },
10227 {
592a252b 10228 /* VEX_W_0F65_P_2 */
6c30d220 10229 { "vpcmpgtw", { XM, Vex, EXx } },
9e30b8e0
L
10230 },
10231 {
592a252b 10232 /* VEX_W_0F66_P_2 */
6c30d220 10233 { "vpcmpgtd", { XM, Vex, EXx } },
9e30b8e0
L
10234 },
10235 {
592a252b 10236 /* VEX_W_0F67_P_2 */
6c30d220 10237 { "vpackuswb", { XM, Vex, EXx } },
9e30b8e0
L
10238 },
10239 {
592a252b 10240 /* VEX_W_0F68_P_2 */
6c30d220 10241 { "vpunpckhbw", { XM, Vex, EXx } },
9e30b8e0
L
10242 },
10243 {
592a252b 10244 /* VEX_W_0F69_P_2 */
6c30d220 10245 { "vpunpckhwd", { XM, Vex, EXx } },
9e30b8e0
L
10246 },
10247 {
592a252b 10248 /* VEX_W_0F6A_P_2 */
6c30d220 10249 { "vpunpckhdq", { XM, Vex, EXx } },
9e30b8e0
L
10250 },
10251 {
592a252b 10252 /* VEX_W_0F6B_P_2 */
6c30d220 10253 { "vpackssdw", { XM, Vex, EXx } },
9e30b8e0
L
10254 },
10255 {
592a252b 10256 /* VEX_W_0F6C_P_2 */
6c30d220 10257 { "vpunpcklqdq", { XM, Vex, EXx } },
9e30b8e0
L
10258 },
10259 {
592a252b 10260 /* VEX_W_0F6D_P_2 */
6c30d220 10261 { "vpunpckhqdq", { XM, Vex, EXx } },
9e30b8e0
L
10262 },
10263 {
592a252b 10264 /* VEX_W_0F6F_P_1 */
efdb52b7 10265 { "vmovdqu", { XM, EXx } },
9e30b8e0
L
10266 },
10267 {
592a252b 10268 /* VEX_W_0F6F_P_2 */
efdb52b7 10269 { "vmovdqa", { XM, EXx } },
9e30b8e0
L
10270 },
10271 {
592a252b 10272 /* VEX_W_0F70_P_1 */
9e30b8e0 10273 { "vpshufhw", { XM, EXx, Ib } },
9e30b8e0
L
10274 },
10275 {
592a252b 10276 /* VEX_W_0F70_P_2 */
9e30b8e0 10277 { "vpshufd", { XM, EXx, Ib } },
9e30b8e0
L
10278 },
10279 {
592a252b 10280 /* VEX_W_0F70_P_3 */
9e30b8e0 10281 { "vpshuflw", { XM, EXx, Ib } },
9e30b8e0
L
10282 },
10283 {
592a252b 10284 /* VEX_W_0F71_R_2_P_2 */
6c30d220 10285 { "vpsrlw", { Vex, XS, Ib } },
9e30b8e0
L
10286 },
10287 {
592a252b 10288 /* VEX_W_0F71_R_4_P_2 */
6c30d220 10289 { "vpsraw", { Vex, XS, Ib } },
9e30b8e0
L
10290 },
10291 {
592a252b 10292 /* VEX_W_0F71_R_6_P_2 */
6c30d220 10293 { "vpsllw", { Vex, XS, Ib } },
9e30b8e0
L
10294 },
10295 {
592a252b 10296 /* VEX_W_0F72_R_2_P_2 */
6c30d220 10297 { "vpsrld", { Vex, XS, Ib } },
9e30b8e0
L
10298 },
10299 {
592a252b 10300 /* VEX_W_0F72_R_4_P_2 */
6c30d220 10301 { "vpsrad", { Vex, XS, Ib } },
9e30b8e0
L
10302 },
10303 {
592a252b 10304 /* VEX_W_0F72_R_6_P_2 */
6c30d220 10305 { "vpslld", { Vex, XS, Ib } },
9e30b8e0
L
10306 },
10307 {
592a252b 10308 /* VEX_W_0F73_R_2_P_2 */
6c30d220 10309 { "vpsrlq", { Vex, XS, Ib } },
9e30b8e0
L
10310 },
10311 {
592a252b 10312 /* VEX_W_0F73_R_3_P_2 */
6c30d220 10313 { "vpsrldq", { Vex, XS, Ib } },
9e30b8e0
L
10314 },
10315 {
592a252b 10316 /* VEX_W_0F73_R_6_P_2 */
6c30d220 10317 { "vpsllq", { Vex, XS, Ib } },
9e30b8e0
L
10318 },
10319 {
592a252b 10320 /* VEX_W_0F73_R_7_P_2 */
6c30d220 10321 { "vpslldq", { Vex, XS, Ib } },
9e30b8e0
L
10322 },
10323 {
592a252b 10324 /* VEX_W_0F74_P_2 */
6c30d220 10325 { "vpcmpeqb", { XM, Vex, EXx } },
9e30b8e0
L
10326 },
10327 {
592a252b 10328 /* VEX_W_0F75_P_2 */
6c30d220 10329 { "vpcmpeqw", { XM, Vex, EXx } },
9e30b8e0
L
10330 },
10331 {
592a252b 10332 /* VEX_W_0F76_P_2 */
6c30d220 10333 { "vpcmpeqd", { XM, Vex, EXx } },
9e30b8e0
L
10334 },
10335 {
592a252b 10336 /* VEX_W_0F77_P_0 */
9e30b8e0 10337 { "", { VZERO } },
9e30b8e0
L
10338 },
10339 {
592a252b 10340 /* VEX_W_0F7C_P_2 */
9e30b8e0 10341 { "vhaddpd", { XM, Vex, EXx } },
9e30b8e0
L
10342 },
10343 {
592a252b 10344 /* VEX_W_0F7C_P_3 */
9e30b8e0 10345 { "vhaddps", { XM, Vex, EXx } },
9e30b8e0
L
10346 },
10347 {
592a252b 10348 /* VEX_W_0F7D_P_2 */
9e30b8e0 10349 { "vhsubpd", { XM, Vex, EXx } },
9e30b8e0
L
10350 },
10351 {
592a252b 10352 /* VEX_W_0F7D_P_3 */
9e30b8e0 10353 { "vhsubps", { XM, Vex, EXx } },
9e30b8e0
L
10354 },
10355 {
592a252b 10356 /* VEX_W_0F7E_P_1 */
539f890d 10357 { "vmovq", { XMScalar, EXqScalar } },
9e30b8e0
L
10358 },
10359 {
592a252b 10360 /* VEX_W_0F7F_P_1 */
9e30b8e0 10361 { "vmovdqu", { EXxS, XM } },
9e30b8e0
L
10362 },
10363 {
592a252b 10364 /* VEX_W_0F7F_P_2 */
9e30b8e0 10365 { "vmovdqa", { EXxS, XM } },
9e30b8e0 10366 },
43234a1e
L
10367 {
10368 /* VEX_W_0F90_P_0_LEN_0 */
10369 { "kmovw", { MaskG, MaskE } },
10370 },
10371 {
10372 /* VEX_W_0F91_P_0_LEN_0 */
10373 { "kmovw", { Ew, MaskG } },
10374 },
10375 {
10376 /* VEX_W_0F92_P_0_LEN_0 */
10377 { "kmovw", { MaskG, Rdq } },
10378 },
10379 {
10380 /* VEX_W_0F93_P_0_LEN_0 */
10381 { "kmovw", { Gdq, MaskR } },
10382 },
10383 {
10384 /* VEX_W_0F98_P_0_LEN_0 */
10385 { "kortestw", { MaskG, MaskR } },
10386 },
9e30b8e0 10387 {
592a252b 10388 /* VEX_W_0FAE_R_2_M_0 */
9e30b8e0 10389 { "vldmxcsr", { Md } },
9e30b8e0
L
10390 },
10391 {
592a252b 10392 /* VEX_W_0FAE_R_3_M_0 */
9e30b8e0 10393 { "vstmxcsr", { Md } },
9e30b8e0
L
10394 },
10395 {
592a252b 10396 /* VEX_W_0FC2_P_0 */
9e30b8e0 10397 { "vcmpps", { XM, Vex, EXx, VCMP } },
9e30b8e0
L
10398 },
10399 {
592a252b 10400 /* VEX_W_0FC2_P_1 */
539f890d 10401 { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP } },
9e30b8e0
L
10402 },
10403 {
592a252b 10404 /* VEX_W_0FC2_P_2 */
9e30b8e0 10405 { "vcmppd", { XM, Vex, EXx, VCMP } },
9e30b8e0
L
10406 },
10407 {
592a252b 10408 /* VEX_W_0FC2_P_3 */
539f890d 10409 { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP } },
9e30b8e0
L
10410 },
10411 {
592a252b 10412 /* VEX_W_0FC4_P_2 */
9e30b8e0 10413 { "vpinsrw", { XM, Vex128, Edqw, Ib } },
9e30b8e0
L
10414 },
10415 {
592a252b 10416 /* VEX_W_0FC5_P_2 */
9e30b8e0 10417 { "vpextrw", { Gdq, XS, Ib } },
9e30b8e0
L
10418 },
10419 {
592a252b 10420 /* VEX_W_0FD0_P_2 */
9e30b8e0 10421 { "vaddsubpd", { XM, Vex, EXx } },
9e30b8e0
L
10422 },
10423 {
592a252b 10424 /* VEX_W_0FD0_P_3 */
9e30b8e0 10425 { "vaddsubps", { XM, Vex, EXx } },
9e30b8e0
L
10426 },
10427 {
592a252b 10428 /* VEX_W_0FD1_P_2 */
6c30d220 10429 { "vpsrlw", { XM, Vex, EXxmm } },
9e30b8e0
L
10430 },
10431 {
592a252b 10432 /* VEX_W_0FD2_P_2 */
6c30d220 10433 { "vpsrld", { XM, Vex, EXxmm } },
9e30b8e0
L
10434 },
10435 {
592a252b 10436 /* VEX_W_0FD3_P_2 */
6c30d220 10437 { "vpsrlq", { XM, Vex, EXxmm } },
9e30b8e0
L
10438 },
10439 {
592a252b 10440 /* VEX_W_0FD4_P_2 */
6c30d220 10441 { "vpaddq", { XM, Vex, EXx } },
9e30b8e0
L
10442 },
10443 {
592a252b 10444 /* VEX_W_0FD5_P_2 */
6c30d220 10445 { "vpmullw", { XM, Vex, EXx } },
9e30b8e0
L
10446 },
10447 {
592a252b 10448 /* VEX_W_0FD6_P_2 */
539f890d 10449 { "vmovq", { EXqScalarS, XMScalar } },
9e30b8e0
L
10450 },
10451 {
592a252b 10452 /* VEX_W_0FD7_P_2_M_1 */
9e30b8e0 10453 { "vpmovmskb", { Gdq, XS } },
9e30b8e0
L
10454 },
10455 {
592a252b 10456 /* VEX_W_0FD8_P_2 */
6c30d220 10457 { "vpsubusb", { XM, Vex, EXx } },
9e30b8e0
L
10458 },
10459 {
592a252b 10460 /* VEX_W_0FD9_P_2 */
6c30d220 10461 { "vpsubusw", { XM, Vex, EXx } },
9e30b8e0
L
10462 },
10463 {
592a252b 10464 /* VEX_W_0FDA_P_2 */
6c30d220 10465 { "vpminub", { XM, Vex, EXx } },
9e30b8e0
L
10466 },
10467 {
592a252b 10468 /* VEX_W_0FDB_P_2 */
6c30d220 10469 { "vpand", { XM, Vex, EXx } },
9e30b8e0
L
10470 },
10471 {
592a252b 10472 /* VEX_W_0FDC_P_2 */
6c30d220 10473 { "vpaddusb", { XM, Vex, EXx } },
9e30b8e0
L
10474 },
10475 {
592a252b 10476 /* VEX_W_0FDD_P_2 */
6c30d220 10477 { "vpaddusw", { XM, Vex, EXx } },
9e30b8e0
L
10478 },
10479 {
592a252b 10480 /* VEX_W_0FDE_P_2 */
6c30d220 10481 { "vpmaxub", { XM, Vex, EXx } },
9e30b8e0
L
10482 },
10483 {
592a252b 10484 /* VEX_W_0FDF_P_2 */
6c30d220 10485 { "vpandn", { XM, Vex, EXx } },
9e30b8e0
L
10486 },
10487 {
592a252b 10488 /* VEX_W_0FE0_P_2 */
6c30d220 10489 { "vpavgb", { XM, Vex, EXx } },
9e30b8e0
L
10490 },
10491 {
592a252b 10492 /* VEX_W_0FE1_P_2 */
6c30d220 10493 { "vpsraw", { XM, Vex, EXxmm } },
9e30b8e0
L
10494 },
10495 {
592a252b 10496 /* VEX_W_0FE2_P_2 */
6c30d220 10497 { "vpsrad", { XM, Vex, EXxmm } },
9e30b8e0
L
10498 },
10499 {
592a252b 10500 /* VEX_W_0FE3_P_2 */
6c30d220 10501 { "vpavgw", { XM, Vex, EXx } },
9e30b8e0
L
10502 },
10503 {
592a252b 10504 /* VEX_W_0FE4_P_2 */
6c30d220 10505 { "vpmulhuw", { XM, Vex, EXx } },
9e30b8e0
L
10506 },
10507 {
592a252b 10508 /* VEX_W_0FE5_P_2 */
6c30d220 10509 { "vpmulhw", { XM, Vex, EXx } },
9e30b8e0
L
10510 },
10511 {
592a252b 10512 /* VEX_W_0FE6_P_1 */
efdb52b7 10513 { "vcvtdq2pd", { XM, EXxmmq } },
9e30b8e0
L
10514 },
10515 {
592a252b 10516 /* VEX_W_0FE6_P_2 */
a179a9fd 10517 { "vcvttpd2dq%XY", { XMM, EXx } },
9e30b8e0
L
10518 },
10519 {
592a252b 10520 /* VEX_W_0FE6_P_3 */
a179a9fd 10521 { "vcvtpd2dq%XY", { XMM, EXx } },
9e30b8e0
L
10522 },
10523 {
592a252b 10524 /* VEX_W_0FE7_P_2_M_0 */
9e30b8e0 10525 { "vmovntdq", { Mx, XM } },
9e30b8e0
L
10526 },
10527 {
592a252b 10528 /* VEX_W_0FE8_P_2 */
6c30d220 10529 { "vpsubsb", { XM, Vex, EXx } },
9e30b8e0
L
10530 },
10531 {
592a252b 10532 /* VEX_W_0FE9_P_2 */
6c30d220 10533 { "vpsubsw", { XM, Vex, EXx } },
9e30b8e0
L
10534 },
10535 {
592a252b 10536 /* VEX_W_0FEA_P_2 */
6c30d220 10537 { "vpminsw", { XM, Vex, EXx } },
9e30b8e0
L
10538 },
10539 {
592a252b 10540 /* VEX_W_0FEB_P_2 */
6c30d220 10541 { "vpor", { XM, Vex, EXx } },
9e30b8e0
L
10542 },
10543 {
592a252b 10544 /* VEX_W_0FEC_P_2 */
6c30d220 10545 { "vpaddsb", { XM, Vex, EXx } },
9e30b8e0
L
10546 },
10547 {
592a252b 10548 /* VEX_W_0FED_P_2 */
6c30d220 10549 { "vpaddsw", { XM, Vex, EXx } },
9e30b8e0
L
10550 },
10551 {
592a252b 10552 /* VEX_W_0FEE_P_2 */
6c30d220 10553 { "vpmaxsw", { XM, Vex, EXx } },
9e30b8e0
L
10554 },
10555 {
592a252b 10556 /* VEX_W_0FEF_P_2 */
6c30d220 10557 { "vpxor", { XM, Vex, EXx } },
9e30b8e0
L
10558 },
10559 {
592a252b 10560 /* VEX_W_0FF0_P_3_M_0 */
9e30b8e0 10561 { "vlddqu", { XM, M } },
9e30b8e0
L
10562 },
10563 {
592a252b 10564 /* VEX_W_0FF1_P_2 */
6c30d220 10565 { "vpsllw", { XM, Vex, EXxmm } },
9e30b8e0
L
10566 },
10567 {
592a252b 10568 /* VEX_W_0FF2_P_2 */
6c30d220 10569 { "vpslld", { XM, Vex, EXxmm } },
9e30b8e0
L
10570 },
10571 {
592a252b 10572 /* VEX_W_0FF3_P_2 */
6c30d220 10573 { "vpsllq", { XM, Vex, EXxmm } },
9e30b8e0
L
10574 },
10575 {
592a252b 10576 /* VEX_W_0FF4_P_2 */
6c30d220 10577 { "vpmuludq", { XM, Vex, EXx } },
9e30b8e0
L
10578 },
10579 {
592a252b 10580 /* VEX_W_0FF5_P_2 */
6c30d220 10581 { "vpmaddwd", { XM, Vex, EXx } },
9e30b8e0
L
10582 },
10583 {
592a252b 10584 /* VEX_W_0FF6_P_2 */
6c30d220 10585 { "vpsadbw", { XM, Vex, EXx } },
9e30b8e0
L
10586 },
10587 {
592a252b 10588 /* VEX_W_0FF7_P_2 */
9e30b8e0 10589 { "vmaskmovdqu", { XM, XS } },
9e30b8e0
L
10590 },
10591 {
592a252b 10592 /* VEX_W_0FF8_P_2 */
6c30d220 10593 { "vpsubb", { XM, Vex, EXx } },
9e30b8e0
L
10594 },
10595 {
592a252b 10596 /* VEX_W_0FF9_P_2 */
6c30d220 10597 { "vpsubw", { XM, Vex, EXx } },
9e30b8e0
L
10598 },
10599 {
592a252b 10600 /* VEX_W_0FFA_P_2 */
6c30d220 10601 { "vpsubd", { XM, Vex, EXx } },
9e30b8e0
L
10602 },
10603 {
592a252b 10604 /* VEX_W_0FFB_P_2 */
6c30d220 10605 { "vpsubq", { XM, Vex, EXx } },
9e30b8e0
L
10606 },
10607 {
592a252b 10608 /* VEX_W_0FFC_P_2 */
6c30d220 10609 { "vpaddb", { XM, Vex, EXx } },
9e30b8e0
L
10610 },
10611 {
592a252b 10612 /* VEX_W_0FFD_P_2 */
6c30d220 10613 { "vpaddw", { XM, Vex, EXx } },
9e30b8e0
L
10614 },
10615 {
592a252b 10616 /* VEX_W_0FFE_P_2 */
6c30d220 10617 { "vpaddd", { XM, Vex, EXx } },
9e30b8e0
L
10618 },
10619 {
592a252b 10620 /* VEX_W_0F3800_P_2 */
6c30d220 10621 { "vpshufb", { XM, Vex, EXx } },
9e30b8e0
L
10622 },
10623 {
592a252b 10624 /* VEX_W_0F3801_P_2 */
6c30d220 10625 { "vphaddw", { XM, Vex, EXx } },
9e30b8e0
L
10626 },
10627 {
592a252b 10628 /* VEX_W_0F3802_P_2 */
6c30d220 10629 { "vphaddd", { XM, Vex, EXx } },
9e30b8e0
L
10630 },
10631 {
592a252b 10632 /* VEX_W_0F3803_P_2 */
6c30d220 10633 { "vphaddsw", { XM, Vex, EXx } },
9e30b8e0
L
10634 },
10635 {
592a252b 10636 /* VEX_W_0F3804_P_2 */
6c30d220 10637 { "vpmaddubsw", { XM, Vex, EXx } },
9e30b8e0
L
10638 },
10639 {
592a252b 10640 /* VEX_W_0F3805_P_2 */
6c30d220 10641 { "vphsubw", { XM, Vex, EXx } },
9e30b8e0
L
10642 },
10643 {
592a252b 10644 /* VEX_W_0F3806_P_2 */
6c30d220 10645 { "vphsubd", { XM, Vex, EXx } },
9e30b8e0
L
10646 },
10647 {
592a252b 10648 /* VEX_W_0F3807_P_2 */
6c30d220 10649 { "vphsubsw", { XM, Vex, EXx } },
9e30b8e0
L
10650 },
10651 {
592a252b 10652 /* VEX_W_0F3808_P_2 */
6c30d220 10653 { "vpsignb", { XM, Vex, EXx } },
9e30b8e0
L
10654 },
10655 {
592a252b 10656 /* VEX_W_0F3809_P_2 */
6c30d220 10657 { "vpsignw", { XM, Vex, EXx } },
9e30b8e0
L
10658 },
10659 {
592a252b 10660 /* VEX_W_0F380A_P_2 */
6c30d220 10661 { "vpsignd", { XM, Vex, EXx } },
9e30b8e0
L
10662 },
10663 {
592a252b 10664 /* VEX_W_0F380B_P_2 */
6c30d220 10665 { "vpmulhrsw", { XM, Vex, EXx } },
9e30b8e0
L
10666 },
10667 {
592a252b 10668 /* VEX_W_0F380C_P_2 */
9e30b8e0 10669 { "vpermilps", { XM, Vex, EXx } },
9e30b8e0
L
10670 },
10671 {
592a252b 10672 /* VEX_W_0F380D_P_2 */
9e30b8e0 10673 { "vpermilpd", { XM, Vex, EXx } },
9e30b8e0
L
10674 },
10675 {
592a252b 10676 /* VEX_W_0F380E_P_2 */
9e30b8e0 10677 { "vtestps", { XM, EXx } },
9e30b8e0
L
10678 },
10679 {
592a252b 10680 /* VEX_W_0F380F_P_2 */
9e30b8e0 10681 { "vtestpd", { XM, EXx } },
9e30b8e0 10682 },
6c30d220
L
10683 {
10684 /* VEX_W_0F3816_P_2 */
10685 { "vpermps", { XM, Vex, EXx } },
10686 },
9e30b8e0 10687 {
592a252b 10688 /* VEX_W_0F3817_P_2 */
9e30b8e0 10689 { "vptest", { XM, EXx } },
9e30b8e0 10690 },
bcf2684f 10691 {
6c30d220
L
10692 /* VEX_W_0F3818_P_2 */
10693 { "vbroadcastss", { XM, EXxmm_md } },
bcf2684f 10694 },
9e30b8e0 10695 {
6c30d220
L
10696 /* VEX_W_0F3819_P_2 */
10697 { "vbroadcastsd", { XM, EXxmm_mq } },
9e30b8e0
L
10698 },
10699 {
592a252b 10700 /* VEX_W_0F381A_P_2_M_0 */
9e30b8e0 10701 { "vbroadcastf128", { XM, Mxmm } },
9e30b8e0
L
10702 },
10703 {
592a252b 10704 /* VEX_W_0F381C_P_2 */
9e30b8e0 10705 { "vpabsb", { XM, EXx } },
9e30b8e0
L
10706 },
10707 {
592a252b 10708 /* VEX_W_0F381D_P_2 */
9e30b8e0 10709 { "vpabsw", { XM, EXx } },
9e30b8e0
L
10710 },
10711 {
592a252b 10712 /* VEX_W_0F381E_P_2 */
9e30b8e0 10713 { "vpabsd", { XM, EXx } },
9e30b8e0
L
10714 },
10715 {
592a252b 10716 /* VEX_W_0F3820_P_2 */
6c30d220 10717 { "vpmovsxbw", { XM, EXxmmq } },
9e30b8e0
L
10718 },
10719 {
592a252b 10720 /* VEX_W_0F3821_P_2 */
6c30d220 10721 { "vpmovsxbd", { XM, EXxmmqd } },
9e30b8e0
L
10722 },
10723 {
592a252b 10724 /* VEX_W_0F3822_P_2 */
6c30d220 10725 { "vpmovsxbq", { XM, EXxmmdw } },
9e30b8e0
L
10726 },
10727 {
592a252b 10728 /* VEX_W_0F3823_P_2 */
6c30d220 10729 { "vpmovsxwd", { XM, EXxmmq } },
9e30b8e0
L
10730 },
10731 {
592a252b 10732 /* VEX_W_0F3824_P_2 */
6c30d220 10733 { "vpmovsxwq", { XM, EXxmmqd } },
9e30b8e0
L
10734 },
10735 {
592a252b 10736 /* VEX_W_0F3825_P_2 */
6c30d220 10737 { "vpmovsxdq", { XM, EXxmmq } },
9e30b8e0
L
10738 },
10739 {
592a252b 10740 /* VEX_W_0F3828_P_2 */
6c30d220 10741 { "vpmuldq", { XM, Vex, EXx } },
9e30b8e0
L
10742 },
10743 {
592a252b 10744 /* VEX_W_0F3829_P_2 */
6c30d220 10745 { "vpcmpeqq", { XM, Vex, EXx } },
9e30b8e0
L
10746 },
10747 {
592a252b 10748 /* VEX_W_0F382A_P_2_M_0 */
9e30b8e0 10749 { "vmovntdqa", { XM, Mx } },
9e30b8e0
L
10750 },
10751 {
592a252b 10752 /* VEX_W_0F382B_P_2 */
6c30d220 10753 { "vpackusdw", { XM, Vex, EXx } },
9e30b8e0 10754 },
53aa04a0 10755 {
592a252b 10756 /* VEX_W_0F382C_P_2_M_0 */
53aa04a0 10757 { "vmaskmovps", { XM, Vex, Mx } },
53aa04a0
L
10758 },
10759 {
592a252b 10760 /* VEX_W_0F382D_P_2_M_0 */
53aa04a0 10761 { "vmaskmovpd", { XM, Vex, Mx } },
53aa04a0
L
10762 },
10763 {
592a252b 10764 /* VEX_W_0F382E_P_2_M_0 */
53aa04a0 10765 { "vmaskmovps", { Mx, Vex, XM } },
53aa04a0
L
10766 },
10767 {
592a252b 10768 /* VEX_W_0F382F_P_2_M_0 */
53aa04a0 10769 { "vmaskmovpd", { Mx, Vex, XM } },
53aa04a0 10770 },
9e30b8e0 10771 {
592a252b 10772 /* VEX_W_0F3830_P_2 */
6c30d220 10773 { "vpmovzxbw", { XM, EXxmmq } },
9e30b8e0
L
10774 },
10775 {
592a252b 10776 /* VEX_W_0F3831_P_2 */
6c30d220 10777 { "vpmovzxbd", { XM, EXxmmqd } },
9e30b8e0
L
10778 },
10779 {
592a252b 10780 /* VEX_W_0F3832_P_2 */
6c30d220 10781 { "vpmovzxbq", { XM, EXxmmdw } },
9e30b8e0
L
10782 },
10783 {
592a252b 10784 /* VEX_W_0F3833_P_2 */
6c30d220 10785 { "vpmovzxwd", { XM, EXxmmq } },
9e30b8e0
L
10786 },
10787 {
592a252b 10788 /* VEX_W_0F3834_P_2 */
6c30d220 10789 { "vpmovzxwq", { XM, EXxmmqd } },
9e30b8e0
L
10790 },
10791 {
592a252b 10792 /* VEX_W_0F3835_P_2 */
6c30d220
L
10793 { "vpmovzxdq", { XM, EXxmmq } },
10794 },
10795 {
10796 /* VEX_W_0F3836_P_2 */
10797 { "vpermd", { XM, Vex, EXx } },
9e30b8e0
L
10798 },
10799 {
592a252b 10800 /* VEX_W_0F3837_P_2 */
6c30d220 10801 { "vpcmpgtq", { XM, Vex, EXx } },
9e30b8e0
L
10802 },
10803 {
592a252b 10804 /* VEX_W_0F3838_P_2 */
6c30d220 10805 { "vpminsb", { XM, Vex, EXx } },
9e30b8e0
L
10806 },
10807 {
592a252b 10808 /* VEX_W_0F3839_P_2 */
6c30d220 10809 { "vpminsd", { XM, Vex, EXx } },
9e30b8e0
L
10810 },
10811 {
592a252b 10812 /* VEX_W_0F383A_P_2 */
6c30d220 10813 { "vpminuw", { XM, Vex, EXx } },
9e30b8e0
L
10814 },
10815 {
592a252b 10816 /* VEX_W_0F383B_P_2 */
6c30d220 10817 { "vpminud", { XM, Vex, EXx } },
9e30b8e0
L
10818 },
10819 {
592a252b 10820 /* VEX_W_0F383C_P_2 */
6c30d220 10821 { "vpmaxsb", { XM, Vex, EXx } },
9e30b8e0
L
10822 },
10823 {
592a252b 10824 /* VEX_W_0F383D_P_2 */
6c30d220 10825 { "vpmaxsd", { XM, Vex, EXx } },
9e30b8e0
L
10826 },
10827 {
592a252b 10828 /* VEX_W_0F383E_P_2 */
6c30d220 10829 { "vpmaxuw", { XM, Vex, EXx } },
9e30b8e0
L
10830 },
10831 {
592a252b 10832 /* VEX_W_0F383F_P_2 */
6c30d220 10833 { "vpmaxud", { XM, Vex, EXx } },
9e30b8e0
L
10834 },
10835 {
592a252b 10836 /* VEX_W_0F3840_P_2 */
6c30d220 10837 { "vpmulld", { XM, Vex, EXx } },
9e30b8e0
L
10838 },
10839 {
592a252b 10840 /* VEX_W_0F3841_P_2 */
9e30b8e0 10841 { "vphminposuw", { XM, EXx } },
9e30b8e0 10842 },
6c30d220
L
10843 {
10844 /* VEX_W_0F3846_P_2 */
10845 { "vpsravd", { XM, Vex, EXx } },
10846 },
10847 {
10848 /* VEX_W_0F3858_P_2 */
10849 { "vpbroadcastd", { XM, EXxmm_md } },
10850 },
10851 {
10852 /* VEX_W_0F3859_P_2 */
10853 { "vpbroadcastq", { XM, EXxmm_mq } },
10854 },
10855 {
10856 /* VEX_W_0F385A_P_2_M_0 */
10857 { "vbroadcasti128", { XM, Mxmm } },
10858 },
10859 {
10860 /* VEX_W_0F3878_P_2 */
10861 { "vpbroadcastb", { XM, EXxmm_mb } },
10862 },
10863 {
10864 /* VEX_W_0F3879_P_2 */
10865 { "vpbroadcastw", { XM, EXxmm_mw } },
10866 },
9e30b8e0 10867 {
592a252b 10868 /* VEX_W_0F38DB_P_2 */
9e30b8e0 10869 { "vaesimc", { XM, EXx } },
9e30b8e0
L
10870 },
10871 {
592a252b 10872 /* VEX_W_0F38DC_P_2 */
9e30b8e0 10873 { "vaesenc", { XM, Vex128, EXx } },
9e30b8e0
L
10874 },
10875 {
592a252b 10876 /* VEX_W_0F38DD_P_2 */
9e30b8e0 10877 { "vaesenclast", { XM, Vex128, EXx } },
9e30b8e0
L
10878 },
10879 {
592a252b 10880 /* VEX_W_0F38DE_P_2 */
9e30b8e0 10881 { "vaesdec", { XM, Vex128, EXx } },
9e30b8e0
L
10882 },
10883 {
592a252b 10884 /* VEX_W_0F38DF_P_2 */
9e30b8e0 10885 { "vaesdeclast", { XM, Vex128, EXx } },
9e30b8e0 10886 },
6c30d220
L
10887 {
10888 /* VEX_W_0F3A00_P_2 */
10889 { Bad_Opcode },
10890 { "vpermq", { XM, EXx, Ib } },
10891 },
10892 {
10893 /* VEX_W_0F3A01_P_2 */
10894 { Bad_Opcode },
10895 { "vpermpd", { XM, EXx, Ib } },
10896 },
10897 {
10898 /* VEX_W_0F3A02_P_2 */
10899 { "vpblendd", { XM, Vex, EXx, Ib } },
10900 },
9e30b8e0 10901 {
592a252b 10902 /* VEX_W_0F3A04_P_2 */
9e30b8e0 10903 { "vpermilps", { XM, EXx, Ib } },
9e30b8e0
L
10904 },
10905 {
592a252b 10906 /* VEX_W_0F3A05_P_2 */
9e30b8e0 10907 { "vpermilpd", { XM, EXx, Ib } },
9e30b8e0
L
10908 },
10909 {
592a252b 10910 /* VEX_W_0F3A06_P_2 */
9e30b8e0 10911 { "vperm2f128", { XM, Vex256, EXx, Ib } },
9e30b8e0
L
10912 },
10913 {
592a252b 10914 /* VEX_W_0F3A08_P_2 */
9e30b8e0 10915 { "vroundps", { XM, EXx, Ib } },
9e30b8e0
L
10916 },
10917 {
592a252b 10918 /* VEX_W_0F3A09_P_2 */
9e30b8e0 10919 { "vroundpd", { XM, EXx, Ib } },
9e30b8e0
L
10920 },
10921 {
592a252b 10922 /* VEX_W_0F3A0A_P_2 */
539f890d 10923 { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib } },
9e30b8e0
L
10924 },
10925 {
592a252b 10926 /* VEX_W_0F3A0B_P_2 */
539f890d 10927 { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib } },
9e30b8e0
L
10928 },
10929 {
592a252b 10930 /* VEX_W_0F3A0C_P_2 */
9e30b8e0 10931 { "vblendps", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10932 },
10933 {
592a252b 10934 /* VEX_W_0F3A0D_P_2 */
9e30b8e0 10935 { "vblendpd", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10936 },
10937 {
592a252b 10938 /* VEX_W_0F3A0E_P_2 */
6c30d220 10939 { "vpblendw", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10940 },
10941 {
592a252b 10942 /* VEX_W_0F3A0F_P_2 */
6c30d220 10943 { "vpalignr", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10944 },
10945 {
592a252b 10946 /* VEX_W_0F3A14_P_2 */
9e30b8e0 10947 { "vpextrb", { Edqb, XM, Ib } },
9e30b8e0
L
10948 },
10949 {
592a252b 10950 /* VEX_W_0F3A15_P_2 */
9e30b8e0 10951 { "vpextrw", { Edqw, XM, Ib } },
9e30b8e0
L
10952 },
10953 {
592a252b 10954 /* VEX_W_0F3A18_P_2 */
9e30b8e0 10955 { "vinsertf128", { XM, Vex256, EXxmm, Ib } },
9e30b8e0
L
10956 },
10957 {
592a252b 10958 /* VEX_W_0F3A19_P_2 */
9e30b8e0 10959 { "vextractf128", { EXxmm, XM, Ib } },
9e30b8e0
L
10960 },
10961 {
592a252b 10962 /* VEX_W_0F3A20_P_2 */
9e30b8e0 10963 { "vpinsrb", { XM, Vex128, Edqb, Ib } },
9e30b8e0
L
10964 },
10965 {
592a252b 10966 /* VEX_W_0F3A21_P_2 */
9e30b8e0 10967 { "vinsertps", { XM, Vex128, EXd, Ib } },
9e30b8e0 10968 },
43234a1e
L
10969 {
10970 /* VEX_W_0F3A30_P_2 */
10971 { Bad_Opcode },
10972 { "kshiftrw", { MaskG, MaskR, Ib } },
10973 },
10974 {
10975 /* VEX_W_0F3A32_P_2 */
10976 { Bad_Opcode },
10977 { "kshiftlw", { MaskG, MaskR, Ib } },
10978 },
6c30d220
L
10979 {
10980 /* VEX_W_0F3A38_P_2 */
10981 { "vinserti128", { XM, Vex256, EXxmm, Ib } },
10982 },
10983 {
10984 /* VEX_W_0F3A39_P_2 */
10985 { "vextracti128", { EXxmm, XM, Ib } },
10986 },
9e30b8e0 10987 {
592a252b 10988 /* VEX_W_0F3A40_P_2 */
9e30b8e0 10989 { "vdpps", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10990 },
10991 {
592a252b 10992 /* VEX_W_0F3A41_P_2 */
9e30b8e0 10993 { "vdppd", { XM, Vex128, EXx, Ib } },
9e30b8e0
L
10994 },
10995 {
592a252b 10996 /* VEX_W_0F3A42_P_2 */
6c30d220 10997 { "vmpsadbw", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10998 },
10999 {
592a252b 11000 /* VEX_W_0F3A44_P_2 */
9e30b8e0 11001 { "vpclmulqdq", { XM, Vex128, EXx, PCLMUL } },
9e30b8e0 11002 },
6c30d220
L
11003 {
11004 /* VEX_W_0F3A46_P_2 */
11005 { "vperm2i128", { XM, Vex256, EXx, Ib } },
11006 },
a683cc34 11007 {
592a252b 11008 /* VEX_W_0F3A48_P_2 */
a683cc34
SP
11009 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
11010 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
11011 },
11012 {
592a252b 11013 /* VEX_W_0F3A49_P_2 */
a683cc34
SP
11014 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
11015 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
11016 },
9e30b8e0 11017 {
592a252b 11018 /* VEX_W_0F3A4A_P_2 */
9e30b8e0 11019 { "vblendvps", { XM, Vex, EXx, XMVexI4 } },
9e30b8e0
L
11020 },
11021 {
592a252b 11022 /* VEX_W_0F3A4B_P_2 */
9e30b8e0 11023 { "vblendvpd", { XM, Vex, EXx, XMVexI4 } },
9e30b8e0
L
11024 },
11025 {
592a252b 11026 /* VEX_W_0F3A4C_P_2 */
6c30d220 11027 { "vpblendvb", { XM, Vex, EXx, XMVexI4 } },
9e30b8e0
L
11028 },
11029 {
592a252b 11030 /* VEX_W_0F3A60_P_2 */
9e30b8e0 11031 { "vpcmpestrm", { XM, EXx, Ib } },
9e30b8e0
L
11032 },
11033 {
592a252b 11034 /* VEX_W_0F3A61_P_2 */
9e30b8e0 11035 { "vpcmpestri", { XM, EXx, Ib } },
9e30b8e0
L
11036 },
11037 {
592a252b 11038 /* VEX_W_0F3A62_P_2 */
9e30b8e0 11039 { "vpcmpistrm", { XM, EXx, Ib } },
9e30b8e0
L
11040 },
11041 {
592a252b 11042 /* VEX_W_0F3A63_P_2 */
9e30b8e0 11043 { "vpcmpistri", { XM, EXx, Ib } },
9e30b8e0
L
11044 },
11045 {
592a252b 11046 /* VEX_W_0F3ADF_P_2 */
9e30b8e0 11047 { "vaeskeygenassist", { XM, EXx, Ib } },
9e30b8e0 11048 },
43234a1e
L
11049#define NEED_VEX_W_TABLE
11050#include "i386-dis-evex.h"
11051#undef NEED_VEX_W_TABLE
9e30b8e0
L
11052};
11053
11054static const struct dis386 mod_table[][2] = {
11055 {
11056 /* MOD_8D */
11057 { "leaS", { Gv, M } },
9e30b8e0 11058 },
42164a71
L
11059 {
11060 /* MOD_C6_REG_7 */
11061 { Bad_Opcode },
11062 { RM_TABLE (RM_C6_REG_7) },
11063 },
11064 {
11065 /* MOD_C7_REG_7 */
11066 { Bad_Opcode },
11067 { RM_TABLE (RM_C7_REG_7) },
11068 },
4a357820
MZ
11069 {
11070 /* MOD_FF_REG_3 */
11071 { "Jcall{T|}", { indirEp } },
11072 },
11073 {
11074 /* MOD_FF_REG_5 */
11075 { "Jjmp{T|}", { indirEp } },
11076 },
9e30b8e0
L
11077 {
11078 /* MOD_0F01_REG_0 */
11079 { X86_64_TABLE (X86_64_0F01_REG_0) },
11080 { RM_TABLE (RM_0F01_REG_0) },
11081 },
11082 {
11083 /* MOD_0F01_REG_1 */
11084 { X86_64_TABLE (X86_64_0F01_REG_1) },
11085 { RM_TABLE (RM_0F01_REG_1) },
11086 },
11087 {
11088 /* MOD_0F01_REG_2 */
11089 { X86_64_TABLE (X86_64_0F01_REG_2) },
11090 { RM_TABLE (RM_0F01_REG_2) },
11091 },
11092 {
11093 /* MOD_0F01_REG_3 */
11094 { X86_64_TABLE (X86_64_0F01_REG_3) },
11095 { RM_TABLE (RM_0F01_REG_3) },
11096 },
11097 {
11098 /* MOD_0F01_REG_7 */
11099 { "invlpg", { Mb } },
11100 { RM_TABLE (RM_0F01_REG_7) },
11101 },
11102 {
11103 /* MOD_0F12_PREFIX_0 */
11104 { "movlps", { XM, EXq } },
11105 { "movhlps", { XM, EXq } },
11106 },
11107 {
11108 /* MOD_0F13 */
11109 { "movlpX", { EXq, XM } },
9e30b8e0
L
11110 },
11111 {
11112 /* MOD_0F16_PREFIX_0 */
11113 { "movhps", { XM, EXq } },
11114 { "movlhps", { XM, EXq } },
11115 },
11116 {
11117 /* MOD_0F17 */
11118 { "movhpX", { EXq, XM } },
9e30b8e0
L
11119 },
11120 {
11121 /* MOD_0F18_REG_0 */
11122 { "prefetchnta", { Mb } },
9e30b8e0
L
11123 },
11124 {
11125 /* MOD_0F18_REG_1 */
11126 { "prefetcht0", { Mb } },
9e30b8e0
L
11127 },
11128 {
11129 /* MOD_0F18_REG_2 */
11130 { "prefetcht1", { Mb } },
9e30b8e0
L
11131 },
11132 {
11133 /* MOD_0F18_REG_3 */
11134 { "prefetcht2", { Mb } },
9e30b8e0 11135 },
d7189fa5
RM
11136 {
11137 /* MOD_0F18_REG_4 */
11138 { "nop/reserved", { Mb } },
11139 },
11140 {
11141 /* MOD_0F18_REG_5 */
11142 { "nop/reserved", { Mb } },
11143 },
11144 {
11145 /* MOD_0F18_REG_6 */
11146 { "nop/reserved", { Mb } },
11147 },
11148 {
11149 /* MOD_0F18_REG_7 */
11150 { "nop/reserved", { Mb } },
11151 },
7e8b059b
L
11152 {
11153 /* MOD_0F1A_PREFIX_0 */
11154 { "bndldx", { Gbnd, Ev_bnd } },
11155 { "nopQ", { Ev } },
11156 },
11157 {
11158 /* MOD_0F1B_PREFIX_0 */
11159 { "bndstx", { Ev_bnd, Gbnd } },
11160 { "nopQ", { Ev } },
11161 },
11162 {
11163 /* MOD_0F1B_PREFIX_1 */
11164 { "bndmk", { Gbnd, Ev_bnd } },
11165 { "nopQ", { Ev } },
11166 },
9e30b8e0
L
11167 {
11168 /* MOD_0F20 */
592d1631 11169 { Bad_Opcode },
9e30b8e0
L
11170 { "movZ", { Rm, Cm } },
11171 },
11172 {
11173 /* MOD_0F21 */
592d1631 11174 { Bad_Opcode },
9e30b8e0
L
11175 { "movZ", { Rm, Dm } },
11176 },
11177 {
11178 /* MOD_0F22 */
592d1631 11179 { Bad_Opcode },
9e30b8e0 11180 { "movZ", { Cm, Rm } },
b844680a
L
11181 },
11182 {
92fddf8e 11183 /* MOD_0F23 */
592d1631 11184 { Bad_Opcode },
92fddf8e 11185 { "movZ", { Dm, Rm } },
b844680a
L
11186 },
11187 {
92fddf8e 11188 /* MOD_0F24 */
7bb15c6f 11189 { Bad_Opcode },
92fddf8e 11190 { "movL", { Rd, Td } },
b844680a
L
11191 },
11192 {
92fddf8e 11193 /* MOD_0F26 */
592d1631 11194 { Bad_Opcode },
92fddf8e 11195 { "movL", { Td, Rd } },
b844680a 11196 },
75c135a8
L
11197 {
11198 /* MOD_0F2B_PREFIX_0 */
4ee52178 11199 {"movntps", { Mx, XM } },
75c135a8
L
11200 },
11201 {
11202 /* MOD_0F2B_PREFIX_1 */
4ee52178 11203 {"movntss", { Md, XM } },
75c135a8
L
11204 },
11205 {
11206 /* MOD_0F2B_PREFIX_2 */
4ee52178 11207 {"movntpd", { Mx, XM } },
75c135a8
L
11208 },
11209 {
11210 /* MOD_0F2B_PREFIX_3 */
4ee52178 11211 {"movntsd", { Mq, XM } },
75c135a8
L
11212 },
11213 {
11214 /* MOD_0F51 */
592d1631 11215 { Bad_Opcode },
75c135a8
L
11216 { "movmskpX", { Gdq, XS } },
11217 },
b844680a 11218 {
1ceb70f8 11219 /* MOD_0F71_REG_2 */
592d1631 11220 { Bad_Opcode },
4e7d34a6 11221 { "psrlw", { MS, Ib } },
b844680a
L
11222 },
11223 {
1ceb70f8 11224 /* MOD_0F71_REG_4 */
592d1631 11225 { Bad_Opcode },
4e7d34a6 11226 { "psraw", { MS, Ib } },
b844680a
L
11227 },
11228 {
1ceb70f8 11229 /* MOD_0F71_REG_6 */
592d1631 11230 { Bad_Opcode },
4e7d34a6 11231 { "psllw", { MS, Ib } },
b844680a
L
11232 },
11233 {
1ceb70f8 11234 /* MOD_0F72_REG_2 */
592d1631 11235 { Bad_Opcode },
4e7d34a6 11236 { "psrld", { MS, Ib } },
b844680a
L
11237 },
11238 {
1ceb70f8 11239 /* MOD_0F72_REG_4 */
592d1631 11240 { Bad_Opcode },
4e7d34a6 11241 { "psrad", { MS, Ib } },
b844680a
L
11242 },
11243 {
1ceb70f8 11244 /* MOD_0F72_REG_6 */
592d1631 11245 { Bad_Opcode },
4e7d34a6 11246 { "pslld", { MS, Ib } },
b844680a
L
11247 },
11248 {
1ceb70f8 11249 /* MOD_0F73_REG_2 */
592d1631 11250 { Bad_Opcode },
4e7d34a6 11251 { "psrlq", { MS, Ib } },
b844680a
L
11252 },
11253 {
1ceb70f8 11254 /* MOD_0F73_REG_3 */
592d1631 11255 { Bad_Opcode },
c0f3af97
L
11256 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
11257 },
11258 {
11259 /* MOD_0F73_REG_6 */
592d1631 11260 { Bad_Opcode },
c0f3af97
L
11261 { "psllq", { MS, Ib } },
11262 },
11263 {
11264 /* MOD_0F73_REG_7 */
592d1631 11265 { Bad_Opcode },
c0f3af97
L
11266 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
11267 },
11268 {
11269 /* MOD_0FAE_REG_0 */
eacc9c89 11270 { "fxsave", { FXSAVE } },
c7b8aa3a 11271 { PREFIX_TABLE (PREFIX_0FAE_REG_0) },
c0f3af97
L
11272 },
11273 {
11274 /* MOD_0FAE_REG_1 */
eacc9c89 11275 { "fxrstor", { FXSAVE } },
c7b8aa3a 11276 { PREFIX_TABLE (PREFIX_0FAE_REG_1) },
c0f3af97
L
11277 },
11278 {
11279 /* MOD_0FAE_REG_2 */
11280 { "ldmxcsr", { Md } },
c7b8aa3a 11281 { PREFIX_TABLE (PREFIX_0FAE_REG_2) },
c0f3af97
L
11282 },
11283 {
11284 /* MOD_0FAE_REG_3 */
11285 { "stmxcsr", { Md } },
c7b8aa3a 11286 { PREFIX_TABLE (PREFIX_0FAE_REG_3) },
c0f3af97
L
11287 },
11288 {
11289 /* MOD_0FAE_REG_4 */
73bb6729 11290 { "xsave", { FXSAVE } },
c0f3af97
L
11291 },
11292 {
11293 /* MOD_0FAE_REG_5 */
73bb6729 11294 { "xrstor", { FXSAVE } },
c0f3af97
L
11295 { RM_TABLE (RM_0FAE_REG_5) },
11296 },
11297 {
11298 /* MOD_0FAE_REG_6 */
c7b8aa3a 11299 { "xsaveopt", { FXSAVE } },
c0f3af97
L
11300 { RM_TABLE (RM_0FAE_REG_6) },
11301 },
11302 {
11303 /* MOD_0FAE_REG_7 */
963f3586 11304 { PREFIX_TABLE (PREFIX_0FAE_REG_7) },
c0f3af97
L
11305 { RM_TABLE (RM_0FAE_REG_7) },
11306 },
11307 {
11308 /* MOD_0FB2 */
11309 { "lssS", { Gv, Mp } },
c0f3af97
L
11310 },
11311 {
11312 /* MOD_0FB4 */
11313 { "lfsS", { Gv, Mp } },
c0f3af97
L
11314 },
11315 {
11316 /* MOD_0FB5 */
11317 { "lgsS", { Gv, Mp } },
c0f3af97 11318 },
963f3586
IT
11319 {
11320 /* MOD_0FC7_REG_3 */
11321 { "xrstors", { FXSAVE } },
11322 },
11323 {
11324 /* MOD_0FC7_REG_4 */
11325 { "xsavec", { FXSAVE } },
11326 },
11327 {
11328 /* MOD_0FC7_REG_5 */
11329 { "xsaves", { FXSAVE } },
11330 },
c0f3af97
L
11331 {
11332 /* MOD_0FC7_REG_6 */
11333 { PREFIX_TABLE (PREFIX_0FC7_REG_6) },
d7d9a9f8 11334 { "rdrand", { Ev } },
c0f3af97
L
11335 },
11336 {
11337 /* MOD_0FC7_REG_7 */
11338 { "vmptrst", { Mq } },
e2e1fcde 11339 { "rdseed", { Ev } },
c0f3af97
L
11340 },
11341 {
11342 /* MOD_0FD7 */
592d1631 11343 { Bad_Opcode },
c0f3af97
L
11344 { "pmovmskb", { Gdq, MS } },
11345 },
11346 {
11347 /* MOD_0FE7_PREFIX_2 */
11348 { "movntdq", { Mx, XM } },
c0f3af97
L
11349 },
11350 {
11351 /* MOD_0FF0_PREFIX_3 */
11352 { "lddqu", { XM, M } },
c0f3af97
L
11353 },
11354 {
11355 /* MOD_0F382A_PREFIX_2 */
11356 { "movntdqa", { XM, Mx } },
c0f3af97
L
11357 },
11358 {
11359 /* MOD_62_32BIT */
11360 { "bound{S|}", { Gv, Ma } },
43234a1e 11361 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
11362 },
11363 {
11364 /* MOD_C4_32BIT */
11365 { "lesS", { Gv, Mp } },
11366 { VEX_C4_TABLE (VEX_0F) },
11367 },
11368 {
11369 /* MOD_C5_32BIT */
11370 { "ldsS", { Gv, Mp } },
11371 { VEX_C5_TABLE (VEX_0F) },
11372 },
11373 {
592a252b
L
11374 /* MOD_VEX_0F12_PREFIX_0 */
11375 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
11376 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
c0f3af97
L
11377 },
11378 {
592a252b
L
11379 /* MOD_VEX_0F13 */
11380 { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
c0f3af97
L
11381 },
11382 {
592a252b
L
11383 /* MOD_VEX_0F16_PREFIX_0 */
11384 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
11385 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
c0f3af97
L
11386 },
11387 {
592a252b
L
11388 /* MOD_VEX_0F17 */
11389 { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
c0f3af97
L
11390 },
11391 {
592a252b
L
11392 /* MOD_VEX_0F2B */
11393 { VEX_W_TABLE (VEX_W_0F2B_M_0) },
c0f3af97
L
11394 },
11395 {
592a252b 11396 /* MOD_VEX_0F50 */
592d1631 11397 { Bad_Opcode },
592a252b 11398 { VEX_W_TABLE (VEX_W_0F50_M_0) },
c0f3af97
L
11399 },
11400 {
592a252b 11401 /* MOD_VEX_0F71_REG_2 */
592d1631 11402 { Bad_Opcode },
592a252b 11403 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
b844680a
L
11404 },
11405 {
592a252b 11406 /* MOD_VEX_0F71_REG_4 */
592d1631 11407 { Bad_Opcode },
592a252b 11408 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
b844680a
L
11409 },
11410 {
592a252b 11411 /* MOD_VEX_0F71_REG_6 */
592d1631 11412 { Bad_Opcode },
592a252b 11413 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
b844680a
L
11414 },
11415 {
592a252b 11416 /* MOD_VEX_0F72_REG_2 */
592d1631 11417 { Bad_Opcode },
592a252b 11418 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
b844680a 11419 },
d8faab4e 11420 {
592a252b 11421 /* MOD_VEX_0F72_REG_4 */
592d1631 11422 { Bad_Opcode },
592a252b 11423 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
d8faab4e
L
11424 },
11425 {
592a252b 11426 /* MOD_VEX_0F72_REG_6 */
592d1631 11427 { Bad_Opcode },
592a252b 11428 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
d8faab4e 11429 },
876d4bfa 11430 {
592a252b 11431 /* MOD_VEX_0F73_REG_2 */
592d1631 11432 { Bad_Opcode },
592a252b 11433 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
876d4bfa
L
11434 },
11435 {
592a252b 11436 /* MOD_VEX_0F73_REG_3 */
592d1631 11437 { Bad_Opcode },
592a252b 11438 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
475a2301
L
11439 },
11440 {
592a252b 11441 /* MOD_VEX_0F73_REG_6 */
592d1631 11442 { Bad_Opcode },
592a252b 11443 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
876d4bfa
L
11444 },
11445 {
592a252b 11446 /* MOD_VEX_0F73_REG_7 */
592d1631 11447 { Bad_Opcode },
592a252b 11448 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
876d4bfa
L
11449 },
11450 {
592a252b
L
11451 /* MOD_VEX_0FAE_REG_2 */
11452 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
876d4bfa 11453 },
bbedc832 11454 {
592a252b
L
11455 /* MOD_VEX_0FAE_REG_3 */
11456 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
bbedc832 11457 },
144c41d9 11458 {
592a252b 11459 /* MOD_VEX_0FD7_PREFIX_2 */
592d1631 11460 { Bad_Opcode },
6c30d220 11461 { VEX_W_TABLE (VEX_W_0FD7_P_2_M_1) },
144c41d9 11462 },
1afd85e3 11463 {
592a252b
L
11464 /* MOD_VEX_0FE7_PREFIX_2 */
11465 { VEX_W_TABLE (VEX_W_0FE7_P_2_M_0) },
1afd85e3
L
11466 },
11467 {
592a252b
L
11468 /* MOD_VEX_0FF0_PREFIX_3 */
11469 { VEX_W_TABLE (VEX_W_0FF0_P_3_M_0) },
92fddf8e 11470 },
75c135a8 11471 {
592a252b
L
11472 /* MOD_VEX_0F381A_PREFIX_2 */
11473 { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
75c135a8 11474 },
1afd85e3 11475 {
592a252b 11476 /* MOD_VEX_0F382A_PREFIX_2 */
6c30d220 11477 { VEX_W_TABLE (VEX_W_0F382A_P_2_M_0) },
1afd85e3 11478 },
75c135a8 11479 {
592a252b
L
11480 /* MOD_VEX_0F382C_PREFIX_2 */
11481 { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
75c135a8 11482 },
1afd85e3 11483 {
592a252b
L
11484 /* MOD_VEX_0F382D_PREFIX_2 */
11485 { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
1afd85e3
L
11486 },
11487 {
592a252b
L
11488 /* MOD_VEX_0F382E_PREFIX_2 */
11489 { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
1afd85e3
L
11490 },
11491 {
592a252b
L
11492 /* MOD_VEX_0F382F_PREFIX_2 */
11493 { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
1afd85e3 11494 },
6c30d220
L
11495 {
11496 /* MOD_VEX_0F385A_PREFIX_2 */
11497 { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) },
11498 },
11499 {
11500 /* MOD_VEX_0F388C_PREFIX_2 */
11501 { "vpmaskmov%LW", { XM, Vex, Mx } },
11502 },
11503 {
11504 /* MOD_VEX_0F388E_PREFIX_2 */
11505 { "vpmaskmov%LW", { Mx, Vex, XM } },
11506 },
43234a1e
L
11507#define NEED_MOD_TABLE
11508#include "i386-dis-evex.h"
11509#undef NEED_MOD_TABLE
b844680a
L
11510};
11511
1ceb70f8 11512static const struct dis386 rm_table[][8] = {
42164a71
L
11513 {
11514 /* RM_C6_REG_7 */
11515 { "xabort", { Skip_MODRM, Ib } },
11516 },
11517 {
11518 /* RM_C7_REG_7 */
11519 { "xbeginT", { Skip_MODRM, Jv } },
11520 },
b844680a 11521 {
1ceb70f8 11522 /* RM_0F01_REG_0 */
592d1631 11523 { Bad_Opcode },
b844680a
L
11524 { "vmcall", { Skip_MODRM } },
11525 { "vmlaunch", { Skip_MODRM } },
11526 { "vmresume", { Skip_MODRM } },
11527 { "vmxoff", { Skip_MODRM } },
b844680a
L
11528 },
11529 {
1ceb70f8 11530 /* RM_0F01_REG_1 */
b844680a
L
11531 { "monitor", { { OP_Monitor, 0 } } },
11532 { "mwait", { { OP_Mwait, 0 } } },
5c111e37
L
11533 { "clac", { Skip_MODRM } },
11534 { "stac", { Skip_MODRM } },
b844680a 11535 },
475a2301
L
11536 {
11537 /* RM_0F01_REG_2 */
11538 { "xgetbv", { Skip_MODRM } },
11539 { "xsetbv", { Skip_MODRM } },
8729a6f6
L
11540 { Bad_Opcode },
11541 { Bad_Opcode },
11542 { "vmfunc", { Skip_MODRM } },
42164a71
L
11543 { "xend", { Skip_MODRM } },
11544 { "xtest", { Skip_MODRM } },
11545 { Bad_Opcode },
475a2301 11546 },
b844680a 11547 {
1ceb70f8 11548 /* RM_0F01_REG_3 */
4e7d34a6
L
11549 { "vmrun", { Skip_MODRM } },
11550 { "vmmcall", { Skip_MODRM } },
11551 { "vmload", { Skip_MODRM } },
11552 { "vmsave", { Skip_MODRM } },
11553 { "stgi", { Skip_MODRM } },
11554 { "clgi", { Skip_MODRM } },
11555 { "skinit", { Skip_MODRM } },
11556 { "invlpga", { Skip_MODRM } },
11557 },
11558 {
1ceb70f8 11559 /* RM_0F01_REG_7 */
4e7d34a6
L
11560 { "swapgs", { Skip_MODRM } },
11561 { "rdtscp", { Skip_MODRM } },
b844680a
L
11562 },
11563 {
1ceb70f8 11564 /* RM_0FAE_REG_5 */
4e7d34a6 11565 { "lfence", { Skip_MODRM } },
b844680a
L
11566 },
11567 {
1ceb70f8 11568 /* RM_0FAE_REG_6 */
4e7d34a6 11569 { "mfence", { Skip_MODRM } },
b844680a 11570 },
bbedc832 11571 {
1ceb70f8 11572 /* RM_0FAE_REG_7 */
4e7d34a6 11573 { "sfence", { Skip_MODRM } },
144c41d9 11574 },
b844680a
L
11575};
11576
c608c12e
AM
11577#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
11578
f16cd0d5
L
11579/* We use the high bit to indicate different name for the same
11580 prefix. */
11581#define ADDR16_PREFIX (0x67 | 0x100)
11582#define ADDR32_PREFIX (0x67 | 0x200)
11583#define DATA16_PREFIX (0x66 | 0x100)
11584#define DATA32_PREFIX (0x66 | 0x200)
11585#define REP_PREFIX (0xf3 | 0x100)
42164a71
L
11586#define XACQUIRE_PREFIX (0xf2 | 0x200)
11587#define XRELEASE_PREFIX (0xf3 | 0x400)
7e8b059b 11588#define BND_PREFIX (0xf2 | 0x400)
f16cd0d5
L
11589
11590static int
26ca5450 11591ckprefix (void)
252b5132 11592{
f16cd0d5 11593 int newrex, i, length;
52b15da3 11594 rex = 0;
c0f3af97 11595 rex_ignored = 0;
252b5132 11596 prefixes = 0;
7d421014 11597 used_prefixes = 0;
52b15da3 11598 rex_used = 0;
f16cd0d5
L
11599 last_lock_prefix = -1;
11600 last_repz_prefix = -1;
11601 last_repnz_prefix = -1;
11602 last_data_prefix = -1;
11603 last_addr_prefix = -1;
11604 last_rex_prefix = -1;
11605 last_seg_prefix = -1;
f310f33d
L
11606 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
11607 all_prefixes[i] = 0;
11608 i = 0;
f16cd0d5
L
11609 length = 0;
11610 /* The maximum instruction length is 15bytes. */
11611 while (length < MAX_CODE_LENGTH - 1)
252b5132
RH
11612 {
11613 FETCH_DATA (the_info, codep + 1);
52b15da3 11614 newrex = 0;
252b5132
RH
11615 switch (*codep)
11616 {
52b15da3
JH
11617 /* REX prefixes family. */
11618 case 0x40:
11619 case 0x41:
11620 case 0x42:
11621 case 0x43:
11622 case 0x44:
11623 case 0x45:
11624 case 0x46:
11625 case 0x47:
11626 case 0x48:
11627 case 0x49:
11628 case 0x4a:
11629 case 0x4b:
11630 case 0x4c:
11631 case 0x4d:
11632 case 0x4e:
11633 case 0x4f:
f16cd0d5
L
11634 if (address_mode == mode_64bit)
11635 newrex = *codep;
11636 else
11637 return 1;
11638 last_rex_prefix = i;
52b15da3 11639 break;
252b5132
RH
11640 case 0xf3:
11641 prefixes |= PREFIX_REPZ;
f16cd0d5 11642 last_repz_prefix = i;
252b5132
RH
11643 break;
11644 case 0xf2:
11645 prefixes |= PREFIX_REPNZ;
f16cd0d5 11646 last_repnz_prefix = i;
252b5132
RH
11647 break;
11648 case 0xf0:
11649 prefixes |= PREFIX_LOCK;
f16cd0d5 11650 last_lock_prefix = i;
252b5132
RH
11651 break;
11652 case 0x2e:
11653 prefixes |= PREFIX_CS;
f16cd0d5 11654 last_seg_prefix = i;
252b5132
RH
11655 break;
11656 case 0x36:
11657 prefixes |= PREFIX_SS;
f16cd0d5 11658 last_seg_prefix = i;
252b5132
RH
11659 break;
11660 case 0x3e:
11661 prefixes |= PREFIX_DS;
f16cd0d5 11662 last_seg_prefix = i;
252b5132
RH
11663 break;
11664 case 0x26:
11665 prefixes |= PREFIX_ES;
f16cd0d5 11666 last_seg_prefix = i;
252b5132
RH
11667 break;
11668 case 0x64:
11669 prefixes |= PREFIX_FS;
f16cd0d5 11670 last_seg_prefix = i;
252b5132
RH
11671 break;
11672 case 0x65:
11673 prefixes |= PREFIX_GS;
f16cd0d5 11674 last_seg_prefix = i;
252b5132
RH
11675 break;
11676 case 0x66:
11677 prefixes |= PREFIX_DATA;
f16cd0d5 11678 last_data_prefix = i;
252b5132
RH
11679 break;
11680 case 0x67:
11681 prefixes |= PREFIX_ADDR;
f16cd0d5 11682 last_addr_prefix = i;
252b5132 11683 break;
5076851f 11684 case FWAIT_OPCODE:
252b5132
RH
11685 /* fwait is really an instruction. If there are prefixes
11686 before the fwait, they belong to the fwait, *not* to the
11687 following instruction. */
3e7d61b2 11688 if (prefixes || rex)
252b5132
RH
11689 {
11690 prefixes |= PREFIX_FWAIT;
11691 codep++;
6c067bbb
RM
11692 /* This ensures that the previous REX prefixes are noticed
11693 as unused prefixes, as in the return case below. */
11694 rex_used = rex;
f16cd0d5 11695 return 1;
252b5132
RH
11696 }
11697 prefixes = PREFIX_FWAIT;
11698 break;
11699 default:
f16cd0d5 11700 return 1;
252b5132 11701 }
52b15da3
JH
11702 /* Rex is ignored when followed by another prefix. */
11703 if (rex)
11704 {
3e7d61b2 11705 rex_used = rex;
f16cd0d5 11706 return 1;
52b15da3 11707 }
f16cd0d5
L
11708 if (*codep != FWAIT_OPCODE)
11709 all_prefixes[i++] = *codep;
52b15da3 11710 rex = newrex;
252b5132 11711 codep++;
f16cd0d5
L
11712 length++;
11713 }
11714 return 0;
11715}
11716
11717static int
11718seg_prefix (int pref)
11719{
11720 switch (pref)
11721 {
11722 case 0x2e:
11723 return PREFIX_CS;
11724 case 0x36:
11725 return PREFIX_SS;
11726 case 0x3e:
11727 return PREFIX_DS;
11728 case 0x26:
11729 return PREFIX_ES;
11730 case 0x64:
11731 return PREFIX_FS;
11732 case 0x65:
11733 return PREFIX_GS;
11734 default:
11735 return 0;
252b5132
RH
11736 }
11737}
11738
7d421014
ILT
11739/* Return the name of the prefix byte PREF, or NULL if PREF is not a
11740 prefix byte. */
11741
11742static const char *
26ca5450 11743prefix_name (int pref, int sizeflag)
7d421014 11744{
0003779b
L
11745 static const char *rexes [16] =
11746 {
11747 "rex", /* 0x40 */
11748 "rex.B", /* 0x41 */
11749 "rex.X", /* 0x42 */
11750 "rex.XB", /* 0x43 */
11751 "rex.R", /* 0x44 */
11752 "rex.RB", /* 0x45 */
11753 "rex.RX", /* 0x46 */
11754 "rex.RXB", /* 0x47 */
11755 "rex.W", /* 0x48 */
11756 "rex.WB", /* 0x49 */
11757 "rex.WX", /* 0x4a */
11758 "rex.WXB", /* 0x4b */
11759 "rex.WR", /* 0x4c */
11760 "rex.WRB", /* 0x4d */
11761 "rex.WRX", /* 0x4e */
11762 "rex.WRXB", /* 0x4f */
11763 };
11764
7d421014
ILT
11765 switch (pref)
11766 {
52b15da3
JH
11767 /* REX prefixes family. */
11768 case 0x40:
52b15da3 11769 case 0x41:
52b15da3 11770 case 0x42:
52b15da3 11771 case 0x43:
52b15da3 11772 case 0x44:
52b15da3 11773 case 0x45:
52b15da3 11774 case 0x46:
52b15da3 11775 case 0x47:
52b15da3 11776 case 0x48:
52b15da3 11777 case 0x49:
52b15da3 11778 case 0x4a:
52b15da3 11779 case 0x4b:
52b15da3 11780 case 0x4c:
52b15da3 11781 case 0x4d:
52b15da3 11782 case 0x4e:
52b15da3 11783 case 0x4f:
0003779b 11784 return rexes [pref - 0x40];
7d421014
ILT
11785 case 0xf3:
11786 return "repz";
11787 case 0xf2:
11788 return "repnz";
11789 case 0xf0:
11790 return "lock";
11791 case 0x2e:
11792 return "cs";
11793 case 0x36:
11794 return "ss";
11795 case 0x3e:
11796 return "ds";
11797 case 0x26:
11798 return "es";
11799 case 0x64:
11800 return "fs";
11801 case 0x65:
11802 return "gs";
11803 case 0x66:
11804 return (sizeflag & DFLAG) ? "data16" : "data32";
11805 case 0x67:
cb712a9e 11806 if (address_mode == mode_64bit)
db6eb5be 11807 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 11808 else
2888cb7a 11809 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
11810 case FWAIT_OPCODE:
11811 return "fwait";
f16cd0d5
L
11812 case ADDR16_PREFIX:
11813 return "addr16";
11814 case ADDR32_PREFIX:
11815 return "addr32";
11816 case DATA16_PREFIX:
11817 return "data16";
11818 case DATA32_PREFIX:
11819 return "data32";
11820 case REP_PREFIX:
11821 return "rep";
42164a71
L
11822 case XACQUIRE_PREFIX:
11823 return "xacquire";
11824 case XRELEASE_PREFIX:
11825 return "xrelease";
7e8b059b
L
11826 case BND_PREFIX:
11827 return "bnd";
7d421014
ILT
11828 default:
11829 return NULL;
11830 }
11831}
11832
ce518a5f
L
11833static char op_out[MAX_OPERANDS][100];
11834static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 11835static int two_source_ops;
ce518a5f
L
11836static bfd_vma op_address[MAX_OPERANDS];
11837static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 11838static bfd_vma start_pc;
ce518a5f 11839
252b5132
RH
11840/*
11841 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
11842 * (see topic "Redundant prefixes" in the "Differences from 8086"
11843 * section of the "Virtual 8086 Mode" chapter.)
11844 * 'pc' should be the address of this instruction, it will
11845 * be used to print the target address if this is a relative jump or call
11846 * The function returns the length of this instruction in bytes.
11847 */
11848
252b5132 11849static char intel_syntax;
9d141669 11850static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
11851static char open_char;
11852static char close_char;
11853static char separator_char;
11854static char scale_char;
11855
e396998b
AM
11856/* Here for backwards compatibility. When gdb stops using
11857 print_insn_i386_att and print_insn_i386_intel these functions can
11858 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 11859int
26ca5450 11860print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
11861{
11862 intel_syntax = 0;
e396998b
AM
11863
11864 return print_insn (pc, info);
252b5132
RH
11865}
11866
11867int
26ca5450 11868print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
11869{
11870 intel_syntax = 1;
e396998b
AM
11871
11872 return print_insn (pc, info);
252b5132
RH
11873}
11874
e396998b 11875int
26ca5450 11876print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
11877{
11878 intel_syntax = -1;
11879
11880 return print_insn (pc, info);
11881}
11882
f59a29b9
L
11883void
11884print_i386_disassembler_options (FILE *stream)
11885{
11886 fprintf (stream, _("\n\
11887The following i386/x86-64 specific disassembler options are supported for use\n\
11888with the -M switch (multiple options should be separated by commas):\n"));
11889
11890 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
11891 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
11892 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
11893 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
11894 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
11895 fprintf (stream, _(" att-mnemonic\n"
11896 " Display instruction in AT&T mnemonic\n"));
11897 fprintf (stream, _(" intel-mnemonic\n"
11898 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
11899 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
11900 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
11901 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
11902 fprintf (stream, _(" data32 Assume 32bit data size\n"));
11903 fprintf (stream, _(" data16 Assume 16bit data size\n"));
11904 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
11905}
11906
592d1631
L
11907/* Bad opcode. */
11908static const struct dis386 bad_opcode = { "(bad)", { XX } };
11909
b844680a
L
11910/* Get a pointer to struct dis386 with a valid name. */
11911
11912static const struct dis386 *
8bb15339 11913get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 11914{
91d6fa6a 11915 int vindex, vex_table_index;
b844680a
L
11916
11917 if (dp->name != NULL)
11918 return dp;
11919
11920 switch (dp->op[0].bytemode)
11921 {
1ceb70f8
L
11922 case USE_REG_TABLE:
11923 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
11924 break;
11925
11926 case USE_MOD_TABLE:
91d6fa6a
NC
11927 vindex = modrm.mod == 0x3 ? 1 : 0;
11928 dp = &mod_table[dp->op[1].bytemode][vindex];
1ceb70f8
L
11929 break;
11930
11931 case USE_RM_TABLE:
11932 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
11933 break;
11934
4e7d34a6 11935 case USE_PREFIX_TABLE:
c0f3af97 11936 if (need_vex)
b844680a 11937 {
c0f3af97
L
11938 /* The prefix in VEX is implicit. */
11939 switch (vex.prefix)
11940 {
11941 case 0:
91d6fa6a 11942 vindex = 0;
c0f3af97
L
11943 break;
11944 case REPE_PREFIX_OPCODE:
91d6fa6a 11945 vindex = 1;
c0f3af97
L
11946 break;
11947 case DATA_PREFIX_OPCODE:
91d6fa6a 11948 vindex = 2;
c0f3af97
L
11949 break;
11950 case REPNE_PREFIX_OPCODE:
91d6fa6a 11951 vindex = 3;
c0f3af97
L
11952 break;
11953 default:
11954 abort ();
11955 break;
11956 }
b844680a 11957 }
7bb15c6f 11958 else
b844680a 11959 {
91d6fa6a 11960 vindex = 0;
c0f3af97
L
11961 used_prefixes |= (prefixes & PREFIX_REPZ);
11962 if (prefixes & PREFIX_REPZ)
b844680a 11963 {
91d6fa6a 11964 vindex = 1;
f16cd0d5 11965 all_prefixes[last_repz_prefix] = 0;
b844680a
L
11966 }
11967 else
11968 {
c0f3af97
L
11969 /* We should check PREFIX_REPNZ and PREFIX_REPZ before
11970 PREFIX_DATA. */
11971 used_prefixes |= (prefixes & PREFIX_REPNZ);
11972 if (prefixes & PREFIX_REPNZ)
11973 {
91d6fa6a 11974 vindex = 3;
f16cd0d5 11975 all_prefixes[last_repnz_prefix] = 0;
c0f3af97
L
11976 }
11977 else
b844680a 11978 {
c0f3af97
L
11979 used_prefixes |= (prefixes & PREFIX_DATA);
11980 if (prefixes & PREFIX_DATA)
11981 {
91d6fa6a 11982 vindex = 2;
f16cd0d5 11983 all_prefixes[last_data_prefix] = 0;
c0f3af97 11984 }
b844680a
L
11985 }
11986 }
11987 }
91d6fa6a 11988 dp = &prefix_table[dp->op[1].bytemode][vindex];
b844680a
L
11989 break;
11990
4e7d34a6 11991 case USE_X86_64_TABLE:
91d6fa6a
NC
11992 vindex = address_mode == mode_64bit ? 1 : 0;
11993 dp = &x86_64_table[dp->op[1].bytemode][vindex];
b844680a
L
11994 break;
11995
4e7d34a6 11996 case USE_3BYTE_TABLE:
8bb15339 11997 FETCH_DATA (info, codep + 2);
91d6fa6a
NC
11998 vindex = *codep++;
11999 dp = &three_byte_table[dp->op[1].bytemode][vindex];
8bb15339
L
12000 modrm.mod = (*codep >> 6) & 3;
12001 modrm.reg = (*codep >> 3) & 7;
12002 modrm.rm = *codep & 7;
12003 break;
12004
c0f3af97
L
12005 case USE_VEX_LEN_TABLE:
12006 if (!need_vex)
12007 abort ();
12008
12009 switch (vex.length)
12010 {
12011 case 128:
91d6fa6a 12012 vindex = 0;
c0f3af97
L
12013 break;
12014 case 256:
91d6fa6a 12015 vindex = 1;
c0f3af97
L
12016 break;
12017 default:
12018 abort ();
12019 break;
12020 }
12021
91d6fa6a 12022 dp = &vex_len_table[dp->op[1].bytemode][vindex];
c0f3af97
L
12023 break;
12024
f88c9eb0
SP
12025 case USE_XOP_8F_TABLE:
12026 FETCH_DATA (info, codep + 3);
12027 /* All bits in the REX prefix are ignored. */
12028 rex_ignored = rex;
12029 rex = ~(*codep >> 5) & 0x7;
12030
12031 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
12032 switch ((*codep & 0x1f))
12033 {
12034 default:
f07af43e
L
12035 dp = &bad_opcode;
12036 return dp;
5dd85c99
SP
12037 case 0x8:
12038 vex_table_index = XOP_08;
12039 break;
f88c9eb0
SP
12040 case 0x9:
12041 vex_table_index = XOP_09;
12042 break;
12043 case 0xa:
12044 vex_table_index = XOP_0A;
12045 break;
12046 }
12047 codep++;
12048 vex.w = *codep & 0x80;
12049 if (vex.w && address_mode == mode_64bit)
12050 rex |= REX_W;
12051
12052 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12053 if (address_mode != mode_64bit
12054 && vex.register_specifier > 0x7)
f07af43e
L
12055 {
12056 dp = &bad_opcode;
12057 return dp;
12058 }
f88c9eb0
SP
12059
12060 vex.length = (*codep & 0x4) ? 256 : 128;
12061 switch ((*codep & 0x3))
12062 {
12063 case 0:
12064 vex.prefix = 0;
12065 break;
12066 case 1:
12067 vex.prefix = DATA_PREFIX_OPCODE;
12068 break;
12069 case 2:
12070 vex.prefix = REPE_PREFIX_OPCODE;
12071 break;
12072 case 3:
12073 vex.prefix = REPNE_PREFIX_OPCODE;
12074 break;
12075 }
12076 need_vex = 1;
12077 need_vex_reg = 1;
12078 codep++;
91d6fa6a
NC
12079 vindex = *codep++;
12080 dp = &xop_table[vex_table_index][vindex];
c48244a5
SP
12081
12082 FETCH_DATA (info, codep + 1);
12083 modrm.mod = (*codep >> 6) & 3;
12084 modrm.reg = (*codep >> 3) & 7;
12085 modrm.rm = *codep & 7;
f88c9eb0
SP
12086 break;
12087
c0f3af97 12088 case USE_VEX_C4_TABLE:
43234a1e 12089 /* VEX prefix. */
c0f3af97
L
12090 FETCH_DATA (info, codep + 3);
12091 /* All bits in the REX prefix are ignored. */
12092 rex_ignored = rex;
12093 rex = ~(*codep >> 5) & 0x7;
12094 switch ((*codep & 0x1f))
12095 {
12096 default:
f07af43e
L
12097 dp = &bad_opcode;
12098 return dp;
c0f3af97 12099 case 0x1:
f88c9eb0 12100 vex_table_index = VEX_0F;
c0f3af97
L
12101 break;
12102 case 0x2:
f88c9eb0 12103 vex_table_index = VEX_0F38;
c0f3af97
L
12104 break;
12105 case 0x3:
f88c9eb0 12106 vex_table_index = VEX_0F3A;
c0f3af97
L
12107 break;
12108 }
12109 codep++;
12110 vex.w = *codep & 0x80;
12111 if (vex.w && address_mode == mode_64bit)
12112 rex |= REX_W;
12113
12114 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12115 if (address_mode != mode_64bit
12116 && vex.register_specifier > 0x7)
f07af43e
L
12117 {
12118 dp = &bad_opcode;
12119 return dp;
12120 }
c0f3af97
L
12121
12122 vex.length = (*codep & 0x4) ? 256 : 128;
12123 switch ((*codep & 0x3))
12124 {
12125 case 0:
12126 vex.prefix = 0;
12127 break;
12128 case 1:
12129 vex.prefix = DATA_PREFIX_OPCODE;
12130 break;
12131 case 2:
12132 vex.prefix = REPE_PREFIX_OPCODE;
12133 break;
12134 case 3:
12135 vex.prefix = REPNE_PREFIX_OPCODE;
12136 break;
12137 }
12138 need_vex = 1;
12139 need_vex_reg = 1;
12140 codep++;
91d6fa6a
NC
12141 vindex = *codep++;
12142 dp = &vex_table[vex_table_index][vindex];
c0f3af97 12143 /* There is no MODRM byte for VEX [82|77]. */
91d6fa6a 12144 if (vindex != 0x77 && vindex != 0x82)
c0f3af97
L
12145 {
12146 FETCH_DATA (info, codep + 1);
12147 modrm.mod = (*codep >> 6) & 3;
12148 modrm.reg = (*codep >> 3) & 7;
12149 modrm.rm = *codep & 7;
12150 }
12151 break;
12152
12153 case USE_VEX_C5_TABLE:
43234a1e 12154 /* VEX prefix. */
c0f3af97
L
12155 FETCH_DATA (info, codep + 2);
12156 /* All bits in the REX prefix are ignored. */
12157 rex_ignored = rex;
12158 rex = (*codep & 0x80) ? 0 : REX_R;
12159
12160 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12161 if (address_mode != mode_64bit
12162 && vex.register_specifier > 0x7)
f07af43e
L
12163 {
12164 dp = &bad_opcode;
12165 return dp;
12166 }
c0f3af97 12167
759a05ce
L
12168 vex.w = 0;
12169
c0f3af97
L
12170 vex.length = (*codep & 0x4) ? 256 : 128;
12171 switch ((*codep & 0x3))
12172 {
12173 case 0:
12174 vex.prefix = 0;
12175 break;
12176 case 1:
12177 vex.prefix = DATA_PREFIX_OPCODE;
12178 break;
12179 case 2:
12180 vex.prefix = REPE_PREFIX_OPCODE;
12181 break;
12182 case 3:
12183 vex.prefix = REPNE_PREFIX_OPCODE;
12184 break;
12185 }
12186 need_vex = 1;
12187 need_vex_reg = 1;
12188 codep++;
91d6fa6a
NC
12189 vindex = *codep++;
12190 dp = &vex_table[dp->op[1].bytemode][vindex];
c0f3af97 12191 /* There is no MODRM byte for VEX [82|77]. */
91d6fa6a 12192 if (vindex != 0x77 && vindex != 0x82)
c0f3af97
L
12193 {
12194 FETCH_DATA (info, codep + 1);
12195 modrm.mod = (*codep >> 6) & 3;
12196 modrm.reg = (*codep >> 3) & 7;
12197 modrm.rm = *codep & 7;
12198 }
12199 break;
12200
9e30b8e0
L
12201 case USE_VEX_W_TABLE:
12202 if (!need_vex)
12203 abort ();
12204
12205 dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
12206 break;
12207
43234a1e
L
12208 case USE_EVEX_TABLE:
12209 two_source_ops = 0;
12210 /* EVEX prefix. */
12211 vex.evex = 1;
12212 FETCH_DATA (info, codep + 4);
12213 /* All bits in the REX prefix are ignored. */
12214 rex_ignored = rex;
12215 /* The first byte after 0x62. */
12216 rex = ~(*codep >> 5) & 0x7;
12217 vex.r = *codep & 0x10;
12218 switch ((*codep & 0xf))
12219 {
12220 default:
12221 return &bad_opcode;
12222 case 0x1:
12223 vex_table_index = EVEX_0F;
12224 break;
12225 case 0x2:
12226 vex_table_index = EVEX_0F38;
12227 break;
12228 case 0x3:
12229 vex_table_index = EVEX_0F3A;
12230 break;
12231 }
12232
12233 /* The second byte after 0x62. */
12234 codep++;
12235 vex.w = *codep & 0x80;
12236 if (vex.w && address_mode == mode_64bit)
12237 rex |= REX_W;
12238
12239 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12240 if (address_mode != mode_64bit)
12241 {
12242 /* In 16/32-bit mode silently ignore following bits. */
12243 rex &= ~REX_B;
12244 vex.r = 1;
12245 vex.v = 1;
12246 vex.register_specifier &= 0x7;
12247 }
12248
12249 /* The U bit. */
12250 if (!(*codep & 0x4))
12251 return &bad_opcode;
12252
12253 switch ((*codep & 0x3))
12254 {
12255 case 0:
12256 vex.prefix = 0;
12257 break;
12258 case 1:
12259 vex.prefix = DATA_PREFIX_OPCODE;
12260 break;
12261 case 2:
12262 vex.prefix = REPE_PREFIX_OPCODE;
12263 break;
12264 case 3:
12265 vex.prefix = REPNE_PREFIX_OPCODE;
12266 break;
12267 }
12268
12269 /* The third byte after 0x62. */
12270 codep++;
12271
12272 /* Remember the static rounding bits. */
12273 vex.ll = (*codep >> 5) & 3;
12274 vex.b = (*codep & 0x10) != 0;
12275
12276 vex.v = *codep & 0x8;
12277 vex.mask_register_specifier = *codep & 0x7;
12278 vex.zeroing = *codep & 0x80;
12279
12280 need_vex = 1;
12281 need_vex_reg = 1;
12282 codep++;
12283 vindex = *codep++;
12284 dp = &evex_table[vex_table_index][vindex];
12285 FETCH_DATA (info, codep + 1);
12286 modrm.mod = (*codep >> 6) & 3;
12287 modrm.reg = (*codep >> 3) & 7;
12288 modrm.rm = *codep & 7;
12289
12290 /* Set vector length. */
12291 if (modrm.mod == 3 && vex.b)
12292 vex.length = 512;
12293 else
12294 {
12295 switch (vex.ll)
12296 {
12297 case 0x0:
12298 vex.length = 128;
12299 break;
12300 case 0x1:
12301 vex.length = 256;
12302 break;
12303 case 0x2:
12304 vex.length = 512;
12305 break;
12306 default:
12307 return &bad_opcode;
12308 }
12309 }
12310 break;
12311
592d1631
L
12312 case 0:
12313 dp = &bad_opcode;
12314 break;
12315
b844680a 12316 default:
d34b5006 12317 abort ();
b844680a
L
12318 }
12319
12320 if (dp->name != NULL)
12321 return dp;
12322 else
8bb15339 12323 return get_valid_dis386 (dp, info);
b844680a
L
12324}
12325
dfc8cf43 12326static void
55cf16e1 12327get_sib (disassemble_info *info, int sizeflag)
dfc8cf43
L
12328{
12329 /* If modrm.mod == 3, operand must be register. */
12330 if (need_modrm
55cf16e1 12331 && ((sizeflag & AFLAG) || address_mode == mode_64bit)
dfc8cf43
L
12332 && modrm.mod != 3
12333 && modrm.rm == 4)
12334 {
12335 FETCH_DATA (info, codep + 2);
12336 sib.index = (codep [1] >> 3) & 7;
12337 sib.scale = (codep [1] >> 6) & 3;
12338 sib.base = codep [1] & 7;
12339 }
12340}
12341
e396998b 12342static int
26ca5450 12343print_insn (bfd_vma pc, disassemble_info *info)
252b5132 12344{
2da11e11 12345 const struct dis386 *dp;
252b5132 12346 int i;
ce518a5f 12347 char *op_txt[MAX_OPERANDS];
252b5132 12348 int needcomma;
e396998b
AM
12349 int sizeflag;
12350 const char *p;
252b5132 12351 struct dis_private priv;
f16cd0d5
L
12352 int prefix_length;
12353 int default_prefixes;
252b5132 12354
d7921315
L
12355 priv.orig_sizeflag = AFLAG | DFLAG;
12356 if ((info->mach & bfd_mach_i386_i386) != 0)
cb712a9e 12357 address_mode = mode_32bit;
2da11e11 12358 else if (info->mach == bfd_mach_i386_i8086)
d7921315
L
12359 {
12360 address_mode = mode_16bit;
12361 priv.orig_sizeflag = 0;
12362 }
2da11e11 12363 else
d7921315
L
12364 address_mode = mode_64bit;
12365
12366 if (intel_syntax == (char) -1)
12367 intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
e396998b
AM
12368
12369 for (p = info->disassembler_options; p != NULL; )
12370 {
0112cd26 12371 if (CONST_STRNEQ (p, "x86-64"))
e396998b 12372 {
cb712a9e 12373 address_mode = mode_64bit;
e396998b
AM
12374 priv.orig_sizeflag = AFLAG | DFLAG;
12375 }
0112cd26 12376 else if (CONST_STRNEQ (p, "i386"))
e396998b 12377 {
cb712a9e 12378 address_mode = mode_32bit;
e396998b
AM
12379 priv.orig_sizeflag = AFLAG | DFLAG;
12380 }
0112cd26 12381 else if (CONST_STRNEQ (p, "i8086"))
e396998b 12382 {
cb712a9e 12383 address_mode = mode_16bit;
e396998b
AM
12384 priv.orig_sizeflag = 0;
12385 }
0112cd26 12386 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
12387 {
12388 intel_syntax = 1;
9d141669
L
12389 if (CONST_STRNEQ (p + 5, "-mnemonic"))
12390 intel_mnemonic = 1;
e396998b 12391 }
0112cd26 12392 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
12393 {
12394 intel_syntax = 0;
9d141669
L
12395 if (CONST_STRNEQ (p + 3, "-mnemonic"))
12396 intel_mnemonic = 0;
e396998b 12397 }
0112cd26 12398 else if (CONST_STRNEQ (p, "addr"))
e396998b 12399 {
f59a29b9
L
12400 if (address_mode == mode_64bit)
12401 {
12402 if (p[4] == '3' && p[5] == '2')
12403 priv.orig_sizeflag &= ~AFLAG;
12404 else if (p[4] == '6' && p[5] == '4')
12405 priv.orig_sizeflag |= AFLAG;
12406 }
12407 else
12408 {
12409 if (p[4] == '1' && p[5] == '6')
12410 priv.orig_sizeflag &= ~AFLAG;
12411 else if (p[4] == '3' && p[5] == '2')
12412 priv.orig_sizeflag |= AFLAG;
12413 }
e396998b 12414 }
0112cd26 12415 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
12416 {
12417 if (p[4] == '1' && p[5] == '6')
12418 priv.orig_sizeflag &= ~DFLAG;
12419 else if (p[4] == '3' && p[5] == '2')
12420 priv.orig_sizeflag |= DFLAG;
12421 }
0112cd26 12422 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
12423 priv.orig_sizeflag |= SUFFIX_ALWAYS;
12424
12425 p = strchr (p, ',');
12426 if (p != NULL)
12427 p++;
12428 }
12429
12430 if (intel_syntax)
12431 {
12432 names64 = intel_names64;
12433 names32 = intel_names32;
12434 names16 = intel_names16;
12435 names8 = intel_names8;
12436 names8rex = intel_names8rex;
12437 names_seg = intel_names_seg;
b9733481 12438 names_mm = intel_names_mm;
7e8b059b 12439 names_bnd = intel_names_bnd;
b9733481
L
12440 names_xmm = intel_names_xmm;
12441 names_ymm = intel_names_ymm;
43234a1e 12442 names_zmm = intel_names_zmm;
db51cc60
L
12443 index64 = intel_index64;
12444 index32 = intel_index32;
43234a1e 12445 names_mask = intel_names_mask;
e396998b
AM
12446 index16 = intel_index16;
12447 open_char = '[';
12448 close_char = ']';
12449 separator_char = '+';
12450 scale_char = '*';
12451 }
12452 else
12453 {
12454 names64 = att_names64;
12455 names32 = att_names32;
12456 names16 = att_names16;
12457 names8 = att_names8;
12458 names8rex = att_names8rex;
12459 names_seg = att_names_seg;
b9733481 12460 names_mm = att_names_mm;
7e8b059b 12461 names_bnd = att_names_bnd;
b9733481
L
12462 names_xmm = att_names_xmm;
12463 names_ymm = att_names_ymm;
43234a1e 12464 names_zmm = att_names_zmm;
db51cc60
L
12465 index64 = att_index64;
12466 index32 = att_index32;
43234a1e 12467 names_mask = att_names_mask;
e396998b
AM
12468 index16 = att_index16;
12469 open_char = '(';
12470 close_char = ')';
12471 separator_char = ',';
12472 scale_char = ',';
12473 }
2da11e11 12474
4fe53c98 12475 /* The output looks better if we put 7 bytes on a line, since that
8a9036a4
L
12476 puts most long word instructions on a single line. Use 8 bytes
12477 for Intel L1OM. */
d7921315 12478 if ((info->mach & bfd_mach_l1om) != 0)
8a9036a4
L
12479 info->bytes_per_line = 8;
12480 else
12481 info->bytes_per_line = 7;
252b5132 12482
26ca5450 12483 info->private_data = &priv;
252b5132
RH
12484 priv.max_fetched = priv.the_buffer;
12485 priv.insn_start = pc;
252b5132
RH
12486
12487 obuf[0] = 0;
ce518a5f
L
12488 for (i = 0; i < MAX_OPERANDS; ++i)
12489 {
12490 op_out[i][0] = 0;
12491 op_index[i] = -1;
12492 }
252b5132
RH
12493
12494 the_info = info;
12495 start_pc = pc;
e396998b
AM
12496 start_codep = priv.the_buffer;
12497 codep = priv.the_buffer;
252b5132 12498
5076851f
ILT
12499 if (setjmp (priv.bailout) != 0)
12500 {
7d421014
ILT
12501 const char *name;
12502
5076851f 12503 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
12504 means we have an incomplete instruction of some sort. Just
12505 print the first byte as a prefix or a .byte pseudo-op. */
12506 if (codep > priv.the_buffer)
5076851f 12507 {
e396998b 12508 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
12509 if (name != NULL)
12510 (*info->fprintf_func) (info->stream, "%s", name);
12511 else
5076851f 12512 {
7d421014
ILT
12513 /* Just print the first byte as a .byte instruction. */
12514 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 12515 (unsigned int) priv.the_buffer[0]);
5076851f 12516 }
5076851f 12517
7d421014 12518 return 1;
5076851f
ILT
12519 }
12520
12521 return -1;
12522 }
12523
52b15da3 12524 obufp = obuf;
f16cd0d5
L
12525 sizeflag = priv.orig_sizeflag;
12526
12527 if (!ckprefix () || rex_used)
12528 {
12529 /* Too many prefixes or unused REX prefixes. */
12530 for (i = 0;
f6dd4781 12531 i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
f16cd0d5 12532 i++)
de882298 12533 (*info->fprintf_func) (info->stream, "%s%s",
6c067bbb 12534 i == 0 ? "" : " ",
f16cd0d5 12535 prefix_name (all_prefixes[i], sizeflag));
de882298 12536 return i;
f16cd0d5 12537 }
252b5132
RH
12538
12539 insn_codep = codep;
12540
12541 FETCH_DATA (info, codep + 1);
12542 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
12543
3e7d61b2 12544 if (((prefixes & PREFIX_FWAIT)
f16cd0d5 12545 && ((*codep < 0xd8) || (*codep > 0xdf))))
252b5132 12546 {
f16cd0d5 12547 (*info->fprintf_func) (info->stream, "fwait");
7d421014 12548 return 1;
252b5132
RH
12549 }
12550
252b5132
RH
12551 if (*codep == 0x0f)
12552 {
eec0f4ca 12553 unsigned char threebyte;
252b5132 12554 FETCH_DATA (info, codep + 2);
eec0f4ca
L
12555 threebyte = *++codep;
12556 dp = &dis386_twobyte[threebyte];
252b5132 12557 need_modrm = twobyte_has_modrm[*codep];
eec0f4ca 12558 codep++;
252b5132
RH
12559 }
12560 else
12561 {
6439fc28 12562 dp = &dis386[*codep];
252b5132 12563 need_modrm = onebyte_has_modrm[*codep];
eec0f4ca 12564 codep++;
252b5132 12565 }
246c51aa 12566
b844680a 12567 if ((prefixes & PREFIX_REPZ))
f16cd0d5 12568 used_prefixes |= PREFIX_REPZ;
b844680a 12569 if ((prefixes & PREFIX_REPNZ))
f16cd0d5 12570 used_prefixes |= PREFIX_REPNZ;
b844680a 12571 if ((prefixes & PREFIX_LOCK))
f16cd0d5 12572 used_prefixes |= PREFIX_LOCK;
c608c12e 12573
f16cd0d5 12574 default_prefixes = 0;
c608c12e
AM
12575 if (prefixes & PREFIX_ADDR)
12576 {
12577 sizeflag ^= AFLAG;
ce518a5f 12578 if (dp->op[2].bytemode != loop_jcxz_mode || intel_syntax)
3ffd33cf 12579 {
cb712a9e 12580 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
f16cd0d5 12581 all_prefixes[last_addr_prefix] = ADDR32_PREFIX;
3ffd33cf 12582 else
f16cd0d5
L
12583 all_prefixes[last_addr_prefix] = ADDR16_PREFIX;
12584 default_prefixes |= PREFIX_ADDR;
3ffd33cf
AM
12585 }
12586 }
12587
b844680a 12588 if ((prefixes & PREFIX_DATA))
3ffd33cf
AM
12589 {
12590 sizeflag ^= DFLAG;
ce518a5f
L
12591 if (dp->op[2].bytemode == cond_jump_mode
12592 && dp->op[0].bytemode == v_mode
6439fc28 12593 && !intel_syntax)
3ffd33cf
AM
12594 {
12595 if (sizeflag & DFLAG)
f16cd0d5 12596 all_prefixes[last_data_prefix] = DATA32_PREFIX;
3ffd33cf 12597 else
f16cd0d5
L
12598 all_prefixes[last_data_prefix] = DATA16_PREFIX;
12599 default_prefixes |= PREFIX_DATA;
12600 }
12601 else if (rex & REX_W)
12602 {
12603 /* REX_W will override PREFIX_DATA. */
12604 default_prefixes |= PREFIX_DATA;
3ffd33cf
AM
12605 }
12606 }
12607
8bb15339 12608 if (need_modrm)
252b5132
RH
12609 {
12610 FETCH_DATA (info, codep + 1);
7967e09e
L
12611 modrm.mod = (*codep >> 6) & 3;
12612 modrm.reg = (*codep >> 3) & 7;
12613 modrm.rm = *codep & 7;
252b5132
RH
12614 }
12615
42d5f9c6
MS
12616 need_vex = 0;
12617 need_vex_reg = 0;
12618 vex_w_done = 0;
43234a1e 12619 vex.evex = 0;
55b126d4 12620
ce518a5f 12621 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132 12622 {
55cf16e1 12623 get_sib (info, sizeflag);
252b5132
RH
12624 dofloat (sizeflag);
12625 }
12626 else
12627 {
8bb15339 12628 dp = get_valid_dis386 (dp, info);
b844680a 12629 if (dp != NULL && putop (dp->name, sizeflag) == 0)
6c067bbb 12630 {
55cf16e1 12631 get_sib (info, sizeflag);
ce518a5f
L
12632 for (i = 0; i < MAX_OPERANDS; ++i)
12633 {
246c51aa 12634 obufp = op_out[i];
ce518a5f
L
12635 op_ad = MAX_OPERANDS - 1 - i;
12636 if (dp->op[i].rtn)
12637 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
43234a1e
L
12638 /* For EVEX instruction after the last operand masking
12639 should be printed. */
12640 if (i == 0 && vex.evex)
12641 {
12642 /* Don't print {%k0}. */
12643 if (vex.mask_register_specifier)
12644 {
12645 oappend ("{");
12646 oappend (names_mask[vex.mask_register_specifier]);
12647 oappend ("}");
12648 }
12649 if (vex.zeroing)
12650 oappend ("{z}");
12651 }
ce518a5f 12652 }
6439fc28 12653 }
252b5132
RH
12654 }
12655
7d421014
ILT
12656 /* See if any prefixes were not used. If so, print the first one
12657 separately. If we don't do this, we'll wind up printing an
12658 instruction stream which does not precisely correspond to the
12659 bytes we are disassembling. */
f16cd0d5 12660 if ((prefixes & ~(used_prefixes | default_prefixes)) != 0)
7d421014 12661 {
f16cd0d5
L
12662 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
12663 if (all_prefixes[i])
12664 {
12665 const char *name;
12666 name = prefix_name (all_prefixes[i], priv.orig_sizeflag);
12667 if (name == NULL)
12668 name = INTERNAL_DISASSEMBLER_ERROR;
12669 (*info->fprintf_func) (info->stream, "%s", name);
12670 return 1;
12671 }
52b15da3 12672 }
7d421014 12673
d869730d 12674 /* Check if the REX prefix is used. */
e2e6193d 12675 if (rex_ignored == 0 && (rex ^ rex_used) == 0 && last_rex_prefix >= 0)
f16cd0d5
L
12676 all_prefixes[last_rex_prefix] = 0;
12677
5e6718e4 12678 /* Check if the SEG prefix is used. */
f16cd0d5
L
12679 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
12680 | PREFIX_FS | PREFIX_GS)) != 0
12681 && (used_prefixes
12682 & seg_prefix (all_prefixes[last_seg_prefix])) != 0)
12683 all_prefixes[last_seg_prefix] = 0;
12684
5e6718e4 12685 /* Check if the ADDR prefix is used. */
f16cd0d5
L
12686 if ((prefixes & PREFIX_ADDR) != 0
12687 && (used_prefixes & PREFIX_ADDR) != 0)
12688 all_prefixes[last_addr_prefix] = 0;
12689
5e6718e4 12690 /* Check if the DATA prefix is used. */
f16cd0d5
L
12691 if ((prefixes & PREFIX_DATA) != 0
12692 && (used_prefixes & PREFIX_DATA) != 0)
12693 all_prefixes[last_data_prefix] = 0;
12694
12695 prefix_length = 0;
f310f33d 12696 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
f16cd0d5
L
12697 if (all_prefixes[i])
12698 {
12699 const char *name;
12700 name = prefix_name (all_prefixes[i], sizeflag);
12701 if (name == NULL)
12702 abort ();
12703 prefix_length += strlen (name) + 1;
12704 (*info->fprintf_func) (info->stream, "%s ", name);
12705 }
b844680a 12706
f16cd0d5
L
12707 /* Check maximum code length. */
12708 if ((codep - start_codep) > MAX_CODE_LENGTH)
12709 {
12710 (*info->fprintf_func) (info->stream, "(bad)");
12711 return MAX_CODE_LENGTH;
12712 }
b844680a 12713
ea397f5b 12714 obufp = mnemonicendp;
f16cd0d5 12715 for (i = strlen (obuf) + prefix_length; i < 6; i++)
252b5132
RH
12716 oappend (" ");
12717 oappend (" ");
12718 (*info->fprintf_func) (info->stream, "%s", obuf);
12719
12720 /* The enter and bound instructions are printed with operands in the same
12721 order as the intel book; everything else is printed in reverse order. */
2da11e11 12722 if (intel_syntax || two_source_ops)
252b5132 12723 {
185b1163
L
12724 bfd_vma riprel;
12725
ce518a5f 12726 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 12727 op_txt[i] = op_out[i];
246c51aa 12728
ce518a5f
L
12729 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
12730 {
6c067bbb
RM
12731 op_ad = op_index[i];
12732 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
12733 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
12734 riprel = op_riprel[i];
12735 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
12736 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 12737 }
252b5132
RH
12738 }
12739 else
12740 {
ce518a5f 12741 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 12742 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
12743 }
12744
ce518a5f
L
12745 needcomma = 0;
12746 for (i = 0; i < MAX_OPERANDS; ++i)
12747 if (*op_txt[i])
12748 {
12749 if (needcomma)
12750 (*info->fprintf_func) (info->stream, ",");
12751 if (op_index[i] != -1 && !op_riprel[i])
12752 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
12753 else
12754 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
12755 needcomma = 1;
12756 }
050dfa73 12757
ce518a5f 12758 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
12759 if (op_index[i] != -1 && op_riprel[i])
12760 {
12761 (*info->fprintf_func) (info->stream, " # ");
12762 (*info->print_address_func) ((bfd_vma) (start_pc + codep - start_codep
12763 + op_address[op_index[i]]), info);
185b1163 12764 break;
52b15da3 12765 }
e396998b 12766 return codep - priv.the_buffer;
252b5132
RH
12767}
12768
6439fc28 12769static const char *float_mem[] = {
252b5132 12770 /* d8 */
7c52e0e8
L
12771 "fadd{s|}",
12772 "fmul{s|}",
12773 "fcom{s|}",
12774 "fcomp{s|}",
12775 "fsub{s|}",
12776 "fsubr{s|}",
12777 "fdiv{s|}",
12778 "fdivr{s|}",
db6eb5be 12779 /* d9 */
7c52e0e8 12780 "fld{s|}",
252b5132 12781 "(bad)",
7c52e0e8
L
12782 "fst{s|}",
12783 "fstp{s|}",
9306ca4a 12784 "fldenvIC",
252b5132 12785 "fldcw",
9306ca4a 12786 "fNstenvIC",
252b5132
RH
12787 "fNstcw",
12788 /* da */
7c52e0e8
L
12789 "fiadd{l|}",
12790 "fimul{l|}",
12791 "ficom{l|}",
12792 "ficomp{l|}",
12793 "fisub{l|}",
12794 "fisubr{l|}",
12795 "fidiv{l|}",
12796 "fidivr{l|}",
252b5132 12797 /* db */
7c52e0e8
L
12798 "fild{l|}",
12799 "fisttp{l|}",
12800 "fist{l|}",
12801 "fistp{l|}",
252b5132 12802 "(bad)",
6439fc28 12803 "fld{t||t|}",
252b5132 12804 "(bad)",
6439fc28 12805 "fstp{t||t|}",
252b5132 12806 /* dc */
7c52e0e8
L
12807 "fadd{l|}",
12808 "fmul{l|}",
12809 "fcom{l|}",
12810 "fcomp{l|}",
12811 "fsub{l|}",
12812 "fsubr{l|}",
12813 "fdiv{l|}",
12814 "fdivr{l|}",
252b5132 12815 /* dd */
7c52e0e8
L
12816 "fld{l|}",
12817 "fisttp{ll|}",
12818 "fst{l||}",
12819 "fstp{l|}",
9306ca4a 12820 "frstorIC",
252b5132 12821 "(bad)",
9306ca4a 12822 "fNsaveIC",
252b5132
RH
12823 "fNstsw",
12824 /* de */
12825 "fiadd",
12826 "fimul",
12827 "ficom",
12828 "ficomp",
12829 "fisub",
12830 "fisubr",
12831 "fidiv",
12832 "fidivr",
12833 /* df */
12834 "fild",
ca164297 12835 "fisttp",
252b5132
RH
12836 "fist",
12837 "fistp",
12838 "fbld",
7c52e0e8 12839 "fild{ll|}",
252b5132 12840 "fbstp",
7c52e0e8 12841 "fistp{ll|}",
1d9f512f
AM
12842};
12843
12844static const unsigned char float_mem_mode[] = {
12845 /* d8 */
12846 d_mode,
12847 d_mode,
12848 d_mode,
12849 d_mode,
12850 d_mode,
12851 d_mode,
12852 d_mode,
12853 d_mode,
12854 /* d9 */
12855 d_mode,
12856 0,
12857 d_mode,
12858 d_mode,
12859 0,
12860 w_mode,
12861 0,
12862 w_mode,
12863 /* da */
12864 d_mode,
12865 d_mode,
12866 d_mode,
12867 d_mode,
12868 d_mode,
12869 d_mode,
12870 d_mode,
12871 d_mode,
12872 /* db */
12873 d_mode,
12874 d_mode,
12875 d_mode,
12876 d_mode,
12877 0,
9306ca4a 12878 t_mode,
1d9f512f 12879 0,
9306ca4a 12880 t_mode,
1d9f512f
AM
12881 /* dc */
12882 q_mode,
12883 q_mode,
12884 q_mode,
12885 q_mode,
12886 q_mode,
12887 q_mode,
12888 q_mode,
12889 q_mode,
12890 /* dd */
12891 q_mode,
12892 q_mode,
12893 q_mode,
12894 q_mode,
12895 0,
12896 0,
12897 0,
12898 w_mode,
12899 /* de */
12900 w_mode,
12901 w_mode,
12902 w_mode,
12903 w_mode,
12904 w_mode,
12905 w_mode,
12906 w_mode,
12907 w_mode,
12908 /* df */
12909 w_mode,
12910 w_mode,
12911 w_mode,
12912 w_mode,
9306ca4a 12913 t_mode,
1d9f512f 12914 q_mode,
9306ca4a 12915 t_mode,
1d9f512f 12916 q_mode
252b5132
RH
12917};
12918
ce518a5f
L
12919#define ST { OP_ST, 0 }
12920#define STi { OP_STi, 0 }
252b5132 12921
4efba78c
L
12922#define FGRPd9_2 NULL, { { NULL, 0 } }
12923#define FGRPd9_4 NULL, { { NULL, 1 } }
12924#define FGRPd9_5 NULL, { { NULL, 2 } }
12925#define FGRPd9_6 NULL, { { NULL, 3 } }
12926#define FGRPd9_7 NULL, { { NULL, 4 } }
12927#define FGRPda_5 NULL, { { NULL, 5 } }
12928#define FGRPdb_4 NULL, { { NULL, 6 } }
12929#define FGRPde_3 NULL, { { NULL, 7 } }
12930#define FGRPdf_4 NULL, { { NULL, 8 } }
252b5132 12931
2da11e11 12932static const struct dis386 float_reg[][8] = {
252b5132
RH
12933 /* d8 */
12934 {
ce518a5f
L
12935 { "fadd", { ST, STi } },
12936 { "fmul", { ST, STi } },
12937 { "fcom", { STi } },
12938 { "fcomp", { STi } },
12939 { "fsub", { ST, STi } },
12940 { "fsubr", { ST, STi } },
12941 { "fdiv", { ST, STi } },
12942 { "fdivr", { ST, STi } },
252b5132
RH
12943 },
12944 /* d9 */
12945 {
ce518a5f
L
12946 { "fld", { STi } },
12947 { "fxch", { STi } },
252b5132 12948 { FGRPd9_2 },
592d1631 12949 { Bad_Opcode },
252b5132
RH
12950 { FGRPd9_4 },
12951 { FGRPd9_5 },
12952 { FGRPd9_6 },
12953 { FGRPd9_7 },
12954 },
12955 /* da */
12956 {
ce518a5f
L
12957 { "fcmovb", { ST, STi } },
12958 { "fcmove", { ST, STi } },
12959 { "fcmovbe",{ ST, STi } },
12960 { "fcmovu", { ST, STi } },
592d1631 12961 { Bad_Opcode },
252b5132 12962 { FGRPda_5 },
592d1631
L
12963 { Bad_Opcode },
12964 { Bad_Opcode },
252b5132
RH
12965 },
12966 /* db */
12967 {
ce518a5f
L
12968 { "fcmovnb",{ ST, STi } },
12969 { "fcmovne",{ ST, STi } },
12970 { "fcmovnbe",{ ST, STi } },
12971 { "fcmovnu",{ ST, STi } },
252b5132 12972 { FGRPdb_4 },
ce518a5f
L
12973 { "fucomi", { ST, STi } },
12974 { "fcomi", { ST, STi } },
592d1631 12975 { Bad_Opcode },
252b5132
RH
12976 },
12977 /* dc */
12978 {
ce518a5f
L
12979 { "fadd", { STi, ST } },
12980 { "fmul", { STi, ST } },
592d1631
L
12981 { Bad_Opcode },
12982 { Bad_Opcode },
9d141669
L
12983 { "fsub!M", { STi, ST } },
12984 { "fsubM", { STi, ST } },
12985 { "fdiv!M", { STi, ST } },
12986 { "fdivM", { STi, ST } },
252b5132
RH
12987 },
12988 /* dd */
12989 {
ce518a5f 12990 { "ffree", { STi } },
592d1631 12991 { Bad_Opcode },
ce518a5f
L
12992 { "fst", { STi } },
12993 { "fstp", { STi } },
12994 { "fucom", { STi } },
12995 { "fucomp", { STi } },
592d1631
L
12996 { Bad_Opcode },
12997 { Bad_Opcode },
252b5132
RH
12998 },
12999 /* de */
13000 {
ce518a5f
L
13001 { "faddp", { STi, ST } },
13002 { "fmulp", { STi, ST } },
592d1631 13003 { Bad_Opcode },
252b5132 13004 { FGRPde_3 },
9d141669
L
13005 { "fsub!Mp", { STi, ST } },
13006 { "fsubMp", { STi, ST } },
13007 { "fdiv!Mp", { STi, ST } },
13008 { "fdivMp", { STi, ST } },
252b5132
RH
13009 },
13010 /* df */
13011 {
ce518a5f 13012 { "ffreep", { STi } },
592d1631
L
13013 { Bad_Opcode },
13014 { Bad_Opcode },
13015 { Bad_Opcode },
252b5132 13016 { FGRPdf_4 },
ce518a5f
L
13017 { "fucomip", { ST, STi } },
13018 { "fcomip", { ST, STi } },
592d1631 13019 { Bad_Opcode },
252b5132
RH
13020 },
13021};
13022
252b5132
RH
13023static char *fgrps[][8] = {
13024 /* d9_2 0 */
13025 {
13026 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13027 },
13028
13029 /* d9_4 1 */
13030 {
13031 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
13032 },
13033
13034 /* d9_5 2 */
13035 {
13036 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
13037 },
13038
13039 /* d9_6 3 */
13040 {
13041 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
13042 },
13043
13044 /* d9_7 4 */
13045 {
13046 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
13047 },
13048
13049 /* da_5 5 */
13050 {
13051 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13052 },
13053
13054 /* db_4 6 */
13055 {
309d3373
JB
13056 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
13057 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
252b5132
RH
13058 },
13059
13060 /* de_3 7 */
13061 {
13062 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13063 },
13064
13065 /* df_4 8 */
13066 {
13067 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13068 },
13069};
13070
b6169b20
L
13071static void
13072swap_operand (void)
13073{
13074 mnemonicendp[0] = '.';
13075 mnemonicendp[1] = 's';
13076 mnemonicendp += 2;
13077}
13078
b844680a
L
13079static void
13080OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
13081 int sizeflag ATTRIBUTE_UNUSED)
13082{
13083 /* Skip mod/rm byte. */
13084 MODRM_CHECK;
13085 codep++;
13086}
13087
252b5132 13088static void
26ca5450 13089dofloat (int sizeflag)
252b5132 13090{
2da11e11 13091 const struct dis386 *dp;
252b5132
RH
13092 unsigned char floatop;
13093
13094 floatop = codep[-1];
13095
7967e09e 13096 if (modrm.mod != 3)
252b5132 13097 {
7967e09e 13098 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
13099
13100 putop (float_mem[fp_indx], sizeflag);
ce518a5f 13101 obufp = op_out[0];
6e50d963 13102 op_ad = 2;
1d9f512f 13103 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
13104 return;
13105 }
6608db57 13106 /* Skip mod/rm byte. */
4bba6815 13107 MODRM_CHECK;
252b5132
RH
13108 codep++;
13109
7967e09e 13110 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
13111 if (dp->name == NULL)
13112 {
7967e09e 13113 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 13114
6608db57 13115 /* Instruction fnstsw is only one with strange arg. */
252b5132 13116 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 13117 strcpy (op_out[0], names16[0]);
252b5132
RH
13118 }
13119 else
13120 {
13121 putop (dp->name, sizeflag);
13122
ce518a5f 13123 obufp = op_out[0];
6e50d963 13124 op_ad = 2;
ce518a5f
L
13125 if (dp->op[0].rtn)
13126 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 13127
ce518a5f 13128 obufp = op_out[1];
6e50d963 13129 op_ad = 1;
ce518a5f
L
13130 if (dp->op[1].rtn)
13131 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
13132 }
13133}
13134
9ce09ba2
RM
13135/* Like oappend (below), but S is a string starting with '%'.
13136 In Intel syntax, the '%' is elided. */
13137static void
13138oappend_maybe_intel (const char *s)
13139{
13140 oappend (s + intel_syntax);
13141}
13142
252b5132 13143static void
26ca5450 13144OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13145{
9ce09ba2 13146 oappend_maybe_intel ("%st");
252b5132
RH
13147}
13148
252b5132 13149static void
26ca5450 13150OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13151{
7967e09e 13152 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
9ce09ba2 13153 oappend_maybe_intel (scratchbuf);
252b5132
RH
13154}
13155
6608db57 13156/* Capital letters in template are macros. */
6439fc28 13157static int
d3ce72d0 13158putop (const char *in_template, int sizeflag)
252b5132 13159{
2da11e11 13160 const char *p;
9306ca4a 13161 int alt = 0;
9d141669 13162 int cond = 1;
98b528ac
L
13163 unsigned int l = 0, len = 1;
13164 char last[4];
13165
13166#define SAVE_LAST(c) \
13167 if (l < len && l < sizeof (last)) \
13168 last[l++] = c; \
13169 else \
13170 abort ();
252b5132 13171
d3ce72d0 13172 for (p = in_template; *p; p++)
252b5132
RH
13173 {
13174 switch (*p)
13175 {
13176 default:
13177 *obufp++ = *p;
13178 break;
98b528ac
L
13179 case '%':
13180 len++;
13181 break;
9d141669
L
13182 case '!':
13183 cond = 0;
13184 break;
6439fc28
AM
13185 case '{':
13186 alt = 0;
13187 if (intel_syntax)
6439fc28
AM
13188 {
13189 while (*++p != '|')
7c52e0e8
L
13190 if (*p == '}' || *p == '\0')
13191 abort ();
6439fc28 13192 }
9306ca4a
JB
13193 /* Fall through. */
13194 case 'I':
13195 alt = 1;
13196 continue;
6439fc28
AM
13197 case '|':
13198 while (*++p != '}')
13199 {
13200 if (*p == '\0')
13201 abort ();
13202 }
13203 break;
13204 case '}':
13205 break;
252b5132 13206 case 'A':
db6eb5be
AM
13207 if (intel_syntax)
13208 break;
7967e09e 13209 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
13210 *obufp++ = 'b';
13211 break;
13212 case 'B':
4b06377f
L
13213 if (l == 0 && len == 1)
13214 {
13215case_B:
13216 if (intel_syntax)
13217 break;
13218 if (sizeflag & SUFFIX_ALWAYS)
13219 *obufp++ = 'b';
13220 }
13221 else
13222 {
13223 if (l != 1
13224 || len != 2
13225 || last[0] != 'L')
13226 {
13227 SAVE_LAST (*p);
13228 break;
13229 }
13230
13231 if (address_mode == mode_64bit
13232 && !(prefixes & PREFIX_ADDR))
13233 {
13234 *obufp++ = 'a';
13235 *obufp++ = 'b';
13236 *obufp++ = 's';
13237 }
13238
13239 goto case_B;
13240 }
252b5132 13241 break;
9306ca4a
JB
13242 case 'C':
13243 if (intel_syntax && !alt)
13244 break;
13245 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
13246 {
13247 if (sizeflag & DFLAG)
13248 *obufp++ = intel_syntax ? 'd' : 'l';
13249 else
13250 *obufp++ = intel_syntax ? 'w' : 's';
13251 used_prefixes |= (prefixes & PREFIX_DATA);
13252 }
13253 break;
ed7841b3
JB
13254 case 'D':
13255 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
13256 break;
161a04f6 13257 USED_REX (REX_W);
7967e09e 13258 if (modrm.mod == 3)
ed7841b3 13259 {
161a04f6 13260 if (rex & REX_W)
ed7841b3 13261 *obufp++ = 'q';
ed7841b3 13262 else
f16cd0d5
L
13263 {
13264 if (sizeflag & DFLAG)
13265 *obufp++ = intel_syntax ? 'd' : 'l';
13266 else
13267 *obufp++ = 'w';
13268 used_prefixes |= (prefixes & PREFIX_DATA);
13269 }
ed7841b3
JB
13270 }
13271 else
13272 *obufp++ = 'w';
13273 break;
252b5132 13274 case 'E': /* For jcxz/jecxz */
cb712a9e 13275 if (address_mode == mode_64bit)
c1a64871
JH
13276 {
13277 if (sizeflag & AFLAG)
13278 *obufp++ = 'r';
13279 else
13280 *obufp++ = 'e';
13281 }
13282 else
13283 if (sizeflag & AFLAG)
13284 *obufp++ = 'e';
3ffd33cf
AM
13285 used_prefixes |= (prefixes & PREFIX_ADDR);
13286 break;
13287 case 'F':
db6eb5be
AM
13288 if (intel_syntax)
13289 break;
e396998b 13290 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
13291 {
13292 if (sizeflag & AFLAG)
cb712a9e 13293 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 13294 else
cb712a9e 13295 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
13296 used_prefixes |= (prefixes & PREFIX_ADDR);
13297 }
252b5132 13298 break;
52fd6d94
JB
13299 case 'G':
13300 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
13301 break;
161a04f6 13302 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
13303 *obufp++ = 'l';
13304 else
13305 *obufp++ = 'w';
161a04f6 13306 if (!(rex & REX_W))
52fd6d94
JB
13307 used_prefixes |= (prefixes & PREFIX_DATA);
13308 break;
5dd0794d 13309 case 'H':
db6eb5be
AM
13310 if (intel_syntax)
13311 break;
5dd0794d
AM
13312 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
13313 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
13314 {
13315 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
13316 *obufp++ = ',';
13317 *obufp++ = 'p';
13318 if (prefixes & PREFIX_DS)
13319 *obufp++ = 't';
13320 else
13321 *obufp++ = 'n';
13322 }
13323 break;
9306ca4a
JB
13324 case 'J':
13325 if (intel_syntax)
13326 break;
13327 *obufp++ = 'l';
13328 break;
42903f7f
L
13329 case 'K':
13330 USED_REX (REX_W);
13331 if (rex & REX_W)
13332 *obufp++ = 'q';
13333 else
13334 *obufp++ = 'd';
13335 break;
6dd5059a
L
13336 case 'Z':
13337 if (intel_syntax)
13338 break;
13339 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
13340 {
13341 *obufp++ = 'q';
13342 break;
13343 }
13344 /* Fall through. */
98b528ac 13345 goto case_L;
252b5132 13346 case 'L':
98b528ac
L
13347 if (l != 0 || len != 1)
13348 {
13349 SAVE_LAST (*p);
13350 break;
13351 }
13352case_L:
db6eb5be
AM
13353 if (intel_syntax)
13354 break;
252b5132
RH
13355 if (sizeflag & SUFFIX_ALWAYS)
13356 *obufp++ = 'l';
252b5132 13357 break;
9d141669
L
13358 case 'M':
13359 if (intel_mnemonic != cond)
13360 *obufp++ = 'r';
13361 break;
252b5132
RH
13362 case 'N':
13363 if ((prefixes & PREFIX_FWAIT) == 0)
13364 *obufp++ = 'n';
7d421014
ILT
13365 else
13366 used_prefixes |= PREFIX_FWAIT;
252b5132 13367 break;
52b15da3 13368 case 'O':
161a04f6
L
13369 USED_REX (REX_W);
13370 if (rex & REX_W)
6439fc28 13371 *obufp++ = 'o';
a35ca55a
JB
13372 else if (intel_syntax && (sizeflag & DFLAG))
13373 *obufp++ = 'q';
52b15da3
JH
13374 else
13375 *obufp++ = 'd';
161a04f6 13376 if (!(rex & REX_W))
a35ca55a 13377 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 13378 break;
6439fc28 13379 case 'T':
d9e3625e
L
13380 if (!intel_syntax
13381 && address_mode == mode_64bit
7bb15c6f 13382 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
13383 {
13384 *obufp++ = 'q';
13385 break;
13386 }
6608db57 13387 /* Fall through. */
252b5132 13388 case 'P':
db6eb5be 13389 if (intel_syntax)
d9e3625e
L
13390 {
13391 if ((rex & REX_W) == 0
13392 && (prefixes & PREFIX_DATA))
13393 {
13394 if ((sizeflag & DFLAG) == 0)
13395 *obufp++ = 'w';
13396 used_prefixes |= (prefixes & PREFIX_DATA);
13397 }
13398 break;
13399 }
252b5132 13400 if ((prefixes & PREFIX_DATA)
161a04f6 13401 || (rex & REX_W)
e396998b 13402 || (sizeflag & SUFFIX_ALWAYS))
252b5132 13403 {
161a04f6
L
13404 USED_REX (REX_W);
13405 if (rex & REX_W)
52b15da3 13406 *obufp++ = 'q';
c2419411 13407 else
52b15da3
JH
13408 {
13409 if (sizeflag & DFLAG)
13410 *obufp++ = 'l';
13411 else
13412 *obufp++ = 'w';
f16cd0d5 13413 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 13414 }
252b5132
RH
13415 }
13416 break;
6439fc28 13417 case 'U':
db6eb5be
AM
13418 if (intel_syntax)
13419 break;
7bb15c6f 13420 if (address_mode == mode_64bit
6c067bbb 13421 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28 13422 {
7967e09e 13423 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 13424 *obufp++ = 'q';
6439fc28
AM
13425 break;
13426 }
6608db57 13427 /* Fall through. */
98b528ac 13428 goto case_Q;
252b5132 13429 case 'Q':
98b528ac 13430 if (l == 0 && len == 1)
252b5132 13431 {
98b528ac
L
13432case_Q:
13433 if (intel_syntax && !alt)
13434 break;
13435 USED_REX (REX_W);
13436 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 13437 {
98b528ac
L
13438 if (rex & REX_W)
13439 *obufp++ = 'q';
52b15da3 13440 else
98b528ac
L
13441 {
13442 if (sizeflag & DFLAG)
13443 *obufp++ = intel_syntax ? 'd' : 'l';
13444 else
13445 *obufp++ = 'w';
f16cd0d5 13446 used_prefixes |= (prefixes & PREFIX_DATA);
98b528ac 13447 }
52b15da3 13448 }
98b528ac
L
13449 }
13450 else
13451 {
13452 if (l != 1 || len != 2 || last[0] != 'L')
13453 {
13454 SAVE_LAST (*p);
13455 break;
13456 }
13457 if (intel_syntax
13458 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
13459 break;
13460 if ((rex & REX_W))
13461 {
13462 USED_REX (REX_W);
13463 *obufp++ = 'q';
13464 }
13465 else
13466 *obufp++ = 'l';
252b5132
RH
13467 }
13468 break;
13469 case 'R':
161a04f6
L
13470 USED_REX (REX_W);
13471 if (rex & REX_W)
a35ca55a
JB
13472 *obufp++ = 'q';
13473 else if (sizeflag & DFLAG)
c608c12e 13474 {
a35ca55a 13475 if (intel_syntax)
c608c12e 13476 *obufp++ = 'd';
c608c12e 13477 else
a35ca55a 13478 *obufp++ = 'l';
c608c12e 13479 }
252b5132 13480 else
a35ca55a
JB
13481 *obufp++ = 'w';
13482 if (intel_syntax && !p[1]
161a04f6 13483 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 13484 *obufp++ = 'e';
161a04f6 13485 if (!(rex & REX_W))
52b15da3 13486 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 13487 break;
1a114b12 13488 case 'V':
4b06377f 13489 if (l == 0 && len == 1)
1a114b12 13490 {
4b06377f
L
13491 if (intel_syntax)
13492 break;
7bb15c6f 13493 if (address_mode == mode_64bit
6c067bbb 13494 && ((sizeflag & DFLAG) || (rex & REX_W)))
4b06377f
L
13495 {
13496 if (sizeflag & SUFFIX_ALWAYS)
13497 *obufp++ = 'q';
13498 break;
13499 }
13500 }
13501 else
13502 {
13503 if (l != 1
13504 || len != 2
13505 || last[0] != 'L')
13506 {
13507 SAVE_LAST (*p);
13508 break;
13509 }
13510
13511 if (rex & REX_W)
13512 {
13513 *obufp++ = 'a';
13514 *obufp++ = 'b';
13515 *obufp++ = 's';
13516 }
1a114b12
JB
13517 }
13518 /* Fall through. */
4b06377f 13519 goto case_S;
252b5132 13520 case 'S':
4b06377f 13521 if (l == 0 && len == 1)
252b5132 13522 {
4b06377f
L
13523case_S:
13524 if (intel_syntax)
13525 break;
13526 if (sizeflag & SUFFIX_ALWAYS)
52b15da3 13527 {
4b06377f
L
13528 if (rex & REX_W)
13529 *obufp++ = 'q';
52b15da3 13530 else
4b06377f
L
13531 {
13532 if (sizeflag & DFLAG)
13533 *obufp++ = 'l';
13534 else
13535 *obufp++ = 'w';
13536 used_prefixes |= (prefixes & PREFIX_DATA);
13537 }
13538 }
13539 }
13540 else
13541 {
13542 if (l != 1
13543 || len != 2
13544 || last[0] != 'L')
13545 {
13546 SAVE_LAST (*p);
13547 break;
52b15da3 13548 }
4b06377f
L
13549
13550 if (address_mode == mode_64bit
13551 && !(prefixes & PREFIX_ADDR))
13552 {
13553 *obufp++ = 'a';
13554 *obufp++ = 'b';
13555 *obufp++ = 's';
13556 }
13557
13558 goto case_S;
252b5132 13559 }
252b5132 13560 break;
041bd2e0 13561 case 'X':
c0f3af97
L
13562 if (l != 0 || len != 1)
13563 {
13564 SAVE_LAST (*p);
13565 break;
13566 }
13567 if (need_vex && vex.prefix)
13568 {
13569 if (vex.prefix == DATA_PREFIX_OPCODE)
13570 *obufp++ = 'd';
13571 else
13572 *obufp++ = 's';
13573 }
041bd2e0 13574 else
f16cd0d5
L
13575 {
13576 if (prefixes & PREFIX_DATA)
13577 *obufp++ = 'd';
13578 else
13579 *obufp++ = 's';
13580 used_prefixes |= (prefixes & PREFIX_DATA);
13581 }
041bd2e0 13582 break;
76f227a5 13583 case 'Y':
c0f3af97 13584 if (l == 0 && len == 1)
76f227a5 13585 {
c0f3af97
L
13586 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
13587 break;
13588 if (rex & REX_W)
13589 {
13590 USED_REX (REX_W);
13591 *obufp++ = 'q';
13592 }
13593 break;
13594 }
13595 else
13596 {
13597 if (l != 1 || len != 2 || last[0] != 'X')
13598 {
13599 SAVE_LAST (*p);
13600 break;
13601 }
13602 if (!need_vex)
13603 abort ();
13604 if (intel_syntax
13605 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
13606 break;
13607 switch (vex.length)
13608 {
13609 case 128:
13610 *obufp++ = 'x';
13611 break;
13612 case 256:
13613 *obufp++ = 'y';
13614 break;
13615 default:
13616 abort ();
13617 }
76f227a5
JH
13618 }
13619 break;
252b5132 13620 case 'W':
0bfee649 13621 if (l == 0 && len == 1)
a35ca55a 13622 {
0bfee649
L
13623 /* operand size flag for cwtl, cbtw */
13624 USED_REX (REX_W);
13625 if (rex & REX_W)
13626 {
13627 if (intel_syntax)
13628 *obufp++ = 'd';
13629 else
13630 *obufp++ = 'l';
13631 }
13632 else if (sizeflag & DFLAG)
13633 *obufp++ = 'w';
a35ca55a 13634 else
0bfee649
L
13635 *obufp++ = 'b';
13636 if (!(rex & REX_W))
13637 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 13638 }
252b5132 13639 else
0bfee649 13640 {
6c30d220
L
13641 if (l != 1
13642 || len != 2
13643 || (last[0] != 'X'
13644 && last[0] != 'L'))
0bfee649
L
13645 {
13646 SAVE_LAST (*p);
13647 break;
13648 }
13649 if (!need_vex)
13650 abort ();
6c30d220
L
13651 if (last[0] == 'X')
13652 *obufp++ = vex.w ? 'd': 's';
13653 else
13654 *obufp++ = vex.w ? 'q': 'd';
0bfee649 13655 }
252b5132
RH
13656 break;
13657 }
9306ca4a 13658 alt = 0;
252b5132
RH
13659 }
13660 *obufp = 0;
ea397f5b 13661 mnemonicendp = obufp;
6439fc28 13662 return 0;
252b5132
RH
13663}
13664
13665static void
26ca5450 13666oappend (const char *s)
252b5132 13667{
ea397f5b 13668 obufp = stpcpy (obufp, s);
252b5132
RH
13669}
13670
13671static void
26ca5450 13672append_seg (void)
252b5132
RH
13673{
13674 if (prefixes & PREFIX_CS)
7d421014 13675 {
7d421014 13676 used_prefixes |= PREFIX_CS;
9ce09ba2 13677 oappend_maybe_intel ("%cs:");
7d421014 13678 }
252b5132 13679 if (prefixes & PREFIX_DS)
7d421014 13680 {
7d421014 13681 used_prefixes |= PREFIX_DS;
9ce09ba2 13682 oappend_maybe_intel ("%ds:");
7d421014 13683 }
252b5132 13684 if (prefixes & PREFIX_SS)
7d421014 13685 {
7d421014 13686 used_prefixes |= PREFIX_SS;
9ce09ba2 13687 oappend_maybe_intel ("%ss:");
7d421014 13688 }
252b5132 13689 if (prefixes & PREFIX_ES)
7d421014 13690 {
7d421014 13691 used_prefixes |= PREFIX_ES;
9ce09ba2 13692 oappend_maybe_intel ("%es:");
7d421014 13693 }
252b5132 13694 if (prefixes & PREFIX_FS)
7d421014 13695 {
7d421014 13696 used_prefixes |= PREFIX_FS;
9ce09ba2 13697 oappend_maybe_intel ("%fs:");
7d421014 13698 }
252b5132 13699 if (prefixes & PREFIX_GS)
7d421014 13700 {
7d421014 13701 used_prefixes |= PREFIX_GS;
9ce09ba2 13702 oappend_maybe_intel ("%gs:");
7d421014 13703 }
252b5132
RH
13704}
13705
13706static void
26ca5450 13707OP_indirE (int bytemode, int sizeflag)
252b5132
RH
13708{
13709 if (!intel_syntax)
13710 oappend ("*");
13711 OP_E (bytemode, sizeflag);
13712}
13713
52b15da3 13714static void
26ca5450 13715print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 13716{
cb712a9e 13717 if (address_mode == mode_64bit)
52b15da3
JH
13718 {
13719 if (hex)
13720 {
13721 char tmp[30];
13722 int i;
13723 buf[0] = '0';
13724 buf[1] = 'x';
13725 sprintf_vma (tmp, disp);
6608db57 13726 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
13727 strcpy (buf + 2, tmp + i);
13728 }
13729 else
13730 {
13731 bfd_signed_vma v = disp;
13732 char tmp[30];
13733 int i;
13734 if (v < 0)
13735 {
13736 *(buf++) = '-';
13737 v = -disp;
6608db57 13738 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
13739 if (v < 0)
13740 {
13741 strcpy (buf, "9223372036854775808");
13742 return;
13743 }
13744 }
13745 if (!v)
13746 {
13747 strcpy (buf, "0");
13748 return;
13749 }
13750
13751 i = 0;
13752 tmp[29] = 0;
13753 while (v)
13754 {
6608db57 13755 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
13756 v /= 10;
13757 i++;
13758 }
13759 strcpy (buf, tmp + 29 - i);
13760 }
13761 }
13762 else
13763 {
13764 if (hex)
13765 sprintf (buf, "0x%x", (unsigned int) disp);
13766 else
13767 sprintf (buf, "%d", (int) disp);
13768 }
13769}
13770
5d669648
L
13771/* Put DISP in BUF as signed hex number. */
13772
13773static void
13774print_displacement (char *buf, bfd_vma disp)
13775{
13776 bfd_signed_vma val = disp;
13777 char tmp[30];
13778 int i, j = 0;
13779
13780 if (val < 0)
13781 {
13782 buf[j++] = '-';
13783 val = -disp;
13784
13785 /* Check for possible overflow. */
13786 if (val < 0)
13787 {
13788 switch (address_mode)
13789 {
13790 case mode_64bit:
13791 strcpy (buf + j, "0x8000000000000000");
13792 break;
13793 case mode_32bit:
13794 strcpy (buf + j, "0x80000000");
13795 break;
13796 case mode_16bit:
13797 strcpy (buf + j, "0x8000");
13798 break;
13799 }
13800 return;
13801 }
13802 }
13803
13804 buf[j++] = '0';
13805 buf[j++] = 'x';
13806
0af1713e 13807 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
13808 for (i = 0; tmp[i] == '0'; i++)
13809 continue;
13810 if (tmp[i] == '\0')
13811 i--;
13812 strcpy (buf + j, tmp + i);
13813}
13814
3f31e633
JB
13815static void
13816intel_operand_size (int bytemode, int sizeflag)
13817{
43234a1e
L
13818 if (vex.evex
13819 && vex.b
13820 && (bytemode == x_mode
13821 || bytemode == evex_half_bcst_xmmq_mode))
13822 {
13823 if (vex.w)
13824 oappend ("QWORD PTR ");
13825 else
13826 oappend ("DWORD PTR ");
13827 return;
13828 }
3f31e633
JB
13829 switch (bytemode)
13830 {
13831 case b_mode:
b6169b20 13832 case b_swap_mode:
42903f7f 13833 case dqb_mode:
3f31e633
JB
13834 oappend ("BYTE PTR ");
13835 break;
13836 case w_mode:
13837 case dqw_mode:
13838 oappend ("WORD PTR ");
13839 break;
1a114b12 13840 case stack_v_mode:
7bb15c6f 13841 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
3f31e633
JB
13842 {
13843 oappend ("QWORD PTR ");
3f31e633
JB
13844 break;
13845 }
13846 /* FALLTHRU */
13847 case v_mode:
b6169b20 13848 case v_swap_mode:
3f31e633 13849 case dq_mode:
161a04f6
L
13850 USED_REX (REX_W);
13851 if (rex & REX_W)
3f31e633 13852 oappend ("QWORD PTR ");
3f31e633 13853 else
f16cd0d5
L
13854 {
13855 if ((sizeflag & DFLAG) || bytemode == dq_mode)
13856 oappend ("DWORD PTR ");
13857 else
13858 oappend ("WORD PTR ");
13859 used_prefixes |= (prefixes & PREFIX_DATA);
13860 }
3f31e633 13861 break;
52fd6d94 13862 case z_mode:
161a04f6 13863 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
13864 *obufp++ = 'D';
13865 oappend ("WORD PTR ");
161a04f6 13866 if (!(rex & REX_W))
52fd6d94
JB
13867 used_prefixes |= (prefixes & PREFIX_DATA);
13868 break;
34b772a6
JB
13869 case a_mode:
13870 if (sizeflag & DFLAG)
13871 oappend ("QWORD PTR ");
13872 else
13873 oappend ("DWORD PTR ");
13874 used_prefixes |= (prefixes & PREFIX_DATA);
13875 break;
3f31e633 13876 case d_mode:
539f890d
L
13877 case d_scalar_mode:
13878 case d_scalar_swap_mode:
fa99fab2 13879 case d_swap_mode:
42903f7f 13880 case dqd_mode:
3f31e633
JB
13881 oappend ("DWORD PTR ");
13882 break;
13883 case q_mode:
539f890d
L
13884 case q_scalar_mode:
13885 case q_scalar_swap_mode:
b6169b20 13886 case q_swap_mode:
3f31e633
JB
13887 oappend ("QWORD PTR ");
13888 break;
13889 case m_mode:
cb712a9e 13890 if (address_mode == mode_64bit)
3f31e633
JB
13891 oappend ("QWORD PTR ");
13892 else
13893 oappend ("DWORD PTR ");
13894 break;
13895 case f_mode:
13896 if (sizeflag & DFLAG)
13897 oappend ("FWORD PTR ");
13898 else
13899 oappend ("DWORD PTR ");
13900 used_prefixes |= (prefixes & PREFIX_DATA);
13901 break;
13902 case t_mode:
13903 oappend ("TBYTE PTR ");
13904 break;
13905 case x_mode:
b6169b20 13906 case x_swap_mode:
43234a1e
L
13907 case evex_x_gscat_mode:
13908 case evex_x_nobcst_mode:
c0f3af97
L
13909 if (need_vex)
13910 {
13911 switch (vex.length)
13912 {
13913 case 128:
13914 oappend ("XMMWORD PTR ");
13915 break;
13916 case 256:
13917 oappend ("YMMWORD PTR ");
13918 break;
43234a1e
L
13919 case 512:
13920 oappend ("ZMMWORD PTR ");
13921 break;
c0f3af97
L
13922 default:
13923 abort ();
13924 }
13925 }
13926 else
13927 oappend ("XMMWORD PTR ");
13928 break;
13929 case xmm_mode:
3f31e633
JB
13930 oappend ("XMMWORD PTR ");
13931 break;
43234a1e
L
13932 case ymm_mode:
13933 oappend ("YMMWORD PTR ");
13934 break;
c0f3af97 13935 case xmmq_mode:
43234a1e 13936 case evex_half_bcst_xmmq_mode:
c0f3af97
L
13937 if (!need_vex)
13938 abort ();
13939
13940 switch (vex.length)
13941 {
13942 case 128:
13943 oappend ("QWORD PTR ");
13944 break;
13945 case 256:
13946 oappend ("XMMWORD PTR ");
13947 break;
43234a1e
L
13948 case 512:
13949 oappend ("YMMWORD PTR ");
13950 break;
c0f3af97
L
13951 default:
13952 abort ();
13953 }
13954 break;
6c30d220
L
13955 case xmm_mb_mode:
13956 if (!need_vex)
13957 abort ();
13958
13959 switch (vex.length)
13960 {
13961 case 128:
13962 case 256:
43234a1e 13963 case 512:
6c30d220
L
13964 oappend ("BYTE PTR ");
13965 break;
13966 default:
13967 abort ();
13968 }
13969 break;
13970 case xmm_mw_mode:
13971 if (!need_vex)
13972 abort ();
13973
13974 switch (vex.length)
13975 {
13976 case 128:
13977 case 256:
43234a1e 13978 case 512:
6c30d220
L
13979 oappend ("WORD PTR ");
13980 break;
13981 default:
13982 abort ();
13983 }
13984 break;
13985 case xmm_md_mode:
13986 if (!need_vex)
13987 abort ();
13988
13989 switch (vex.length)
13990 {
13991 case 128:
13992 case 256:
43234a1e 13993 case 512:
6c30d220
L
13994 oappend ("DWORD PTR ");
13995 break;
13996 default:
13997 abort ();
13998 }
13999 break;
14000 case xmm_mq_mode:
14001 if (!need_vex)
14002 abort ();
14003
14004 switch (vex.length)
14005 {
14006 case 128:
14007 case 256:
43234a1e 14008 case 512:
6c30d220
L
14009 oappend ("QWORD PTR ");
14010 break;
14011 default:
14012 abort ();
14013 }
14014 break;
14015 case xmmdw_mode:
14016 if (!need_vex)
14017 abort ();
14018
14019 switch (vex.length)
14020 {
14021 case 128:
14022 oappend ("WORD PTR ");
14023 break;
14024 case 256:
14025 oappend ("DWORD PTR ");
14026 break;
43234a1e
L
14027 case 512:
14028 oappend ("QWORD PTR ");
14029 break;
6c30d220
L
14030 default:
14031 abort ();
14032 }
14033 break;
14034 case xmmqd_mode:
14035 if (!need_vex)
14036 abort ();
14037
14038 switch (vex.length)
14039 {
14040 case 128:
14041 oappend ("DWORD PTR ");
14042 break;
14043 case 256:
14044 oappend ("QWORD PTR ");
14045 break;
43234a1e
L
14046 case 512:
14047 oappend ("XMMWORD PTR ");
14048 break;
6c30d220
L
14049 default:
14050 abort ();
14051 }
14052 break;
c0f3af97
L
14053 case ymmq_mode:
14054 if (!need_vex)
14055 abort ();
14056
14057 switch (vex.length)
14058 {
14059 case 128:
14060 oappend ("QWORD PTR ");
14061 break;
14062 case 256:
14063 oappend ("YMMWORD PTR ");
14064 break;
43234a1e
L
14065 case 512:
14066 oappend ("ZMMWORD PTR ");
14067 break;
c0f3af97
L
14068 default:
14069 abort ();
14070 }
14071 break;
6c30d220
L
14072 case ymmxmm_mode:
14073 if (!need_vex)
14074 abort ();
14075
14076 switch (vex.length)
14077 {
14078 case 128:
14079 case 256:
14080 oappend ("XMMWORD PTR ");
14081 break;
14082 default:
14083 abort ();
14084 }
14085 break;
fb9c77c7
L
14086 case o_mode:
14087 oappend ("OWORD PTR ");
14088 break;
43234a1e 14089 case xmm_mdq_mode:
0bfee649 14090 case vex_w_dq_mode:
1c480963 14091 case vex_scalar_w_dq_mode:
0bfee649
L
14092 if (!need_vex)
14093 abort ();
14094
14095 if (vex.w)
14096 oappend ("QWORD PTR ");
14097 else
14098 oappend ("DWORD PTR ");
14099 break;
43234a1e
L
14100 case vex_vsib_d_w_dq_mode:
14101 case vex_vsib_q_w_dq_mode:
14102 if (!need_vex)
14103 abort ();
14104
14105 if (!vex.evex)
14106 {
14107 if (vex.w)
14108 oappend ("QWORD PTR ");
14109 else
14110 oappend ("DWORD PTR ");
14111 }
14112 else
14113 {
14114 if (vex.length != 512)
14115 abort ();
14116 oappend ("ZMMWORD PTR ");
14117 }
14118 break;
5fc35d96
IT
14119 case vex_vsib_q_w_d_mode:
14120 case vex_vsib_d_w_d_mode:
14121 if (!need_vex || !vex.evex || vex.length != 512)
14122 abort ();
14123
14124 oappend ("YMMWORD PTR ");
14125
14126 break;
43234a1e
L
14127 case mask_mode:
14128 if (!need_vex)
14129 abort ();
14130 /* Currently the only instructions, which allows either mask or
14131 memory operand, are AVX512's KMOVW instructions. They need
14132 Word-sized operand. */
14133 if (vex.w || vex.length != 128)
14134 abort ();
14135 oappend ("WORD PTR ");
14136 break;
6c75cc62 14137 case v_bnd_mode:
3f31e633
JB
14138 default:
14139 break;
14140 }
14141}
14142
252b5132 14143static void
c0f3af97 14144OP_E_register (int bytemode, int sizeflag)
252b5132 14145{
c0f3af97
L
14146 int reg = modrm.rm;
14147 const char **names;
252b5132 14148
c0f3af97
L
14149 USED_REX (REX_B);
14150 if ((rex & REX_B))
14151 reg += 8;
252b5132 14152
b6169b20
L
14153 if ((sizeflag & SUFFIX_ALWAYS)
14154 && (bytemode == b_swap_mode || bytemode == v_swap_mode))
14155 swap_operand ();
14156
c0f3af97 14157 switch (bytemode)
252b5132 14158 {
c0f3af97 14159 case b_mode:
b6169b20 14160 case b_swap_mode:
c0f3af97
L
14161 USED_REX (0);
14162 if (rex)
14163 names = names8rex;
14164 else
14165 names = names8;
14166 break;
14167 case w_mode:
14168 names = names16;
14169 break;
14170 case d_mode:
14171 names = names32;
14172 break;
14173 case q_mode:
14174 names = names64;
14175 break;
14176 case m_mode:
6c75cc62 14177 case v_bnd_mode:
c0f3af97
L
14178 names = address_mode == mode_64bit ? names64 : names32;
14179 break;
7e8b059b
L
14180 case bnd_mode:
14181 names = names_bnd;
14182 break;
c0f3af97 14183 case stack_v_mode:
7bb15c6f 14184 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
252b5132 14185 {
c0f3af97 14186 names = names64;
252b5132 14187 break;
252b5132 14188 }
c0f3af97
L
14189 bytemode = v_mode;
14190 /* FALLTHRU */
14191 case v_mode:
b6169b20 14192 case v_swap_mode:
c0f3af97
L
14193 case dq_mode:
14194 case dqb_mode:
14195 case dqd_mode:
14196 case dqw_mode:
14197 USED_REX (REX_W);
14198 if (rex & REX_W)
14199 names = names64;
c0f3af97 14200 else
f16cd0d5 14201 {
7bb15c6f 14202 if ((sizeflag & DFLAG)
f16cd0d5
L
14203 || (bytemode != v_mode
14204 && bytemode != v_swap_mode))
14205 names = names32;
14206 else
14207 names = names16;
14208 used_prefixes |= (prefixes & PREFIX_DATA);
14209 }
c0f3af97 14210 break;
43234a1e
L
14211 case mask_mode:
14212 names = names_mask;
14213 break;
c0f3af97
L
14214 case 0:
14215 return;
14216 default:
14217 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
14218 return;
14219 }
c0f3af97
L
14220 oappend (names[reg]);
14221}
14222
14223static void
c1e679ec 14224OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
14225{
14226 bfd_vma disp = 0;
14227 int add = (rex & REX_B) ? 8 : 0;
14228 int riprel = 0;
43234a1e
L
14229 int shift;
14230
14231 if (vex.evex)
14232 {
14233 /* In EVEX, if operand doesn't allow broadcast, vex.b should be 0. */
14234 if (vex.b
14235 && bytemode != x_mode
14236 && bytemode != evex_half_bcst_xmmq_mode)
14237 {
14238 BadOp ();
14239 return;
14240 }
14241 switch (bytemode)
14242 {
14243 case vex_vsib_d_w_dq_mode:
5fc35d96 14244 case vex_vsib_d_w_d_mode:
eaa9d1ad 14245 case vex_vsib_q_w_dq_mode:
5fc35d96 14246 case vex_vsib_q_w_d_mode:
43234a1e
L
14247 case evex_x_gscat_mode:
14248 case xmm_mdq_mode:
14249 shift = vex.w ? 3 : 2;
14250 break;
43234a1e
L
14251 case x_mode:
14252 case evex_half_bcst_xmmq_mode:
14253 if (vex.b)
14254 {
14255 shift = vex.w ? 3 : 2;
14256 break;
14257 }
14258 /* Fall through if vex.b == 0. */
14259 case xmmqd_mode:
14260 case xmmdw_mode:
14261 case xmmq_mode:
14262 case ymmq_mode:
14263 case evex_x_nobcst_mode:
14264 case x_swap_mode:
14265 switch (vex.length)
14266 {
14267 case 128:
14268 shift = 4;
14269 break;
14270 case 256:
14271 shift = 5;
14272 break;
14273 case 512:
14274 shift = 6;
14275 break;
14276 default:
14277 abort ();
14278 }
14279 break;
14280 case ymm_mode:
14281 shift = 5;
14282 break;
14283 case xmm_mode:
14284 shift = 4;
14285 break;
14286 case xmm_mq_mode:
14287 case q_mode:
14288 case q_scalar_mode:
14289 case q_swap_mode:
14290 case q_scalar_swap_mode:
14291 shift = 3;
14292 break;
14293 case dqd_mode:
14294 case xmm_md_mode:
14295 case d_mode:
14296 case d_scalar_mode:
14297 case d_swap_mode:
14298 case d_scalar_swap_mode:
14299 shift = 2;
14300 break;
14301 case xmm_mw_mode:
14302 shift = 1;
14303 break;
14304 case xmm_mb_mode:
14305 shift = 0;
14306 break;
14307 default:
14308 abort ();
14309 }
14310 /* Make necessary corrections to shift for modes that need it.
14311 For these modes we currently have shift 4, 5 or 6 depending on
14312 vex.length (it corresponds to xmmword, ymmword or zmmword
14313 operand). We might want to make it 3, 4 or 5 (e.g. for
14314 xmmq_mode). In case of broadcast enabled the corrections
14315 aren't needed, as element size is always 32 or 64 bits. */
14316 if (bytemode == xmmq_mode
14317 || (bytemode == evex_half_bcst_xmmq_mode
14318 && !vex.b))
14319 shift -= 1;
14320 else if (bytemode == xmmqd_mode)
14321 shift -= 2;
14322 else if (bytemode == xmmdw_mode)
14323 shift -= 3;
14324 }
14325 else
14326 shift = 0;
252b5132 14327
c0f3af97 14328 USED_REX (REX_B);
3f31e633
JB
14329 if (intel_syntax)
14330 intel_operand_size (bytemode, sizeflag);
252b5132
RH
14331 append_seg ();
14332
5d669648 14333 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 14334 {
5d669648
L
14335 /* 32/64 bit address mode */
14336 int havedisp;
252b5132
RH
14337 int havesib;
14338 int havebase;
0f7da397 14339 int haveindex;
20afcfb7 14340 int needindex;
82c18208 14341 int base, rbase;
91d6fa6a 14342 int vindex = 0;
252b5132 14343 int scale = 0;
7e8b059b
L
14344 int addr32flag = !((sizeflag & AFLAG)
14345 || bytemode == v_bnd_mode
14346 || bytemode == bnd_mode);
6c30d220
L
14347 const char **indexes64 = names64;
14348 const char **indexes32 = names32;
252b5132
RH
14349
14350 havesib = 0;
14351 havebase = 1;
0f7da397 14352 haveindex = 0;
7967e09e 14353 base = modrm.rm;
252b5132
RH
14354
14355 if (base == 4)
14356 {
14357 havesib = 1;
dfc8cf43 14358 vindex = sib.index;
161a04f6
L
14359 USED_REX (REX_X);
14360 if (rex & REX_X)
91d6fa6a 14361 vindex += 8;
6c30d220
L
14362 switch (bytemode)
14363 {
14364 case vex_vsib_d_w_dq_mode:
5fc35d96 14365 case vex_vsib_d_w_d_mode:
6c30d220 14366 case vex_vsib_q_w_dq_mode:
5fc35d96 14367 case vex_vsib_q_w_d_mode:
6c30d220
L
14368 if (!need_vex)
14369 abort ();
43234a1e
L
14370 if (vex.evex)
14371 {
14372 if (!vex.v)
14373 vindex += 16;
14374 }
6c30d220
L
14375
14376 haveindex = 1;
14377 switch (vex.length)
14378 {
14379 case 128:
7bb15c6f 14380 indexes64 = indexes32 = names_xmm;
6c30d220
L
14381 break;
14382 case 256:
5fc35d96
IT
14383 if (!vex.w
14384 || bytemode == vex_vsib_q_w_dq_mode
14385 || bytemode == vex_vsib_q_w_d_mode)
7bb15c6f 14386 indexes64 = indexes32 = names_ymm;
6c30d220 14387 else
7bb15c6f 14388 indexes64 = indexes32 = names_xmm;
6c30d220 14389 break;
43234a1e 14390 case 512:
5fc35d96
IT
14391 if (!vex.w
14392 || bytemode == vex_vsib_q_w_dq_mode
14393 || bytemode == vex_vsib_q_w_d_mode)
43234a1e
L
14394 indexes64 = indexes32 = names_zmm;
14395 else
14396 indexes64 = indexes32 = names_ymm;
14397 break;
6c30d220
L
14398 default:
14399 abort ();
14400 }
14401 break;
14402 default:
14403 haveindex = vindex != 4;
14404 break;
14405 }
14406 scale = sib.scale;
14407 base = sib.base;
252b5132
RH
14408 codep++;
14409 }
82c18208 14410 rbase = base + add;
252b5132 14411
7967e09e 14412 switch (modrm.mod)
252b5132
RH
14413 {
14414 case 0:
82c18208 14415 if (base == 5)
252b5132
RH
14416 {
14417 havebase = 0;
cb712a9e 14418 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
14419 riprel = 1;
14420 disp = get32s ();
252b5132
RH
14421 }
14422 break;
14423 case 1:
14424 FETCH_DATA (the_info, codep + 1);
14425 disp = *codep++;
14426 if ((disp & 0x80) != 0)
14427 disp -= 0x100;
43234a1e
L
14428 if (vex.evex && shift > 0)
14429 disp <<= shift;
252b5132
RH
14430 break;
14431 case 2:
52b15da3 14432 disp = get32s ();
252b5132
RH
14433 break;
14434 }
14435
20afcfb7
L
14436 /* In 32bit mode, we need index register to tell [offset] from
14437 [eiz*1 + offset]. */
14438 needindex = (havesib
14439 && !havebase
14440 && !haveindex
14441 && address_mode == mode_32bit);
14442 havedisp = (havebase
14443 || needindex
14444 || (havesib && (haveindex || scale != 0)));
5d669648 14445
252b5132 14446 if (!intel_syntax)
82c18208 14447 if (modrm.mod != 0 || base == 5)
db6eb5be 14448 {
5d669648
L
14449 if (havedisp || riprel)
14450 print_displacement (scratchbuf, disp);
14451 else
14452 print_operand_value (scratchbuf, 1, disp);
db6eb5be 14453 oappend (scratchbuf);
52b15da3
JH
14454 if (riprel)
14455 {
14456 set_op (disp, 1);
87767711 14457 oappend (sizeflag & AFLAG ? "(%rip)" : "(%eip)");
52b15da3 14458 }
db6eb5be 14459 }
2da11e11 14460
7e8b059b
L
14461 if ((havebase || haveindex || riprel)
14462 && (bytemode != v_bnd_mode)
14463 && (bytemode != bnd_mode))
87767711
JB
14464 used_prefixes |= PREFIX_ADDR;
14465
5d669648 14466 if (havedisp || (intel_syntax && riprel))
252b5132 14467 {
252b5132 14468 *obufp++ = open_char;
52b15da3 14469 if (intel_syntax && riprel)
185b1163
L
14470 {
14471 set_op (disp, 1);
87767711 14472 oappend (sizeflag & AFLAG ? "rip" : "eip");
185b1163 14473 }
db6eb5be 14474 *obufp = '\0';
252b5132 14475 if (havebase)
7e8b059b 14476 oappend (address_mode == mode_64bit && !addr32flag
82c18208 14477 ? names64[rbase] : names32[rbase]);
252b5132
RH
14478 if (havesib)
14479 {
db51cc60
L
14480 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
14481 print index to tell base + index from base. */
14482 if (scale != 0
20afcfb7 14483 || needindex
db51cc60
L
14484 || haveindex
14485 || (havebase && base != ESP_REG_NUM))
252b5132 14486 {
9306ca4a 14487 if (!intel_syntax || havebase)
db6eb5be 14488 {
9306ca4a
JB
14489 *obufp++ = separator_char;
14490 *obufp = '\0';
db6eb5be 14491 }
db51cc60 14492 if (haveindex)
7e8b059b 14493 oappend (address_mode == mode_64bit && !addr32flag
6c30d220 14494 ? indexes64[vindex] : indexes32[vindex]);
db51cc60 14495 else
7e8b059b 14496 oappend (address_mode == mode_64bit && !addr32flag
db51cc60
L
14497 ? index64 : index32);
14498
db6eb5be
AM
14499 *obufp++ = scale_char;
14500 *obufp = '\0';
14501 sprintf (scratchbuf, "%d", 1 << scale);
14502 oappend (scratchbuf);
14503 }
252b5132 14504 }
185b1163 14505 if (intel_syntax
82c18208 14506 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 14507 {
db51cc60 14508 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
14509 {
14510 *obufp++ = '+';
14511 *obufp = '\0';
14512 }
05203043 14513 else if (modrm.mod != 1 && disp != -disp)
3d456fa1
JB
14514 {
14515 *obufp++ = '-';
14516 *obufp = '\0';
14517 disp = - (bfd_signed_vma) disp;
14518 }
14519
db51cc60
L
14520 if (havedisp)
14521 print_displacement (scratchbuf, disp);
14522 else
14523 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
14524 oappend (scratchbuf);
14525 }
252b5132
RH
14526
14527 *obufp++ = close_char;
db6eb5be 14528 *obufp = '\0';
252b5132
RH
14529 }
14530 else if (intel_syntax)
db6eb5be 14531 {
82c18208 14532 if (modrm.mod != 0 || base == 5)
db6eb5be 14533 {
252b5132
RH
14534 if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
14535 | PREFIX_ES | PREFIX_FS | PREFIX_GS))
14536 ;
14537 else
14538 {
d708bcba 14539 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
14540 oappend (":");
14541 }
52b15da3 14542 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
14543 oappend (scratchbuf);
14544 }
14545 }
252b5132
RH
14546 }
14547 else
f16cd0d5
L
14548 {
14549 /* 16 bit address mode */
14550 used_prefixes |= prefixes & PREFIX_ADDR;
7967e09e 14551 switch (modrm.mod)
252b5132
RH
14552 {
14553 case 0:
7967e09e 14554 if (modrm.rm == 6)
252b5132
RH
14555 {
14556 disp = get16 ();
14557 if ((disp & 0x8000) != 0)
14558 disp -= 0x10000;
14559 }
14560 break;
14561 case 1:
14562 FETCH_DATA (the_info, codep + 1);
14563 disp = *codep++;
14564 if ((disp & 0x80) != 0)
14565 disp -= 0x100;
14566 break;
14567 case 2:
14568 disp = get16 ();
14569 if ((disp & 0x8000) != 0)
14570 disp -= 0x10000;
14571 break;
14572 }
14573
14574 if (!intel_syntax)
7967e09e 14575 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 14576 {
5d669648 14577 print_displacement (scratchbuf, disp);
db6eb5be
AM
14578 oappend (scratchbuf);
14579 }
252b5132 14580
7967e09e 14581 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
14582 {
14583 *obufp++ = open_char;
db6eb5be 14584 *obufp = '\0';
7967e09e 14585 oappend (index16[modrm.rm]);
5d669648
L
14586 if (intel_syntax
14587 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 14588 {
5d669648 14589 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
14590 {
14591 *obufp++ = '+';
14592 *obufp = '\0';
14593 }
7967e09e 14594 else if (modrm.mod != 1)
3d456fa1
JB
14595 {
14596 *obufp++ = '-';
14597 *obufp = '\0';
14598 disp = - (bfd_signed_vma) disp;
14599 }
14600
5d669648 14601 print_displacement (scratchbuf, disp);
3d456fa1
JB
14602 oappend (scratchbuf);
14603 }
14604
db6eb5be
AM
14605 *obufp++ = close_char;
14606 *obufp = '\0';
252b5132 14607 }
3d456fa1
JB
14608 else if (intel_syntax)
14609 {
14610 if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
14611 | PREFIX_ES | PREFIX_FS | PREFIX_GS))
14612 ;
14613 else
14614 {
14615 oappend (names_seg[ds_reg - es_reg]);
14616 oappend (":");
14617 }
14618 print_operand_value (scratchbuf, 1, disp & 0xffff);
14619 oappend (scratchbuf);
14620 }
252b5132 14621 }
43234a1e
L
14622 if (vex.evex && vex.b
14623 && (bytemode == x_mode
14624 || bytemode == evex_half_bcst_xmmq_mode))
14625 {
14626 if (vex.w || bytemode == evex_half_bcst_xmmq_mode)
14627 oappend ("{1to8}");
14628 else
14629 oappend ("{1to16}");
14630 }
252b5132
RH
14631}
14632
c0f3af97 14633static void
8b3f93e7 14634OP_E (int bytemode, int sizeflag)
c0f3af97
L
14635{
14636 /* Skip mod/rm byte. */
14637 MODRM_CHECK;
14638 codep++;
14639
14640 if (modrm.mod == 3)
14641 OP_E_register (bytemode, sizeflag);
14642 else
c1e679ec 14643 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
14644}
14645
252b5132 14646static void
26ca5450 14647OP_G (int bytemode, int sizeflag)
252b5132 14648{
52b15da3 14649 int add = 0;
161a04f6
L
14650 USED_REX (REX_R);
14651 if (rex & REX_R)
52b15da3 14652 add += 8;
252b5132
RH
14653 switch (bytemode)
14654 {
14655 case b_mode:
52b15da3
JH
14656 USED_REX (0);
14657 if (rex)
7967e09e 14658 oappend (names8rex[modrm.reg + add]);
52b15da3 14659 else
7967e09e 14660 oappend (names8[modrm.reg + add]);
252b5132
RH
14661 break;
14662 case w_mode:
7967e09e 14663 oappend (names16[modrm.reg + add]);
252b5132
RH
14664 break;
14665 case d_mode:
7967e09e 14666 oappend (names32[modrm.reg + add]);
52b15da3
JH
14667 break;
14668 case q_mode:
7967e09e 14669 oappend (names64[modrm.reg + add]);
252b5132 14670 break;
7e8b059b
L
14671 case bnd_mode:
14672 oappend (names_bnd[modrm.reg]);
14673 break;
252b5132 14674 case v_mode:
9306ca4a 14675 case dq_mode:
42903f7f
L
14676 case dqb_mode:
14677 case dqd_mode:
9306ca4a 14678 case dqw_mode:
161a04f6
L
14679 USED_REX (REX_W);
14680 if (rex & REX_W)
7967e09e 14681 oappend (names64[modrm.reg + add]);
252b5132 14682 else
f16cd0d5
L
14683 {
14684 if ((sizeflag & DFLAG) || bytemode != v_mode)
14685 oappend (names32[modrm.reg + add]);
14686 else
14687 oappend (names16[modrm.reg + add]);
14688 used_prefixes |= (prefixes & PREFIX_DATA);
14689 }
252b5132 14690 break;
90700ea2 14691 case m_mode:
cb712a9e 14692 if (address_mode == mode_64bit)
7967e09e 14693 oappend (names64[modrm.reg + add]);
90700ea2 14694 else
7967e09e 14695 oappend (names32[modrm.reg + add]);
90700ea2 14696 break;
43234a1e
L
14697 case mask_mode:
14698 oappend (names_mask[modrm.reg + add]);
14699 break;
252b5132
RH
14700 default:
14701 oappend (INTERNAL_DISASSEMBLER_ERROR);
14702 break;
14703 }
14704}
14705
52b15da3 14706static bfd_vma
26ca5450 14707get64 (void)
52b15da3 14708{
5dd0794d 14709 bfd_vma x;
52b15da3 14710#ifdef BFD64
5dd0794d
AM
14711 unsigned int a;
14712 unsigned int b;
14713
52b15da3
JH
14714 FETCH_DATA (the_info, codep + 8);
14715 a = *codep++ & 0xff;
14716 a |= (*codep++ & 0xff) << 8;
14717 a |= (*codep++ & 0xff) << 16;
14718 a |= (*codep++ & 0xff) << 24;
5dd0794d 14719 b = *codep++ & 0xff;
52b15da3
JH
14720 b |= (*codep++ & 0xff) << 8;
14721 b |= (*codep++ & 0xff) << 16;
14722 b |= (*codep++ & 0xff) << 24;
14723 x = a + ((bfd_vma) b << 32);
14724#else
6608db57 14725 abort ();
5dd0794d 14726 x = 0;
52b15da3
JH
14727#endif
14728 return x;
14729}
14730
14731static bfd_signed_vma
26ca5450 14732get32 (void)
252b5132 14733{
52b15da3 14734 bfd_signed_vma x = 0;
252b5132
RH
14735
14736 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
14737 x = *codep++ & (bfd_signed_vma) 0xff;
14738 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
14739 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
14740 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
14741 return x;
14742}
14743
14744static bfd_signed_vma
26ca5450 14745get32s (void)
52b15da3
JH
14746{
14747 bfd_signed_vma x = 0;
14748
14749 FETCH_DATA (the_info, codep + 4);
14750 x = *codep++ & (bfd_signed_vma) 0xff;
14751 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
14752 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
14753 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
14754
14755 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
14756
252b5132
RH
14757 return x;
14758}
14759
14760static int
26ca5450 14761get16 (void)
252b5132
RH
14762{
14763 int x = 0;
14764
14765 FETCH_DATA (the_info, codep + 2);
14766 x = *codep++ & 0xff;
14767 x |= (*codep++ & 0xff) << 8;
14768 return x;
14769}
14770
14771static void
26ca5450 14772set_op (bfd_vma op, int riprel)
252b5132
RH
14773{
14774 op_index[op_ad] = op_ad;
cb712a9e 14775 if (address_mode == mode_64bit)
7081ff04
AJ
14776 {
14777 op_address[op_ad] = op;
14778 op_riprel[op_ad] = riprel;
14779 }
14780 else
14781 {
14782 /* Mask to get a 32-bit address. */
14783 op_address[op_ad] = op & 0xffffffff;
14784 op_riprel[op_ad] = riprel & 0xffffffff;
14785 }
252b5132
RH
14786}
14787
14788static void
26ca5450 14789OP_REG (int code, int sizeflag)
252b5132 14790{
2da11e11 14791 const char *s;
9b60702d 14792 int add;
de882298
RM
14793
14794 switch (code)
14795 {
14796 case es_reg: case ss_reg: case cs_reg:
14797 case ds_reg: case fs_reg: case gs_reg:
14798 oappend (names_seg[code - es_reg]);
14799 return;
14800 }
14801
161a04f6
L
14802 USED_REX (REX_B);
14803 if (rex & REX_B)
52b15da3 14804 add = 8;
9b60702d
L
14805 else
14806 add = 0;
52b15da3
JH
14807
14808 switch (code)
14809 {
52b15da3
JH
14810 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
14811 case sp_reg: case bp_reg: case si_reg: case di_reg:
14812 s = names16[code - ax_reg + add];
14813 break;
52b15da3
JH
14814 case al_reg: case ah_reg: case cl_reg: case ch_reg:
14815 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
14816 USED_REX (0);
14817 if (rex)
14818 s = names8rex[code - al_reg + add];
14819 else
14820 s = names8[code - al_reg];
14821 break;
6439fc28
AM
14822 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
14823 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
7bb15c6f 14824 if (address_mode == mode_64bit
6c067bbb 14825 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
14826 {
14827 s = names64[code - rAX_reg + add];
14828 break;
14829 }
14830 code += eAX_reg - rAX_reg;
6608db57 14831 /* Fall through. */
52b15da3
JH
14832 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
14833 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
14834 USED_REX (REX_W);
14835 if (rex & REX_W)
52b15da3 14836 s = names64[code - eAX_reg + add];
52b15da3 14837 else
f16cd0d5
L
14838 {
14839 if (sizeflag & DFLAG)
14840 s = names32[code - eAX_reg + add];
14841 else
14842 s = names16[code - eAX_reg + add];
14843 used_prefixes |= (prefixes & PREFIX_DATA);
14844 }
52b15da3 14845 break;
52b15da3
JH
14846 default:
14847 s = INTERNAL_DISASSEMBLER_ERROR;
14848 break;
14849 }
14850 oappend (s);
14851}
14852
14853static void
26ca5450 14854OP_IMREG (int code, int sizeflag)
52b15da3
JH
14855{
14856 const char *s;
252b5132
RH
14857
14858 switch (code)
14859 {
14860 case indir_dx_reg:
d708bcba 14861 if (intel_syntax)
52fd6d94 14862 s = "dx";
d708bcba 14863 else
db6eb5be 14864 s = "(%dx)";
252b5132
RH
14865 break;
14866 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
14867 case sp_reg: case bp_reg: case si_reg: case di_reg:
14868 s = names16[code - ax_reg];
14869 break;
14870 case es_reg: case ss_reg: case cs_reg:
14871 case ds_reg: case fs_reg: case gs_reg:
14872 s = names_seg[code - es_reg];
14873 break;
14874 case al_reg: case ah_reg: case cl_reg: case ch_reg:
14875 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
52b15da3
JH
14876 USED_REX (0);
14877 if (rex)
14878 s = names8rex[code - al_reg];
14879 else
14880 s = names8[code - al_reg];
252b5132
RH
14881 break;
14882 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
14883 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
14884 USED_REX (REX_W);
14885 if (rex & REX_W)
52b15da3 14886 s = names64[code - eAX_reg];
252b5132 14887 else
f16cd0d5
L
14888 {
14889 if (sizeflag & DFLAG)
14890 s = names32[code - eAX_reg];
14891 else
14892 s = names16[code - eAX_reg];
14893 used_prefixes |= (prefixes & PREFIX_DATA);
14894 }
252b5132 14895 break;
52fd6d94 14896 case z_mode_ax_reg:
161a04f6 14897 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
14898 s = *names32;
14899 else
14900 s = *names16;
161a04f6 14901 if (!(rex & REX_W))
52fd6d94
JB
14902 used_prefixes |= (prefixes & PREFIX_DATA);
14903 break;
252b5132
RH
14904 default:
14905 s = INTERNAL_DISASSEMBLER_ERROR;
14906 break;
14907 }
14908 oappend (s);
14909}
14910
14911static void
26ca5450 14912OP_I (int bytemode, int sizeflag)
252b5132 14913{
52b15da3
JH
14914 bfd_signed_vma op;
14915 bfd_signed_vma mask = -1;
252b5132
RH
14916
14917 switch (bytemode)
14918 {
14919 case b_mode:
14920 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
14921 op = *codep++;
14922 mask = 0xff;
14923 break;
14924 case q_mode:
cb712a9e 14925 if (address_mode == mode_64bit)
6439fc28
AM
14926 {
14927 op = get32s ();
14928 break;
14929 }
6608db57 14930 /* Fall through. */
252b5132 14931 case v_mode:
161a04f6
L
14932 USED_REX (REX_W);
14933 if (rex & REX_W)
52b15da3 14934 op = get32s ();
252b5132 14935 else
52b15da3 14936 {
f16cd0d5
L
14937 if (sizeflag & DFLAG)
14938 {
14939 op = get32 ();
14940 mask = 0xffffffff;
14941 }
14942 else
14943 {
14944 op = get16 ();
14945 mask = 0xfffff;
14946 }
14947 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 14948 }
252b5132
RH
14949 break;
14950 case w_mode:
52b15da3 14951 mask = 0xfffff;
252b5132
RH
14952 op = get16 ();
14953 break;
9306ca4a
JB
14954 case const_1_mode:
14955 if (intel_syntax)
6c067bbb 14956 oappend ("1");
9306ca4a 14957 return;
252b5132
RH
14958 default:
14959 oappend (INTERNAL_DISASSEMBLER_ERROR);
14960 return;
14961 }
14962
52b15da3
JH
14963 op &= mask;
14964 scratchbuf[0] = '$';
d708bcba 14965 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 14966 oappend_maybe_intel (scratchbuf);
52b15da3
JH
14967 scratchbuf[0] = '\0';
14968}
14969
14970static void
26ca5450 14971OP_I64 (int bytemode, int sizeflag)
52b15da3
JH
14972{
14973 bfd_signed_vma op;
14974 bfd_signed_vma mask = -1;
14975
cb712a9e 14976 if (address_mode != mode_64bit)
6439fc28
AM
14977 {
14978 OP_I (bytemode, sizeflag);
14979 return;
14980 }
14981
52b15da3
JH
14982 switch (bytemode)
14983 {
14984 case b_mode:
14985 FETCH_DATA (the_info, codep + 1);
14986 op = *codep++;
14987 mask = 0xff;
14988 break;
14989 case v_mode:
161a04f6
L
14990 USED_REX (REX_W);
14991 if (rex & REX_W)
52b15da3 14992 op = get64 ();
52b15da3
JH
14993 else
14994 {
f16cd0d5
L
14995 if (sizeflag & DFLAG)
14996 {
14997 op = get32 ();
14998 mask = 0xffffffff;
14999 }
15000 else
15001 {
15002 op = get16 ();
15003 mask = 0xfffff;
15004 }
15005 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 15006 }
52b15da3
JH
15007 break;
15008 case w_mode:
15009 mask = 0xfffff;
15010 op = get16 ();
15011 break;
15012 default:
15013 oappend (INTERNAL_DISASSEMBLER_ERROR);
15014 return;
15015 }
15016
15017 op &= mask;
15018 scratchbuf[0] = '$';
d708bcba 15019 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 15020 oappend_maybe_intel (scratchbuf);
252b5132
RH
15021 scratchbuf[0] = '\0';
15022}
15023
15024static void
26ca5450 15025OP_sI (int bytemode, int sizeflag)
252b5132 15026{
52b15da3 15027 bfd_signed_vma op;
252b5132
RH
15028
15029 switch (bytemode)
15030 {
15031 case b_mode:
e3949f17 15032 case b_T_mode:
252b5132
RH
15033 FETCH_DATA (the_info, codep + 1);
15034 op = *codep++;
15035 if ((op & 0x80) != 0)
15036 op -= 0x100;
e3949f17
L
15037 if (bytemode == b_T_mode)
15038 {
15039 if (address_mode != mode_64bit
7bb15c6f 15040 || !((sizeflag & DFLAG) || (rex & REX_W)))
e3949f17 15041 {
6c067bbb
RM
15042 /* The operand-size prefix is overridden by a REX prefix. */
15043 if ((sizeflag & DFLAG) || (rex & REX_W))
e3949f17
L
15044 op &= 0xffffffff;
15045 else
15046 op &= 0xffff;
15047 }
15048 }
15049 else
15050 {
15051 if (!(rex & REX_W))
15052 {
15053 if (sizeflag & DFLAG)
15054 op &= 0xffffffff;
15055 else
15056 op &= 0xffff;
15057 }
15058 }
252b5132
RH
15059 break;
15060 case v_mode:
7bb15c6f
RM
15061 /* The operand-size prefix is overridden by a REX prefix. */
15062 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 15063 op = get32s ();
252b5132 15064 else
d9e3625e 15065 op = get16 ();
252b5132
RH
15066 break;
15067 default:
15068 oappend (INTERNAL_DISASSEMBLER_ERROR);
15069 return;
15070 }
52b15da3
JH
15071
15072 scratchbuf[0] = '$';
15073 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 15074 oappend_maybe_intel (scratchbuf);
252b5132
RH
15075}
15076
15077static void
26ca5450 15078OP_J (int bytemode, int sizeflag)
252b5132 15079{
52b15da3 15080 bfd_vma disp;
7081ff04 15081 bfd_vma mask = -1;
65ca155d 15082 bfd_vma segment = 0;
252b5132
RH
15083
15084 switch (bytemode)
15085 {
15086 case b_mode:
15087 FETCH_DATA (the_info, codep + 1);
15088 disp = *codep++;
15089 if ((disp & 0x80) != 0)
15090 disp -= 0x100;
15091 break;
15092 case v_mode:
f16cd0d5 15093 USED_REX (REX_W);
161a04f6 15094 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 15095 disp = get32s ();
252b5132
RH
15096 else
15097 {
15098 disp = get16 ();
206717e8
L
15099 if ((disp & 0x8000) != 0)
15100 disp -= 0x10000;
65ca155d
L
15101 /* In 16bit mode, address is wrapped around at 64k within
15102 the same segment. Otherwise, a data16 prefix on a jump
15103 instruction means that the pc is masked to 16 bits after
15104 the displacement is added! */
15105 mask = 0xffff;
15106 if ((prefixes & PREFIX_DATA) == 0)
15107 segment = ((start_pc + codep - start_codep)
15108 & ~((bfd_vma) 0xffff));
252b5132 15109 }
f16cd0d5
L
15110 if (!(rex & REX_W))
15111 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
15112 break;
15113 default:
15114 oappend (INTERNAL_DISASSEMBLER_ERROR);
15115 return;
15116 }
42d5f9c6 15117 disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
52b15da3
JH
15118 set_op (disp, 0);
15119 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
15120 oappend (scratchbuf);
15121}
15122
252b5132 15123static void
ed7841b3 15124OP_SEG (int bytemode, int sizeflag)
252b5132 15125{
ed7841b3 15126 if (bytemode == w_mode)
7967e09e 15127 oappend (names_seg[modrm.reg]);
ed7841b3 15128 else
7967e09e 15129 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
15130}
15131
15132static void
26ca5450 15133OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
15134{
15135 int seg, offset;
15136
c608c12e 15137 if (sizeflag & DFLAG)
252b5132 15138 {
c608c12e
AM
15139 offset = get32 ();
15140 seg = get16 ();
252b5132 15141 }
c608c12e
AM
15142 else
15143 {
15144 offset = get16 ();
15145 seg = get16 ();
15146 }
7d421014 15147 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 15148 if (intel_syntax)
3f31e633 15149 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
15150 else
15151 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 15152 oappend (scratchbuf);
252b5132
RH
15153}
15154
252b5132 15155static void
3f31e633 15156OP_OFF (int bytemode, int sizeflag)
252b5132 15157{
52b15da3 15158 bfd_vma off;
252b5132 15159
3f31e633
JB
15160 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
15161 intel_operand_size (bytemode, sizeflag);
252b5132
RH
15162 append_seg ();
15163
cb712a9e 15164 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
15165 off = get32 ();
15166 else
15167 off = get16 ();
15168
15169 if (intel_syntax)
15170 {
15171 if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
db6eb5be 15172 | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
252b5132 15173 {
d708bcba 15174 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
15175 oappend (":");
15176 }
15177 }
52b15da3
JH
15178 print_operand_value (scratchbuf, 1, off);
15179 oappend (scratchbuf);
15180}
6439fc28 15181
52b15da3 15182static void
3f31e633 15183OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
15184{
15185 bfd_vma off;
15186
539e75ad
L
15187 if (address_mode != mode_64bit
15188 || (prefixes & PREFIX_ADDR))
6439fc28
AM
15189 {
15190 OP_OFF (bytemode, sizeflag);
15191 return;
15192 }
15193
3f31e633
JB
15194 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
15195 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
15196 append_seg ();
15197
6608db57 15198 off = get64 ();
52b15da3
JH
15199
15200 if (intel_syntax)
15201 {
15202 if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
db6eb5be 15203 | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
52b15da3 15204 {
d708bcba 15205 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
15206 oappend (":");
15207 }
15208 }
15209 print_operand_value (scratchbuf, 1, off);
252b5132
RH
15210 oappend (scratchbuf);
15211}
15212
15213static void
26ca5450 15214ptr_reg (int code, int sizeflag)
252b5132 15215{
2da11e11 15216 const char *s;
d708bcba 15217
1d9f512f 15218 *obufp++ = open_char;
20f0a1fc 15219 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 15220 if (address_mode == mode_64bit)
c1a64871
JH
15221 {
15222 if (!(sizeflag & AFLAG))
db6eb5be 15223 s = names32[code - eAX_reg];
c1a64871 15224 else
db6eb5be 15225 s = names64[code - eAX_reg];
c1a64871 15226 }
52b15da3 15227 else if (sizeflag & AFLAG)
252b5132
RH
15228 s = names32[code - eAX_reg];
15229 else
15230 s = names16[code - eAX_reg];
15231 oappend (s);
1d9f512f
AM
15232 *obufp++ = close_char;
15233 *obufp = 0;
252b5132
RH
15234}
15235
15236static void
26ca5450 15237OP_ESreg (int code, int sizeflag)
252b5132 15238{
9306ca4a 15239 if (intel_syntax)
52fd6d94
JB
15240 {
15241 switch (codep[-1])
15242 {
15243 case 0x6d: /* insw/insl */
15244 intel_operand_size (z_mode, sizeflag);
15245 break;
15246 case 0xa5: /* movsw/movsl/movsq */
15247 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15248 case 0xab: /* stosw/stosl */
15249 case 0xaf: /* scasw/scasl */
15250 intel_operand_size (v_mode, sizeflag);
15251 break;
15252 default:
15253 intel_operand_size (b_mode, sizeflag);
15254 }
15255 }
9ce09ba2 15256 oappend_maybe_intel ("%es:");
252b5132
RH
15257 ptr_reg (code, sizeflag);
15258}
15259
15260static void
26ca5450 15261OP_DSreg (int code, int sizeflag)
252b5132 15262{
9306ca4a 15263 if (intel_syntax)
52fd6d94
JB
15264 {
15265 switch (codep[-1])
15266 {
15267 case 0x6f: /* outsw/outsl */
15268 intel_operand_size (z_mode, sizeflag);
15269 break;
15270 case 0xa5: /* movsw/movsl/movsq */
15271 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15272 case 0xad: /* lodsw/lodsl/lodsq */
15273 intel_operand_size (v_mode, sizeflag);
15274 break;
15275 default:
15276 intel_operand_size (b_mode, sizeflag);
15277 }
15278 }
252b5132
RH
15279 if ((prefixes
15280 & (PREFIX_CS
15281 | PREFIX_DS
15282 | PREFIX_SS
15283 | PREFIX_ES
15284 | PREFIX_FS
15285 | PREFIX_GS)) == 0)
15286 prefixes |= PREFIX_DS;
6608db57 15287 append_seg ();
252b5132
RH
15288 ptr_reg (code, sizeflag);
15289}
15290
252b5132 15291static void
26ca5450 15292OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15293{
9b60702d 15294 int add;
161a04f6 15295 if (rex & REX_R)
c4a530c5 15296 {
161a04f6 15297 USED_REX (REX_R);
c4a530c5
JB
15298 add = 8;
15299 }
cb712a9e 15300 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 15301 {
f16cd0d5 15302 all_prefixes[last_lock_prefix] = 0;
c4a530c5
JB
15303 used_prefixes |= PREFIX_LOCK;
15304 add = 8;
15305 }
9b60702d
L
15306 else
15307 add = 0;
7967e09e 15308 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
9ce09ba2 15309 oappend_maybe_intel (scratchbuf);
252b5132
RH
15310}
15311
252b5132 15312static void
26ca5450 15313OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15314{
9b60702d 15315 int add;
161a04f6
L
15316 USED_REX (REX_R);
15317 if (rex & REX_R)
52b15da3 15318 add = 8;
9b60702d
L
15319 else
15320 add = 0;
d708bcba 15321 if (intel_syntax)
7967e09e 15322 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 15323 else
7967e09e 15324 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
15325 oappend (scratchbuf);
15326}
15327
252b5132 15328static void
26ca5450 15329OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15330{
7967e09e 15331 sprintf (scratchbuf, "%%tr%d", modrm.reg);
9ce09ba2 15332 oappend_maybe_intel (scratchbuf);
252b5132
RH
15333}
15334
15335static void
6f74c397 15336OP_R (int bytemode, int sizeflag)
252b5132 15337{
7967e09e 15338 if (modrm.mod == 3)
2da11e11
AM
15339 OP_E (bytemode, sizeflag);
15340 else
6608db57 15341 BadOp ();
252b5132
RH
15342}
15343
15344static void
26ca5450 15345OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15346{
b9733481
L
15347 int reg = modrm.reg;
15348 const char **names;
15349
041bd2e0
JH
15350 used_prefixes |= (prefixes & PREFIX_DATA);
15351 if (prefixes & PREFIX_DATA)
20f0a1fc 15352 {
b9733481 15353 names = names_xmm;
161a04f6
L
15354 USED_REX (REX_R);
15355 if (rex & REX_R)
b9733481 15356 reg += 8;
20f0a1fc 15357 }
041bd2e0 15358 else
b9733481
L
15359 names = names_mm;
15360 oappend (names[reg]);
252b5132
RH
15361}
15362
c608c12e 15363static void
c0f3af97 15364OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 15365{
b9733481
L
15366 int reg = modrm.reg;
15367 const char **names;
15368
161a04f6
L
15369 USED_REX (REX_R);
15370 if (rex & REX_R)
b9733481 15371 reg += 8;
43234a1e
L
15372 if (vex.evex)
15373 {
15374 if (!vex.r)
15375 reg += 16;
15376 }
15377
539f890d
L
15378 if (need_vex
15379 && bytemode != xmm_mode
43234a1e
L
15380 && bytemode != xmmq_mode
15381 && bytemode != evex_half_bcst_xmmq_mode
15382 && bytemode != ymm_mode
539f890d 15383 && bytemode != scalar_mode)
c0f3af97
L
15384 {
15385 switch (vex.length)
15386 {
15387 case 128:
b9733481 15388 names = names_xmm;
c0f3af97
L
15389 break;
15390 case 256:
5fc35d96
IT
15391 if (vex.w
15392 || (bytemode != vex_vsib_q_w_dq_mode
15393 && bytemode != vex_vsib_q_w_d_mode))
6c30d220
L
15394 names = names_ymm;
15395 else
15396 names = names_xmm;
c0f3af97 15397 break;
43234a1e
L
15398 case 512:
15399 names = names_zmm;
15400 break;
c0f3af97
L
15401 default:
15402 abort ();
15403 }
15404 }
43234a1e
L
15405 else if (bytemode == xmmq_mode
15406 || bytemode == evex_half_bcst_xmmq_mode)
15407 {
15408 switch (vex.length)
15409 {
15410 case 128:
15411 case 256:
15412 names = names_xmm;
15413 break;
15414 case 512:
15415 names = names_ymm;
15416 break;
15417 default:
15418 abort ();
15419 }
15420 }
15421 else if (bytemode == ymm_mode)
15422 names = names_ymm;
c0f3af97 15423 else
b9733481
L
15424 names = names_xmm;
15425 oappend (names[reg]);
c608c12e
AM
15426}
15427
252b5132 15428static void
26ca5450 15429OP_EM (int bytemode, int sizeflag)
252b5132 15430{
b9733481
L
15431 int reg;
15432 const char **names;
15433
7967e09e 15434 if (modrm.mod != 3)
252b5132 15435 {
b6169b20
L
15436 if (intel_syntax
15437 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
15438 {
15439 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15440 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 15441 }
252b5132
RH
15442 OP_E (bytemode, sizeflag);
15443 return;
15444 }
15445
b6169b20
L
15446 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
15447 swap_operand ();
15448
6608db57 15449 /* Skip mod/rm byte. */
4bba6815 15450 MODRM_CHECK;
252b5132 15451 codep++;
041bd2e0 15452 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15453 reg = modrm.rm;
041bd2e0 15454 if (prefixes & PREFIX_DATA)
20f0a1fc 15455 {
b9733481 15456 names = names_xmm;
161a04f6
L
15457 USED_REX (REX_B);
15458 if (rex & REX_B)
b9733481 15459 reg += 8;
20f0a1fc 15460 }
041bd2e0 15461 else
b9733481
L
15462 names = names_mm;
15463 oappend (names[reg]);
252b5132
RH
15464}
15465
246c51aa
L
15466/* cvt* are the only instructions in sse2 which have
15467 both SSE and MMX operands and also have 0x66 prefix
15468 in their opcode. 0x66 was originally used to differentiate
15469 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
15470 cvt* separately using OP_EMC and OP_MXC */
15471static void
15472OP_EMC (int bytemode, int sizeflag)
15473{
7967e09e 15474 if (modrm.mod != 3)
4d9567e0
MM
15475 {
15476 if (intel_syntax && bytemode == v_mode)
15477 {
15478 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15479 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 15480 }
4d9567e0
MM
15481 OP_E (bytemode, sizeflag);
15482 return;
15483 }
246c51aa 15484
4d9567e0
MM
15485 /* Skip mod/rm byte. */
15486 MODRM_CHECK;
15487 codep++;
15488 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15489 oappend (names_mm[modrm.rm]);
4d9567e0
MM
15490}
15491
15492static void
15493OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15494{
15495 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15496 oappend (names_mm[modrm.reg]);
4d9567e0
MM
15497}
15498
c608c12e 15499static void
26ca5450 15500OP_EX (int bytemode, int sizeflag)
c608c12e 15501{
b9733481
L
15502 int reg;
15503 const char **names;
d6f574e0
L
15504
15505 /* Skip mod/rm byte. */
15506 MODRM_CHECK;
15507 codep++;
15508
7967e09e 15509 if (modrm.mod != 3)
c608c12e 15510 {
c1e679ec 15511 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
15512 return;
15513 }
d6f574e0 15514
b9733481 15515 reg = modrm.rm;
161a04f6
L
15516 USED_REX (REX_B);
15517 if (rex & REX_B)
b9733481 15518 reg += 8;
43234a1e
L
15519 if (vex.evex)
15520 {
15521 USED_REX (REX_X);
15522 if ((rex & REX_X))
15523 reg += 16;
15524 }
c608c12e 15525
b6169b20 15526 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
15527 && (bytemode == x_swap_mode
15528 || bytemode == d_swap_mode
7bb15c6f 15529 || bytemode == d_scalar_swap_mode
539f890d
L
15530 || bytemode == q_swap_mode
15531 || bytemode == q_scalar_swap_mode))
b6169b20
L
15532 swap_operand ();
15533
c0f3af97
L
15534 if (need_vex
15535 && bytemode != xmm_mode
6c30d220
L
15536 && bytemode != xmmdw_mode
15537 && bytemode != xmmqd_mode
15538 && bytemode != xmm_mb_mode
15539 && bytemode != xmm_mw_mode
15540 && bytemode != xmm_md_mode
15541 && bytemode != xmm_mq_mode
43234a1e 15542 && bytemode != xmm_mdq_mode
539f890d 15543 && bytemode != xmmq_mode
43234a1e
L
15544 && bytemode != evex_half_bcst_xmmq_mode
15545 && bytemode != ymm_mode
539f890d 15546 && bytemode != d_scalar_mode
7bb15c6f 15547 && bytemode != d_scalar_swap_mode
539f890d 15548 && bytemode != q_scalar_mode
1c480963
L
15549 && bytemode != q_scalar_swap_mode
15550 && bytemode != vex_scalar_w_dq_mode)
c0f3af97
L
15551 {
15552 switch (vex.length)
15553 {
15554 case 128:
b9733481 15555 names = names_xmm;
c0f3af97
L
15556 break;
15557 case 256:
b9733481 15558 names = names_ymm;
c0f3af97 15559 break;
43234a1e
L
15560 case 512:
15561 names = names_zmm;
15562 break;
c0f3af97
L
15563 default:
15564 abort ();
15565 }
15566 }
43234a1e
L
15567 else if (bytemode == xmmq_mode
15568 || bytemode == evex_half_bcst_xmmq_mode)
15569 {
15570 switch (vex.length)
15571 {
15572 case 128:
15573 case 256:
15574 names = names_xmm;
15575 break;
15576 case 512:
15577 names = names_ymm;
15578 break;
15579 default:
15580 abort ();
15581 }
15582 }
15583 else if (bytemode == ymm_mode)
15584 names = names_ymm;
c0f3af97 15585 else
b9733481
L
15586 names = names_xmm;
15587 oappend (names[reg]);
c608c12e
AM
15588}
15589
252b5132 15590static void
26ca5450 15591OP_MS (int bytemode, int sizeflag)
252b5132 15592{
7967e09e 15593 if (modrm.mod == 3)
2da11e11
AM
15594 OP_EM (bytemode, sizeflag);
15595 else
6608db57 15596 BadOp ();
252b5132
RH
15597}
15598
992aaec9 15599static void
26ca5450 15600OP_XS (int bytemode, int sizeflag)
992aaec9 15601{
7967e09e 15602 if (modrm.mod == 3)
992aaec9
AM
15603 OP_EX (bytemode, sizeflag);
15604 else
6608db57 15605 BadOp ();
992aaec9
AM
15606}
15607
cc0ec051
AM
15608static void
15609OP_M (int bytemode, int sizeflag)
15610{
7967e09e 15611 if (modrm.mod == 3)
75413a22
L
15612 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
15613 BadOp ();
cc0ec051
AM
15614 else
15615 OP_E (bytemode, sizeflag);
15616}
15617
15618static void
15619OP_0f07 (int bytemode, int sizeflag)
15620{
7967e09e 15621 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
15622 BadOp ();
15623 else
15624 OP_E (bytemode, sizeflag);
15625}
15626
46e883c5 15627/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 15628 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 15629
cc0ec051 15630static void
46e883c5 15631NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 15632{
8b38ad71
L
15633 if ((prefixes & PREFIX_DATA) != 0
15634 || (rex != 0
15635 && rex != 0x48
15636 && address_mode == mode_64bit))
46e883c5
L
15637 OP_REG (bytemode, sizeflag);
15638 else
15639 strcpy (obuf, "nop");
15640}
15641
15642static void
15643NOP_Fixup2 (int bytemode, int sizeflag)
15644{
8b38ad71
L
15645 if ((prefixes & PREFIX_DATA) != 0
15646 || (rex != 0
15647 && rex != 0x48
15648 && address_mode == mode_64bit))
46e883c5 15649 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
15650}
15651
84037f8c 15652static const char *const Suffix3DNow[] = {
252b5132
RH
15653/* 00 */ NULL, NULL, NULL, NULL,
15654/* 04 */ NULL, NULL, NULL, NULL,
15655/* 08 */ NULL, NULL, NULL, NULL,
9e525108 15656/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
15657/* 10 */ NULL, NULL, NULL, NULL,
15658/* 14 */ NULL, NULL, NULL, NULL,
15659/* 18 */ NULL, NULL, NULL, NULL,
9e525108 15660/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
15661/* 20 */ NULL, NULL, NULL, NULL,
15662/* 24 */ NULL, NULL, NULL, NULL,
15663/* 28 */ NULL, NULL, NULL, NULL,
15664/* 2C */ NULL, NULL, NULL, NULL,
15665/* 30 */ NULL, NULL, NULL, NULL,
15666/* 34 */ NULL, NULL, NULL, NULL,
15667/* 38 */ NULL, NULL, NULL, NULL,
15668/* 3C */ NULL, NULL, NULL, NULL,
15669/* 40 */ NULL, NULL, NULL, NULL,
15670/* 44 */ NULL, NULL, NULL, NULL,
15671/* 48 */ NULL, NULL, NULL, NULL,
15672/* 4C */ NULL, NULL, NULL, NULL,
15673/* 50 */ NULL, NULL, NULL, NULL,
15674/* 54 */ NULL, NULL, NULL, NULL,
15675/* 58 */ NULL, NULL, NULL, NULL,
15676/* 5C */ NULL, NULL, NULL, NULL,
15677/* 60 */ NULL, NULL, NULL, NULL,
15678/* 64 */ NULL, NULL, NULL, NULL,
15679/* 68 */ NULL, NULL, NULL, NULL,
15680/* 6C */ NULL, NULL, NULL, NULL,
15681/* 70 */ NULL, NULL, NULL, NULL,
15682/* 74 */ NULL, NULL, NULL, NULL,
15683/* 78 */ NULL, NULL, NULL, NULL,
15684/* 7C */ NULL, NULL, NULL, NULL,
15685/* 80 */ NULL, NULL, NULL, NULL,
15686/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
15687/* 88 */ NULL, NULL, "pfnacc", NULL,
15688/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
15689/* 90 */ "pfcmpge", NULL, NULL, NULL,
15690/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
15691/* 98 */ NULL, NULL, "pfsub", NULL,
15692/* 9C */ NULL, NULL, "pfadd", NULL,
15693/* A0 */ "pfcmpgt", NULL, NULL, NULL,
15694/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
15695/* A8 */ NULL, NULL, "pfsubr", NULL,
15696/* AC */ NULL, NULL, "pfacc", NULL,
15697/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 15698/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 15699/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
15700/* BC */ NULL, NULL, NULL, "pavgusb",
15701/* C0 */ NULL, NULL, NULL, NULL,
15702/* C4 */ NULL, NULL, NULL, NULL,
15703/* C8 */ NULL, NULL, NULL, NULL,
15704/* CC */ NULL, NULL, NULL, NULL,
15705/* D0 */ NULL, NULL, NULL, NULL,
15706/* D4 */ NULL, NULL, NULL, NULL,
15707/* D8 */ NULL, NULL, NULL, NULL,
15708/* DC */ NULL, NULL, NULL, NULL,
15709/* E0 */ NULL, NULL, NULL, NULL,
15710/* E4 */ NULL, NULL, NULL, NULL,
15711/* E8 */ NULL, NULL, NULL, NULL,
15712/* EC */ NULL, NULL, NULL, NULL,
15713/* F0 */ NULL, NULL, NULL, NULL,
15714/* F4 */ NULL, NULL, NULL, NULL,
15715/* F8 */ NULL, NULL, NULL, NULL,
15716/* FC */ NULL, NULL, NULL, NULL,
15717};
15718
15719static void
26ca5450 15720OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
15721{
15722 const char *mnemonic;
15723
15724 FETCH_DATA (the_info, codep + 1);
15725 /* AMD 3DNow! instructions are specified by an opcode suffix in the
15726 place where an 8-bit immediate would normally go. ie. the last
15727 byte of the instruction. */
ea397f5b 15728 obufp = mnemonicendp;
c608c12e 15729 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 15730 if (mnemonic)
2da11e11 15731 oappend (mnemonic);
252b5132
RH
15732 else
15733 {
15734 /* Since a variable sized modrm/sib chunk is between the start
15735 of the opcode (0x0f0f) and the opcode suffix, we need to do
15736 all the modrm processing first, and don't know until now that
15737 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
15738 op_out[0][0] = '\0';
15739 op_out[1][0] = '\0';
6608db57 15740 BadOp ();
252b5132 15741 }
ea397f5b 15742 mnemonicendp = obufp;
252b5132 15743}
c608c12e 15744
ea397f5b
L
15745static struct op simd_cmp_op[] =
15746{
15747 { STRING_COMMA_LEN ("eq") },
15748 { STRING_COMMA_LEN ("lt") },
15749 { STRING_COMMA_LEN ("le") },
15750 { STRING_COMMA_LEN ("unord") },
15751 { STRING_COMMA_LEN ("neq") },
15752 { STRING_COMMA_LEN ("nlt") },
15753 { STRING_COMMA_LEN ("nle") },
15754 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
15755};
15756
15757static void
ad19981d 15758CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
15759{
15760 unsigned int cmp_type;
15761
15762 FETCH_DATA (the_info, codep + 1);
15763 cmp_type = *codep++ & 0xff;
c0f3af97 15764 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 15765 {
ad19981d 15766 char suffix [3];
ea397f5b 15767 char *p = mnemonicendp - 2;
ad19981d
L
15768 suffix[0] = p[0];
15769 suffix[1] = p[1];
15770 suffix[2] = '\0';
ea397f5b
L
15771 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
15772 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
15773 }
15774 else
15775 {
ad19981d
L
15776 /* We have a reserved extension byte. Output it directly. */
15777 scratchbuf[0] = '$';
15778 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 15779 oappend_maybe_intel (scratchbuf);
ad19981d 15780 scratchbuf[0] = '\0';
c608c12e
AM
15781 }
15782}
15783
ca164297 15784static void
b844680a
L
15785OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
15786 int sizeflag ATTRIBUTE_UNUSED)
15787{
15788 /* mwait %eax,%ecx */
15789 if (!intel_syntax)
15790 {
15791 const char **names = (address_mode == mode_64bit
15792 ? names64 : names32);
15793 strcpy (op_out[0], names[0]);
15794 strcpy (op_out[1], names[1]);
15795 two_source_ops = 1;
15796 }
15797 /* Skip mod/rm byte. */
15798 MODRM_CHECK;
15799 codep++;
15800}
15801
15802static void
15803OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
15804 int sizeflag ATTRIBUTE_UNUSED)
ca164297 15805{
b844680a
L
15806 /* monitor %eax,%ecx,%edx" */
15807 if (!intel_syntax)
ca164297 15808 {
b844680a 15809 const char **op1_names;
cb712a9e
L
15810 const char **names = (address_mode == mode_64bit
15811 ? names64 : names32);
1d9f512f 15812
b844680a
L
15813 if (!(prefixes & PREFIX_ADDR))
15814 op1_names = (address_mode == mode_16bit
15815 ? names16 : names);
ca164297
L
15816 else
15817 {
b844680a 15818 /* Remove "addr16/addr32". */
f16cd0d5 15819 all_prefixes[last_addr_prefix] = 0;
b844680a
L
15820 op1_names = (address_mode != mode_32bit
15821 ? names32 : names16);
15822 used_prefixes |= PREFIX_ADDR;
ca164297 15823 }
b844680a
L
15824 strcpy (op_out[0], op1_names[0]);
15825 strcpy (op_out[1], names[1]);
15826 strcpy (op_out[2], names[2]);
15827 two_source_ops = 1;
ca164297 15828 }
b844680a
L
15829 /* Skip mod/rm byte. */
15830 MODRM_CHECK;
15831 codep++;
30123838
JB
15832}
15833
6608db57
KH
15834static void
15835BadOp (void)
2da11e11 15836{
6608db57
KH
15837 /* Throw away prefixes and 1st. opcode byte. */
15838 codep = insn_codep + 1;
2da11e11
AM
15839 oappend ("(bad)");
15840}
4cc91dba 15841
35c52694
L
15842static void
15843REP_Fixup (int bytemode, int sizeflag)
15844{
15845 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
15846 lods and stos. */
35c52694 15847 if (prefixes & PREFIX_REPZ)
f16cd0d5 15848 all_prefixes[last_repz_prefix] = REP_PREFIX;
35c52694
L
15849
15850 switch (bytemode)
15851 {
15852 case al_reg:
15853 case eAX_reg:
15854 case indir_dx_reg:
15855 OP_IMREG (bytemode, sizeflag);
15856 break;
15857 case eDI_reg:
15858 OP_ESreg (bytemode, sizeflag);
15859 break;
15860 case eSI_reg:
15861 OP_DSreg (bytemode, sizeflag);
15862 break;
15863 default:
15864 abort ();
15865 break;
15866 }
15867}
f5804c90 15868
7e8b059b
L
15869/* For BND-prefixed instructions 0xF2 prefix should be displayed as
15870 "bnd". */
15871
15872static void
15873BND_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15874{
15875 if (prefixes & PREFIX_REPNZ)
15876 all_prefixes[last_repnz_prefix] = BND_PREFIX;
15877}
15878
42164a71
L
15879/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
15880 "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
15881 */
15882
15883static void
15884HLE_Fixup1 (int bytemode, int sizeflag)
15885{
15886 if (modrm.mod != 3
15887 && (prefixes & PREFIX_LOCK) != 0)
15888 {
15889 if (prefixes & PREFIX_REPZ)
15890 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15891 if (prefixes & PREFIX_REPNZ)
15892 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15893 }
15894
15895 OP_E (bytemode, sizeflag);
15896}
15897
15898/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
15899 "xacquire"/"xrelease" for memory operand. No check for LOCK prefix.
15900 */
15901
15902static void
15903HLE_Fixup2 (int bytemode, int sizeflag)
15904{
15905 if (modrm.mod != 3)
15906 {
15907 if (prefixes & PREFIX_REPZ)
15908 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15909 if (prefixes & PREFIX_REPNZ)
15910 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15911 }
15912
15913 OP_E (bytemode, sizeflag);
15914}
15915
15916/* Similar to OP_E. But the 0xf3 prefixes should be displayed as
15917 "xrelease" for memory operand. No check for LOCK prefix. */
15918
15919static void
15920HLE_Fixup3 (int bytemode, int sizeflag)
15921{
15922 if (modrm.mod != 3
15923 && last_repz_prefix > last_repnz_prefix
15924 && (prefixes & PREFIX_REPZ) != 0)
15925 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15926
15927 OP_E (bytemode, sizeflag);
15928}
15929
f5804c90
L
15930static void
15931CMPXCHG8B_Fixup (int bytemode, int sizeflag)
15932{
161a04f6
L
15933 USED_REX (REX_W);
15934 if (rex & REX_W)
f5804c90
L
15935 {
15936 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
15937 char *p = mnemonicendp - 2;
15938 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 15939 bytemode = o_mode;
f5804c90 15940 }
42164a71
L
15941 else if ((prefixes & PREFIX_LOCK) != 0)
15942 {
15943 if (prefixes & PREFIX_REPZ)
15944 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15945 if (prefixes & PREFIX_REPNZ)
15946 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15947 }
15948
f5804c90
L
15949 OP_M (bytemode, sizeflag);
15950}
42903f7f
L
15951
15952static void
15953XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
15954{
b9733481
L
15955 const char **names;
15956
c0f3af97
L
15957 if (need_vex)
15958 {
15959 switch (vex.length)
15960 {
15961 case 128:
b9733481 15962 names = names_xmm;
c0f3af97
L
15963 break;
15964 case 256:
b9733481 15965 names = names_ymm;
c0f3af97
L
15966 break;
15967 default:
15968 abort ();
15969 }
15970 }
15971 else
b9733481
L
15972 names = names_xmm;
15973 oappend (names[reg]);
42903f7f 15974}
381d071f
L
15975
15976static void
15977CRC32_Fixup (int bytemode, int sizeflag)
15978{
15979 /* Add proper suffix to "crc32". */
ea397f5b 15980 char *p = mnemonicendp;
381d071f
L
15981
15982 switch (bytemode)
15983 {
15984 case b_mode:
20592a94 15985 if (intel_syntax)
ea397f5b 15986 goto skip;
20592a94 15987
381d071f
L
15988 *p++ = 'b';
15989 break;
15990 case v_mode:
20592a94 15991 if (intel_syntax)
ea397f5b 15992 goto skip;
20592a94 15993
381d071f
L
15994 USED_REX (REX_W);
15995 if (rex & REX_W)
15996 *p++ = 'q';
7bb15c6f 15997 else
f16cd0d5
L
15998 {
15999 if (sizeflag & DFLAG)
16000 *p++ = 'l';
16001 else
16002 *p++ = 'w';
16003 used_prefixes |= (prefixes & PREFIX_DATA);
16004 }
381d071f
L
16005 break;
16006 default:
16007 oappend (INTERNAL_DISASSEMBLER_ERROR);
16008 break;
16009 }
ea397f5b 16010 mnemonicendp = p;
381d071f
L
16011 *p = '\0';
16012
ea397f5b 16013skip:
381d071f
L
16014 if (modrm.mod == 3)
16015 {
16016 int add;
16017
16018 /* Skip mod/rm byte. */
16019 MODRM_CHECK;
16020 codep++;
16021
16022 USED_REX (REX_B);
16023 add = (rex & REX_B) ? 8 : 0;
16024 if (bytemode == b_mode)
16025 {
16026 USED_REX (0);
16027 if (rex)
16028 oappend (names8rex[modrm.rm + add]);
16029 else
16030 oappend (names8[modrm.rm + add]);
16031 }
16032 else
16033 {
16034 USED_REX (REX_W);
16035 if (rex & REX_W)
16036 oappend (names64[modrm.rm + add]);
16037 else if ((prefixes & PREFIX_DATA))
16038 oappend (names16[modrm.rm + add]);
16039 else
16040 oappend (names32[modrm.rm + add]);
16041 }
16042 }
16043 else
9344ff29 16044 OP_E (bytemode, sizeflag);
381d071f 16045}
85f10a01 16046
eacc9c89
L
16047static void
16048FXSAVE_Fixup (int bytemode, int sizeflag)
16049{
16050 /* Add proper suffix to "fxsave" and "fxrstor". */
16051 USED_REX (REX_W);
16052 if (rex & REX_W)
16053 {
16054 char *p = mnemonicendp;
16055 *p++ = '6';
16056 *p++ = '4';
16057 *p = '\0';
16058 mnemonicendp = p;
16059 }
16060 OP_M (bytemode, sizeflag);
16061}
16062
c0f3af97
L
16063/* Display the destination register operand for instructions with
16064 VEX. */
16065
16066static void
16067OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16068{
539f890d 16069 int reg;
b9733481
L
16070 const char **names;
16071
c0f3af97
L
16072 if (!need_vex)
16073 abort ();
16074
16075 if (!need_vex_reg)
16076 return;
16077
539f890d 16078 reg = vex.register_specifier;
43234a1e
L
16079 if (vex.evex)
16080 {
16081 if (!vex.v)
16082 reg += 16;
16083 }
16084
539f890d
L
16085 if (bytemode == vex_scalar_mode)
16086 {
16087 oappend (names_xmm[reg]);
16088 return;
16089 }
16090
c0f3af97
L
16091 switch (vex.length)
16092 {
16093 case 128:
16094 switch (bytemode)
16095 {
16096 case vex_mode:
16097 case vex128_mode:
6c30d220 16098 case vex_vsib_q_w_dq_mode:
5fc35d96 16099 case vex_vsib_q_w_d_mode:
cb21baef
L
16100 names = names_xmm;
16101 break;
16102 case dq_mode:
16103 if (vex.w)
16104 names = names64;
16105 else
16106 names = names32;
c0f3af97 16107 break;
43234a1e
L
16108 case mask_mode:
16109 names = names_mask;
16110 break;
c0f3af97
L
16111 default:
16112 abort ();
16113 return;
16114 }
c0f3af97
L
16115 break;
16116 case 256:
16117 switch (bytemode)
16118 {
16119 case vex_mode:
16120 case vex256_mode:
6c30d220
L
16121 names = names_ymm;
16122 break;
16123 case vex_vsib_q_w_dq_mode:
5fc35d96 16124 case vex_vsib_q_w_d_mode:
6c30d220 16125 names = vex.w ? names_ymm : names_xmm;
c0f3af97 16126 break;
43234a1e
L
16127 case mask_mode:
16128 names = names_mask;
16129 break;
c0f3af97
L
16130 default:
16131 abort ();
16132 return;
16133 }
c0f3af97 16134 break;
43234a1e
L
16135 case 512:
16136 names = names_zmm;
16137 break;
c0f3af97
L
16138 default:
16139 abort ();
16140 break;
16141 }
539f890d 16142 oappend (names[reg]);
c0f3af97
L
16143}
16144
922d8de8
DR
16145/* Get the VEX immediate byte without moving codep. */
16146
16147static unsigned char
ccc5981b 16148get_vex_imm8 (int sizeflag, int opnum)
922d8de8
DR
16149{
16150 int bytes_before_imm = 0;
16151
922d8de8
DR
16152 if (modrm.mod != 3)
16153 {
16154 /* There are SIB/displacement bytes. */
16155 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
6c067bbb 16156 {
922d8de8 16157 /* 32/64 bit address mode */
6c067bbb 16158 int base = modrm.rm;
922d8de8
DR
16159
16160 /* Check SIB byte. */
6c067bbb
RM
16161 if (base == 4)
16162 {
16163 FETCH_DATA (the_info, codep + 1);
16164 base = *codep & 7;
16165 /* When decoding the third source, don't increase
16166 bytes_before_imm as this has already been incremented
16167 by one in OP_E_memory while decoding the second
16168 source operand. */
16169 if (opnum == 0)
16170 bytes_before_imm++;
16171 }
16172
16173 /* Don't increase bytes_before_imm when decoding the third source,
16174 it has already been incremented by OP_E_memory while decoding
16175 the second source operand. */
16176 if (opnum == 0)
16177 {
16178 switch (modrm.mod)
16179 {
16180 case 0:
16181 /* When modrm.rm == 5 or modrm.rm == 4 and base in
16182 SIB == 5, there is a 4 byte displacement. */
16183 if (base != 5)
16184 /* No displacement. */
16185 break;
16186 case 2:
16187 /* 4 byte displacement. */
16188 bytes_before_imm += 4;
16189 break;
16190 case 1:
16191 /* 1 byte displacement. */
16192 bytes_before_imm++;
16193 break;
16194 }
16195 }
16196 }
922d8de8 16197 else
02e647f9
SP
16198 {
16199 /* 16 bit address mode */
6c067bbb
RM
16200 /* Don't increase bytes_before_imm when decoding the third source,
16201 it has already been incremented by OP_E_memory while decoding
16202 the second source operand. */
16203 if (opnum == 0)
16204 {
02e647f9
SP
16205 switch (modrm.mod)
16206 {
16207 case 0:
16208 /* When modrm.rm == 6, there is a 2 byte displacement. */
16209 if (modrm.rm != 6)
16210 /* No displacement. */
16211 break;
16212 case 2:
16213 /* 2 byte displacement. */
16214 bytes_before_imm += 2;
16215 break;
16216 case 1:
16217 /* 1 byte displacement: when decoding the third source,
16218 don't increase bytes_before_imm as this has already
16219 been incremented by one in OP_E_memory while decoding
16220 the second source operand. */
16221 if (opnum == 0)
16222 bytes_before_imm++;
ccc5981b 16223
02e647f9
SP
16224 break;
16225 }
922d8de8
DR
16226 }
16227 }
16228 }
16229
16230 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
16231 return codep [bytes_before_imm];
16232}
16233
16234static void
16235OP_EX_VexReg (int bytemode, int sizeflag, int reg)
16236{
b9733481
L
16237 const char **names;
16238
922d8de8
DR
16239 if (reg == -1 && modrm.mod != 3)
16240 {
16241 OP_E_memory (bytemode, sizeflag);
16242 return;
16243 }
16244 else
16245 {
16246 if (reg == -1)
16247 {
16248 reg = modrm.rm;
16249 USED_REX (REX_B);
16250 if (rex & REX_B)
16251 reg += 8;
16252 }
16253 else if (reg > 7 && address_mode != mode_64bit)
16254 BadOp ();
16255 }
16256
16257 switch (vex.length)
16258 {
16259 case 128:
b9733481 16260 names = names_xmm;
922d8de8
DR
16261 break;
16262 case 256:
b9733481 16263 names = names_ymm;
922d8de8
DR
16264 break;
16265 default:
16266 abort ();
16267 }
b9733481 16268 oappend (names[reg]);
922d8de8
DR
16269}
16270
a683cc34
SP
16271static void
16272OP_EX_VexImmW (int bytemode, int sizeflag)
16273{
16274 int reg = -1;
16275 static unsigned char vex_imm8;
16276
16277 if (vex_w_done == 0)
16278 {
16279 vex_w_done = 1;
16280
16281 /* Skip mod/rm byte. */
16282 MODRM_CHECK;
16283 codep++;
16284
16285 vex_imm8 = get_vex_imm8 (sizeflag, 0);
16286
16287 if (vex.w)
16288 reg = vex_imm8 >> 4;
16289
16290 OP_EX_VexReg (bytemode, sizeflag, reg);
16291 }
16292 else if (vex_w_done == 1)
16293 {
16294 vex_w_done = 2;
16295
16296 if (!vex.w)
16297 reg = vex_imm8 >> 4;
16298
16299 OP_EX_VexReg (bytemode, sizeflag, reg);
16300 }
16301 else
16302 {
16303 /* Output the imm8 directly. */
16304 scratchbuf[0] = '$';
16305 print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
9ce09ba2 16306 oappend_maybe_intel (scratchbuf);
a683cc34
SP
16307 scratchbuf[0] = '\0';
16308 codep++;
16309 }
16310}
16311
5dd85c99
SP
16312static void
16313OP_Vex_2src (int bytemode, int sizeflag)
16314{
16315 if (modrm.mod == 3)
16316 {
b9733481 16317 int reg = modrm.rm;
5dd85c99 16318 USED_REX (REX_B);
b9733481
L
16319 if (rex & REX_B)
16320 reg += 8;
16321 oappend (names_xmm[reg]);
5dd85c99
SP
16322 }
16323 else
16324 {
16325 if (intel_syntax
16326 && (bytemode == v_mode || bytemode == v_swap_mode))
16327 {
16328 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16329 used_prefixes |= (prefixes & PREFIX_DATA);
16330 }
16331 OP_E (bytemode, sizeflag);
16332 }
16333}
16334
16335static void
16336OP_Vex_2src_1 (int bytemode, int sizeflag)
16337{
16338 if (modrm.mod == 3)
16339 {
16340 /* Skip mod/rm byte. */
16341 MODRM_CHECK;
16342 codep++;
16343 }
16344
16345 if (vex.w)
b9733481 16346 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
16347 else
16348 OP_Vex_2src (bytemode, sizeflag);
16349}
16350
16351static void
16352OP_Vex_2src_2 (int bytemode, int sizeflag)
16353{
16354 if (vex.w)
16355 OP_Vex_2src (bytemode, sizeflag);
16356 else
b9733481 16357 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
16358}
16359
922d8de8
DR
16360static void
16361OP_EX_VexW (int bytemode, int sizeflag)
16362{
16363 int reg = -1;
16364
16365 if (!vex_w_done)
16366 {
16367 vex_w_done = 1;
41effecb
SP
16368
16369 /* Skip mod/rm byte. */
16370 MODRM_CHECK;
16371 codep++;
16372
922d8de8 16373 if (vex.w)
ccc5981b 16374 reg = get_vex_imm8 (sizeflag, 0) >> 4;
922d8de8
DR
16375 }
16376 else
16377 {
16378 if (!vex.w)
ccc5981b 16379 reg = get_vex_imm8 (sizeflag, 1) >> 4;
922d8de8
DR
16380 }
16381
16382 OP_EX_VexReg (bytemode, sizeflag, reg);
16383}
16384
922d8de8
DR
16385static void
16386VEXI4_Fixup (int bytemode ATTRIBUTE_UNUSED,
16387 int sizeflag ATTRIBUTE_UNUSED)
16388{
16389 /* Skip the immediate byte and check for invalid bits. */
16390 FETCH_DATA (the_info, codep + 1);
16391 if (*codep++ & 0xf)
16392 BadOp ();
16393}
16394
c0f3af97
L
16395static void
16396OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16397{
16398 int reg;
b9733481
L
16399 const char **names;
16400
c0f3af97
L
16401 FETCH_DATA (the_info, codep + 1);
16402 reg = *codep++;
16403
16404 if (bytemode != x_mode)
16405 abort ();
16406
16407 if (reg & 0xf)
16408 BadOp ();
16409
16410 reg >>= 4;
dae39acc
L
16411 if (reg > 7 && address_mode != mode_64bit)
16412 BadOp ();
16413
c0f3af97
L
16414 switch (vex.length)
16415 {
16416 case 128:
b9733481 16417 names = names_xmm;
c0f3af97
L
16418 break;
16419 case 256:
b9733481 16420 names = names_ymm;
c0f3af97
L
16421 break;
16422 default:
16423 abort ();
16424 }
b9733481 16425 oappend (names[reg]);
c0f3af97
L
16426}
16427
922d8de8
DR
16428static void
16429OP_XMM_VexW (int bytemode, int sizeflag)
16430{
16431 /* Turn off the REX.W bit since it is used for swapping operands
16432 now. */
16433 rex &= ~REX_W;
16434 OP_XMM (bytemode, sizeflag);
16435}
16436
c0f3af97
L
16437static void
16438OP_EX_Vex (int bytemode, int sizeflag)
16439{
16440 if (modrm.mod != 3)
16441 {
16442 if (vex.register_specifier != 0)
16443 BadOp ();
16444 need_vex_reg = 0;
16445 }
16446 OP_EX (bytemode, sizeflag);
16447}
16448
16449static void
16450OP_XMM_Vex (int bytemode, int sizeflag)
16451{
16452 if (modrm.mod != 3)
16453 {
16454 if (vex.register_specifier != 0)
16455 BadOp ();
16456 need_vex_reg = 0;
16457 }
16458 OP_XMM (bytemode, sizeflag);
16459}
16460
16461static void
16462VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16463{
16464 switch (vex.length)
16465 {
16466 case 128:
ea397f5b 16467 mnemonicendp = stpcpy (obuf, "vzeroupper");
c0f3af97
L
16468 break;
16469 case 256:
ea397f5b 16470 mnemonicendp = stpcpy (obuf, "vzeroall");
c0f3af97
L
16471 break;
16472 default:
16473 abort ();
16474 }
16475}
16476
ea397f5b
L
16477static struct op vex_cmp_op[] =
16478{
16479 { STRING_COMMA_LEN ("eq") },
16480 { STRING_COMMA_LEN ("lt") },
16481 { STRING_COMMA_LEN ("le") },
16482 { STRING_COMMA_LEN ("unord") },
16483 { STRING_COMMA_LEN ("neq") },
16484 { STRING_COMMA_LEN ("nlt") },
16485 { STRING_COMMA_LEN ("nle") },
16486 { STRING_COMMA_LEN ("ord") },
16487 { STRING_COMMA_LEN ("eq_uq") },
16488 { STRING_COMMA_LEN ("nge") },
16489 { STRING_COMMA_LEN ("ngt") },
16490 { STRING_COMMA_LEN ("false") },
16491 { STRING_COMMA_LEN ("neq_oq") },
16492 { STRING_COMMA_LEN ("ge") },
16493 { STRING_COMMA_LEN ("gt") },
16494 { STRING_COMMA_LEN ("true") },
16495 { STRING_COMMA_LEN ("eq_os") },
16496 { STRING_COMMA_LEN ("lt_oq") },
16497 { STRING_COMMA_LEN ("le_oq") },
16498 { STRING_COMMA_LEN ("unord_s") },
16499 { STRING_COMMA_LEN ("neq_us") },
16500 { STRING_COMMA_LEN ("nlt_uq") },
16501 { STRING_COMMA_LEN ("nle_uq") },
16502 { STRING_COMMA_LEN ("ord_s") },
16503 { STRING_COMMA_LEN ("eq_us") },
16504 { STRING_COMMA_LEN ("nge_uq") },
16505 { STRING_COMMA_LEN ("ngt_uq") },
16506 { STRING_COMMA_LEN ("false_os") },
16507 { STRING_COMMA_LEN ("neq_os") },
16508 { STRING_COMMA_LEN ("ge_oq") },
16509 { STRING_COMMA_LEN ("gt_oq") },
16510 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
16511};
16512
16513static void
16514VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16515{
16516 unsigned int cmp_type;
16517
16518 FETCH_DATA (the_info, codep + 1);
16519 cmp_type = *codep++ & 0xff;
16520 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
16521 {
16522 char suffix [3];
ea397f5b 16523 char *p = mnemonicendp - 2;
c0f3af97
L
16524 suffix[0] = p[0];
16525 suffix[1] = p[1];
16526 suffix[2] = '\0';
ea397f5b
L
16527 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
16528 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
16529 }
16530 else
16531 {
16532 /* We have a reserved extension byte. Output it directly. */
16533 scratchbuf[0] = '$';
16534 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16535 oappend_maybe_intel (scratchbuf);
c0f3af97
L
16536 scratchbuf[0] = '\0';
16537 }
16538}
16539
43234a1e
L
16540static void
16541VPCMP_Fixup (int bytemode ATTRIBUTE_UNUSED,
16542 int sizeflag ATTRIBUTE_UNUSED)
16543{
16544 unsigned int cmp_type;
16545
16546 if (!vex.evex)
16547 abort ();
16548
16549 FETCH_DATA (the_info, codep + 1);
16550 cmp_type = *codep++ & 0xff;
16551 /* There are aliases for immediates 0, 1, 2, 4, 5, 6.
16552 If it's the case, print suffix, otherwise - print the immediate. */
16553 if (cmp_type < ARRAY_SIZE (simd_cmp_op)
16554 && cmp_type != 3
16555 && cmp_type != 7)
16556 {
16557 char suffix [3];
16558 char *p = mnemonicendp - 2;
16559
16560 /* vpcmp* can have both one- and two-lettered suffix. */
16561 if (p[0] == 'p')
16562 {
16563 p++;
16564 suffix[0] = p[0];
16565 suffix[1] = '\0';
16566 }
16567 else
16568 {
16569 suffix[0] = p[0];
16570 suffix[1] = p[1];
16571 suffix[2] = '\0';
16572 }
16573
16574 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
16575 mnemonicendp += simd_cmp_op[cmp_type].len;
16576 }
16577 else
16578 {
16579 /* We have a reserved extension byte. Output it directly. */
16580 scratchbuf[0] = '$';
16581 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16582 oappend_maybe_intel (scratchbuf);
43234a1e
L
16583 scratchbuf[0] = '\0';
16584 }
16585}
16586
ea397f5b
L
16587static const struct op pclmul_op[] =
16588{
16589 { STRING_COMMA_LEN ("lql") },
16590 { STRING_COMMA_LEN ("hql") },
16591 { STRING_COMMA_LEN ("lqh") },
16592 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
16593};
16594
16595static void
16596PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
16597 int sizeflag ATTRIBUTE_UNUSED)
16598{
16599 unsigned int pclmul_type;
16600
16601 FETCH_DATA (the_info, codep + 1);
16602 pclmul_type = *codep++ & 0xff;
16603 switch (pclmul_type)
16604 {
16605 case 0x10:
16606 pclmul_type = 2;
16607 break;
16608 case 0x11:
16609 pclmul_type = 3;
16610 break;
16611 default:
16612 break;
7bb15c6f 16613 }
c0f3af97
L
16614 if (pclmul_type < ARRAY_SIZE (pclmul_op))
16615 {
16616 char suffix [4];
ea397f5b 16617 char *p = mnemonicendp - 3;
c0f3af97
L
16618 suffix[0] = p[0];
16619 suffix[1] = p[1];
16620 suffix[2] = p[2];
16621 suffix[3] = '\0';
ea397f5b
L
16622 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
16623 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
16624 }
16625 else
16626 {
16627 /* We have a reserved extension byte. Output it directly. */
16628 scratchbuf[0] = '$';
16629 print_operand_value (scratchbuf + 1, 1, pclmul_type);
9ce09ba2 16630 oappend_maybe_intel (scratchbuf);
c0f3af97
L
16631 scratchbuf[0] = '\0';
16632 }
16633}
16634
f1f8f695
L
16635static void
16636MOVBE_Fixup (int bytemode, int sizeflag)
16637{
16638 /* Add proper suffix to "movbe". */
ea397f5b 16639 char *p = mnemonicendp;
f1f8f695
L
16640
16641 switch (bytemode)
16642 {
16643 case v_mode:
16644 if (intel_syntax)
ea397f5b 16645 goto skip;
f1f8f695
L
16646
16647 USED_REX (REX_W);
16648 if (sizeflag & SUFFIX_ALWAYS)
16649 {
16650 if (rex & REX_W)
16651 *p++ = 'q';
f1f8f695 16652 else
f16cd0d5
L
16653 {
16654 if (sizeflag & DFLAG)
16655 *p++ = 'l';
16656 else
16657 *p++ = 'w';
16658 used_prefixes |= (prefixes & PREFIX_DATA);
16659 }
f1f8f695 16660 }
f1f8f695
L
16661 break;
16662 default:
16663 oappend (INTERNAL_DISASSEMBLER_ERROR);
16664 break;
16665 }
ea397f5b 16666 mnemonicendp = p;
f1f8f695
L
16667 *p = '\0';
16668
ea397f5b 16669skip:
f1f8f695
L
16670 OP_M (bytemode, sizeflag);
16671}
f88c9eb0
SP
16672
16673static void
16674OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16675{
16676 int reg;
16677 const char **names;
16678
16679 /* Skip mod/rm byte. */
16680 MODRM_CHECK;
16681 codep++;
16682
16683 if (vex.w)
16684 names = names64;
f88c9eb0 16685 else
ce7d077e 16686 names = names32;
f88c9eb0
SP
16687
16688 reg = modrm.rm;
16689 USED_REX (REX_B);
16690 if (rex & REX_B)
16691 reg += 8;
16692
16693 oappend (names[reg]);
16694}
16695
16696static void
16697OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16698{
16699 const char **names;
16700
16701 if (vex.w)
16702 names = names64;
f88c9eb0 16703 else
ce7d077e 16704 names = names32;
f88c9eb0
SP
16705
16706 oappend (names[vex.register_specifier]);
16707}
43234a1e
L
16708
16709static void
16710OP_Mask (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16711{
16712 if (!vex.evex
16713 || bytemode != mask_mode)
16714 abort ();
16715
16716 USED_REX (REX_R);
16717 if ((rex & REX_R) != 0 || !vex.r)
16718 {
16719 BadOp ();
16720 return;
16721 }
16722
16723 oappend (names_mask [modrm.reg]);
16724}
16725
16726static void
16727OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16728{
16729 if (!vex.evex
16730 || (bytemode != evex_rounding_mode
16731 && bytemode != evex_sae_mode))
16732 abort ();
16733 if (modrm.mod == 3 && vex.b)
16734 switch (bytemode)
16735 {
16736 case evex_rounding_mode:
16737 oappend (names_rounding[vex.ll]);
16738 break;
16739 case evex_sae_mode:
16740 oappend ("{sae}");
16741 break;
16742 default:
16743 break;
16744 }
16745}
This page took 1.737645 seconds and 4 git commands to generate.