Sort target vectors to suit renaming
[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 } },
2cf200a4
IT
11535 { Bad_Opcode },
11536 { Bad_Opcode },
11537 { Bad_Opcode },
11538 { "encls", { Skip_MODRM } },
b844680a 11539 },
475a2301
L
11540 {
11541 /* RM_0F01_REG_2 */
11542 { "xgetbv", { Skip_MODRM } },
11543 { "xsetbv", { Skip_MODRM } },
8729a6f6
L
11544 { Bad_Opcode },
11545 { Bad_Opcode },
11546 { "vmfunc", { Skip_MODRM } },
42164a71
L
11547 { "xend", { Skip_MODRM } },
11548 { "xtest", { Skip_MODRM } },
2cf200a4 11549 { "enclu", { Skip_MODRM } },
475a2301 11550 },
b844680a 11551 {
1ceb70f8 11552 /* RM_0F01_REG_3 */
4e7d34a6
L
11553 { "vmrun", { Skip_MODRM } },
11554 { "vmmcall", { Skip_MODRM } },
11555 { "vmload", { Skip_MODRM } },
11556 { "vmsave", { Skip_MODRM } },
11557 { "stgi", { Skip_MODRM } },
11558 { "clgi", { Skip_MODRM } },
11559 { "skinit", { Skip_MODRM } },
11560 { "invlpga", { Skip_MODRM } },
11561 },
11562 {
1ceb70f8 11563 /* RM_0F01_REG_7 */
4e7d34a6
L
11564 { "swapgs", { Skip_MODRM } },
11565 { "rdtscp", { Skip_MODRM } },
b844680a
L
11566 },
11567 {
1ceb70f8 11568 /* RM_0FAE_REG_5 */
4e7d34a6 11569 { "lfence", { Skip_MODRM } },
b844680a
L
11570 },
11571 {
1ceb70f8 11572 /* RM_0FAE_REG_6 */
4e7d34a6 11573 { "mfence", { Skip_MODRM } },
b844680a 11574 },
bbedc832 11575 {
1ceb70f8 11576 /* RM_0FAE_REG_7 */
4e7d34a6 11577 { "sfence", { Skip_MODRM } },
144c41d9 11578 },
b844680a
L
11579};
11580
c608c12e
AM
11581#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
11582
f16cd0d5
L
11583/* We use the high bit to indicate different name for the same
11584 prefix. */
11585#define ADDR16_PREFIX (0x67 | 0x100)
11586#define ADDR32_PREFIX (0x67 | 0x200)
11587#define DATA16_PREFIX (0x66 | 0x100)
11588#define DATA32_PREFIX (0x66 | 0x200)
11589#define REP_PREFIX (0xf3 | 0x100)
42164a71
L
11590#define XACQUIRE_PREFIX (0xf2 | 0x200)
11591#define XRELEASE_PREFIX (0xf3 | 0x400)
7e8b059b 11592#define BND_PREFIX (0xf2 | 0x400)
f16cd0d5
L
11593
11594static int
26ca5450 11595ckprefix (void)
252b5132 11596{
f16cd0d5 11597 int newrex, i, length;
52b15da3 11598 rex = 0;
c0f3af97 11599 rex_ignored = 0;
252b5132 11600 prefixes = 0;
7d421014 11601 used_prefixes = 0;
52b15da3 11602 rex_used = 0;
f16cd0d5
L
11603 last_lock_prefix = -1;
11604 last_repz_prefix = -1;
11605 last_repnz_prefix = -1;
11606 last_data_prefix = -1;
11607 last_addr_prefix = -1;
11608 last_rex_prefix = -1;
11609 last_seg_prefix = -1;
f310f33d
L
11610 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
11611 all_prefixes[i] = 0;
11612 i = 0;
f16cd0d5
L
11613 length = 0;
11614 /* The maximum instruction length is 15bytes. */
11615 while (length < MAX_CODE_LENGTH - 1)
252b5132
RH
11616 {
11617 FETCH_DATA (the_info, codep + 1);
52b15da3 11618 newrex = 0;
252b5132
RH
11619 switch (*codep)
11620 {
52b15da3
JH
11621 /* REX prefixes family. */
11622 case 0x40:
11623 case 0x41:
11624 case 0x42:
11625 case 0x43:
11626 case 0x44:
11627 case 0x45:
11628 case 0x46:
11629 case 0x47:
11630 case 0x48:
11631 case 0x49:
11632 case 0x4a:
11633 case 0x4b:
11634 case 0x4c:
11635 case 0x4d:
11636 case 0x4e:
11637 case 0x4f:
f16cd0d5
L
11638 if (address_mode == mode_64bit)
11639 newrex = *codep;
11640 else
11641 return 1;
11642 last_rex_prefix = i;
52b15da3 11643 break;
252b5132
RH
11644 case 0xf3:
11645 prefixes |= PREFIX_REPZ;
f16cd0d5 11646 last_repz_prefix = i;
252b5132
RH
11647 break;
11648 case 0xf2:
11649 prefixes |= PREFIX_REPNZ;
f16cd0d5 11650 last_repnz_prefix = i;
252b5132
RH
11651 break;
11652 case 0xf0:
11653 prefixes |= PREFIX_LOCK;
f16cd0d5 11654 last_lock_prefix = i;
252b5132
RH
11655 break;
11656 case 0x2e:
11657 prefixes |= PREFIX_CS;
f16cd0d5 11658 last_seg_prefix = i;
252b5132
RH
11659 break;
11660 case 0x36:
11661 prefixes |= PREFIX_SS;
f16cd0d5 11662 last_seg_prefix = i;
252b5132
RH
11663 break;
11664 case 0x3e:
11665 prefixes |= PREFIX_DS;
f16cd0d5 11666 last_seg_prefix = i;
252b5132
RH
11667 break;
11668 case 0x26:
11669 prefixes |= PREFIX_ES;
f16cd0d5 11670 last_seg_prefix = i;
252b5132
RH
11671 break;
11672 case 0x64:
11673 prefixes |= PREFIX_FS;
f16cd0d5 11674 last_seg_prefix = i;
252b5132
RH
11675 break;
11676 case 0x65:
11677 prefixes |= PREFIX_GS;
f16cd0d5 11678 last_seg_prefix = i;
252b5132
RH
11679 break;
11680 case 0x66:
11681 prefixes |= PREFIX_DATA;
f16cd0d5 11682 last_data_prefix = i;
252b5132
RH
11683 break;
11684 case 0x67:
11685 prefixes |= PREFIX_ADDR;
f16cd0d5 11686 last_addr_prefix = i;
252b5132 11687 break;
5076851f 11688 case FWAIT_OPCODE:
252b5132
RH
11689 /* fwait is really an instruction. If there are prefixes
11690 before the fwait, they belong to the fwait, *not* to the
11691 following instruction. */
3e7d61b2 11692 if (prefixes || rex)
252b5132
RH
11693 {
11694 prefixes |= PREFIX_FWAIT;
11695 codep++;
6c067bbb
RM
11696 /* This ensures that the previous REX prefixes are noticed
11697 as unused prefixes, as in the return case below. */
11698 rex_used = rex;
f16cd0d5 11699 return 1;
252b5132
RH
11700 }
11701 prefixes = PREFIX_FWAIT;
11702 break;
11703 default:
f16cd0d5 11704 return 1;
252b5132 11705 }
52b15da3
JH
11706 /* Rex is ignored when followed by another prefix. */
11707 if (rex)
11708 {
3e7d61b2 11709 rex_used = rex;
f16cd0d5 11710 return 1;
52b15da3 11711 }
f16cd0d5
L
11712 if (*codep != FWAIT_OPCODE)
11713 all_prefixes[i++] = *codep;
52b15da3 11714 rex = newrex;
252b5132 11715 codep++;
f16cd0d5
L
11716 length++;
11717 }
11718 return 0;
11719}
11720
11721static int
11722seg_prefix (int pref)
11723{
11724 switch (pref)
11725 {
11726 case 0x2e:
11727 return PREFIX_CS;
11728 case 0x36:
11729 return PREFIX_SS;
11730 case 0x3e:
11731 return PREFIX_DS;
11732 case 0x26:
11733 return PREFIX_ES;
11734 case 0x64:
11735 return PREFIX_FS;
11736 case 0x65:
11737 return PREFIX_GS;
11738 default:
11739 return 0;
252b5132
RH
11740 }
11741}
11742
7d421014
ILT
11743/* Return the name of the prefix byte PREF, or NULL if PREF is not a
11744 prefix byte. */
11745
11746static const char *
26ca5450 11747prefix_name (int pref, int sizeflag)
7d421014 11748{
0003779b
L
11749 static const char *rexes [16] =
11750 {
11751 "rex", /* 0x40 */
11752 "rex.B", /* 0x41 */
11753 "rex.X", /* 0x42 */
11754 "rex.XB", /* 0x43 */
11755 "rex.R", /* 0x44 */
11756 "rex.RB", /* 0x45 */
11757 "rex.RX", /* 0x46 */
11758 "rex.RXB", /* 0x47 */
11759 "rex.W", /* 0x48 */
11760 "rex.WB", /* 0x49 */
11761 "rex.WX", /* 0x4a */
11762 "rex.WXB", /* 0x4b */
11763 "rex.WR", /* 0x4c */
11764 "rex.WRB", /* 0x4d */
11765 "rex.WRX", /* 0x4e */
11766 "rex.WRXB", /* 0x4f */
11767 };
11768
7d421014
ILT
11769 switch (pref)
11770 {
52b15da3
JH
11771 /* REX prefixes family. */
11772 case 0x40:
52b15da3 11773 case 0x41:
52b15da3 11774 case 0x42:
52b15da3 11775 case 0x43:
52b15da3 11776 case 0x44:
52b15da3 11777 case 0x45:
52b15da3 11778 case 0x46:
52b15da3 11779 case 0x47:
52b15da3 11780 case 0x48:
52b15da3 11781 case 0x49:
52b15da3 11782 case 0x4a:
52b15da3 11783 case 0x4b:
52b15da3 11784 case 0x4c:
52b15da3 11785 case 0x4d:
52b15da3 11786 case 0x4e:
52b15da3 11787 case 0x4f:
0003779b 11788 return rexes [pref - 0x40];
7d421014
ILT
11789 case 0xf3:
11790 return "repz";
11791 case 0xf2:
11792 return "repnz";
11793 case 0xf0:
11794 return "lock";
11795 case 0x2e:
11796 return "cs";
11797 case 0x36:
11798 return "ss";
11799 case 0x3e:
11800 return "ds";
11801 case 0x26:
11802 return "es";
11803 case 0x64:
11804 return "fs";
11805 case 0x65:
11806 return "gs";
11807 case 0x66:
11808 return (sizeflag & DFLAG) ? "data16" : "data32";
11809 case 0x67:
cb712a9e 11810 if (address_mode == mode_64bit)
db6eb5be 11811 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 11812 else
2888cb7a 11813 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
11814 case FWAIT_OPCODE:
11815 return "fwait";
f16cd0d5
L
11816 case ADDR16_PREFIX:
11817 return "addr16";
11818 case ADDR32_PREFIX:
11819 return "addr32";
11820 case DATA16_PREFIX:
11821 return "data16";
11822 case DATA32_PREFIX:
11823 return "data32";
11824 case REP_PREFIX:
11825 return "rep";
42164a71
L
11826 case XACQUIRE_PREFIX:
11827 return "xacquire";
11828 case XRELEASE_PREFIX:
11829 return "xrelease";
7e8b059b
L
11830 case BND_PREFIX:
11831 return "bnd";
7d421014
ILT
11832 default:
11833 return NULL;
11834 }
11835}
11836
ce518a5f
L
11837static char op_out[MAX_OPERANDS][100];
11838static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 11839static int two_source_ops;
ce518a5f
L
11840static bfd_vma op_address[MAX_OPERANDS];
11841static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 11842static bfd_vma start_pc;
ce518a5f 11843
252b5132
RH
11844/*
11845 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
11846 * (see topic "Redundant prefixes" in the "Differences from 8086"
11847 * section of the "Virtual 8086 Mode" chapter.)
11848 * 'pc' should be the address of this instruction, it will
11849 * be used to print the target address if this is a relative jump or call
11850 * The function returns the length of this instruction in bytes.
11851 */
11852
252b5132 11853static char intel_syntax;
9d141669 11854static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
11855static char open_char;
11856static char close_char;
11857static char separator_char;
11858static char scale_char;
11859
e396998b
AM
11860/* Here for backwards compatibility. When gdb stops using
11861 print_insn_i386_att and print_insn_i386_intel these functions can
11862 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 11863int
26ca5450 11864print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
11865{
11866 intel_syntax = 0;
e396998b
AM
11867
11868 return print_insn (pc, info);
252b5132
RH
11869}
11870
11871int
26ca5450 11872print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
11873{
11874 intel_syntax = 1;
e396998b
AM
11875
11876 return print_insn (pc, info);
252b5132
RH
11877}
11878
e396998b 11879int
26ca5450 11880print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
11881{
11882 intel_syntax = -1;
11883
11884 return print_insn (pc, info);
11885}
11886
f59a29b9
L
11887void
11888print_i386_disassembler_options (FILE *stream)
11889{
11890 fprintf (stream, _("\n\
11891The following i386/x86-64 specific disassembler options are supported for use\n\
11892with the -M switch (multiple options should be separated by commas):\n"));
11893
11894 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
11895 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
11896 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
11897 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
11898 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
11899 fprintf (stream, _(" att-mnemonic\n"
11900 " Display instruction in AT&T mnemonic\n"));
11901 fprintf (stream, _(" intel-mnemonic\n"
11902 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
11903 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
11904 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
11905 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
11906 fprintf (stream, _(" data32 Assume 32bit data size\n"));
11907 fprintf (stream, _(" data16 Assume 16bit data size\n"));
11908 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
11909}
11910
592d1631
L
11911/* Bad opcode. */
11912static const struct dis386 bad_opcode = { "(bad)", { XX } };
11913
b844680a
L
11914/* Get a pointer to struct dis386 with a valid name. */
11915
11916static const struct dis386 *
8bb15339 11917get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 11918{
91d6fa6a 11919 int vindex, vex_table_index;
b844680a
L
11920
11921 if (dp->name != NULL)
11922 return dp;
11923
11924 switch (dp->op[0].bytemode)
11925 {
1ceb70f8
L
11926 case USE_REG_TABLE:
11927 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
11928 break;
11929
11930 case USE_MOD_TABLE:
91d6fa6a
NC
11931 vindex = modrm.mod == 0x3 ? 1 : 0;
11932 dp = &mod_table[dp->op[1].bytemode][vindex];
1ceb70f8
L
11933 break;
11934
11935 case USE_RM_TABLE:
11936 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
11937 break;
11938
4e7d34a6 11939 case USE_PREFIX_TABLE:
c0f3af97 11940 if (need_vex)
b844680a 11941 {
c0f3af97
L
11942 /* The prefix in VEX is implicit. */
11943 switch (vex.prefix)
11944 {
11945 case 0:
91d6fa6a 11946 vindex = 0;
c0f3af97
L
11947 break;
11948 case REPE_PREFIX_OPCODE:
91d6fa6a 11949 vindex = 1;
c0f3af97
L
11950 break;
11951 case DATA_PREFIX_OPCODE:
91d6fa6a 11952 vindex = 2;
c0f3af97
L
11953 break;
11954 case REPNE_PREFIX_OPCODE:
91d6fa6a 11955 vindex = 3;
c0f3af97
L
11956 break;
11957 default:
11958 abort ();
11959 break;
11960 }
b844680a 11961 }
7bb15c6f 11962 else
b844680a 11963 {
91d6fa6a 11964 vindex = 0;
c0f3af97
L
11965 used_prefixes |= (prefixes & PREFIX_REPZ);
11966 if (prefixes & PREFIX_REPZ)
b844680a 11967 {
91d6fa6a 11968 vindex = 1;
f16cd0d5 11969 all_prefixes[last_repz_prefix] = 0;
b844680a
L
11970 }
11971 else
11972 {
c0f3af97
L
11973 /* We should check PREFIX_REPNZ and PREFIX_REPZ before
11974 PREFIX_DATA. */
11975 used_prefixes |= (prefixes & PREFIX_REPNZ);
11976 if (prefixes & PREFIX_REPNZ)
11977 {
91d6fa6a 11978 vindex = 3;
f16cd0d5 11979 all_prefixes[last_repnz_prefix] = 0;
c0f3af97
L
11980 }
11981 else
b844680a 11982 {
c0f3af97
L
11983 used_prefixes |= (prefixes & PREFIX_DATA);
11984 if (prefixes & PREFIX_DATA)
11985 {
91d6fa6a 11986 vindex = 2;
f16cd0d5 11987 all_prefixes[last_data_prefix] = 0;
c0f3af97 11988 }
b844680a
L
11989 }
11990 }
11991 }
91d6fa6a 11992 dp = &prefix_table[dp->op[1].bytemode][vindex];
b844680a
L
11993 break;
11994
4e7d34a6 11995 case USE_X86_64_TABLE:
91d6fa6a
NC
11996 vindex = address_mode == mode_64bit ? 1 : 0;
11997 dp = &x86_64_table[dp->op[1].bytemode][vindex];
b844680a
L
11998 break;
11999
4e7d34a6 12000 case USE_3BYTE_TABLE:
8bb15339 12001 FETCH_DATA (info, codep + 2);
91d6fa6a
NC
12002 vindex = *codep++;
12003 dp = &three_byte_table[dp->op[1].bytemode][vindex];
8bb15339
L
12004 modrm.mod = (*codep >> 6) & 3;
12005 modrm.reg = (*codep >> 3) & 7;
12006 modrm.rm = *codep & 7;
12007 break;
12008
c0f3af97
L
12009 case USE_VEX_LEN_TABLE:
12010 if (!need_vex)
12011 abort ();
12012
12013 switch (vex.length)
12014 {
12015 case 128:
91d6fa6a 12016 vindex = 0;
c0f3af97
L
12017 break;
12018 case 256:
91d6fa6a 12019 vindex = 1;
c0f3af97
L
12020 break;
12021 default:
12022 abort ();
12023 break;
12024 }
12025
91d6fa6a 12026 dp = &vex_len_table[dp->op[1].bytemode][vindex];
c0f3af97
L
12027 break;
12028
f88c9eb0
SP
12029 case USE_XOP_8F_TABLE:
12030 FETCH_DATA (info, codep + 3);
12031 /* All bits in the REX prefix are ignored. */
12032 rex_ignored = rex;
12033 rex = ~(*codep >> 5) & 0x7;
12034
12035 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
12036 switch ((*codep & 0x1f))
12037 {
12038 default:
f07af43e
L
12039 dp = &bad_opcode;
12040 return dp;
5dd85c99
SP
12041 case 0x8:
12042 vex_table_index = XOP_08;
12043 break;
f88c9eb0
SP
12044 case 0x9:
12045 vex_table_index = XOP_09;
12046 break;
12047 case 0xa:
12048 vex_table_index = XOP_0A;
12049 break;
12050 }
12051 codep++;
12052 vex.w = *codep & 0x80;
12053 if (vex.w && address_mode == mode_64bit)
12054 rex |= REX_W;
12055
12056 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12057 if (address_mode != mode_64bit
12058 && vex.register_specifier > 0x7)
f07af43e
L
12059 {
12060 dp = &bad_opcode;
12061 return dp;
12062 }
f88c9eb0
SP
12063
12064 vex.length = (*codep & 0x4) ? 256 : 128;
12065 switch ((*codep & 0x3))
12066 {
12067 case 0:
12068 vex.prefix = 0;
12069 break;
12070 case 1:
12071 vex.prefix = DATA_PREFIX_OPCODE;
12072 break;
12073 case 2:
12074 vex.prefix = REPE_PREFIX_OPCODE;
12075 break;
12076 case 3:
12077 vex.prefix = REPNE_PREFIX_OPCODE;
12078 break;
12079 }
12080 need_vex = 1;
12081 need_vex_reg = 1;
12082 codep++;
91d6fa6a
NC
12083 vindex = *codep++;
12084 dp = &xop_table[vex_table_index][vindex];
c48244a5
SP
12085
12086 FETCH_DATA (info, codep + 1);
12087 modrm.mod = (*codep >> 6) & 3;
12088 modrm.reg = (*codep >> 3) & 7;
12089 modrm.rm = *codep & 7;
f88c9eb0
SP
12090 break;
12091
c0f3af97 12092 case USE_VEX_C4_TABLE:
43234a1e 12093 /* VEX prefix. */
c0f3af97
L
12094 FETCH_DATA (info, codep + 3);
12095 /* All bits in the REX prefix are ignored. */
12096 rex_ignored = rex;
12097 rex = ~(*codep >> 5) & 0x7;
12098 switch ((*codep & 0x1f))
12099 {
12100 default:
f07af43e
L
12101 dp = &bad_opcode;
12102 return dp;
c0f3af97 12103 case 0x1:
f88c9eb0 12104 vex_table_index = VEX_0F;
c0f3af97
L
12105 break;
12106 case 0x2:
f88c9eb0 12107 vex_table_index = VEX_0F38;
c0f3af97
L
12108 break;
12109 case 0x3:
f88c9eb0 12110 vex_table_index = VEX_0F3A;
c0f3af97
L
12111 break;
12112 }
12113 codep++;
12114 vex.w = *codep & 0x80;
12115 if (vex.w && address_mode == mode_64bit)
12116 rex |= REX_W;
12117
12118 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12119 if (address_mode != mode_64bit
12120 && vex.register_specifier > 0x7)
f07af43e
L
12121 {
12122 dp = &bad_opcode;
12123 return dp;
12124 }
c0f3af97
L
12125
12126 vex.length = (*codep & 0x4) ? 256 : 128;
12127 switch ((*codep & 0x3))
12128 {
12129 case 0:
12130 vex.prefix = 0;
12131 break;
12132 case 1:
12133 vex.prefix = DATA_PREFIX_OPCODE;
12134 break;
12135 case 2:
12136 vex.prefix = REPE_PREFIX_OPCODE;
12137 break;
12138 case 3:
12139 vex.prefix = REPNE_PREFIX_OPCODE;
12140 break;
12141 }
12142 need_vex = 1;
12143 need_vex_reg = 1;
12144 codep++;
91d6fa6a
NC
12145 vindex = *codep++;
12146 dp = &vex_table[vex_table_index][vindex];
c0f3af97 12147 /* There is no MODRM byte for VEX [82|77]. */
91d6fa6a 12148 if (vindex != 0x77 && vindex != 0x82)
c0f3af97
L
12149 {
12150 FETCH_DATA (info, codep + 1);
12151 modrm.mod = (*codep >> 6) & 3;
12152 modrm.reg = (*codep >> 3) & 7;
12153 modrm.rm = *codep & 7;
12154 }
12155 break;
12156
12157 case USE_VEX_C5_TABLE:
43234a1e 12158 /* VEX prefix. */
c0f3af97
L
12159 FETCH_DATA (info, codep + 2);
12160 /* All bits in the REX prefix are ignored. */
12161 rex_ignored = rex;
12162 rex = (*codep & 0x80) ? 0 : REX_R;
12163
12164 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12165 if (address_mode != mode_64bit
12166 && vex.register_specifier > 0x7)
f07af43e
L
12167 {
12168 dp = &bad_opcode;
12169 return dp;
12170 }
c0f3af97 12171
759a05ce
L
12172 vex.w = 0;
12173
c0f3af97
L
12174 vex.length = (*codep & 0x4) ? 256 : 128;
12175 switch ((*codep & 0x3))
12176 {
12177 case 0:
12178 vex.prefix = 0;
12179 break;
12180 case 1:
12181 vex.prefix = DATA_PREFIX_OPCODE;
12182 break;
12183 case 2:
12184 vex.prefix = REPE_PREFIX_OPCODE;
12185 break;
12186 case 3:
12187 vex.prefix = REPNE_PREFIX_OPCODE;
12188 break;
12189 }
12190 need_vex = 1;
12191 need_vex_reg = 1;
12192 codep++;
91d6fa6a
NC
12193 vindex = *codep++;
12194 dp = &vex_table[dp->op[1].bytemode][vindex];
c0f3af97 12195 /* There is no MODRM byte for VEX [82|77]. */
91d6fa6a 12196 if (vindex != 0x77 && vindex != 0x82)
c0f3af97
L
12197 {
12198 FETCH_DATA (info, codep + 1);
12199 modrm.mod = (*codep >> 6) & 3;
12200 modrm.reg = (*codep >> 3) & 7;
12201 modrm.rm = *codep & 7;
12202 }
12203 break;
12204
9e30b8e0
L
12205 case USE_VEX_W_TABLE:
12206 if (!need_vex)
12207 abort ();
12208
12209 dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
12210 break;
12211
43234a1e
L
12212 case USE_EVEX_TABLE:
12213 two_source_ops = 0;
12214 /* EVEX prefix. */
12215 vex.evex = 1;
12216 FETCH_DATA (info, codep + 4);
12217 /* All bits in the REX prefix are ignored. */
12218 rex_ignored = rex;
12219 /* The first byte after 0x62. */
12220 rex = ~(*codep >> 5) & 0x7;
12221 vex.r = *codep & 0x10;
12222 switch ((*codep & 0xf))
12223 {
12224 default:
12225 return &bad_opcode;
12226 case 0x1:
12227 vex_table_index = EVEX_0F;
12228 break;
12229 case 0x2:
12230 vex_table_index = EVEX_0F38;
12231 break;
12232 case 0x3:
12233 vex_table_index = EVEX_0F3A;
12234 break;
12235 }
12236
12237 /* The second byte after 0x62. */
12238 codep++;
12239 vex.w = *codep & 0x80;
12240 if (vex.w && address_mode == mode_64bit)
12241 rex |= REX_W;
12242
12243 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12244 if (address_mode != mode_64bit)
12245 {
12246 /* In 16/32-bit mode silently ignore following bits. */
12247 rex &= ~REX_B;
12248 vex.r = 1;
12249 vex.v = 1;
12250 vex.register_specifier &= 0x7;
12251 }
12252
12253 /* The U bit. */
12254 if (!(*codep & 0x4))
12255 return &bad_opcode;
12256
12257 switch ((*codep & 0x3))
12258 {
12259 case 0:
12260 vex.prefix = 0;
12261 break;
12262 case 1:
12263 vex.prefix = DATA_PREFIX_OPCODE;
12264 break;
12265 case 2:
12266 vex.prefix = REPE_PREFIX_OPCODE;
12267 break;
12268 case 3:
12269 vex.prefix = REPNE_PREFIX_OPCODE;
12270 break;
12271 }
12272
12273 /* The third byte after 0x62. */
12274 codep++;
12275
12276 /* Remember the static rounding bits. */
12277 vex.ll = (*codep >> 5) & 3;
12278 vex.b = (*codep & 0x10) != 0;
12279
12280 vex.v = *codep & 0x8;
12281 vex.mask_register_specifier = *codep & 0x7;
12282 vex.zeroing = *codep & 0x80;
12283
12284 need_vex = 1;
12285 need_vex_reg = 1;
12286 codep++;
12287 vindex = *codep++;
12288 dp = &evex_table[vex_table_index][vindex];
12289 FETCH_DATA (info, codep + 1);
12290 modrm.mod = (*codep >> 6) & 3;
12291 modrm.reg = (*codep >> 3) & 7;
12292 modrm.rm = *codep & 7;
12293
12294 /* Set vector length. */
12295 if (modrm.mod == 3 && vex.b)
12296 vex.length = 512;
12297 else
12298 {
12299 switch (vex.ll)
12300 {
12301 case 0x0:
12302 vex.length = 128;
12303 break;
12304 case 0x1:
12305 vex.length = 256;
12306 break;
12307 case 0x2:
12308 vex.length = 512;
12309 break;
12310 default:
12311 return &bad_opcode;
12312 }
12313 }
12314 break;
12315
592d1631
L
12316 case 0:
12317 dp = &bad_opcode;
12318 break;
12319
b844680a 12320 default:
d34b5006 12321 abort ();
b844680a
L
12322 }
12323
12324 if (dp->name != NULL)
12325 return dp;
12326 else
8bb15339 12327 return get_valid_dis386 (dp, info);
b844680a
L
12328}
12329
dfc8cf43 12330static void
55cf16e1 12331get_sib (disassemble_info *info, int sizeflag)
dfc8cf43
L
12332{
12333 /* If modrm.mod == 3, operand must be register. */
12334 if (need_modrm
55cf16e1 12335 && ((sizeflag & AFLAG) || address_mode == mode_64bit)
dfc8cf43
L
12336 && modrm.mod != 3
12337 && modrm.rm == 4)
12338 {
12339 FETCH_DATA (info, codep + 2);
12340 sib.index = (codep [1] >> 3) & 7;
12341 sib.scale = (codep [1] >> 6) & 3;
12342 sib.base = codep [1] & 7;
12343 }
12344}
12345
e396998b 12346static int
26ca5450 12347print_insn (bfd_vma pc, disassemble_info *info)
252b5132 12348{
2da11e11 12349 const struct dis386 *dp;
252b5132 12350 int i;
ce518a5f 12351 char *op_txt[MAX_OPERANDS];
252b5132 12352 int needcomma;
e396998b
AM
12353 int sizeflag;
12354 const char *p;
252b5132 12355 struct dis_private priv;
f16cd0d5
L
12356 int prefix_length;
12357 int default_prefixes;
252b5132 12358
d7921315
L
12359 priv.orig_sizeflag = AFLAG | DFLAG;
12360 if ((info->mach & bfd_mach_i386_i386) != 0)
cb712a9e 12361 address_mode = mode_32bit;
2da11e11 12362 else if (info->mach == bfd_mach_i386_i8086)
d7921315
L
12363 {
12364 address_mode = mode_16bit;
12365 priv.orig_sizeflag = 0;
12366 }
2da11e11 12367 else
d7921315
L
12368 address_mode = mode_64bit;
12369
12370 if (intel_syntax == (char) -1)
12371 intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
e396998b
AM
12372
12373 for (p = info->disassembler_options; p != NULL; )
12374 {
0112cd26 12375 if (CONST_STRNEQ (p, "x86-64"))
e396998b 12376 {
cb712a9e 12377 address_mode = mode_64bit;
e396998b
AM
12378 priv.orig_sizeflag = AFLAG | DFLAG;
12379 }
0112cd26 12380 else if (CONST_STRNEQ (p, "i386"))
e396998b 12381 {
cb712a9e 12382 address_mode = mode_32bit;
e396998b
AM
12383 priv.orig_sizeflag = AFLAG | DFLAG;
12384 }
0112cd26 12385 else if (CONST_STRNEQ (p, "i8086"))
e396998b 12386 {
cb712a9e 12387 address_mode = mode_16bit;
e396998b
AM
12388 priv.orig_sizeflag = 0;
12389 }
0112cd26 12390 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
12391 {
12392 intel_syntax = 1;
9d141669
L
12393 if (CONST_STRNEQ (p + 5, "-mnemonic"))
12394 intel_mnemonic = 1;
e396998b 12395 }
0112cd26 12396 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
12397 {
12398 intel_syntax = 0;
9d141669
L
12399 if (CONST_STRNEQ (p + 3, "-mnemonic"))
12400 intel_mnemonic = 0;
e396998b 12401 }
0112cd26 12402 else if (CONST_STRNEQ (p, "addr"))
e396998b 12403 {
f59a29b9
L
12404 if (address_mode == mode_64bit)
12405 {
12406 if (p[4] == '3' && p[5] == '2')
12407 priv.orig_sizeflag &= ~AFLAG;
12408 else if (p[4] == '6' && p[5] == '4')
12409 priv.orig_sizeflag |= AFLAG;
12410 }
12411 else
12412 {
12413 if (p[4] == '1' && p[5] == '6')
12414 priv.orig_sizeflag &= ~AFLAG;
12415 else if (p[4] == '3' && p[5] == '2')
12416 priv.orig_sizeflag |= AFLAG;
12417 }
e396998b 12418 }
0112cd26 12419 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
12420 {
12421 if (p[4] == '1' && p[5] == '6')
12422 priv.orig_sizeflag &= ~DFLAG;
12423 else if (p[4] == '3' && p[5] == '2')
12424 priv.orig_sizeflag |= DFLAG;
12425 }
0112cd26 12426 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
12427 priv.orig_sizeflag |= SUFFIX_ALWAYS;
12428
12429 p = strchr (p, ',');
12430 if (p != NULL)
12431 p++;
12432 }
12433
12434 if (intel_syntax)
12435 {
12436 names64 = intel_names64;
12437 names32 = intel_names32;
12438 names16 = intel_names16;
12439 names8 = intel_names8;
12440 names8rex = intel_names8rex;
12441 names_seg = intel_names_seg;
b9733481 12442 names_mm = intel_names_mm;
7e8b059b 12443 names_bnd = intel_names_bnd;
b9733481
L
12444 names_xmm = intel_names_xmm;
12445 names_ymm = intel_names_ymm;
43234a1e 12446 names_zmm = intel_names_zmm;
db51cc60
L
12447 index64 = intel_index64;
12448 index32 = intel_index32;
43234a1e 12449 names_mask = intel_names_mask;
e396998b
AM
12450 index16 = intel_index16;
12451 open_char = '[';
12452 close_char = ']';
12453 separator_char = '+';
12454 scale_char = '*';
12455 }
12456 else
12457 {
12458 names64 = att_names64;
12459 names32 = att_names32;
12460 names16 = att_names16;
12461 names8 = att_names8;
12462 names8rex = att_names8rex;
12463 names_seg = att_names_seg;
b9733481 12464 names_mm = att_names_mm;
7e8b059b 12465 names_bnd = att_names_bnd;
b9733481
L
12466 names_xmm = att_names_xmm;
12467 names_ymm = att_names_ymm;
43234a1e 12468 names_zmm = att_names_zmm;
db51cc60
L
12469 index64 = att_index64;
12470 index32 = att_index32;
43234a1e 12471 names_mask = att_names_mask;
e396998b
AM
12472 index16 = att_index16;
12473 open_char = '(';
12474 close_char = ')';
12475 separator_char = ',';
12476 scale_char = ',';
12477 }
2da11e11 12478
4fe53c98 12479 /* The output looks better if we put 7 bytes on a line, since that
8a9036a4
L
12480 puts most long word instructions on a single line. Use 8 bytes
12481 for Intel L1OM. */
d7921315 12482 if ((info->mach & bfd_mach_l1om) != 0)
8a9036a4
L
12483 info->bytes_per_line = 8;
12484 else
12485 info->bytes_per_line = 7;
252b5132 12486
26ca5450 12487 info->private_data = &priv;
252b5132
RH
12488 priv.max_fetched = priv.the_buffer;
12489 priv.insn_start = pc;
252b5132
RH
12490
12491 obuf[0] = 0;
ce518a5f
L
12492 for (i = 0; i < MAX_OPERANDS; ++i)
12493 {
12494 op_out[i][0] = 0;
12495 op_index[i] = -1;
12496 }
252b5132
RH
12497
12498 the_info = info;
12499 start_pc = pc;
e396998b
AM
12500 start_codep = priv.the_buffer;
12501 codep = priv.the_buffer;
252b5132 12502
5076851f
ILT
12503 if (setjmp (priv.bailout) != 0)
12504 {
7d421014
ILT
12505 const char *name;
12506
5076851f 12507 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
12508 means we have an incomplete instruction of some sort. Just
12509 print the first byte as a prefix or a .byte pseudo-op. */
12510 if (codep > priv.the_buffer)
5076851f 12511 {
e396998b 12512 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
12513 if (name != NULL)
12514 (*info->fprintf_func) (info->stream, "%s", name);
12515 else
5076851f 12516 {
7d421014
ILT
12517 /* Just print the first byte as a .byte instruction. */
12518 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 12519 (unsigned int) priv.the_buffer[0]);
5076851f 12520 }
5076851f 12521
7d421014 12522 return 1;
5076851f
ILT
12523 }
12524
12525 return -1;
12526 }
12527
52b15da3 12528 obufp = obuf;
f16cd0d5
L
12529 sizeflag = priv.orig_sizeflag;
12530
12531 if (!ckprefix () || rex_used)
12532 {
12533 /* Too many prefixes or unused REX prefixes. */
12534 for (i = 0;
f6dd4781 12535 i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
f16cd0d5 12536 i++)
de882298 12537 (*info->fprintf_func) (info->stream, "%s%s",
6c067bbb 12538 i == 0 ? "" : " ",
f16cd0d5 12539 prefix_name (all_prefixes[i], sizeflag));
de882298 12540 return i;
f16cd0d5 12541 }
252b5132
RH
12542
12543 insn_codep = codep;
12544
12545 FETCH_DATA (info, codep + 1);
12546 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
12547
3e7d61b2 12548 if (((prefixes & PREFIX_FWAIT)
f16cd0d5 12549 && ((*codep < 0xd8) || (*codep > 0xdf))))
252b5132 12550 {
86a80a50
L
12551 /* Handle prefixes before fwait. */
12552 for (i = 0;
12553 i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
12554 i++)
12555 (*info->fprintf_func) (info->stream, "%s ",
12556 prefix_name (all_prefixes[i], sizeflag));
f16cd0d5 12557 (*info->fprintf_func) (info->stream, "fwait");
86a80a50 12558 return i + 1;
252b5132
RH
12559 }
12560
252b5132
RH
12561 if (*codep == 0x0f)
12562 {
eec0f4ca 12563 unsigned char threebyte;
252b5132 12564 FETCH_DATA (info, codep + 2);
eec0f4ca
L
12565 threebyte = *++codep;
12566 dp = &dis386_twobyte[threebyte];
252b5132 12567 need_modrm = twobyte_has_modrm[*codep];
eec0f4ca 12568 codep++;
252b5132
RH
12569 }
12570 else
12571 {
6439fc28 12572 dp = &dis386[*codep];
252b5132 12573 need_modrm = onebyte_has_modrm[*codep];
eec0f4ca 12574 codep++;
252b5132 12575 }
246c51aa 12576
b844680a 12577 if ((prefixes & PREFIX_REPZ))
f16cd0d5 12578 used_prefixes |= PREFIX_REPZ;
b844680a 12579 if ((prefixes & PREFIX_REPNZ))
f16cd0d5 12580 used_prefixes |= PREFIX_REPNZ;
b844680a 12581 if ((prefixes & PREFIX_LOCK))
f16cd0d5 12582 used_prefixes |= PREFIX_LOCK;
c608c12e 12583
f16cd0d5 12584 default_prefixes = 0;
c608c12e
AM
12585 if (prefixes & PREFIX_ADDR)
12586 {
12587 sizeflag ^= AFLAG;
ce518a5f 12588 if (dp->op[2].bytemode != loop_jcxz_mode || intel_syntax)
3ffd33cf 12589 {
cb712a9e 12590 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
f16cd0d5 12591 all_prefixes[last_addr_prefix] = ADDR32_PREFIX;
3ffd33cf 12592 else
f16cd0d5
L
12593 all_prefixes[last_addr_prefix] = ADDR16_PREFIX;
12594 default_prefixes |= PREFIX_ADDR;
3ffd33cf
AM
12595 }
12596 }
12597
b844680a 12598 if ((prefixes & PREFIX_DATA))
3ffd33cf
AM
12599 {
12600 sizeflag ^= DFLAG;
ce518a5f
L
12601 if (dp->op[2].bytemode == cond_jump_mode
12602 && dp->op[0].bytemode == v_mode
6439fc28 12603 && !intel_syntax)
3ffd33cf
AM
12604 {
12605 if (sizeflag & DFLAG)
f16cd0d5 12606 all_prefixes[last_data_prefix] = DATA32_PREFIX;
3ffd33cf 12607 else
f16cd0d5
L
12608 all_prefixes[last_data_prefix] = DATA16_PREFIX;
12609 default_prefixes |= PREFIX_DATA;
12610 }
12611 else if (rex & REX_W)
12612 {
12613 /* REX_W will override PREFIX_DATA. */
12614 default_prefixes |= PREFIX_DATA;
3ffd33cf
AM
12615 }
12616 }
12617
8bb15339 12618 if (need_modrm)
252b5132
RH
12619 {
12620 FETCH_DATA (info, codep + 1);
7967e09e
L
12621 modrm.mod = (*codep >> 6) & 3;
12622 modrm.reg = (*codep >> 3) & 7;
12623 modrm.rm = *codep & 7;
252b5132
RH
12624 }
12625
42d5f9c6
MS
12626 need_vex = 0;
12627 need_vex_reg = 0;
12628 vex_w_done = 0;
43234a1e 12629 vex.evex = 0;
55b126d4 12630
ce518a5f 12631 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132 12632 {
55cf16e1 12633 get_sib (info, sizeflag);
252b5132
RH
12634 dofloat (sizeflag);
12635 }
12636 else
12637 {
8bb15339 12638 dp = get_valid_dis386 (dp, info);
b844680a 12639 if (dp != NULL && putop (dp->name, sizeflag) == 0)
6c067bbb 12640 {
55cf16e1 12641 get_sib (info, sizeflag);
ce518a5f
L
12642 for (i = 0; i < MAX_OPERANDS; ++i)
12643 {
246c51aa 12644 obufp = op_out[i];
ce518a5f
L
12645 op_ad = MAX_OPERANDS - 1 - i;
12646 if (dp->op[i].rtn)
12647 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
43234a1e
L
12648 /* For EVEX instruction after the last operand masking
12649 should be printed. */
12650 if (i == 0 && vex.evex)
12651 {
12652 /* Don't print {%k0}. */
12653 if (vex.mask_register_specifier)
12654 {
12655 oappend ("{");
12656 oappend (names_mask[vex.mask_register_specifier]);
12657 oappend ("}");
12658 }
12659 if (vex.zeroing)
12660 oappend ("{z}");
12661 }
ce518a5f 12662 }
6439fc28 12663 }
252b5132
RH
12664 }
12665
7d421014
ILT
12666 /* See if any prefixes were not used. If so, print the first one
12667 separately. If we don't do this, we'll wind up printing an
12668 instruction stream which does not precisely correspond to the
12669 bytes we are disassembling. */
f16cd0d5 12670 if ((prefixes & ~(used_prefixes | default_prefixes)) != 0)
7d421014 12671 {
f16cd0d5
L
12672 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
12673 if (all_prefixes[i])
12674 {
12675 const char *name;
12676 name = prefix_name (all_prefixes[i], priv.orig_sizeflag);
12677 if (name == NULL)
12678 name = INTERNAL_DISASSEMBLER_ERROR;
12679 (*info->fprintf_func) (info->stream, "%s", name);
12680 return 1;
12681 }
52b15da3 12682 }
7d421014 12683
d869730d 12684 /* Check if the REX prefix is used. */
e2e6193d 12685 if (rex_ignored == 0 && (rex ^ rex_used) == 0 && last_rex_prefix >= 0)
f16cd0d5
L
12686 all_prefixes[last_rex_prefix] = 0;
12687
5e6718e4 12688 /* Check if the SEG prefix is used. */
f16cd0d5
L
12689 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
12690 | PREFIX_FS | PREFIX_GS)) != 0
12691 && (used_prefixes
12692 & seg_prefix (all_prefixes[last_seg_prefix])) != 0)
12693 all_prefixes[last_seg_prefix] = 0;
12694
5e6718e4 12695 /* Check if the ADDR prefix is used. */
f16cd0d5
L
12696 if ((prefixes & PREFIX_ADDR) != 0
12697 && (used_prefixes & PREFIX_ADDR) != 0)
12698 all_prefixes[last_addr_prefix] = 0;
12699
5e6718e4 12700 /* Check if the DATA prefix is used. */
f16cd0d5
L
12701 if ((prefixes & PREFIX_DATA) != 0
12702 && (used_prefixes & PREFIX_DATA) != 0)
12703 all_prefixes[last_data_prefix] = 0;
12704
12705 prefix_length = 0;
f310f33d 12706 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
f16cd0d5
L
12707 if (all_prefixes[i])
12708 {
12709 const char *name;
12710 name = prefix_name (all_prefixes[i], sizeflag);
12711 if (name == NULL)
12712 abort ();
12713 prefix_length += strlen (name) + 1;
12714 (*info->fprintf_func) (info->stream, "%s ", name);
12715 }
b844680a 12716
f16cd0d5
L
12717 /* Check maximum code length. */
12718 if ((codep - start_codep) > MAX_CODE_LENGTH)
12719 {
12720 (*info->fprintf_func) (info->stream, "(bad)");
12721 return MAX_CODE_LENGTH;
12722 }
b844680a 12723
ea397f5b 12724 obufp = mnemonicendp;
f16cd0d5 12725 for (i = strlen (obuf) + prefix_length; i < 6; i++)
252b5132
RH
12726 oappend (" ");
12727 oappend (" ");
12728 (*info->fprintf_func) (info->stream, "%s", obuf);
12729
12730 /* The enter and bound instructions are printed with operands in the same
12731 order as the intel book; everything else is printed in reverse order. */
2da11e11 12732 if (intel_syntax || two_source_ops)
252b5132 12733 {
185b1163
L
12734 bfd_vma riprel;
12735
ce518a5f 12736 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 12737 op_txt[i] = op_out[i];
246c51aa 12738
ce518a5f
L
12739 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
12740 {
6c067bbb
RM
12741 op_ad = op_index[i];
12742 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
12743 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
12744 riprel = op_riprel[i];
12745 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
12746 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 12747 }
252b5132
RH
12748 }
12749 else
12750 {
ce518a5f 12751 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 12752 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
12753 }
12754
ce518a5f
L
12755 needcomma = 0;
12756 for (i = 0; i < MAX_OPERANDS; ++i)
12757 if (*op_txt[i])
12758 {
12759 if (needcomma)
12760 (*info->fprintf_func) (info->stream, ",");
12761 if (op_index[i] != -1 && !op_riprel[i])
12762 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
12763 else
12764 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
12765 needcomma = 1;
12766 }
050dfa73 12767
ce518a5f 12768 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
12769 if (op_index[i] != -1 && op_riprel[i])
12770 {
12771 (*info->fprintf_func) (info->stream, " # ");
12772 (*info->print_address_func) ((bfd_vma) (start_pc + codep - start_codep
12773 + op_address[op_index[i]]), info);
185b1163 12774 break;
52b15da3 12775 }
e396998b 12776 return codep - priv.the_buffer;
252b5132
RH
12777}
12778
6439fc28 12779static const char *float_mem[] = {
252b5132 12780 /* d8 */
7c52e0e8
L
12781 "fadd{s|}",
12782 "fmul{s|}",
12783 "fcom{s|}",
12784 "fcomp{s|}",
12785 "fsub{s|}",
12786 "fsubr{s|}",
12787 "fdiv{s|}",
12788 "fdivr{s|}",
db6eb5be 12789 /* d9 */
7c52e0e8 12790 "fld{s|}",
252b5132 12791 "(bad)",
7c52e0e8
L
12792 "fst{s|}",
12793 "fstp{s|}",
9306ca4a 12794 "fldenvIC",
252b5132 12795 "fldcw",
9306ca4a 12796 "fNstenvIC",
252b5132
RH
12797 "fNstcw",
12798 /* da */
7c52e0e8
L
12799 "fiadd{l|}",
12800 "fimul{l|}",
12801 "ficom{l|}",
12802 "ficomp{l|}",
12803 "fisub{l|}",
12804 "fisubr{l|}",
12805 "fidiv{l|}",
12806 "fidivr{l|}",
252b5132 12807 /* db */
7c52e0e8
L
12808 "fild{l|}",
12809 "fisttp{l|}",
12810 "fist{l|}",
12811 "fistp{l|}",
252b5132 12812 "(bad)",
6439fc28 12813 "fld{t||t|}",
252b5132 12814 "(bad)",
6439fc28 12815 "fstp{t||t|}",
252b5132 12816 /* dc */
7c52e0e8
L
12817 "fadd{l|}",
12818 "fmul{l|}",
12819 "fcom{l|}",
12820 "fcomp{l|}",
12821 "fsub{l|}",
12822 "fsubr{l|}",
12823 "fdiv{l|}",
12824 "fdivr{l|}",
252b5132 12825 /* dd */
7c52e0e8
L
12826 "fld{l|}",
12827 "fisttp{ll|}",
12828 "fst{l||}",
12829 "fstp{l|}",
9306ca4a 12830 "frstorIC",
252b5132 12831 "(bad)",
9306ca4a 12832 "fNsaveIC",
252b5132
RH
12833 "fNstsw",
12834 /* de */
12835 "fiadd",
12836 "fimul",
12837 "ficom",
12838 "ficomp",
12839 "fisub",
12840 "fisubr",
12841 "fidiv",
12842 "fidivr",
12843 /* df */
12844 "fild",
ca164297 12845 "fisttp",
252b5132
RH
12846 "fist",
12847 "fistp",
12848 "fbld",
7c52e0e8 12849 "fild{ll|}",
252b5132 12850 "fbstp",
7c52e0e8 12851 "fistp{ll|}",
1d9f512f
AM
12852};
12853
12854static const unsigned char float_mem_mode[] = {
12855 /* d8 */
12856 d_mode,
12857 d_mode,
12858 d_mode,
12859 d_mode,
12860 d_mode,
12861 d_mode,
12862 d_mode,
12863 d_mode,
12864 /* d9 */
12865 d_mode,
12866 0,
12867 d_mode,
12868 d_mode,
12869 0,
12870 w_mode,
12871 0,
12872 w_mode,
12873 /* da */
12874 d_mode,
12875 d_mode,
12876 d_mode,
12877 d_mode,
12878 d_mode,
12879 d_mode,
12880 d_mode,
12881 d_mode,
12882 /* db */
12883 d_mode,
12884 d_mode,
12885 d_mode,
12886 d_mode,
12887 0,
9306ca4a 12888 t_mode,
1d9f512f 12889 0,
9306ca4a 12890 t_mode,
1d9f512f
AM
12891 /* dc */
12892 q_mode,
12893 q_mode,
12894 q_mode,
12895 q_mode,
12896 q_mode,
12897 q_mode,
12898 q_mode,
12899 q_mode,
12900 /* dd */
12901 q_mode,
12902 q_mode,
12903 q_mode,
12904 q_mode,
12905 0,
12906 0,
12907 0,
12908 w_mode,
12909 /* de */
12910 w_mode,
12911 w_mode,
12912 w_mode,
12913 w_mode,
12914 w_mode,
12915 w_mode,
12916 w_mode,
12917 w_mode,
12918 /* df */
12919 w_mode,
12920 w_mode,
12921 w_mode,
12922 w_mode,
9306ca4a 12923 t_mode,
1d9f512f 12924 q_mode,
9306ca4a 12925 t_mode,
1d9f512f 12926 q_mode
252b5132
RH
12927};
12928
ce518a5f
L
12929#define ST { OP_ST, 0 }
12930#define STi { OP_STi, 0 }
252b5132 12931
4efba78c
L
12932#define FGRPd9_2 NULL, { { NULL, 0 } }
12933#define FGRPd9_4 NULL, { { NULL, 1 } }
12934#define FGRPd9_5 NULL, { { NULL, 2 } }
12935#define FGRPd9_6 NULL, { { NULL, 3 } }
12936#define FGRPd9_7 NULL, { { NULL, 4 } }
12937#define FGRPda_5 NULL, { { NULL, 5 } }
12938#define FGRPdb_4 NULL, { { NULL, 6 } }
12939#define FGRPde_3 NULL, { { NULL, 7 } }
12940#define FGRPdf_4 NULL, { { NULL, 8 } }
252b5132 12941
2da11e11 12942static const struct dis386 float_reg[][8] = {
252b5132
RH
12943 /* d8 */
12944 {
ce518a5f
L
12945 { "fadd", { ST, STi } },
12946 { "fmul", { ST, STi } },
12947 { "fcom", { STi } },
12948 { "fcomp", { STi } },
12949 { "fsub", { ST, STi } },
12950 { "fsubr", { ST, STi } },
12951 { "fdiv", { ST, STi } },
12952 { "fdivr", { ST, STi } },
252b5132
RH
12953 },
12954 /* d9 */
12955 {
ce518a5f
L
12956 { "fld", { STi } },
12957 { "fxch", { STi } },
252b5132 12958 { FGRPd9_2 },
592d1631 12959 { Bad_Opcode },
252b5132
RH
12960 { FGRPd9_4 },
12961 { FGRPd9_5 },
12962 { FGRPd9_6 },
12963 { FGRPd9_7 },
12964 },
12965 /* da */
12966 {
ce518a5f
L
12967 { "fcmovb", { ST, STi } },
12968 { "fcmove", { ST, STi } },
12969 { "fcmovbe",{ ST, STi } },
12970 { "fcmovu", { ST, STi } },
592d1631 12971 { Bad_Opcode },
252b5132 12972 { FGRPda_5 },
592d1631
L
12973 { Bad_Opcode },
12974 { Bad_Opcode },
252b5132
RH
12975 },
12976 /* db */
12977 {
ce518a5f
L
12978 { "fcmovnb",{ ST, STi } },
12979 { "fcmovne",{ ST, STi } },
12980 { "fcmovnbe",{ ST, STi } },
12981 { "fcmovnu",{ ST, STi } },
252b5132 12982 { FGRPdb_4 },
ce518a5f
L
12983 { "fucomi", { ST, STi } },
12984 { "fcomi", { ST, STi } },
592d1631 12985 { Bad_Opcode },
252b5132
RH
12986 },
12987 /* dc */
12988 {
ce518a5f
L
12989 { "fadd", { STi, ST } },
12990 { "fmul", { STi, ST } },
592d1631
L
12991 { Bad_Opcode },
12992 { Bad_Opcode },
9d141669
L
12993 { "fsub!M", { STi, ST } },
12994 { "fsubM", { STi, ST } },
12995 { "fdiv!M", { STi, ST } },
12996 { "fdivM", { STi, ST } },
252b5132
RH
12997 },
12998 /* dd */
12999 {
ce518a5f 13000 { "ffree", { STi } },
592d1631 13001 { Bad_Opcode },
ce518a5f
L
13002 { "fst", { STi } },
13003 { "fstp", { STi } },
13004 { "fucom", { STi } },
13005 { "fucomp", { STi } },
592d1631
L
13006 { Bad_Opcode },
13007 { Bad_Opcode },
252b5132
RH
13008 },
13009 /* de */
13010 {
ce518a5f
L
13011 { "faddp", { STi, ST } },
13012 { "fmulp", { STi, ST } },
592d1631 13013 { Bad_Opcode },
252b5132 13014 { FGRPde_3 },
9d141669
L
13015 { "fsub!Mp", { STi, ST } },
13016 { "fsubMp", { STi, ST } },
13017 { "fdiv!Mp", { STi, ST } },
13018 { "fdivMp", { STi, ST } },
252b5132
RH
13019 },
13020 /* df */
13021 {
ce518a5f 13022 { "ffreep", { STi } },
592d1631
L
13023 { Bad_Opcode },
13024 { Bad_Opcode },
13025 { Bad_Opcode },
252b5132 13026 { FGRPdf_4 },
ce518a5f
L
13027 { "fucomip", { ST, STi } },
13028 { "fcomip", { ST, STi } },
592d1631 13029 { Bad_Opcode },
252b5132
RH
13030 },
13031};
13032
252b5132
RH
13033static char *fgrps[][8] = {
13034 /* d9_2 0 */
13035 {
13036 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13037 },
13038
13039 /* d9_4 1 */
13040 {
13041 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
13042 },
13043
13044 /* d9_5 2 */
13045 {
13046 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
13047 },
13048
13049 /* d9_6 3 */
13050 {
13051 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
13052 },
13053
13054 /* d9_7 4 */
13055 {
13056 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
13057 },
13058
13059 /* da_5 5 */
13060 {
13061 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13062 },
13063
13064 /* db_4 6 */
13065 {
309d3373
JB
13066 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
13067 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
252b5132
RH
13068 },
13069
13070 /* de_3 7 */
13071 {
13072 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13073 },
13074
13075 /* df_4 8 */
13076 {
13077 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13078 },
13079};
13080
b6169b20
L
13081static void
13082swap_operand (void)
13083{
13084 mnemonicendp[0] = '.';
13085 mnemonicendp[1] = 's';
13086 mnemonicendp += 2;
13087}
13088
b844680a
L
13089static void
13090OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
13091 int sizeflag ATTRIBUTE_UNUSED)
13092{
13093 /* Skip mod/rm byte. */
13094 MODRM_CHECK;
13095 codep++;
13096}
13097
252b5132 13098static void
26ca5450 13099dofloat (int sizeflag)
252b5132 13100{
2da11e11 13101 const struct dis386 *dp;
252b5132
RH
13102 unsigned char floatop;
13103
13104 floatop = codep[-1];
13105
7967e09e 13106 if (modrm.mod != 3)
252b5132 13107 {
7967e09e 13108 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
13109
13110 putop (float_mem[fp_indx], sizeflag);
ce518a5f 13111 obufp = op_out[0];
6e50d963 13112 op_ad = 2;
1d9f512f 13113 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
13114 return;
13115 }
6608db57 13116 /* Skip mod/rm byte. */
4bba6815 13117 MODRM_CHECK;
252b5132
RH
13118 codep++;
13119
7967e09e 13120 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
13121 if (dp->name == NULL)
13122 {
7967e09e 13123 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 13124
6608db57 13125 /* Instruction fnstsw is only one with strange arg. */
252b5132 13126 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 13127 strcpy (op_out[0], names16[0]);
252b5132
RH
13128 }
13129 else
13130 {
13131 putop (dp->name, sizeflag);
13132
ce518a5f 13133 obufp = op_out[0];
6e50d963 13134 op_ad = 2;
ce518a5f
L
13135 if (dp->op[0].rtn)
13136 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 13137
ce518a5f 13138 obufp = op_out[1];
6e50d963 13139 op_ad = 1;
ce518a5f
L
13140 if (dp->op[1].rtn)
13141 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
13142 }
13143}
13144
9ce09ba2
RM
13145/* Like oappend (below), but S is a string starting with '%'.
13146 In Intel syntax, the '%' is elided. */
13147static void
13148oappend_maybe_intel (const char *s)
13149{
13150 oappend (s + intel_syntax);
13151}
13152
252b5132 13153static void
26ca5450 13154OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13155{
9ce09ba2 13156 oappend_maybe_intel ("%st");
252b5132
RH
13157}
13158
252b5132 13159static void
26ca5450 13160OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13161{
7967e09e 13162 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
9ce09ba2 13163 oappend_maybe_intel (scratchbuf);
252b5132
RH
13164}
13165
6608db57 13166/* Capital letters in template are macros. */
6439fc28 13167static int
d3ce72d0 13168putop (const char *in_template, int sizeflag)
252b5132 13169{
2da11e11 13170 const char *p;
9306ca4a 13171 int alt = 0;
9d141669 13172 int cond = 1;
98b528ac
L
13173 unsigned int l = 0, len = 1;
13174 char last[4];
13175
13176#define SAVE_LAST(c) \
13177 if (l < len && l < sizeof (last)) \
13178 last[l++] = c; \
13179 else \
13180 abort ();
252b5132 13181
d3ce72d0 13182 for (p = in_template; *p; p++)
252b5132
RH
13183 {
13184 switch (*p)
13185 {
13186 default:
13187 *obufp++ = *p;
13188 break;
98b528ac
L
13189 case '%':
13190 len++;
13191 break;
9d141669
L
13192 case '!':
13193 cond = 0;
13194 break;
6439fc28
AM
13195 case '{':
13196 alt = 0;
13197 if (intel_syntax)
6439fc28
AM
13198 {
13199 while (*++p != '|')
7c52e0e8
L
13200 if (*p == '}' || *p == '\0')
13201 abort ();
6439fc28 13202 }
9306ca4a
JB
13203 /* Fall through. */
13204 case 'I':
13205 alt = 1;
13206 continue;
6439fc28
AM
13207 case '|':
13208 while (*++p != '}')
13209 {
13210 if (*p == '\0')
13211 abort ();
13212 }
13213 break;
13214 case '}':
13215 break;
252b5132 13216 case 'A':
db6eb5be
AM
13217 if (intel_syntax)
13218 break;
7967e09e 13219 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
13220 *obufp++ = 'b';
13221 break;
13222 case 'B':
4b06377f
L
13223 if (l == 0 && len == 1)
13224 {
13225case_B:
13226 if (intel_syntax)
13227 break;
13228 if (sizeflag & SUFFIX_ALWAYS)
13229 *obufp++ = 'b';
13230 }
13231 else
13232 {
13233 if (l != 1
13234 || len != 2
13235 || last[0] != 'L')
13236 {
13237 SAVE_LAST (*p);
13238 break;
13239 }
13240
13241 if (address_mode == mode_64bit
13242 && !(prefixes & PREFIX_ADDR))
13243 {
13244 *obufp++ = 'a';
13245 *obufp++ = 'b';
13246 *obufp++ = 's';
13247 }
13248
13249 goto case_B;
13250 }
252b5132 13251 break;
9306ca4a
JB
13252 case 'C':
13253 if (intel_syntax && !alt)
13254 break;
13255 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
13256 {
13257 if (sizeflag & DFLAG)
13258 *obufp++ = intel_syntax ? 'd' : 'l';
13259 else
13260 *obufp++ = intel_syntax ? 'w' : 's';
13261 used_prefixes |= (prefixes & PREFIX_DATA);
13262 }
13263 break;
ed7841b3
JB
13264 case 'D':
13265 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
13266 break;
161a04f6 13267 USED_REX (REX_W);
7967e09e 13268 if (modrm.mod == 3)
ed7841b3 13269 {
161a04f6 13270 if (rex & REX_W)
ed7841b3 13271 *obufp++ = 'q';
ed7841b3 13272 else
f16cd0d5
L
13273 {
13274 if (sizeflag & DFLAG)
13275 *obufp++ = intel_syntax ? 'd' : 'l';
13276 else
13277 *obufp++ = 'w';
13278 used_prefixes |= (prefixes & PREFIX_DATA);
13279 }
ed7841b3
JB
13280 }
13281 else
13282 *obufp++ = 'w';
13283 break;
252b5132 13284 case 'E': /* For jcxz/jecxz */
cb712a9e 13285 if (address_mode == mode_64bit)
c1a64871
JH
13286 {
13287 if (sizeflag & AFLAG)
13288 *obufp++ = 'r';
13289 else
13290 *obufp++ = 'e';
13291 }
13292 else
13293 if (sizeflag & AFLAG)
13294 *obufp++ = 'e';
3ffd33cf
AM
13295 used_prefixes |= (prefixes & PREFIX_ADDR);
13296 break;
13297 case 'F':
db6eb5be
AM
13298 if (intel_syntax)
13299 break;
e396998b 13300 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
13301 {
13302 if (sizeflag & AFLAG)
cb712a9e 13303 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 13304 else
cb712a9e 13305 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
13306 used_prefixes |= (prefixes & PREFIX_ADDR);
13307 }
252b5132 13308 break;
52fd6d94
JB
13309 case 'G':
13310 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
13311 break;
161a04f6 13312 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
13313 *obufp++ = 'l';
13314 else
13315 *obufp++ = 'w';
161a04f6 13316 if (!(rex & REX_W))
52fd6d94
JB
13317 used_prefixes |= (prefixes & PREFIX_DATA);
13318 break;
5dd0794d 13319 case 'H':
db6eb5be
AM
13320 if (intel_syntax)
13321 break;
5dd0794d
AM
13322 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
13323 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
13324 {
13325 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
13326 *obufp++ = ',';
13327 *obufp++ = 'p';
13328 if (prefixes & PREFIX_DS)
13329 *obufp++ = 't';
13330 else
13331 *obufp++ = 'n';
13332 }
13333 break;
9306ca4a
JB
13334 case 'J':
13335 if (intel_syntax)
13336 break;
13337 *obufp++ = 'l';
13338 break;
42903f7f
L
13339 case 'K':
13340 USED_REX (REX_W);
13341 if (rex & REX_W)
13342 *obufp++ = 'q';
13343 else
13344 *obufp++ = 'd';
13345 break;
6dd5059a
L
13346 case 'Z':
13347 if (intel_syntax)
13348 break;
13349 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
13350 {
13351 *obufp++ = 'q';
13352 break;
13353 }
13354 /* Fall through. */
98b528ac 13355 goto case_L;
252b5132 13356 case 'L':
98b528ac
L
13357 if (l != 0 || len != 1)
13358 {
13359 SAVE_LAST (*p);
13360 break;
13361 }
13362case_L:
db6eb5be
AM
13363 if (intel_syntax)
13364 break;
252b5132
RH
13365 if (sizeflag & SUFFIX_ALWAYS)
13366 *obufp++ = 'l';
252b5132 13367 break;
9d141669
L
13368 case 'M':
13369 if (intel_mnemonic != cond)
13370 *obufp++ = 'r';
13371 break;
252b5132
RH
13372 case 'N':
13373 if ((prefixes & PREFIX_FWAIT) == 0)
13374 *obufp++ = 'n';
7d421014
ILT
13375 else
13376 used_prefixes |= PREFIX_FWAIT;
252b5132 13377 break;
52b15da3 13378 case 'O':
161a04f6
L
13379 USED_REX (REX_W);
13380 if (rex & REX_W)
6439fc28 13381 *obufp++ = 'o';
a35ca55a
JB
13382 else if (intel_syntax && (sizeflag & DFLAG))
13383 *obufp++ = 'q';
52b15da3
JH
13384 else
13385 *obufp++ = 'd';
161a04f6 13386 if (!(rex & REX_W))
a35ca55a 13387 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 13388 break;
6439fc28 13389 case 'T':
d9e3625e
L
13390 if (!intel_syntax
13391 && address_mode == mode_64bit
7bb15c6f 13392 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
13393 {
13394 *obufp++ = 'q';
13395 break;
13396 }
6608db57 13397 /* Fall through. */
252b5132 13398 case 'P':
db6eb5be 13399 if (intel_syntax)
d9e3625e
L
13400 {
13401 if ((rex & REX_W) == 0
13402 && (prefixes & PREFIX_DATA))
13403 {
13404 if ((sizeflag & DFLAG) == 0)
13405 *obufp++ = 'w';
13406 used_prefixes |= (prefixes & PREFIX_DATA);
13407 }
13408 break;
13409 }
252b5132 13410 if ((prefixes & PREFIX_DATA)
161a04f6 13411 || (rex & REX_W)
e396998b 13412 || (sizeflag & SUFFIX_ALWAYS))
252b5132 13413 {
161a04f6
L
13414 USED_REX (REX_W);
13415 if (rex & REX_W)
52b15da3 13416 *obufp++ = 'q';
c2419411 13417 else
52b15da3
JH
13418 {
13419 if (sizeflag & DFLAG)
13420 *obufp++ = 'l';
13421 else
13422 *obufp++ = 'w';
f16cd0d5 13423 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 13424 }
252b5132
RH
13425 }
13426 break;
6439fc28 13427 case 'U':
db6eb5be
AM
13428 if (intel_syntax)
13429 break;
7bb15c6f 13430 if (address_mode == mode_64bit
6c067bbb 13431 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28 13432 {
7967e09e 13433 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 13434 *obufp++ = 'q';
6439fc28
AM
13435 break;
13436 }
6608db57 13437 /* Fall through. */
98b528ac 13438 goto case_Q;
252b5132 13439 case 'Q':
98b528ac 13440 if (l == 0 && len == 1)
252b5132 13441 {
98b528ac
L
13442case_Q:
13443 if (intel_syntax && !alt)
13444 break;
13445 USED_REX (REX_W);
13446 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 13447 {
98b528ac
L
13448 if (rex & REX_W)
13449 *obufp++ = 'q';
52b15da3 13450 else
98b528ac
L
13451 {
13452 if (sizeflag & DFLAG)
13453 *obufp++ = intel_syntax ? 'd' : 'l';
13454 else
13455 *obufp++ = 'w';
f16cd0d5 13456 used_prefixes |= (prefixes & PREFIX_DATA);
98b528ac 13457 }
52b15da3 13458 }
98b528ac
L
13459 }
13460 else
13461 {
13462 if (l != 1 || len != 2 || last[0] != 'L')
13463 {
13464 SAVE_LAST (*p);
13465 break;
13466 }
13467 if (intel_syntax
13468 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
13469 break;
13470 if ((rex & REX_W))
13471 {
13472 USED_REX (REX_W);
13473 *obufp++ = 'q';
13474 }
13475 else
13476 *obufp++ = 'l';
252b5132
RH
13477 }
13478 break;
13479 case 'R':
161a04f6
L
13480 USED_REX (REX_W);
13481 if (rex & REX_W)
a35ca55a
JB
13482 *obufp++ = 'q';
13483 else if (sizeflag & DFLAG)
c608c12e 13484 {
a35ca55a 13485 if (intel_syntax)
c608c12e 13486 *obufp++ = 'd';
c608c12e 13487 else
a35ca55a 13488 *obufp++ = 'l';
c608c12e 13489 }
252b5132 13490 else
a35ca55a
JB
13491 *obufp++ = 'w';
13492 if (intel_syntax && !p[1]
161a04f6 13493 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 13494 *obufp++ = 'e';
161a04f6 13495 if (!(rex & REX_W))
52b15da3 13496 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 13497 break;
1a114b12 13498 case 'V':
4b06377f 13499 if (l == 0 && len == 1)
1a114b12 13500 {
4b06377f
L
13501 if (intel_syntax)
13502 break;
7bb15c6f 13503 if (address_mode == mode_64bit
6c067bbb 13504 && ((sizeflag & DFLAG) || (rex & REX_W)))
4b06377f
L
13505 {
13506 if (sizeflag & SUFFIX_ALWAYS)
13507 *obufp++ = 'q';
13508 break;
13509 }
13510 }
13511 else
13512 {
13513 if (l != 1
13514 || len != 2
13515 || last[0] != 'L')
13516 {
13517 SAVE_LAST (*p);
13518 break;
13519 }
13520
13521 if (rex & REX_W)
13522 {
13523 *obufp++ = 'a';
13524 *obufp++ = 'b';
13525 *obufp++ = 's';
13526 }
1a114b12
JB
13527 }
13528 /* Fall through. */
4b06377f 13529 goto case_S;
252b5132 13530 case 'S':
4b06377f 13531 if (l == 0 && len == 1)
252b5132 13532 {
4b06377f
L
13533case_S:
13534 if (intel_syntax)
13535 break;
13536 if (sizeflag & SUFFIX_ALWAYS)
52b15da3 13537 {
4b06377f
L
13538 if (rex & REX_W)
13539 *obufp++ = 'q';
52b15da3 13540 else
4b06377f
L
13541 {
13542 if (sizeflag & DFLAG)
13543 *obufp++ = 'l';
13544 else
13545 *obufp++ = 'w';
13546 used_prefixes |= (prefixes & PREFIX_DATA);
13547 }
13548 }
13549 }
13550 else
13551 {
13552 if (l != 1
13553 || len != 2
13554 || last[0] != 'L')
13555 {
13556 SAVE_LAST (*p);
13557 break;
52b15da3 13558 }
4b06377f
L
13559
13560 if (address_mode == mode_64bit
13561 && !(prefixes & PREFIX_ADDR))
13562 {
13563 *obufp++ = 'a';
13564 *obufp++ = 'b';
13565 *obufp++ = 's';
13566 }
13567
13568 goto case_S;
252b5132 13569 }
252b5132 13570 break;
041bd2e0 13571 case 'X':
c0f3af97
L
13572 if (l != 0 || len != 1)
13573 {
13574 SAVE_LAST (*p);
13575 break;
13576 }
13577 if (need_vex && vex.prefix)
13578 {
13579 if (vex.prefix == DATA_PREFIX_OPCODE)
13580 *obufp++ = 'd';
13581 else
13582 *obufp++ = 's';
13583 }
041bd2e0 13584 else
f16cd0d5
L
13585 {
13586 if (prefixes & PREFIX_DATA)
13587 *obufp++ = 'd';
13588 else
13589 *obufp++ = 's';
13590 used_prefixes |= (prefixes & PREFIX_DATA);
13591 }
041bd2e0 13592 break;
76f227a5 13593 case 'Y':
c0f3af97 13594 if (l == 0 && len == 1)
76f227a5 13595 {
c0f3af97
L
13596 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
13597 break;
13598 if (rex & REX_W)
13599 {
13600 USED_REX (REX_W);
13601 *obufp++ = 'q';
13602 }
13603 break;
13604 }
13605 else
13606 {
13607 if (l != 1 || len != 2 || last[0] != 'X')
13608 {
13609 SAVE_LAST (*p);
13610 break;
13611 }
13612 if (!need_vex)
13613 abort ();
13614 if (intel_syntax
13615 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
13616 break;
13617 switch (vex.length)
13618 {
13619 case 128:
13620 *obufp++ = 'x';
13621 break;
13622 case 256:
13623 *obufp++ = 'y';
13624 break;
13625 default:
13626 abort ();
13627 }
76f227a5
JH
13628 }
13629 break;
252b5132 13630 case 'W':
0bfee649 13631 if (l == 0 && len == 1)
a35ca55a 13632 {
0bfee649
L
13633 /* operand size flag for cwtl, cbtw */
13634 USED_REX (REX_W);
13635 if (rex & REX_W)
13636 {
13637 if (intel_syntax)
13638 *obufp++ = 'd';
13639 else
13640 *obufp++ = 'l';
13641 }
13642 else if (sizeflag & DFLAG)
13643 *obufp++ = 'w';
a35ca55a 13644 else
0bfee649
L
13645 *obufp++ = 'b';
13646 if (!(rex & REX_W))
13647 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 13648 }
252b5132 13649 else
0bfee649 13650 {
6c30d220
L
13651 if (l != 1
13652 || len != 2
13653 || (last[0] != 'X'
13654 && last[0] != 'L'))
0bfee649
L
13655 {
13656 SAVE_LAST (*p);
13657 break;
13658 }
13659 if (!need_vex)
13660 abort ();
6c30d220
L
13661 if (last[0] == 'X')
13662 *obufp++ = vex.w ? 'd': 's';
13663 else
13664 *obufp++ = vex.w ? 'q': 'd';
0bfee649 13665 }
252b5132
RH
13666 break;
13667 }
9306ca4a 13668 alt = 0;
252b5132
RH
13669 }
13670 *obufp = 0;
ea397f5b 13671 mnemonicendp = obufp;
6439fc28 13672 return 0;
252b5132
RH
13673}
13674
13675static void
26ca5450 13676oappend (const char *s)
252b5132 13677{
ea397f5b 13678 obufp = stpcpy (obufp, s);
252b5132
RH
13679}
13680
13681static void
26ca5450 13682append_seg (void)
252b5132
RH
13683{
13684 if (prefixes & PREFIX_CS)
7d421014 13685 {
7d421014 13686 used_prefixes |= PREFIX_CS;
9ce09ba2 13687 oappend_maybe_intel ("%cs:");
7d421014 13688 }
252b5132 13689 if (prefixes & PREFIX_DS)
7d421014 13690 {
7d421014 13691 used_prefixes |= PREFIX_DS;
9ce09ba2 13692 oappend_maybe_intel ("%ds:");
7d421014 13693 }
252b5132 13694 if (prefixes & PREFIX_SS)
7d421014 13695 {
7d421014 13696 used_prefixes |= PREFIX_SS;
9ce09ba2 13697 oappend_maybe_intel ("%ss:");
7d421014 13698 }
252b5132 13699 if (prefixes & PREFIX_ES)
7d421014 13700 {
7d421014 13701 used_prefixes |= PREFIX_ES;
9ce09ba2 13702 oappend_maybe_intel ("%es:");
7d421014 13703 }
252b5132 13704 if (prefixes & PREFIX_FS)
7d421014 13705 {
7d421014 13706 used_prefixes |= PREFIX_FS;
9ce09ba2 13707 oappend_maybe_intel ("%fs:");
7d421014 13708 }
252b5132 13709 if (prefixes & PREFIX_GS)
7d421014 13710 {
7d421014 13711 used_prefixes |= PREFIX_GS;
9ce09ba2 13712 oappend_maybe_intel ("%gs:");
7d421014 13713 }
252b5132
RH
13714}
13715
13716static void
26ca5450 13717OP_indirE (int bytemode, int sizeflag)
252b5132
RH
13718{
13719 if (!intel_syntax)
13720 oappend ("*");
13721 OP_E (bytemode, sizeflag);
13722}
13723
52b15da3 13724static void
26ca5450 13725print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 13726{
cb712a9e 13727 if (address_mode == mode_64bit)
52b15da3
JH
13728 {
13729 if (hex)
13730 {
13731 char tmp[30];
13732 int i;
13733 buf[0] = '0';
13734 buf[1] = 'x';
13735 sprintf_vma (tmp, disp);
6608db57 13736 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
13737 strcpy (buf + 2, tmp + i);
13738 }
13739 else
13740 {
13741 bfd_signed_vma v = disp;
13742 char tmp[30];
13743 int i;
13744 if (v < 0)
13745 {
13746 *(buf++) = '-';
13747 v = -disp;
6608db57 13748 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
13749 if (v < 0)
13750 {
13751 strcpy (buf, "9223372036854775808");
13752 return;
13753 }
13754 }
13755 if (!v)
13756 {
13757 strcpy (buf, "0");
13758 return;
13759 }
13760
13761 i = 0;
13762 tmp[29] = 0;
13763 while (v)
13764 {
6608db57 13765 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
13766 v /= 10;
13767 i++;
13768 }
13769 strcpy (buf, tmp + 29 - i);
13770 }
13771 }
13772 else
13773 {
13774 if (hex)
13775 sprintf (buf, "0x%x", (unsigned int) disp);
13776 else
13777 sprintf (buf, "%d", (int) disp);
13778 }
13779}
13780
5d669648
L
13781/* Put DISP in BUF as signed hex number. */
13782
13783static void
13784print_displacement (char *buf, bfd_vma disp)
13785{
13786 bfd_signed_vma val = disp;
13787 char tmp[30];
13788 int i, j = 0;
13789
13790 if (val < 0)
13791 {
13792 buf[j++] = '-';
13793 val = -disp;
13794
13795 /* Check for possible overflow. */
13796 if (val < 0)
13797 {
13798 switch (address_mode)
13799 {
13800 case mode_64bit:
13801 strcpy (buf + j, "0x8000000000000000");
13802 break;
13803 case mode_32bit:
13804 strcpy (buf + j, "0x80000000");
13805 break;
13806 case mode_16bit:
13807 strcpy (buf + j, "0x8000");
13808 break;
13809 }
13810 return;
13811 }
13812 }
13813
13814 buf[j++] = '0';
13815 buf[j++] = 'x';
13816
0af1713e 13817 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
13818 for (i = 0; tmp[i] == '0'; i++)
13819 continue;
13820 if (tmp[i] == '\0')
13821 i--;
13822 strcpy (buf + j, tmp + i);
13823}
13824
3f31e633
JB
13825static void
13826intel_operand_size (int bytemode, int sizeflag)
13827{
43234a1e
L
13828 if (vex.evex
13829 && vex.b
13830 && (bytemode == x_mode
13831 || bytemode == evex_half_bcst_xmmq_mode))
13832 {
13833 if (vex.w)
13834 oappend ("QWORD PTR ");
13835 else
13836 oappend ("DWORD PTR ");
13837 return;
13838 }
3f31e633
JB
13839 switch (bytemode)
13840 {
13841 case b_mode:
b6169b20 13842 case b_swap_mode:
42903f7f 13843 case dqb_mode:
3f31e633
JB
13844 oappend ("BYTE PTR ");
13845 break;
13846 case w_mode:
13847 case dqw_mode:
13848 oappend ("WORD PTR ");
13849 break;
1a114b12 13850 case stack_v_mode:
7bb15c6f 13851 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
3f31e633
JB
13852 {
13853 oappend ("QWORD PTR ");
3f31e633
JB
13854 break;
13855 }
13856 /* FALLTHRU */
13857 case v_mode:
b6169b20 13858 case v_swap_mode:
3f31e633 13859 case dq_mode:
161a04f6
L
13860 USED_REX (REX_W);
13861 if (rex & REX_W)
3f31e633 13862 oappend ("QWORD PTR ");
3f31e633 13863 else
f16cd0d5
L
13864 {
13865 if ((sizeflag & DFLAG) || bytemode == dq_mode)
13866 oappend ("DWORD PTR ");
13867 else
13868 oappend ("WORD PTR ");
13869 used_prefixes |= (prefixes & PREFIX_DATA);
13870 }
3f31e633 13871 break;
52fd6d94 13872 case z_mode:
161a04f6 13873 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
13874 *obufp++ = 'D';
13875 oappend ("WORD PTR ");
161a04f6 13876 if (!(rex & REX_W))
52fd6d94
JB
13877 used_prefixes |= (prefixes & PREFIX_DATA);
13878 break;
34b772a6
JB
13879 case a_mode:
13880 if (sizeflag & DFLAG)
13881 oappend ("QWORD PTR ");
13882 else
13883 oappend ("DWORD PTR ");
13884 used_prefixes |= (prefixes & PREFIX_DATA);
13885 break;
3f31e633 13886 case d_mode:
539f890d
L
13887 case d_scalar_mode:
13888 case d_scalar_swap_mode:
fa99fab2 13889 case d_swap_mode:
42903f7f 13890 case dqd_mode:
3f31e633
JB
13891 oappend ("DWORD PTR ");
13892 break;
13893 case q_mode:
539f890d
L
13894 case q_scalar_mode:
13895 case q_scalar_swap_mode:
b6169b20 13896 case q_swap_mode:
3f31e633
JB
13897 oappend ("QWORD PTR ");
13898 break;
13899 case m_mode:
cb712a9e 13900 if (address_mode == mode_64bit)
3f31e633
JB
13901 oappend ("QWORD PTR ");
13902 else
13903 oappend ("DWORD PTR ");
13904 break;
13905 case f_mode:
13906 if (sizeflag & DFLAG)
13907 oappend ("FWORD PTR ");
13908 else
13909 oappend ("DWORD PTR ");
13910 used_prefixes |= (prefixes & PREFIX_DATA);
13911 break;
13912 case t_mode:
13913 oappend ("TBYTE PTR ");
13914 break;
13915 case x_mode:
b6169b20 13916 case x_swap_mode:
43234a1e
L
13917 case evex_x_gscat_mode:
13918 case evex_x_nobcst_mode:
c0f3af97
L
13919 if (need_vex)
13920 {
13921 switch (vex.length)
13922 {
13923 case 128:
13924 oappend ("XMMWORD PTR ");
13925 break;
13926 case 256:
13927 oappend ("YMMWORD PTR ");
13928 break;
43234a1e
L
13929 case 512:
13930 oappend ("ZMMWORD PTR ");
13931 break;
c0f3af97
L
13932 default:
13933 abort ();
13934 }
13935 }
13936 else
13937 oappend ("XMMWORD PTR ");
13938 break;
13939 case xmm_mode:
3f31e633
JB
13940 oappend ("XMMWORD PTR ");
13941 break;
43234a1e
L
13942 case ymm_mode:
13943 oappend ("YMMWORD PTR ");
13944 break;
c0f3af97 13945 case xmmq_mode:
43234a1e 13946 case evex_half_bcst_xmmq_mode:
c0f3af97
L
13947 if (!need_vex)
13948 abort ();
13949
13950 switch (vex.length)
13951 {
13952 case 128:
13953 oappend ("QWORD PTR ");
13954 break;
13955 case 256:
13956 oappend ("XMMWORD PTR ");
13957 break;
43234a1e
L
13958 case 512:
13959 oappend ("YMMWORD PTR ");
13960 break;
c0f3af97
L
13961 default:
13962 abort ();
13963 }
13964 break;
6c30d220
L
13965 case xmm_mb_mode:
13966 if (!need_vex)
13967 abort ();
13968
13969 switch (vex.length)
13970 {
13971 case 128:
13972 case 256:
43234a1e 13973 case 512:
6c30d220
L
13974 oappend ("BYTE PTR ");
13975 break;
13976 default:
13977 abort ();
13978 }
13979 break;
13980 case xmm_mw_mode:
13981 if (!need_vex)
13982 abort ();
13983
13984 switch (vex.length)
13985 {
13986 case 128:
13987 case 256:
43234a1e 13988 case 512:
6c30d220
L
13989 oappend ("WORD PTR ");
13990 break;
13991 default:
13992 abort ();
13993 }
13994 break;
13995 case xmm_md_mode:
13996 if (!need_vex)
13997 abort ();
13998
13999 switch (vex.length)
14000 {
14001 case 128:
14002 case 256:
43234a1e 14003 case 512:
6c30d220
L
14004 oappend ("DWORD PTR ");
14005 break;
14006 default:
14007 abort ();
14008 }
14009 break;
14010 case xmm_mq_mode:
14011 if (!need_vex)
14012 abort ();
14013
14014 switch (vex.length)
14015 {
14016 case 128:
14017 case 256:
43234a1e 14018 case 512:
6c30d220
L
14019 oappend ("QWORD PTR ");
14020 break;
14021 default:
14022 abort ();
14023 }
14024 break;
14025 case xmmdw_mode:
14026 if (!need_vex)
14027 abort ();
14028
14029 switch (vex.length)
14030 {
14031 case 128:
14032 oappend ("WORD PTR ");
14033 break;
14034 case 256:
14035 oappend ("DWORD PTR ");
14036 break;
43234a1e
L
14037 case 512:
14038 oappend ("QWORD PTR ");
14039 break;
6c30d220
L
14040 default:
14041 abort ();
14042 }
14043 break;
14044 case xmmqd_mode:
14045 if (!need_vex)
14046 abort ();
14047
14048 switch (vex.length)
14049 {
14050 case 128:
14051 oappend ("DWORD PTR ");
14052 break;
14053 case 256:
14054 oappend ("QWORD PTR ");
14055 break;
43234a1e
L
14056 case 512:
14057 oappend ("XMMWORD PTR ");
14058 break;
6c30d220
L
14059 default:
14060 abort ();
14061 }
14062 break;
c0f3af97
L
14063 case ymmq_mode:
14064 if (!need_vex)
14065 abort ();
14066
14067 switch (vex.length)
14068 {
14069 case 128:
14070 oappend ("QWORD PTR ");
14071 break;
14072 case 256:
14073 oappend ("YMMWORD PTR ");
14074 break;
43234a1e
L
14075 case 512:
14076 oappend ("ZMMWORD PTR ");
14077 break;
c0f3af97
L
14078 default:
14079 abort ();
14080 }
14081 break;
6c30d220
L
14082 case ymmxmm_mode:
14083 if (!need_vex)
14084 abort ();
14085
14086 switch (vex.length)
14087 {
14088 case 128:
14089 case 256:
14090 oappend ("XMMWORD PTR ");
14091 break;
14092 default:
14093 abort ();
14094 }
14095 break;
fb9c77c7
L
14096 case o_mode:
14097 oappend ("OWORD PTR ");
14098 break;
43234a1e 14099 case xmm_mdq_mode:
0bfee649 14100 case vex_w_dq_mode:
1c480963 14101 case vex_scalar_w_dq_mode:
0bfee649
L
14102 if (!need_vex)
14103 abort ();
14104
14105 if (vex.w)
14106 oappend ("QWORD PTR ");
14107 else
14108 oappend ("DWORD PTR ");
14109 break;
43234a1e
L
14110 case vex_vsib_d_w_dq_mode:
14111 case vex_vsib_q_w_dq_mode:
14112 if (!need_vex)
14113 abort ();
14114
14115 if (!vex.evex)
14116 {
14117 if (vex.w)
14118 oappend ("QWORD PTR ");
14119 else
14120 oappend ("DWORD PTR ");
14121 }
14122 else
14123 {
14124 if (vex.length != 512)
14125 abort ();
14126 oappend ("ZMMWORD PTR ");
14127 }
14128 break;
5fc35d96
IT
14129 case vex_vsib_q_w_d_mode:
14130 case vex_vsib_d_w_d_mode:
14131 if (!need_vex || !vex.evex || vex.length != 512)
14132 abort ();
14133
14134 oappend ("YMMWORD PTR ");
14135
14136 break;
43234a1e
L
14137 case mask_mode:
14138 if (!need_vex)
14139 abort ();
14140 /* Currently the only instructions, which allows either mask or
14141 memory operand, are AVX512's KMOVW instructions. They need
14142 Word-sized operand. */
14143 if (vex.w || vex.length != 128)
14144 abort ();
14145 oappend ("WORD PTR ");
14146 break;
6c75cc62 14147 case v_bnd_mode:
3f31e633
JB
14148 default:
14149 break;
14150 }
14151}
14152
252b5132 14153static void
c0f3af97 14154OP_E_register (int bytemode, int sizeflag)
252b5132 14155{
c0f3af97
L
14156 int reg = modrm.rm;
14157 const char **names;
252b5132 14158
c0f3af97
L
14159 USED_REX (REX_B);
14160 if ((rex & REX_B))
14161 reg += 8;
252b5132 14162
b6169b20
L
14163 if ((sizeflag & SUFFIX_ALWAYS)
14164 && (bytemode == b_swap_mode || bytemode == v_swap_mode))
14165 swap_operand ();
14166
c0f3af97 14167 switch (bytemode)
252b5132 14168 {
c0f3af97 14169 case b_mode:
b6169b20 14170 case b_swap_mode:
c0f3af97
L
14171 USED_REX (0);
14172 if (rex)
14173 names = names8rex;
14174 else
14175 names = names8;
14176 break;
14177 case w_mode:
14178 names = names16;
14179 break;
14180 case d_mode:
14181 names = names32;
14182 break;
14183 case q_mode:
14184 names = names64;
14185 break;
14186 case m_mode:
6c75cc62 14187 case v_bnd_mode:
c0f3af97
L
14188 names = address_mode == mode_64bit ? names64 : names32;
14189 break;
7e8b059b
L
14190 case bnd_mode:
14191 names = names_bnd;
14192 break;
c0f3af97 14193 case stack_v_mode:
7bb15c6f 14194 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
252b5132 14195 {
c0f3af97 14196 names = names64;
252b5132 14197 break;
252b5132 14198 }
c0f3af97
L
14199 bytemode = v_mode;
14200 /* FALLTHRU */
14201 case v_mode:
b6169b20 14202 case v_swap_mode:
c0f3af97
L
14203 case dq_mode:
14204 case dqb_mode:
14205 case dqd_mode:
14206 case dqw_mode:
14207 USED_REX (REX_W);
14208 if (rex & REX_W)
14209 names = names64;
c0f3af97 14210 else
f16cd0d5 14211 {
7bb15c6f 14212 if ((sizeflag & DFLAG)
f16cd0d5
L
14213 || (bytemode != v_mode
14214 && bytemode != v_swap_mode))
14215 names = names32;
14216 else
14217 names = names16;
14218 used_prefixes |= (prefixes & PREFIX_DATA);
14219 }
c0f3af97 14220 break;
43234a1e
L
14221 case mask_mode:
14222 names = names_mask;
14223 break;
c0f3af97
L
14224 case 0:
14225 return;
14226 default:
14227 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
14228 return;
14229 }
c0f3af97
L
14230 oappend (names[reg]);
14231}
14232
14233static void
c1e679ec 14234OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
14235{
14236 bfd_vma disp = 0;
14237 int add = (rex & REX_B) ? 8 : 0;
14238 int riprel = 0;
43234a1e
L
14239 int shift;
14240
14241 if (vex.evex)
14242 {
14243 /* In EVEX, if operand doesn't allow broadcast, vex.b should be 0. */
14244 if (vex.b
14245 && bytemode != x_mode
14246 && bytemode != evex_half_bcst_xmmq_mode)
14247 {
14248 BadOp ();
14249 return;
14250 }
14251 switch (bytemode)
14252 {
14253 case vex_vsib_d_w_dq_mode:
5fc35d96 14254 case vex_vsib_d_w_d_mode:
eaa9d1ad 14255 case vex_vsib_q_w_dq_mode:
5fc35d96 14256 case vex_vsib_q_w_d_mode:
43234a1e
L
14257 case evex_x_gscat_mode:
14258 case xmm_mdq_mode:
14259 shift = vex.w ? 3 : 2;
14260 break;
43234a1e
L
14261 case x_mode:
14262 case evex_half_bcst_xmmq_mode:
14263 if (vex.b)
14264 {
14265 shift = vex.w ? 3 : 2;
14266 break;
14267 }
14268 /* Fall through if vex.b == 0. */
14269 case xmmqd_mode:
14270 case xmmdw_mode:
14271 case xmmq_mode:
14272 case ymmq_mode:
14273 case evex_x_nobcst_mode:
14274 case x_swap_mode:
14275 switch (vex.length)
14276 {
14277 case 128:
14278 shift = 4;
14279 break;
14280 case 256:
14281 shift = 5;
14282 break;
14283 case 512:
14284 shift = 6;
14285 break;
14286 default:
14287 abort ();
14288 }
14289 break;
14290 case ymm_mode:
14291 shift = 5;
14292 break;
14293 case xmm_mode:
14294 shift = 4;
14295 break;
14296 case xmm_mq_mode:
14297 case q_mode:
14298 case q_scalar_mode:
14299 case q_swap_mode:
14300 case q_scalar_swap_mode:
14301 shift = 3;
14302 break;
14303 case dqd_mode:
14304 case xmm_md_mode:
14305 case d_mode:
14306 case d_scalar_mode:
14307 case d_swap_mode:
14308 case d_scalar_swap_mode:
14309 shift = 2;
14310 break;
14311 case xmm_mw_mode:
14312 shift = 1;
14313 break;
14314 case xmm_mb_mode:
14315 shift = 0;
14316 break;
14317 default:
14318 abort ();
14319 }
14320 /* Make necessary corrections to shift for modes that need it.
14321 For these modes we currently have shift 4, 5 or 6 depending on
14322 vex.length (it corresponds to xmmword, ymmword or zmmword
14323 operand). We might want to make it 3, 4 or 5 (e.g. for
14324 xmmq_mode). In case of broadcast enabled the corrections
14325 aren't needed, as element size is always 32 or 64 bits. */
14326 if (bytemode == xmmq_mode
14327 || (bytemode == evex_half_bcst_xmmq_mode
14328 && !vex.b))
14329 shift -= 1;
14330 else if (bytemode == xmmqd_mode)
14331 shift -= 2;
14332 else if (bytemode == xmmdw_mode)
14333 shift -= 3;
14334 }
14335 else
14336 shift = 0;
252b5132 14337
c0f3af97 14338 USED_REX (REX_B);
3f31e633
JB
14339 if (intel_syntax)
14340 intel_operand_size (bytemode, sizeflag);
252b5132
RH
14341 append_seg ();
14342
5d669648 14343 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 14344 {
5d669648
L
14345 /* 32/64 bit address mode */
14346 int havedisp;
252b5132
RH
14347 int havesib;
14348 int havebase;
0f7da397 14349 int haveindex;
20afcfb7 14350 int needindex;
82c18208 14351 int base, rbase;
91d6fa6a 14352 int vindex = 0;
252b5132 14353 int scale = 0;
7e8b059b
L
14354 int addr32flag = !((sizeflag & AFLAG)
14355 || bytemode == v_bnd_mode
14356 || bytemode == bnd_mode);
6c30d220
L
14357 const char **indexes64 = names64;
14358 const char **indexes32 = names32;
252b5132
RH
14359
14360 havesib = 0;
14361 havebase = 1;
0f7da397 14362 haveindex = 0;
7967e09e 14363 base = modrm.rm;
252b5132
RH
14364
14365 if (base == 4)
14366 {
14367 havesib = 1;
dfc8cf43 14368 vindex = sib.index;
161a04f6
L
14369 USED_REX (REX_X);
14370 if (rex & REX_X)
91d6fa6a 14371 vindex += 8;
6c30d220
L
14372 switch (bytemode)
14373 {
14374 case vex_vsib_d_w_dq_mode:
5fc35d96 14375 case vex_vsib_d_w_d_mode:
6c30d220 14376 case vex_vsib_q_w_dq_mode:
5fc35d96 14377 case vex_vsib_q_w_d_mode:
6c30d220
L
14378 if (!need_vex)
14379 abort ();
43234a1e
L
14380 if (vex.evex)
14381 {
14382 if (!vex.v)
14383 vindex += 16;
14384 }
6c30d220
L
14385
14386 haveindex = 1;
14387 switch (vex.length)
14388 {
14389 case 128:
7bb15c6f 14390 indexes64 = indexes32 = names_xmm;
6c30d220
L
14391 break;
14392 case 256:
5fc35d96
IT
14393 if (!vex.w
14394 || bytemode == vex_vsib_q_w_dq_mode
14395 || bytemode == vex_vsib_q_w_d_mode)
7bb15c6f 14396 indexes64 = indexes32 = names_ymm;
6c30d220 14397 else
7bb15c6f 14398 indexes64 = indexes32 = names_xmm;
6c30d220 14399 break;
43234a1e 14400 case 512:
5fc35d96
IT
14401 if (!vex.w
14402 || bytemode == vex_vsib_q_w_dq_mode
14403 || bytemode == vex_vsib_q_w_d_mode)
43234a1e
L
14404 indexes64 = indexes32 = names_zmm;
14405 else
14406 indexes64 = indexes32 = names_ymm;
14407 break;
6c30d220
L
14408 default:
14409 abort ();
14410 }
14411 break;
14412 default:
14413 haveindex = vindex != 4;
14414 break;
14415 }
14416 scale = sib.scale;
14417 base = sib.base;
252b5132
RH
14418 codep++;
14419 }
82c18208 14420 rbase = base + add;
252b5132 14421
7967e09e 14422 switch (modrm.mod)
252b5132
RH
14423 {
14424 case 0:
82c18208 14425 if (base == 5)
252b5132
RH
14426 {
14427 havebase = 0;
cb712a9e 14428 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
14429 riprel = 1;
14430 disp = get32s ();
252b5132
RH
14431 }
14432 break;
14433 case 1:
14434 FETCH_DATA (the_info, codep + 1);
14435 disp = *codep++;
14436 if ((disp & 0x80) != 0)
14437 disp -= 0x100;
43234a1e
L
14438 if (vex.evex && shift > 0)
14439 disp <<= shift;
252b5132
RH
14440 break;
14441 case 2:
52b15da3 14442 disp = get32s ();
252b5132
RH
14443 break;
14444 }
14445
20afcfb7
L
14446 /* In 32bit mode, we need index register to tell [offset] from
14447 [eiz*1 + offset]. */
14448 needindex = (havesib
14449 && !havebase
14450 && !haveindex
14451 && address_mode == mode_32bit);
14452 havedisp = (havebase
14453 || needindex
14454 || (havesib && (haveindex || scale != 0)));
5d669648 14455
252b5132 14456 if (!intel_syntax)
82c18208 14457 if (modrm.mod != 0 || base == 5)
db6eb5be 14458 {
5d669648
L
14459 if (havedisp || riprel)
14460 print_displacement (scratchbuf, disp);
14461 else
14462 print_operand_value (scratchbuf, 1, disp);
db6eb5be 14463 oappend (scratchbuf);
52b15da3
JH
14464 if (riprel)
14465 {
14466 set_op (disp, 1);
87767711 14467 oappend (sizeflag & AFLAG ? "(%rip)" : "(%eip)");
52b15da3 14468 }
db6eb5be 14469 }
2da11e11 14470
7e8b059b
L
14471 if ((havebase || haveindex || riprel)
14472 && (bytemode != v_bnd_mode)
14473 && (bytemode != bnd_mode))
87767711
JB
14474 used_prefixes |= PREFIX_ADDR;
14475
5d669648 14476 if (havedisp || (intel_syntax && riprel))
252b5132 14477 {
252b5132 14478 *obufp++ = open_char;
52b15da3 14479 if (intel_syntax && riprel)
185b1163
L
14480 {
14481 set_op (disp, 1);
87767711 14482 oappend (sizeflag & AFLAG ? "rip" : "eip");
185b1163 14483 }
db6eb5be 14484 *obufp = '\0';
252b5132 14485 if (havebase)
7e8b059b 14486 oappend (address_mode == mode_64bit && !addr32flag
82c18208 14487 ? names64[rbase] : names32[rbase]);
252b5132
RH
14488 if (havesib)
14489 {
db51cc60
L
14490 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
14491 print index to tell base + index from base. */
14492 if (scale != 0
20afcfb7 14493 || needindex
db51cc60
L
14494 || haveindex
14495 || (havebase && base != ESP_REG_NUM))
252b5132 14496 {
9306ca4a 14497 if (!intel_syntax || havebase)
db6eb5be 14498 {
9306ca4a
JB
14499 *obufp++ = separator_char;
14500 *obufp = '\0';
db6eb5be 14501 }
db51cc60 14502 if (haveindex)
7e8b059b 14503 oappend (address_mode == mode_64bit && !addr32flag
6c30d220 14504 ? indexes64[vindex] : indexes32[vindex]);
db51cc60 14505 else
7e8b059b 14506 oappend (address_mode == mode_64bit && !addr32flag
db51cc60
L
14507 ? index64 : index32);
14508
db6eb5be
AM
14509 *obufp++ = scale_char;
14510 *obufp = '\0';
14511 sprintf (scratchbuf, "%d", 1 << scale);
14512 oappend (scratchbuf);
14513 }
252b5132 14514 }
185b1163 14515 if (intel_syntax
82c18208 14516 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 14517 {
db51cc60 14518 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
14519 {
14520 *obufp++ = '+';
14521 *obufp = '\0';
14522 }
05203043 14523 else if (modrm.mod != 1 && disp != -disp)
3d456fa1
JB
14524 {
14525 *obufp++ = '-';
14526 *obufp = '\0';
14527 disp = - (bfd_signed_vma) disp;
14528 }
14529
db51cc60
L
14530 if (havedisp)
14531 print_displacement (scratchbuf, disp);
14532 else
14533 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
14534 oappend (scratchbuf);
14535 }
252b5132
RH
14536
14537 *obufp++ = close_char;
db6eb5be 14538 *obufp = '\0';
252b5132
RH
14539 }
14540 else if (intel_syntax)
db6eb5be 14541 {
82c18208 14542 if (modrm.mod != 0 || base == 5)
db6eb5be 14543 {
252b5132
RH
14544 if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
14545 | PREFIX_ES | PREFIX_FS | PREFIX_GS))
14546 ;
14547 else
14548 {
d708bcba 14549 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
14550 oappend (":");
14551 }
52b15da3 14552 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
14553 oappend (scratchbuf);
14554 }
14555 }
252b5132
RH
14556 }
14557 else
f16cd0d5
L
14558 {
14559 /* 16 bit address mode */
14560 used_prefixes |= prefixes & PREFIX_ADDR;
7967e09e 14561 switch (modrm.mod)
252b5132
RH
14562 {
14563 case 0:
7967e09e 14564 if (modrm.rm == 6)
252b5132
RH
14565 {
14566 disp = get16 ();
14567 if ((disp & 0x8000) != 0)
14568 disp -= 0x10000;
14569 }
14570 break;
14571 case 1:
14572 FETCH_DATA (the_info, codep + 1);
14573 disp = *codep++;
14574 if ((disp & 0x80) != 0)
14575 disp -= 0x100;
14576 break;
14577 case 2:
14578 disp = get16 ();
14579 if ((disp & 0x8000) != 0)
14580 disp -= 0x10000;
14581 break;
14582 }
14583
14584 if (!intel_syntax)
7967e09e 14585 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 14586 {
5d669648 14587 print_displacement (scratchbuf, disp);
db6eb5be
AM
14588 oappend (scratchbuf);
14589 }
252b5132 14590
7967e09e 14591 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
14592 {
14593 *obufp++ = open_char;
db6eb5be 14594 *obufp = '\0';
7967e09e 14595 oappend (index16[modrm.rm]);
5d669648
L
14596 if (intel_syntax
14597 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 14598 {
5d669648 14599 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
14600 {
14601 *obufp++ = '+';
14602 *obufp = '\0';
14603 }
7967e09e 14604 else if (modrm.mod != 1)
3d456fa1
JB
14605 {
14606 *obufp++ = '-';
14607 *obufp = '\0';
14608 disp = - (bfd_signed_vma) disp;
14609 }
14610
5d669648 14611 print_displacement (scratchbuf, disp);
3d456fa1
JB
14612 oappend (scratchbuf);
14613 }
14614
db6eb5be
AM
14615 *obufp++ = close_char;
14616 *obufp = '\0';
252b5132 14617 }
3d456fa1
JB
14618 else if (intel_syntax)
14619 {
14620 if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
14621 | PREFIX_ES | PREFIX_FS | PREFIX_GS))
14622 ;
14623 else
14624 {
14625 oappend (names_seg[ds_reg - es_reg]);
14626 oappend (":");
14627 }
14628 print_operand_value (scratchbuf, 1, disp & 0xffff);
14629 oappend (scratchbuf);
14630 }
252b5132 14631 }
43234a1e
L
14632 if (vex.evex && vex.b
14633 && (bytemode == x_mode
14634 || bytemode == evex_half_bcst_xmmq_mode))
14635 {
14636 if (vex.w || bytemode == evex_half_bcst_xmmq_mode)
14637 oappend ("{1to8}");
14638 else
14639 oappend ("{1to16}");
14640 }
252b5132
RH
14641}
14642
c0f3af97 14643static void
8b3f93e7 14644OP_E (int bytemode, int sizeflag)
c0f3af97
L
14645{
14646 /* Skip mod/rm byte. */
14647 MODRM_CHECK;
14648 codep++;
14649
14650 if (modrm.mod == 3)
14651 OP_E_register (bytemode, sizeflag);
14652 else
c1e679ec 14653 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
14654}
14655
252b5132 14656static void
26ca5450 14657OP_G (int bytemode, int sizeflag)
252b5132 14658{
52b15da3 14659 int add = 0;
161a04f6
L
14660 USED_REX (REX_R);
14661 if (rex & REX_R)
52b15da3 14662 add += 8;
252b5132
RH
14663 switch (bytemode)
14664 {
14665 case b_mode:
52b15da3
JH
14666 USED_REX (0);
14667 if (rex)
7967e09e 14668 oappend (names8rex[modrm.reg + add]);
52b15da3 14669 else
7967e09e 14670 oappend (names8[modrm.reg + add]);
252b5132
RH
14671 break;
14672 case w_mode:
7967e09e 14673 oappend (names16[modrm.reg + add]);
252b5132
RH
14674 break;
14675 case d_mode:
7967e09e 14676 oappend (names32[modrm.reg + add]);
52b15da3
JH
14677 break;
14678 case q_mode:
7967e09e 14679 oappend (names64[modrm.reg + add]);
252b5132 14680 break;
7e8b059b
L
14681 case bnd_mode:
14682 oappend (names_bnd[modrm.reg]);
14683 break;
252b5132 14684 case v_mode:
9306ca4a 14685 case dq_mode:
42903f7f
L
14686 case dqb_mode:
14687 case dqd_mode:
9306ca4a 14688 case dqw_mode:
161a04f6
L
14689 USED_REX (REX_W);
14690 if (rex & REX_W)
7967e09e 14691 oappend (names64[modrm.reg + add]);
252b5132 14692 else
f16cd0d5
L
14693 {
14694 if ((sizeflag & DFLAG) || bytemode != v_mode)
14695 oappend (names32[modrm.reg + add]);
14696 else
14697 oappend (names16[modrm.reg + add]);
14698 used_prefixes |= (prefixes & PREFIX_DATA);
14699 }
252b5132 14700 break;
90700ea2 14701 case m_mode:
cb712a9e 14702 if (address_mode == mode_64bit)
7967e09e 14703 oappend (names64[modrm.reg + add]);
90700ea2 14704 else
7967e09e 14705 oappend (names32[modrm.reg + add]);
90700ea2 14706 break;
43234a1e
L
14707 case mask_mode:
14708 oappend (names_mask[modrm.reg + add]);
14709 break;
252b5132
RH
14710 default:
14711 oappend (INTERNAL_DISASSEMBLER_ERROR);
14712 break;
14713 }
14714}
14715
52b15da3 14716static bfd_vma
26ca5450 14717get64 (void)
52b15da3 14718{
5dd0794d 14719 bfd_vma x;
52b15da3 14720#ifdef BFD64
5dd0794d
AM
14721 unsigned int a;
14722 unsigned int b;
14723
52b15da3
JH
14724 FETCH_DATA (the_info, codep + 8);
14725 a = *codep++ & 0xff;
14726 a |= (*codep++ & 0xff) << 8;
14727 a |= (*codep++ & 0xff) << 16;
14728 a |= (*codep++ & 0xff) << 24;
5dd0794d 14729 b = *codep++ & 0xff;
52b15da3
JH
14730 b |= (*codep++ & 0xff) << 8;
14731 b |= (*codep++ & 0xff) << 16;
14732 b |= (*codep++ & 0xff) << 24;
14733 x = a + ((bfd_vma) b << 32);
14734#else
6608db57 14735 abort ();
5dd0794d 14736 x = 0;
52b15da3
JH
14737#endif
14738 return x;
14739}
14740
14741static bfd_signed_vma
26ca5450 14742get32 (void)
252b5132 14743{
52b15da3 14744 bfd_signed_vma x = 0;
252b5132
RH
14745
14746 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
14747 x = *codep++ & (bfd_signed_vma) 0xff;
14748 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
14749 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
14750 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
14751 return x;
14752}
14753
14754static bfd_signed_vma
26ca5450 14755get32s (void)
52b15da3
JH
14756{
14757 bfd_signed_vma x = 0;
14758
14759 FETCH_DATA (the_info, codep + 4);
14760 x = *codep++ & (bfd_signed_vma) 0xff;
14761 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
14762 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
14763 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
14764
14765 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
14766
252b5132
RH
14767 return x;
14768}
14769
14770static int
26ca5450 14771get16 (void)
252b5132
RH
14772{
14773 int x = 0;
14774
14775 FETCH_DATA (the_info, codep + 2);
14776 x = *codep++ & 0xff;
14777 x |= (*codep++ & 0xff) << 8;
14778 return x;
14779}
14780
14781static void
26ca5450 14782set_op (bfd_vma op, int riprel)
252b5132
RH
14783{
14784 op_index[op_ad] = op_ad;
cb712a9e 14785 if (address_mode == mode_64bit)
7081ff04
AJ
14786 {
14787 op_address[op_ad] = op;
14788 op_riprel[op_ad] = riprel;
14789 }
14790 else
14791 {
14792 /* Mask to get a 32-bit address. */
14793 op_address[op_ad] = op & 0xffffffff;
14794 op_riprel[op_ad] = riprel & 0xffffffff;
14795 }
252b5132
RH
14796}
14797
14798static void
26ca5450 14799OP_REG (int code, int sizeflag)
252b5132 14800{
2da11e11 14801 const char *s;
9b60702d 14802 int add;
de882298
RM
14803
14804 switch (code)
14805 {
14806 case es_reg: case ss_reg: case cs_reg:
14807 case ds_reg: case fs_reg: case gs_reg:
14808 oappend (names_seg[code - es_reg]);
14809 return;
14810 }
14811
161a04f6
L
14812 USED_REX (REX_B);
14813 if (rex & REX_B)
52b15da3 14814 add = 8;
9b60702d
L
14815 else
14816 add = 0;
52b15da3
JH
14817
14818 switch (code)
14819 {
52b15da3
JH
14820 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
14821 case sp_reg: case bp_reg: case si_reg: case di_reg:
14822 s = names16[code - ax_reg + add];
14823 break;
52b15da3
JH
14824 case al_reg: case ah_reg: case cl_reg: case ch_reg:
14825 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
14826 USED_REX (0);
14827 if (rex)
14828 s = names8rex[code - al_reg + add];
14829 else
14830 s = names8[code - al_reg];
14831 break;
6439fc28
AM
14832 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
14833 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
7bb15c6f 14834 if (address_mode == mode_64bit
6c067bbb 14835 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
14836 {
14837 s = names64[code - rAX_reg + add];
14838 break;
14839 }
14840 code += eAX_reg - rAX_reg;
6608db57 14841 /* Fall through. */
52b15da3
JH
14842 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
14843 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
14844 USED_REX (REX_W);
14845 if (rex & REX_W)
52b15da3 14846 s = names64[code - eAX_reg + add];
52b15da3 14847 else
f16cd0d5
L
14848 {
14849 if (sizeflag & DFLAG)
14850 s = names32[code - eAX_reg + add];
14851 else
14852 s = names16[code - eAX_reg + add];
14853 used_prefixes |= (prefixes & PREFIX_DATA);
14854 }
52b15da3 14855 break;
52b15da3
JH
14856 default:
14857 s = INTERNAL_DISASSEMBLER_ERROR;
14858 break;
14859 }
14860 oappend (s);
14861}
14862
14863static void
26ca5450 14864OP_IMREG (int code, int sizeflag)
52b15da3
JH
14865{
14866 const char *s;
252b5132
RH
14867
14868 switch (code)
14869 {
14870 case indir_dx_reg:
d708bcba 14871 if (intel_syntax)
52fd6d94 14872 s = "dx";
d708bcba 14873 else
db6eb5be 14874 s = "(%dx)";
252b5132
RH
14875 break;
14876 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
14877 case sp_reg: case bp_reg: case si_reg: case di_reg:
14878 s = names16[code - ax_reg];
14879 break;
14880 case es_reg: case ss_reg: case cs_reg:
14881 case ds_reg: case fs_reg: case gs_reg:
14882 s = names_seg[code - es_reg];
14883 break;
14884 case al_reg: case ah_reg: case cl_reg: case ch_reg:
14885 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
52b15da3
JH
14886 USED_REX (0);
14887 if (rex)
14888 s = names8rex[code - al_reg];
14889 else
14890 s = names8[code - al_reg];
252b5132
RH
14891 break;
14892 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
14893 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
14894 USED_REX (REX_W);
14895 if (rex & REX_W)
52b15da3 14896 s = names64[code - eAX_reg];
252b5132 14897 else
f16cd0d5
L
14898 {
14899 if (sizeflag & DFLAG)
14900 s = names32[code - eAX_reg];
14901 else
14902 s = names16[code - eAX_reg];
14903 used_prefixes |= (prefixes & PREFIX_DATA);
14904 }
252b5132 14905 break;
52fd6d94 14906 case z_mode_ax_reg:
161a04f6 14907 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
14908 s = *names32;
14909 else
14910 s = *names16;
161a04f6 14911 if (!(rex & REX_W))
52fd6d94
JB
14912 used_prefixes |= (prefixes & PREFIX_DATA);
14913 break;
252b5132
RH
14914 default:
14915 s = INTERNAL_DISASSEMBLER_ERROR;
14916 break;
14917 }
14918 oappend (s);
14919}
14920
14921static void
26ca5450 14922OP_I (int bytemode, int sizeflag)
252b5132 14923{
52b15da3
JH
14924 bfd_signed_vma op;
14925 bfd_signed_vma mask = -1;
252b5132
RH
14926
14927 switch (bytemode)
14928 {
14929 case b_mode:
14930 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
14931 op = *codep++;
14932 mask = 0xff;
14933 break;
14934 case q_mode:
cb712a9e 14935 if (address_mode == mode_64bit)
6439fc28
AM
14936 {
14937 op = get32s ();
14938 break;
14939 }
6608db57 14940 /* Fall through. */
252b5132 14941 case v_mode:
161a04f6
L
14942 USED_REX (REX_W);
14943 if (rex & REX_W)
52b15da3 14944 op = get32s ();
252b5132 14945 else
52b15da3 14946 {
f16cd0d5
L
14947 if (sizeflag & DFLAG)
14948 {
14949 op = get32 ();
14950 mask = 0xffffffff;
14951 }
14952 else
14953 {
14954 op = get16 ();
14955 mask = 0xfffff;
14956 }
14957 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 14958 }
252b5132
RH
14959 break;
14960 case w_mode:
52b15da3 14961 mask = 0xfffff;
252b5132
RH
14962 op = get16 ();
14963 break;
9306ca4a
JB
14964 case const_1_mode:
14965 if (intel_syntax)
6c067bbb 14966 oappend ("1");
9306ca4a 14967 return;
252b5132
RH
14968 default:
14969 oappend (INTERNAL_DISASSEMBLER_ERROR);
14970 return;
14971 }
14972
52b15da3
JH
14973 op &= mask;
14974 scratchbuf[0] = '$';
d708bcba 14975 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 14976 oappend_maybe_intel (scratchbuf);
52b15da3
JH
14977 scratchbuf[0] = '\0';
14978}
14979
14980static void
26ca5450 14981OP_I64 (int bytemode, int sizeflag)
52b15da3
JH
14982{
14983 bfd_signed_vma op;
14984 bfd_signed_vma mask = -1;
14985
cb712a9e 14986 if (address_mode != mode_64bit)
6439fc28
AM
14987 {
14988 OP_I (bytemode, sizeflag);
14989 return;
14990 }
14991
52b15da3
JH
14992 switch (bytemode)
14993 {
14994 case b_mode:
14995 FETCH_DATA (the_info, codep + 1);
14996 op = *codep++;
14997 mask = 0xff;
14998 break;
14999 case v_mode:
161a04f6
L
15000 USED_REX (REX_W);
15001 if (rex & REX_W)
52b15da3 15002 op = get64 ();
52b15da3
JH
15003 else
15004 {
f16cd0d5
L
15005 if (sizeflag & DFLAG)
15006 {
15007 op = get32 ();
15008 mask = 0xffffffff;
15009 }
15010 else
15011 {
15012 op = get16 ();
15013 mask = 0xfffff;
15014 }
15015 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 15016 }
52b15da3
JH
15017 break;
15018 case w_mode:
15019 mask = 0xfffff;
15020 op = get16 ();
15021 break;
15022 default:
15023 oappend (INTERNAL_DISASSEMBLER_ERROR);
15024 return;
15025 }
15026
15027 op &= mask;
15028 scratchbuf[0] = '$';
d708bcba 15029 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 15030 oappend_maybe_intel (scratchbuf);
252b5132
RH
15031 scratchbuf[0] = '\0';
15032}
15033
15034static void
26ca5450 15035OP_sI (int bytemode, int sizeflag)
252b5132 15036{
52b15da3 15037 bfd_signed_vma op;
252b5132
RH
15038
15039 switch (bytemode)
15040 {
15041 case b_mode:
e3949f17 15042 case b_T_mode:
252b5132
RH
15043 FETCH_DATA (the_info, codep + 1);
15044 op = *codep++;
15045 if ((op & 0x80) != 0)
15046 op -= 0x100;
e3949f17
L
15047 if (bytemode == b_T_mode)
15048 {
15049 if (address_mode != mode_64bit
7bb15c6f 15050 || !((sizeflag & DFLAG) || (rex & REX_W)))
e3949f17 15051 {
6c067bbb
RM
15052 /* The operand-size prefix is overridden by a REX prefix. */
15053 if ((sizeflag & DFLAG) || (rex & REX_W))
e3949f17
L
15054 op &= 0xffffffff;
15055 else
15056 op &= 0xffff;
15057 }
15058 }
15059 else
15060 {
15061 if (!(rex & REX_W))
15062 {
15063 if (sizeflag & DFLAG)
15064 op &= 0xffffffff;
15065 else
15066 op &= 0xffff;
15067 }
15068 }
252b5132
RH
15069 break;
15070 case v_mode:
7bb15c6f
RM
15071 /* The operand-size prefix is overridden by a REX prefix. */
15072 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 15073 op = get32s ();
252b5132 15074 else
d9e3625e 15075 op = get16 ();
252b5132
RH
15076 break;
15077 default:
15078 oappend (INTERNAL_DISASSEMBLER_ERROR);
15079 return;
15080 }
52b15da3
JH
15081
15082 scratchbuf[0] = '$';
15083 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 15084 oappend_maybe_intel (scratchbuf);
252b5132
RH
15085}
15086
15087static void
26ca5450 15088OP_J (int bytemode, int sizeflag)
252b5132 15089{
52b15da3 15090 bfd_vma disp;
7081ff04 15091 bfd_vma mask = -1;
65ca155d 15092 bfd_vma segment = 0;
252b5132
RH
15093
15094 switch (bytemode)
15095 {
15096 case b_mode:
15097 FETCH_DATA (the_info, codep + 1);
15098 disp = *codep++;
15099 if ((disp & 0x80) != 0)
15100 disp -= 0x100;
15101 break;
15102 case v_mode:
f16cd0d5 15103 USED_REX (REX_W);
161a04f6 15104 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 15105 disp = get32s ();
252b5132
RH
15106 else
15107 {
15108 disp = get16 ();
206717e8
L
15109 if ((disp & 0x8000) != 0)
15110 disp -= 0x10000;
65ca155d
L
15111 /* In 16bit mode, address is wrapped around at 64k within
15112 the same segment. Otherwise, a data16 prefix on a jump
15113 instruction means that the pc is masked to 16 bits after
15114 the displacement is added! */
15115 mask = 0xffff;
15116 if ((prefixes & PREFIX_DATA) == 0)
15117 segment = ((start_pc + codep - start_codep)
15118 & ~((bfd_vma) 0xffff));
252b5132 15119 }
f16cd0d5
L
15120 if (!(rex & REX_W))
15121 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
15122 break;
15123 default:
15124 oappend (INTERNAL_DISASSEMBLER_ERROR);
15125 return;
15126 }
42d5f9c6 15127 disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
52b15da3
JH
15128 set_op (disp, 0);
15129 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
15130 oappend (scratchbuf);
15131}
15132
252b5132 15133static void
ed7841b3 15134OP_SEG (int bytemode, int sizeflag)
252b5132 15135{
ed7841b3 15136 if (bytemode == w_mode)
7967e09e 15137 oappend (names_seg[modrm.reg]);
ed7841b3 15138 else
7967e09e 15139 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
15140}
15141
15142static void
26ca5450 15143OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
15144{
15145 int seg, offset;
15146
c608c12e 15147 if (sizeflag & DFLAG)
252b5132 15148 {
c608c12e
AM
15149 offset = get32 ();
15150 seg = get16 ();
252b5132 15151 }
c608c12e
AM
15152 else
15153 {
15154 offset = get16 ();
15155 seg = get16 ();
15156 }
7d421014 15157 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 15158 if (intel_syntax)
3f31e633 15159 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
15160 else
15161 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 15162 oappend (scratchbuf);
252b5132
RH
15163}
15164
252b5132 15165static void
3f31e633 15166OP_OFF (int bytemode, int sizeflag)
252b5132 15167{
52b15da3 15168 bfd_vma off;
252b5132 15169
3f31e633
JB
15170 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
15171 intel_operand_size (bytemode, sizeflag);
252b5132
RH
15172 append_seg ();
15173
cb712a9e 15174 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
15175 off = get32 ();
15176 else
15177 off = get16 ();
15178
15179 if (intel_syntax)
15180 {
15181 if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
db6eb5be 15182 | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
252b5132 15183 {
d708bcba 15184 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
15185 oappend (":");
15186 }
15187 }
52b15da3
JH
15188 print_operand_value (scratchbuf, 1, off);
15189 oappend (scratchbuf);
15190}
6439fc28 15191
52b15da3 15192static void
3f31e633 15193OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
15194{
15195 bfd_vma off;
15196
539e75ad
L
15197 if (address_mode != mode_64bit
15198 || (prefixes & PREFIX_ADDR))
6439fc28
AM
15199 {
15200 OP_OFF (bytemode, sizeflag);
15201 return;
15202 }
15203
3f31e633
JB
15204 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
15205 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
15206 append_seg ();
15207
6608db57 15208 off = get64 ();
52b15da3
JH
15209
15210 if (intel_syntax)
15211 {
15212 if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
db6eb5be 15213 | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
52b15da3 15214 {
d708bcba 15215 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
15216 oappend (":");
15217 }
15218 }
15219 print_operand_value (scratchbuf, 1, off);
252b5132
RH
15220 oappend (scratchbuf);
15221}
15222
15223static void
26ca5450 15224ptr_reg (int code, int sizeflag)
252b5132 15225{
2da11e11 15226 const char *s;
d708bcba 15227
1d9f512f 15228 *obufp++ = open_char;
20f0a1fc 15229 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 15230 if (address_mode == mode_64bit)
c1a64871
JH
15231 {
15232 if (!(sizeflag & AFLAG))
db6eb5be 15233 s = names32[code - eAX_reg];
c1a64871 15234 else
db6eb5be 15235 s = names64[code - eAX_reg];
c1a64871 15236 }
52b15da3 15237 else if (sizeflag & AFLAG)
252b5132
RH
15238 s = names32[code - eAX_reg];
15239 else
15240 s = names16[code - eAX_reg];
15241 oappend (s);
1d9f512f
AM
15242 *obufp++ = close_char;
15243 *obufp = 0;
252b5132
RH
15244}
15245
15246static void
26ca5450 15247OP_ESreg (int code, int sizeflag)
252b5132 15248{
9306ca4a 15249 if (intel_syntax)
52fd6d94
JB
15250 {
15251 switch (codep[-1])
15252 {
15253 case 0x6d: /* insw/insl */
15254 intel_operand_size (z_mode, sizeflag);
15255 break;
15256 case 0xa5: /* movsw/movsl/movsq */
15257 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15258 case 0xab: /* stosw/stosl */
15259 case 0xaf: /* scasw/scasl */
15260 intel_operand_size (v_mode, sizeflag);
15261 break;
15262 default:
15263 intel_operand_size (b_mode, sizeflag);
15264 }
15265 }
9ce09ba2 15266 oappend_maybe_intel ("%es:");
252b5132
RH
15267 ptr_reg (code, sizeflag);
15268}
15269
15270static void
26ca5450 15271OP_DSreg (int code, int sizeflag)
252b5132 15272{
9306ca4a 15273 if (intel_syntax)
52fd6d94
JB
15274 {
15275 switch (codep[-1])
15276 {
15277 case 0x6f: /* outsw/outsl */
15278 intel_operand_size (z_mode, sizeflag);
15279 break;
15280 case 0xa5: /* movsw/movsl/movsq */
15281 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15282 case 0xad: /* lodsw/lodsl/lodsq */
15283 intel_operand_size (v_mode, sizeflag);
15284 break;
15285 default:
15286 intel_operand_size (b_mode, sizeflag);
15287 }
15288 }
252b5132
RH
15289 if ((prefixes
15290 & (PREFIX_CS
15291 | PREFIX_DS
15292 | PREFIX_SS
15293 | PREFIX_ES
15294 | PREFIX_FS
15295 | PREFIX_GS)) == 0)
15296 prefixes |= PREFIX_DS;
6608db57 15297 append_seg ();
252b5132
RH
15298 ptr_reg (code, sizeflag);
15299}
15300
252b5132 15301static void
26ca5450 15302OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15303{
9b60702d 15304 int add;
161a04f6 15305 if (rex & REX_R)
c4a530c5 15306 {
161a04f6 15307 USED_REX (REX_R);
c4a530c5
JB
15308 add = 8;
15309 }
cb712a9e 15310 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 15311 {
f16cd0d5 15312 all_prefixes[last_lock_prefix] = 0;
c4a530c5
JB
15313 used_prefixes |= PREFIX_LOCK;
15314 add = 8;
15315 }
9b60702d
L
15316 else
15317 add = 0;
7967e09e 15318 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
9ce09ba2 15319 oappend_maybe_intel (scratchbuf);
252b5132
RH
15320}
15321
252b5132 15322static void
26ca5450 15323OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15324{
9b60702d 15325 int add;
161a04f6
L
15326 USED_REX (REX_R);
15327 if (rex & REX_R)
52b15da3 15328 add = 8;
9b60702d
L
15329 else
15330 add = 0;
d708bcba 15331 if (intel_syntax)
7967e09e 15332 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 15333 else
7967e09e 15334 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
15335 oappend (scratchbuf);
15336}
15337
252b5132 15338static void
26ca5450 15339OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15340{
7967e09e 15341 sprintf (scratchbuf, "%%tr%d", modrm.reg);
9ce09ba2 15342 oappend_maybe_intel (scratchbuf);
252b5132
RH
15343}
15344
15345static void
6f74c397 15346OP_R (int bytemode, int sizeflag)
252b5132 15347{
7967e09e 15348 if (modrm.mod == 3)
2da11e11
AM
15349 OP_E (bytemode, sizeflag);
15350 else
6608db57 15351 BadOp ();
252b5132
RH
15352}
15353
15354static void
26ca5450 15355OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15356{
b9733481
L
15357 int reg = modrm.reg;
15358 const char **names;
15359
041bd2e0
JH
15360 used_prefixes |= (prefixes & PREFIX_DATA);
15361 if (prefixes & PREFIX_DATA)
20f0a1fc 15362 {
b9733481 15363 names = names_xmm;
161a04f6
L
15364 USED_REX (REX_R);
15365 if (rex & REX_R)
b9733481 15366 reg += 8;
20f0a1fc 15367 }
041bd2e0 15368 else
b9733481
L
15369 names = names_mm;
15370 oappend (names[reg]);
252b5132
RH
15371}
15372
c608c12e 15373static void
c0f3af97 15374OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 15375{
b9733481
L
15376 int reg = modrm.reg;
15377 const char **names;
15378
161a04f6
L
15379 USED_REX (REX_R);
15380 if (rex & REX_R)
b9733481 15381 reg += 8;
43234a1e
L
15382 if (vex.evex)
15383 {
15384 if (!vex.r)
15385 reg += 16;
15386 }
15387
539f890d
L
15388 if (need_vex
15389 && bytemode != xmm_mode
43234a1e
L
15390 && bytemode != xmmq_mode
15391 && bytemode != evex_half_bcst_xmmq_mode
15392 && bytemode != ymm_mode
539f890d 15393 && bytemode != scalar_mode)
c0f3af97
L
15394 {
15395 switch (vex.length)
15396 {
15397 case 128:
b9733481 15398 names = names_xmm;
c0f3af97
L
15399 break;
15400 case 256:
5fc35d96
IT
15401 if (vex.w
15402 || (bytemode != vex_vsib_q_w_dq_mode
15403 && bytemode != vex_vsib_q_w_d_mode))
6c30d220
L
15404 names = names_ymm;
15405 else
15406 names = names_xmm;
c0f3af97 15407 break;
43234a1e
L
15408 case 512:
15409 names = names_zmm;
15410 break;
c0f3af97
L
15411 default:
15412 abort ();
15413 }
15414 }
43234a1e
L
15415 else if (bytemode == xmmq_mode
15416 || bytemode == evex_half_bcst_xmmq_mode)
15417 {
15418 switch (vex.length)
15419 {
15420 case 128:
15421 case 256:
15422 names = names_xmm;
15423 break;
15424 case 512:
15425 names = names_ymm;
15426 break;
15427 default:
15428 abort ();
15429 }
15430 }
15431 else if (bytemode == ymm_mode)
15432 names = names_ymm;
c0f3af97 15433 else
b9733481
L
15434 names = names_xmm;
15435 oappend (names[reg]);
c608c12e
AM
15436}
15437
252b5132 15438static void
26ca5450 15439OP_EM (int bytemode, int sizeflag)
252b5132 15440{
b9733481
L
15441 int reg;
15442 const char **names;
15443
7967e09e 15444 if (modrm.mod != 3)
252b5132 15445 {
b6169b20
L
15446 if (intel_syntax
15447 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
15448 {
15449 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15450 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 15451 }
252b5132
RH
15452 OP_E (bytemode, sizeflag);
15453 return;
15454 }
15455
b6169b20
L
15456 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
15457 swap_operand ();
15458
6608db57 15459 /* Skip mod/rm byte. */
4bba6815 15460 MODRM_CHECK;
252b5132 15461 codep++;
041bd2e0 15462 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15463 reg = modrm.rm;
041bd2e0 15464 if (prefixes & PREFIX_DATA)
20f0a1fc 15465 {
b9733481 15466 names = names_xmm;
161a04f6
L
15467 USED_REX (REX_B);
15468 if (rex & REX_B)
b9733481 15469 reg += 8;
20f0a1fc 15470 }
041bd2e0 15471 else
b9733481
L
15472 names = names_mm;
15473 oappend (names[reg]);
252b5132
RH
15474}
15475
246c51aa
L
15476/* cvt* are the only instructions in sse2 which have
15477 both SSE and MMX operands and also have 0x66 prefix
15478 in their opcode. 0x66 was originally used to differentiate
15479 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
15480 cvt* separately using OP_EMC and OP_MXC */
15481static void
15482OP_EMC (int bytemode, int sizeflag)
15483{
7967e09e 15484 if (modrm.mod != 3)
4d9567e0
MM
15485 {
15486 if (intel_syntax && bytemode == v_mode)
15487 {
15488 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15489 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 15490 }
4d9567e0
MM
15491 OP_E (bytemode, sizeflag);
15492 return;
15493 }
246c51aa 15494
4d9567e0
MM
15495 /* Skip mod/rm byte. */
15496 MODRM_CHECK;
15497 codep++;
15498 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15499 oappend (names_mm[modrm.rm]);
4d9567e0
MM
15500}
15501
15502static void
15503OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15504{
15505 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15506 oappend (names_mm[modrm.reg]);
4d9567e0
MM
15507}
15508
c608c12e 15509static void
26ca5450 15510OP_EX (int bytemode, int sizeflag)
c608c12e 15511{
b9733481
L
15512 int reg;
15513 const char **names;
d6f574e0
L
15514
15515 /* Skip mod/rm byte. */
15516 MODRM_CHECK;
15517 codep++;
15518
7967e09e 15519 if (modrm.mod != 3)
c608c12e 15520 {
c1e679ec 15521 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
15522 return;
15523 }
d6f574e0 15524
b9733481 15525 reg = modrm.rm;
161a04f6
L
15526 USED_REX (REX_B);
15527 if (rex & REX_B)
b9733481 15528 reg += 8;
43234a1e
L
15529 if (vex.evex)
15530 {
15531 USED_REX (REX_X);
15532 if ((rex & REX_X))
15533 reg += 16;
15534 }
c608c12e 15535
b6169b20 15536 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
15537 && (bytemode == x_swap_mode
15538 || bytemode == d_swap_mode
7bb15c6f 15539 || bytemode == d_scalar_swap_mode
539f890d
L
15540 || bytemode == q_swap_mode
15541 || bytemode == q_scalar_swap_mode))
b6169b20
L
15542 swap_operand ();
15543
c0f3af97
L
15544 if (need_vex
15545 && bytemode != xmm_mode
6c30d220
L
15546 && bytemode != xmmdw_mode
15547 && bytemode != xmmqd_mode
15548 && bytemode != xmm_mb_mode
15549 && bytemode != xmm_mw_mode
15550 && bytemode != xmm_md_mode
15551 && bytemode != xmm_mq_mode
43234a1e 15552 && bytemode != xmm_mdq_mode
539f890d 15553 && bytemode != xmmq_mode
43234a1e
L
15554 && bytemode != evex_half_bcst_xmmq_mode
15555 && bytemode != ymm_mode
539f890d 15556 && bytemode != d_scalar_mode
7bb15c6f 15557 && bytemode != d_scalar_swap_mode
539f890d 15558 && bytemode != q_scalar_mode
1c480963
L
15559 && bytemode != q_scalar_swap_mode
15560 && bytemode != vex_scalar_w_dq_mode)
c0f3af97
L
15561 {
15562 switch (vex.length)
15563 {
15564 case 128:
b9733481 15565 names = names_xmm;
c0f3af97
L
15566 break;
15567 case 256:
b9733481 15568 names = names_ymm;
c0f3af97 15569 break;
43234a1e
L
15570 case 512:
15571 names = names_zmm;
15572 break;
c0f3af97
L
15573 default:
15574 abort ();
15575 }
15576 }
43234a1e
L
15577 else if (bytemode == xmmq_mode
15578 || bytemode == evex_half_bcst_xmmq_mode)
15579 {
15580 switch (vex.length)
15581 {
15582 case 128:
15583 case 256:
15584 names = names_xmm;
15585 break;
15586 case 512:
15587 names = names_ymm;
15588 break;
15589 default:
15590 abort ();
15591 }
15592 }
15593 else if (bytemode == ymm_mode)
15594 names = names_ymm;
c0f3af97 15595 else
b9733481
L
15596 names = names_xmm;
15597 oappend (names[reg]);
c608c12e
AM
15598}
15599
252b5132 15600static void
26ca5450 15601OP_MS (int bytemode, int sizeflag)
252b5132 15602{
7967e09e 15603 if (modrm.mod == 3)
2da11e11
AM
15604 OP_EM (bytemode, sizeflag);
15605 else
6608db57 15606 BadOp ();
252b5132
RH
15607}
15608
992aaec9 15609static void
26ca5450 15610OP_XS (int bytemode, int sizeflag)
992aaec9 15611{
7967e09e 15612 if (modrm.mod == 3)
992aaec9
AM
15613 OP_EX (bytemode, sizeflag);
15614 else
6608db57 15615 BadOp ();
992aaec9
AM
15616}
15617
cc0ec051
AM
15618static void
15619OP_M (int bytemode, int sizeflag)
15620{
7967e09e 15621 if (modrm.mod == 3)
75413a22
L
15622 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
15623 BadOp ();
cc0ec051
AM
15624 else
15625 OP_E (bytemode, sizeflag);
15626}
15627
15628static void
15629OP_0f07 (int bytemode, int sizeflag)
15630{
7967e09e 15631 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
15632 BadOp ();
15633 else
15634 OP_E (bytemode, sizeflag);
15635}
15636
46e883c5 15637/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 15638 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 15639
cc0ec051 15640static void
46e883c5 15641NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 15642{
8b38ad71
L
15643 if ((prefixes & PREFIX_DATA) != 0
15644 || (rex != 0
15645 && rex != 0x48
15646 && address_mode == mode_64bit))
46e883c5
L
15647 OP_REG (bytemode, sizeflag);
15648 else
15649 strcpy (obuf, "nop");
15650}
15651
15652static void
15653NOP_Fixup2 (int bytemode, int sizeflag)
15654{
8b38ad71
L
15655 if ((prefixes & PREFIX_DATA) != 0
15656 || (rex != 0
15657 && rex != 0x48
15658 && address_mode == mode_64bit))
46e883c5 15659 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
15660}
15661
84037f8c 15662static const char *const Suffix3DNow[] = {
252b5132
RH
15663/* 00 */ NULL, NULL, NULL, NULL,
15664/* 04 */ NULL, NULL, NULL, NULL,
15665/* 08 */ NULL, NULL, NULL, NULL,
9e525108 15666/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
15667/* 10 */ NULL, NULL, NULL, NULL,
15668/* 14 */ NULL, NULL, NULL, NULL,
15669/* 18 */ NULL, NULL, NULL, NULL,
9e525108 15670/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
15671/* 20 */ NULL, NULL, NULL, NULL,
15672/* 24 */ NULL, NULL, NULL, NULL,
15673/* 28 */ NULL, NULL, NULL, NULL,
15674/* 2C */ NULL, NULL, NULL, NULL,
15675/* 30 */ NULL, NULL, NULL, NULL,
15676/* 34 */ NULL, NULL, NULL, NULL,
15677/* 38 */ NULL, NULL, NULL, NULL,
15678/* 3C */ NULL, NULL, NULL, NULL,
15679/* 40 */ NULL, NULL, NULL, NULL,
15680/* 44 */ NULL, NULL, NULL, NULL,
15681/* 48 */ NULL, NULL, NULL, NULL,
15682/* 4C */ NULL, NULL, NULL, NULL,
15683/* 50 */ NULL, NULL, NULL, NULL,
15684/* 54 */ NULL, NULL, NULL, NULL,
15685/* 58 */ NULL, NULL, NULL, NULL,
15686/* 5C */ NULL, NULL, NULL, NULL,
15687/* 60 */ NULL, NULL, NULL, NULL,
15688/* 64 */ NULL, NULL, NULL, NULL,
15689/* 68 */ NULL, NULL, NULL, NULL,
15690/* 6C */ NULL, NULL, NULL, NULL,
15691/* 70 */ NULL, NULL, NULL, NULL,
15692/* 74 */ NULL, NULL, NULL, NULL,
15693/* 78 */ NULL, NULL, NULL, NULL,
15694/* 7C */ NULL, NULL, NULL, NULL,
15695/* 80 */ NULL, NULL, NULL, NULL,
15696/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
15697/* 88 */ NULL, NULL, "pfnacc", NULL,
15698/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
15699/* 90 */ "pfcmpge", NULL, NULL, NULL,
15700/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
15701/* 98 */ NULL, NULL, "pfsub", NULL,
15702/* 9C */ NULL, NULL, "pfadd", NULL,
15703/* A0 */ "pfcmpgt", NULL, NULL, NULL,
15704/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
15705/* A8 */ NULL, NULL, "pfsubr", NULL,
15706/* AC */ NULL, NULL, "pfacc", NULL,
15707/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 15708/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 15709/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
15710/* BC */ NULL, NULL, NULL, "pavgusb",
15711/* C0 */ NULL, NULL, NULL, NULL,
15712/* C4 */ NULL, NULL, NULL, NULL,
15713/* C8 */ NULL, NULL, NULL, NULL,
15714/* CC */ NULL, NULL, NULL, NULL,
15715/* D0 */ NULL, NULL, NULL, NULL,
15716/* D4 */ NULL, NULL, NULL, NULL,
15717/* D8 */ NULL, NULL, NULL, NULL,
15718/* DC */ NULL, NULL, NULL, NULL,
15719/* E0 */ NULL, NULL, NULL, NULL,
15720/* E4 */ NULL, NULL, NULL, NULL,
15721/* E8 */ NULL, NULL, NULL, NULL,
15722/* EC */ NULL, NULL, NULL, NULL,
15723/* F0 */ NULL, NULL, NULL, NULL,
15724/* F4 */ NULL, NULL, NULL, NULL,
15725/* F8 */ NULL, NULL, NULL, NULL,
15726/* FC */ NULL, NULL, NULL, NULL,
15727};
15728
15729static void
26ca5450 15730OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
15731{
15732 const char *mnemonic;
15733
15734 FETCH_DATA (the_info, codep + 1);
15735 /* AMD 3DNow! instructions are specified by an opcode suffix in the
15736 place where an 8-bit immediate would normally go. ie. the last
15737 byte of the instruction. */
ea397f5b 15738 obufp = mnemonicendp;
c608c12e 15739 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 15740 if (mnemonic)
2da11e11 15741 oappend (mnemonic);
252b5132
RH
15742 else
15743 {
15744 /* Since a variable sized modrm/sib chunk is between the start
15745 of the opcode (0x0f0f) and the opcode suffix, we need to do
15746 all the modrm processing first, and don't know until now that
15747 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
15748 op_out[0][0] = '\0';
15749 op_out[1][0] = '\0';
6608db57 15750 BadOp ();
252b5132 15751 }
ea397f5b 15752 mnemonicendp = obufp;
252b5132 15753}
c608c12e 15754
ea397f5b
L
15755static struct op simd_cmp_op[] =
15756{
15757 { STRING_COMMA_LEN ("eq") },
15758 { STRING_COMMA_LEN ("lt") },
15759 { STRING_COMMA_LEN ("le") },
15760 { STRING_COMMA_LEN ("unord") },
15761 { STRING_COMMA_LEN ("neq") },
15762 { STRING_COMMA_LEN ("nlt") },
15763 { STRING_COMMA_LEN ("nle") },
15764 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
15765};
15766
15767static void
ad19981d 15768CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
15769{
15770 unsigned int cmp_type;
15771
15772 FETCH_DATA (the_info, codep + 1);
15773 cmp_type = *codep++ & 0xff;
c0f3af97 15774 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 15775 {
ad19981d 15776 char suffix [3];
ea397f5b 15777 char *p = mnemonicendp - 2;
ad19981d
L
15778 suffix[0] = p[0];
15779 suffix[1] = p[1];
15780 suffix[2] = '\0';
ea397f5b
L
15781 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
15782 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
15783 }
15784 else
15785 {
ad19981d
L
15786 /* We have a reserved extension byte. Output it directly. */
15787 scratchbuf[0] = '$';
15788 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 15789 oappend_maybe_intel (scratchbuf);
ad19981d 15790 scratchbuf[0] = '\0';
c608c12e
AM
15791 }
15792}
15793
ca164297 15794static void
b844680a
L
15795OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
15796 int sizeflag ATTRIBUTE_UNUSED)
15797{
15798 /* mwait %eax,%ecx */
15799 if (!intel_syntax)
15800 {
15801 const char **names = (address_mode == mode_64bit
15802 ? names64 : names32);
15803 strcpy (op_out[0], names[0]);
15804 strcpy (op_out[1], names[1]);
15805 two_source_ops = 1;
15806 }
15807 /* Skip mod/rm byte. */
15808 MODRM_CHECK;
15809 codep++;
15810}
15811
15812static void
15813OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
15814 int sizeflag ATTRIBUTE_UNUSED)
ca164297 15815{
b844680a
L
15816 /* monitor %eax,%ecx,%edx" */
15817 if (!intel_syntax)
ca164297 15818 {
b844680a 15819 const char **op1_names;
cb712a9e
L
15820 const char **names = (address_mode == mode_64bit
15821 ? names64 : names32);
1d9f512f 15822
b844680a
L
15823 if (!(prefixes & PREFIX_ADDR))
15824 op1_names = (address_mode == mode_16bit
15825 ? names16 : names);
ca164297
L
15826 else
15827 {
b844680a 15828 /* Remove "addr16/addr32". */
f16cd0d5 15829 all_prefixes[last_addr_prefix] = 0;
b844680a
L
15830 op1_names = (address_mode != mode_32bit
15831 ? names32 : names16);
15832 used_prefixes |= PREFIX_ADDR;
ca164297 15833 }
b844680a
L
15834 strcpy (op_out[0], op1_names[0]);
15835 strcpy (op_out[1], names[1]);
15836 strcpy (op_out[2], names[2]);
15837 two_source_ops = 1;
ca164297 15838 }
b844680a
L
15839 /* Skip mod/rm byte. */
15840 MODRM_CHECK;
15841 codep++;
30123838
JB
15842}
15843
6608db57
KH
15844static void
15845BadOp (void)
2da11e11 15846{
6608db57
KH
15847 /* Throw away prefixes and 1st. opcode byte. */
15848 codep = insn_codep + 1;
2da11e11
AM
15849 oappend ("(bad)");
15850}
4cc91dba 15851
35c52694
L
15852static void
15853REP_Fixup (int bytemode, int sizeflag)
15854{
15855 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
15856 lods and stos. */
35c52694 15857 if (prefixes & PREFIX_REPZ)
f16cd0d5 15858 all_prefixes[last_repz_prefix] = REP_PREFIX;
35c52694
L
15859
15860 switch (bytemode)
15861 {
15862 case al_reg:
15863 case eAX_reg:
15864 case indir_dx_reg:
15865 OP_IMREG (bytemode, sizeflag);
15866 break;
15867 case eDI_reg:
15868 OP_ESreg (bytemode, sizeflag);
15869 break;
15870 case eSI_reg:
15871 OP_DSreg (bytemode, sizeflag);
15872 break;
15873 default:
15874 abort ();
15875 break;
15876 }
15877}
f5804c90 15878
7e8b059b
L
15879/* For BND-prefixed instructions 0xF2 prefix should be displayed as
15880 "bnd". */
15881
15882static void
15883BND_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15884{
15885 if (prefixes & PREFIX_REPNZ)
15886 all_prefixes[last_repnz_prefix] = BND_PREFIX;
15887}
15888
42164a71
L
15889/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
15890 "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
15891 */
15892
15893static void
15894HLE_Fixup1 (int bytemode, int sizeflag)
15895{
15896 if (modrm.mod != 3
15897 && (prefixes & PREFIX_LOCK) != 0)
15898 {
15899 if (prefixes & PREFIX_REPZ)
15900 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15901 if (prefixes & PREFIX_REPNZ)
15902 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15903 }
15904
15905 OP_E (bytemode, sizeflag);
15906}
15907
15908/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
15909 "xacquire"/"xrelease" for memory operand. No check for LOCK prefix.
15910 */
15911
15912static void
15913HLE_Fixup2 (int bytemode, int sizeflag)
15914{
15915 if (modrm.mod != 3)
15916 {
15917 if (prefixes & PREFIX_REPZ)
15918 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15919 if (prefixes & PREFIX_REPNZ)
15920 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15921 }
15922
15923 OP_E (bytemode, sizeflag);
15924}
15925
15926/* Similar to OP_E. But the 0xf3 prefixes should be displayed as
15927 "xrelease" for memory operand. No check for LOCK prefix. */
15928
15929static void
15930HLE_Fixup3 (int bytemode, int sizeflag)
15931{
15932 if (modrm.mod != 3
15933 && last_repz_prefix > last_repnz_prefix
15934 && (prefixes & PREFIX_REPZ) != 0)
15935 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15936
15937 OP_E (bytemode, sizeflag);
15938}
15939
f5804c90
L
15940static void
15941CMPXCHG8B_Fixup (int bytemode, int sizeflag)
15942{
161a04f6
L
15943 USED_REX (REX_W);
15944 if (rex & REX_W)
f5804c90
L
15945 {
15946 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
15947 char *p = mnemonicendp - 2;
15948 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 15949 bytemode = o_mode;
f5804c90 15950 }
42164a71
L
15951 else if ((prefixes & PREFIX_LOCK) != 0)
15952 {
15953 if (prefixes & PREFIX_REPZ)
15954 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15955 if (prefixes & PREFIX_REPNZ)
15956 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15957 }
15958
f5804c90
L
15959 OP_M (bytemode, sizeflag);
15960}
42903f7f
L
15961
15962static void
15963XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
15964{
b9733481
L
15965 const char **names;
15966
c0f3af97
L
15967 if (need_vex)
15968 {
15969 switch (vex.length)
15970 {
15971 case 128:
b9733481 15972 names = names_xmm;
c0f3af97
L
15973 break;
15974 case 256:
b9733481 15975 names = names_ymm;
c0f3af97
L
15976 break;
15977 default:
15978 abort ();
15979 }
15980 }
15981 else
b9733481
L
15982 names = names_xmm;
15983 oappend (names[reg]);
42903f7f 15984}
381d071f
L
15985
15986static void
15987CRC32_Fixup (int bytemode, int sizeflag)
15988{
15989 /* Add proper suffix to "crc32". */
ea397f5b 15990 char *p = mnemonicendp;
381d071f
L
15991
15992 switch (bytemode)
15993 {
15994 case b_mode:
20592a94 15995 if (intel_syntax)
ea397f5b 15996 goto skip;
20592a94 15997
381d071f
L
15998 *p++ = 'b';
15999 break;
16000 case v_mode:
20592a94 16001 if (intel_syntax)
ea397f5b 16002 goto skip;
20592a94 16003
381d071f
L
16004 USED_REX (REX_W);
16005 if (rex & REX_W)
16006 *p++ = 'q';
7bb15c6f 16007 else
f16cd0d5
L
16008 {
16009 if (sizeflag & DFLAG)
16010 *p++ = 'l';
16011 else
16012 *p++ = 'w';
16013 used_prefixes |= (prefixes & PREFIX_DATA);
16014 }
381d071f
L
16015 break;
16016 default:
16017 oappend (INTERNAL_DISASSEMBLER_ERROR);
16018 break;
16019 }
ea397f5b 16020 mnemonicendp = p;
381d071f
L
16021 *p = '\0';
16022
ea397f5b 16023skip:
381d071f
L
16024 if (modrm.mod == 3)
16025 {
16026 int add;
16027
16028 /* Skip mod/rm byte. */
16029 MODRM_CHECK;
16030 codep++;
16031
16032 USED_REX (REX_B);
16033 add = (rex & REX_B) ? 8 : 0;
16034 if (bytemode == b_mode)
16035 {
16036 USED_REX (0);
16037 if (rex)
16038 oappend (names8rex[modrm.rm + add]);
16039 else
16040 oappend (names8[modrm.rm + add]);
16041 }
16042 else
16043 {
16044 USED_REX (REX_W);
16045 if (rex & REX_W)
16046 oappend (names64[modrm.rm + add]);
16047 else if ((prefixes & PREFIX_DATA))
16048 oappend (names16[modrm.rm + add]);
16049 else
16050 oappend (names32[modrm.rm + add]);
16051 }
16052 }
16053 else
9344ff29 16054 OP_E (bytemode, sizeflag);
381d071f 16055}
85f10a01 16056
eacc9c89
L
16057static void
16058FXSAVE_Fixup (int bytemode, int sizeflag)
16059{
16060 /* Add proper suffix to "fxsave" and "fxrstor". */
16061 USED_REX (REX_W);
16062 if (rex & REX_W)
16063 {
16064 char *p = mnemonicendp;
16065 *p++ = '6';
16066 *p++ = '4';
16067 *p = '\0';
16068 mnemonicendp = p;
16069 }
16070 OP_M (bytemode, sizeflag);
16071}
16072
c0f3af97
L
16073/* Display the destination register operand for instructions with
16074 VEX. */
16075
16076static void
16077OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16078{
539f890d 16079 int reg;
b9733481
L
16080 const char **names;
16081
c0f3af97
L
16082 if (!need_vex)
16083 abort ();
16084
16085 if (!need_vex_reg)
16086 return;
16087
539f890d 16088 reg = vex.register_specifier;
43234a1e
L
16089 if (vex.evex)
16090 {
16091 if (!vex.v)
16092 reg += 16;
16093 }
16094
539f890d
L
16095 if (bytemode == vex_scalar_mode)
16096 {
16097 oappend (names_xmm[reg]);
16098 return;
16099 }
16100
c0f3af97
L
16101 switch (vex.length)
16102 {
16103 case 128:
16104 switch (bytemode)
16105 {
16106 case vex_mode:
16107 case vex128_mode:
6c30d220 16108 case vex_vsib_q_w_dq_mode:
5fc35d96 16109 case vex_vsib_q_w_d_mode:
cb21baef
L
16110 names = names_xmm;
16111 break;
16112 case dq_mode:
16113 if (vex.w)
16114 names = names64;
16115 else
16116 names = names32;
c0f3af97 16117 break;
43234a1e
L
16118 case mask_mode:
16119 names = names_mask;
16120 break;
c0f3af97
L
16121 default:
16122 abort ();
16123 return;
16124 }
c0f3af97
L
16125 break;
16126 case 256:
16127 switch (bytemode)
16128 {
16129 case vex_mode:
16130 case vex256_mode:
6c30d220
L
16131 names = names_ymm;
16132 break;
16133 case vex_vsib_q_w_dq_mode:
5fc35d96 16134 case vex_vsib_q_w_d_mode:
6c30d220 16135 names = vex.w ? names_ymm : names_xmm;
c0f3af97 16136 break;
43234a1e
L
16137 case mask_mode:
16138 names = names_mask;
16139 break;
c0f3af97
L
16140 default:
16141 abort ();
16142 return;
16143 }
c0f3af97 16144 break;
43234a1e
L
16145 case 512:
16146 names = names_zmm;
16147 break;
c0f3af97
L
16148 default:
16149 abort ();
16150 break;
16151 }
539f890d 16152 oappend (names[reg]);
c0f3af97
L
16153}
16154
922d8de8
DR
16155/* Get the VEX immediate byte without moving codep. */
16156
16157static unsigned char
ccc5981b 16158get_vex_imm8 (int sizeflag, int opnum)
922d8de8
DR
16159{
16160 int bytes_before_imm = 0;
16161
922d8de8
DR
16162 if (modrm.mod != 3)
16163 {
16164 /* There are SIB/displacement bytes. */
16165 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
6c067bbb 16166 {
922d8de8 16167 /* 32/64 bit address mode */
6c067bbb 16168 int base = modrm.rm;
922d8de8
DR
16169
16170 /* Check SIB byte. */
6c067bbb
RM
16171 if (base == 4)
16172 {
16173 FETCH_DATA (the_info, codep + 1);
16174 base = *codep & 7;
16175 /* When decoding the third source, don't increase
16176 bytes_before_imm as this has already been incremented
16177 by one in OP_E_memory while decoding the second
16178 source operand. */
16179 if (opnum == 0)
16180 bytes_before_imm++;
16181 }
16182
16183 /* Don't increase bytes_before_imm when decoding the third source,
16184 it has already been incremented by OP_E_memory while decoding
16185 the second source operand. */
16186 if (opnum == 0)
16187 {
16188 switch (modrm.mod)
16189 {
16190 case 0:
16191 /* When modrm.rm == 5 or modrm.rm == 4 and base in
16192 SIB == 5, there is a 4 byte displacement. */
16193 if (base != 5)
16194 /* No displacement. */
16195 break;
16196 case 2:
16197 /* 4 byte displacement. */
16198 bytes_before_imm += 4;
16199 break;
16200 case 1:
16201 /* 1 byte displacement. */
16202 bytes_before_imm++;
16203 break;
16204 }
16205 }
16206 }
922d8de8 16207 else
02e647f9
SP
16208 {
16209 /* 16 bit address mode */
6c067bbb
RM
16210 /* Don't increase bytes_before_imm when decoding the third source,
16211 it has already been incremented by OP_E_memory while decoding
16212 the second source operand. */
16213 if (opnum == 0)
16214 {
02e647f9
SP
16215 switch (modrm.mod)
16216 {
16217 case 0:
16218 /* When modrm.rm == 6, there is a 2 byte displacement. */
16219 if (modrm.rm != 6)
16220 /* No displacement. */
16221 break;
16222 case 2:
16223 /* 2 byte displacement. */
16224 bytes_before_imm += 2;
16225 break;
16226 case 1:
16227 /* 1 byte displacement: when decoding the third source,
16228 don't increase bytes_before_imm as this has already
16229 been incremented by one in OP_E_memory while decoding
16230 the second source operand. */
16231 if (opnum == 0)
16232 bytes_before_imm++;
ccc5981b 16233
02e647f9
SP
16234 break;
16235 }
922d8de8
DR
16236 }
16237 }
16238 }
16239
16240 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
16241 return codep [bytes_before_imm];
16242}
16243
16244static void
16245OP_EX_VexReg (int bytemode, int sizeflag, int reg)
16246{
b9733481
L
16247 const char **names;
16248
922d8de8
DR
16249 if (reg == -1 && modrm.mod != 3)
16250 {
16251 OP_E_memory (bytemode, sizeflag);
16252 return;
16253 }
16254 else
16255 {
16256 if (reg == -1)
16257 {
16258 reg = modrm.rm;
16259 USED_REX (REX_B);
16260 if (rex & REX_B)
16261 reg += 8;
16262 }
16263 else if (reg > 7 && address_mode != mode_64bit)
16264 BadOp ();
16265 }
16266
16267 switch (vex.length)
16268 {
16269 case 128:
b9733481 16270 names = names_xmm;
922d8de8
DR
16271 break;
16272 case 256:
b9733481 16273 names = names_ymm;
922d8de8
DR
16274 break;
16275 default:
16276 abort ();
16277 }
b9733481 16278 oappend (names[reg]);
922d8de8
DR
16279}
16280
a683cc34
SP
16281static void
16282OP_EX_VexImmW (int bytemode, int sizeflag)
16283{
16284 int reg = -1;
16285 static unsigned char vex_imm8;
16286
16287 if (vex_w_done == 0)
16288 {
16289 vex_w_done = 1;
16290
16291 /* Skip mod/rm byte. */
16292 MODRM_CHECK;
16293 codep++;
16294
16295 vex_imm8 = get_vex_imm8 (sizeflag, 0);
16296
16297 if (vex.w)
16298 reg = vex_imm8 >> 4;
16299
16300 OP_EX_VexReg (bytemode, sizeflag, reg);
16301 }
16302 else if (vex_w_done == 1)
16303 {
16304 vex_w_done = 2;
16305
16306 if (!vex.w)
16307 reg = vex_imm8 >> 4;
16308
16309 OP_EX_VexReg (bytemode, sizeflag, reg);
16310 }
16311 else
16312 {
16313 /* Output the imm8 directly. */
16314 scratchbuf[0] = '$';
16315 print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
9ce09ba2 16316 oappend_maybe_intel (scratchbuf);
a683cc34
SP
16317 scratchbuf[0] = '\0';
16318 codep++;
16319 }
16320}
16321
5dd85c99
SP
16322static void
16323OP_Vex_2src (int bytemode, int sizeflag)
16324{
16325 if (modrm.mod == 3)
16326 {
b9733481 16327 int reg = modrm.rm;
5dd85c99 16328 USED_REX (REX_B);
b9733481
L
16329 if (rex & REX_B)
16330 reg += 8;
16331 oappend (names_xmm[reg]);
5dd85c99
SP
16332 }
16333 else
16334 {
16335 if (intel_syntax
16336 && (bytemode == v_mode || bytemode == v_swap_mode))
16337 {
16338 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16339 used_prefixes |= (prefixes & PREFIX_DATA);
16340 }
16341 OP_E (bytemode, sizeflag);
16342 }
16343}
16344
16345static void
16346OP_Vex_2src_1 (int bytemode, int sizeflag)
16347{
16348 if (modrm.mod == 3)
16349 {
16350 /* Skip mod/rm byte. */
16351 MODRM_CHECK;
16352 codep++;
16353 }
16354
16355 if (vex.w)
b9733481 16356 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
16357 else
16358 OP_Vex_2src (bytemode, sizeflag);
16359}
16360
16361static void
16362OP_Vex_2src_2 (int bytemode, int sizeflag)
16363{
16364 if (vex.w)
16365 OP_Vex_2src (bytemode, sizeflag);
16366 else
b9733481 16367 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
16368}
16369
922d8de8
DR
16370static void
16371OP_EX_VexW (int bytemode, int sizeflag)
16372{
16373 int reg = -1;
16374
16375 if (!vex_w_done)
16376 {
16377 vex_w_done = 1;
41effecb
SP
16378
16379 /* Skip mod/rm byte. */
16380 MODRM_CHECK;
16381 codep++;
16382
922d8de8 16383 if (vex.w)
ccc5981b 16384 reg = get_vex_imm8 (sizeflag, 0) >> 4;
922d8de8
DR
16385 }
16386 else
16387 {
16388 if (!vex.w)
ccc5981b 16389 reg = get_vex_imm8 (sizeflag, 1) >> 4;
922d8de8
DR
16390 }
16391
16392 OP_EX_VexReg (bytemode, sizeflag, reg);
16393}
16394
922d8de8
DR
16395static void
16396VEXI4_Fixup (int bytemode ATTRIBUTE_UNUSED,
16397 int sizeflag ATTRIBUTE_UNUSED)
16398{
16399 /* Skip the immediate byte and check for invalid bits. */
16400 FETCH_DATA (the_info, codep + 1);
16401 if (*codep++ & 0xf)
16402 BadOp ();
16403}
16404
c0f3af97
L
16405static void
16406OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16407{
16408 int reg;
b9733481
L
16409 const char **names;
16410
c0f3af97
L
16411 FETCH_DATA (the_info, codep + 1);
16412 reg = *codep++;
16413
16414 if (bytemode != x_mode)
16415 abort ();
16416
16417 if (reg & 0xf)
16418 BadOp ();
16419
16420 reg >>= 4;
dae39acc
L
16421 if (reg > 7 && address_mode != mode_64bit)
16422 BadOp ();
16423
c0f3af97
L
16424 switch (vex.length)
16425 {
16426 case 128:
b9733481 16427 names = names_xmm;
c0f3af97
L
16428 break;
16429 case 256:
b9733481 16430 names = names_ymm;
c0f3af97
L
16431 break;
16432 default:
16433 abort ();
16434 }
b9733481 16435 oappend (names[reg]);
c0f3af97
L
16436}
16437
922d8de8
DR
16438static void
16439OP_XMM_VexW (int bytemode, int sizeflag)
16440{
16441 /* Turn off the REX.W bit since it is used for swapping operands
16442 now. */
16443 rex &= ~REX_W;
16444 OP_XMM (bytemode, sizeflag);
16445}
16446
c0f3af97
L
16447static void
16448OP_EX_Vex (int bytemode, int sizeflag)
16449{
16450 if (modrm.mod != 3)
16451 {
16452 if (vex.register_specifier != 0)
16453 BadOp ();
16454 need_vex_reg = 0;
16455 }
16456 OP_EX (bytemode, sizeflag);
16457}
16458
16459static void
16460OP_XMM_Vex (int bytemode, int sizeflag)
16461{
16462 if (modrm.mod != 3)
16463 {
16464 if (vex.register_specifier != 0)
16465 BadOp ();
16466 need_vex_reg = 0;
16467 }
16468 OP_XMM (bytemode, sizeflag);
16469}
16470
16471static void
16472VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16473{
16474 switch (vex.length)
16475 {
16476 case 128:
ea397f5b 16477 mnemonicendp = stpcpy (obuf, "vzeroupper");
c0f3af97
L
16478 break;
16479 case 256:
ea397f5b 16480 mnemonicendp = stpcpy (obuf, "vzeroall");
c0f3af97
L
16481 break;
16482 default:
16483 abort ();
16484 }
16485}
16486
ea397f5b
L
16487static struct op vex_cmp_op[] =
16488{
16489 { STRING_COMMA_LEN ("eq") },
16490 { STRING_COMMA_LEN ("lt") },
16491 { STRING_COMMA_LEN ("le") },
16492 { STRING_COMMA_LEN ("unord") },
16493 { STRING_COMMA_LEN ("neq") },
16494 { STRING_COMMA_LEN ("nlt") },
16495 { STRING_COMMA_LEN ("nle") },
16496 { STRING_COMMA_LEN ("ord") },
16497 { STRING_COMMA_LEN ("eq_uq") },
16498 { STRING_COMMA_LEN ("nge") },
16499 { STRING_COMMA_LEN ("ngt") },
16500 { STRING_COMMA_LEN ("false") },
16501 { STRING_COMMA_LEN ("neq_oq") },
16502 { STRING_COMMA_LEN ("ge") },
16503 { STRING_COMMA_LEN ("gt") },
16504 { STRING_COMMA_LEN ("true") },
16505 { STRING_COMMA_LEN ("eq_os") },
16506 { STRING_COMMA_LEN ("lt_oq") },
16507 { STRING_COMMA_LEN ("le_oq") },
16508 { STRING_COMMA_LEN ("unord_s") },
16509 { STRING_COMMA_LEN ("neq_us") },
16510 { STRING_COMMA_LEN ("nlt_uq") },
16511 { STRING_COMMA_LEN ("nle_uq") },
16512 { STRING_COMMA_LEN ("ord_s") },
16513 { STRING_COMMA_LEN ("eq_us") },
16514 { STRING_COMMA_LEN ("nge_uq") },
16515 { STRING_COMMA_LEN ("ngt_uq") },
16516 { STRING_COMMA_LEN ("false_os") },
16517 { STRING_COMMA_LEN ("neq_os") },
16518 { STRING_COMMA_LEN ("ge_oq") },
16519 { STRING_COMMA_LEN ("gt_oq") },
16520 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
16521};
16522
16523static void
16524VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16525{
16526 unsigned int cmp_type;
16527
16528 FETCH_DATA (the_info, codep + 1);
16529 cmp_type = *codep++ & 0xff;
16530 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
16531 {
16532 char suffix [3];
ea397f5b 16533 char *p = mnemonicendp - 2;
c0f3af97
L
16534 suffix[0] = p[0];
16535 suffix[1] = p[1];
16536 suffix[2] = '\0';
ea397f5b
L
16537 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
16538 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
16539 }
16540 else
16541 {
16542 /* We have a reserved extension byte. Output it directly. */
16543 scratchbuf[0] = '$';
16544 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16545 oappend_maybe_intel (scratchbuf);
c0f3af97
L
16546 scratchbuf[0] = '\0';
16547 }
16548}
16549
43234a1e
L
16550static void
16551VPCMP_Fixup (int bytemode ATTRIBUTE_UNUSED,
16552 int sizeflag ATTRIBUTE_UNUSED)
16553{
16554 unsigned int cmp_type;
16555
16556 if (!vex.evex)
16557 abort ();
16558
16559 FETCH_DATA (the_info, codep + 1);
16560 cmp_type = *codep++ & 0xff;
16561 /* There are aliases for immediates 0, 1, 2, 4, 5, 6.
16562 If it's the case, print suffix, otherwise - print the immediate. */
16563 if (cmp_type < ARRAY_SIZE (simd_cmp_op)
16564 && cmp_type != 3
16565 && cmp_type != 7)
16566 {
16567 char suffix [3];
16568 char *p = mnemonicendp - 2;
16569
16570 /* vpcmp* can have both one- and two-lettered suffix. */
16571 if (p[0] == 'p')
16572 {
16573 p++;
16574 suffix[0] = p[0];
16575 suffix[1] = '\0';
16576 }
16577 else
16578 {
16579 suffix[0] = p[0];
16580 suffix[1] = p[1];
16581 suffix[2] = '\0';
16582 }
16583
16584 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
16585 mnemonicendp += simd_cmp_op[cmp_type].len;
16586 }
16587 else
16588 {
16589 /* We have a reserved extension byte. Output it directly. */
16590 scratchbuf[0] = '$';
16591 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16592 oappend_maybe_intel (scratchbuf);
43234a1e
L
16593 scratchbuf[0] = '\0';
16594 }
16595}
16596
ea397f5b
L
16597static const struct op pclmul_op[] =
16598{
16599 { STRING_COMMA_LEN ("lql") },
16600 { STRING_COMMA_LEN ("hql") },
16601 { STRING_COMMA_LEN ("lqh") },
16602 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
16603};
16604
16605static void
16606PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
16607 int sizeflag ATTRIBUTE_UNUSED)
16608{
16609 unsigned int pclmul_type;
16610
16611 FETCH_DATA (the_info, codep + 1);
16612 pclmul_type = *codep++ & 0xff;
16613 switch (pclmul_type)
16614 {
16615 case 0x10:
16616 pclmul_type = 2;
16617 break;
16618 case 0x11:
16619 pclmul_type = 3;
16620 break;
16621 default:
16622 break;
7bb15c6f 16623 }
c0f3af97
L
16624 if (pclmul_type < ARRAY_SIZE (pclmul_op))
16625 {
16626 char suffix [4];
ea397f5b 16627 char *p = mnemonicendp - 3;
c0f3af97
L
16628 suffix[0] = p[0];
16629 suffix[1] = p[1];
16630 suffix[2] = p[2];
16631 suffix[3] = '\0';
ea397f5b
L
16632 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
16633 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
16634 }
16635 else
16636 {
16637 /* We have a reserved extension byte. Output it directly. */
16638 scratchbuf[0] = '$';
16639 print_operand_value (scratchbuf + 1, 1, pclmul_type);
9ce09ba2 16640 oappend_maybe_intel (scratchbuf);
c0f3af97
L
16641 scratchbuf[0] = '\0';
16642 }
16643}
16644
f1f8f695
L
16645static void
16646MOVBE_Fixup (int bytemode, int sizeflag)
16647{
16648 /* Add proper suffix to "movbe". */
ea397f5b 16649 char *p = mnemonicendp;
f1f8f695
L
16650
16651 switch (bytemode)
16652 {
16653 case v_mode:
16654 if (intel_syntax)
ea397f5b 16655 goto skip;
f1f8f695
L
16656
16657 USED_REX (REX_W);
16658 if (sizeflag & SUFFIX_ALWAYS)
16659 {
16660 if (rex & REX_W)
16661 *p++ = 'q';
f1f8f695 16662 else
f16cd0d5
L
16663 {
16664 if (sizeflag & DFLAG)
16665 *p++ = 'l';
16666 else
16667 *p++ = 'w';
16668 used_prefixes |= (prefixes & PREFIX_DATA);
16669 }
f1f8f695 16670 }
f1f8f695
L
16671 break;
16672 default:
16673 oappend (INTERNAL_DISASSEMBLER_ERROR);
16674 break;
16675 }
ea397f5b 16676 mnemonicendp = p;
f1f8f695
L
16677 *p = '\0';
16678
ea397f5b 16679skip:
f1f8f695
L
16680 OP_M (bytemode, sizeflag);
16681}
f88c9eb0
SP
16682
16683static void
16684OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16685{
16686 int reg;
16687 const char **names;
16688
16689 /* Skip mod/rm byte. */
16690 MODRM_CHECK;
16691 codep++;
16692
16693 if (vex.w)
16694 names = names64;
f88c9eb0 16695 else
ce7d077e 16696 names = names32;
f88c9eb0
SP
16697
16698 reg = modrm.rm;
16699 USED_REX (REX_B);
16700 if (rex & REX_B)
16701 reg += 8;
16702
16703 oappend (names[reg]);
16704}
16705
16706static void
16707OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16708{
16709 const char **names;
16710
16711 if (vex.w)
16712 names = names64;
f88c9eb0 16713 else
ce7d077e 16714 names = names32;
f88c9eb0
SP
16715
16716 oappend (names[vex.register_specifier]);
16717}
43234a1e
L
16718
16719static void
16720OP_Mask (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16721{
16722 if (!vex.evex
16723 || bytemode != mask_mode)
16724 abort ();
16725
16726 USED_REX (REX_R);
16727 if ((rex & REX_R) != 0 || !vex.r)
16728 {
16729 BadOp ();
16730 return;
16731 }
16732
16733 oappend (names_mask [modrm.reg]);
16734}
16735
16736static void
16737OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16738{
16739 if (!vex.evex
16740 || (bytemode != evex_rounding_mode
16741 && bytemode != evex_sae_mode))
16742 abort ();
16743 if (modrm.mod == 3 && vex.b)
16744 switch (bytemode)
16745 {
16746 case evex_rounding_mode:
16747 oappend (names_rounding[vex.ll]);
16748 break;
16749 case evex_sae_mode:
16750 oappend ("{sae}");
16751 break;
16752 default:
16753 break;
16754 }
16755}
This page took 1.794162 seconds and 4 git commands to generate.