Further cleanup of signal-while-stepping-over-bp-other-thread.c.
[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
L
429#define MVexVSIBDWpX { OP_M, vex_vsib_d_w_dq_mode }
430#define MVexVSIBQWpX { OP_M, vex_vsib_q_w_dq_mode }
431
35c52694 432/* Used handle "rep" prefix for string instructions. */
ce518a5f
L
433#define Xbr { REP_Fixup, eSI_reg }
434#define Xvr { REP_Fixup, eSI_reg }
435#define Ybr { REP_Fixup, eDI_reg }
436#define Yvr { REP_Fixup, eDI_reg }
437#define Yzr { REP_Fixup, eDI_reg }
438#define indirDXr { REP_Fixup, indir_dx_reg }
439#define ALr { REP_Fixup, al_reg }
440#define eAXr { REP_Fixup, eAX_reg }
441
42164a71
L
442/* Used handle HLE prefix for lockable instructions. */
443#define Ebh1 { HLE_Fixup1, b_mode }
444#define Evh1 { HLE_Fixup1, v_mode }
445#define Ebh2 { HLE_Fixup2, b_mode }
446#define Evh2 { HLE_Fixup2, v_mode }
447#define Ebh3 { HLE_Fixup3, b_mode }
448#define Evh3 { HLE_Fixup3, v_mode }
449
7e8b059b
L
450#define BND { BND_Fixup, 0 }
451
ce518a5f
L
452#define cond_jump_flag { NULL, cond_jump_mode }
453#define loop_jcxz_flag { NULL, loop_jcxz_mode }
3ffd33cf 454
252b5132 455/* bits in sizeflag */
252b5132 456#define SUFFIX_ALWAYS 4
252b5132
RH
457#define AFLAG 2
458#define DFLAG 1
459
51e7da1b
L
460enum
461{
462 /* byte operand */
463 b_mode = 1,
464 /* byte operand with operand swapped */
3873ba12 465 b_swap_mode,
e3949f17
L
466 /* byte operand, sign extend like 'T' suffix */
467 b_T_mode,
51e7da1b 468 /* operand size depends on prefixes */
3873ba12 469 v_mode,
51e7da1b 470 /* operand size depends on prefixes with operand swapped */
3873ba12 471 v_swap_mode,
51e7da1b 472 /* word operand */
3873ba12 473 w_mode,
51e7da1b 474 /* double word operand */
3873ba12 475 d_mode,
51e7da1b 476 /* double word operand with operand swapped */
3873ba12 477 d_swap_mode,
51e7da1b 478 /* quad word operand */
3873ba12 479 q_mode,
51e7da1b 480 /* quad word operand with operand swapped */
3873ba12 481 q_swap_mode,
51e7da1b 482 /* ten-byte operand */
3873ba12 483 t_mode,
43234a1e
L
484 /* 16-byte XMM, 32-byte YMM or 64-byte ZMM operand. In EVEX with
485 broadcast enabled. */
3873ba12 486 x_mode,
43234a1e
L
487 /* Similar to x_mode, but with different EVEX mem shifts. */
488 evex_x_gscat_mode,
489 /* Similar to x_mode, but with disabled broadcast. */
490 evex_x_nobcst_mode,
491 /* Similar to x_mode, but with operands swapped and disabled broadcast
492 in EVEX. */
3873ba12 493 x_swap_mode,
51e7da1b 494 /* 16-byte XMM operand */
3873ba12 495 xmm_mode,
43234a1e
L
496 /* XMM, XMM or YMM register operand, or quad word, xmmword or ymmword
497 memory operand (depending on vector length). Broadcast isn't
498 allowed. */
3873ba12 499 xmmq_mode,
43234a1e
L
500 /* Same as xmmq_mode, but broadcast is allowed. */
501 evex_half_bcst_xmmq_mode,
6c30d220
L
502 /* XMM register or byte memory operand */
503 xmm_mb_mode,
504 /* XMM register or word memory operand */
505 xmm_mw_mode,
506 /* XMM register or double word memory operand */
507 xmm_md_mode,
508 /* XMM register or quad word memory operand */
509 xmm_mq_mode,
43234a1e
L
510 /* XMM register or double/quad word memory operand, depending on
511 VEX.W. */
512 xmm_mdq_mode,
513 /* 16-byte XMM, word, double word or quad word operand. */
6c30d220 514 xmmdw_mode,
43234a1e 515 /* 16-byte XMM, double word, quad word operand or xmm word operand. */
6c30d220 516 xmmqd_mode,
43234a1e
L
517 /* 32-byte YMM operand */
518 ymm_mode,
519 /* quad word, ymmword or zmmword memory operand. */
3873ba12 520 ymmq_mode,
6c30d220
L
521 /* 32-byte YMM or 16-byte word operand */
522 ymmxmm_mode,
51e7da1b 523 /* d_mode in 32bit, q_mode in 64bit mode. */
3873ba12 524 m_mode,
51e7da1b 525 /* pair of v_mode operands */
3873ba12
L
526 a_mode,
527 cond_jump_mode,
528 loop_jcxz_mode,
7e8b059b 529 v_bnd_mode,
51e7da1b 530 /* operand size depends on REX prefixes. */
3873ba12 531 dq_mode,
51e7da1b 532 /* registers like dq_mode, memory like w_mode. */
3873ba12 533 dqw_mode,
7e8b059b 534 bnd_mode,
51e7da1b 535 /* 4- or 6-byte pointer operand */
3873ba12
L
536 f_mode,
537 const_1_mode,
51e7da1b 538 /* v_mode for stack-related opcodes. */
3873ba12 539 stack_v_mode,
51e7da1b 540 /* non-quad operand size depends on prefixes */
3873ba12 541 z_mode,
51e7da1b 542 /* 16-byte operand */
3873ba12 543 o_mode,
51e7da1b 544 /* registers like dq_mode, memory like b_mode. */
3873ba12 545 dqb_mode,
51e7da1b 546 /* registers like dq_mode, memory like d_mode. */
3873ba12 547 dqd_mode,
51e7da1b 548 /* normal vex mode */
3873ba12 549 vex_mode,
51e7da1b 550 /* 128bit vex mode */
3873ba12 551 vex128_mode,
51e7da1b 552 /* 256bit vex mode */
3873ba12 553 vex256_mode,
51e7da1b 554 /* operand size depends on the VEX.W bit. */
3873ba12 555 vex_w_dq_mode,
d55ee72f 556
6c30d220
L
557 /* Similar to vex_w_dq_mode, with VSIB dword indices. */
558 vex_vsib_d_w_dq_mode,
559 /* Similar to vex_w_dq_mode, with VSIB qword indices. */
560 vex_vsib_q_w_dq_mode,
561
539f890d
L
562 /* scalar, ignore vector length. */
563 scalar_mode,
564 /* like d_mode, ignore vector length. */
565 d_scalar_mode,
566 /* like d_swap_mode, ignore vector length. */
567 d_scalar_swap_mode,
568 /* like q_mode, ignore vector length. */
569 q_scalar_mode,
570 /* like q_swap_mode, ignore vector length. */
571 q_scalar_swap_mode,
572 /* like vex_mode, ignore vector length. */
573 vex_scalar_mode,
1c480963
L
574 /* like vex_w_dq_mode, ignore vector length. */
575 vex_scalar_w_dq_mode,
539f890d 576
43234a1e
L
577 /* Static rounding. */
578 evex_rounding_mode,
579 /* Supress all exceptions. */
580 evex_sae_mode,
581
582 /* Mask register operand. */
583 mask_mode,
584
3873ba12
L
585 es_reg,
586 cs_reg,
587 ss_reg,
588 ds_reg,
589 fs_reg,
590 gs_reg,
d55ee72f 591
3873ba12
L
592 eAX_reg,
593 eCX_reg,
594 eDX_reg,
595 eBX_reg,
596 eSP_reg,
597 eBP_reg,
598 eSI_reg,
599 eDI_reg,
d55ee72f 600
3873ba12
L
601 al_reg,
602 cl_reg,
603 dl_reg,
604 bl_reg,
605 ah_reg,
606 ch_reg,
607 dh_reg,
608 bh_reg,
d55ee72f 609
3873ba12
L
610 ax_reg,
611 cx_reg,
612 dx_reg,
613 bx_reg,
614 sp_reg,
615 bp_reg,
616 si_reg,
617 di_reg,
d55ee72f 618
3873ba12
L
619 rAX_reg,
620 rCX_reg,
621 rDX_reg,
622 rBX_reg,
623 rSP_reg,
624 rBP_reg,
625 rSI_reg,
626 rDI_reg,
d55ee72f 627
3873ba12
L
628 z_mode_ax_reg,
629 indir_dx_reg
51e7da1b 630};
252b5132 631
51e7da1b
L
632enum
633{
634 FLOATCODE = 1,
3873ba12
L
635 USE_REG_TABLE,
636 USE_MOD_TABLE,
637 USE_RM_TABLE,
638 USE_PREFIX_TABLE,
639 USE_X86_64_TABLE,
640 USE_3BYTE_TABLE,
f88c9eb0 641 USE_XOP_8F_TABLE,
3873ba12
L
642 USE_VEX_C4_TABLE,
643 USE_VEX_C5_TABLE,
9e30b8e0 644 USE_VEX_LEN_TABLE,
43234a1e
L
645 USE_VEX_W_TABLE,
646 USE_EVEX_TABLE
51e7da1b 647};
6439fc28 648
1ceb70f8 649#define FLOAT NULL, { { NULL, FLOATCODE } }
4efba78c 650
4e7d34a6 651#define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }
1ceb70f8
L
652#define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
653#define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
654#define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
655#define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
4e7d34a6
L
656#define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
657#define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
f88c9eb0 658#define XOP_8F_TABLE(I) DIS386 (USE_XOP_8F_TABLE, (I))
c0f3af97
L
659#define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
660#define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
661#define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
9e30b8e0 662#define VEX_W_TABLE(I) DIS386 (USE_VEX_W_TABLE, (I))
43234a1e 663#define EVEX_TABLE(I) DIS386 (USE_EVEX_TABLE, (I))
1ceb70f8 664
51e7da1b
L
665enum
666{
667 REG_80 = 0,
3873ba12
L
668 REG_81,
669 REG_82,
670 REG_8F,
671 REG_C0,
672 REG_C1,
673 REG_C6,
674 REG_C7,
675 REG_D0,
676 REG_D1,
677 REG_D2,
678 REG_D3,
679 REG_F6,
680 REG_F7,
681 REG_FE,
682 REG_FF,
683 REG_0F00,
684 REG_0F01,
685 REG_0F0D,
686 REG_0F18,
687 REG_0F71,
688 REG_0F72,
689 REG_0F73,
690 REG_0FA6,
691 REG_0FA7,
692 REG_0FAE,
693 REG_0FBA,
694 REG_0FC7,
592a252b
L
695 REG_VEX_0F71,
696 REG_VEX_0F72,
697 REG_VEX_0F73,
698 REG_VEX_0FAE,
f12dc422 699 REG_VEX_0F38F3,
f88c9eb0 700 REG_XOP_LWPCB,
2a2a0f38
QN
701 REG_XOP_LWP,
702 REG_XOP_TBM_01,
43234a1e
L
703 REG_XOP_TBM_02,
704
705 REG_EVEX_0F72,
706 REG_EVEX_0F73,
707 REG_EVEX_0F38C6,
708 REG_EVEX_0F38C7
51e7da1b 709};
1ceb70f8 710
51e7da1b
L
711enum
712{
713 MOD_8D = 0,
42164a71
L
714 MOD_C6_REG_7,
715 MOD_C7_REG_7,
4a357820
MZ
716 MOD_FF_REG_3,
717 MOD_FF_REG_5,
3873ba12
L
718 MOD_0F01_REG_0,
719 MOD_0F01_REG_1,
720 MOD_0F01_REG_2,
721 MOD_0F01_REG_3,
722 MOD_0F01_REG_7,
723 MOD_0F12_PREFIX_0,
724 MOD_0F13,
725 MOD_0F16_PREFIX_0,
726 MOD_0F17,
727 MOD_0F18_REG_0,
728 MOD_0F18_REG_1,
729 MOD_0F18_REG_2,
730 MOD_0F18_REG_3,
d7189fa5
RM
731 MOD_0F18_REG_4,
732 MOD_0F18_REG_5,
733 MOD_0F18_REG_6,
734 MOD_0F18_REG_7,
7e8b059b
L
735 MOD_0F1A_PREFIX_0,
736 MOD_0F1B_PREFIX_0,
737 MOD_0F1B_PREFIX_1,
3873ba12
L
738 MOD_0F20,
739 MOD_0F21,
740 MOD_0F22,
741 MOD_0F23,
742 MOD_0F24,
743 MOD_0F26,
744 MOD_0F2B_PREFIX_0,
745 MOD_0F2B_PREFIX_1,
746 MOD_0F2B_PREFIX_2,
747 MOD_0F2B_PREFIX_3,
748 MOD_0F51,
749 MOD_0F71_REG_2,
750 MOD_0F71_REG_4,
751 MOD_0F71_REG_6,
752 MOD_0F72_REG_2,
753 MOD_0F72_REG_4,
754 MOD_0F72_REG_6,
755 MOD_0F73_REG_2,
756 MOD_0F73_REG_3,
757 MOD_0F73_REG_6,
758 MOD_0F73_REG_7,
759 MOD_0FAE_REG_0,
760 MOD_0FAE_REG_1,
761 MOD_0FAE_REG_2,
762 MOD_0FAE_REG_3,
763 MOD_0FAE_REG_4,
764 MOD_0FAE_REG_5,
765 MOD_0FAE_REG_6,
766 MOD_0FAE_REG_7,
767 MOD_0FB2,
768 MOD_0FB4,
769 MOD_0FB5,
963f3586
IT
770 MOD_0FC7_REG_3,
771 MOD_0FC7_REG_4,
772 MOD_0FC7_REG_5,
3873ba12
L
773 MOD_0FC7_REG_6,
774 MOD_0FC7_REG_7,
775 MOD_0FD7,
776 MOD_0FE7_PREFIX_2,
777 MOD_0FF0_PREFIX_3,
778 MOD_0F382A_PREFIX_2,
779 MOD_62_32BIT,
780 MOD_C4_32BIT,
781 MOD_C5_32BIT,
592a252b
L
782 MOD_VEX_0F12_PREFIX_0,
783 MOD_VEX_0F13,
784 MOD_VEX_0F16_PREFIX_0,
785 MOD_VEX_0F17,
786 MOD_VEX_0F2B,
787 MOD_VEX_0F50,
788 MOD_VEX_0F71_REG_2,
789 MOD_VEX_0F71_REG_4,
790 MOD_VEX_0F71_REG_6,
791 MOD_VEX_0F72_REG_2,
792 MOD_VEX_0F72_REG_4,
793 MOD_VEX_0F72_REG_6,
794 MOD_VEX_0F73_REG_2,
795 MOD_VEX_0F73_REG_3,
796 MOD_VEX_0F73_REG_6,
797 MOD_VEX_0F73_REG_7,
798 MOD_VEX_0FAE_REG_2,
799 MOD_VEX_0FAE_REG_3,
800 MOD_VEX_0FD7_PREFIX_2,
801 MOD_VEX_0FE7_PREFIX_2,
802 MOD_VEX_0FF0_PREFIX_3,
592a252b
L
803 MOD_VEX_0F381A_PREFIX_2,
804 MOD_VEX_0F382A_PREFIX_2,
805 MOD_VEX_0F382C_PREFIX_2,
806 MOD_VEX_0F382D_PREFIX_2,
807 MOD_VEX_0F382E_PREFIX_2,
6c30d220
L
808 MOD_VEX_0F382F_PREFIX_2,
809 MOD_VEX_0F385A_PREFIX_2,
810 MOD_VEX_0F388C_PREFIX_2,
811 MOD_VEX_0F388E_PREFIX_2,
43234a1e
L
812
813 MOD_EVEX_0F10_PREFIX_1,
814 MOD_EVEX_0F10_PREFIX_3,
815 MOD_EVEX_0F11_PREFIX_1,
816 MOD_EVEX_0F11_PREFIX_3,
817 MOD_EVEX_0F12_PREFIX_0,
818 MOD_EVEX_0F16_PREFIX_0,
819 MOD_EVEX_0F38C6_REG_1,
820 MOD_EVEX_0F38C6_REG_2,
821 MOD_EVEX_0F38C6_REG_5,
822 MOD_EVEX_0F38C6_REG_6,
823 MOD_EVEX_0F38C7_REG_1,
824 MOD_EVEX_0F38C7_REG_2,
825 MOD_EVEX_0F38C7_REG_5,
826 MOD_EVEX_0F38C7_REG_6
51e7da1b 827};
1ceb70f8 828
51e7da1b
L
829enum
830{
42164a71
L
831 RM_C6_REG_7 = 0,
832 RM_C7_REG_7,
833 RM_0F01_REG_0,
3873ba12
L
834 RM_0F01_REG_1,
835 RM_0F01_REG_2,
836 RM_0F01_REG_3,
837 RM_0F01_REG_7,
838 RM_0FAE_REG_5,
839 RM_0FAE_REG_6,
840 RM_0FAE_REG_7
51e7da1b 841};
1ceb70f8 842
51e7da1b
L
843enum
844{
845 PREFIX_90 = 0,
3873ba12
L
846 PREFIX_0F10,
847 PREFIX_0F11,
848 PREFIX_0F12,
849 PREFIX_0F16,
7e8b059b
L
850 PREFIX_0F1A,
851 PREFIX_0F1B,
3873ba12
L
852 PREFIX_0F2A,
853 PREFIX_0F2B,
854 PREFIX_0F2C,
855 PREFIX_0F2D,
856 PREFIX_0F2E,
857 PREFIX_0F2F,
858 PREFIX_0F51,
859 PREFIX_0F52,
860 PREFIX_0F53,
861 PREFIX_0F58,
862 PREFIX_0F59,
863 PREFIX_0F5A,
864 PREFIX_0F5B,
865 PREFIX_0F5C,
866 PREFIX_0F5D,
867 PREFIX_0F5E,
868 PREFIX_0F5F,
869 PREFIX_0F60,
870 PREFIX_0F61,
871 PREFIX_0F62,
872 PREFIX_0F6C,
873 PREFIX_0F6D,
874 PREFIX_0F6F,
875 PREFIX_0F70,
876 PREFIX_0F73_REG_3,
877 PREFIX_0F73_REG_7,
878 PREFIX_0F78,
879 PREFIX_0F79,
880 PREFIX_0F7C,
881 PREFIX_0F7D,
882 PREFIX_0F7E,
883 PREFIX_0F7F,
c7b8aa3a
L
884 PREFIX_0FAE_REG_0,
885 PREFIX_0FAE_REG_1,
886 PREFIX_0FAE_REG_2,
887 PREFIX_0FAE_REG_3,
963f3586 888 PREFIX_0FAE_REG_7,
3873ba12 889 PREFIX_0FB8,
f12dc422 890 PREFIX_0FBC,
3873ba12
L
891 PREFIX_0FBD,
892 PREFIX_0FC2,
893 PREFIX_0FC3,
894 PREFIX_0FC7_REG_6,
895 PREFIX_0FD0,
896 PREFIX_0FD6,
897 PREFIX_0FE6,
898 PREFIX_0FE7,
899 PREFIX_0FF0,
900 PREFIX_0FF7,
901 PREFIX_0F3810,
902 PREFIX_0F3814,
903 PREFIX_0F3815,
904 PREFIX_0F3817,
905 PREFIX_0F3820,
906 PREFIX_0F3821,
907 PREFIX_0F3822,
908 PREFIX_0F3823,
909 PREFIX_0F3824,
910 PREFIX_0F3825,
911 PREFIX_0F3828,
912 PREFIX_0F3829,
913 PREFIX_0F382A,
914 PREFIX_0F382B,
915 PREFIX_0F3830,
916 PREFIX_0F3831,
917 PREFIX_0F3832,
918 PREFIX_0F3833,
919 PREFIX_0F3834,
920 PREFIX_0F3835,
921 PREFIX_0F3837,
922 PREFIX_0F3838,
923 PREFIX_0F3839,
924 PREFIX_0F383A,
925 PREFIX_0F383B,
926 PREFIX_0F383C,
927 PREFIX_0F383D,
928 PREFIX_0F383E,
929 PREFIX_0F383F,
930 PREFIX_0F3840,
931 PREFIX_0F3841,
932 PREFIX_0F3880,
933 PREFIX_0F3881,
6c30d220 934 PREFIX_0F3882,
a0046408
L
935 PREFIX_0F38C8,
936 PREFIX_0F38C9,
937 PREFIX_0F38CA,
938 PREFIX_0F38CB,
939 PREFIX_0F38CC,
940 PREFIX_0F38CD,
3873ba12
L
941 PREFIX_0F38DB,
942 PREFIX_0F38DC,
943 PREFIX_0F38DD,
944 PREFIX_0F38DE,
945 PREFIX_0F38DF,
946 PREFIX_0F38F0,
947 PREFIX_0F38F1,
e2e1fcde 948 PREFIX_0F38F6,
3873ba12
L
949 PREFIX_0F3A08,
950 PREFIX_0F3A09,
951 PREFIX_0F3A0A,
952 PREFIX_0F3A0B,
953 PREFIX_0F3A0C,
954 PREFIX_0F3A0D,
955 PREFIX_0F3A0E,
956 PREFIX_0F3A14,
957 PREFIX_0F3A15,
958 PREFIX_0F3A16,
959 PREFIX_0F3A17,
960 PREFIX_0F3A20,
961 PREFIX_0F3A21,
962 PREFIX_0F3A22,
963 PREFIX_0F3A40,
964 PREFIX_0F3A41,
965 PREFIX_0F3A42,
966 PREFIX_0F3A44,
967 PREFIX_0F3A60,
968 PREFIX_0F3A61,
969 PREFIX_0F3A62,
970 PREFIX_0F3A63,
a0046408 971 PREFIX_0F3ACC,
3873ba12 972 PREFIX_0F3ADF,
592a252b
L
973 PREFIX_VEX_0F10,
974 PREFIX_VEX_0F11,
975 PREFIX_VEX_0F12,
976 PREFIX_VEX_0F16,
977 PREFIX_VEX_0F2A,
978 PREFIX_VEX_0F2C,
979 PREFIX_VEX_0F2D,
980 PREFIX_VEX_0F2E,
981 PREFIX_VEX_0F2F,
43234a1e
L
982 PREFIX_VEX_0F41,
983 PREFIX_VEX_0F42,
984 PREFIX_VEX_0F44,
985 PREFIX_VEX_0F45,
986 PREFIX_VEX_0F46,
987 PREFIX_VEX_0F47,
988 PREFIX_VEX_0F4B,
592a252b
L
989 PREFIX_VEX_0F51,
990 PREFIX_VEX_0F52,
991 PREFIX_VEX_0F53,
992 PREFIX_VEX_0F58,
993 PREFIX_VEX_0F59,
994 PREFIX_VEX_0F5A,
995 PREFIX_VEX_0F5B,
996 PREFIX_VEX_0F5C,
997 PREFIX_VEX_0F5D,
998 PREFIX_VEX_0F5E,
999 PREFIX_VEX_0F5F,
1000 PREFIX_VEX_0F60,
1001 PREFIX_VEX_0F61,
1002 PREFIX_VEX_0F62,
1003 PREFIX_VEX_0F63,
1004 PREFIX_VEX_0F64,
1005 PREFIX_VEX_0F65,
1006 PREFIX_VEX_0F66,
1007 PREFIX_VEX_0F67,
1008 PREFIX_VEX_0F68,
1009 PREFIX_VEX_0F69,
1010 PREFIX_VEX_0F6A,
1011 PREFIX_VEX_0F6B,
1012 PREFIX_VEX_0F6C,
1013 PREFIX_VEX_0F6D,
1014 PREFIX_VEX_0F6E,
1015 PREFIX_VEX_0F6F,
1016 PREFIX_VEX_0F70,
1017 PREFIX_VEX_0F71_REG_2,
1018 PREFIX_VEX_0F71_REG_4,
1019 PREFIX_VEX_0F71_REG_6,
1020 PREFIX_VEX_0F72_REG_2,
1021 PREFIX_VEX_0F72_REG_4,
1022 PREFIX_VEX_0F72_REG_6,
1023 PREFIX_VEX_0F73_REG_2,
1024 PREFIX_VEX_0F73_REG_3,
1025 PREFIX_VEX_0F73_REG_6,
1026 PREFIX_VEX_0F73_REG_7,
1027 PREFIX_VEX_0F74,
1028 PREFIX_VEX_0F75,
1029 PREFIX_VEX_0F76,
1030 PREFIX_VEX_0F77,
1031 PREFIX_VEX_0F7C,
1032 PREFIX_VEX_0F7D,
1033 PREFIX_VEX_0F7E,
1034 PREFIX_VEX_0F7F,
43234a1e
L
1035 PREFIX_VEX_0F90,
1036 PREFIX_VEX_0F91,
1037 PREFIX_VEX_0F92,
1038 PREFIX_VEX_0F93,
1039 PREFIX_VEX_0F98,
592a252b
L
1040 PREFIX_VEX_0FC2,
1041 PREFIX_VEX_0FC4,
1042 PREFIX_VEX_0FC5,
1043 PREFIX_VEX_0FD0,
1044 PREFIX_VEX_0FD1,
1045 PREFIX_VEX_0FD2,
1046 PREFIX_VEX_0FD3,
1047 PREFIX_VEX_0FD4,
1048 PREFIX_VEX_0FD5,
1049 PREFIX_VEX_0FD6,
1050 PREFIX_VEX_0FD7,
1051 PREFIX_VEX_0FD8,
1052 PREFIX_VEX_0FD9,
1053 PREFIX_VEX_0FDA,
1054 PREFIX_VEX_0FDB,
1055 PREFIX_VEX_0FDC,
1056 PREFIX_VEX_0FDD,
1057 PREFIX_VEX_0FDE,
1058 PREFIX_VEX_0FDF,
1059 PREFIX_VEX_0FE0,
1060 PREFIX_VEX_0FE1,
1061 PREFIX_VEX_0FE2,
1062 PREFIX_VEX_0FE3,
1063 PREFIX_VEX_0FE4,
1064 PREFIX_VEX_0FE5,
1065 PREFIX_VEX_0FE6,
1066 PREFIX_VEX_0FE7,
1067 PREFIX_VEX_0FE8,
1068 PREFIX_VEX_0FE9,
1069 PREFIX_VEX_0FEA,
1070 PREFIX_VEX_0FEB,
1071 PREFIX_VEX_0FEC,
1072 PREFIX_VEX_0FED,
1073 PREFIX_VEX_0FEE,
1074 PREFIX_VEX_0FEF,
1075 PREFIX_VEX_0FF0,
1076 PREFIX_VEX_0FF1,
1077 PREFIX_VEX_0FF2,
1078 PREFIX_VEX_0FF3,
1079 PREFIX_VEX_0FF4,
1080 PREFIX_VEX_0FF5,
1081 PREFIX_VEX_0FF6,
1082 PREFIX_VEX_0FF7,
1083 PREFIX_VEX_0FF8,
1084 PREFIX_VEX_0FF9,
1085 PREFIX_VEX_0FFA,
1086 PREFIX_VEX_0FFB,
1087 PREFIX_VEX_0FFC,
1088 PREFIX_VEX_0FFD,
1089 PREFIX_VEX_0FFE,
1090 PREFIX_VEX_0F3800,
1091 PREFIX_VEX_0F3801,
1092 PREFIX_VEX_0F3802,
1093 PREFIX_VEX_0F3803,
1094 PREFIX_VEX_0F3804,
1095 PREFIX_VEX_0F3805,
1096 PREFIX_VEX_0F3806,
1097 PREFIX_VEX_0F3807,
1098 PREFIX_VEX_0F3808,
1099 PREFIX_VEX_0F3809,
1100 PREFIX_VEX_0F380A,
1101 PREFIX_VEX_0F380B,
1102 PREFIX_VEX_0F380C,
1103 PREFIX_VEX_0F380D,
1104 PREFIX_VEX_0F380E,
1105 PREFIX_VEX_0F380F,
1106 PREFIX_VEX_0F3813,
6c30d220 1107 PREFIX_VEX_0F3816,
592a252b
L
1108 PREFIX_VEX_0F3817,
1109 PREFIX_VEX_0F3818,
1110 PREFIX_VEX_0F3819,
1111 PREFIX_VEX_0F381A,
1112 PREFIX_VEX_0F381C,
1113 PREFIX_VEX_0F381D,
1114 PREFIX_VEX_0F381E,
1115 PREFIX_VEX_0F3820,
1116 PREFIX_VEX_0F3821,
1117 PREFIX_VEX_0F3822,
1118 PREFIX_VEX_0F3823,
1119 PREFIX_VEX_0F3824,
1120 PREFIX_VEX_0F3825,
1121 PREFIX_VEX_0F3828,
1122 PREFIX_VEX_0F3829,
1123 PREFIX_VEX_0F382A,
1124 PREFIX_VEX_0F382B,
1125 PREFIX_VEX_0F382C,
1126 PREFIX_VEX_0F382D,
1127 PREFIX_VEX_0F382E,
1128 PREFIX_VEX_0F382F,
1129 PREFIX_VEX_0F3830,
1130 PREFIX_VEX_0F3831,
1131 PREFIX_VEX_0F3832,
1132 PREFIX_VEX_0F3833,
1133 PREFIX_VEX_0F3834,
1134 PREFIX_VEX_0F3835,
6c30d220 1135 PREFIX_VEX_0F3836,
592a252b
L
1136 PREFIX_VEX_0F3837,
1137 PREFIX_VEX_0F3838,
1138 PREFIX_VEX_0F3839,
1139 PREFIX_VEX_0F383A,
1140 PREFIX_VEX_0F383B,
1141 PREFIX_VEX_0F383C,
1142 PREFIX_VEX_0F383D,
1143 PREFIX_VEX_0F383E,
1144 PREFIX_VEX_0F383F,
1145 PREFIX_VEX_0F3840,
1146 PREFIX_VEX_0F3841,
6c30d220
L
1147 PREFIX_VEX_0F3845,
1148 PREFIX_VEX_0F3846,
1149 PREFIX_VEX_0F3847,
1150 PREFIX_VEX_0F3858,
1151 PREFIX_VEX_0F3859,
1152 PREFIX_VEX_0F385A,
1153 PREFIX_VEX_0F3878,
1154 PREFIX_VEX_0F3879,
1155 PREFIX_VEX_0F388C,
1156 PREFIX_VEX_0F388E,
1157 PREFIX_VEX_0F3890,
1158 PREFIX_VEX_0F3891,
1159 PREFIX_VEX_0F3892,
1160 PREFIX_VEX_0F3893,
592a252b
L
1161 PREFIX_VEX_0F3896,
1162 PREFIX_VEX_0F3897,
1163 PREFIX_VEX_0F3898,
1164 PREFIX_VEX_0F3899,
1165 PREFIX_VEX_0F389A,
1166 PREFIX_VEX_0F389B,
1167 PREFIX_VEX_0F389C,
1168 PREFIX_VEX_0F389D,
1169 PREFIX_VEX_0F389E,
1170 PREFIX_VEX_0F389F,
1171 PREFIX_VEX_0F38A6,
1172 PREFIX_VEX_0F38A7,
1173 PREFIX_VEX_0F38A8,
1174 PREFIX_VEX_0F38A9,
1175 PREFIX_VEX_0F38AA,
1176 PREFIX_VEX_0F38AB,
1177 PREFIX_VEX_0F38AC,
1178 PREFIX_VEX_0F38AD,
1179 PREFIX_VEX_0F38AE,
1180 PREFIX_VEX_0F38AF,
1181 PREFIX_VEX_0F38B6,
1182 PREFIX_VEX_0F38B7,
1183 PREFIX_VEX_0F38B8,
1184 PREFIX_VEX_0F38B9,
1185 PREFIX_VEX_0F38BA,
1186 PREFIX_VEX_0F38BB,
1187 PREFIX_VEX_0F38BC,
1188 PREFIX_VEX_0F38BD,
1189 PREFIX_VEX_0F38BE,
1190 PREFIX_VEX_0F38BF,
1191 PREFIX_VEX_0F38DB,
1192 PREFIX_VEX_0F38DC,
1193 PREFIX_VEX_0F38DD,
1194 PREFIX_VEX_0F38DE,
1195 PREFIX_VEX_0F38DF,
f12dc422
L
1196 PREFIX_VEX_0F38F2,
1197 PREFIX_VEX_0F38F3_REG_1,
1198 PREFIX_VEX_0F38F3_REG_2,
1199 PREFIX_VEX_0F38F3_REG_3,
6c30d220
L
1200 PREFIX_VEX_0F38F5,
1201 PREFIX_VEX_0F38F6,
f12dc422 1202 PREFIX_VEX_0F38F7,
6c30d220
L
1203 PREFIX_VEX_0F3A00,
1204 PREFIX_VEX_0F3A01,
1205 PREFIX_VEX_0F3A02,
592a252b
L
1206 PREFIX_VEX_0F3A04,
1207 PREFIX_VEX_0F3A05,
1208 PREFIX_VEX_0F3A06,
1209 PREFIX_VEX_0F3A08,
1210 PREFIX_VEX_0F3A09,
1211 PREFIX_VEX_0F3A0A,
1212 PREFIX_VEX_0F3A0B,
1213 PREFIX_VEX_0F3A0C,
1214 PREFIX_VEX_0F3A0D,
1215 PREFIX_VEX_0F3A0E,
1216 PREFIX_VEX_0F3A0F,
1217 PREFIX_VEX_0F3A14,
1218 PREFIX_VEX_0F3A15,
1219 PREFIX_VEX_0F3A16,
1220 PREFIX_VEX_0F3A17,
1221 PREFIX_VEX_0F3A18,
1222 PREFIX_VEX_0F3A19,
1223 PREFIX_VEX_0F3A1D,
1224 PREFIX_VEX_0F3A20,
1225 PREFIX_VEX_0F3A21,
1226 PREFIX_VEX_0F3A22,
43234a1e
L
1227 PREFIX_VEX_0F3A30,
1228 PREFIX_VEX_0F3A32,
6c30d220
L
1229 PREFIX_VEX_0F3A38,
1230 PREFIX_VEX_0F3A39,
592a252b
L
1231 PREFIX_VEX_0F3A40,
1232 PREFIX_VEX_0F3A41,
1233 PREFIX_VEX_0F3A42,
1234 PREFIX_VEX_0F3A44,
6c30d220 1235 PREFIX_VEX_0F3A46,
592a252b
L
1236 PREFIX_VEX_0F3A48,
1237 PREFIX_VEX_0F3A49,
1238 PREFIX_VEX_0F3A4A,
1239 PREFIX_VEX_0F3A4B,
1240 PREFIX_VEX_0F3A4C,
1241 PREFIX_VEX_0F3A5C,
1242 PREFIX_VEX_0F3A5D,
1243 PREFIX_VEX_0F3A5E,
1244 PREFIX_VEX_0F3A5F,
1245 PREFIX_VEX_0F3A60,
1246 PREFIX_VEX_0F3A61,
1247 PREFIX_VEX_0F3A62,
1248 PREFIX_VEX_0F3A63,
1249 PREFIX_VEX_0F3A68,
1250 PREFIX_VEX_0F3A69,
1251 PREFIX_VEX_0F3A6A,
1252 PREFIX_VEX_0F3A6B,
1253 PREFIX_VEX_0F3A6C,
1254 PREFIX_VEX_0F3A6D,
1255 PREFIX_VEX_0F3A6E,
1256 PREFIX_VEX_0F3A6F,
1257 PREFIX_VEX_0F3A78,
1258 PREFIX_VEX_0F3A79,
1259 PREFIX_VEX_0F3A7A,
1260 PREFIX_VEX_0F3A7B,
1261 PREFIX_VEX_0F3A7C,
1262 PREFIX_VEX_0F3A7D,
1263 PREFIX_VEX_0F3A7E,
1264 PREFIX_VEX_0F3A7F,
6c30d220 1265 PREFIX_VEX_0F3ADF,
43234a1e
L
1266 PREFIX_VEX_0F3AF0,
1267
1268 PREFIX_EVEX_0F10,
1269 PREFIX_EVEX_0F11,
1270 PREFIX_EVEX_0F12,
1271 PREFIX_EVEX_0F13,
1272 PREFIX_EVEX_0F14,
1273 PREFIX_EVEX_0F15,
1274 PREFIX_EVEX_0F16,
1275 PREFIX_EVEX_0F17,
1276 PREFIX_EVEX_0F28,
1277 PREFIX_EVEX_0F29,
1278 PREFIX_EVEX_0F2A,
1279 PREFIX_EVEX_0F2B,
1280 PREFIX_EVEX_0F2C,
1281 PREFIX_EVEX_0F2D,
1282 PREFIX_EVEX_0F2E,
1283 PREFIX_EVEX_0F2F,
1284 PREFIX_EVEX_0F51,
1285 PREFIX_EVEX_0F58,
1286 PREFIX_EVEX_0F59,
1287 PREFIX_EVEX_0F5A,
1288 PREFIX_EVEX_0F5B,
1289 PREFIX_EVEX_0F5C,
1290 PREFIX_EVEX_0F5D,
1291 PREFIX_EVEX_0F5E,
1292 PREFIX_EVEX_0F5F,
1293 PREFIX_EVEX_0F62,
1294 PREFIX_EVEX_0F66,
1295 PREFIX_EVEX_0F6A,
1296 PREFIX_EVEX_0F6C,
1297 PREFIX_EVEX_0F6D,
1298 PREFIX_EVEX_0F6E,
1299 PREFIX_EVEX_0F6F,
1300 PREFIX_EVEX_0F70,
1301 PREFIX_EVEX_0F72_REG_0,
1302 PREFIX_EVEX_0F72_REG_1,
1303 PREFIX_EVEX_0F72_REG_2,
1304 PREFIX_EVEX_0F72_REG_4,
1305 PREFIX_EVEX_0F72_REG_6,
1306 PREFIX_EVEX_0F73_REG_2,
1307 PREFIX_EVEX_0F73_REG_6,
1308 PREFIX_EVEX_0F76,
1309 PREFIX_EVEX_0F78,
1310 PREFIX_EVEX_0F79,
1311 PREFIX_EVEX_0F7A,
1312 PREFIX_EVEX_0F7B,
1313 PREFIX_EVEX_0F7E,
1314 PREFIX_EVEX_0F7F,
1315 PREFIX_EVEX_0FC2,
1316 PREFIX_EVEX_0FC6,
1317 PREFIX_EVEX_0FD2,
1318 PREFIX_EVEX_0FD3,
1319 PREFIX_EVEX_0FD4,
1320 PREFIX_EVEX_0FD6,
1321 PREFIX_EVEX_0FDB,
1322 PREFIX_EVEX_0FDF,
1323 PREFIX_EVEX_0FE2,
1324 PREFIX_EVEX_0FE6,
1325 PREFIX_EVEX_0FE7,
1326 PREFIX_EVEX_0FEB,
1327 PREFIX_EVEX_0FEF,
1328 PREFIX_EVEX_0FF2,
1329 PREFIX_EVEX_0FF3,
1330 PREFIX_EVEX_0FF4,
1331 PREFIX_EVEX_0FFA,
1332 PREFIX_EVEX_0FFB,
1333 PREFIX_EVEX_0FFE,
1334 PREFIX_EVEX_0F380C,
1335 PREFIX_EVEX_0F380D,
1336 PREFIX_EVEX_0F3811,
1337 PREFIX_EVEX_0F3812,
1338 PREFIX_EVEX_0F3813,
1339 PREFIX_EVEX_0F3814,
1340 PREFIX_EVEX_0F3815,
1341 PREFIX_EVEX_0F3816,
1342 PREFIX_EVEX_0F3818,
1343 PREFIX_EVEX_0F3819,
1344 PREFIX_EVEX_0F381A,
1345 PREFIX_EVEX_0F381B,
1346 PREFIX_EVEX_0F381E,
1347 PREFIX_EVEX_0F381F,
1348 PREFIX_EVEX_0F3821,
1349 PREFIX_EVEX_0F3822,
1350 PREFIX_EVEX_0F3823,
1351 PREFIX_EVEX_0F3824,
1352 PREFIX_EVEX_0F3825,
1353 PREFIX_EVEX_0F3827,
1354 PREFIX_EVEX_0F3828,
1355 PREFIX_EVEX_0F3829,
1356 PREFIX_EVEX_0F382A,
1357 PREFIX_EVEX_0F382C,
1358 PREFIX_EVEX_0F382D,
1359 PREFIX_EVEX_0F3831,
1360 PREFIX_EVEX_0F3832,
1361 PREFIX_EVEX_0F3833,
1362 PREFIX_EVEX_0F3834,
1363 PREFIX_EVEX_0F3835,
1364 PREFIX_EVEX_0F3836,
1365 PREFIX_EVEX_0F3837,
1366 PREFIX_EVEX_0F3839,
1367 PREFIX_EVEX_0F383A,
1368 PREFIX_EVEX_0F383B,
1369 PREFIX_EVEX_0F383D,
1370 PREFIX_EVEX_0F383F,
1371 PREFIX_EVEX_0F3840,
1372 PREFIX_EVEX_0F3842,
1373 PREFIX_EVEX_0F3843,
1374 PREFIX_EVEX_0F3844,
1375 PREFIX_EVEX_0F3845,
1376 PREFIX_EVEX_0F3846,
1377 PREFIX_EVEX_0F3847,
1378 PREFIX_EVEX_0F384C,
1379 PREFIX_EVEX_0F384D,
1380 PREFIX_EVEX_0F384E,
1381 PREFIX_EVEX_0F384F,
1382 PREFIX_EVEX_0F3858,
1383 PREFIX_EVEX_0F3859,
1384 PREFIX_EVEX_0F385A,
1385 PREFIX_EVEX_0F385B,
1386 PREFIX_EVEX_0F3864,
1387 PREFIX_EVEX_0F3865,
1388 PREFIX_EVEX_0F3876,
1389 PREFIX_EVEX_0F3877,
1390 PREFIX_EVEX_0F387C,
1391 PREFIX_EVEX_0F387E,
1392 PREFIX_EVEX_0F387F,
1393 PREFIX_EVEX_0F3888,
1394 PREFIX_EVEX_0F3889,
1395 PREFIX_EVEX_0F388A,
1396 PREFIX_EVEX_0F388B,
1397 PREFIX_EVEX_0F3890,
1398 PREFIX_EVEX_0F3891,
1399 PREFIX_EVEX_0F3892,
1400 PREFIX_EVEX_0F3893,
1401 PREFIX_EVEX_0F3896,
1402 PREFIX_EVEX_0F3897,
1403 PREFIX_EVEX_0F3898,
1404 PREFIX_EVEX_0F3899,
1405 PREFIX_EVEX_0F389A,
1406 PREFIX_EVEX_0F389B,
1407 PREFIX_EVEX_0F389C,
1408 PREFIX_EVEX_0F389D,
1409 PREFIX_EVEX_0F389E,
1410 PREFIX_EVEX_0F389F,
1411 PREFIX_EVEX_0F38A0,
1412 PREFIX_EVEX_0F38A1,
1413 PREFIX_EVEX_0F38A2,
1414 PREFIX_EVEX_0F38A3,
1415 PREFIX_EVEX_0F38A6,
1416 PREFIX_EVEX_0F38A7,
1417 PREFIX_EVEX_0F38A8,
1418 PREFIX_EVEX_0F38A9,
1419 PREFIX_EVEX_0F38AA,
1420 PREFIX_EVEX_0F38AB,
1421 PREFIX_EVEX_0F38AC,
1422 PREFIX_EVEX_0F38AD,
1423 PREFIX_EVEX_0F38AE,
1424 PREFIX_EVEX_0F38AF,
1425 PREFIX_EVEX_0F38B6,
1426 PREFIX_EVEX_0F38B7,
1427 PREFIX_EVEX_0F38B8,
1428 PREFIX_EVEX_0F38B9,
1429 PREFIX_EVEX_0F38BA,
1430 PREFIX_EVEX_0F38BB,
1431 PREFIX_EVEX_0F38BC,
1432 PREFIX_EVEX_0F38BD,
1433 PREFIX_EVEX_0F38BE,
1434 PREFIX_EVEX_0F38BF,
1435 PREFIX_EVEX_0F38C4,
1436 PREFIX_EVEX_0F38C6_REG_1,
1437 PREFIX_EVEX_0F38C6_REG_2,
1438 PREFIX_EVEX_0F38C6_REG_5,
1439 PREFIX_EVEX_0F38C6_REG_6,
1440 PREFIX_EVEX_0F38C7_REG_1,
1441 PREFIX_EVEX_0F38C7_REG_2,
1442 PREFIX_EVEX_0F38C7_REG_5,
1443 PREFIX_EVEX_0F38C7_REG_6,
1444 PREFIX_EVEX_0F38C8,
1445 PREFIX_EVEX_0F38CA,
1446 PREFIX_EVEX_0F38CB,
1447 PREFIX_EVEX_0F38CC,
1448 PREFIX_EVEX_0F38CD,
1449
1450 PREFIX_EVEX_0F3A00,
1451 PREFIX_EVEX_0F3A01,
1452 PREFIX_EVEX_0F3A03,
1453 PREFIX_EVEX_0F3A04,
1454 PREFIX_EVEX_0F3A05,
1455 PREFIX_EVEX_0F3A08,
1456 PREFIX_EVEX_0F3A09,
1457 PREFIX_EVEX_0F3A0A,
1458 PREFIX_EVEX_0F3A0B,
1459 PREFIX_EVEX_0F3A17,
1460 PREFIX_EVEX_0F3A18,
1461 PREFIX_EVEX_0F3A19,
1462 PREFIX_EVEX_0F3A1A,
1463 PREFIX_EVEX_0F3A1B,
1464 PREFIX_EVEX_0F3A1D,
1465 PREFIX_EVEX_0F3A1E,
1466 PREFIX_EVEX_0F3A1F,
1467 PREFIX_EVEX_0F3A21,
1468 PREFIX_EVEX_0F3A23,
1469 PREFIX_EVEX_0F3A25,
1470 PREFIX_EVEX_0F3A26,
1471 PREFIX_EVEX_0F3A27,
1472 PREFIX_EVEX_0F3A38,
1473 PREFIX_EVEX_0F3A39,
1474 PREFIX_EVEX_0F3A3A,
1475 PREFIX_EVEX_0F3A3B,
43234a1e
L
1476 PREFIX_EVEX_0F3A43,
1477 PREFIX_EVEX_0F3A54,
1478 PREFIX_EVEX_0F3A55,
51e7da1b 1479};
4e7d34a6 1480
51e7da1b
L
1481enum
1482{
1483 X86_64_06 = 0,
3873ba12
L
1484 X86_64_07,
1485 X86_64_0D,
1486 X86_64_16,
1487 X86_64_17,
1488 X86_64_1E,
1489 X86_64_1F,
1490 X86_64_27,
1491 X86_64_2F,
1492 X86_64_37,
1493 X86_64_3F,
1494 X86_64_60,
1495 X86_64_61,
1496 X86_64_62,
1497 X86_64_63,
1498 X86_64_6D,
1499 X86_64_6F,
1500 X86_64_9A,
1501 X86_64_C4,
1502 X86_64_C5,
1503 X86_64_CE,
1504 X86_64_D4,
1505 X86_64_D5,
1506 X86_64_EA,
1507 X86_64_0F01_REG_0,
1508 X86_64_0F01_REG_1,
1509 X86_64_0F01_REG_2,
1510 X86_64_0F01_REG_3
51e7da1b 1511};
4e7d34a6 1512
51e7da1b
L
1513enum
1514{
1515 THREE_BYTE_0F38 = 0,
3873ba12
L
1516 THREE_BYTE_0F3A,
1517 THREE_BYTE_0F7A
51e7da1b 1518};
4e7d34a6 1519
f88c9eb0
SP
1520enum
1521{
5dd85c99
SP
1522 XOP_08 = 0,
1523 XOP_09,
f88c9eb0
SP
1524 XOP_0A
1525};
1526
51e7da1b
L
1527enum
1528{
1529 VEX_0F = 0,
3873ba12
L
1530 VEX_0F38,
1531 VEX_0F3A
51e7da1b 1532};
c0f3af97 1533
43234a1e
L
1534enum
1535{
1536 EVEX_0F = 0,
1537 EVEX_0F38,
1538 EVEX_0F3A
1539};
1540
51e7da1b
L
1541enum
1542{
592a252b
L
1543 VEX_LEN_0F10_P_1 = 0,
1544 VEX_LEN_0F10_P_3,
1545 VEX_LEN_0F11_P_1,
1546 VEX_LEN_0F11_P_3,
1547 VEX_LEN_0F12_P_0_M_0,
1548 VEX_LEN_0F12_P_0_M_1,
1549 VEX_LEN_0F12_P_2,
1550 VEX_LEN_0F13_M_0,
1551 VEX_LEN_0F16_P_0_M_0,
1552 VEX_LEN_0F16_P_0_M_1,
1553 VEX_LEN_0F16_P_2,
1554 VEX_LEN_0F17_M_0,
1555 VEX_LEN_0F2A_P_1,
1556 VEX_LEN_0F2A_P_3,
1557 VEX_LEN_0F2C_P_1,
1558 VEX_LEN_0F2C_P_3,
1559 VEX_LEN_0F2D_P_1,
1560 VEX_LEN_0F2D_P_3,
1561 VEX_LEN_0F2E_P_0,
1562 VEX_LEN_0F2E_P_2,
1563 VEX_LEN_0F2F_P_0,
1564 VEX_LEN_0F2F_P_2,
43234a1e
L
1565 VEX_LEN_0F41_P_0,
1566 VEX_LEN_0F42_P_0,
1567 VEX_LEN_0F44_P_0,
1568 VEX_LEN_0F45_P_0,
1569 VEX_LEN_0F46_P_0,
1570 VEX_LEN_0F47_P_0,
1571 VEX_LEN_0F4B_P_2,
592a252b
L
1572 VEX_LEN_0F51_P_1,
1573 VEX_LEN_0F51_P_3,
1574 VEX_LEN_0F52_P_1,
1575 VEX_LEN_0F53_P_1,
1576 VEX_LEN_0F58_P_1,
1577 VEX_LEN_0F58_P_3,
1578 VEX_LEN_0F59_P_1,
1579 VEX_LEN_0F59_P_3,
1580 VEX_LEN_0F5A_P_1,
1581 VEX_LEN_0F5A_P_3,
1582 VEX_LEN_0F5C_P_1,
1583 VEX_LEN_0F5C_P_3,
1584 VEX_LEN_0F5D_P_1,
1585 VEX_LEN_0F5D_P_3,
1586 VEX_LEN_0F5E_P_1,
1587 VEX_LEN_0F5E_P_3,
1588 VEX_LEN_0F5F_P_1,
1589 VEX_LEN_0F5F_P_3,
592a252b 1590 VEX_LEN_0F6E_P_2,
592a252b
L
1591 VEX_LEN_0F7E_P_1,
1592 VEX_LEN_0F7E_P_2,
43234a1e
L
1593 VEX_LEN_0F90_P_0,
1594 VEX_LEN_0F91_P_0,
1595 VEX_LEN_0F92_P_0,
1596 VEX_LEN_0F93_P_0,
1597 VEX_LEN_0F98_P_0,
592a252b
L
1598 VEX_LEN_0FAE_R_2_M_0,
1599 VEX_LEN_0FAE_R_3_M_0,
1600 VEX_LEN_0FC2_P_1,
1601 VEX_LEN_0FC2_P_3,
1602 VEX_LEN_0FC4_P_2,
1603 VEX_LEN_0FC5_P_2,
592a252b 1604 VEX_LEN_0FD6_P_2,
592a252b 1605 VEX_LEN_0FF7_P_2,
6c30d220
L
1606 VEX_LEN_0F3816_P_2,
1607 VEX_LEN_0F3819_P_2,
592a252b 1608 VEX_LEN_0F381A_P_2_M_0,
6c30d220 1609 VEX_LEN_0F3836_P_2,
592a252b 1610 VEX_LEN_0F3841_P_2,
6c30d220 1611 VEX_LEN_0F385A_P_2_M_0,
592a252b
L
1612 VEX_LEN_0F38DB_P_2,
1613 VEX_LEN_0F38DC_P_2,
1614 VEX_LEN_0F38DD_P_2,
1615 VEX_LEN_0F38DE_P_2,
1616 VEX_LEN_0F38DF_P_2,
f12dc422
L
1617 VEX_LEN_0F38F2_P_0,
1618 VEX_LEN_0F38F3_R_1_P_0,
1619 VEX_LEN_0F38F3_R_2_P_0,
1620 VEX_LEN_0F38F3_R_3_P_0,
6c30d220
L
1621 VEX_LEN_0F38F5_P_0,
1622 VEX_LEN_0F38F5_P_1,
1623 VEX_LEN_0F38F5_P_3,
1624 VEX_LEN_0F38F6_P_3,
f12dc422 1625 VEX_LEN_0F38F7_P_0,
6c30d220
L
1626 VEX_LEN_0F38F7_P_1,
1627 VEX_LEN_0F38F7_P_2,
1628 VEX_LEN_0F38F7_P_3,
1629 VEX_LEN_0F3A00_P_2,
1630 VEX_LEN_0F3A01_P_2,
592a252b
L
1631 VEX_LEN_0F3A06_P_2,
1632 VEX_LEN_0F3A0A_P_2,
1633 VEX_LEN_0F3A0B_P_2,
592a252b
L
1634 VEX_LEN_0F3A14_P_2,
1635 VEX_LEN_0F3A15_P_2,
1636 VEX_LEN_0F3A16_P_2,
1637 VEX_LEN_0F3A17_P_2,
1638 VEX_LEN_0F3A18_P_2,
1639 VEX_LEN_0F3A19_P_2,
1640 VEX_LEN_0F3A20_P_2,
1641 VEX_LEN_0F3A21_P_2,
1642 VEX_LEN_0F3A22_P_2,
43234a1e
L
1643 VEX_LEN_0F3A30_P_2,
1644 VEX_LEN_0F3A32_P_2,
6c30d220
L
1645 VEX_LEN_0F3A38_P_2,
1646 VEX_LEN_0F3A39_P_2,
592a252b 1647 VEX_LEN_0F3A41_P_2,
592a252b 1648 VEX_LEN_0F3A44_P_2,
6c30d220 1649 VEX_LEN_0F3A46_P_2,
592a252b
L
1650 VEX_LEN_0F3A60_P_2,
1651 VEX_LEN_0F3A61_P_2,
1652 VEX_LEN_0F3A62_P_2,
1653 VEX_LEN_0F3A63_P_2,
1654 VEX_LEN_0F3A6A_P_2,
1655 VEX_LEN_0F3A6B_P_2,
1656 VEX_LEN_0F3A6E_P_2,
1657 VEX_LEN_0F3A6F_P_2,
1658 VEX_LEN_0F3A7A_P_2,
1659 VEX_LEN_0F3A7B_P_2,
1660 VEX_LEN_0F3A7E_P_2,
1661 VEX_LEN_0F3A7F_P_2,
1662 VEX_LEN_0F3ADF_P_2,
6c30d220 1663 VEX_LEN_0F3AF0_P_3,
ff688e1f
L
1664 VEX_LEN_0FXOP_08_CC,
1665 VEX_LEN_0FXOP_08_CD,
1666 VEX_LEN_0FXOP_08_CE,
1667 VEX_LEN_0FXOP_08_CF,
1668 VEX_LEN_0FXOP_08_EC,
1669 VEX_LEN_0FXOP_08_ED,
1670 VEX_LEN_0FXOP_08_EE,
1671 VEX_LEN_0FXOP_08_EF,
592a252b
L
1672 VEX_LEN_0FXOP_09_80,
1673 VEX_LEN_0FXOP_09_81
51e7da1b 1674};
c0f3af97 1675
9e30b8e0
L
1676enum
1677{
592a252b
L
1678 VEX_W_0F10_P_0 = 0,
1679 VEX_W_0F10_P_1,
1680 VEX_W_0F10_P_2,
1681 VEX_W_0F10_P_3,
1682 VEX_W_0F11_P_0,
1683 VEX_W_0F11_P_1,
1684 VEX_W_0F11_P_2,
1685 VEX_W_0F11_P_3,
1686 VEX_W_0F12_P_0_M_0,
1687 VEX_W_0F12_P_0_M_1,
1688 VEX_W_0F12_P_1,
1689 VEX_W_0F12_P_2,
1690 VEX_W_0F12_P_3,
1691 VEX_W_0F13_M_0,
1692 VEX_W_0F14,
1693 VEX_W_0F15,
1694 VEX_W_0F16_P_0_M_0,
1695 VEX_W_0F16_P_0_M_1,
1696 VEX_W_0F16_P_1,
1697 VEX_W_0F16_P_2,
1698 VEX_W_0F17_M_0,
1699 VEX_W_0F28,
1700 VEX_W_0F29,
1701 VEX_W_0F2B_M_0,
1702 VEX_W_0F2E_P_0,
1703 VEX_W_0F2E_P_2,
1704 VEX_W_0F2F_P_0,
1705 VEX_W_0F2F_P_2,
43234a1e
L
1706 VEX_W_0F41_P_0_LEN_1,
1707 VEX_W_0F42_P_0_LEN_1,
1708 VEX_W_0F44_P_0_LEN_0,
1709 VEX_W_0F45_P_0_LEN_1,
1710 VEX_W_0F46_P_0_LEN_1,
1711 VEX_W_0F47_P_0_LEN_1,
1712 VEX_W_0F4B_P_2_LEN_1,
592a252b
L
1713 VEX_W_0F50_M_0,
1714 VEX_W_0F51_P_0,
1715 VEX_W_0F51_P_1,
1716 VEX_W_0F51_P_2,
1717 VEX_W_0F51_P_3,
1718 VEX_W_0F52_P_0,
1719 VEX_W_0F52_P_1,
1720 VEX_W_0F53_P_0,
1721 VEX_W_0F53_P_1,
1722 VEX_W_0F58_P_0,
1723 VEX_W_0F58_P_1,
1724 VEX_W_0F58_P_2,
1725 VEX_W_0F58_P_3,
1726 VEX_W_0F59_P_0,
1727 VEX_W_0F59_P_1,
1728 VEX_W_0F59_P_2,
1729 VEX_W_0F59_P_3,
1730 VEX_W_0F5A_P_0,
1731 VEX_W_0F5A_P_1,
1732 VEX_W_0F5A_P_3,
1733 VEX_W_0F5B_P_0,
1734 VEX_W_0F5B_P_1,
1735 VEX_W_0F5B_P_2,
1736 VEX_W_0F5C_P_0,
1737 VEX_W_0F5C_P_1,
1738 VEX_W_0F5C_P_2,
1739 VEX_W_0F5C_P_3,
1740 VEX_W_0F5D_P_0,
1741 VEX_W_0F5D_P_1,
1742 VEX_W_0F5D_P_2,
1743 VEX_W_0F5D_P_3,
1744 VEX_W_0F5E_P_0,
1745 VEX_W_0F5E_P_1,
1746 VEX_W_0F5E_P_2,
1747 VEX_W_0F5E_P_3,
1748 VEX_W_0F5F_P_0,
1749 VEX_W_0F5F_P_1,
1750 VEX_W_0F5F_P_2,
1751 VEX_W_0F5F_P_3,
1752 VEX_W_0F60_P_2,
1753 VEX_W_0F61_P_2,
1754 VEX_W_0F62_P_2,
1755 VEX_W_0F63_P_2,
1756 VEX_W_0F64_P_2,
1757 VEX_W_0F65_P_2,
1758 VEX_W_0F66_P_2,
1759 VEX_W_0F67_P_2,
1760 VEX_W_0F68_P_2,
1761 VEX_W_0F69_P_2,
1762 VEX_W_0F6A_P_2,
1763 VEX_W_0F6B_P_2,
1764 VEX_W_0F6C_P_2,
1765 VEX_W_0F6D_P_2,
1766 VEX_W_0F6F_P_1,
1767 VEX_W_0F6F_P_2,
1768 VEX_W_0F70_P_1,
1769 VEX_W_0F70_P_2,
1770 VEX_W_0F70_P_3,
1771 VEX_W_0F71_R_2_P_2,
1772 VEX_W_0F71_R_4_P_2,
1773 VEX_W_0F71_R_6_P_2,
1774 VEX_W_0F72_R_2_P_2,
1775 VEX_W_0F72_R_4_P_2,
1776 VEX_W_0F72_R_6_P_2,
1777 VEX_W_0F73_R_2_P_2,
1778 VEX_W_0F73_R_3_P_2,
1779 VEX_W_0F73_R_6_P_2,
1780 VEX_W_0F73_R_7_P_2,
1781 VEX_W_0F74_P_2,
1782 VEX_W_0F75_P_2,
1783 VEX_W_0F76_P_2,
1784 VEX_W_0F77_P_0,
1785 VEX_W_0F7C_P_2,
1786 VEX_W_0F7C_P_3,
1787 VEX_W_0F7D_P_2,
1788 VEX_W_0F7D_P_3,
1789 VEX_W_0F7E_P_1,
1790 VEX_W_0F7F_P_1,
1791 VEX_W_0F7F_P_2,
43234a1e
L
1792 VEX_W_0F90_P_0_LEN_0,
1793 VEX_W_0F91_P_0_LEN_0,
1794 VEX_W_0F92_P_0_LEN_0,
1795 VEX_W_0F93_P_0_LEN_0,
1796 VEX_W_0F98_P_0_LEN_0,
592a252b
L
1797 VEX_W_0FAE_R_2_M_0,
1798 VEX_W_0FAE_R_3_M_0,
1799 VEX_W_0FC2_P_0,
1800 VEX_W_0FC2_P_1,
1801 VEX_W_0FC2_P_2,
1802 VEX_W_0FC2_P_3,
1803 VEX_W_0FC4_P_2,
1804 VEX_W_0FC5_P_2,
1805 VEX_W_0FD0_P_2,
1806 VEX_W_0FD0_P_3,
1807 VEX_W_0FD1_P_2,
1808 VEX_W_0FD2_P_2,
1809 VEX_W_0FD3_P_2,
1810 VEX_W_0FD4_P_2,
1811 VEX_W_0FD5_P_2,
1812 VEX_W_0FD6_P_2,
1813 VEX_W_0FD7_P_2_M_1,
1814 VEX_W_0FD8_P_2,
1815 VEX_W_0FD9_P_2,
1816 VEX_W_0FDA_P_2,
1817 VEX_W_0FDB_P_2,
1818 VEX_W_0FDC_P_2,
1819 VEX_W_0FDD_P_2,
1820 VEX_W_0FDE_P_2,
1821 VEX_W_0FDF_P_2,
1822 VEX_W_0FE0_P_2,
1823 VEX_W_0FE1_P_2,
1824 VEX_W_0FE2_P_2,
1825 VEX_W_0FE3_P_2,
1826 VEX_W_0FE4_P_2,
1827 VEX_W_0FE5_P_2,
1828 VEX_W_0FE6_P_1,
1829 VEX_W_0FE6_P_2,
1830 VEX_W_0FE6_P_3,
1831 VEX_W_0FE7_P_2_M_0,
1832 VEX_W_0FE8_P_2,
1833 VEX_W_0FE9_P_2,
1834 VEX_W_0FEA_P_2,
1835 VEX_W_0FEB_P_2,
1836 VEX_W_0FEC_P_2,
1837 VEX_W_0FED_P_2,
1838 VEX_W_0FEE_P_2,
1839 VEX_W_0FEF_P_2,
1840 VEX_W_0FF0_P_3_M_0,
1841 VEX_W_0FF1_P_2,
1842 VEX_W_0FF2_P_2,
1843 VEX_W_0FF3_P_2,
1844 VEX_W_0FF4_P_2,
1845 VEX_W_0FF5_P_2,
1846 VEX_W_0FF6_P_2,
1847 VEX_W_0FF7_P_2,
1848 VEX_W_0FF8_P_2,
1849 VEX_W_0FF9_P_2,
1850 VEX_W_0FFA_P_2,
1851 VEX_W_0FFB_P_2,
1852 VEX_W_0FFC_P_2,
1853 VEX_W_0FFD_P_2,
1854 VEX_W_0FFE_P_2,
1855 VEX_W_0F3800_P_2,
1856 VEX_W_0F3801_P_2,
1857 VEX_W_0F3802_P_2,
1858 VEX_W_0F3803_P_2,
1859 VEX_W_0F3804_P_2,
1860 VEX_W_0F3805_P_2,
1861 VEX_W_0F3806_P_2,
1862 VEX_W_0F3807_P_2,
1863 VEX_W_0F3808_P_2,
1864 VEX_W_0F3809_P_2,
1865 VEX_W_0F380A_P_2,
1866 VEX_W_0F380B_P_2,
1867 VEX_W_0F380C_P_2,
1868 VEX_W_0F380D_P_2,
1869 VEX_W_0F380E_P_2,
1870 VEX_W_0F380F_P_2,
6c30d220 1871 VEX_W_0F3816_P_2,
592a252b 1872 VEX_W_0F3817_P_2,
6c30d220
L
1873 VEX_W_0F3818_P_2,
1874 VEX_W_0F3819_P_2,
592a252b
L
1875 VEX_W_0F381A_P_2_M_0,
1876 VEX_W_0F381C_P_2,
1877 VEX_W_0F381D_P_2,
1878 VEX_W_0F381E_P_2,
1879 VEX_W_0F3820_P_2,
1880 VEX_W_0F3821_P_2,
1881 VEX_W_0F3822_P_2,
1882 VEX_W_0F3823_P_2,
1883 VEX_W_0F3824_P_2,
1884 VEX_W_0F3825_P_2,
1885 VEX_W_0F3828_P_2,
1886 VEX_W_0F3829_P_2,
1887 VEX_W_0F382A_P_2_M_0,
1888 VEX_W_0F382B_P_2,
1889 VEX_W_0F382C_P_2_M_0,
1890 VEX_W_0F382D_P_2_M_0,
1891 VEX_W_0F382E_P_2_M_0,
1892 VEX_W_0F382F_P_2_M_0,
1893 VEX_W_0F3830_P_2,
1894 VEX_W_0F3831_P_2,
1895 VEX_W_0F3832_P_2,
1896 VEX_W_0F3833_P_2,
1897 VEX_W_0F3834_P_2,
1898 VEX_W_0F3835_P_2,
6c30d220 1899 VEX_W_0F3836_P_2,
592a252b
L
1900 VEX_W_0F3837_P_2,
1901 VEX_W_0F3838_P_2,
1902 VEX_W_0F3839_P_2,
1903 VEX_W_0F383A_P_2,
1904 VEX_W_0F383B_P_2,
1905 VEX_W_0F383C_P_2,
1906 VEX_W_0F383D_P_2,
1907 VEX_W_0F383E_P_2,
1908 VEX_W_0F383F_P_2,
1909 VEX_W_0F3840_P_2,
1910 VEX_W_0F3841_P_2,
6c30d220
L
1911 VEX_W_0F3846_P_2,
1912 VEX_W_0F3858_P_2,
1913 VEX_W_0F3859_P_2,
1914 VEX_W_0F385A_P_2_M_0,
1915 VEX_W_0F3878_P_2,
1916 VEX_W_0F3879_P_2,
592a252b
L
1917 VEX_W_0F38DB_P_2,
1918 VEX_W_0F38DC_P_2,
1919 VEX_W_0F38DD_P_2,
1920 VEX_W_0F38DE_P_2,
1921 VEX_W_0F38DF_P_2,
6c30d220
L
1922 VEX_W_0F3A00_P_2,
1923 VEX_W_0F3A01_P_2,
1924 VEX_W_0F3A02_P_2,
592a252b
L
1925 VEX_W_0F3A04_P_2,
1926 VEX_W_0F3A05_P_2,
1927 VEX_W_0F3A06_P_2,
1928 VEX_W_0F3A08_P_2,
1929 VEX_W_0F3A09_P_2,
1930 VEX_W_0F3A0A_P_2,
1931 VEX_W_0F3A0B_P_2,
1932 VEX_W_0F3A0C_P_2,
1933 VEX_W_0F3A0D_P_2,
1934 VEX_W_0F3A0E_P_2,
1935 VEX_W_0F3A0F_P_2,
1936 VEX_W_0F3A14_P_2,
1937 VEX_W_0F3A15_P_2,
1938 VEX_W_0F3A18_P_2,
1939 VEX_W_0F3A19_P_2,
1940 VEX_W_0F3A20_P_2,
1941 VEX_W_0F3A21_P_2,
43234a1e
L
1942 VEX_W_0F3A30_P_2_LEN_0,
1943 VEX_W_0F3A32_P_2_LEN_0,
6c30d220
L
1944 VEX_W_0F3A38_P_2,
1945 VEX_W_0F3A39_P_2,
592a252b
L
1946 VEX_W_0F3A40_P_2,
1947 VEX_W_0F3A41_P_2,
1948 VEX_W_0F3A42_P_2,
1949 VEX_W_0F3A44_P_2,
6c30d220 1950 VEX_W_0F3A46_P_2,
592a252b
L
1951 VEX_W_0F3A48_P_2,
1952 VEX_W_0F3A49_P_2,
1953 VEX_W_0F3A4A_P_2,
1954 VEX_W_0F3A4B_P_2,
1955 VEX_W_0F3A4C_P_2,
1956 VEX_W_0F3A60_P_2,
1957 VEX_W_0F3A61_P_2,
1958 VEX_W_0F3A62_P_2,
1959 VEX_W_0F3A63_P_2,
43234a1e
L
1960 VEX_W_0F3ADF_P_2,
1961
1962 EVEX_W_0F10_P_0,
1963 EVEX_W_0F10_P_1_M_0,
1964 EVEX_W_0F10_P_1_M_1,
1965 EVEX_W_0F10_P_2,
1966 EVEX_W_0F10_P_3_M_0,
1967 EVEX_W_0F10_P_3_M_1,
1968 EVEX_W_0F11_P_0,
1969 EVEX_W_0F11_P_1_M_0,
1970 EVEX_W_0F11_P_1_M_1,
1971 EVEX_W_0F11_P_2,
1972 EVEX_W_0F11_P_3_M_0,
1973 EVEX_W_0F11_P_3_M_1,
1974 EVEX_W_0F12_P_0_M_0,
1975 EVEX_W_0F12_P_0_M_1,
1976 EVEX_W_0F12_P_1,
1977 EVEX_W_0F12_P_2,
1978 EVEX_W_0F12_P_3,
1979 EVEX_W_0F13_P_0,
1980 EVEX_W_0F13_P_2,
1981 EVEX_W_0F14_P_0,
1982 EVEX_W_0F14_P_2,
1983 EVEX_W_0F15_P_0,
1984 EVEX_W_0F15_P_2,
1985 EVEX_W_0F16_P_0_M_0,
1986 EVEX_W_0F16_P_0_M_1,
1987 EVEX_W_0F16_P_1,
1988 EVEX_W_0F16_P_2,
1989 EVEX_W_0F17_P_0,
1990 EVEX_W_0F17_P_2,
1991 EVEX_W_0F28_P_0,
1992 EVEX_W_0F28_P_2,
1993 EVEX_W_0F29_P_0,
1994 EVEX_W_0F29_P_2,
1995 EVEX_W_0F2A_P_1,
1996 EVEX_W_0F2A_P_3,
1997 EVEX_W_0F2B_P_0,
1998 EVEX_W_0F2B_P_2,
1999 EVEX_W_0F2E_P_0,
2000 EVEX_W_0F2E_P_2,
2001 EVEX_W_0F2F_P_0,
2002 EVEX_W_0F2F_P_2,
2003 EVEX_W_0F51_P_0,
2004 EVEX_W_0F51_P_1,
2005 EVEX_W_0F51_P_2,
2006 EVEX_W_0F51_P_3,
2007 EVEX_W_0F58_P_0,
2008 EVEX_W_0F58_P_1,
2009 EVEX_W_0F58_P_2,
2010 EVEX_W_0F58_P_3,
2011 EVEX_W_0F59_P_0,
2012 EVEX_W_0F59_P_1,
2013 EVEX_W_0F59_P_2,
2014 EVEX_W_0F59_P_3,
2015 EVEX_W_0F5A_P_0,
2016 EVEX_W_0F5A_P_1,
2017 EVEX_W_0F5A_P_2,
2018 EVEX_W_0F5A_P_3,
2019 EVEX_W_0F5B_P_0,
2020 EVEX_W_0F5B_P_1,
2021 EVEX_W_0F5B_P_2,
2022 EVEX_W_0F5C_P_0,
2023 EVEX_W_0F5C_P_1,
2024 EVEX_W_0F5C_P_2,
2025 EVEX_W_0F5C_P_3,
2026 EVEX_W_0F5D_P_0,
2027 EVEX_W_0F5D_P_1,
2028 EVEX_W_0F5D_P_2,
2029 EVEX_W_0F5D_P_3,
2030 EVEX_W_0F5E_P_0,
2031 EVEX_W_0F5E_P_1,
2032 EVEX_W_0F5E_P_2,
2033 EVEX_W_0F5E_P_3,
2034 EVEX_W_0F5F_P_0,
2035 EVEX_W_0F5F_P_1,
2036 EVEX_W_0F5F_P_2,
2037 EVEX_W_0F5F_P_3,
2038 EVEX_W_0F62_P_2,
2039 EVEX_W_0F66_P_2,
2040 EVEX_W_0F6A_P_2,
2041 EVEX_W_0F6C_P_2,
2042 EVEX_W_0F6D_P_2,
2043 EVEX_W_0F6E_P_2,
2044 EVEX_W_0F6F_P_1,
2045 EVEX_W_0F6F_P_2,
2046 EVEX_W_0F70_P_2,
2047 EVEX_W_0F72_R_2_P_2,
2048 EVEX_W_0F72_R_6_P_2,
2049 EVEX_W_0F73_R_2_P_2,
2050 EVEX_W_0F73_R_6_P_2,
2051 EVEX_W_0F76_P_2,
2052 EVEX_W_0F78_P_0,
2053 EVEX_W_0F79_P_0,
2054 EVEX_W_0F7A_P_1,
2055 EVEX_W_0F7A_P_3,
2056 EVEX_W_0F7B_P_1,
2057 EVEX_W_0F7B_P_3,
2058 EVEX_W_0F7E_P_1,
2059 EVEX_W_0F7E_P_2,
2060 EVEX_W_0F7F_P_1,
2061 EVEX_W_0F7F_P_2,
2062 EVEX_W_0FC2_P_0,
2063 EVEX_W_0FC2_P_1,
2064 EVEX_W_0FC2_P_2,
2065 EVEX_W_0FC2_P_3,
2066 EVEX_W_0FC6_P_0,
2067 EVEX_W_0FC6_P_2,
2068 EVEX_W_0FD2_P_2,
2069 EVEX_W_0FD3_P_2,
2070 EVEX_W_0FD4_P_2,
2071 EVEX_W_0FD6_P_2,
2072 EVEX_W_0FE6_P_1,
2073 EVEX_W_0FE6_P_2,
2074 EVEX_W_0FE6_P_3,
2075 EVEX_W_0FE7_P_2,
2076 EVEX_W_0FF2_P_2,
2077 EVEX_W_0FF3_P_2,
2078 EVEX_W_0FF4_P_2,
2079 EVEX_W_0FFA_P_2,
2080 EVEX_W_0FFB_P_2,
2081 EVEX_W_0FFE_P_2,
2082 EVEX_W_0F380C_P_2,
2083 EVEX_W_0F380D_P_2,
2084 EVEX_W_0F3811_P_1,
2085 EVEX_W_0F3812_P_1,
2086 EVEX_W_0F3813_P_1,
2087 EVEX_W_0F3813_P_2,
2088 EVEX_W_0F3814_P_1,
2089 EVEX_W_0F3815_P_1,
2090 EVEX_W_0F3818_P_2,
2091 EVEX_W_0F3819_P_2,
2092 EVEX_W_0F381A_P_2,
2093 EVEX_W_0F381B_P_2,
2094 EVEX_W_0F381E_P_2,
2095 EVEX_W_0F381F_P_2,
2096 EVEX_W_0F3821_P_1,
2097 EVEX_W_0F3822_P_1,
2098 EVEX_W_0F3823_P_1,
2099 EVEX_W_0F3824_P_1,
2100 EVEX_W_0F3825_P_1,
2101 EVEX_W_0F3825_P_2,
2102 EVEX_W_0F3828_P_2,
2103 EVEX_W_0F3829_P_2,
2104 EVEX_W_0F382A_P_1,
2105 EVEX_W_0F382A_P_2,
2106 EVEX_W_0F3831_P_1,
2107 EVEX_W_0F3832_P_1,
2108 EVEX_W_0F3833_P_1,
2109 EVEX_W_0F3834_P_1,
2110 EVEX_W_0F3835_P_1,
2111 EVEX_W_0F3835_P_2,
2112 EVEX_W_0F3837_P_2,
2113 EVEX_W_0F383A_P_1,
2114 EVEX_W_0F3840_P_2,
2115 EVEX_W_0F3858_P_2,
2116 EVEX_W_0F3859_P_2,
2117 EVEX_W_0F385A_P_2,
2118 EVEX_W_0F385B_P_2,
2119 EVEX_W_0F3891_P_2,
2120 EVEX_W_0F3893_P_2,
2121 EVEX_W_0F38A1_P_2,
2122 EVEX_W_0F38A3_P_2,
2123 EVEX_W_0F38C7_R_1_P_2,
2124 EVEX_W_0F38C7_R_2_P_2,
2125 EVEX_W_0F38C7_R_5_P_2,
2126 EVEX_W_0F38C7_R_6_P_2,
2127
2128 EVEX_W_0F3A00_P_2,
2129 EVEX_W_0F3A01_P_2,
2130 EVEX_W_0F3A04_P_2,
2131 EVEX_W_0F3A05_P_2,
2132 EVEX_W_0F3A08_P_2,
2133 EVEX_W_0F3A09_P_2,
2134 EVEX_W_0F3A0A_P_2,
2135 EVEX_W_0F3A0B_P_2,
2136 EVEX_W_0F3A18_P_2,
2137 EVEX_W_0F3A19_P_2,
2138 EVEX_W_0F3A1A_P_2,
2139 EVEX_W_0F3A1B_P_2,
2140 EVEX_W_0F3A1D_P_2,
2141 EVEX_W_0F3A21_P_2,
2142 EVEX_W_0F3A23_P_2,
2143 EVEX_W_0F3A38_P_2,
2144 EVEX_W_0F3A39_P_2,
2145 EVEX_W_0F3A3A_P_2,
2146 EVEX_W_0F3A3B_P_2,
2147 EVEX_W_0F3A43_P_2,
9e30b8e0
L
2148};
2149
26ca5450 2150typedef void (*op_rtn) (int bytemode, int sizeflag);
252b5132
RH
2151
2152struct dis386 {
2da11e11 2153 const char *name;
ce518a5f
L
2154 struct
2155 {
2156 op_rtn rtn;
2157 int bytemode;
2158 } op[MAX_OPERANDS];
252b5132
RH
2159};
2160
2161/* Upper case letters in the instruction names here are macros.
2162 'A' => print 'b' if no register operands or suffix_always is true
2163 'B' => print 'b' if suffix_always is true
9306ca4a 2164 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
98b528ac 2165 size prefix
ed7841b3 2166 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
98b528ac 2167 suffix_always is true
252b5132 2168 'E' => print 'e' if 32-bit form of jcxz
3ffd33cf 2169 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
52fd6d94 2170 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
5dd0794d 2171 'H' => print ",pt" or ",pn" branch hint
9306ca4a 2172 'I' => honor following macro letter even in Intel mode (implemented only
98b528ac 2173 for some of the macro letters)
9306ca4a 2174 'J' => print 'l'
42903f7f 2175 'K' => print 'd' or 'q' if rex prefix is present.
252b5132 2176 'L' => print 'l' if suffix_always is true
9d141669 2177 'M' => print 'r' if intel_mnemonic is false.
252b5132 2178 'N' => print 'n' if instruction has no wait "prefix"
a35ca55a 2179 'O' => print 'd' or 'o' (or 'q' in Intel mode)
52b15da3 2180 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
98b528ac
L
2181 or suffix_always is true. print 'q' if rex prefix is present.
2182 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
2183 is true
a35ca55a 2184 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
52b15da3 2185 'S' => print 'w', 'l' or 'q' if suffix_always is true
6439fc28
AM
2186 'T' => print 'q' in 64bit mode and behave as 'P' otherwise
2187 'U' => print 'q' in 64bit mode and behave as 'Q' otherwise
1a114b12 2188 'V' => print 'q' in 64bit mode and behave as 'S' otherwise
a35ca55a 2189 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
9306ca4a 2190 'X' => print 's', 'd' depending on data16 prefix (for XMM)
8a72226a
L
2191 'Y' => 'q' if instruction has an REX 64bit overwrite prefix and
2192 suffix_always is true.
6dd5059a 2193 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
9d141669 2194 '!' => change condition from true to false or from false to true.
98b528ac
L
2195 '%' => add 1 upper case letter to the macro.
2196
2197 2 upper case letter macros:
c0f3af97
L
2198 "XY" => print 'x' or 'y' if no register operands or suffix_always
2199 is true.
4b06377f
L
2200 "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
2201 "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
98b528ac 2202 or suffix_always is true
4b06377f
L
2203 "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
2204 "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
2205 "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
6c30d220 2206 "LW" => print 'd', 'q' depending on the VEX.W bit
52b15da3 2207
6439fc28
AM
2208 Many of the above letters print nothing in Intel mode. See "putop"
2209 for the details.
52b15da3 2210
6439fc28 2211 Braces '{' and '}', and vertical bars '|', indicate alternative
7c52e0e8 2212 mnemonic strings for AT&T and Intel. */
252b5132 2213
6439fc28 2214static const struct dis386 dis386[] = {
252b5132 2215 /* 00 */
42164a71
L
2216 { "addB", { Ebh1, Gb } },
2217 { "addS", { Evh1, Gv } },
c7532693
L
2218 { "addB", { Gb, EbS } },
2219 { "addS", { Gv, EvS } },
ce518a5f
L
2220 { "addB", { AL, Ib } },
2221 { "addS", { eAX, Iv } },
4e7d34a6
L
2222 { X86_64_TABLE (X86_64_06) },
2223 { X86_64_TABLE (X86_64_07) },
252b5132 2224 /* 08 */
42164a71
L
2225 { "orB", { Ebh1, Gb } },
2226 { "orS", { Evh1, Gv } },
c7532693
L
2227 { "orB", { Gb, EbS } },
2228 { "orS", { Gv, EvS } },
ce518a5f
L
2229 { "orB", { AL, Ib } },
2230 { "orS", { eAX, Iv } },
4e7d34a6 2231 { X86_64_TABLE (X86_64_0D) },
592d1631 2232 { Bad_Opcode }, /* 0x0f extended opcode escape */
252b5132 2233 /* 10 */
42164a71
L
2234 { "adcB", { Ebh1, Gb } },
2235 { "adcS", { Evh1, Gv } },
c7532693
L
2236 { "adcB", { Gb, EbS } },
2237 { "adcS", { Gv, EvS } },
ce518a5f
L
2238 { "adcB", { AL, Ib } },
2239 { "adcS", { eAX, Iv } },
4e7d34a6
L
2240 { X86_64_TABLE (X86_64_16) },
2241 { X86_64_TABLE (X86_64_17) },
252b5132 2242 /* 18 */
42164a71
L
2243 { "sbbB", { Ebh1, Gb } },
2244 { "sbbS", { Evh1, Gv } },
c7532693
L
2245 { "sbbB", { Gb, EbS } },
2246 { "sbbS", { Gv, EvS } },
ce518a5f
L
2247 { "sbbB", { AL, Ib } },
2248 { "sbbS", { eAX, Iv } },
4e7d34a6
L
2249 { X86_64_TABLE (X86_64_1E) },
2250 { X86_64_TABLE (X86_64_1F) },
252b5132 2251 /* 20 */
42164a71
L
2252 { "andB", { Ebh1, Gb } },
2253 { "andS", { Evh1, Gv } },
c7532693
L
2254 { "andB", { Gb, EbS } },
2255 { "andS", { Gv, EvS } },
ce518a5f
L
2256 { "andB", { AL, Ib } },
2257 { "andS", { eAX, Iv } },
592d1631 2258 { Bad_Opcode }, /* SEG ES prefix */
4e7d34a6 2259 { X86_64_TABLE (X86_64_27) },
252b5132 2260 /* 28 */
42164a71
L
2261 { "subB", { Ebh1, Gb } },
2262 { "subS", { Evh1, Gv } },
c7532693
L
2263 { "subB", { Gb, EbS } },
2264 { "subS", { Gv, EvS } },
ce518a5f
L
2265 { "subB", { AL, Ib } },
2266 { "subS", { eAX, Iv } },
592d1631 2267 { Bad_Opcode }, /* SEG CS prefix */
4e7d34a6 2268 { X86_64_TABLE (X86_64_2F) },
252b5132 2269 /* 30 */
42164a71
L
2270 { "xorB", { Ebh1, Gb } },
2271 { "xorS", { Evh1, Gv } },
c7532693
L
2272 { "xorB", { Gb, EbS } },
2273 { "xorS", { Gv, EvS } },
ce518a5f
L
2274 { "xorB", { AL, Ib } },
2275 { "xorS", { eAX, Iv } },
592d1631 2276 { Bad_Opcode }, /* SEG SS prefix */
4e7d34a6 2277 { X86_64_TABLE (X86_64_37) },
252b5132 2278 /* 38 */
ce518a5f
L
2279 { "cmpB", { Eb, Gb } },
2280 { "cmpS", { Ev, Gv } },
c7532693
L
2281 { "cmpB", { Gb, EbS } },
2282 { "cmpS", { Gv, EvS } },
ce518a5f
L
2283 { "cmpB", { AL, Ib } },
2284 { "cmpS", { eAX, Iv } },
592d1631 2285 { Bad_Opcode }, /* SEG DS prefix */
4e7d34a6 2286 { X86_64_TABLE (X86_64_3F) },
252b5132 2287 /* 40 */
ce518a5f
L
2288 { "inc{S|}", { RMeAX } },
2289 { "inc{S|}", { RMeCX } },
2290 { "inc{S|}", { RMeDX } },
2291 { "inc{S|}", { RMeBX } },
2292 { "inc{S|}", { RMeSP } },
2293 { "inc{S|}", { RMeBP } },
2294 { "inc{S|}", { RMeSI } },
2295 { "inc{S|}", { RMeDI } },
252b5132 2296 /* 48 */
ce518a5f
L
2297 { "dec{S|}", { RMeAX } },
2298 { "dec{S|}", { RMeCX } },
2299 { "dec{S|}", { RMeDX } },
2300 { "dec{S|}", { RMeBX } },
2301 { "dec{S|}", { RMeSP } },
2302 { "dec{S|}", { RMeBP } },
2303 { "dec{S|}", { RMeSI } },
2304 { "dec{S|}", { RMeDI } },
252b5132 2305 /* 50 */
ce518a5f
L
2306 { "pushV", { RMrAX } },
2307 { "pushV", { RMrCX } },
2308 { "pushV", { RMrDX } },
2309 { "pushV", { RMrBX } },
2310 { "pushV", { RMrSP } },
2311 { "pushV", { RMrBP } },
2312 { "pushV", { RMrSI } },
2313 { "pushV", { RMrDI } },
252b5132 2314 /* 58 */
ce518a5f
L
2315 { "popV", { RMrAX } },
2316 { "popV", { RMrCX } },
2317 { "popV", { RMrDX } },
2318 { "popV", { RMrBX } },
2319 { "popV", { RMrSP } },
2320 { "popV", { RMrBP } },
2321 { "popV", { RMrSI } },
2322 { "popV", { RMrDI } },
252b5132 2323 /* 60 */
4e7d34a6
L
2324 { X86_64_TABLE (X86_64_60) },
2325 { X86_64_TABLE (X86_64_61) },
2326 { X86_64_TABLE (X86_64_62) },
2327 { X86_64_TABLE (X86_64_63) },
592d1631
L
2328 { Bad_Opcode }, /* seg fs */
2329 { Bad_Opcode }, /* seg gs */
2330 { Bad_Opcode }, /* op size prefix */
2331 { Bad_Opcode }, /* adr size prefix */
252b5132 2332 /* 68 */
d9e3625e 2333 { "pushT", { sIv } },
ce518a5f 2334 { "imulS", { Gv, Ev, Iv } },
e3949f17 2335 { "pushT", { sIbT } },
ce518a5f 2336 { "imulS", { Gv, Ev, sIb } },
7c52e0e8 2337 { "ins{b|}", { Ybr, indirDX } },
4e7d34a6 2338 { X86_64_TABLE (X86_64_6D) },
7c52e0e8 2339 { "outs{b|}", { indirDXr, Xb } },
4e7d34a6 2340 { X86_64_TABLE (X86_64_6F) },
252b5132 2341 /* 70 */
7e8b059b
L
2342 { "joH", { Jb, BND, cond_jump_flag } },
2343 { "jnoH", { Jb, BND, cond_jump_flag } },
2344 { "jbH", { Jb, BND, cond_jump_flag } },
2345 { "jaeH", { Jb, BND, cond_jump_flag } },
2346 { "jeH", { Jb, BND, cond_jump_flag } },
2347 { "jneH", { Jb, BND, cond_jump_flag } },
2348 { "jbeH", { Jb, BND, cond_jump_flag } },
2349 { "jaH", { Jb, BND, cond_jump_flag } },
252b5132 2350 /* 78 */
7e8b059b
L
2351 { "jsH", { Jb, BND, cond_jump_flag } },
2352 { "jnsH", { Jb, BND, cond_jump_flag } },
2353 { "jpH", { Jb, BND, cond_jump_flag } },
2354 { "jnpH", { Jb, BND, cond_jump_flag } },
2355 { "jlH", { Jb, BND, cond_jump_flag } },
2356 { "jgeH", { Jb, BND, cond_jump_flag } },
2357 { "jleH", { Jb, BND, cond_jump_flag } },
2358 { "jgH", { Jb, BND, cond_jump_flag } },
252b5132 2359 /* 80 */
1ceb70f8
L
2360 { REG_TABLE (REG_80) },
2361 { REG_TABLE (REG_81) },
592d1631 2362 { Bad_Opcode },
1ceb70f8 2363 { REG_TABLE (REG_82) },
ce518a5f
L
2364 { "testB", { Eb, Gb } },
2365 { "testS", { Ev, Gv } },
42164a71
L
2366 { "xchgB", { Ebh2, Gb } },
2367 { "xchgS", { Evh2, Gv } },
252b5132 2368 /* 88 */
42164a71
L
2369 { "movB", { Ebh3, Gb } },
2370 { "movS", { Evh3, Gv } },
b6169b20
L
2371 { "movB", { Gb, EbS } },
2372 { "movS", { Gv, EvS } },
ce518a5f 2373 { "movD", { Sv, Sw } },
1ceb70f8 2374 { MOD_TABLE (MOD_8D) },
ce518a5f 2375 { "movD", { Sw, Sv } },
1ceb70f8 2376 { REG_TABLE (REG_8F) },
252b5132 2377 /* 90 */
1ceb70f8 2378 { PREFIX_TABLE (PREFIX_90) },
ce518a5f
L
2379 { "xchgS", { RMeCX, eAX } },
2380 { "xchgS", { RMeDX, eAX } },
2381 { "xchgS", { RMeBX, eAX } },
2382 { "xchgS", { RMeSP, eAX } },
2383 { "xchgS", { RMeBP, eAX } },
2384 { "xchgS", { RMeSI, eAX } },
2385 { "xchgS", { RMeDI, eAX } },
252b5132 2386 /* 98 */
7c52e0e8
L
2387 { "cW{t|}R", { XX } },
2388 { "cR{t|}O", { XX } },
4e7d34a6 2389 { X86_64_TABLE (X86_64_9A) },
592d1631 2390 { Bad_Opcode }, /* fwait */
ce518a5f
L
2391 { "pushfT", { XX } },
2392 { "popfT", { XX } },
7c52e0e8
L
2393 { "sahf", { XX } },
2394 { "lahf", { XX } },
252b5132 2395 /* a0 */
4b06377f
L
2396 { "mov%LB", { AL, Ob } },
2397 { "mov%LS", { eAX, Ov } },
2398 { "mov%LB", { Ob, AL } },
2399 { "mov%LS", { Ov, eAX } },
7c52e0e8
L
2400 { "movs{b|}", { Ybr, Xb } },
2401 { "movs{R|}", { Yvr, Xv } },
2402 { "cmps{b|}", { Xb, Yb } },
2403 { "cmps{R|}", { Xv, Yv } },
252b5132 2404 /* a8 */
ce518a5f
L
2405 { "testB", { AL, Ib } },
2406 { "testS", { eAX, Iv } },
2407 { "stosB", { Ybr, AL } },
2408 { "stosS", { Yvr, eAX } },
2409 { "lodsB", { ALr, Xb } },
2410 { "lodsS", { eAXr, Xv } },
2411 { "scasB", { AL, Yb } },
2412 { "scasS", { eAX, Yv } },
252b5132 2413 /* b0 */
ce518a5f
L
2414 { "movB", { RMAL, Ib } },
2415 { "movB", { RMCL, Ib } },
2416 { "movB", { RMDL, Ib } },
2417 { "movB", { RMBL, Ib } },
2418 { "movB", { RMAH, Ib } },
2419 { "movB", { RMCH, Ib } },
2420 { "movB", { RMDH, Ib } },
2421 { "movB", { RMBH, Ib } },
252b5132 2422 /* b8 */
4b06377f
L
2423 { "mov%LV", { RMeAX, Iv64 } },
2424 { "mov%LV", { RMeCX, Iv64 } },
2425 { "mov%LV", { RMeDX, Iv64 } },
2426 { "mov%LV", { RMeBX, Iv64 } },
2427 { "mov%LV", { RMeSP, Iv64 } },
2428 { "mov%LV", { RMeBP, Iv64 } },
2429 { "mov%LV", { RMeSI, Iv64 } },
2430 { "mov%LV", { RMeDI, Iv64 } },
252b5132 2431 /* c0 */
1ceb70f8
L
2432 { REG_TABLE (REG_C0) },
2433 { REG_TABLE (REG_C1) },
7e8b059b
L
2434 { "retT", { Iw, BND } },
2435 { "retT", { BND } },
4e7d34a6
L
2436 { X86_64_TABLE (X86_64_C4) },
2437 { X86_64_TABLE (X86_64_C5) },
1ceb70f8
L
2438 { REG_TABLE (REG_C6) },
2439 { REG_TABLE (REG_C7) },
252b5132 2440 /* c8 */
ce518a5f
L
2441 { "enterT", { Iw, Ib } },
2442 { "leaveT", { XX } },
ddab3d59
JB
2443 { "Jret{|f}P", { Iw } },
2444 { "Jret{|f}P", { XX } },
ce518a5f
L
2445 { "int3", { XX } },
2446 { "int", { Ib } },
4e7d34a6 2447 { X86_64_TABLE (X86_64_CE) },
ce518a5f 2448 { "iretP", { XX } },
252b5132 2449 /* d0 */
1ceb70f8
L
2450 { REG_TABLE (REG_D0) },
2451 { REG_TABLE (REG_D1) },
2452 { REG_TABLE (REG_D2) },
2453 { REG_TABLE (REG_D3) },
4e7d34a6
L
2454 { X86_64_TABLE (X86_64_D4) },
2455 { X86_64_TABLE (X86_64_D5) },
592d1631 2456 { Bad_Opcode },
ce518a5f 2457 { "xlat", { DSBX } },
252b5132
RH
2458 /* d8 */
2459 { FLOAT },
2460 { FLOAT },
2461 { FLOAT },
2462 { FLOAT },
2463 { FLOAT },
2464 { FLOAT },
2465 { FLOAT },
2466 { FLOAT },
2467 /* e0 */
ce518a5f
L
2468 { "loopneFH", { Jb, XX, loop_jcxz_flag } },
2469 { "loopeFH", { Jb, XX, loop_jcxz_flag } },
2470 { "loopFH", { Jb, XX, loop_jcxz_flag } },
2471 { "jEcxzH", { Jb, XX, loop_jcxz_flag } },
2472 { "inB", { AL, Ib } },
2473 { "inG", { zAX, Ib } },
2474 { "outB", { Ib, AL } },
2475 { "outG", { Ib, zAX } },
252b5132 2476 /* e8 */
7e8b059b
L
2477 { "callT", { Jv, BND } },
2478 { "jmpT", { Jv, BND } },
4e7d34a6 2479 { X86_64_TABLE (X86_64_EA) },
7e8b059b 2480 { "jmp", { Jb, BND } },
ce518a5f
L
2481 { "inB", { AL, indirDX } },
2482 { "inG", { zAX, indirDX } },
2483 { "outB", { indirDX, AL } },
2484 { "outG", { indirDX, zAX } },
252b5132 2485 /* f0 */
592d1631 2486 { Bad_Opcode }, /* lock prefix */
ce518a5f 2487 { "icebp", { XX } },
592d1631
L
2488 { Bad_Opcode }, /* repne */
2489 { Bad_Opcode }, /* repz */
ce518a5f
L
2490 { "hlt", { XX } },
2491 { "cmc", { XX } },
1ceb70f8
L
2492 { REG_TABLE (REG_F6) },
2493 { REG_TABLE (REG_F7) },
252b5132 2494 /* f8 */
ce518a5f
L
2495 { "clc", { XX } },
2496 { "stc", { XX } },
2497 { "cli", { XX } },
2498 { "sti", { XX } },
2499 { "cld", { XX } },
2500 { "std", { XX } },
1ceb70f8
L
2501 { REG_TABLE (REG_FE) },
2502 { REG_TABLE (REG_FF) },
252b5132
RH
2503};
2504
6439fc28 2505static const struct dis386 dis386_twobyte[] = {
252b5132 2506 /* 00 */
1ceb70f8
L
2507 { REG_TABLE (REG_0F00 ) },
2508 { REG_TABLE (REG_0F01 ) },
ce518a5f
L
2509 { "larS", { Gv, Ew } },
2510 { "lslS", { Gv, Ew } },
592d1631 2511 { Bad_Opcode },
ce518a5f
L
2512 { "syscall", { XX } },
2513 { "clts", { XX } },
2514 { "sysretP", { XX } },
252b5132 2515 /* 08 */
ce518a5f
L
2516 { "invd", { XX } },
2517 { "wbinvd", { XX } },
592d1631 2518 { Bad_Opcode },
b414985b 2519 { "ud2", { XX } },
592d1631 2520 { Bad_Opcode },
b5b1fc4f 2521 { REG_TABLE (REG_0F0D) },
ce518a5f
L
2522 { "femms", { XX } },
2523 { "", { MX, EM, OPSUF } }, /* See OP_3DNowSuffix. */
252b5132 2524 /* 10 */
1ceb70f8
L
2525 { PREFIX_TABLE (PREFIX_0F10) },
2526 { PREFIX_TABLE (PREFIX_0F11) },
2527 { PREFIX_TABLE (PREFIX_0F12) },
2528 { MOD_TABLE (MOD_0F13) },
f2a421c4
L
2529 { "unpcklpX", { XM, EXx } },
2530 { "unpckhpX", { XM, EXx } },
1ceb70f8
L
2531 { PREFIX_TABLE (PREFIX_0F16) },
2532 { MOD_TABLE (MOD_0F17) },
252b5132 2533 /* 18 */
1ceb70f8 2534 { REG_TABLE (REG_0F18) },
b5b1fc4f 2535 { "nopQ", { Ev } },
7e8b059b
L
2536 { PREFIX_TABLE (PREFIX_0F1A) },
2537 { PREFIX_TABLE (PREFIX_0F1B) },
b5b1fc4f
L
2538 { "nopQ", { Ev } },
2539 { "nopQ", { Ev } },
2540 { "nopQ", { Ev } },
ce518a5f 2541 { "nopQ", { Ev } },
252b5132 2542 /* 20 */
1ceb70f8
L
2543 { MOD_TABLE (MOD_0F20) },
2544 { MOD_TABLE (MOD_0F21) },
2545 { MOD_TABLE (MOD_0F22) },
2546 { MOD_TABLE (MOD_0F23) },
2547 { MOD_TABLE (MOD_0F24) },
592d1631 2548 { Bad_Opcode },
1ceb70f8 2549 { MOD_TABLE (MOD_0F26) },
592d1631 2550 { Bad_Opcode },
252b5132 2551 /* 28 */
09a2c6cf 2552 { "movapX", { XM, EXx } },
b6169b20 2553 { "movapX", { EXxS, XM } },
1ceb70f8
L
2554 { PREFIX_TABLE (PREFIX_0F2A) },
2555 { PREFIX_TABLE (PREFIX_0F2B) },
2556 { PREFIX_TABLE (PREFIX_0F2C) },
2557 { PREFIX_TABLE (PREFIX_0F2D) },
2558 { PREFIX_TABLE (PREFIX_0F2E) },
2559 { PREFIX_TABLE (PREFIX_0F2F) },
252b5132 2560 /* 30 */
ce518a5f
L
2561 { "wrmsr", { XX } },
2562 { "rdtsc", { XX } },
2563 { "rdmsr", { XX } },
2564 { "rdpmc", { XX } },
2565 { "sysenter", { XX } },
2566 { "sysexit", { XX } },
592d1631 2567 { Bad_Opcode },
47dd174c 2568 { "getsec", { XX } },
252b5132 2569 /* 38 */
4e7d34a6 2570 { THREE_BYTE_TABLE (THREE_BYTE_0F38) },
592d1631 2571 { Bad_Opcode },
4e7d34a6 2572 { THREE_BYTE_TABLE (THREE_BYTE_0F3A) },
592d1631
L
2573 { Bad_Opcode },
2574 { Bad_Opcode },
2575 { Bad_Opcode },
2576 { Bad_Opcode },
2577 { Bad_Opcode },
252b5132 2578 /* 40 */
b19d5385
JB
2579 { "cmovoS", { Gv, Ev } },
2580 { "cmovnoS", { Gv, Ev } },
2581 { "cmovbS", { Gv, Ev } },
2582 { "cmovaeS", { Gv, Ev } },
2583 { "cmoveS", { Gv, Ev } },
2584 { "cmovneS", { Gv, Ev } },
2585 { "cmovbeS", { Gv, Ev } },
2586 { "cmovaS", { Gv, Ev } },
252b5132 2587 /* 48 */
b19d5385
JB
2588 { "cmovsS", { Gv, Ev } },
2589 { "cmovnsS", { Gv, Ev } },
2590 { "cmovpS", { Gv, Ev } },
2591 { "cmovnpS", { Gv, Ev } },
2592 { "cmovlS", { Gv, Ev } },
2593 { "cmovgeS", { Gv, Ev } },
2594 { "cmovleS", { Gv, Ev } },
2595 { "cmovgS", { Gv, Ev } },
252b5132 2596 /* 50 */
75c135a8 2597 { MOD_TABLE (MOD_0F51) },
1ceb70f8
L
2598 { PREFIX_TABLE (PREFIX_0F51) },
2599 { PREFIX_TABLE (PREFIX_0F52) },
2600 { PREFIX_TABLE (PREFIX_0F53) },
09a2c6cf
L
2601 { "andpX", { XM, EXx } },
2602 { "andnpX", { XM, EXx } },
2603 { "orpX", { XM, EXx } },
2604 { "xorpX", { XM, EXx } },
252b5132 2605 /* 58 */
1ceb70f8
L
2606 { PREFIX_TABLE (PREFIX_0F58) },
2607 { PREFIX_TABLE (PREFIX_0F59) },
2608 { PREFIX_TABLE (PREFIX_0F5A) },
2609 { PREFIX_TABLE (PREFIX_0F5B) },
2610 { PREFIX_TABLE (PREFIX_0F5C) },
2611 { PREFIX_TABLE (PREFIX_0F5D) },
2612 { PREFIX_TABLE (PREFIX_0F5E) },
2613 { PREFIX_TABLE (PREFIX_0F5F) },
252b5132 2614 /* 60 */
1ceb70f8
L
2615 { PREFIX_TABLE (PREFIX_0F60) },
2616 { PREFIX_TABLE (PREFIX_0F61) },
2617 { PREFIX_TABLE (PREFIX_0F62) },
ce518a5f
L
2618 { "packsswb", { MX, EM } },
2619 { "pcmpgtb", { MX, EM } },
2620 { "pcmpgtw", { MX, EM } },
2621 { "pcmpgtd", { MX, EM } },
2622 { "packuswb", { MX, EM } },
252b5132 2623 /* 68 */
ce518a5f
L
2624 { "punpckhbw", { MX, EM } },
2625 { "punpckhwd", { MX, EM } },
2626 { "punpckhdq", { MX, EM } },
2627 { "packssdw", { MX, EM } },
1ceb70f8
L
2628 { PREFIX_TABLE (PREFIX_0F6C) },
2629 { PREFIX_TABLE (PREFIX_0F6D) },
231af070 2630 { "movK", { MX, Edq } },
1ceb70f8 2631 { PREFIX_TABLE (PREFIX_0F6F) },
252b5132 2632 /* 70 */
1ceb70f8
L
2633 { PREFIX_TABLE (PREFIX_0F70) },
2634 { REG_TABLE (REG_0F71) },
2635 { REG_TABLE (REG_0F72) },
2636 { REG_TABLE (REG_0F73) },
ce518a5f
L
2637 { "pcmpeqb", { MX, EM } },
2638 { "pcmpeqw", { MX, EM } },
2639 { "pcmpeqd", { MX, EM } },
2640 { "emms", { XX } },
252b5132 2641 /* 78 */
1ceb70f8
L
2642 { PREFIX_TABLE (PREFIX_0F78) },
2643 { PREFIX_TABLE (PREFIX_0F79) },
4e7d34a6 2644 { THREE_BYTE_TABLE (THREE_BYTE_0F7A) },
592d1631 2645 { Bad_Opcode },
1ceb70f8
L
2646 { PREFIX_TABLE (PREFIX_0F7C) },
2647 { PREFIX_TABLE (PREFIX_0F7D) },
2648 { PREFIX_TABLE (PREFIX_0F7E) },
2649 { PREFIX_TABLE (PREFIX_0F7F) },
252b5132 2650 /* 80 */
7e8b059b
L
2651 { "joH", { Jv, BND, cond_jump_flag } },
2652 { "jnoH", { Jv, BND, cond_jump_flag } },
2653 { "jbH", { Jv, BND, cond_jump_flag } },
2654 { "jaeH", { Jv, BND, cond_jump_flag } },
2655 { "jeH", { Jv, BND, cond_jump_flag } },
2656 { "jneH", { Jv, BND, cond_jump_flag } },
2657 { "jbeH", { Jv, BND, cond_jump_flag } },
2658 { "jaH", { Jv, BND, cond_jump_flag } },
252b5132 2659 /* 88 */
7e8b059b
L
2660 { "jsH", { Jv, BND, cond_jump_flag } },
2661 { "jnsH", { Jv, BND, cond_jump_flag } },
2662 { "jpH", { Jv, BND, cond_jump_flag } },
2663 { "jnpH", { Jv, BND, cond_jump_flag } },
2664 { "jlH", { Jv, BND, cond_jump_flag } },
2665 { "jgeH", { Jv, BND, cond_jump_flag } },
2666 { "jleH", { Jv, BND, cond_jump_flag } },
2667 { "jgH", { Jv, BND, cond_jump_flag } },
252b5132 2668 /* 90 */
ce518a5f
L
2669 { "seto", { Eb } },
2670 { "setno", { Eb } },
2671 { "setb", { Eb } },
2672 { "setae", { Eb } },
2673 { "sete", { Eb } },
2674 { "setne", { Eb } },
2675 { "setbe", { Eb } },
2676 { "seta", { Eb } },
252b5132 2677 /* 98 */
ce518a5f
L
2678 { "sets", { Eb } },
2679 { "setns", { Eb } },
2680 { "setp", { Eb } },
2681 { "setnp", { Eb } },
2682 { "setl", { Eb } },
2683 { "setge", { Eb } },
2684 { "setle", { Eb } },
2685 { "setg", { Eb } },
252b5132 2686 /* a0 */
ce518a5f
L
2687 { "pushT", { fs } },
2688 { "popT", { fs } },
2689 { "cpuid", { XX } },
2690 { "btS", { Ev, Gv } },
2691 { "shldS", { Ev, Gv, Ib } },
2692 { "shldS", { Ev, Gv, CL } },
1ceb70f8
L
2693 { REG_TABLE (REG_0FA6) },
2694 { REG_TABLE (REG_0FA7) },
252b5132 2695 /* a8 */
ce518a5f
L
2696 { "pushT", { gs } },
2697 { "popT", { gs } },
2698 { "rsm", { XX } },
42164a71 2699 { "btsS", { Evh1, Gv } },
ce518a5f
L
2700 { "shrdS", { Ev, Gv, Ib } },
2701 { "shrdS", { Ev, Gv, CL } },
1ceb70f8 2702 { REG_TABLE (REG_0FAE) },
ce518a5f 2703 { "imulS", { Gv, Ev } },
252b5132 2704 /* b0 */
42164a71
L
2705 { "cmpxchgB", { Ebh1, Gb } },
2706 { "cmpxchgS", { Evh1, Gv } },
1ceb70f8 2707 { MOD_TABLE (MOD_0FB2) },
42164a71 2708 { "btrS", { Evh1, Gv } },
1ceb70f8
L
2709 { MOD_TABLE (MOD_0FB4) },
2710 { MOD_TABLE (MOD_0FB5) },
7c52e0e8
L
2711 { "movz{bR|x}", { Gv, Eb } },
2712 { "movz{wR|x}", { Gv, Ew } }, /* yes, there really is movzww ! */
252b5132 2713 /* b8 */
1ceb70f8 2714 { PREFIX_TABLE (PREFIX_0FB8) },
b414985b 2715 { "ud1", { XX } },
1ceb70f8 2716 { REG_TABLE (REG_0FBA) },
42164a71 2717 { "btcS", { Evh1, Gv } },
f12dc422 2718 { PREFIX_TABLE (PREFIX_0FBC) },
1ceb70f8 2719 { PREFIX_TABLE (PREFIX_0FBD) },
7c52e0e8
L
2720 { "movs{bR|x}", { Gv, Eb } },
2721 { "movs{wR|x}", { Gv, Ew } }, /* yes, there really is movsww ! */
252b5132 2722 /* c0 */
42164a71
L
2723 { "xaddB", { Ebh1, Gb } },
2724 { "xaddS", { Evh1, Gv } },
1ceb70f8 2725 { PREFIX_TABLE (PREFIX_0FC2) },
4ee52178 2726 { PREFIX_TABLE (PREFIX_0FC3) },
ce518a5f
L
2727 { "pinsrw", { MX, Edqw, Ib } },
2728 { "pextrw", { Gdq, MS, Ib } },
09a2c6cf 2729 { "shufpX", { XM, EXx, Ib } },
1ceb70f8 2730 { REG_TABLE (REG_0FC7) },
252b5132 2731 /* c8 */
ce518a5f
L
2732 { "bswap", { RMeAX } },
2733 { "bswap", { RMeCX } },
2734 { "bswap", { RMeDX } },
2735 { "bswap", { RMeBX } },
2736 { "bswap", { RMeSP } },
2737 { "bswap", { RMeBP } },
2738 { "bswap", { RMeSI } },
2739 { "bswap", { RMeDI } },
252b5132 2740 /* d0 */
1ceb70f8 2741 { PREFIX_TABLE (PREFIX_0FD0) },
ce518a5f
L
2742 { "psrlw", { MX, EM } },
2743 { "psrld", { MX, EM } },
2744 { "psrlq", { MX, EM } },
2745 { "paddq", { MX, EM } },
2746 { "pmullw", { MX, EM } },
1ceb70f8 2747 { PREFIX_TABLE (PREFIX_0FD6) },
75c135a8 2748 { MOD_TABLE (MOD_0FD7) },
252b5132 2749 /* d8 */
ce518a5f
L
2750 { "psubusb", { MX, EM } },
2751 { "psubusw", { MX, EM } },
2752 { "pminub", { MX, EM } },
2753 { "pand", { MX, EM } },
2754 { "paddusb", { MX, EM } },
2755 { "paddusw", { MX, EM } },
2756 { "pmaxub", { MX, EM } },
2757 { "pandn", { MX, EM } },
252b5132 2758 /* e0 */
ce518a5f
L
2759 { "pavgb", { MX, EM } },
2760 { "psraw", { MX, EM } },
2761 { "psrad", { MX, EM } },
2762 { "pavgw", { MX, EM } },
2763 { "pmulhuw", { MX, EM } },
2764 { "pmulhw", { MX, EM } },
1ceb70f8
L
2765 { PREFIX_TABLE (PREFIX_0FE6) },
2766 { PREFIX_TABLE (PREFIX_0FE7) },
252b5132 2767 /* e8 */
ce518a5f
L
2768 { "psubsb", { MX, EM } },
2769 { "psubsw", { MX, EM } },
2770 { "pminsw", { MX, EM } },
2771 { "por", { MX, EM } },
2772 { "paddsb", { MX, EM } },
2773 { "paddsw", { MX, EM } },
2774 { "pmaxsw", { MX, EM } },
2775 { "pxor", { MX, EM } },
252b5132 2776 /* f0 */
1ceb70f8 2777 { PREFIX_TABLE (PREFIX_0FF0) },
ce518a5f
L
2778 { "psllw", { MX, EM } },
2779 { "pslld", { MX, EM } },
2780 { "psllq", { MX, EM } },
2781 { "pmuludq", { MX, EM } },
2782 { "pmaddwd", { MX, EM } },
2783 { "psadbw", { MX, EM } },
1ceb70f8 2784 { PREFIX_TABLE (PREFIX_0FF7) },
252b5132 2785 /* f8 */
ce518a5f
L
2786 { "psubb", { MX, EM } },
2787 { "psubw", { MX, EM } },
2788 { "psubd", { MX, EM } },
2789 { "psubq", { MX, EM } },
2790 { "paddb", { MX, EM } },
2791 { "paddw", { MX, EM } },
2792 { "paddd", { MX, EM } },
592d1631 2793 { Bad_Opcode },
252b5132
RH
2794};
2795
2796static const unsigned char onebyte_has_modrm[256] = {
c608c12e
AM
2797 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2798 /* ------------------------------- */
2799 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
2800 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
2801 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
2802 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
2803 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
2804 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
2805 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
2806 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
2807 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
2808 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
2809 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
2810 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
2811 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
2812 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
2813 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
2814 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
2815 /* ------------------------------- */
2816 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
252b5132
RH
2817};
2818
2819static const unsigned char twobyte_has_modrm[256] = {
c608c12e
AM
2820 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2821 /* ------------------------------- */
252b5132 2822 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
b5b1fc4f 2823 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
85f10a01 2824 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
331d2d0d 2825 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
252b5132 2826 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
4bba6815
AM
2827 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
2828 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
85f10a01 2829 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
252b5132
RH
2830 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
2831 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
30d1c836 2832 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
050dfa73 2833 /* b0 */ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* bf */
252b5132 2834 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
ca164297 2835 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
4bba6815 2836 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
ca164297 2837 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* ff */
c608c12e
AM
2838 /* ------------------------------- */
2839 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2840};
2841
252b5132
RH
2842static char obuf[100];
2843static char *obufp;
ea397f5b 2844static char *mnemonicendp;
252b5132
RH
2845static char scratchbuf[100];
2846static unsigned char *start_codep;
2847static unsigned char *insn_codep;
2848static unsigned char *codep;
f16cd0d5
L
2849static int last_lock_prefix;
2850static int last_repz_prefix;
2851static int last_repnz_prefix;
2852static int last_data_prefix;
2853static int last_addr_prefix;
2854static int last_rex_prefix;
2855static int last_seg_prefix;
2856#define MAX_CODE_LENGTH 15
2857/* We can up to 14 prefixes since the maximum instruction length is
2858 15bytes. */
2859static int all_prefixes[MAX_CODE_LENGTH - 1];
252b5132 2860static disassemble_info *the_info;
7967e09e
L
2861static struct
2862 {
2863 int mod;
7967e09e 2864 int reg;
484c222e 2865 int rm;
7967e09e
L
2866 }
2867modrm;
4bba6815 2868static unsigned char need_modrm;
dfc8cf43
L
2869static struct
2870 {
2871 int scale;
2872 int index;
2873 int base;
2874 }
2875sib;
c0f3af97
L
2876static struct
2877 {
2878 int register_specifier;
2879 int length;
2880 int prefix;
2881 int w;
43234a1e
L
2882 int evex;
2883 int r;
2884 int v;
2885 int mask_register_specifier;
2886 int zeroing;
2887 int ll;
2888 int b;
c0f3af97
L
2889 }
2890vex;
2891static unsigned char need_vex;
2892static unsigned char need_vex_reg;
dae39acc 2893static unsigned char vex_w_done;
252b5132 2894
ea397f5b
L
2895struct op
2896 {
2897 const char *name;
2898 unsigned int len;
2899 };
2900
4bba6815
AM
2901/* If we are accessing mod/rm/reg without need_modrm set, then the
2902 values are stale. Hitting this abort likely indicates that you
2903 need to update onebyte_has_modrm or twobyte_has_modrm. */
2904#define MODRM_CHECK if (!need_modrm) abort ()
2905
d708bcba
AM
2906static const char **names64;
2907static const char **names32;
2908static const char **names16;
2909static const char **names8;
2910static const char **names8rex;
2911static const char **names_seg;
db51cc60
L
2912static const char *index64;
2913static const char *index32;
d708bcba 2914static const char **index16;
7e8b059b 2915static const char **names_bnd;
d708bcba
AM
2916
2917static const char *intel_names64[] = {
2918 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
2919 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
2920};
2921static const char *intel_names32[] = {
2922 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
2923 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
2924};
2925static const char *intel_names16[] = {
2926 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
2927 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
2928};
2929static const char *intel_names8[] = {
2930 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
2931};
2932static const char *intel_names8rex[] = {
2933 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
2934 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
2935};
2936static const char *intel_names_seg[] = {
2937 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
2938};
db51cc60
L
2939static const char *intel_index64 = "riz";
2940static const char *intel_index32 = "eiz";
d708bcba
AM
2941static const char *intel_index16[] = {
2942 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
2943};
2944
2945static const char *att_names64[] = {
2946 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
52b15da3
JH
2947 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
2948};
d708bcba
AM
2949static const char *att_names32[] = {
2950 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
52b15da3 2951 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
252b5132 2952};
d708bcba
AM
2953static const char *att_names16[] = {
2954 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
52b15da3 2955 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
252b5132 2956};
d708bcba
AM
2957static const char *att_names8[] = {
2958 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
252b5132 2959};
d708bcba
AM
2960static const char *att_names8rex[] = {
2961 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
52b15da3
JH
2962 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
2963};
d708bcba
AM
2964static const char *att_names_seg[] = {
2965 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
252b5132 2966};
db51cc60
L
2967static const char *att_index64 = "%riz";
2968static const char *att_index32 = "%eiz";
d708bcba
AM
2969static const char *att_index16[] = {
2970 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
252b5132
RH
2971};
2972
b9733481
L
2973static const char **names_mm;
2974static const char *intel_names_mm[] = {
2975 "mm0", "mm1", "mm2", "mm3",
2976 "mm4", "mm5", "mm6", "mm7"
2977};
2978static const char *att_names_mm[] = {
2979 "%mm0", "%mm1", "%mm2", "%mm3",
2980 "%mm4", "%mm5", "%mm6", "%mm7"
2981};
2982
7e8b059b
L
2983static const char *intel_names_bnd[] = {
2984 "bnd0", "bnd1", "bnd2", "bnd3"
2985};
2986
2987static const char *att_names_bnd[] = {
2988 "%bnd0", "%bnd1", "%bnd2", "%bnd3"
2989};
2990
b9733481
L
2991static const char **names_xmm;
2992static const char *intel_names_xmm[] = {
2993 "xmm0", "xmm1", "xmm2", "xmm3",
2994 "xmm4", "xmm5", "xmm6", "xmm7",
2995 "xmm8", "xmm9", "xmm10", "xmm11",
43234a1e
L
2996 "xmm12", "xmm13", "xmm14", "xmm15",
2997 "xmm16", "xmm17", "xmm18", "xmm19",
2998 "xmm20", "xmm21", "xmm22", "xmm23",
2999 "xmm24", "xmm25", "xmm26", "xmm27",
3000 "xmm28", "xmm29", "xmm30", "xmm31"
b9733481
L
3001};
3002static const char *att_names_xmm[] = {
3003 "%xmm0", "%xmm1", "%xmm2", "%xmm3",
3004 "%xmm4", "%xmm5", "%xmm6", "%xmm7",
3005 "%xmm8", "%xmm9", "%xmm10", "%xmm11",
43234a1e
L
3006 "%xmm12", "%xmm13", "%xmm14", "%xmm15",
3007 "%xmm16", "%xmm17", "%xmm18", "%xmm19",
3008 "%xmm20", "%xmm21", "%xmm22", "%xmm23",
3009 "%xmm24", "%xmm25", "%xmm26", "%xmm27",
3010 "%xmm28", "%xmm29", "%xmm30", "%xmm31"
b9733481
L
3011};
3012
3013static const char **names_ymm;
3014static const char *intel_names_ymm[] = {
3015 "ymm0", "ymm1", "ymm2", "ymm3",
3016 "ymm4", "ymm5", "ymm6", "ymm7",
3017 "ymm8", "ymm9", "ymm10", "ymm11",
43234a1e
L
3018 "ymm12", "ymm13", "ymm14", "ymm15",
3019 "ymm16", "ymm17", "ymm18", "ymm19",
3020 "ymm20", "ymm21", "ymm22", "ymm23",
3021 "ymm24", "ymm25", "ymm26", "ymm27",
3022 "ymm28", "ymm29", "ymm30", "ymm31"
b9733481
L
3023};
3024static const char *att_names_ymm[] = {
3025 "%ymm0", "%ymm1", "%ymm2", "%ymm3",
3026 "%ymm4", "%ymm5", "%ymm6", "%ymm7",
3027 "%ymm8", "%ymm9", "%ymm10", "%ymm11",
43234a1e
L
3028 "%ymm12", "%ymm13", "%ymm14", "%ymm15",
3029 "%ymm16", "%ymm17", "%ymm18", "%ymm19",
3030 "%ymm20", "%ymm21", "%ymm22", "%ymm23",
3031 "%ymm24", "%ymm25", "%ymm26", "%ymm27",
3032 "%ymm28", "%ymm29", "%ymm30", "%ymm31"
3033};
3034
3035static const char **names_zmm;
3036static const char *intel_names_zmm[] = {
3037 "zmm0", "zmm1", "zmm2", "zmm3",
3038 "zmm4", "zmm5", "zmm6", "zmm7",
3039 "zmm8", "zmm9", "zmm10", "zmm11",
3040 "zmm12", "zmm13", "zmm14", "zmm15",
3041 "zmm16", "zmm17", "zmm18", "zmm19",
3042 "zmm20", "zmm21", "zmm22", "zmm23",
3043 "zmm24", "zmm25", "zmm26", "zmm27",
3044 "zmm28", "zmm29", "zmm30", "zmm31"
3045};
3046static const char *att_names_zmm[] = {
3047 "%zmm0", "%zmm1", "%zmm2", "%zmm3",
3048 "%zmm4", "%zmm5", "%zmm6", "%zmm7",
3049 "%zmm8", "%zmm9", "%zmm10", "%zmm11",
3050 "%zmm12", "%zmm13", "%zmm14", "%zmm15",
3051 "%zmm16", "%zmm17", "%zmm18", "%zmm19",
3052 "%zmm20", "%zmm21", "%zmm22", "%zmm23",
3053 "%zmm24", "%zmm25", "%zmm26", "%zmm27",
3054 "%zmm28", "%zmm29", "%zmm30", "%zmm31"
3055};
3056
3057static const char **names_mask;
3058static const char *intel_names_mask[] = {
3059 "k0", "k1", "k2", "k3", "k4", "k5", "k6", "k7"
3060};
3061static const char *att_names_mask[] = {
3062 "%k0", "%k1", "%k2", "%k3", "%k4", "%k5", "%k6", "%k7"
3063};
3064
3065static const char *names_rounding[] =
3066{
3067 "{rn-sae}",
3068 "{rd-sae}",
3069 "{ru-sae}",
3070 "{rz-sae}"
b9733481
L
3071};
3072
1ceb70f8
L
3073static const struct dis386 reg_table[][8] = {
3074 /* REG_80 */
252b5132 3075 {
42164a71
L
3076 { "addA", { Ebh1, Ib } },
3077 { "orA", { Ebh1, Ib } },
3078 { "adcA", { Ebh1, Ib } },
3079 { "sbbA", { Ebh1, Ib } },
3080 { "andA", { Ebh1, Ib } },
3081 { "subA", { Ebh1, Ib } },
3082 { "xorA", { Ebh1, Ib } },
ce518a5f 3083 { "cmpA", { Eb, Ib } },
252b5132 3084 },
1ceb70f8 3085 /* REG_81 */
252b5132 3086 {
42164a71
L
3087 { "addQ", { Evh1, Iv } },
3088 { "orQ", { Evh1, Iv } },
3089 { "adcQ", { Evh1, Iv } },
3090 { "sbbQ", { Evh1, Iv } },
3091 { "andQ", { Evh1, Iv } },
3092 { "subQ", { Evh1, Iv } },
3093 { "xorQ", { Evh1, Iv } },
ce518a5f 3094 { "cmpQ", { Ev, Iv } },
252b5132 3095 },
1ceb70f8 3096 /* REG_82 */
252b5132 3097 {
42164a71
L
3098 { "addQ", { Evh1, sIb } },
3099 { "orQ", { Evh1, sIb } },
3100 { "adcQ", { Evh1, sIb } },
3101 { "sbbQ", { Evh1, sIb } },
3102 { "andQ", { Evh1, sIb } },
3103 { "subQ", { Evh1, sIb } },
3104 { "xorQ", { Evh1, sIb } },
ce518a5f 3105 { "cmpQ", { Ev, sIb } },
252b5132 3106 },
1ceb70f8 3107 /* REG_8F */
4e7d34a6
L
3108 {
3109 { "popU", { stackEv } },
c48244a5 3110 { XOP_8F_TABLE (XOP_09) },
592d1631
L
3111 { Bad_Opcode },
3112 { Bad_Opcode },
3113 { Bad_Opcode },
f88c9eb0 3114 { XOP_8F_TABLE (XOP_09) },
4e7d34a6 3115 },
1ceb70f8 3116 /* REG_C0 */
252b5132 3117 {
ce518a5f
L
3118 { "rolA", { Eb, Ib } },
3119 { "rorA", { Eb, Ib } },
3120 { "rclA", { Eb, Ib } },
3121 { "rcrA", { Eb, Ib } },
3122 { "shlA", { Eb, Ib } },
3123 { "shrA", { Eb, Ib } },
592d1631 3124 { Bad_Opcode },
ce518a5f 3125 { "sarA", { Eb, Ib } },
252b5132 3126 },
1ceb70f8 3127 /* REG_C1 */
252b5132 3128 {
ce518a5f
L
3129 { "rolQ", { Ev, Ib } },
3130 { "rorQ", { Ev, Ib } },
3131 { "rclQ", { Ev, Ib } },
3132 { "rcrQ", { Ev, Ib } },
3133 { "shlQ", { Ev, Ib } },
3134 { "shrQ", { Ev, Ib } },
592d1631 3135 { Bad_Opcode },
ce518a5f 3136 { "sarQ", { Ev, Ib } },
252b5132 3137 },
1ceb70f8 3138 /* REG_C6 */
4e7d34a6 3139 {
42164a71
L
3140 { "movA", { Ebh3, Ib } },
3141 { Bad_Opcode },
3142 { Bad_Opcode },
3143 { Bad_Opcode },
3144 { Bad_Opcode },
3145 { Bad_Opcode },
3146 { Bad_Opcode },
3147 { MOD_TABLE (MOD_C6_REG_7) },
4e7d34a6 3148 },
1ceb70f8 3149 /* REG_C7 */
4e7d34a6 3150 {
42164a71
L
3151 { "movQ", { Evh3, Iv } },
3152 { Bad_Opcode },
3153 { Bad_Opcode },
3154 { Bad_Opcode },
3155 { Bad_Opcode },
3156 { Bad_Opcode },
3157 { Bad_Opcode },
3158 { MOD_TABLE (MOD_C7_REG_7) },
4e7d34a6 3159 },
1ceb70f8 3160 /* REG_D0 */
252b5132 3161 {
ce518a5f
L
3162 { "rolA", { Eb, I1 } },
3163 { "rorA", { Eb, I1 } },
3164 { "rclA", { Eb, I1 } },
3165 { "rcrA", { Eb, I1 } },
3166 { "shlA", { Eb, I1 } },
3167 { "shrA", { Eb, I1 } },
592d1631 3168 { Bad_Opcode },
ce518a5f 3169 { "sarA", { Eb, I1 } },
252b5132 3170 },
1ceb70f8 3171 /* REG_D1 */
252b5132 3172 {
ce518a5f
L
3173 { "rolQ", { Ev, I1 } },
3174 { "rorQ", { Ev, I1 } },
3175 { "rclQ", { Ev, I1 } },
3176 { "rcrQ", { Ev, I1 } },
3177 { "shlQ", { Ev, I1 } },
3178 { "shrQ", { Ev, I1 } },
592d1631 3179 { Bad_Opcode },
ce518a5f 3180 { "sarQ", { Ev, I1 } },
252b5132 3181 },
1ceb70f8 3182 /* REG_D2 */
252b5132 3183 {
ce518a5f
L
3184 { "rolA", { Eb, CL } },
3185 { "rorA", { Eb, CL } },
3186 { "rclA", { Eb, CL } },
3187 { "rcrA", { Eb, CL } },
3188 { "shlA", { Eb, CL } },
3189 { "shrA", { Eb, CL } },
592d1631 3190 { Bad_Opcode },
ce518a5f 3191 { "sarA", { Eb, CL } },
252b5132 3192 },
1ceb70f8 3193 /* REG_D3 */
252b5132 3194 {
ce518a5f
L
3195 { "rolQ", { Ev, CL } },
3196 { "rorQ", { Ev, CL } },
3197 { "rclQ", { Ev, CL } },
3198 { "rcrQ", { Ev, CL } },
3199 { "shlQ", { Ev, CL } },
3200 { "shrQ", { Ev, CL } },
592d1631 3201 { Bad_Opcode },
ce518a5f 3202 { "sarQ", { Ev, CL } },
252b5132 3203 },
1ceb70f8 3204 /* REG_F6 */
252b5132 3205 {
ce518a5f 3206 { "testA", { Eb, Ib } },
592d1631 3207 { Bad_Opcode },
42164a71
L
3208 { "notA", { Ebh1 } },
3209 { "negA", { Ebh1 } },
ce518a5f
L
3210 { "mulA", { Eb } }, /* Don't print the implicit %al register, */
3211 { "imulA", { Eb } }, /* to distinguish these opcodes from other */
3212 { "divA", { Eb } }, /* mul/imul opcodes. Do the same for div */
3213 { "idivA", { Eb } }, /* and idiv for consistency. */
252b5132 3214 },
1ceb70f8 3215 /* REG_F7 */
252b5132 3216 {
ce518a5f 3217 { "testQ", { Ev, Iv } },
592d1631 3218 { Bad_Opcode },
42164a71
L
3219 { "notQ", { Evh1 } },
3220 { "negQ", { Evh1 } },
ce518a5f
L
3221 { "mulQ", { Ev } }, /* Don't print the implicit register. */
3222 { "imulQ", { Ev } },
3223 { "divQ", { Ev } },
3224 { "idivQ", { Ev } },
252b5132 3225 },
1ceb70f8 3226 /* REG_FE */
252b5132 3227 {
42164a71
L
3228 { "incA", { Ebh1 } },
3229 { "decA", { Ebh1 } },
252b5132 3230 },
1ceb70f8 3231 /* REG_FF */
252b5132 3232 {
42164a71
L
3233 { "incQ", { Evh1 } },
3234 { "decQ", { Evh1 } },
7e8b059b 3235 { "call{T|}", { indirEv, BND } },
4a357820 3236 { MOD_TABLE (MOD_FF_REG_3) },
7e8b059b 3237 { "jmp{T|}", { indirEv, BND } },
4a357820 3238 { MOD_TABLE (MOD_FF_REG_5) },
ce518a5f 3239 { "pushU", { stackEv } },
592d1631 3240 { Bad_Opcode },
252b5132 3241 },
1ceb70f8 3242 /* REG_0F00 */
252b5132 3243 {
ce518a5f
L
3244 { "sldtD", { Sv } },
3245 { "strD", { Sv } },
3246 { "lldt", { Ew } },
3247 { "ltr", { Ew } },
3248 { "verr", { Ew } },
3249 { "verw", { Ew } },
592d1631
L
3250 { Bad_Opcode },
3251 { Bad_Opcode },
252b5132 3252 },
1ceb70f8 3253 /* REG_0F01 */
252b5132 3254 {
1ceb70f8
L
3255 { MOD_TABLE (MOD_0F01_REG_0) },
3256 { MOD_TABLE (MOD_0F01_REG_1) },
3257 { MOD_TABLE (MOD_0F01_REG_2) },
3258 { MOD_TABLE (MOD_0F01_REG_3) },
ce518a5f 3259 { "smswD", { Sv } },
592d1631 3260 { Bad_Opcode },
ce518a5f 3261 { "lmsw", { Ew } },
1ceb70f8 3262 { MOD_TABLE (MOD_0F01_REG_7) },
252b5132 3263 },
b5b1fc4f 3264 /* REG_0F0D */
252b5132 3265 {
1ab03f4b
L
3266 { "prefetch", { Mb } },
3267 { "prefetchw", { Mb } },
43234a1e 3268 { "prefetchwt1", { Mb } },
d7189fa5
RM
3269 { "prefetch", { Mb } },
3270 { "prefetch", { Mb } },
3271 { "prefetch", { Mb } },
3272 { "prefetch", { Mb } },
3273 { "prefetch", { Mb } },
252b5132 3274 },
1ceb70f8 3275 /* REG_0F18 */
252b5132 3276 {
1ceb70f8
L
3277 { MOD_TABLE (MOD_0F18_REG_0) },
3278 { MOD_TABLE (MOD_0F18_REG_1) },
3279 { MOD_TABLE (MOD_0F18_REG_2) },
3280 { MOD_TABLE (MOD_0F18_REG_3) },
d7189fa5
RM
3281 { MOD_TABLE (MOD_0F18_REG_4) },
3282 { MOD_TABLE (MOD_0F18_REG_5) },
3283 { MOD_TABLE (MOD_0F18_REG_6) },
3284 { MOD_TABLE (MOD_0F18_REG_7) },
252b5132 3285 },
1ceb70f8 3286 /* REG_0F71 */
a6bd098c 3287 {
592d1631
L
3288 { Bad_Opcode },
3289 { Bad_Opcode },
1ceb70f8 3290 { MOD_TABLE (MOD_0F71_REG_2) },
592d1631 3291 { Bad_Opcode },
1ceb70f8 3292 { MOD_TABLE (MOD_0F71_REG_4) },
592d1631 3293 { Bad_Opcode },
1ceb70f8 3294 { MOD_TABLE (MOD_0F71_REG_6) },
a6bd098c 3295 },
1ceb70f8 3296 /* REG_0F72 */
a6bd098c 3297 {
592d1631
L
3298 { Bad_Opcode },
3299 { Bad_Opcode },
1ceb70f8 3300 { MOD_TABLE (MOD_0F72_REG_2) },
592d1631 3301 { Bad_Opcode },
1ceb70f8 3302 { MOD_TABLE (MOD_0F72_REG_4) },
592d1631 3303 { Bad_Opcode },
1ceb70f8 3304 { MOD_TABLE (MOD_0F72_REG_6) },
a6bd098c 3305 },
1ceb70f8 3306 /* REG_0F73 */
252b5132 3307 {
592d1631
L
3308 { Bad_Opcode },
3309 { Bad_Opcode },
1ceb70f8
L
3310 { MOD_TABLE (MOD_0F73_REG_2) },
3311 { MOD_TABLE (MOD_0F73_REG_3) },
592d1631
L
3312 { Bad_Opcode },
3313 { Bad_Opcode },
1ceb70f8
L
3314 { MOD_TABLE (MOD_0F73_REG_6) },
3315 { MOD_TABLE (MOD_0F73_REG_7) },
252b5132 3316 },
1ceb70f8 3317 /* REG_0FA6 */
252b5132 3318 {
4e7d34a6
L
3319 { "montmul", { { OP_0f07, 0 } } },
3320 { "xsha1", { { OP_0f07, 0 } } },
3321 { "xsha256", { { OP_0f07, 0 } } },
4e7d34a6 3322 },
1ceb70f8 3323 /* REG_0FA7 */
4e7d34a6
L
3324 {
3325 { "xstore-rng", { { OP_0f07, 0 } } },
3326 { "xcrypt-ecb", { { OP_0f07, 0 } } },
3327 { "xcrypt-cbc", { { OP_0f07, 0 } } },
3328 { "xcrypt-ctr", { { OP_0f07, 0 } } },
3329 { "xcrypt-cfb", { { OP_0f07, 0 } } },
3330 { "xcrypt-ofb", { { OP_0f07, 0 } } },
4e7d34a6 3331 },
1ceb70f8 3332 /* REG_0FAE */
4e7d34a6 3333 {
1ceb70f8
L
3334 { MOD_TABLE (MOD_0FAE_REG_0) },
3335 { MOD_TABLE (MOD_0FAE_REG_1) },
3336 { MOD_TABLE (MOD_0FAE_REG_2) },
3337 { MOD_TABLE (MOD_0FAE_REG_3) },
475a2301 3338 { MOD_TABLE (MOD_0FAE_REG_4) },
1ceb70f8
L
3339 { MOD_TABLE (MOD_0FAE_REG_5) },
3340 { MOD_TABLE (MOD_0FAE_REG_6) },
3341 { MOD_TABLE (MOD_0FAE_REG_7) },
252b5132 3342 },
1ceb70f8 3343 /* REG_0FBA */
252b5132 3344 {
592d1631
L
3345 { Bad_Opcode },
3346 { Bad_Opcode },
3347 { Bad_Opcode },
3348 { Bad_Opcode },
4e7d34a6 3349 { "btQ", { Ev, Ib } },
42164a71
L
3350 { "btsQ", { Evh1, Ib } },
3351 { "btrQ", { Evh1, Ib } },
3352 { "btcQ", { Evh1, Ib } },
c608c12e 3353 },
1ceb70f8 3354 /* REG_0FC7 */
c608c12e 3355 {
592d1631 3356 { Bad_Opcode },
4e7d34a6 3357 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } } },
592d1631 3358 { Bad_Opcode },
963f3586
IT
3359 { MOD_TABLE (MOD_0FC7_REG_3) },
3360 { MOD_TABLE (MOD_0FC7_REG_4) },
3361 { MOD_TABLE (MOD_0FC7_REG_5) },
1ceb70f8
L
3362 { MOD_TABLE (MOD_0FC7_REG_6) },
3363 { MOD_TABLE (MOD_0FC7_REG_7) },
252b5132 3364 },
592a252b 3365 /* REG_VEX_0F71 */
c0f3af97 3366 {
592d1631
L
3367 { Bad_Opcode },
3368 { Bad_Opcode },
592a252b 3369 { MOD_TABLE (MOD_VEX_0F71_REG_2) },
592d1631 3370 { Bad_Opcode },
592a252b 3371 { MOD_TABLE (MOD_VEX_0F71_REG_4) },
592d1631 3372 { Bad_Opcode },
592a252b 3373 { MOD_TABLE (MOD_VEX_0F71_REG_6) },
c0f3af97 3374 },
592a252b 3375 /* REG_VEX_0F72 */
c0f3af97 3376 {
592d1631
L
3377 { Bad_Opcode },
3378 { Bad_Opcode },
592a252b 3379 { MOD_TABLE (MOD_VEX_0F72_REG_2) },
592d1631 3380 { Bad_Opcode },
592a252b 3381 { MOD_TABLE (MOD_VEX_0F72_REG_4) },
592d1631 3382 { Bad_Opcode },
592a252b 3383 { MOD_TABLE (MOD_VEX_0F72_REG_6) },
c0f3af97 3384 },
592a252b 3385 /* REG_VEX_0F73 */
c0f3af97 3386 {
592d1631
L
3387 { Bad_Opcode },
3388 { Bad_Opcode },
592a252b
L
3389 { MOD_TABLE (MOD_VEX_0F73_REG_2) },
3390 { MOD_TABLE (MOD_VEX_0F73_REG_3) },
592d1631
L
3391 { Bad_Opcode },
3392 { Bad_Opcode },
592a252b
L
3393 { MOD_TABLE (MOD_VEX_0F73_REG_6) },
3394 { MOD_TABLE (MOD_VEX_0F73_REG_7) },
c0f3af97 3395 },
592a252b 3396 /* REG_VEX_0FAE */
c0f3af97 3397 {
592d1631
L
3398 { Bad_Opcode },
3399 { Bad_Opcode },
592a252b
L
3400 { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
3401 { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
c0f3af97 3402 },
f12dc422
L
3403 /* REG_VEX_0F38F3 */
3404 {
3405 { Bad_Opcode },
3406 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
3407 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
3408 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
3409 },
f88c9eb0
SP
3410 /* REG_XOP_LWPCB */
3411 {
3412 { "llwpcb", { { OP_LWPCB_E, 0 } } },
3413 { "slwpcb", { { OP_LWPCB_E, 0 } } },
f88c9eb0
SP
3414 },
3415 /* REG_XOP_LWP */
3416 {
ce7d077e
SP
3417 { "lwpins", { { OP_LWP_E, 0 }, Ed, Iq } },
3418 { "lwpval", { { OP_LWP_E, 0 }, Ed, Iq } },
f88c9eb0 3419 },
2a2a0f38
QN
3420 /* REG_XOP_TBM_01 */
3421 {
3422 { Bad_Opcode },
3423 { "blcfill", { { OP_LWP_E, 0 }, Ev } },
3424 { "blsfill", { { OP_LWP_E, 0 }, Ev } },
3425 { "blcs", { { OP_LWP_E, 0 }, Ev } },
3426 { "tzmsk", { { OP_LWP_E, 0 }, Ev } },
3427 { "blcic", { { OP_LWP_E, 0 }, Ev } },
3428 { "blsic", { { OP_LWP_E, 0 }, Ev } },
3429 { "t1mskc", { { OP_LWP_E, 0 }, Ev } },
3430 },
3431 /* REG_XOP_TBM_02 */
3432 {
3433 { Bad_Opcode },
3434 { "blcmsk", { { OP_LWP_E, 0 }, Ev } },
3435 { Bad_Opcode },
3436 { Bad_Opcode },
3437 { Bad_Opcode },
3438 { Bad_Opcode },
3439 { "blci", { { OP_LWP_E, 0 }, Ev } },
3440 },
43234a1e
L
3441#define NEED_REG_TABLE
3442#include "i386-dis-evex.h"
3443#undef NEED_REG_TABLE
4e7d34a6
L
3444};
3445
1ceb70f8
L
3446static const struct dis386 prefix_table[][4] = {
3447 /* PREFIX_90 */
252b5132 3448 {
4e7d34a6
L
3449 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
3450 { "pause", { XX } },
3451 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
0f10071e 3452 },
4e7d34a6 3453
1ceb70f8 3454 /* PREFIX_0F10 */
cc0ec051 3455 {
4e7d34a6
L
3456 { "movups", { XM, EXx } },
3457 { "movss", { XM, EXd } },
3458 { "movupd", { XM, EXx } },
3459 { "movsd", { XM, EXq } },
30d1c836 3460 },
4e7d34a6 3461
1ceb70f8 3462 /* PREFIX_0F11 */
30d1c836 3463 {
b6169b20 3464 { "movups", { EXxS, XM } },
fa99fab2 3465 { "movss", { EXdS, XM } },
b6169b20 3466 { "movupd", { EXxS, XM } },
fa99fab2 3467 { "movsd", { EXqS, XM } },
4e7d34a6 3468 },
252b5132 3469
1ceb70f8 3470 /* PREFIX_0F12 */
c608c12e 3471 {
1ceb70f8 3472 { MOD_TABLE (MOD_0F12_PREFIX_0) },
4e7d34a6
L
3473 { "movsldup", { XM, EXx } },
3474 { "movlpd", { XM, EXq } },
3475 { "movddup", { XM, EXq } },
c608c12e 3476 },
4e7d34a6 3477
1ceb70f8 3478 /* PREFIX_0F16 */
c608c12e 3479 {
1ceb70f8 3480 { MOD_TABLE (MOD_0F16_PREFIX_0) },
4e7d34a6
L
3481 { "movshdup", { XM, EXx } },
3482 { "movhpd", { XM, EXq } },
c608c12e 3483 },
4e7d34a6 3484
7e8b059b
L
3485 /* PREFIX_0F1A */
3486 {
3487 { MOD_TABLE (MOD_0F1A_PREFIX_0) },
3488 { "bndcl", { Gbnd, Ev_bnd } },
3489 { "bndmov", { Gbnd, Ebnd } },
3490 { "bndcu", { Gbnd, Ev_bnd } },
3491 },
3492
3493 /* PREFIX_0F1B */
3494 {
3495 { MOD_TABLE (MOD_0F1B_PREFIX_0) },
3496 { MOD_TABLE (MOD_0F1B_PREFIX_1) },
3497 { "bndmov", { Ebnd, Gbnd } },
3498 { "bndcn", { Gbnd, Ev_bnd } },
3499 },
3500
1ceb70f8 3501 /* PREFIX_0F2A */
c608c12e 3502 {
09335d05 3503 { "cvtpi2ps", { XM, EMCq } },
98b528ac 3504 { "cvtsi2ss%LQ", { XM, Ev } },
09335d05 3505 { "cvtpi2pd", { XM, EMCq } },
98b528ac 3506 { "cvtsi2sd%LQ", { XM, Ev } },
c608c12e 3507 },
4e7d34a6 3508
1ceb70f8 3509 /* PREFIX_0F2B */
c608c12e 3510 {
75c135a8
L
3511 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
3512 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
3513 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
3514 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
c608c12e 3515 },
4e7d34a6 3516
1ceb70f8 3517 /* PREFIX_0F2C */
c608c12e 3518 {
09335d05
L
3519 { "cvttps2pi", { MXC, EXq } },
3520 { "cvttss2siY", { Gv, EXd } },
09a2c6cf 3521 { "cvttpd2pi", { MXC, EXx } },
09335d05 3522 { "cvttsd2siY", { Gv, EXq } },
c608c12e 3523 },
4e7d34a6 3524
1ceb70f8 3525 /* PREFIX_0F2D */
c608c12e 3526 {
4e7d34a6
L
3527 { "cvtps2pi", { MXC, EXq } },
3528 { "cvtss2siY", { Gv, EXd } },
3529 { "cvtpd2pi", { MXC, EXx } },
3530 { "cvtsd2siY", { Gv, EXq } },
c608c12e 3531 },
4e7d34a6 3532
1ceb70f8 3533 /* PREFIX_0F2E */
c608c12e 3534 {
7bb15c6f 3535 { "ucomiss",{ XM, EXd } },
592d1631 3536 { Bad_Opcode },
7bb15c6f 3537 { "ucomisd",{ XM, EXq } },
c608c12e 3538 },
4e7d34a6 3539
1ceb70f8 3540 /* PREFIX_0F2F */
c608c12e 3541 {
4e7d34a6 3542 { "comiss", { XM, EXd } },
592d1631 3543 { Bad_Opcode },
4e7d34a6 3544 { "comisd", { XM, EXq } },
c608c12e 3545 },
4e7d34a6 3546
1ceb70f8 3547 /* PREFIX_0F51 */
c608c12e 3548 {
4e7d34a6
L
3549 { "sqrtps", { XM, EXx } },
3550 { "sqrtss", { XM, EXd } },
3551 { "sqrtpd", { XM, EXx } },
3552 { "sqrtsd", { XM, EXq } },
c608c12e 3553 },
4e7d34a6 3554
1ceb70f8 3555 /* PREFIX_0F52 */
c608c12e 3556 {
4e7d34a6
L
3557 { "rsqrtps",{ XM, EXx } },
3558 { "rsqrtss",{ XM, EXd } },
c608c12e 3559 },
4e7d34a6 3560
1ceb70f8 3561 /* PREFIX_0F53 */
c608c12e 3562 {
4e7d34a6
L
3563 { "rcpps", { XM, EXx } },
3564 { "rcpss", { XM, EXd } },
c608c12e 3565 },
4e7d34a6 3566
1ceb70f8 3567 /* PREFIX_0F58 */
c608c12e 3568 {
4e7d34a6
L
3569 { "addps", { XM, EXx } },
3570 { "addss", { XM, EXd } },
3571 { "addpd", { XM, EXx } },
3572 { "addsd", { XM, EXq } },
c608c12e 3573 },
4e7d34a6 3574
1ceb70f8 3575 /* PREFIX_0F59 */
c608c12e 3576 {
4e7d34a6
L
3577 { "mulps", { XM, EXx } },
3578 { "mulss", { XM, EXd } },
3579 { "mulpd", { XM, EXx } },
3580 { "mulsd", { XM, EXq } },
041bd2e0 3581 },
4e7d34a6 3582
1ceb70f8 3583 /* PREFIX_0F5A */
041bd2e0 3584 {
4e7d34a6
L
3585 { "cvtps2pd", { XM, EXq } },
3586 { "cvtss2sd", { XM, EXd } },
3587 { "cvtpd2ps", { XM, EXx } },
3588 { "cvtsd2ss", { XM, EXq } },
041bd2e0 3589 },
4e7d34a6 3590
1ceb70f8 3591 /* PREFIX_0F5B */
041bd2e0 3592 {
09a2c6cf
L
3593 { "cvtdq2ps", { XM, EXx } },
3594 { "cvttps2dq", { XM, EXx } },
3595 { "cvtps2dq", { XM, EXx } },
041bd2e0 3596 },
4e7d34a6 3597
1ceb70f8 3598 /* PREFIX_0F5C */
041bd2e0 3599 {
4e7d34a6
L
3600 { "subps", { XM, EXx } },
3601 { "subss", { XM, EXd } },
3602 { "subpd", { XM, EXx } },
3603 { "subsd", { XM, EXq } },
041bd2e0 3604 },
4e7d34a6 3605
1ceb70f8 3606 /* PREFIX_0F5D */
041bd2e0 3607 {
4e7d34a6
L
3608 { "minps", { XM, EXx } },
3609 { "minss", { XM, EXd } },
3610 { "minpd", { XM, EXx } },
3611 { "minsd", { XM, EXq } },
041bd2e0 3612 },
4e7d34a6 3613
1ceb70f8 3614 /* PREFIX_0F5E */
041bd2e0 3615 {
4e7d34a6
L
3616 { "divps", { XM, EXx } },
3617 { "divss", { XM, EXd } },
3618 { "divpd", { XM, EXx } },
3619 { "divsd", { XM, EXq } },
041bd2e0 3620 },
4e7d34a6 3621
1ceb70f8 3622 /* PREFIX_0F5F */
041bd2e0 3623 {
4e7d34a6
L
3624 { "maxps", { XM, EXx } },
3625 { "maxss", { XM, EXd } },
3626 { "maxpd", { XM, EXx } },
3627 { "maxsd", { XM, EXq } },
041bd2e0 3628 },
4e7d34a6 3629
1ceb70f8 3630 /* PREFIX_0F60 */
041bd2e0 3631 {
4e7d34a6 3632 { "punpcklbw",{ MX, EMd } },
592d1631 3633 { Bad_Opcode },
4e7d34a6 3634 { "punpcklbw",{ MX, EMx } },
041bd2e0 3635 },
4e7d34a6 3636
1ceb70f8 3637 /* PREFIX_0F61 */
041bd2e0 3638 {
4e7d34a6 3639 { "punpcklwd",{ MX, EMd } },
592d1631 3640 { Bad_Opcode },
4e7d34a6 3641 { "punpcklwd",{ MX, EMx } },
041bd2e0 3642 },
4e7d34a6 3643
1ceb70f8 3644 /* PREFIX_0F62 */
041bd2e0 3645 {
4e7d34a6 3646 { "punpckldq",{ MX, EMd } },
592d1631 3647 { Bad_Opcode },
4e7d34a6 3648 { "punpckldq",{ MX, EMx } },
041bd2e0 3649 },
4e7d34a6 3650
1ceb70f8 3651 /* PREFIX_0F6C */
041bd2e0 3652 {
592d1631
L
3653 { Bad_Opcode },
3654 { Bad_Opcode },
4e7d34a6 3655 { "punpcklqdq", { XM, EXx } },
0f17484f 3656 },
4e7d34a6 3657
1ceb70f8 3658 /* PREFIX_0F6D */
0f17484f 3659 {
592d1631
L
3660 { Bad_Opcode },
3661 { Bad_Opcode },
4e7d34a6 3662 { "punpckhqdq", { XM, EXx } },
041bd2e0 3663 },
4e7d34a6 3664
1ceb70f8 3665 /* PREFIX_0F6F */
ca164297 3666 {
4e7d34a6
L
3667 { "movq", { MX, EM } },
3668 { "movdqu", { XM, EXx } },
3669 { "movdqa", { XM, EXx } },
ca164297 3670 },
4e7d34a6 3671
1ceb70f8 3672 /* PREFIX_0F70 */
4e7d34a6
L
3673 {
3674 { "pshufw", { MX, EM, Ib } },
3675 { "pshufhw",{ XM, EXx, Ib } },
3676 { "pshufd", { XM, EXx, Ib } },
3677 { "pshuflw",{ XM, EXx, Ib } },
3678 },
3679
92fddf8e
L
3680 /* PREFIX_0F73_REG_3 */
3681 {
592d1631
L
3682 { Bad_Opcode },
3683 { Bad_Opcode },
92fddf8e 3684 { "psrldq", { XS, Ib } },
92fddf8e
L
3685 },
3686
3687 /* PREFIX_0F73_REG_7 */
3688 {
592d1631
L
3689 { Bad_Opcode },
3690 { Bad_Opcode },
92fddf8e 3691 { "pslldq", { XS, Ib } },
92fddf8e
L
3692 },
3693
1ceb70f8 3694 /* PREFIX_0F78 */
4e7d34a6
L
3695 {
3696 {"vmread", { Em, Gm } },
592d1631 3697 { Bad_Opcode },
4e7d34a6
L
3698 {"extrq", { XS, Ib, Ib } },
3699 {"insertq", { XM, XS, Ib, Ib } },
3700 },
3701
1ceb70f8 3702 /* PREFIX_0F79 */
4e7d34a6
L
3703 {
3704 {"vmwrite", { Gm, Em } },
592d1631 3705 { Bad_Opcode },
4e7d34a6
L
3706 {"extrq", { XM, XS } },
3707 {"insertq", { XM, XS } },
3708 },
3709
1ceb70f8 3710 /* PREFIX_0F7C */
ca164297 3711 {
592d1631
L
3712 { Bad_Opcode },
3713 { Bad_Opcode },
09a2c6cf
L
3714 { "haddpd", { XM, EXx } },
3715 { "haddps", { XM, EXx } },
ca164297 3716 },
4e7d34a6 3717
1ceb70f8 3718 /* PREFIX_0F7D */
ca164297 3719 {
592d1631
L
3720 { Bad_Opcode },
3721 { Bad_Opcode },
09a2c6cf
L
3722 { "hsubpd", { XM, EXx } },
3723 { "hsubps", { XM, EXx } },
ca164297 3724 },
4e7d34a6 3725
1ceb70f8 3726 /* PREFIX_0F7E */
ca164297 3727 {
4e7d34a6
L
3728 { "movK", { Edq, MX } },
3729 { "movq", { XM, EXq } },
3730 { "movK", { Edq, XM } },
ca164297 3731 },
4e7d34a6 3732
1ceb70f8 3733 /* PREFIX_0F7F */
ca164297 3734 {
b6169b20
L
3735 { "movq", { EMS, MX } },
3736 { "movdqu", { EXxS, XM } },
3737 { "movdqa", { EXxS, XM } },
ca164297 3738 },
4e7d34a6 3739
c7b8aa3a
L
3740 /* PREFIX_0FAE_REG_0 */
3741 {
3742 { Bad_Opcode },
3743 { "rdfsbase", { Ev } },
3744 },
3745
3746 /* PREFIX_0FAE_REG_1 */
3747 {
3748 { Bad_Opcode },
3749 { "rdgsbase", { Ev } },
3750 },
3751
3752 /* PREFIX_0FAE_REG_2 */
3753 {
3754 { Bad_Opcode },
3755 { "wrfsbase", { Ev } },
3756 },
3757
3758 /* PREFIX_0FAE_REG_3 */
3759 {
3760 { Bad_Opcode },
3761 { "wrgsbase", { Ev } },
3762 },
3763
963f3586
IT
3764 /* PREFIX_0FAE_REG_7 */
3765 {
3766 { "clflush", { Mb } },
3767 { Bad_Opcode },
3768 { "clflushopt", { Mb } },
3769 },
3770
1ceb70f8 3771 /* PREFIX_0FB8 */
ca164297 3772 {
592d1631 3773 { Bad_Opcode },
4e7d34a6 3774 { "popcntS", { Gv, Ev } },
ca164297 3775 },
4e7d34a6 3776
f12dc422
L
3777 /* PREFIX_0FBC */
3778 {
3779 { "bsfS", { Gv, Ev } },
3780 { "tzcntS", { Gv, Ev } },
3781 { "bsfS", { Gv, Ev } },
3782 },
3783
1ceb70f8 3784 /* PREFIX_0FBD */
050dfa73 3785 {
4e7d34a6
L
3786 { "bsrS", { Gv, Ev } },
3787 { "lzcntS", { Gv, Ev } },
3788 { "bsrS", { Gv, Ev } },
050dfa73
MM
3789 },
3790
1ceb70f8 3791 /* PREFIX_0FC2 */
050dfa73 3792 {
ad19981d
L
3793 { "cmpps", { XM, EXx, CMP } },
3794 { "cmpss", { XM, EXd, CMP } },
3795 { "cmppd", { XM, EXx, CMP } },
3796 { "cmpsd", { XM, EXq, CMP } },
050dfa73 3797 },
246c51aa 3798
4ee52178
L
3799 /* PREFIX_0FC3 */
3800 {
3801 { "movntiS", { Ma, Gv } },
4ee52178
L
3802 },
3803
92fddf8e
L
3804 /* PREFIX_0FC7_REG_6 */
3805 {
3806 { "vmptrld",{ Mq } },
3807 { "vmxon", { Mq } },
3808 { "vmclear",{ Mq } },
92fddf8e
L
3809 },
3810
1ceb70f8 3811 /* PREFIX_0FD0 */
050dfa73 3812 {
592d1631
L
3813 { Bad_Opcode },
3814 { Bad_Opcode },
4e7d34a6
L
3815 { "addsubpd", { XM, EXx } },
3816 { "addsubps", { XM, EXx } },
246c51aa 3817 },
050dfa73 3818
1ceb70f8 3819 /* PREFIX_0FD6 */
050dfa73 3820 {
592d1631 3821 { Bad_Opcode },
4e7d34a6 3822 { "movq2dq",{ XM, MS } },
b6169b20 3823 { "movq", { EXqS, XM } },
4e7d34a6 3824 { "movdq2q",{ MX, XS } },
050dfa73
MM
3825 },
3826
1ceb70f8 3827 /* PREFIX_0FE6 */
7918206c 3828 {
592d1631 3829 { Bad_Opcode },
4e7d34a6
L
3830 { "cvtdq2pd", { XM, EXq } },
3831 { "cvttpd2dq", { XM, EXx } },
3832 { "cvtpd2dq", { XM, EXx } },
7918206c 3833 },
8b38ad71 3834
1ceb70f8 3835 /* PREFIX_0FE7 */
8b38ad71 3836 {
4ee52178 3837 { "movntq", { Mq, MX } },
592d1631 3838 { Bad_Opcode },
75c135a8 3839 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
4e7d34a6
L
3840 },
3841
1ceb70f8 3842 /* PREFIX_0FF0 */
4e7d34a6 3843 {
592d1631
L
3844 { Bad_Opcode },
3845 { Bad_Opcode },
3846 { Bad_Opcode },
1ceb70f8 3847 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4e7d34a6
L
3848 },
3849
1ceb70f8 3850 /* PREFIX_0FF7 */
4e7d34a6
L
3851 {
3852 { "maskmovq", { MX, MS } },
592d1631 3853 { Bad_Opcode },
4e7d34a6 3854 { "maskmovdqu", { XM, XS } },
8b38ad71 3855 },
42903f7f 3856
1ceb70f8 3857 /* PREFIX_0F3810 */
42903f7f 3858 {
592d1631
L
3859 { Bad_Opcode },
3860 { Bad_Opcode },
88a94849 3861 { "pblendvb", { XM, EXx, XMM0 } },
42903f7f
L
3862 },
3863
1ceb70f8 3864 /* PREFIX_0F3814 */
42903f7f 3865 {
592d1631
L
3866 { Bad_Opcode },
3867 { Bad_Opcode },
88a94849 3868 { "blendvps", { XM, EXx, XMM0 } },
42903f7f
L
3869 },
3870
1ceb70f8 3871 /* PREFIX_0F3815 */
42903f7f 3872 {
592d1631
L
3873 { Bad_Opcode },
3874 { Bad_Opcode },
09a2c6cf 3875 { "blendvpd", { XM, EXx, XMM0 } },
42903f7f
L
3876 },
3877
1ceb70f8 3878 /* PREFIX_0F3817 */
42903f7f 3879 {
592d1631
L
3880 { Bad_Opcode },
3881 { Bad_Opcode },
09a2c6cf 3882 { "ptest", { XM, EXx } },
42903f7f
L
3883 },
3884
1ceb70f8 3885 /* PREFIX_0F3820 */
42903f7f 3886 {
592d1631
L
3887 { Bad_Opcode },
3888 { Bad_Opcode },
8976381e 3889 { "pmovsxbw", { XM, EXq } },
42903f7f
L
3890 },
3891
1ceb70f8 3892 /* PREFIX_0F3821 */
42903f7f 3893 {
592d1631
L
3894 { Bad_Opcode },
3895 { Bad_Opcode },
8976381e 3896 { "pmovsxbd", { XM, EXd } },
42903f7f
L
3897 },
3898
1ceb70f8 3899 /* PREFIX_0F3822 */
42903f7f 3900 {
592d1631
L
3901 { Bad_Opcode },
3902 { Bad_Opcode },
8976381e 3903 { "pmovsxbq", { XM, EXw } },
42903f7f
L
3904 },
3905
1ceb70f8 3906 /* PREFIX_0F3823 */
42903f7f 3907 {
592d1631
L
3908 { Bad_Opcode },
3909 { Bad_Opcode },
8976381e 3910 { "pmovsxwd", { XM, EXq } },
42903f7f
L
3911 },
3912
1ceb70f8 3913 /* PREFIX_0F3824 */
42903f7f 3914 {
592d1631
L
3915 { Bad_Opcode },
3916 { Bad_Opcode },
8976381e 3917 { "pmovsxwq", { XM, EXd } },
42903f7f
L
3918 },
3919
1ceb70f8 3920 /* PREFIX_0F3825 */
42903f7f 3921 {
592d1631
L
3922 { Bad_Opcode },
3923 { Bad_Opcode },
8976381e 3924 { "pmovsxdq", { XM, EXq } },
42903f7f
L
3925 },
3926
1ceb70f8 3927 /* PREFIX_0F3828 */
42903f7f 3928 {
592d1631
L
3929 { Bad_Opcode },
3930 { Bad_Opcode },
09a2c6cf 3931 { "pmuldq", { XM, EXx } },
42903f7f
L
3932 },
3933
1ceb70f8 3934 /* PREFIX_0F3829 */
42903f7f 3935 {
592d1631
L
3936 { Bad_Opcode },
3937 { Bad_Opcode },
09a2c6cf 3938 { "pcmpeqq", { XM, EXx } },
42903f7f
L
3939 },
3940
1ceb70f8 3941 /* PREFIX_0F382A */
42903f7f 3942 {
592d1631
L
3943 { Bad_Opcode },
3944 { Bad_Opcode },
75c135a8 3945 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
42903f7f
L
3946 },
3947
1ceb70f8 3948 /* PREFIX_0F382B */
42903f7f 3949 {
592d1631
L
3950 { Bad_Opcode },
3951 { Bad_Opcode },
09a2c6cf 3952 { "packusdw", { XM, EXx } },
42903f7f
L
3953 },
3954
1ceb70f8 3955 /* PREFIX_0F3830 */
42903f7f 3956 {
592d1631
L
3957 { Bad_Opcode },
3958 { Bad_Opcode },
8976381e 3959 { "pmovzxbw", { XM, EXq } },
42903f7f
L
3960 },
3961
1ceb70f8 3962 /* PREFIX_0F3831 */
42903f7f 3963 {
592d1631
L
3964 { Bad_Opcode },
3965 { Bad_Opcode },
8976381e 3966 { "pmovzxbd", { XM, EXd } },
42903f7f
L
3967 },
3968
1ceb70f8 3969 /* PREFIX_0F3832 */
42903f7f 3970 {
592d1631
L
3971 { Bad_Opcode },
3972 { Bad_Opcode },
8976381e 3973 { "pmovzxbq", { XM, EXw } },
42903f7f
L
3974 },
3975
1ceb70f8 3976 /* PREFIX_0F3833 */
42903f7f 3977 {
592d1631
L
3978 { Bad_Opcode },
3979 { Bad_Opcode },
8976381e 3980 { "pmovzxwd", { XM, EXq } },
42903f7f
L
3981 },
3982
1ceb70f8 3983 /* PREFIX_0F3834 */
42903f7f 3984 {
592d1631
L
3985 { Bad_Opcode },
3986 { Bad_Opcode },
8976381e 3987 { "pmovzxwq", { XM, EXd } },
42903f7f
L
3988 },
3989
1ceb70f8 3990 /* PREFIX_0F3835 */
42903f7f 3991 {
592d1631
L
3992 { Bad_Opcode },
3993 { Bad_Opcode },
8976381e 3994 { "pmovzxdq", { XM, EXq } },
42903f7f
L
3995 },
3996
1ceb70f8 3997 /* PREFIX_0F3837 */
4e7d34a6 3998 {
592d1631
L
3999 { Bad_Opcode },
4000 { Bad_Opcode },
4e7d34a6 4001 { "pcmpgtq", { XM, EXx } },
4e7d34a6
L
4002 },
4003
1ceb70f8 4004 /* PREFIX_0F3838 */
42903f7f 4005 {
592d1631
L
4006 { Bad_Opcode },
4007 { Bad_Opcode },
09a2c6cf 4008 { "pminsb", { XM, EXx } },
42903f7f
L
4009 },
4010
1ceb70f8 4011 /* PREFIX_0F3839 */
42903f7f 4012 {
592d1631
L
4013 { Bad_Opcode },
4014 { Bad_Opcode },
09a2c6cf 4015 { "pminsd", { XM, EXx } },
42903f7f
L
4016 },
4017
1ceb70f8 4018 /* PREFIX_0F383A */
42903f7f 4019 {
592d1631
L
4020 { Bad_Opcode },
4021 { Bad_Opcode },
09a2c6cf 4022 { "pminuw", { XM, EXx } },
42903f7f
L
4023 },
4024
1ceb70f8 4025 /* PREFIX_0F383B */
42903f7f 4026 {
592d1631
L
4027 { Bad_Opcode },
4028 { Bad_Opcode },
09a2c6cf 4029 { "pminud", { XM, EXx } },
42903f7f
L
4030 },
4031
1ceb70f8 4032 /* PREFIX_0F383C */
42903f7f 4033 {
592d1631
L
4034 { Bad_Opcode },
4035 { Bad_Opcode },
09a2c6cf 4036 { "pmaxsb", { XM, EXx } },
42903f7f
L
4037 },
4038
1ceb70f8 4039 /* PREFIX_0F383D */
42903f7f 4040 {
592d1631
L
4041 { Bad_Opcode },
4042 { Bad_Opcode },
09a2c6cf 4043 { "pmaxsd", { XM, EXx } },
42903f7f
L
4044 },
4045
1ceb70f8 4046 /* PREFIX_0F383E */
42903f7f 4047 {
592d1631
L
4048 { Bad_Opcode },
4049 { Bad_Opcode },
09a2c6cf 4050 { "pmaxuw", { XM, EXx } },
42903f7f
L
4051 },
4052
1ceb70f8 4053 /* PREFIX_0F383F */
42903f7f 4054 {
592d1631
L
4055 { Bad_Opcode },
4056 { Bad_Opcode },
09a2c6cf 4057 { "pmaxud", { XM, EXx } },
42903f7f
L
4058 },
4059
1ceb70f8 4060 /* PREFIX_0F3840 */
42903f7f 4061 {
592d1631
L
4062 { Bad_Opcode },
4063 { Bad_Opcode },
09a2c6cf 4064 { "pmulld", { XM, EXx } },
42903f7f
L
4065 },
4066
1ceb70f8 4067 /* PREFIX_0F3841 */
42903f7f 4068 {
592d1631
L
4069 { Bad_Opcode },
4070 { Bad_Opcode },
09a2c6cf 4071 { "phminposuw", { XM, EXx } },
42903f7f
L
4072 },
4073
f1f8f695
L
4074 /* PREFIX_0F3880 */
4075 {
592d1631
L
4076 { Bad_Opcode },
4077 { Bad_Opcode },
f1f8f695 4078 { "invept", { Gm, Mo } },
f1f8f695
L
4079 },
4080
4081 /* PREFIX_0F3881 */
4082 {
592d1631
L
4083 { Bad_Opcode },
4084 { Bad_Opcode },
f1f8f695 4085 { "invvpid", { Gm, Mo } },
f1f8f695
L
4086 },
4087
6c30d220
L
4088 /* PREFIX_0F3882 */
4089 {
4090 { Bad_Opcode },
4091 { Bad_Opcode },
4092 { "invpcid", { Gm, M } },
4093 },
4094
a0046408
L
4095 /* PREFIX_0F38C8 */
4096 {
4097 { "sha1nexte", { XM, EXxmm } },
4098 },
4099
4100 /* PREFIX_0F38C9 */
4101 {
4102 { "sha1msg1", { XM, EXxmm } },
4103 },
4104
4105 /* PREFIX_0F38CA */
4106 {
4107 { "sha1msg2", { XM, EXxmm } },
4108 },
4109
4110 /* PREFIX_0F38CB */
4111 {
4112 { "sha256rnds2", { XM, EXxmm, XMM0 } },
4113 },
4114
4115 /* PREFIX_0F38CC */
4116 {
4117 { "sha256msg1", { XM, EXxmm } },
4118 },
4119
4120 /* PREFIX_0F38CD */
4121 {
4122 { "sha256msg2", { XM, EXxmm } },
4123 },
4124
c0f3af97
L
4125 /* PREFIX_0F38DB */
4126 {
592d1631
L
4127 { Bad_Opcode },
4128 { Bad_Opcode },
c0f3af97 4129 { "aesimc", { XM, EXx } },
c0f3af97
L
4130 },
4131
4132 /* PREFIX_0F38DC */
4133 {
592d1631
L
4134 { Bad_Opcode },
4135 { Bad_Opcode },
c0f3af97 4136 { "aesenc", { XM, EXx } },
c0f3af97
L
4137 },
4138
4139 /* PREFIX_0F38DD */
4140 {
592d1631
L
4141 { Bad_Opcode },
4142 { Bad_Opcode },
c0f3af97 4143 { "aesenclast", { XM, EXx } },
c0f3af97
L
4144 },
4145
4146 /* PREFIX_0F38DE */
4147 {
592d1631
L
4148 { Bad_Opcode },
4149 { Bad_Opcode },
c0f3af97 4150 { "aesdec", { XM, EXx } },
c0f3af97
L
4151 },
4152
4153 /* PREFIX_0F38DF */
4154 {
592d1631
L
4155 { Bad_Opcode },
4156 { Bad_Opcode },
c0f3af97 4157 { "aesdeclast", { XM, EXx } },
c0f3af97
L
4158 },
4159
1ceb70f8 4160 /* PREFIX_0F38F0 */
4e7d34a6 4161 {
f1f8f695 4162 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
592d1631 4163 { Bad_Opcode },
f1f8f695 4164 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
7bb15c6f 4165 { "crc32", { Gdq, { CRC32_Fixup, b_mode } } },
4e7d34a6
L
4166 },
4167
1ceb70f8 4168 /* PREFIX_0F38F1 */
4e7d34a6 4169 {
f1f8f695 4170 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
592d1631 4171 { Bad_Opcode },
f1f8f695 4172 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
7bb15c6f 4173 { "crc32", { Gdq, { CRC32_Fixup, v_mode } } },
4e7d34a6
L
4174 },
4175
e2e1fcde
L
4176 /* PREFIX_0F38F6 */
4177 {
4178 { Bad_Opcode },
4179 { "adoxS", { Gdq, Edq} },
4180 { "adcxS", { Gdq, Edq} },
4181 { Bad_Opcode },
4182 },
4183
1ceb70f8 4184 /* PREFIX_0F3A08 */
42903f7f 4185 {
592d1631
L
4186 { Bad_Opcode },
4187 { Bad_Opcode },
09a2c6cf 4188 { "roundps", { XM, EXx, Ib } },
42903f7f
L
4189 },
4190
1ceb70f8 4191 /* PREFIX_0F3A09 */
42903f7f 4192 {
592d1631
L
4193 { Bad_Opcode },
4194 { Bad_Opcode },
09a2c6cf 4195 { "roundpd", { XM, EXx, Ib } },
42903f7f
L
4196 },
4197
1ceb70f8 4198 /* PREFIX_0F3A0A */
42903f7f 4199 {
592d1631
L
4200 { Bad_Opcode },
4201 { Bad_Opcode },
09335d05 4202 { "roundss", { XM, EXd, Ib } },
42903f7f
L
4203 },
4204
1ceb70f8 4205 /* PREFIX_0F3A0B */
42903f7f 4206 {
592d1631
L
4207 { Bad_Opcode },
4208 { Bad_Opcode },
09335d05 4209 { "roundsd", { XM, EXq, Ib } },
42903f7f
L
4210 },
4211
1ceb70f8 4212 /* PREFIX_0F3A0C */
42903f7f 4213 {
592d1631
L
4214 { Bad_Opcode },
4215 { Bad_Opcode },
09a2c6cf 4216 { "blendps", { XM, EXx, Ib } },
42903f7f
L
4217 },
4218
1ceb70f8 4219 /* PREFIX_0F3A0D */
42903f7f 4220 {
592d1631
L
4221 { Bad_Opcode },
4222 { Bad_Opcode },
09a2c6cf 4223 { "blendpd", { XM, EXx, Ib } },
42903f7f
L
4224 },
4225
1ceb70f8 4226 /* PREFIX_0F3A0E */
42903f7f 4227 {
592d1631
L
4228 { Bad_Opcode },
4229 { Bad_Opcode },
09a2c6cf 4230 { "pblendw", { XM, EXx, Ib } },
42903f7f
L
4231 },
4232
1ceb70f8 4233 /* PREFIX_0F3A14 */
42903f7f 4234 {
592d1631
L
4235 { Bad_Opcode },
4236 { Bad_Opcode },
42903f7f 4237 { "pextrb", { Edqb, XM, Ib } },
42903f7f
L
4238 },
4239
1ceb70f8 4240 /* PREFIX_0F3A15 */
42903f7f 4241 {
592d1631
L
4242 { Bad_Opcode },
4243 { Bad_Opcode },
42903f7f 4244 { "pextrw", { Edqw, XM, Ib } },
42903f7f
L
4245 },
4246
1ceb70f8 4247 /* PREFIX_0F3A16 */
42903f7f 4248 {
592d1631
L
4249 { Bad_Opcode },
4250 { Bad_Opcode },
42903f7f 4251 { "pextrK", { Edq, XM, Ib } },
42903f7f
L
4252 },
4253
1ceb70f8 4254 /* PREFIX_0F3A17 */
42903f7f 4255 {
592d1631
L
4256 { Bad_Opcode },
4257 { Bad_Opcode },
42903f7f 4258 { "extractps", { Edqd, XM, Ib } },
42903f7f
L
4259 },
4260
1ceb70f8 4261 /* PREFIX_0F3A20 */
42903f7f 4262 {
592d1631
L
4263 { Bad_Opcode },
4264 { Bad_Opcode },
42903f7f 4265 { "pinsrb", { XM, Edqb, Ib } },
42903f7f
L
4266 },
4267
1ceb70f8 4268 /* PREFIX_0F3A21 */
42903f7f 4269 {
592d1631
L
4270 { Bad_Opcode },
4271 { Bad_Opcode },
8976381e 4272 { "insertps", { XM, EXd, Ib } },
42903f7f
L
4273 },
4274
1ceb70f8 4275 /* PREFIX_0F3A22 */
42903f7f 4276 {
592d1631
L
4277 { Bad_Opcode },
4278 { Bad_Opcode },
42903f7f 4279 { "pinsrK", { XM, Edq, Ib } },
42903f7f
L
4280 },
4281
1ceb70f8 4282 /* PREFIX_0F3A40 */
42903f7f 4283 {
592d1631
L
4284 { Bad_Opcode },
4285 { Bad_Opcode },
09a2c6cf 4286 { "dpps", { XM, EXx, Ib } },
42903f7f
L
4287 },
4288
1ceb70f8 4289 /* PREFIX_0F3A41 */
42903f7f 4290 {
592d1631
L
4291 { Bad_Opcode },
4292 { Bad_Opcode },
09a2c6cf 4293 { "dppd", { XM, EXx, Ib } },
42903f7f
L
4294 },
4295
1ceb70f8 4296 /* PREFIX_0F3A42 */
42903f7f 4297 {
592d1631
L
4298 { Bad_Opcode },
4299 { Bad_Opcode },
09a2c6cf 4300 { "mpsadbw", { XM, EXx, Ib } },
42903f7f 4301 },
381d071f 4302
c0f3af97
L
4303 /* PREFIX_0F3A44 */
4304 {
592d1631
L
4305 { Bad_Opcode },
4306 { Bad_Opcode },
c0f3af97 4307 { "pclmulqdq", { XM, EXx, PCLMUL } },
c0f3af97
L
4308 },
4309
1ceb70f8 4310 /* PREFIX_0F3A60 */
381d071f 4311 {
592d1631
L
4312 { Bad_Opcode },
4313 { Bad_Opcode },
4e7d34a6 4314 { "pcmpestrm", { XM, EXx, Ib } },
381d071f
L
4315 },
4316
1ceb70f8 4317 /* PREFIX_0F3A61 */
381d071f 4318 {
592d1631
L
4319 { Bad_Opcode },
4320 { Bad_Opcode },
4e7d34a6 4321 { "pcmpestri", { XM, EXx, Ib } },
381d071f
L
4322 },
4323
1ceb70f8 4324 /* PREFIX_0F3A62 */
381d071f 4325 {
592d1631
L
4326 { Bad_Opcode },
4327 { Bad_Opcode },
4e7d34a6 4328 { "pcmpistrm", { XM, EXx, Ib } },
381d071f
L
4329 },
4330
1ceb70f8 4331 /* PREFIX_0F3A63 */
381d071f 4332 {
592d1631
L
4333 { Bad_Opcode },
4334 { Bad_Opcode },
4e7d34a6 4335 { "pcmpistri", { XM, EXx, Ib } },
381d071f 4336 },
09a2c6cf 4337
a0046408
L
4338 /* PREFIX_0F3ACC */
4339 {
4340 { "sha1rnds4", { XM, EXxmm, Ib } },
4341 },
4342
c0f3af97 4343 /* PREFIX_0F3ADF */
09a2c6cf 4344 {
592d1631
L
4345 { Bad_Opcode },
4346 { Bad_Opcode },
c0f3af97 4347 { "aeskeygenassist", { XM, EXx, Ib } },
09a2c6cf
L
4348 },
4349
592a252b 4350 /* PREFIX_VEX_0F10 */
09a2c6cf 4351 {
592a252b
L
4352 { VEX_W_TABLE (VEX_W_0F10_P_0) },
4353 { VEX_LEN_TABLE (VEX_LEN_0F10_P_1) },
4354 { VEX_W_TABLE (VEX_W_0F10_P_2) },
4355 { VEX_LEN_TABLE (VEX_LEN_0F10_P_3) },
09a2c6cf
L
4356 },
4357
592a252b 4358 /* PREFIX_VEX_0F11 */
09a2c6cf 4359 {
592a252b
L
4360 { VEX_W_TABLE (VEX_W_0F11_P_0) },
4361 { VEX_LEN_TABLE (VEX_LEN_0F11_P_1) },
4362 { VEX_W_TABLE (VEX_W_0F11_P_2) },
4363 { VEX_LEN_TABLE (VEX_LEN_0F11_P_3) },
09a2c6cf
L
4364 },
4365
592a252b 4366 /* PREFIX_VEX_0F12 */
09a2c6cf 4367 {
592a252b
L
4368 { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
4369 { VEX_W_TABLE (VEX_W_0F12_P_1) },
4370 { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) },
4371 { VEX_W_TABLE (VEX_W_0F12_P_3) },
09a2c6cf
L
4372 },
4373
592a252b 4374 /* PREFIX_VEX_0F16 */
09a2c6cf 4375 {
592a252b
L
4376 { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
4377 { VEX_W_TABLE (VEX_W_0F16_P_1) },
4378 { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) },
5f754f58 4379 },
7c52e0e8 4380
592a252b 4381 /* PREFIX_VEX_0F2A */
5f754f58 4382 {
592d1631 4383 { Bad_Opcode },
592a252b 4384 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_1) },
592d1631 4385 { Bad_Opcode },
592a252b 4386 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_3) },
5f754f58 4387 },
7c52e0e8 4388
592a252b 4389 /* PREFIX_VEX_0F2C */
5f754f58 4390 {
592d1631 4391 { Bad_Opcode },
592a252b 4392 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_1) },
592d1631 4393 { Bad_Opcode },
592a252b 4394 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_3) },
5f754f58 4395 },
7c52e0e8 4396
592a252b 4397 /* PREFIX_VEX_0F2D */
7c52e0e8 4398 {
592d1631 4399 { Bad_Opcode },
592a252b 4400 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_1) },
592d1631 4401 { Bad_Opcode },
592a252b 4402 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_3) },
7c52e0e8
L
4403 },
4404
592a252b 4405 /* PREFIX_VEX_0F2E */
7c52e0e8 4406 {
592a252b 4407 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_0) },
592d1631 4408 { Bad_Opcode },
592a252b 4409 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_2) },
7c52e0e8
L
4410 },
4411
592a252b 4412 /* PREFIX_VEX_0F2F */
7c52e0e8 4413 {
592a252b 4414 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_0) },
592d1631 4415 { Bad_Opcode },
592a252b 4416 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_2) },
7c52e0e8
L
4417 },
4418
43234a1e
L
4419 /* PREFIX_VEX_0F41 */
4420 {
4421 { VEX_LEN_TABLE (VEX_LEN_0F41_P_0) },
4422 },
4423
4424 /* PREFIX_VEX_0F42 */
4425 {
4426 { VEX_LEN_TABLE (VEX_LEN_0F42_P_0) },
4427 },
4428
4429 /* PREFIX_VEX_0F44 */
4430 {
4431 { VEX_LEN_TABLE (VEX_LEN_0F44_P_0) },
4432 },
4433
4434 /* PREFIX_VEX_0F45 */
4435 {
4436 { VEX_LEN_TABLE (VEX_LEN_0F45_P_0) },
4437 },
4438
4439 /* PREFIX_VEX_0F46 */
4440 {
4441 { VEX_LEN_TABLE (VEX_LEN_0F46_P_0) },
4442 },
4443
4444 /* PREFIX_VEX_0F47 */
4445 {
4446 { VEX_LEN_TABLE (VEX_LEN_0F47_P_0) },
4447 },
4448
4449 /* PREFIX_VEX_0F4B */
4450 {
4451 { Bad_Opcode },
4452 { Bad_Opcode },
4453 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_2) },
4454 },
4455
592a252b 4456 /* PREFIX_VEX_0F51 */
7c52e0e8 4457 {
592a252b
L
4458 { VEX_W_TABLE (VEX_W_0F51_P_0) },
4459 { VEX_LEN_TABLE (VEX_LEN_0F51_P_1) },
4460 { VEX_W_TABLE (VEX_W_0F51_P_2) },
4461 { VEX_LEN_TABLE (VEX_LEN_0F51_P_3) },
7c52e0e8
L
4462 },
4463
592a252b 4464 /* PREFIX_VEX_0F52 */
7c52e0e8 4465 {
592a252b
L
4466 { VEX_W_TABLE (VEX_W_0F52_P_0) },
4467 { VEX_LEN_TABLE (VEX_LEN_0F52_P_1) },
7c52e0e8
L
4468 },
4469
592a252b 4470 /* PREFIX_VEX_0F53 */
7c52e0e8 4471 {
592a252b
L
4472 { VEX_W_TABLE (VEX_W_0F53_P_0) },
4473 { VEX_LEN_TABLE (VEX_LEN_0F53_P_1) },
7c52e0e8
L
4474 },
4475
592a252b 4476 /* PREFIX_VEX_0F58 */
7c52e0e8 4477 {
592a252b
L
4478 { VEX_W_TABLE (VEX_W_0F58_P_0) },
4479 { VEX_LEN_TABLE (VEX_LEN_0F58_P_1) },
4480 { VEX_W_TABLE (VEX_W_0F58_P_2) },
4481 { VEX_LEN_TABLE (VEX_LEN_0F58_P_3) },
7c52e0e8
L
4482 },
4483
592a252b 4484 /* PREFIX_VEX_0F59 */
7c52e0e8 4485 {
592a252b
L
4486 { VEX_W_TABLE (VEX_W_0F59_P_0) },
4487 { VEX_LEN_TABLE (VEX_LEN_0F59_P_1) },
4488 { VEX_W_TABLE (VEX_W_0F59_P_2) },
4489 { VEX_LEN_TABLE (VEX_LEN_0F59_P_3) },
7c52e0e8
L
4490 },
4491
592a252b 4492 /* PREFIX_VEX_0F5A */
7c52e0e8 4493 {
592a252b
L
4494 { VEX_W_TABLE (VEX_W_0F5A_P_0) },
4495 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_1) },
c0f3af97 4496 { "vcvtpd2ps%XY", { XMM, EXx } },
592a252b 4497 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_3) },
7c52e0e8
L
4498 },
4499
592a252b 4500 /* PREFIX_VEX_0F5B */
7c52e0e8 4501 {
592a252b
L
4502 { VEX_W_TABLE (VEX_W_0F5B_P_0) },
4503 { VEX_W_TABLE (VEX_W_0F5B_P_1) },
4504 { VEX_W_TABLE (VEX_W_0F5B_P_2) },
7c52e0e8
L
4505 },
4506
592a252b 4507 /* PREFIX_VEX_0F5C */
7c52e0e8 4508 {
592a252b
L
4509 { VEX_W_TABLE (VEX_W_0F5C_P_0) },
4510 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_1) },
4511 { VEX_W_TABLE (VEX_W_0F5C_P_2) },
4512 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_3) },
7c52e0e8
L
4513 },
4514
592a252b 4515 /* PREFIX_VEX_0F5D */
7c52e0e8 4516 {
592a252b
L
4517 { VEX_W_TABLE (VEX_W_0F5D_P_0) },
4518 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_1) },
4519 { VEX_W_TABLE (VEX_W_0F5D_P_2) },
4520 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_3) },
7c52e0e8
L
4521 },
4522
592a252b 4523 /* PREFIX_VEX_0F5E */
7c52e0e8 4524 {
592a252b
L
4525 { VEX_W_TABLE (VEX_W_0F5E_P_0) },
4526 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_1) },
4527 { VEX_W_TABLE (VEX_W_0F5E_P_2) },
4528 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_3) },
7c52e0e8
L
4529 },
4530
592a252b 4531 /* PREFIX_VEX_0F5F */
7c52e0e8 4532 {
592a252b
L
4533 { VEX_W_TABLE (VEX_W_0F5F_P_0) },
4534 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_1) },
4535 { VEX_W_TABLE (VEX_W_0F5F_P_2) },
4536 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_3) },
7c52e0e8
L
4537 },
4538
592a252b 4539 /* PREFIX_VEX_0F60 */
7c52e0e8 4540 {
592d1631
L
4541 { Bad_Opcode },
4542 { Bad_Opcode },
6c30d220 4543 { VEX_W_TABLE (VEX_W_0F60_P_2) },
7c52e0e8
L
4544 },
4545
592a252b 4546 /* PREFIX_VEX_0F61 */
7c52e0e8 4547 {
592d1631
L
4548 { Bad_Opcode },
4549 { Bad_Opcode },
6c30d220 4550 { VEX_W_TABLE (VEX_W_0F61_P_2) },
7c52e0e8
L
4551 },
4552
592a252b 4553 /* PREFIX_VEX_0F62 */
7c52e0e8 4554 {
592d1631
L
4555 { Bad_Opcode },
4556 { Bad_Opcode },
6c30d220 4557 { VEX_W_TABLE (VEX_W_0F62_P_2) },
7c52e0e8
L
4558 },
4559
592a252b 4560 /* PREFIX_VEX_0F63 */
7c52e0e8 4561 {
592d1631
L
4562 { Bad_Opcode },
4563 { Bad_Opcode },
6c30d220 4564 { VEX_W_TABLE (VEX_W_0F63_P_2) },
7c52e0e8
L
4565 },
4566
592a252b 4567 /* PREFIX_VEX_0F64 */
7c52e0e8 4568 {
592d1631
L
4569 { Bad_Opcode },
4570 { Bad_Opcode },
6c30d220 4571 { VEX_W_TABLE (VEX_W_0F64_P_2) },
7c52e0e8
L
4572 },
4573
592a252b 4574 /* PREFIX_VEX_0F65 */
7c52e0e8 4575 {
592d1631
L
4576 { Bad_Opcode },
4577 { Bad_Opcode },
6c30d220 4578 { VEX_W_TABLE (VEX_W_0F65_P_2) },
7c52e0e8
L
4579 },
4580
592a252b 4581 /* PREFIX_VEX_0F66 */
7c52e0e8 4582 {
592d1631
L
4583 { Bad_Opcode },
4584 { Bad_Opcode },
6c30d220 4585 { VEX_W_TABLE (VEX_W_0F66_P_2) },
7c52e0e8 4586 },
6439fc28 4587
592a252b 4588 /* PREFIX_VEX_0F67 */
331d2d0d 4589 {
592d1631
L
4590 { Bad_Opcode },
4591 { Bad_Opcode },
6c30d220 4592 { VEX_W_TABLE (VEX_W_0F67_P_2) },
c0f3af97
L
4593 },
4594
592a252b 4595 /* PREFIX_VEX_0F68 */
c0f3af97 4596 {
592d1631
L
4597 { Bad_Opcode },
4598 { Bad_Opcode },
6c30d220 4599 { VEX_W_TABLE (VEX_W_0F68_P_2) },
c0f3af97
L
4600 },
4601
592a252b 4602 /* PREFIX_VEX_0F69 */
c0f3af97 4603 {
592d1631
L
4604 { Bad_Opcode },
4605 { Bad_Opcode },
6c30d220 4606 { VEX_W_TABLE (VEX_W_0F69_P_2) },
c0f3af97
L
4607 },
4608
592a252b 4609 /* PREFIX_VEX_0F6A */
c0f3af97 4610 {
592d1631
L
4611 { Bad_Opcode },
4612 { Bad_Opcode },
6c30d220 4613 { VEX_W_TABLE (VEX_W_0F6A_P_2) },
c0f3af97
L
4614 },
4615
592a252b 4616 /* PREFIX_VEX_0F6B */
c0f3af97 4617 {
592d1631
L
4618 { Bad_Opcode },
4619 { Bad_Opcode },
6c30d220 4620 { VEX_W_TABLE (VEX_W_0F6B_P_2) },
c0f3af97
L
4621 },
4622
592a252b 4623 /* PREFIX_VEX_0F6C */
c0f3af97 4624 {
592d1631
L
4625 { Bad_Opcode },
4626 { Bad_Opcode },
6c30d220 4627 { VEX_W_TABLE (VEX_W_0F6C_P_2) },
c0f3af97
L
4628 },
4629
592a252b 4630 /* PREFIX_VEX_0F6D */
c0f3af97 4631 {
592d1631
L
4632 { Bad_Opcode },
4633 { Bad_Opcode },
6c30d220 4634 { VEX_W_TABLE (VEX_W_0F6D_P_2) },
c0f3af97
L
4635 },
4636
592a252b 4637 /* PREFIX_VEX_0F6E */
c0f3af97 4638 {
592d1631
L
4639 { Bad_Opcode },
4640 { Bad_Opcode },
592a252b 4641 { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) },
c0f3af97
L
4642 },
4643
592a252b 4644 /* PREFIX_VEX_0F6F */
c0f3af97 4645 {
592d1631 4646 { Bad_Opcode },
592a252b
L
4647 { VEX_W_TABLE (VEX_W_0F6F_P_1) },
4648 { VEX_W_TABLE (VEX_W_0F6F_P_2) },
c0f3af97
L
4649 },
4650
592a252b 4651 /* PREFIX_VEX_0F70 */
c0f3af97 4652 {
592d1631 4653 { Bad_Opcode },
6c30d220
L
4654 { VEX_W_TABLE (VEX_W_0F70_P_1) },
4655 { VEX_W_TABLE (VEX_W_0F70_P_2) },
4656 { VEX_W_TABLE (VEX_W_0F70_P_3) },
c0f3af97
L
4657 },
4658
592a252b 4659 /* PREFIX_VEX_0F71_REG_2 */
c0f3af97 4660 {
592d1631
L
4661 { Bad_Opcode },
4662 { Bad_Opcode },
6c30d220 4663 { VEX_W_TABLE (VEX_W_0F71_R_2_P_2) },
c0f3af97
L
4664 },
4665
592a252b 4666 /* PREFIX_VEX_0F71_REG_4 */
c0f3af97 4667 {
592d1631
L
4668 { Bad_Opcode },
4669 { Bad_Opcode },
6c30d220 4670 { VEX_W_TABLE (VEX_W_0F71_R_4_P_2) },
c0f3af97
L
4671 },
4672
592a252b 4673 /* PREFIX_VEX_0F71_REG_6 */
c0f3af97 4674 {
592d1631
L
4675 { Bad_Opcode },
4676 { Bad_Opcode },
6c30d220 4677 { VEX_W_TABLE (VEX_W_0F71_R_6_P_2) },
c0f3af97
L
4678 },
4679
592a252b 4680 /* PREFIX_VEX_0F72_REG_2 */
c0f3af97 4681 {
592d1631
L
4682 { Bad_Opcode },
4683 { Bad_Opcode },
6c30d220 4684 { VEX_W_TABLE (VEX_W_0F72_R_2_P_2) },
c0f3af97
L
4685 },
4686
592a252b 4687 /* PREFIX_VEX_0F72_REG_4 */
c0f3af97 4688 {
592d1631
L
4689 { Bad_Opcode },
4690 { Bad_Opcode },
6c30d220 4691 { VEX_W_TABLE (VEX_W_0F72_R_4_P_2) },
c0f3af97
L
4692 },
4693
592a252b 4694 /* PREFIX_VEX_0F72_REG_6 */
c0f3af97 4695 {
592d1631
L
4696 { Bad_Opcode },
4697 { Bad_Opcode },
6c30d220 4698 { VEX_W_TABLE (VEX_W_0F72_R_6_P_2) },
c0f3af97
L
4699 },
4700
592a252b 4701 /* PREFIX_VEX_0F73_REG_2 */
c0f3af97 4702 {
592d1631
L
4703 { Bad_Opcode },
4704 { Bad_Opcode },
6c30d220 4705 { VEX_W_TABLE (VEX_W_0F73_R_2_P_2) },
c0f3af97
L
4706 },
4707
592a252b 4708 /* PREFIX_VEX_0F73_REG_3 */
c0f3af97 4709 {
592d1631
L
4710 { Bad_Opcode },
4711 { Bad_Opcode },
6c30d220 4712 { VEX_W_TABLE (VEX_W_0F73_R_3_P_2) },
c0f3af97
L
4713 },
4714
592a252b 4715 /* PREFIX_VEX_0F73_REG_6 */
c0f3af97 4716 {
592d1631
L
4717 { Bad_Opcode },
4718 { Bad_Opcode },
6c30d220 4719 { VEX_W_TABLE (VEX_W_0F73_R_6_P_2) },
c0f3af97
L
4720 },
4721
592a252b 4722 /* PREFIX_VEX_0F73_REG_7 */
c0f3af97 4723 {
592d1631
L
4724 { Bad_Opcode },
4725 { Bad_Opcode },
6c30d220 4726 { VEX_W_TABLE (VEX_W_0F73_R_7_P_2) },
c0f3af97
L
4727 },
4728
592a252b 4729 /* PREFIX_VEX_0F74 */
c0f3af97 4730 {
592d1631
L
4731 { Bad_Opcode },
4732 { Bad_Opcode },
6c30d220 4733 { VEX_W_TABLE (VEX_W_0F74_P_2) },
c0f3af97
L
4734 },
4735
592a252b 4736 /* PREFIX_VEX_0F75 */
c0f3af97 4737 {
592d1631
L
4738 { Bad_Opcode },
4739 { Bad_Opcode },
6c30d220 4740 { VEX_W_TABLE (VEX_W_0F75_P_2) },
c0f3af97
L
4741 },
4742
592a252b 4743 /* PREFIX_VEX_0F76 */
c0f3af97 4744 {
592d1631
L
4745 { Bad_Opcode },
4746 { Bad_Opcode },
6c30d220 4747 { VEX_W_TABLE (VEX_W_0F76_P_2) },
c0f3af97
L
4748 },
4749
592a252b 4750 /* PREFIX_VEX_0F77 */
c0f3af97 4751 {
592a252b 4752 { VEX_W_TABLE (VEX_W_0F77_P_0) },
c0f3af97
L
4753 },
4754
592a252b 4755 /* PREFIX_VEX_0F7C */
c0f3af97 4756 {
592d1631
L
4757 { Bad_Opcode },
4758 { Bad_Opcode },
592a252b
L
4759 { VEX_W_TABLE (VEX_W_0F7C_P_2) },
4760 { VEX_W_TABLE (VEX_W_0F7C_P_3) },
c0f3af97
L
4761 },
4762
592a252b 4763 /* PREFIX_VEX_0F7D */
c0f3af97 4764 {
592d1631
L
4765 { Bad_Opcode },
4766 { Bad_Opcode },
592a252b
L
4767 { VEX_W_TABLE (VEX_W_0F7D_P_2) },
4768 { VEX_W_TABLE (VEX_W_0F7D_P_3) },
c0f3af97
L
4769 },
4770
592a252b 4771 /* PREFIX_VEX_0F7E */
c0f3af97 4772 {
592d1631 4773 { Bad_Opcode },
592a252b
L
4774 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) },
4775 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
c0f3af97
L
4776 },
4777
592a252b 4778 /* PREFIX_VEX_0F7F */
c0f3af97 4779 {
592d1631 4780 { Bad_Opcode },
592a252b
L
4781 { VEX_W_TABLE (VEX_W_0F7F_P_1) },
4782 { VEX_W_TABLE (VEX_W_0F7F_P_2) },
c0f3af97
L
4783 },
4784
43234a1e
L
4785 /* PREFIX_VEX_0F90 */
4786 {
4787 { VEX_LEN_TABLE (VEX_LEN_0F90_P_0) },
4788 },
4789
4790 /* PREFIX_VEX_0F91 */
4791 {
4792 { VEX_LEN_TABLE (VEX_LEN_0F91_P_0) },
4793 },
4794
4795 /* PREFIX_VEX_0F92 */
4796 {
4797 { VEX_LEN_TABLE (VEX_LEN_0F92_P_0) },
4798 },
4799
4800 /* PREFIX_VEX_0F93 */
4801 {
4802 { VEX_LEN_TABLE (VEX_LEN_0F93_P_0) },
4803 },
4804
4805 /* PREFIX_VEX_0F98 */
4806 {
4807 { VEX_LEN_TABLE (VEX_LEN_0F98_P_0) },
4808 },
4809
592a252b 4810 /* PREFIX_VEX_0FC2 */
c0f3af97 4811 {
592a252b
L
4812 { VEX_W_TABLE (VEX_W_0FC2_P_0) },
4813 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_1) },
4814 { VEX_W_TABLE (VEX_W_0FC2_P_2) },
4815 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_3) },
c0f3af97
L
4816 },
4817
592a252b 4818 /* PREFIX_VEX_0FC4 */
c0f3af97 4819 {
592d1631
L
4820 { Bad_Opcode },
4821 { Bad_Opcode },
592a252b 4822 { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) },
c0f3af97
L
4823 },
4824
592a252b 4825 /* PREFIX_VEX_0FC5 */
c0f3af97 4826 {
592d1631
L
4827 { Bad_Opcode },
4828 { Bad_Opcode },
592a252b 4829 { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) },
c0f3af97
L
4830 },
4831
592a252b 4832 /* PREFIX_VEX_0FD0 */
c0f3af97 4833 {
592d1631
L
4834 { Bad_Opcode },
4835 { Bad_Opcode },
592a252b
L
4836 { VEX_W_TABLE (VEX_W_0FD0_P_2) },
4837 { VEX_W_TABLE (VEX_W_0FD0_P_3) },
c0f3af97
L
4838 },
4839
592a252b 4840 /* PREFIX_VEX_0FD1 */
c0f3af97 4841 {
592d1631
L
4842 { Bad_Opcode },
4843 { Bad_Opcode },
6c30d220 4844 { VEX_W_TABLE (VEX_W_0FD1_P_2) },
c0f3af97
L
4845 },
4846
592a252b 4847 /* PREFIX_VEX_0FD2 */
c0f3af97 4848 {
592d1631
L
4849 { Bad_Opcode },
4850 { Bad_Opcode },
6c30d220 4851 { VEX_W_TABLE (VEX_W_0FD2_P_2) },
c0f3af97
L
4852 },
4853
592a252b 4854 /* PREFIX_VEX_0FD3 */
c0f3af97 4855 {
592d1631
L
4856 { Bad_Opcode },
4857 { Bad_Opcode },
6c30d220 4858 { VEX_W_TABLE (VEX_W_0FD3_P_2) },
c0f3af97
L
4859 },
4860
592a252b 4861 /* PREFIX_VEX_0FD4 */
c0f3af97 4862 {
592d1631
L
4863 { Bad_Opcode },
4864 { Bad_Opcode },
6c30d220 4865 { VEX_W_TABLE (VEX_W_0FD4_P_2) },
c0f3af97
L
4866 },
4867
592a252b 4868 /* PREFIX_VEX_0FD5 */
c0f3af97 4869 {
592d1631
L
4870 { Bad_Opcode },
4871 { Bad_Opcode },
6c30d220 4872 { VEX_W_TABLE (VEX_W_0FD5_P_2) },
c0f3af97
L
4873 },
4874
592a252b 4875 /* PREFIX_VEX_0FD6 */
c0f3af97 4876 {
592d1631
L
4877 { Bad_Opcode },
4878 { Bad_Opcode },
592a252b 4879 { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) },
c0f3af97
L
4880 },
4881
592a252b 4882 /* PREFIX_VEX_0FD7 */
c0f3af97 4883 {
592d1631
L
4884 { Bad_Opcode },
4885 { Bad_Opcode },
592a252b 4886 { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) },
c0f3af97
L
4887 },
4888
592a252b 4889 /* PREFIX_VEX_0FD8 */
c0f3af97 4890 {
592d1631
L
4891 { Bad_Opcode },
4892 { Bad_Opcode },
6c30d220 4893 { VEX_W_TABLE (VEX_W_0FD8_P_2) },
c0f3af97
L
4894 },
4895
592a252b 4896 /* PREFIX_VEX_0FD9 */
c0f3af97 4897 {
592d1631
L
4898 { Bad_Opcode },
4899 { Bad_Opcode },
6c30d220 4900 { VEX_W_TABLE (VEX_W_0FD9_P_2) },
c0f3af97
L
4901 },
4902
592a252b 4903 /* PREFIX_VEX_0FDA */
c0f3af97 4904 {
592d1631
L
4905 { Bad_Opcode },
4906 { Bad_Opcode },
6c30d220 4907 { VEX_W_TABLE (VEX_W_0FDA_P_2) },
c0f3af97
L
4908 },
4909
592a252b 4910 /* PREFIX_VEX_0FDB */
c0f3af97 4911 {
592d1631
L
4912 { Bad_Opcode },
4913 { Bad_Opcode },
6c30d220 4914 { VEX_W_TABLE (VEX_W_0FDB_P_2) },
c0f3af97
L
4915 },
4916
592a252b 4917 /* PREFIX_VEX_0FDC */
c0f3af97 4918 {
592d1631
L
4919 { Bad_Opcode },
4920 { Bad_Opcode },
6c30d220 4921 { VEX_W_TABLE (VEX_W_0FDC_P_2) },
c0f3af97
L
4922 },
4923
592a252b 4924 /* PREFIX_VEX_0FDD */
c0f3af97 4925 {
592d1631
L
4926 { Bad_Opcode },
4927 { Bad_Opcode },
6c30d220 4928 { VEX_W_TABLE (VEX_W_0FDD_P_2) },
c0f3af97
L
4929 },
4930
592a252b 4931 /* PREFIX_VEX_0FDE */
c0f3af97 4932 {
592d1631
L
4933 { Bad_Opcode },
4934 { Bad_Opcode },
6c30d220 4935 { VEX_W_TABLE (VEX_W_0FDE_P_2) },
c0f3af97
L
4936 },
4937
592a252b 4938 /* PREFIX_VEX_0FDF */
c0f3af97 4939 {
592d1631
L
4940 { Bad_Opcode },
4941 { Bad_Opcode },
6c30d220 4942 { VEX_W_TABLE (VEX_W_0FDF_P_2) },
c0f3af97
L
4943 },
4944
592a252b 4945 /* PREFIX_VEX_0FE0 */
c0f3af97 4946 {
592d1631
L
4947 { Bad_Opcode },
4948 { Bad_Opcode },
6c30d220 4949 { VEX_W_TABLE (VEX_W_0FE0_P_2) },
c0f3af97
L
4950 },
4951
592a252b 4952 /* PREFIX_VEX_0FE1 */
c0f3af97 4953 {
592d1631
L
4954 { Bad_Opcode },
4955 { Bad_Opcode },
6c30d220 4956 { VEX_W_TABLE (VEX_W_0FE1_P_2) },
c0f3af97
L
4957 },
4958
592a252b 4959 /* PREFIX_VEX_0FE2 */
c0f3af97 4960 {
592d1631
L
4961 { Bad_Opcode },
4962 { Bad_Opcode },
6c30d220 4963 { VEX_W_TABLE (VEX_W_0FE2_P_2) },
c0f3af97
L
4964 },
4965
592a252b 4966 /* PREFIX_VEX_0FE3 */
c0f3af97 4967 {
592d1631
L
4968 { Bad_Opcode },
4969 { Bad_Opcode },
6c30d220 4970 { VEX_W_TABLE (VEX_W_0FE3_P_2) },
c0f3af97
L
4971 },
4972
592a252b 4973 /* PREFIX_VEX_0FE4 */
c0f3af97 4974 {
592d1631
L
4975 { Bad_Opcode },
4976 { Bad_Opcode },
6c30d220 4977 { VEX_W_TABLE (VEX_W_0FE4_P_2) },
c0f3af97
L
4978 },
4979
592a252b 4980 /* PREFIX_VEX_0FE5 */
c0f3af97 4981 {
592d1631
L
4982 { Bad_Opcode },
4983 { Bad_Opcode },
6c30d220 4984 { VEX_W_TABLE (VEX_W_0FE5_P_2) },
c0f3af97
L
4985 },
4986
592a252b 4987 /* PREFIX_VEX_0FE6 */
c0f3af97 4988 {
592d1631 4989 { Bad_Opcode },
592a252b
L
4990 { VEX_W_TABLE (VEX_W_0FE6_P_1) },
4991 { VEX_W_TABLE (VEX_W_0FE6_P_2) },
4992 { VEX_W_TABLE (VEX_W_0FE6_P_3) },
c0f3af97
L
4993 },
4994
592a252b 4995 /* PREFIX_VEX_0FE7 */
c0f3af97 4996 {
592d1631
L
4997 { Bad_Opcode },
4998 { Bad_Opcode },
592a252b 4999 { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) },
c0f3af97
L
5000 },
5001
592a252b 5002 /* PREFIX_VEX_0FE8 */
c0f3af97 5003 {
592d1631
L
5004 { Bad_Opcode },
5005 { Bad_Opcode },
6c30d220 5006 { VEX_W_TABLE (VEX_W_0FE8_P_2) },
c0f3af97
L
5007 },
5008
592a252b 5009 /* PREFIX_VEX_0FE9 */
c0f3af97 5010 {
592d1631
L
5011 { Bad_Opcode },
5012 { Bad_Opcode },
6c30d220 5013 { VEX_W_TABLE (VEX_W_0FE9_P_2) },
c0f3af97
L
5014 },
5015
592a252b 5016 /* PREFIX_VEX_0FEA */
c0f3af97 5017 {
592d1631
L
5018 { Bad_Opcode },
5019 { Bad_Opcode },
6c30d220 5020 { VEX_W_TABLE (VEX_W_0FEA_P_2) },
c0f3af97
L
5021 },
5022
592a252b 5023 /* PREFIX_VEX_0FEB */
c0f3af97 5024 {
592d1631
L
5025 { Bad_Opcode },
5026 { Bad_Opcode },
6c30d220 5027 { VEX_W_TABLE (VEX_W_0FEB_P_2) },
c0f3af97
L
5028 },
5029
592a252b 5030 /* PREFIX_VEX_0FEC */
c0f3af97 5031 {
592d1631
L
5032 { Bad_Opcode },
5033 { Bad_Opcode },
6c30d220 5034 { VEX_W_TABLE (VEX_W_0FEC_P_2) },
c0f3af97
L
5035 },
5036
592a252b 5037 /* PREFIX_VEX_0FED */
c0f3af97 5038 {
592d1631
L
5039 { Bad_Opcode },
5040 { Bad_Opcode },
6c30d220 5041 { VEX_W_TABLE (VEX_W_0FED_P_2) },
c0f3af97
L
5042 },
5043
592a252b 5044 /* PREFIX_VEX_0FEE */
c0f3af97 5045 {
592d1631
L
5046 { Bad_Opcode },
5047 { Bad_Opcode },
6c30d220 5048 { VEX_W_TABLE (VEX_W_0FEE_P_2) },
c0f3af97
L
5049 },
5050
592a252b 5051 /* PREFIX_VEX_0FEF */
c0f3af97 5052 {
592d1631
L
5053 { Bad_Opcode },
5054 { Bad_Opcode },
6c30d220 5055 { VEX_W_TABLE (VEX_W_0FEF_P_2) },
c0f3af97
L
5056 },
5057
592a252b 5058 /* PREFIX_VEX_0FF0 */
c0f3af97 5059 {
592d1631
L
5060 { Bad_Opcode },
5061 { Bad_Opcode },
5062 { Bad_Opcode },
592a252b 5063 { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) },
c0f3af97
L
5064 },
5065
592a252b 5066 /* PREFIX_VEX_0FF1 */
c0f3af97 5067 {
592d1631
L
5068 { Bad_Opcode },
5069 { Bad_Opcode },
6c30d220 5070 { VEX_W_TABLE (VEX_W_0FF1_P_2) },
c0f3af97
L
5071 },
5072
592a252b 5073 /* PREFIX_VEX_0FF2 */
c0f3af97 5074 {
592d1631
L
5075 { Bad_Opcode },
5076 { Bad_Opcode },
6c30d220 5077 { VEX_W_TABLE (VEX_W_0FF2_P_2) },
c0f3af97
L
5078 },
5079
592a252b 5080 /* PREFIX_VEX_0FF3 */
c0f3af97 5081 {
592d1631
L
5082 { Bad_Opcode },
5083 { Bad_Opcode },
6c30d220 5084 { VEX_W_TABLE (VEX_W_0FF3_P_2) },
c0f3af97
L
5085 },
5086
592a252b 5087 /* PREFIX_VEX_0FF4 */
c0f3af97 5088 {
592d1631
L
5089 { Bad_Opcode },
5090 { Bad_Opcode },
6c30d220 5091 { VEX_W_TABLE (VEX_W_0FF4_P_2) },
c0f3af97
L
5092 },
5093
592a252b 5094 /* PREFIX_VEX_0FF5 */
c0f3af97 5095 {
592d1631
L
5096 { Bad_Opcode },
5097 { Bad_Opcode },
6c30d220 5098 { VEX_W_TABLE (VEX_W_0FF5_P_2) },
c0f3af97
L
5099 },
5100
592a252b 5101 /* PREFIX_VEX_0FF6 */
c0f3af97 5102 {
592d1631
L
5103 { Bad_Opcode },
5104 { Bad_Opcode },
6c30d220 5105 { VEX_W_TABLE (VEX_W_0FF6_P_2) },
c0f3af97
L
5106 },
5107
592a252b 5108 /* PREFIX_VEX_0FF7 */
c0f3af97 5109 {
592d1631
L
5110 { Bad_Opcode },
5111 { Bad_Opcode },
592a252b 5112 { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) },
c0f3af97
L
5113 },
5114
592a252b 5115 /* PREFIX_VEX_0FF8 */
c0f3af97 5116 {
592d1631
L
5117 { Bad_Opcode },
5118 { Bad_Opcode },
6c30d220 5119 { VEX_W_TABLE (VEX_W_0FF8_P_2) },
c0f3af97
L
5120 },
5121
592a252b 5122 /* PREFIX_VEX_0FF9 */
c0f3af97 5123 {
592d1631
L
5124 { Bad_Opcode },
5125 { Bad_Opcode },
6c30d220 5126 { VEX_W_TABLE (VEX_W_0FF9_P_2) },
c0f3af97
L
5127 },
5128
592a252b 5129 /* PREFIX_VEX_0FFA */
c0f3af97 5130 {
592d1631
L
5131 { Bad_Opcode },
5132 { Bad_Opcode },
6c30d220 5133 { VEX_W_TABLE (VEX_W_0FFA_P_2) },
c0f3af97
L
5134 },
5135
592a252b 5136 /* PREFIX_VEX_0FFB */
c0f3af97 5137 {
592d1631
L
5138 { Bad_Opcode },
5139 { Bad_Opcode },
6c30d220 5140 { VEX_W_TABLE (VEX_W_0FFB_P_2) },
c0f3af97
L
5141 },
5142
592a252b 5143 /* PREFIX_VEX_0FFC */
c0f3af97 5144 {
592d1631
L
5145 { Bad_Opcode },
5146 { Bad_Opcode },
6c30d220 5147 { VEX_W_TABLE (VEX_W_0FFC_P_2) },
c0f3af97
L
5148 },
5149
592a252b 5150 /* PREFIX_VEX_0FFD */
c0f3af97 5151 {
592d1631
L
5152 { Bad_Opcode },
5153 { Bad_Opcode },
6c30d220 5154 { VEX_W_TABLE (VEX_W_0FFD_P_2) },
c0f3af97
L
5155 },
5156
592a252b 5157 /* PREFIX_VEX_0FFE */
c0f3af97 5158 {
592d1631
L
5159 { Bad_Opcode },
5160 { Bad_Opcode },
6c30d220 5161 { VEX_W_TABLE (VEX_W_0FFE_P_2) },
c0f3af97
L
5162 },
5163
592a252b 5164 /* PREFIX_VEX_0F3800 */
c0f3af97 5165 {
592d1631
L
5166 { Bad_Opcode },
5167 { Bad_Opcode },
6c30d220 5168 { VEX_W_TABLE (VEX_W_0F3800_P_2) },
c0f3af97
L
5169 },
5170
592a252b 5171 /* PREFIX_VEX_0F3801 */
c0f3af97 5172 {
592d1631
L
5173 { Bad_Opcode },
5174 { Bad_Opcode },
6c30d220 5175 { VEX_W_TABLE (VEX_W_0F3801_P_2) },
c0f3af97
L
5176 },
5177
592a252b 5178 /* PREFIX_VEX_0F3802 */
c0f3af97 5179 {
592d1631
L
5180 { Bad_Opcode },
5181 { Bad_Opcode },
6c30d220 5182 { VEX_W_TABLE (VEX_W_0F3802_P_2) },
c0f3af97
L
5183 },
5184
592a252b 5185 /* PREFIX_VEX_0F3803 */
c0f3af97 5186 {
592d1631
L
5187 { Bad_Opcode },
5188 { Bad_Opcode },
6c30d220 5189 { VEX_W_TABLE (VEX_W_0F3803_P_2) },
c0f3af97
L
5190 },
5191
592a252b 5192 /* PREFIX_VEX_0F3804 */
c0f3af97 5193 {
592d1631
L
5194 { Bad_Opcode },
5195 { Bad_Opcode },
6c30d220 5196 { VEX_W_TABLE (VEX_W_0F3804_P_2) },
c0f3af97
L
5197 },
5198
592a252b 5199 /* PREFIX_VEX_0F3805 */
c0f3af97 5200 {
592d1631
L
5201 { Bad_Opcode },
5202 { Bad_Opcode },
6c30d220 5203 { VEX_W_TABLE (VEX_W_0F3805_P_2) },
c0f3af97
L
5204 },
5205
592a252b 5206 /* PREFIX_VEX_0F3806 */
c0f3af97 5207 {
592d1631
L
5208 { Bad_Opcode },
5209 { Bad_Opcode },
6c30d220 5210 { VEX_W_TABLE (VEX_W_0F3806_P_2) },
c0f3af97
L
5211 },
5212
592a252b 5213 /* PREFIX_VEX_0F3807 */
c0f3af97 5214 {
592d1631
L
5215 { Bad_Opcode },
5216 { Bad_Opcode },
6c30d220 5217 { VEX_W_TABLE (VEX_W_0F3807_P_2) },
c0f3af97
L
5218 },
5219
592a252b 5220 /* PREFIX_VEX_0F3808 */
c0f3af97 5221 {
592d1631
L
5222 { Bad_Opcode },
5223 { Bad_Opcode },
6c30d220 5224 { VEX_W_TABLE (VEX_W_0F3808_P_2) },
c0f3af97
L
5225 },
5226
592a252b 5227 /* PREFIX_VEX_0F3809 */
c0f3af97 5228 {
592d1631
L
5229 { Bad_Opcode },
5230 { Bad_Opcode },
6c30d220 5231 { VEX_W_TABLE (VEX_W_0F3809_P_2) },
c0f3af97
L
5232 },
5233
592a252b 5234 /* PREFIX_VEX_0F380A */
c0f3af97 5235 {
592d1631
L
5236 { Bad_Opcode },
5237 { Bad_Opcode },
6c30d220 5238 { VEX_W_TABLE (VEX_W_0F380A_P_2) },
c0f3af97
L
5239 },
5240
592a252b 5241 /* PREFIX_VEX_0F380B */
c0f3af97 5242 {
592d1631
L
5243 { Bad_Opcode },
5244 { Bad_Opcode },
6c30d220 5245 { VEX_W_TABLE (VEX_W_0F380B_P_2) },
c0f3af97
L
5246 },
5247
592a252b 5248 /* PREFIX_VEX_0F380C */
c0f3af97 5249 {
592d1631
L
5250 { Bad_Opcode },
5251 { Bad_Opcode },
592a252b 5252 { VEX_W_TABLE (VEX_W_0F380C_P_2) },
c0f3af97
L
5253 },
5254
592a252b 5255 /* PREFIX_VEX_0F380D */
c0f3af97 5256 {
592d1631
L
5257 { Bad_Opcode },
5258 { Bad_Opcode },
592a252b 5259 { VEX_W_TABLE (VEX_W_0F380D_P_2) },
c0f3af97
L
5260 },
5261
592a252b 5262 /* PREFIX_VEX_0F380E */
c0f3af97 5263 {
592d1631
L
5264 { Bad_Opcode },
5265 { Bad_Opcode },
592a252b 5266 { VEX_W_TABLE (VEX_W_0F380E_P_2) },
c0f3af97
L
5267 },
5268
592a252b 5269 /* PREFIX_VEX_0F380F */
c0f3af97 5270 {
592d1631
L
5271 { Bad_Opcode },
5272 { Bad_Opcode },
592a252b 5273 { VEX_W_TABLE (VEX_W_0F380F_P_2) },
c0f3af97
L
5274 },
5275
592a252b 5276 /* PREFIX_VEX_0F3813 */
c7b8aa3a
L
5277 {
5278 { Bad_Opcode },
5279 { Bad_Opcode },
5280 { "vcvtph2ps", { XM, EXxmmq } },
5281 },
5282
6c30d220
L
5283 /* PREFIX_VEX_0F3816 */
5284 {
5285 { Bad_Opcode },
5286 { Bad_Opcode },
5287 { VEX_LEN_TABLE (VEX_LEN_0F3816_P_2) },
5288 },
5289
592a252b 5290 /* PREFIX_VEX_0F3817 */
c0f3af97 5291 {
592d1631
L
5292 { Bad_Opcode },
5293 { Bad_Opcode },
592a252b 5294 { VEX_W_TABLE (VEX_W_0F3817_P_2) },
c0f3af97
L
5295 },
5296
592a252b 5297 /* PREFIX_VEX_0F3818 */
c0f3af97 5298 {
592d1631
L
5299 { Bad_Opcode },
5300 { Bad_Opcode },
6c30d220 5301 { VEX_W_TABLE (VEX_W_0F3818_P_2) },
c0f3af97
L
5302 },
5303
592a252b 5304 /* PREFIX_VEX_0F3819 */
c0f3af97 5305 {
592d1631
L
5306 { Bad_Opcode },
5307 { Bad_Opcode },
6c30d220 5308 { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2) },
c0f3af97
L
5309 },
5310
592a252b 5311 /* PREFIX_VEX_0F381A */
c0f3af97 5312 {
592d1631
L
5313 { Bad_Opcode },
5314 { Bad_Opcode },
592a252b 5315 { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) },
c0f3af97
L
5316 },
5317
592a252b 5318 /* PREFIX_VEX_0F381C */
c0f3af97 5319 {
592d1631
L
5320 { Bad_Opcode },
5321 { Bad_Opcode },
6c30d220 5322 { VEX_W_TABLE (VEX_W_0F381C_P_2) },
c0f3af97
L
5323 },
5324
592a252b 5325 /* PREFIX_VEX_0F381D */
c0f3af97 5326 {
592d1631
L
5327 { Bad_Opcode },
5328 { Bad_Opcode },
6c30d220 5329 { VEX_W_TABLE (VEX_W_0F381D_P_2) },
c0f3af97
L
5330 },
5331
592a252b 5332 /* PREFIX_VEX_0F381E */
c0f3af97 5333 {
592d1631
L
5334 { Bad_Opcode },
5335 { Bad_Opcode },
6c30d220 5336 { VEX_W_TABLE (VEX_W_0F381E_P_2) },
c0f3af97
L
5337 },
5338
592a252b 5339 /* PREFIX_VEX_0F3820 */
c0f3af97 5340 {
592d1631
L
5341 { Bad_Opcode },
5342 { Bad_Opcode },
6c30d220 5343 { VEX_W_TABLE (VEX_W_0F3820_P_2) },
c0f3af97
L
5344 },
5345
592a252b 5346 /* PREFIX_VEX_0F3821 */
c0f3af97 5347 {
592d1631
L
5348 { Bad_Opcode },
5349 { Bad_Opcode },
6c30d220 5350 { VEX_W_TABLE (VEX_W_0F3821_P_2) },
c0f3af97
L
5351 },
5352
592a252b 5353 /* PREFIX_VEX_0F3822 */
c0f3af97 5354 {
592d1631
L
5355 { Bad_Opcode },
5356 { Bad_Opcode },
6c30d220 5357 { VEX_W_TABLE (VEX_W_0F3822_P_2) },
c0f3af97
L
5358 },
5359
592a252b 5360 /* PREFIX_VEX_0F3823 */
c0f3af97 5361 {
592d1631
L
5362 { Bad_Opcode },
5363 { Bad_Opcode },
6c30d220 5364 { VEX_W_TABLE (VEX_W_0F3823_P_2) },
c0f3af97
L
5365 },
5366
592a252b 5367 /* PREFIX_VEX_0F3824 */
c0f3af97 5368 {
592d1631
L
5369 { Bad_Opcode },
5370 { Bad_Opcode },
6c30d220 5371 { VEX_W_TABLE (VEX_W_0F3824_P_2) },
c0f3af97
L
5372 },
5373
592a252b 5374 /* PREFIX_VEX_0F3825 */
c0f3af97 5375 {
592d1631
L
5376 { Bad_Opcode },
5377 { Bad_Opcode },
6c30d220 5378 { VEX_W_TABLE (VEX_W_0F3825_P_2) },
c0f3af97
L
5379 },
5380
592a252b 5381 /* PREFIX_VEX_0F3828 */
c0f3af97 5382 {
592d1631
L
5383 { Bad_Opcode },
5384 { Bad_Opcode },
6c30d220 5385 { VEX_W_TABLE (VEX_W_0F3828_P_2) },
c0f3af97
L
5386 },
5387
592a252b 5388 /* PREFIX_VEX_0F3829 */
c0f3af97 5389 {
592d1631
L
5390 { Bad_Opcode },
5391 { Bad_Opcode },
6c30d220 5392 { VEX_W_TABLE (VEX_W_0F3829_P_2) },
c0f3af97
L
5393 },
5394
592a252b 5395 /* PREFIX_VEX_0F382A */
c0f3af97 5396 {
592d1631
L
5397 { Bad_Opcode },
5398 { Bad_Opcode },
592a252b 5399 { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) },
c0f3af97
L
5400 },
5401
592a252b 5402 /* PREFIX_VEX_0F382B */
c0f3af97 5403 {
592d1631
L
5404 { Bad_Opcode },
5405 { Bad_Opcode },
6c30d220 5406 { VEX_W_TABLE (VEX_W_0F382B_P_2) },
c0f3af97
L
5407 },
5408
592a252b 5409 /* PREFIX_VEX_0F382C */
c0f3af97 5410 {
592d1631
L
5411 { Bad_Opcode },
5412 { Bad_Opcode },
592a252b 5413 { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) },
c0f3af97
L
5414 },
5415
592a252b 5416 /* PREFIX_VEX_0F382D */
c0f3af97 5417 {
592d1631
L
5418 { Bad_Opcode },
5419 { Bad_Opcode },
592a252b 5420 { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) },
c0f3af97
L
5421 },
5422
592a252b 5423 /* PREFIX_VEX_0F382E */
c0f3af97 5424 {
592d1631
L
5425 { Bad_Opcode },
5426 { Bad_Opcode },
592a252b 5427 { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) },
c0f3af97
L
5428 },
5429
592a252b 5430 /* PREFIX_VEX_0F382F */
c0f3af97 5431 {
592d1631
L
5432 { Bad_Opcode },
5433 { Bad_Opcode },
592a252b 5434 { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) },
c0f3af97
L
5435 },
5436
592a252b 5437 /* PREFIX_VEX_0F3830 */
c0f3af97 5438 {
592d1631
L
5439 { Bad_Opcode },
5440 { Bad_Opcode },
6c30d220 5441 { VEX_W_TABLE (VEX_W_0F3830_P_2) },
c0f3af97
L
5442 },
5443
592a252b 5444 /* PREFIX_VEX_0F3831 */
c0f3af97 5445 {
592d1631
L
5446 { Bad_Opcode },
5447 { Bad_Opcode },
6c30d220 5448 { VEX_W_TABLE (VEX_W_0F3831_P_2) },
c0f3af97
L
5449 },
5450
592a252b 5451 /* PREFIX_VEX_0F3832 */
c0f3af97 5452 {
592d1631
L
5453 { Bad_Opcode },
5454 { Bad_Opcode },
6c30d220 5455 { VEX_W_TABLE (VEX_W_0F3832_P_2) },
c0f3af97
L
5456 },
5457
592a252b 5458 /* PREFIX_VEX_0F3833 */
c0f3af97 5459 {
592d1631
L
5460 { Bad_Opcode },
5461 { Bad_Opcode },
6c30d220 5462 { VEX_W_TABLE (VEX_W_0F3833_P_2) },
c0f3af97
L
5463 },
5464
592a252b 5465 /* PREFIX_VEX_0F3834 */
c0f3af97 5466 {
592d1631
L
5467 { Bad_Opcode },
5468 { Bad_Opcode },
6c30d220 5469 { VEX_W_TABLE (VEX_W_0F3834_P_2) },
c0f3af97
L
5470 },
5471
592a252b 5472 /* PREFIX_VEX_0F3835 */
c0f3af97 5473 {
592d1631
L
5474 { Bad_Opcode },
5475 { Bad_Opcode },
6c30d220
L
5476 { VEX_W_TABLE (VEX_W_0F3835_P_2) },
5477 },
5478
5479 /* PREFIX_VEX_0F3836 */
5480 {
5481 { Bad_Opcode },
5482 { Bad_Opcode },
5483 { VEX_LEN_TABLE (VEX_LEN_0F3836_P_2) },
c0f3af97
L
5484 },
5485
592a252b 5486 /* PREFIX_VEX_0F3837 */
c0f3af97 5487 {
592d1631
L
5488 { Bad_Opcode },
5489 { Bad_Opcode },
6c30d220 5490 { VEX_W_TABLE (VEX_W_0F3837_P_2) },
c0f3af97
L
5491 },
5492
592a252b 5493 /* PREFIX_VEX_0F3838 */
c0f3af97 5494 {
592d1631
L
5495 { Bad_Opcode },
5496 { Bad_Opcode },
6c30d220 5497 { VEX_W_TABLE (VEX_W_0F3838_P_2) },
c0f3af97
L
5498 },
5499
592a252b 5500 /* PREFIX_VEX_0F3839 */
c0f3af97 5501 {
592d1631
L
5502 { Bad_Opcode },
5503 { Bad_Opcode },
6c30d220 5504 { VEX_W_TABLE (VEX_W_0F3839_P_2) },
c0f3af97
L
5505 },
5506
592a252b 5507 /* PREFIX_VEX_0F383A */
c0f3af97 5508 {
592d1631
L
5509 { Bad_Opcode },
5510 { Bad_Opcode },
6c30d220 5511 { VEX_W_TABLE (VEX_W_0F383A_P_2) },
c0f3af97
L
5512 },
5513
592a252b 5514 /* PREFIX_VEX_0F383B */
c0f3af97 5515 {
592d1631
L
5516 { Bad_Opcode },
5517 { Bad_Opcode },
6c30d220 5518 { VEX_W_TABLE (VEX_W_0F383B_P_2) },
c0f3af97
L
5519 },
5520
592a252b 5521 /* PREFIX_VEX_0F383C */
c0f3af97 5522 {
592d1631
L
5523 { Bad_Opcode },
5524 { Bad_Opcode },
6c30d220 5525 { VEX_W_TABLE (VEX_W_0F383C_P_2) },
c0f3af97
L
5526 },
5527
592a252b 5528 /* PREFIX_VEX_0F383D */
c0f3af97 5529 {
592d1631
L
5530 { Bad_Opcode },
5531 { Bad_Opcode },
6c30d220 5532 { VEX_W_TABLE (VEX_W_0F383D_P_2) },
c0f3af97
L
5533 },
5534
592a252b 5535 /* PREFIX_VEX_0F383E */
c0f3af97 5536 {
592d1631
L
5537 { Bad_Opcode },
5538 { Bad_Opcode },
6c30d220 5539 { VEX_W_TABLE (VEX_W_0F383E_P_2) },
c0f3af97
L
5540 },
5541
592a252b 5542 /* PREFIX_VEX_0F383F */
c0f3af97 5543 {
592d1631
L
5544 { Bad_Opcode },
5545 { Bad_Opcode },
6c30d220 5546 { VEX_W_TABLE (VEX_W_0F383F_P_2) },
c0f3af97
L
5547 },
5548
592a252b 5549 /* PREFIX_VEX_0F3840 */
c0f3af97 5550 {
592d1631
L
5551 { Bad_Opcode },
5552 { Bad_Opcode },
6c30d220 5553 { VEX_W_TABLE (VEX_W_0F3840_P_2) },
c0f3af97
L
5554 },
5555
592a252b 5556 /* PREFIX_VEX_0F3841 */
c0f3af97 5557 {
592d1631
L
5558 { Bad_Opcode },
5559 { Bad_Opcode },
592a252b 5560 { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) },
c0f3af97
L
5561 },
5562
6c30d220
L
5563 /* PREFIX_VEX_0F3845 */
5564 {
5565 { Bad_Opcode },
5566 { Bad_Opcode },
5567 { "vpsrlv%LW", { XM, Vex, EXx } },
5568 },
5569
5570 /* PREFIX_VEX_0F3846 */
5571 {
5572 { Bad_Opcode },
5573 { Bad_Opcode },
5574 { VEX_W_TABLE (VEX_W_0F3846_P_2) },
5575 },
5576
5577 /* PREFIX_VEX_0F3847 */
5578 {
5579 { Bad_Opcode },
5580 { Bad_Opcode },
5581 { "vpsllv%LW", { XM, Vex, EXx } },
5582 },
5583
5584 /* PREFIX_VEX_0F3858 */
5585 {
5586 { Bad_Opcode },
5587 { Bad_Opcode },
5588 { VEX_W_TABLE (VEX_W_0F3858_P_2) },
5589 },
5590
5591 /* PREFIX_VEX_0F3859 */
5592 {
5593 { Bad_Opcode },
5594 { Bad_Opcode },
5595 { VEX_W_TABLE (VEX_W_0F3859_P_2) },
5596 },
5597
5598 /* PREFIX_VEX_0F385A */
5599 {
5600 { Bad_Opcode },
5601 { Bad_Opcode },
5602 { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) },
5603 },
5604
5605 /* PREFIX_VEX_0F3878 */
5606 {
5607 { Bad_Opcode },
5608 { Bad_Opcode },
5609 { VEX_W_TABLE (VEX_W_0F3878_P_2) },
5610 },
5611
5612 /* PREFIX_VEX_0F3879 */
5613 {
5614 { Bad_Opcode },
5615 { Bad_Opcode },
5616 { VEX_W_TABLE (VEX_W_0F3879_P_2) },
5617 },
5618
5619 /* PREFIX_VEX_0F388C */
5620 {
5621 { Bad_Opcode },
5622 { Bad_Opcode },
f7002f42 5623 { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) },
6c30d220
L
5624 },
5625
5626 /* PREFIX_VEX_0F388E */
5627 {
5628 { Bad_Opcode },
5629 { Bad_Opcode },
f7002f42 5630 { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) },
6c30d220
L
5631 },
5632
5633 /* PREFIX_VEX_0F3890 */
5634 {
5635 { Bad_Opcode },
5636 { Bad_Opcode },
5637 { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex } },
5638 },
5639
5640 /* PREFIX_VEX_0F3891 */
5641 {
5642 { Bad_Opcode },
5643 { Bad_Opcode },
5644 { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ } },
5645 },
5646
5647 /* PREFIX_VEX_0F3892 */
5648 {
5649 { Bad_Opcode },
5650 { Bad_Opcode },
5651 { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex } },
5652 },
5653
5654 /* PREFIX_VEX_0F3893 */
5655 {
5656 { Bad_Opcode },
5657 { Bad_Opcode },
5658 { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ } },
5659 },
5660
592a252b 5661 /* PREFIX_VEX_0F3896 */
a5ff0eb2 5662 {
592d1631
L
5663 { Bad_Opcode },
5664 { Bad_Opcode },
0bfee649 5665 { "vfmaddsub132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
5666 },
5667
592a252b 5668 /* PREFIX_VEX_0F3897 */
a5ff0eb2 5669 {
592d1631
L
5670 { Bad_Opcode },
5671 { Bad_Opcode },
0bfee649 5672 { "vfmsubadd132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
5673 },
5674
592a252b 5675 /* PREFIX_VEX_0F3898 */
a5ff0eb2 5676 {
592d1631
L
5677 { Bad_Opcode },
5678 { Bad_Opcode },
0bfee649 5679 { "vfmadd132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
5680 },
5681
592a252b 5682 /* PREFIX_VEX_0F3899 */
a5ff0eb2 5683 {
592d1631
L
5684 { Bad_Opcode },
5685 { Bad_Opcode },
1c480963 5686 { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
a5ff0eb2
L
5687 },
5688
592a252b 5689 /* PREFIX_VEX_0F389A */
a5ff0eb2 5690 {
592d1631
L
5691 { Bad_Opcode },
5692 { Bad_Opcode },
0bfee649 5693 { "vfmsub132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
5694 },
5695
592a252b 5696 /* PREFIX_VEX_0F389B */
c0f3af97 5697 {
592d1631
L
5698 { Bad_Opcode },
5699 { Bad_Opcode },
1c480963 5700 { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5701 },
5702
592a252b 5703 /* PREFIX_VEX_0F389C */
c0f3af97 5704 {
592d1631
L
5705 { Bad_Opcode },
5706 { Bad_Opcode },
0bfee649 5707 { "vfnmadd132p%XW", { XM, Vex, EXx } },
c0f3af97
L
5708 },
5709
592a252b 5710 /* PREFIX_VEX_0F389D */
c0f3af97 5711 {
592d1631
L
5712 { Bad_Opcode },
5713 { Bad_Opcode },
1c480963 5714 { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5715 },
5716
592a252b 5717 /* PREFIX_VEX_0F389E */
c0f3af97 5718 {
592d1631
L
5719 { Bad_Opcode },
5720 { Bad_Opcode },
0bfee649 5721 { "vfnmsub132p%XW", { XM, Vex, EXx } },
c0f3af97
L
5722 },
5723
592a252b 5724 /* PREFIX_VEX_0F389F */
c0f3af97 5725 {
592d1631
L
5726 { Bad_Opcode },
5727 { Bad_Opcode },
1c480963 5728 { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5729 },
5730
592a252b 5731 /* PREFIX_VEX_0F38A6 */
c0f3af97 5732 {
592d1631
L
5733 { Bad_Opcode },
5734 { Bad_Opcode },
0bfee649 5735 { "vfmaddsub213p%XW", { XM, Vex, EXx } },
592d1631 5736 { Bad_Opcode },
c0f3af97
L
5737 },
5738
592a252b 5739 /* PREFIX_VEX_0F38A7 */
c0f3af97 5740 {
592d1631
L
5741 { Bad_Opcode },
5742 { Bad_Opcode },
0bfee649 5743 { "vfmsubadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
5744 },
5745
592a252b 5746 /* PREFIX_VEX_0F38A8 */
c0f3af97 5747 {
592d1631
L
5748 { Bad_Opcode },
5749 { Bad_Opcode },
0bfee649 5750 { "vfmadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
5751 },
5752
592a252b 5753 /* PREFIX_VEX_0F38A9 */
c0f3af97 5754 {
592d1631
L
5755 { Bad_Opcode },
5756 { Bad_Opcode },
1c480963 5757 { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5758 },
5759
592a252b 5760 /* PREFIX_VEX_0F38AA */
c0f3af97 5761 {
592d1631
L
5762 { Bad_Opcode },
5763 { Bad_Opcode },
0bfee649 5764 { "vfmsub213p%XW", { XM, Vex, EXx } },
c0f3af97
L
5765 },
5766
592a252b 5767 /* PREFIX_VEX_0F38AB */
c0f3af97 5768 {
592d1631
L
5769 { Bad_Opcode },
5770 { Bad_Opcode },
1c480963 5771 { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5772 },
5773
592a252b 5774 /* PREFIX_VEX_0F38AC */
c0f3af97 5775 {
592d1631
L
5776 { Bad_Opcode },
5777 { Bad_Opcode },
0bfee649 5778 { "vfnmadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
5779 },
5780
592a252b 5781 /* PREFIX_VEX_0F38AD */
c0f3af97 5782 {
592d1631
L
5783 { Bad_Opcode },
5784 { Bad_Opcode },
1c480963 5785 { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5786 },
5787
592a252b 5788 /* PREFIX_VEX_0F38AE */
c0f3af97 5789 {
592d1631
L
5790 { Bad_Opcode },
5791 { Bad_Opcode },
0bfee649 5792 { "vfnmsub213p%XW", { XM, Vex, EXx } },
c0f3af97
L
5793 },
5794
592a252b 5795 /* PREFIX_VEX_0F38AF */
c0f3af97 5796 {
592d1631
L
5797 { Bad_Opcode },
5798 { Bad_Opcode },
1c480963 5799 { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5800 },
5801
592a252b 5802 /* PREFIX_VEX_0F38B6 */
c0f3af97 5803 {
592d1631
L
5804 { Bad_Opcode },
5805 { Bad_Opcode },
0bfee649 5806 { "vfmaddsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
5807 },
5808
592a252b 5809 /* PREFIX_VEX_0F38B7 */
c0f3af97 5810 {
592d1631
L
5811 { Bad_Opcode },
5812 { Bad_Opcode },
0bfee649 5813 { "vfmsubadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
5814 },
5815
592a252b 5816 /* PREFIX_VEX_0F38B8 */
c0f3af97 5817 {
592d1631
L
5818 { Bad_Opcode },
5819 { Bad_Opcode },
0bfee649 5820 { "vfmadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
5821 },
5822
592a252b 5823 /* PREFIX_VEX_0F38B9 */
c0f3af97 5824 {
592d1631
L
5825 { Bad_Opcode },
5826 { Bad_Opcode },
1c480963 5827 { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5828 },
5829
592a252b 5830 /* PREFIX_VEX_0F38BA */
c0f3af97 5831 {
592d1631
L
5832 { Bad_Opcode },
5833 { Bad_Opcode },
0bfee649 5834 { "vfmsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
5835 },
5836
592a252b 5837 /* PREFIX_VEX_0F38BB */
c0f3af97 5838 {
592d1631
L
5839 { Bad_Opcode },
5840 { Bad_Opcode },
1c480963 5841 { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5842 },
5843
592a252b 5844 /* PREFIX_VEX_0F38BC */
c0f3af97 5845 {
592d1631
L
5846 { Bad_Opcode },
5847 { Bad_Opcode },
0bfee649 5848 { "vfnmadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
5849 },
5850
592a252b 5851 /* PREFIX_VEX_0F38BD */
c0f3af97 5852 {
592d1631
L
5853 { Bad_Opcode },
5854 { Bad_Opcode },
1c480963 5855 { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5856 },
5857
592a252b 5858 /* PREFIX_VEX_0F38BE */
c0f3af97 5859 {
592d1631
L
5860 { Bad_Opcode },
5861 { Bad_Opcode },
0bfee649 5862 { "vfnmsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
5863 },
5864
592a252b 5865 /* PREFIX_VEX_0F38BF */
c0f3af97 5866 {
592d1631
L
5867 { Bad_Opcode },
5868 { Bad_Opcode },
1c480963 5869 { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5870 },
5871
592a252b 5872 /* PREFIX_VEX_0F38DB */
c0f3af97 5873 {
592d1631
L
5874 { Bad_Opcode },
5875 { Bad_Opcode },
592a252b 5876 { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
c0f3af97
L
5877 },
5878
592a252b 5879 /* PREFIX_VEX_0F38DC */
c0f3af97 5880 {
592d1631
L
5881 { Bad_Opcode },
5882 { Bad_Opcode },
592a252b 5883 { VEX_LEN_TABLE (VEX_LEN_0F38DC_P_2) },
c0f3af97
L
5884 },
5885
592a252b 5886 /* PREFIX_VEX_0F38DD */
c0f3af97 5887 {
592d1631
L
5888 { Bad_Opcode },
5889 { Bad_Opcode },
592a252b 5890 { VEX_LEN_TABLE (VEX_LEN_0F38DD_P_2) },
c0f3af97
L
5891 },
5892
592a252b 5893 /* PREFIX_VEX_0F38DE */
c0f3af97 5894 {
592d1631
L
5895 { Bad_Opcode },
5896 { Bad_Opcode },
592a252b 5897 { VEX_LEN_TABLE (VEX_LEN_0F38DE_P_2) },
c0f3af97
L
5898 },
5899
592a252b 5900 /* PREFIX_VEX_0F38DF */
c0f3af97 5901 {
592d1631
L
5902 { Bad_Opcode },
5903 { Bad_Opcode },
592a252b 5904 { VEX_LEN_TABLE (VEX_LEN_0F38DF_P_2) },
c0f3af97
L
5905 },
5906
f12dc422
L
5907 /* PREFIX_VEX_0F38F2 */
5908 {
5909 { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
5910 },
5911
5912 /* PREFIX_VEX_0F38F3_REG_1 */
5913 {
5914 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
5915 },
5916
5917 /* PREFIX_VEX_0F38F3_REG_2 */
5918 {
5919 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
5920 },
5921
5922 /* PREFIX_VEX_0F38F3_REG_3 */
5923 {
5924 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
5925 },
5926
6c30d220
L
5927 /* PREFIX_VEX_0F38F5 */
5928 {
5929 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) },
5930 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) },
5931 { Bad_Opcode },
5932 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) },
5933 },
5934
5935 /* PREFIX_VEX_0F38F6 */
5936 {
5937 { Bad_Opcode },
5938 { Bad_Opcode },
5939 { Bad_Opcode },
5940 { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) },
5941 },
5942
f12dc422
L
5943 /* PREFIX_VEX_0F38F7 */
5944 {
5945 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
6c30d220
L
5946 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) },
5947 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) },
5948 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) },
5949 },
5950
5951 /* PREFIX_VEX_0F3A00 */
5952 {
5953 { Bad_Opcode },
5954 { Bad_Opcode },
5955 { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) },
5956 },
5957
5958 /* PREFIX_VEX_0F3A01 */
5959 {
5960 { Bad_Opcode },
5961 { Bad_Opcode },
5962 { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) },
5963 },
5964
5965 /* PREFIX_VEX_0F3A02 */
5966 {
5967 { Bad_Opcode },
5968 { Bad_Opcode },
5969 { VEX_W_TABLE (VEX_W_0F3A02_P_2) },
f12dc422
L
5970 },
5971
592a252b 5972 /* PREFIX_VEX_0F3A04 */
c0f3af97 5973 {
592d1631
L
5974 { Bad_Opcode },
5975 { Bad_Opcode },
592a252b 5976 { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
c0f3af97
L
5977 },
5978
592a252b 5979 /* PREFIX_VEX_0F3A05 */
c0f3af97 5980 {
592d1631
L
5981 { Bad_Opcode },
5982 { Bad_Opcode },
592a252b 5983 { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
c0f3af97
L
5984 },
5985
592a252b 5986 /* PREFIX_VEX_0F3A06 */
c0f3af97 5987 {
592d1631
L
5988 { Bad_Opcode },
5989 { Bad_Opcode },
592a252b 5990 { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
c0f3af97
L
5991 },
5992
592a252b 5993 /* PREFIX_VEX_0F3A08 */
c0f3af97 5994 {
592d1631
L
5995 { Bad_Opcode },
5996 { Bad_Opcode },
592a252b 5997 { VEX_W_TABLE (VEX_W_0F3A08_P_2) },
c0f3af97
L
5998 },
5999
592a252b 6000 /* PREFIX_VEX_0F3A09 */
c0f3af97 6001 {
592d1631
L
6002 { Bad_Opcode },
6003 { Bad_Opcode },
592a252b 6004 { VEX_W_TABLE (VEX_W_0F3A09_P_2) },
c0f3af97
L
6005 },
6006
592a252b 6007 /* PREFIX_VEX_0F3A0A */
c0f3af97 6008 {
592d1631
L
6009 { Bad_Opcode },
6010 { Bad_Opcode },
592a252b 6011 { VEX_LEN_TABLE (VEX_LEN_0F3A0A_P_2) },
0bfee649
L
6012 },
6013
592a252b 6014 /* PREFIX_VEX_0F3A0B */
0bfee649 6015 {
592d1631
L
6016 { Bad_Opcode },
6017 { Bad_Opcode },
592a252b 6018 { VEX_LEN_TABLE (VEX_LEN_0F3A0B_P_2) },
0bfee649
L
6019 },
6020
592a252b 6021 /* PREFIX_VEX_0F3A0C */
0bfee649 6022 {
592d1631
L
6023 { Bad_Opcode },
6024 { Bad_Opcode },
592a252b 6025 { VEX_W_TABLE (VEX_W_0F3A0C_P_2) },
0bfee649
L
6026 },
6027
592a252b 6028 /* PREFIX_VEX_0F3A0D */
0bfee649 6029 {
592d1631
L
6030 { Bad_Opcode },
6031 { Bad_Opcode },
592a252b 6032 { VEX_W_TABLE (VEX_W_0F3A0D_P_2) },
c0f3af97
L
6033 },
6034
592a252b 6035 /* PREFIX_VEX_0F3A0E */
0bfee649 6036 {
592d1631
L
6037 { Bad_Opcode },
6038 { Bad_Opcode },
6c30d220 6039 { VEX_W_TABLE (VEX_W_0F3A0E_P_2) },
0bfee649
L
6040 },
6041
592a252b 6042 /* PREFIX_VEX_0F3A0F */
0bfee649 6043 {
592d1631
L
6044 { Bad_Opcode },
6045 { Bad_Opcode },
6c30d220 6046 { VEX_W_TABLE (VEX_W_0F3A0F_P_2) },
0bfee649
L
6047 },
6048
592a252b 6049 /* PREFIX_VEX_0F3A14 */
0bfee649 6050 {
592d1631
L
6051 { Bad_Opcode },
6052 { Bad_Opcode },
592a252b 6053 { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
0bfee649
L
6054 },
6055
592a252b 6056 /* PREFIX_VEX_0F3A15 */
0bfee649 6057 {
592d1631
L
6058 { Bad_Opcode },
6059 { Bad_Opcode },
592a252b 6060 { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
0bfee649
L
6061 },
6062
592a252b 6063 /* PREFIX_VEX_0F3A16 */
c0f3af97 6064 {
592d1631
L
6065 { Bad_Opcode },
6066 { Bad_Opcode },
592a252b 6067 { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
c0f3af97
L
6068 },
6069
592a252b 6070 /* PREFIX_VEX_0F3A17 */
c0f3af97 6071 {
592d1631
L
6072 { Bad_Opcode },
6073 { Bad_Opcode },
592a252b 6074 { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
c0f3af97
L
6075 },
6076
592a252b 6077 /* PREFIX_VEX_0F3A18 */
c0f3af97 6078 {
592d1631
L
6079 { Bad_Opcode },
6080 { Bad_Opcode },
592a252b 6081 { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
c0f3af97
L
6082 },
6083
592a252b 6084 /* PREFIX_VEX_0F3A19 */
c0f3af97 6085 {
592d1631
L
6086 { Bad_Opcode },
6087 { Bad_Opcode },
592a252b 6088 { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
c0f3af97
L
6089 },
6090
592a252b 6091 /* PREFIX_VEX_0F3A1D */
c7b8aa3a
L
6092 {
6093 { Bad_Opcode },
6094 { Bad_Opcode },
6095 { "vcvtps2ph", { EXxmmq, XM, Ib } },
6096 },
6097
592a252b 6098 /* PREFIX_VEX_0F3A20 */
c0f3af97 6099 {
592d1631
L
6100 { Bad_Opcode },
6101 { Bad_Opcode },
592a252b 6102 { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
c0f3af97
L
6103 },
6104
592a252b 6105 /* PREFIX_VEX_0F3A21 */
c0f3af97 6106 {
592d1631
L
6107 { Bad_Opcode },
6108 { Bad_Opcode },
592a252b 6109 { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
c0f3af97
L
6110 },
6111
592a252b 6112 /* PREFIX_VEX_0F3A22 */
0bfee649 6113 {
592d1631
L
6114 { Bad_Opcode },
6115 { Bad_Opcode },
592a252b 6116 { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
0bfee649
L
6117 },
6118
43234a1e
L
6119 /* PREFIX_VEX_0F3A30 */
6120 {
6121 { Bad_Opcode },
6122 { Bad_Opcode },
6123 { VEX_LEN_TABLE (VEX_LEN_0F3A30_P_2) },
6124 },
6125
6126 /* PREFIX_VEX_0F3A32 */
6127 {
6128 { Bad_Opcode },
6129 { Bad_Opcode },
6130 { VEX_LEN_TABLE (VEX_LEN_0F3A32_P_2) },
6131 },
6132
6c30d220
L
6133 /* PREFIX_VEX_0F3A38 */
6134 {
6135 { Bad_Opcode },
6136 { Bad_Opcode },
6137 { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) },
6138 },
6139
6140 /* PREFIX_VEX_0F3A39 */
6141 {
6142 { Bad_Opcode },
6143 { Bad_Opcode },
6144 { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) },
6145 },
6146
592a252b 6147 /* PREFIX_VEX_0F3A40 */
c0f3af97 6148 {
592d1631
L
6149 { Bad_Opcode },
6150 { Bad_Opcode },
592a252b 6151 { VEX_W_TABLE (VEX_W_0F3A40_P_2) },
c0f3af97
L
6152 },
6153
592a252b 6154 /* PREFIX_VEX_0F3A41 */
c0f3af97 6155 {
592d1631
L
6156 { Bad_Opcode },
6157 { Bad_Opcode },
592a252b 6158 { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
c0f3af97
L
6159 },
6160
592a252b 6161 /* PREFIX_VEX_0F3A42 */
c0f3af97 6162 {
592d1631
L
6163 { Bad_Opcode },
6164 { Bad_Opcode },
6c30d220 6165 { VEX_W_TABLE (VEX_W_0F3A42_P_2) },
c0f3af97
L
6166 },
6167
592a252b 6168 /* PREFIX_VEX_0F3A44 */
ce2f5b3c 6169 {
592d1631
L
6170 { Bad_Opcode },
6171 { Bad_Opcode },
592a252b 6172 { VEX_LEN_TABLE (VEX_LEN_0F3A44_P_2) },
ce2f5b3c
L
6173 },
6174
6c30d220
L
6175 /* PREFIX_VEX_0F3A46 */
6176 {
6177 { Bad_Opcode },
6178 { Bad_Opcode },
6179 { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) },
6180 },
6181
592a252b 6182 /* PREFIX_VEX_0F3A48 */
a683cc34
SP
6183 {
6184 { Bad_Opcode },
6185 { Bad_Opcode },
592a252b 6186 { VEX_W_TABLE (VEX_W_0F3A48_P_2) },
a683cc34
SP
6187 },
6188
592a252b 6189 /* PREFIX_VEX_0F3A49 */
a683cc34
SP
6190 {
6191 { Bad_Opcode },
6192 { Bad_Opcode },
592a252b 6193 { VEX_W_TABLE (VEX_W_0F3A49_P_2) },
a683cc34
SP
6194 },
6195
592a252b 6196 /* PREFIX_VEX_0F3A4A */
c0f3af97 6197 {
592d1631
L
6198 { Bad_Opcode },
6199 { Bad_Opcode },
592a252b 6200 { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
c0f3af97
L
6201 },
6202
592a252b 6203 /* PREFIX_VEX_0F3A4B */
c0f3af97 6204 {
592d1631
L
6205 { Bad_Opcode },
6206 { Bad_Opcode },
592a252b 6207 { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
c0f3af97
L
6208 },
6209
592a252b 6210 /* PREFIX_VEX_0F3A4C */
c0f3af97 6211 {
592d1631
L
6212 { Bad_Opcode },
6213 { Bad_Opcode },
6c30d220 6214 { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
c0f3af97
L
6215 },
6216
592a252b 6217 /* PREFIX_VEX_0F3A5C */
922d8de8 6218 {
592d1631
L
6219 { Bad_Opcode },
6220 { Bad_Opcode },
206c2556 6221 { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6222 },
6223
592a252b 6224 /* PREFIX_VEX_0F3A5D */
922d8de8 6225 {
592d1631
L
6226 { Bad_Opcode },
6227 { Bad_Opcode },
206c2556 6228 { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6229 },
6230
592a252b 6231 /* PREFIX_VEX_0F3A5E */
922d8de8 6232 {
592d1631
L
6233 { Bad_Opcode },
6234 { Bad_Opcode },
206c2556 6235 { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6236 },
6237
592a252b 6238 /* PREFIX_VEX_0F3A5F */
922d8de8 6239 {
592d1631
L
6240 { Bad_Opcode },
6241 { Bad_Opcode },
206c2556 6242 { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6243 },
6244
592a252b 6245 /* PREFIX_VEX_0F3A60 */
c0f3af97 6246 {
592d1631
L
6247 { Bad_Opcode },
6248 { Bad_Opcode },
592a252b 6249 { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
592d1631 6250 { Bad_Opcode },
c0f3af97
L
6251 },
6252
592a252b 6253 /* PREFIX_VEX_0F3A61 */
c0f3af97 6254 {
592d1631
L
6255 { Bad_Opcode },
6256 { Bad_Opcode },
592a252b 6257 { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
c0f3af97
L
6258 },
6259
592a252b 6260 /* PREFIX_VEX_0F3A62 */
c0f3af97 6261 {
592d1631
L
6262 { Bad_Opcode },
6263 { Bad_Opcode },
592a252b 6264 { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
c0f3af97
L
6265 },
6266
592a252b 6267 /* PREFIX_VEX_0F3A63 */
c0f3af97 6268 {
592d1631
L
6269 { Bad_Opcode },
6270 { Bad_Opcode },
592a252b 6271 { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
c0f3af97 6272 },
a5ff0eb2 6273
592a252b 6274 /* PREFIX_VEX_0F3A68 */
922d8de8 6275 {
592d1631
L
6276 { Bad_Opcode },
6277 { Bad_Opcode },
206c2556 6278 { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6279 },
6280
592a252b 6281 /* PREFIX_VEX_0F3A69 */
922d8de8 6282 {
592d1631
L
6283 { Bad_Opcode },
6284 { Bad_Opcode },
206c2556 6285 { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6286 },
6287
592a252b 6288 /* PREFIX_VEX_0F3A6A */
922d8de8 6289 {
592d1631
L
6290 { Bad_Opcode },
6291 { Bad_Opcode },
592a252b 6292 { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) },
922d8de8
DR
6293 },
6294
592a252b 6295 /* PREFIX_VEX_0F3A6B */
922d8de8 6296 {
592d1631
L
6297 { Bad_Opcode },
6298 { Bad_Opcode },
592a252b 6299 { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) },
922d8de8
DR
6300 },
6301
592a252b 6302 /* PREFIX_VEX_0F3A6C */
922d8de8 6303 {
592d1631
L
6304 { Bad_Opcode },
6305 { Bad_Opcode },
206c2556 6306 { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6307 },
6308
592a252b 6309 /* PREFIX_VEX_0F3A6D */
922d8de8 6310 {
592d1631
L
6311 { Bad_Opcode },
6312 { Bad_Opcode },
206c2556 6313 { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6314 },
6315
592a252b 6316 /* PREFIX_VEX_0F3A6E */
922d8de8 6317 {
592d1631
L
6318 { Bad_Opcode },
6319 { Bad_Opcode },
592a252b 6320 { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) },
922d8de8
DR
6321 },
6322
592a252b 6323 /* PREFIX_VEX_0F3A6F */
922d8de8 6324 {
592d1631
L
6325 { Bad_Opcode },
6326 { Bad_Opcode },
592a252b 6327 { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) },
922d8de8
DR
6328 },
6329
592a252b 6330 /* PREFIX_VEX_0F3A78 */
922d8de8 6331 {
592d1631
L
6332 { Bad_Opcode },
6333 { Bad_Opcode },
206c2556 6334 { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6335 },
6336
592a252b 6337 /* PREFIX_VEX_0F3A79 */
922d8de8 6338 {
592d1631
L
6339 { Bad_Opcode },
6340 { Bad_Opcode },
206c2556 6341 { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6342 },
6343
592a252b 6344 /* PREFIX_VEX_0F3A7A */
922d8de8 6345 {
592d1631
L
6346 { Bad_Opcode },
6347 { Bad_Opcode },
592a252b 6348 { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) },
922d8de8
DR
6349 },
6350
592a252b 6351 /* PREFIX_VEX_0F3A7B */
922d8de8 6352 {
592d1631
L
6353 { Bad_Opcode },
6354 { Bad_Opcode },
592a252b 6355 { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) },
922d8de8
DR
6356 },
6357
592a252b 6358 /* PREFIX_VEX_0F3A7C */
922d8de8 6359 {
592d1631
L
6360 { Bad_Opcode },
6361 { Bad_Opcode },
206c2556 6362 { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631 6363 { Bad_Opcode },
922d8de8
DR
6364 },
6365
592a252b 6366 /* PREFIX_VEX_0F3A7D */
922d8de8 6367 {
592d1631
L
6368 { Bad_Opcode },
6369 { Bad_Opcode },
206c2556 6370 { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6371 },
6372
592a252b 6373 /* PREFIX_VEX_0F3A7E */
922d8de8 6374 {
592d1631
L
6375 { Bad_Opcode },
6376 { Bad_Opcode },
592a252b 6377 { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) },
922d8de8
DR
6378 },
6379
592a252b 6380 /* PREFIX_VEX_0F3A7F */
922d8de8 6381 {
592d1631
L
6382 { Bad_Opcode },
6383 { Bad_Opcode },
592a252b 6384 { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) },
922d8de8
DR
6385 },
6386
592a252b 6387 /* PREFIX_VEX_0F3ADF */
a5ff0eb2 6388 {
592d1631
L
6389 { Bad_Opcode },
6390 { Bad_Opcode },
592a252b 6391 { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
a5ff0eb2 6392 },
6c30d220
L
6393
6394 /* PREFIX_VEX_0F3AF0 */
6395 {
6396 { Bad_Opcode },
6397 { Bad_Opcode },
6398 { Bad_Opcode },
6399 { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) },
6400 },
43234a1e
L
6401
6402#define NEED_PREFIX_TABLE
6403#include "i386-dis-evex.h"
6404#undef NEED_PREFIX_TABLE
c0f3af97
L
6405};
6406
6407static const struct dis386 x86_64_table[][2] = {
6408 /* X86_64_06 */
6409 {
d9e3625e 6410 { "pushP", { es } },
c0f3af97
L
6411 },
6412
6413 /* X86_64_07 */
6414 {
d9e3625e 6415 { "popP", { es } },
c0f3af97
L
6416 },
6417
6418 /* X86_64_0D */
6419 {
d9e3625e 6420 { "pushP", { cs } },
c0f3af97
L
6421 },
6422
6423 /* X86_64_16 */
6424 {
d9e3625e 6425 { "pushP", { ss } },
c0f3af97
L
6426 },
6427
6428 /* X86_64_17 */
6429 {
d9e3625e 6430 { "popP", { ss } },
c0f3af97
L
6431 },
6432
6433 /* X86_64_1E */
6434 {
d9e3625e 6435 { "pushP", { ds } },
c0f3af97
L
6436 },
6437
6438 /* X86_64_1F */
6439 {
d9e3625e 6440 { "popP", { ds } },
c0f3af97
L
6441 },
6442
6443 /* X86_64_27 */
6444 {
6445 { "daa", { XX } },
c0f3af97
L
6446 },
6447
6448 /* X86_64_2F */
6449 {
6450 { "das", { XX } },
c0f3af97
L
6451 },
6452
6453 /* X86_64_37 */
6454 {
6455 { "aaa", { XX } },
c0f3af97
L
6456 },
6457
6458 /* X86_64_3F */
6459 {
6460 { "aas", { XX } },
c0f3af97
L
6461 },
6462
6463 /* X86_64_60 */
6464 {
d9e3625e 6465 { "pushaP", { XX } },
c0f3af97
L
6466 },
6467
6468 /* X86_64_61 */
6469 {
d9e3625e 6470 { "popaP", { XX } },
c0f3af97
L
6471 },
6472
6473 /* X86_64_62 */
6474 {
6475 { MOD_TABLE (MOD_62_32BIT) },
43234a1e 6476 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
6477 },
6478
6479 /* X86_64_63 */
6480 {
6481 { "arpl", { Ew, Gw } },
6482 { "movs{lq|xd}", { Gv, Ed } },
6483 },
6484
6485 /* X86_64_6D */
6486 {
6487 { "ins{R|}", { Yzr, indirDX } },
6488 { "ins{G|}", { Yzr, indirDX } },
6489 },
6490
6491 /* X86_64_6F */
6492 {
6493 { "outs{R|}", { indirDXr, Xz } },
6494 { "outs{G|}", { indirDXr, Xz } },
6495 },
6496
6497 /* X86_64_9A */
6498 {
6499 { "Jcall{T|}", { Ap } },
c0f3af97
L
6500 },
6501
6502 /* X86_64_C4 */
6503 {
6504 { MOD_TABLE (MOD_C4_32BIT) },
6505 { VEX_C4_TABLE (VEX_0F) },
6506 },
6507
6508 /* X86_64_C5 */
6509 {
6510 { MOD_TABLE (MOD_C5_32BIT) },
6511 { VEX_C5_TABLE (VEX_0F) },
6512 },
6513
6514 /* X86_64_CE */
6515 {
6516 { "into", { XX } },
c0f3af97
L
6517 },
6518
6519 /* X86_64_D4 */
6520 {
e3949f17 6521 { "aam", { Ib } },
c0f3af97
L
6522 },
6523
6524 /* X86_64_D5 */
6525 {
e3949f17 6526 { "aad", { Ib } },
c0f3af97
L
6527 },
6528
6529 /* X86_64_EA */
6530 {
6531 { "Jjmp{T|}", { Ap } },
c0f3af97
L
6532 },
6533
6534 /* X86_64_0F01_REG_0 */
6535 {
6536 { "sgdt{Q|IQ}", { M } },
6537 { "sgdt", { M } },
6538 },
6539
6540 /* X86_64_0F01_REG_1 */
6541 {
6542 { "sidt{Q|IQ}", { M } },
6543 { "sidt", { M } },
6544 },
6545
6546 /* X86_64_0F01_REG_2 */
6547 {
6548 { "lgdt{Q|Q}", { M } },
6549 { "lgdt", { M } },
6550 },
6551
6552 /* X86_64_0F01_REG_3 */
6553 {
6554 { "lidt{Q|Q}", { M } },
6555 { "lidt", { M } },
6556 },
6557};
6558
6559static const struct dis386 three_byte_table[][256] = {
c1e679ec
DR
6560
6561 /* THREE_BYTE_0F38 */
c0f3af97
L
6562 {
6563 /* 00 */
c1e679ec
DR
6564 { "pshufb", { MX, EM } },
6565 { "phaddw", { MX, EM } },
6566 { "phaddd", { MX, EM } },
6567 { "phaddsw", { MX, EM } },
6568 { "pmaddubsw", { MX, EM } },
6569 { "phsubw", { MX, EM } },
6570 { "phsubd", { MX, EM } },
6571 { "phsubsw", { MX, EM } },
c0f3af97 6572 /* 08 */
c1e679ec
DR
6573 { "psignb", { MX, EM } },
6574 { "psignw", { MX, EM } },
6575 { "psignd", { MX, EM } },
6576 { "pmulhrsw", { MX, EM } },
592d1631
L
6577 { Bad_Opcode },
6578 { Bad_Opcode },
6579 { Bad_Opcode },
6580 { Bad_Opcode },
f88c9eb0
SP
6581 /* 10 */
6582 { PREFIX_TABLE (PREFIX_0F3810) },
592d1631
L
6583 { Bad_Opcode },
6584 { Bad_Opcode },
6585 { Bad_Opcode },
f88c9eb0
SP
6586 { PREFIX_TABLE (PREFIX_0F3814) },
6587 { PREFIX_TABLE (PREFIX_0F3815) },
592d1631 6588 { Bad_Opcode },
f88c9eb0
SP
6589 { PREFIX_TABLE (PREFIX_0F3817) },
6590 /* 18 */
592d1631
L
6591 { Bad_Opcode },
6592 { Bad_Opcode },
6593 { Bad_Opcode },
6594 { Bad_Opcode },
f88c9eb0
SP
6595 { "pabsb", { MX, EM } },
6596 { "pabsw", { MX, EM } },
6597 { "pabsd", { MX, EM } },
592d1631 6598 { Bad_Opcode },
f88c9eb0
SP
6599 /* 20 */
6600 { PREFIX_TABLE (PREFIX_0F3820) },
6601 { PREFIX_TABLE (PREFIX_0F3821) },
6602 { PREFIX_TABLE (PREFIX_0F3822) },
6603 { PREFIX_TABLE (PREFIX_0F3823) },
6604 { PREFIX_TABLE (PREFIX_0F3824) },
6605 { PREFIX_TABLE (PREFIX_0F3825) },
592d1631
L
6606 { Bad_Opcode },
6607 { Bad_Opcode },
f88c9eb0
SP
6608 /* 28 */
6609 { PREFIX_TABLE (PREFIX_0F3828) },
6610 { PREFIX_TABLE (PREFIX_0F3829) },
6611 { PREFIX_TABLE (PREFIX_0F382A) },
6612 { PREFIX_TABLE (PREFIX_0F382B) },
592d1631
L
6613 { Bad_Opcode },
6614 { Bad_Opcode },
6615 { Bad_Opcode },
6616 { Bad_Opcode },
f88c9eb0
SP
6617 /* 30 */
6618 { PREFIX_TABLE (PREFIX_0F3830) },
6619 { PREFIX_TABLE (PREFIX_0F3831) },
6620 { PREFIX_TABLE (PREFIX_0F3832) },
6621 { PREFIX_TABLE (PREFIX_0F3833) },
6622 { PREFIX_TABLE (PREFIX_0F3834) },
6623 { PREFIX_TABLE (PREFIX_0F3835) },
592d1631 6624 { Bad_Opcode },
f88c9eb0
SP
6625 { PREFIX_TABLE (PREFIX_0F3837) },
6626 /* 38 */
6627 { PREFIX_TABLE (PREFIX_0F3838) },
6628 { PREFIX_TABLE (PREFIX_0F3839) },
6629 { PREFIX_TABLE (PREFIX_0F383A) },
6630 { PREFIX_TABLE (PREFIX_0F383B) },
6631 { PREFIX_TABLE (PREFIX_0F383C) },
6632 { PREFIX_TABLE (PREFIX_0F383D) },
6633 { PREFIX_TABLE (PREFIX_0F383E) },
6634 { PREFIX_TABLE (PREFIX_0F383F) },
6635 /* 40 */
6636 { PREFIX_TABLE (PREFIX_0F3840) },
6637 { PREFIX_TABLE (PREFIX_0F3841) },
592d1631
L
6638 { Bad_Opcode },
6639 { Bad_Opcode },
6640 { Bad_Opcode },
6641 { Bad_Opcode },
6642 { Bad_Opcode },
6643 { Bad_Opcode },
f88c9eb0 6644 /* 48 */
592d1631
L
6645 { Bad_Opcode },
6646 { Bad_Opcode },
6647 { Bad_Opcode },
6648 { Bad_Opcode },
6649 { Bad_Opcode },
6650 { Bad_Opcode },
6651 { Bad_Opcode },
6652 { Bad_Opcode },
f88c9eb0 6653 /* 50 */
592d1631
L
6654 { Bad_Opcode },
6655 { Bad_Opcode },
6656 { Bad_Opcode },
6657 { Bad_Opcode },
6658 { Bad_Opcode },
6659 { Bad_Opcode },
6660 { Bad_Opcode },
6661 { Bad_Opcode },
f88c9eb0 6662 /* 58 */
592d1631
L
6663 { Bad_Opcode },
6664 { Bad_Opcode },
6665 { Bad_Opcode },
6666 { Bad_Opcode },
6667 { Bad_Opcode },
6668 { Bad_Opcode },
6669 { Bad_Opcode },
6670 { Bad_Opcode },
f88c9eb0 6671 /* 60 */
592d1631
L
6672 { Bad_Opcode },
6673 { Bad_Opcode },
6674 { Bad_Opcode },
6675 { Bad_Opcode },
6676 { Bad_Opcode },
6677 { Bad_Opcode },
6678 { Bad_Opcode },
6679 { Bad_Opcode },
f88c9eb0 6680 /* 68 */
592d1631
L
6681 { Bad_Opcode },
6682 { Bad_Opcode },
6683 { Bad_Opcode },
6684 { Bad_Opcode },
6685 { Bad_Opcode },
6686 { Bad_Opcode },
6687 { Bad_Opcode },
6688 { Bad_Opcode },
f88c9eb0 6689 /* 70 */
592d1631
L
6690 { Bad_Opcode },
6691 { Bad_Opcode },
6692 { Bad_Opcode },
6693 { Bad_Opcode },
6694 { Bad_Opcode },
6695 { Bad_Opcode },
6696 { Bad_Opcode },
6697 { Bad_Opcode },
f88c9eb0 6698 /* 78 */
592d1631
L
6699 { Bad_Opcode },
6700 { Bad_Opcode },
6701 { Bad_Opcode },
6702 { Bad_Opcode },
6703 { Bad_Opcode },
6704 { Bad_Opcode },
6705 { Bad_Opcode },
6706 { Bad_Opcode },
f88c9eb0
SP
6707 /* 80 */
6708 { PREFIX_TABLE (PREFIX_0F3880) },
6709 { PREFIX_TABLE (PREFIX_0F3881) },
6c30d220 6710 { PREFIX_TABLE (PREFIX_0F3882) },
592d1631
L
6711 { Bad_Opcode },
6712 { Bad_Opcode },
6713 { Bad_Opcode },
6714 { Bad_Opcode },
6715 { Bad_Opcode },
f88c9eb0 6716 /* 88 */
592d1631
L
6717 { Bad_Opcode },
6718 { Bad_Opcode },
6719 { Bad_Opcode },
6720 { Bad_Opcode },
6721 { Bad_Opcode },
6722 { Bad_Opcode },
6723 { Bad_Opcode },
6724 { Bad_Opcode },
f88c9eb0 6725 /* 90 */
592d1631
L
6726 { Bad_Opcode },
6727 { Bad_Opcode },
6728 { Bad_Opcode },
6729 { Bad_Opcode },
6730 { Bad_Opcode },
6731 { Bad_Opcode },
6732 { Bad_Opcode },
6733 { Bad_Opcode },
f88c9eb0 6734 /* 98 */
592d1631
L
6735 { Bad_Opcode },
6736 { Bad_Opcode },
6737 { Bad_Opcode },
6738 { Bad_Opcode },
6739 { Bad_Opcode },
6740 { Bad_Opcode },
6741 { Bad_Opcode },
6742 { Bad_Opcode },
f88c9eb0 6743 /* a0 */
592d1631
L
6744 { Bad_Opcode },
6745 { Bad_Opcode },
6746 { Bad_Opcode },
6747 { Bad_Opcode },
6748 { Bad_Opcode },
6749 { Bad_Opcode },
6750 { Bad_Opcode },
6751 { Bad_Opcode },
f88c9eb0 6752 /* a8 */
592d1631
L
6753 { Bad_Opcode },
6754 { Bad_Opcode },
6755 { Bad_Opcode },
6756 { Bad_Opcode },
6757 { Bad_Opcode },
6758 { Bad_Opcode },
6759 { Bad_Opcode },
6760 { Bad_Opcode },
f88c9eb0 6761 /* b0 */
592d1631
L
6762 { Bad_Opcode },
6763 { Bad_Opcode },
6764 { Bad_Opcode },
6765 { Bad_Opcode },
6766 { Bad_Opcode },
6767 { Bad_Opcode },
6768 { Bad_Opcode },
6769 { Bad_Opcode },
f88c9eb0 6770 /* b8 */
592d1631
L
6771 { Bad_Opcode },
6772 { Bad_Opcode },
6773 { Bad_Opcode },
6774 { Bad_Opcode },
6775 { Bad_Opcode },
6776 { Bad_Opcode },
6777 { Bad_Opcode },
6778 { Bad_Opcode },
f88c9eb0 6779 /* c0 */
592d1631
L
6780 { Bad_Opcode },
6781 { Bad_Opcode },
6782 { Bad_Opcode },
6783 { Bad_Opcode },
6784 { Bad_Opcode },
6785 { Bad_Opcode },
6786 { Bad_Opcode },
6787 { Bad_Opcode },
f88c9eb0 6788 /* c8 */
a0046408
L
6789 { PREFIX_TABLE (PREFIX_0F38C8) },
6790 { PREFIX_TABLE (PREFIX_0F38C9) },
6791 { PREFIX_TABLE (PREFIX_0F38CA) },
6792 { PREFIX_TABLE (PREFIX_0F38CB) },
6793 { PREFIX_TABLE (PREFIX_0F38CC) },
6794 { PREFIX_TABLE (PREFIX_0F38CD) },
592d1631
L
6795 { Bad_Opcode },
6796 { Bad_Opcode },
f88c9eb0 6797 /* d0 */
592d1631
L
6798 { Bad_Opcode },
6799 { Bad_Opcode },
6800 { Bad_Opcode },
6801 { Bad_Opcode },
6802 { Bad_Opcode },
6803 { Bad_Opcode },
6804 { Bad_Opcode },
6805 { Bad_Opcode },
f88c9eb0 6806 /* d8 */
592d1631
L
6807 { Bad_Opcode },
6808 { Bad_Opcode },
6809 { Bad_Opcode },
f88c9eb0
SP
6810 { PREFIX_TABLE (PREFIX_0F38DB) },
6811 { PREFIX_TABLE (PREFIX_0F38DC) },
6812 { PREFIX_TABLE (PREFIX_0F38DD) },
6813 { PREFIX_TABLE (PREFIX_0F38DE) },
6814 { PREFIX_TABLE (PREFIX_0F38DF) },
6815 /* e0 */
592d1631
L
6816 { Bad_Opcode },
6817 { Bad_Opcode },
6818 { Bad_Opcode },
6819 { Bad_Opcode },
6820 { Bad_Opcode },
6821 { Bad_Opcode },
6822 { Bad_Opcode },
6823 { Bad_Opcode },
f88c9eb0 6824 /* e8 */
592d1631
L
6825 { Bad_Opcode },
6826 { Bad_Opcode },
6827 { Bad_Opcode },
6828 { Bad_Opcode },
6829 { Bad_Opcode },
6830 { Bad_Opcode },
6831 { Bad_Opcode },
6832 { Bad_Opcode },
f88c9eb0
SP
6833 /* f0 */
6834 { PREFIX_TABLE (PREFIX_0F38F0) },
6835 { PREFIX_TABLE (PREFIX_0F38F1) },
592d1631
L
6836 { Bad_Opcode },
6837 { Bad_Opcode },
6838 { Bad_Opcode },
6839 { Bad_Opcode },
e2e1fcde 6840 { PREFIX_TABLE (PREFIX_0F38F6) },
592d1631 6841 { Bad_Opcode },
f88c9eb0 6842 /* f8 */
592d1631
L
6843 { Bad_Opcode },
6844 { Bad_Opcode },
6845 { Bad_Opcode },
6846 { Bad_Opcode },
6847 { Bad_Opcode },
6848 { Bad_Opcode },
6849 { Bad_Opcode },
6850 { Bad_Opcode },
f88c9eb0
SP
6851 },
6852 /* THREE_BYTE_0F3A */
6853 {
6854 /* 00 */
592d1631
L
6855 { Bad_Opcode },
6856 { Bad_Opcode },
6857 { Bad_Opcode },
6858 { Bad_Opcode },
6859 { Bad_Opcode },
6860 { Bad_Opcode },
6861 { Bad_Opcode },
6862 { Bad_Opcode },
f88c9eb0
SP
6863 /* 08 */
6864 { PREFIX_TABLE (PREFIX_0F3A08) },
6865 { PREFIX_TABLE (PREFIX_0F3A09) },
6866 { PREFIX_TABLE (PREFIX_0F3A0A) },
6867 { PREFIX_TABLE (PREFIX_0F3A0B) },
6868 { PREFIX_TABLE (PREFIX_0F3A0C) },
6869 { PREFIX_TABLE (PREFIX_0F3A0D) },
6870 { PREFIX_TABLE (PREFIX_0F3A0E) },
6871 { "palignr", { MX, EM, Ib } },
6872 /* 10 */
592d1631
L
6873 { Bad_Opcode },
6874 { Bad_Opcode },
6875 { Bad_Opcode },
6876 { Bad_Opcode },
f88c9eb0
SP
6877 { PREFIX_TABLE (PREFIX_0F3A14) },
6878 { PREFIX_TABLE (PREFIX_0F3A15) },
6879 { PREFIX_TABLE (PREFIX_0F3A16) },
6880 { PREFIX_TABLE (PREFIX_0F3A17) },
6881 /* 18 */
592d1631
L
6882 { Bad_Opcode },
6883 { Bad_Opcode },
6884 { Bad_Opcode },
6885 { Bad_Opcode },
6886 { Bad_Opcode },
6887 { Bad_Opcode },
6888 { Bad_Opcode },
6889 { Bad_Opcode },
f88c9eb0
SP
6890 /* 20 */
6891 { PREFIX_TABLE (PREFIX_0F3A20) },
6892 { PREFIX_TABLE (PREFIX_0F3A21) },
6893 { PREFIX_TABLE (PREFIX_0F3A22) },
592d1631
L
6894 { Bad_Opcode },
6895 { Bad_Opcode },
6896 { Bad_Opcode },
6897 { Bad_Opcode },
6898 { Bad_Opcode },
f88c9eb0 6899 /* 28 */
592d1631
L
6900 { Bad_Opcode },
6901 { Bad_Opcode },
6902 { Bad_Opcode },
6903 { Bad_Opcode },
6904 { Bad_Opcode },
6905 { Bad_Opcode },
6906 { Bad_Opcode },
6907 { Bad_Opcode },
f88c9eb0 6908 /* 30 */
592d1631
L
6909 { Bad_Opcode },
6910 { Bad_Opcode },
6911 { Bad_Opcode },
6912 { Bad_Opcode },
6913 { Bad_Opcode },
6914 { Bad_Opcode },
6915 { Bad_Opcode },
6916 { Bad_Opcode },
f88c9eb0 6917 /* 38 */
592d1631
L
6918 { Bad_Opcode },
6919 { Bad_Opcode },
6920 { Bad_Opcode },
6921 { Bad_Opcode },
6922 { Bad_Opcode },
6923 { Bad_Opcode },
6924 { Bad_Opcode },
6925 { Bad_Opcode },
f88c9eb0
SP
6926 /* 40 */
6927 { PREFIX_TABLE (PREFIX_0F3A40) },
6928 { PREFIX_TABLE (PREFIX_0F3A41) },
6929 { PREFIX_TABLE (PREFIX_0F3A42) },
592d1631 6930 { Bad_Opcode },
f88c9eb0 6931 { PREFIX_TABLE (PREFIX_0F3A44) },
592d1631
L
6932 { Bad_Opcode },
6933 { Bad_Opcode },
6934 { Bad_Opcode },
f88c9eb0 6935 /* 48 */
592d1631
L
6936 { Bad_Opcode },
6937 { Bad_Opcode },
6938 { Bad_Opcode },
6939 { Bad_Opcode },
6940 { Bad_Opcode },
6941 { Bad_Opcode },
6942 { Bad_Opcode },
6943 { Bad_Opcode },
f88c9eb0 6944 /* 50 */
592d1631
L
6945 { Bad_Opcode },
6946 { Bad_Opcode },
6947 { Bad_Opcode },
6948 { Bad_Opcode },
6949 { Bad_Opcode },
6950 { Bad_Opcode },
6951 { Bad_Opcode },
6952 { Bad_Opcode },
f88c9eb0 6953 /* 58 */
592d1631
L
6954 { Bad_Opcode },
6955 { Bad_Opcode },
6956 { Bad_Opcode },
6957 { Bad_Opcode },
6958 { Bad_Opcode },
6959 { Bad_Opcode },
6960 { Bad_Opcode },
6961 { Bad_Opcode },
f88c9eb0
SP
6962 /* 60 */
6963 { PREFIX_TABLE (PREFIX_0F3A60) },
6964 { PREFIX_TABLE (PREFIX_0F3A61) },
6965 { PREFIX_TABLE (PREFIX_0F3A62) },
6966 { PREFIX_TABLE (PREFIX_0F3A63) },
592d1631
L
6967 { Bad_Opcode },
6968 { Bad_Opcode },
6969 { Bad_Opcode },
6970 { Bad_Opcode },
f88c9eb0 6971 /* 68 */
592d1631
L
6972 { Bad_Opcode },
6973 { Bad_Opcode },
6974 { Bad_Opcode },
6975 { Bad_Opcode },
6976 { Bad_Opcode },
6977 { Bad_Opcode },
6978 { Bad_Opcode },
6979 { Bad_Opcode },
f88c9eb0 6980 /* 70 */
592d1631
L
6981 { Bad_Opcode },
6982 { Bad_Opcode },
6983 { Bad_Opcode },
6984 { Bad_Opcode },
6985 { Bad_Opcode },
6986 { Bad_Opcode },
6987 { Bad_Opcode },
6988 { Bad_Opcode },
f88c9eb0 6989 /* 78 */
592d1631
L
6990 { Bad_Opcode },
6991 { Bad_Opcode },
6992 { Bad_Opcode },
6993 { Bad_Opcode },
6994 { Bad_Opcode },
6995 { Bad_Opcode },
6996 { Bad_Opcode },
6997 { Bad_Opcode },
f88c9eb0 6998 /* 80 */
592d1631
L
6999 { Bad_Opcode },
7000 { Bad_Opcode },
7001 { Bad_Opcode },
7002 { Bad_Opcode },
7003 { Bad_Opcode },
7004 { Bad_Opcode },
7005 { Bad_Opcode },
7006 { Bad_Opcode },
f88c9eb0 7007 /* 88 */
592d1631
L
7008 { Bad_Opcode },
7009 { Bad_Opcode },
7010 { Bad_Opcode },
7011 { Bad_Opcode },
7012 { Bad_Opcode },
7013 { Bad_Opcode },
7014 { Bad_Opcode },
7015 { Bad_Opcode },
f88c9eb0 7016 /* 90 */
592d1631
L
7017 { Bad_Opcode },
7018 { Bad_Opcode },
7019 { Bad_Opcode },
7020 { Bad_Opcode },
7021 { Bad_Opcode },
7022 { Bad_Opcode },
7023 { Bad_Opcode },
7024 { Bad_Opcode },
f88c9eb0 7025 /* 98 */
592d1631
L
7026 { Bad_Opcode },
7027 { Bad_Opcode },
7028 { Bad_Opcode },
7029 { Bad_Opcode },
7030 { Bad_Opcode },
7031 { Bad_Opcode },
7032 { Bad_Opcode },
7033 { Bad_Opcode },
f88c9eb0 7034 /* a0 */
592d1631
L
7035 { Bad_Opcode },
7036 { Bad_Opcode },
7037 { Bad_Opcode },
7038 { Bad_Opcode },
7039 { Bad_Opcode },
7040 { Bad_Opcode },
7041 { Bad_Opcode },
7042 { Bad_Opcode },
f88c9eb0 7043 /* a8 */
592d1631
L
7044 { Bad_Opcode },
7045 { Bad_Opcode },
7046 { Bad_Opcode },
7047 { Bad_Opcode },
7048 { Bad_Opcode },
7049 { Bad_Opcode },
7050 { Bad_Opcode },
7051 { Bad_Opcode },
f88c9eb0 7052 /* b0 */
592d1631
L
7053 { Bad_Opcode },
7054 { Bad_Opcode },
7055 { Bad_Opcode },
7056 { Bad_Opcode },
7057 { Bad_Opcode },
7058 { Bad_Opcode },
7059 { Bad_Opcode },
7060 { Bad_Opcode },
f88c9eb0 7061 /* b8 */
592d1631
L
7062 { Bad_Opcode },
7063 { Bad_Opcode },
7064 { Bad_Opcode },
7065 { Bad_Opcode },
7066 { Bad_Opcode },
7067 { Bad_Opcode },
7068 { Bad_Opcode },
7069 { Bad_Opcode },
f88c9eb0 7070 /* c0 */
592d1631
L
7071 { Bad_Opcode },
7072 { Bad_Opcode },
7073 { Bad_Opcode },
7074 { Bad_Opcode },
7075 { Bad_Opcode },
7076 { Bad_Opcode },
7077 { Bad_Opcode },
7078 { Bad_Opcode },
f88c9eb0 7079 /* c8 */
592d1631
L
7080 { Bad_Opcode },
7081 { Bad_Opcode },
7082 { Bad_Opcode },
7083 { Bad_Opcode },
a0046408 7084 { PREFIX_TABLE (PREFIX_0F3ACC) },
592d1631
L
7085 { Bad_Opcode },
7086 { Bad_Opcode },
7087 { Bad_Opcode },
f88c9eb0 7088 /* d0 */
592d1631
L
7089 { Bad_Opcode },
7090 { Bad_Opcode },
7091 { Bad_Opcode },
7092 { Bad_Opcode },
7093 { Bad_Opcode },
7094 { Bad_Opcode },
7095 { Bad_Opcode },
7096 { Bad_Opcode },
f88c9eb0 7097 /* d8 */
592d1631
L
7098 { Bad_Opcode },
7099 { Bad_Opcode },
7100 { Bad_Opcode },
7101 { Bad_Opcode },
7102 { Bad_Opcode },
7103 { Bad_Opcode },
7104 { Bad_Opcode },
f88c9eb0
SP
7105 { PREFIX_TABLE (PREFIX_0F3ADF) },
7106 /* e0 */
592d1631
L
7107 { Bad_Opcode },
7108 { Bad_Opcode },
7109 { Bad_Opcode },
7110 { Bad_Opcode },
7111 { Bad_Opcode },
7112 { Bad_Opcode },
7113 { Bad_Opcode },
7114 { Bad_Opcode },
f88c9eb0 7115 /* e8 */
592d1631
L
7116 { Bad_Opcode },
7117 { Bad_Opcode },
7118 { Bad_Opcode },
7119 { Bad_Opcode },
7120 { Bad_Opcode },
7121 { Bad_Opcode },
7122 { Bad_Opcode },
7123 { Bad_Opcode },
f88c9eb0 7124 /* f0 */
592d1631
L
7125 { Bad_Opcode },
7126 { Bad_Opcode },
7127 { Bad_Opcode },
7128 { Bad_Opcode },
7129 { Bad_Opcode },
7130 { Bad_Opcode },
7131 { Bad_Opcode },
7132 { Bad_Opcode },
f88c9eb0 7133 /* f8 */
592d1631
L
7134 { Bad_Opcode },
7135 { Bad_Opcode },
7136 { Bad_Opcode },
7137 { Bad_Opcode },
7138 { Bad_Opcode },
7139 { Bad_Opcode },
7140 { Bad_Opcode },
7141 { Bad_Opcode },
f88c9eb0
SP
7142 },
7143
7144 /* THREE_BYTE_0F7A */
7145 {
7146 /* 00 */
592d1631
L
7147 { Bad_Opcode },
7148 { Bad_Opcode },
7149 { Bad_Opcode },
7150 { Bad_Opcode },
7151 { Bad_Opcode },
7152 { Bad_Opcode },
7153 { Bad_Opcode },
7154 { Bad_Opcode },
f88c9eb0 7155 /* 08 */
592d1631
L
7156 { Bad_Opcode },
7157 { Bad_Opcode },
7158 { Bad_Opcode },
7159 { Bad_Opcode },
7160 { Bad_Opcode },
7161 { Bad_Opcode },
7162 { Bad_Opcode },
7163 { Bad_Opcode },
f88c9eb0 7164 /* 10 */
592d1631
L
7165 { Bad_Opcode },
7166 { Bad_Opcode },
7167 { Bad_Opcode },
7168 { Bad_Opcode },
7169 { Bad_Opcode },
7170 { Bad_Opcode },
7171 { Bad_Opcode },
7172 { Bad_Opcode },
f88c9eb0 7173 /* 18 */
592d1631
L
7174 { Bad_Opcode },
7175 { Bad_Opcode },
7176 { Bad_Opcode },
7177 { Bad_Opcode },
7178 { Bad_Opcode },
7179 { Bad_Opcode },
7180 { Bad_Opcode },
7181 { Bad_Opcode },
f88c9eb0
SP
7182 /* 20 */
7183 { "ptest", { XX } },
592d1631
L
7184 { Bad_Opcode },
7185 { Bad_Opcode },
7186 { Bad_Opcode },
7187 { Bad_Opcode },
7188 { Bad_Opcode },
7189 { Bad_Opcode },
7190 { Bad_Opcode },
f88c9eb0 7191 /* 28 */
592d1631
L
7192 { Bad_Opcode },
7193 { Bad_Opcode },
7194 { Bad_Opcode },
7195 { Bad_Opcode },
7196 { Bad_Opcode },
7197 { Bad_Opcode },
7198 { Bad_Opcode },
7199 { Bad_Opcode },
f88c9eb0 7200 /* 30 */
592d1631
L
7201 { Bad_Opcode },
7202 { Bad_Opcode },
7203 { Bad_Opcode },
7204 { Bad_Opcode },
7205 { Bad_Opcode },
7206 { Bad_Opcode },
7207 { Bad_Opcode },
7208 { Bad_Opcode },
f88c9eb0 7209 /* 38 */
592d1631
L
7210 { Bad_Opcode },
7211 { Bad_Opcode },
7212 { Bad_Opcode },
7213 { Bad_Opcode },
7214 { Bad_Opcode },
7215 { Bad_Opcode },
7216 { Bad_Opcode },
7217 { Bad_Opcode },
f88c9eb0 7218 /* 40 */
592d1631 7219 { Bad_Opcode },
f88c9eb0
SP
7220 { "phaddbw", { XM, EXq } },
7221 { "phaddbd", { XM, EXq } },
7222 { "phaddbq", { XM, EXq } },
592d1631
L
7223 { Bad_Opcode },
7224 { Bad_Opcode },
f88c9eb0
SP
7225 { "phaddwd", { XM, EXq } },
7226 { "phaddwq", { XM, EXq } },
7227 /* 48 */
592d1631
L
7228 { Bad_Opcode },
7229 { Bad_Opcode },
7230 { Bad_Opcode },
f88c9eb0 7231 { "phadddq", { XM, EXq } },
592d1631
L
7232 { Bad_Opcode },
7233 { Bad_Opcode },
7234 { Bad_Opcode },
7235 { Bad_Opcode },
f88c9eb0 7236 /* 50 */
592d1631 7237 { Bad_Opcode },
f88c9eb0
SP
7238 { "phaddubw", { XM, EXq } },
7239 { "phaddubd", { XM, EXq } },
7240 { "phaddubq", { XM, EXq } },
592d1631
L
7241 { Bad_Opcode },
7242 { Bad_Opcode },
f88c9eb0
SP
7243 { "phadduwd", { XM, EXq } },
7244 { "phadduwq", { XM, EXq } },
7245 /* 58 */
592d1631
L
7246 { Bad_Opcode },
7247 { Bad_Opcode },
7248 { Bad_Opcode },
f88c9eb0 7249 { "phaddudq", { XM, EXq } },
592d1631
L
7250 { Bad_Opcode },
7251 { Bad_Opcode },
7252 { Bad_Opcode },
7253 { Bad_Opcode },
f88c9eb0 7254 /* 60 */
592d1631 7255 { Bad_Opcode },
f88c9eb0
SP
7256 { "phsubbw", { XM, EXq } },
7257 { "phsubbd", { XM, EXq } },
7258 { "phsubbq", { XM, EXq } },
592d1631
L
7259 { Bad_Opcode },
7260 { Bad_Opcode },
7261 { Bad_Opcode },
7262 { Bad_Opcode },
4e7d34a6 7263 /* 68 */
592d1631
L
7264 { Bad_Opcode },
7265 { Bad_Opcode },
7266 { Bad_Opcode },
7267 { Bad_Opcode },
7268 { Bad_Opcode },
7269 { Bad_Opcode },
7270 { Bad_Opcode },
7271 { Bad_Opcode },
85f10a01 7272 /* 70 */
592d1631
L
7273 { Bad_Opcode },
7274 { Bad_Opcode },
7275 { Bad_Opcode },
7276 { Bad_Opcode },
7277 { Bad_Opcode },
7278 { Bad_Opcode },
7279 { Bad_Opcode },
7280 { Bad_Opcode },
85f10a01 7281 /* 78 */
592d1631
L
7282 { Bad_Opcode },
7283 { Bad_Opcode },
7284 { Bad_Opcode },
7285 { Bad_Opcode },
7286 { Bad_Opcode },
7287 { Bad_Opcode },
7288 { Bad_Opcode },
7289 { Bad_Opcode },
85f10a01 7290 /* 80 */
592d1631
L
7291 { Bad_Opcode },
7292 { Bad_Opcode },
7293 { Bad_Opcode },
7294 { Bad_Opcode },
7295 { Bad_Opcode },
7296 { Bad_Opcode },
7297 { Bad_Opcode },
7298 { Bad_Opcode },
85f10a01 7299 /* 88 */
592d1631
L
7300 { Bad_Opcode },
7301 { Bad_Opcode },
7302 { Bad_Opcode },
7303 { Bad_Opcode },
7304 { Bad_Opcode },
7305 { Bad_Opcode },
7306 { Bad_Opcode },
7307 { Bad_Opcode },
85f10a01 7308 /* 90 */
592d1631
L
7309 { Bad_Opcode },
7310 { Bad_Opcode },
7311 { Bad_Opcode },
7312 { Bad_Opcode },
7313 { Bad_Opcode },
7314 { Bad_Opcode },
7315 { Bad_Opcode },
7316 { Bad_Opcode },
85f10a01 7317 /* 98 */
592d1631
L
7318 { Bad_Opcode },
7319 { Bad_Opcode },
7320 { Bad_Opcode },
7321 { Bad_Opcode },
7322 { Bad_Opcode },
7323 { Bad_Opcode },
7324 { Bad_Opcode },
7325 { Bad_Opcode },
85f10a01 7326 /* a0 */
592d1631
L
7327 { Bad_Opcode },
7328 { Bad_Opcode },
7329 { Bad_Opcode },
7330 { Bad_Opcode },
7331 { Bad_Opcode },
7332 { Bad_Opcode },
7333 { Bad_Opcode },
7334 { Bad_Opcode },
85f10a01 7335 /* a8 */
592d1631
L
7336 { Bad_Opcode },
7337 { Bad_Opcode },
7338 { Bad_Opcode },
7339 { Bad_Opcode },
7340 { Bad_Opcode },
7341 { Bad_Opcode },
7342 { Bad_Opcode },
7343 { Bad_Opcode },
85f10a01 7344 /* b0 */
592d1631
L
7345 { Bad_Opcode },
7346 { Bad_Opcode },
7347 { Bad_Opcode },
7348 { Bad_Opcode },
7349 { Bad_Opcode },
7350 { Bad_Opcode },
7351 { Bad_Opcode },
7352 { Bad_Opcode },
85f10a01 7353 /* b8 */
592d1631
L
7354 { Bad_Opcode },
7355 { Bad_Opcode },
7356 { Bad_Opcode },
7357 { Bad_Opcode },
7358 { Bad_Opcode },
7359 { Bad_Opcode },
7360 { Bad_Opcode },
7361 { Bad_Opcode },
85f10a01 7362 /* c0 */
592d1631
L
7363 { Bad_Opcode },
7364 { Bad_Opcode },
7365 { Bad_Opcode },
7366 { Bad_Opcode },
7367 { Bad_Opcode },
7368 { Bad_Opcode },
7369 { Bad_Opcode },
7370 { Bad_Opcode },
85f10a01 7371 /* c8 */
592d1631
L
7372 { Bad_Opcode },
7373 { Bad_Opcode },
7374 { Bad_Opcode },
7375 { Bad_Opcode },
7376 { Bad_Opcode },
7377 { Bad_Opcode },
7378 { Bad_Opcode },
7379 { Bad_Opcode },
85f10a01 7380 /* d0 */
592d1631
L
7381 { Bad_Opcode },
7382 { Bad_Opcode },
7383 { Bad_Opcode },
7384 { Bad_Opcode },
7385 { Bad_Opcode },
7386 { Bad_Opcode },
7387 { Bad_Opcode },
7388 { Bad_Opcode },
85f10a01 7389 /* d8 */
592d1631
L
7390 { Bad_Opcode },
7391 { Bad_Opcode },
7392 { Bad_Opcode },
7393 { Bad_Opcode },
7394 { Bad_Opcode },
7395 { Bad_Opcode },
7396 { Bad_Opcode },
7397 { Bad_Opcode },
85f10a01 7398 /* e0 */
592d1631
L
7399 { Bad_Opcode },
7400 { Bad_Opcode },
7401 { Bad_Opcode },
7402 { Bad_Opcode },
7403 { Bad_Opcode },
7404 { Bad_Opcode },
7405 { Bad_Opcode },
7406 { Bad_Opcode },
85f10a01 7407 /* e8 */
592d1631
L
7408 { Bad_Opcode },
7409 { Bad_Opcode },
7410 { Bad_Opcode },
7411 { Bad_Opcode },
7412 { Bad_Opcode },
7413 { Bad_Opcode },
7414 { Bad_Opcode },
7415 { Bad_Opcode },
85f10a01 7416 /* f0 */
592d1631
L
7417 { Bad_Opcode },
7418 { Bad_Opcode },
7419 { Bad_Opcode },
7420 { Bad_Opcode },
7421 { Bad_Opcode },
7422 { Bad_Opcode },
7423 { Bad_Opcode },
7424 { Bad_Opcode },
85f10a01 7425 /* f8 */
592d1631
L
7426 { Bad_Opcode },
7427 { Bad_Opcode },
7428 { Bad_Opcode },
7429 { Bad_Opcode },
7430 { Bad_Opcode },
7431 { Bad_Opcode },
7432 { Bad_Opcode },
7433 { Bad_Opcode },
85f10a01 7434 },
f88c9eb0
SP
7435};
7436
7437static const struct dis386 xop_table[][256] = {
5dd85c99 7438 /* XOP_08 */
85f10a01
MM
7439 {
7440 /* 00 */
592d1631
L
7441 { Bad_Opcode },
7442 { Bad_Opcode },
7443 { Bad_Opcode },
7444 { Bad_Opcode },
7445 { Bad_Opcode },
7446 { Bad_Opcode },
7447 { Bad_Opcode },
7448 { Bad_Opcode },
85f10a01 7449 /* 08 */
592d1631
L
7450 { Bad_Opcode },
7451 { Bad_Opcode },
7452 { Bad_Opcode },
7453 { Bad_Opcode },
7454 { Bad_Opcode },
7455 { Bad_Opcode },
7456 { Bad_Opcode },
7457 { Bad_Opcode },
85f10a01 7458 /* 10 */
3929df09 7459 { Bad_Opcode },
592d1631
L
7460 { Bad_Opcode },
7461 { Bad_Opcode },
7462 { Bad_Opcode },
7463 { Bad_Opcode },
7464 { Bad_Opcode },
7465 { Bad_Opcode },
7466 { Bad_Opcode },
85f10a01 7467 /* 18 */
592d1631
L
7468 { Bad_Opcode },
7469 { Bad_Opcode },
7470 { Bad_Opcode },
7471 { Bad_Opcode },
7472 { Bad_Opcode },
7473 { Bad_Opcode },
7474 { Bad_Opcode },
7475 { Bad_Opcode },
85f10a01 7476 /* 20 */
592d1631
L
7477 { Bad_Opcode },
7478 { Bad_Opcode },
7479 { Bad_Opcode },
7480 { Bad_Opcode },
7481 { Bad_Opcode },
7482 { Bad_Opcode },
7483 { Bad_Opcode },
7484 { Bad_Opcode },
85f10a01 7485 /* 28 */
592d1631
L
7486 { Bad_Opcode },
7487 { Bad_Opcode },
7488 { Bad_Opcode },
7489 { Bad_Opcode },
7490 { Bad_Opcode },
7491 { Bad_Opcode },
7492 { Bad_Opcode },
7493 { Bad_Opcode },
c0f3af97 7494 /* 30 */
592d1631
L
7495 { Bad_Opcode },
7496 { Bad_Opcode },
7497 { Bad_Opcode },
7498 { Bad_Opcode },
7499 { Bad_Opcode },
7500 { Bad_Opcode },
7501 { Bad_Opcode },
7502 { Bad_Opcode },
c0f3af97 7503 /* 38 */
592d1631
L
7504 { Bad_Opcode },
7505 { Bad_Opcode },
7506 { Bad_Opcode },
7507 { Bad_Opcode },
7508 { Bad_Opcode },
7509 { Bad_Opcode },
7510 { Bad_Opcode },
7511 { Bad_Opcode },
c0f3af97 7512 /* 40 */
592d1631
L
7513 { Bad_Opcode },
7514 { Bad_Opcode },
7515 { Bad_Opcode },
7516 { Bad_Opcode },
7517 { Bad_Opcode },
7518 { Bad_Opcode },
7519 { Bad_Opcode },
7520 { Bad_Opcode },
85f10a01 7521 /* 48 */
592d1631
L
7522 { Bad_Opcode },
7523 { Bad_Opcode },
7524 { Bad_Opcode },
7525 { Bad_Opcode },
7526 { Bad_Opcode },
7527 { Bad_Opcode },
7528 { Bad_Opcode },
7529 { Bad_Opcode },
c0f3af97 7530 /* 50 */
592d1631
L
7531 { Bad_Opcode },
7532 { Bad_Opcode },
7533 { Bad_Opcode },
7534 { Bad_Opcode },
7535 { Bad_Opcode },
7536 { Bad_Opcode },
7537 { Bad_Opcode },
7538 { Bad_Opcode },
85f10a01 7539 /* 58 */
592d1631
L
7540 { Bad_Opcode },
7541 { Bad_Opcode },
7542 { Bad_Opcode },
7543 { Bad_Opcode },
7544 { Bad_Opcode },
7545 { Bad_Opcode },
7546 { Bad_Opcode },
7547 { Bad_Opcode },
c1e679ec 7548 /* 60 */
592d1631
L
7549 { Bad_Opcode },
7550 { Bad_Opcode },
7551 { Bad_Opcode },
7552 { Bad_Opcode },
7553 { Bad_Opcode },
7554 { Bad_Opcode },
7555 { Bad_Opcode },
7556 { Bad_Opcode },
c0f3af97 7557 /* 68 */
592d1631
L
7558 { Bad_Opcode },
7559 { Bad_Opcode },
7560 { Bad_Opcode },
7561 { Bad_Opcode },
7562 { Bad_Opcode },
7563 { Bad_Opcode },
7564 { Bad_Opcode },
7565 { Bad_Opcode },
85f10a01 7566 /* 70 */
592d1631
L
7567 { Bad_Opcode },
7568 { Bad_Opcode },
7569 { Bad_Opcode },
7570 { Bad_Opcode },
7571 { Bad_Opcode },
7572 { Bad_Opcode },
7573 { Bad_Opcode },
7574 { Bad_Opcode },
85f10a01 7575 /* 78 */
592d1631
L
7576 { Bad_Opcode },
7577 { Bad_Opcode },
7578 { Bad_Opcode },
7579 { Bad_Opcode },
7580 { Bad_Opcode },
7581 { Bad_Opcode },
7582 { Bad_Opcode },
7583 { Bad_Opcode },
85f10a01 7584 /* 80 */
592d1631
L
7585 { Bad_Opcode },
7586 { Bad_Opcode },
7587 { Bad_Opcode },
7588 { Bad_Opcode },
7589 { Bad_Opcode },
5dd85c99
SP
7590 { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7591 { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7592 { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7593 /* 88 */
592d1631
L
7594 { Bad_Opcode },
7595 { Bad_Opcode },
7596 { Bad_Opcode },
7597 { Bad_Opcode },
7598 { Bad_Opcode },
7599 { Bad_Opcode },
5dd85c99
SP
7600 { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7601 { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7602 /* 90 */
592d1631
L
7603 { Bad_Opcode },
7604 { Bad_Opcode },
7605 { Bad_Opcode },
7606 { Bad_Opcode },
7607 { Bad_Opcode },
5dd85c99
SP
7608 { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7609 { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7610 { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7611 /* 98 */
592d1631
L
7612 { Bad_Opcode },
7613 { Bad_Opcode },
7614 { Bad_Opcode },
7615 { Bad_Opcode },
7616 { Bad_Opcode },
7617 { Bad_Opcode },
5dd85c99
SP
7618 { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7619 { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7620 /* a0 */
592d1631
L
7621 { Bad_Opcode },
7622 { Bad_Opcode },
5dd85c99
SP
7623 { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7624 { "vpperm", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631
L
7625 { Bad_Opcode },
7626 { Bad_Opcode },
5dd85c99 7627 { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631 7628 { Bad_Opcode },
5dd85c99 7629 /* a8 */
592d1631
L
7630 { Bad_Opcode },
7631 { Bad_Opcode },
7632 { Bad_Opcode },
7633 { Bad_Opcode },
7634 { Bad_Opcode },
7635 { Bad_Opcode },
7636 { Bad_Opcode },
7637 { Bad_Opcode },
5dd85c99 7638 /* b0 */
592d1631
L
7639 { Bad_Opcode },
7640 { Bad_Opcode },
7641 { Bad_Opcode },
7642 { Bad_Opcode },
7643 { Bad_Opcode },
7644 { Bad_Opcode },
5dd85c99 7645 { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631 7646 { Bad_Opcode },
5dd85c99 7647 /* b8 */
592d1631
L
7648 { Bad_Opcode },
7649 { Bad_Opcode },
7650 { Bad_Opcode },
7651 { Bad_Opcode },
7652 { Bad_Opcode },
7653 { Bad_Opcode },
7654 { Bad_Opcode },
7655 { Bad_Opcode },
5dd85c99
SP
7656 /* c0 */
7657 { "vprotb", { XM, Vex_2src_1, Ib } },
7658 { "vprotw", { XM, Vex_2src_1, Ib } },
7659 { "vprotd", { XM, Vex_2src_1, Ib } },
7660 { "vprotq", { XM, Vex_2src_1, Ib } },
592d1631
L
7661 { Bad_Opcode },
7662 { Bad_Opcode },
7663 { Bad_Opcode },
7664 { Bad_Opcode },
5dd85c99 7665 /* c8 */
592d1631
L
7666 { Bad_Opcode },
7667 { Bad_Opcode },
7668 { Bad_Opcode },
7669 { Bad_Opcode },
ff688e1f
L
7670 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CC) },
7671 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CD) },
7672 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CE) },
7673 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CF) },
5dd85c99 7674 /* d0 */
592d1631
L
7675 { Bad_Opcode },
7676 { Bad_Opcode },
7677 { Bad_Opcode },
7678 { Bad_Opcode },
7679 { Bad_Opcode },
7680 { Bad_Opcode },
7681 { Bad_Opcode },
7682 { Bad_Opcode },
5dd85c99 7683 /* d8 */
592d1631
L
7684 { Bad_Opcode },
7685 { Bad_Opcode },
7686 { Bad_Opcode },
7687 { Bad_Opcode },
7688 { Bad_Opcode },
7689 { Bad_Opcode },
7690 { Bad_Opcode },
7691 { Bad_Opcode },
5dd85c99 7692 /* e0 */
592d1631
L
7693 { Bad_Opcode },
7694 { Bad_Opcode },
7695 { Bad_Opcode },
7696 { Bad_Opcode },
7697 { Bad_Opcode },
7698 { Bad_Opcode },
7699 { Bad_Opcode },
7700 { Bad_Opcode },
5dd85c99 7701 /* e8 */
592d1631
L
7702 { Bad_Opcode },
7703 { Bad_Opcode },
7704 { Bad_Opcode },
7705 { Bad_Opcode },
ff688e1f
L
7706 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EC) },
7707 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_ED) },
7708 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EE) },
7709 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EF) },
5dd85c99 7710 /* f0 */
592d1631
L
7711 { Bad_Opcode },
7712 { Bad_Opcode },
7713 { Bad_Opcode },
7714 { Bad_Opcode },
7715 { Bad_Opcode },
7716 { Bad_Opcode },
7717 { Bad_Opcode },
7718 { Bad_Opcode },
5dd85c99 7719 /* f8 */
592d1631
L
7720 { Bad_Opcode },
7721 { Bad_Opcode },
7722 { Bad_Opcode },
7723 { Bad_Opcode },
7724 { Bad_Opcode },
7725 { Bad_Opcode },
7726 { Bad_Opcode },
7727 { Bad_Opcode },
5dd85c99
SP
7728 },
7729 /* XOP_09 */
7730 {
7731 /* 00 */
592d1631 7732 { Bad_Opcode },
2a2a0f38
QN
7733 { REG_TABLE (REG_XOP_TBM_01) },
7734 { REG_TABLE (REG_XOP_TBM_02) },
592d1631
L
7735 { Bad_Opcode },
7736 { Bad_Opcode },
7737 { Bad_Opcode },
7738 { Bad_Opcode },
7739 { Bad_Opcode },
5dd85c99 7740 /* 08 */
592d1631
L
7741 { Bad_Opcode },
7742 { Bad_Opcode },
7743 { Bad_Opcode },
7744 { Bad_Opcode },
7745 { Bad_Opcode },
7746 { Bad_Opcode },
7747 { Bad_Opcode },
7748 { Bad_Opcode },
5dd85c99 7749 /* 10 */
592d1631
L
7750 { Bad_Opcode },
7751 { Bad_Opcode },
5dd85c99 7752 { REG_TABLE (REG_XOP_LWPCB) },
592d1631
L
7753 { Bad_Opcode },
7754 { Bad_Opcode },
7755 { Bad_Opcode },
7756 { Bad_Opcode },
7757 { Bad_Opcode },
5dd85c99 7758 /* 18 */
592d1631
L
7759 { Bad_Opcode },
7760 { Bad_Opcode },
7761 { Bad_Opcode },
7762 { Bad_Opcode },
7763 { Bad_Opcode },
7764 { Bad_Opcode },
7765 { Bad_Opcode },
7766 { Bad_Opcode },
5dd85c99 7767 /* 20 */
592d1631
L
7768 { Bad_Opcode },
7769 { Bad_Opcode },
7770 { Bad_Opcode },
7771 { Bad_Opcode },
7772 { Bad_Opcode },
7773 { Bad_Opcode },
7774 { Bad_Opcode },
7775 { Bad_Opcode },
5dd85c99 7776 /* 28 */
592d1631
L
7777 { Bad_Opcode },
7778 { Bad_Opcode },
7779 { Bad_Opcode },
7780 { Bad_Opcode },
7781 { Bad_Opcode },
7782 { Bad_Opcode },
7783 { Bad_Opcode },
7784 { Bad_Opcode },
5dd85c99 7785 /* 30 */
592d1631
L
7786 { Bad_Opcode },
7787 { Bad_Opcode },
7788 { Bad_Opcode },
7789 { Bad_Opcode },
7790 { Bad_Opcode },
7791 { Bad_Opcode },
7792 { Bad_Opcode },
7793 { Bad_Opcode },
5dd85c99 7794 /* 38 */
592d1631
L
7795 { Bad_Opcode },
7796 { Bad_Opcode },
7797 { Bad_Opcode },
7798 { Bad_Opcode },
7799 { Bad_Opcode },
7800 { Bad_Opcode },
7801 { Bad_Opcode },
7802 { Bad_Opcode },
5dd85c99 7803 /* 40 */
592d1631
L
7804 { Bad_Opcode },
7805 { Bad_Opcode },
7806 { Bad_Opcode },
7807 { Bad_Opcode },
7808 { Bad_Opcode },
7809 { Bad_Opcode },
7810 { Bad_Opcode },
7811 { Bad_Opcode },
5dd85c99 7812 /* 48 */
592d1631
L
7813 { Bad_Opcode },
7814 { Bad_Opcode },
7815 { Bad_Opcode },
7816 { Bad_Opcode },
7817 { Bad_Opcode },
7818 { Bad_Opcode },
7819 { Bad_Opcode },
7820 { Bad_Opcode },
5dd85c99 7821 /* 50 */
592d1631
L
7822 { Bad_Opcode },
7823 { Bad_Opcode },
7824 { Bad_Opcode },
7825 { Bad_Opcode },
7826 { Bad_Opcode },
7827 { Bad_Opcode },
7828 { Bad_Opcode },
7829 { Bad_Opcode },
5dd85c99 7830 /* 58 */
592d1631
L
7831 { Bad_Opcode },
7832 { Bad_Opcode },
7833 { Bad_Opcode },
7834 { Bad_Opcode },
7835 { Bad_Opcode },
7836 { Bad_Opcode },
7837 { Bad_Opcode },
7838 { Bad_Opcode },
5dd85c99 7839 /* 60 */
592d1631
L
7840 { Bad_Opcode },
7841 { Bad_Opcode },
7842 { Bad_Opcode },
7843 { Bad_Opcode },
7844 { Bad_Opcode },
7845 { Bad_Opcode },
7846 { Bad_Opcode },
7847 { Bad_Opcode },
5dd85c99 7848 /* 68 */
592d1631
L
7849 { Bad_Opcode },
7850 { Bad_Opcode },
7851 { Bad_Opcode },
7852 { Bad_Opcode },
7853 { Bad_Opcode },
7854 { Bad_Opcode },
7855 { Bad_Opcode },
7856 { Bad_Opcode },
5dd85c99 7857 /* 70 */
592d1631
L
7858 { Bad_Opcode },
7859 { Bad_Opcode },
7860 { Bad_Opcode },
7861 { Bad_Opcode },
7862 { Bad_Opcode },
7863 { Bad_Opcode },
7864 { Bad_Opcode },
7865 { Bad_Opcode },
5dd85c99 7866 /* 78 */
592d1631
L
7867 { Bad_Opcode },
7868 { Bad_Opcode },
7869 { Bad_Opcode },
7870 { Bad_Opcode },
7871 { Bad_Opcode },
7872 { Bad_Opcode },
7873 { Bad_Opcode },
7874 { Bad_Opcode },
5dd85c99 7875 /* 80 */
592a252b
L
7876 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) },
7877 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) },
5dd85c99
SP
7878 { "vfrczss", { XM, EXd } },
7879 { "vfrczsd", { XM, EXq } },
592d1631
L
7880 { Bad_Opcode },
7881 { Bad_Opcode },
7882 { Bad_Opcode },
7883 { Bad_Opcode },
5dd85c99 7884 /* 88 */
592d1631
L
7885 { Bad_Opcode },
7886 { Bad_Opcode },
7887 { Bad_Opcode },
7888 { Bad_Opcode },
7889 { Bad_Opcode },
7890 { Bad_Opcode },
7891 { Bad_Opcode },
7892 { Bad_Opcode },
5dd85c99
SP
7893 /* 90 */
7894 { "vprotb", { XM, Vex_2src_1, Vex_2src_2 } },
7895 { "vprotw", { XM, Vex_2src_1, Vex_2src_2 } },
7896 { "vprotd", { XM, Vex_2src_1, Vex_2src_2 } },
7897 { "vprotq", { XM, Vex_2src_1, Vex_2src_2 } },
7898 { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 } },
7899 { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 } },
7900 { "vpshld", { XM, Vex_2src_1, Vex_2src_2 } },
7901 { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 } },
7902 /* 98 */
7903 { "vpshab", { XM, Vex_2src_1, Vex_2src_2 } },
7904 { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 } },
7905 { "vpshad", { XM, Vex_2src_1, Vex_2src_2 } },
7906 { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 } },
592d1631
L
7907 { Bad_Opcode },
7908 { Bad_Opcode },
7909 { Bad_Opcode },
7910 { Bad_Opcode },
5dd85c99 7911 /* a0 */
592d1631
L
7912 { Bad_Opcode },
7913 { Bad_Opcode },
7914 { Bad_Opcode },
7915 { Bad_Opcode },
7916 { Bad_Opcode },
7917 { Bad_Opcode },
7918 { Bad_Opcode },
7919 { Bad_Opcode },
5dd85c99 7920 /* a8 */
592d1631
L
7921 { Bad_Opcode },
7922 { Bad_Opcode },
7923 { Bad_Opcode },
7924 { Bad_Opcode },
7925 { Bad_Opcode },
7926 { Bad_Opcode },
7927 { Bad_Opcode },
7928 { Bad_Opcode },
5dd85c99 7929 /* b0 */
592d1631
L
7930 { Bad_Opcode },
7931 { Bad_Opcode },
7932 { Bad_Opcode },
7933 { Bad_Opcode },
7934 { Bad_Opcode },
7935 { Bad_Opcode },
7936 { Bad_Opcode },
7937 { Bad_Opcode },
5dd85c99 7938 /* b8 */
592d1631
L
7939 { Bad_Opcode },
7940 { Bad_Opcode },
7941 { Bad_Opcode },
7942 { Bad_Opcode },
7943 { Bad_Opcode },
7944 { Bad_Opcode },
7945 { Bad_Opcode },
7946 { Bad_Opcode },
5dd85c99 7947 /* c0 */
592d1631 7948 { Bad_Opcode },
5dd85c99
SP
7949 { "vphaddbw", { XM, EXxmm } },
7950 { "vphaddbd", { XM, EXxmm } },
7951 { "vphaddbq", { XM, EXxmm } },
592d1631
L
7952 { Bad_Opcode },
7953 { Bad_Opcode },
5dd85c99
SP
7954 { "vphaddwd", { XM, EXxmm } },
7955 { "vphaddwq", { XM, EXxmm } },
7956 /* c8 */
592d1631
L
7957 { Bad_Opcode },
7958 { Bad_Opcode },
7959 { Bad_Opcode },
5dd85c99 7960 { "vphadddq", { XM, EXxmm } },
592d1631
L
7961 { Bad_Opcode },
7962 { Bad_Opcode },
7963 { Bad_Opcode },
7964 { Bad_Opcode },
5dd85c99 7965 /* d0 */
592d1631 7966 { Bad_Opcode },
5dd85c99
SP
7967 { "vphaddubw", { XM, EXxmm } },
7968 { "vphaddubd", { XM, EXxmm } },
7969 { "vphaddubq", { XM, EXxmm } },
592d1631
L
7970 { Bad_Opcode },
7971 { Bad_Opcode },
5dd85c99
SP
7972 { "vphadduwd", { XM, EXxmm } },
7973 { "vphadduwq", { XM, EXxmm } },
7974 /* d8 */
592d1631
L
7975 { Bad_Opcode },
7976 { Bad_Opcode },
7977 { Bad_Opcode },
5dd85c99 7978 { "vphaddudq", { XM, EXxmm } },
592d1631
L
7979 { Bad_Opcode },
7980 { Bad_Opcode },
7981 { Bad_Opcode },
7982 { Bad_Opcode },
5dd85c99 7983 /* e0 */
592d1631 7984 { Bad_Opcode },
5dd85c99
SP
7985 { "vphsubbw", { XM, EXxmm } },
7986 { "vphsubwd", { XM, EXxmm } },
7987 { "vphsubdq", { XM, EXxmm } },
592d1631
L
7988 { Bad_Opcode },
7989 { Bad_Opcode },
7990 { Bad_Opcode },
7991 { Bad_Opcode },
4e7d34a6 7992 /* e8 */
592d1631
L
7993 { Bad_Opcode },
7994 { Bad_Opcode },
7995 { Bad_Opcode },
7996 { Bad_Opcode },
7997 { Bad_Opcode },
7998 { Bad_Opcode },
7999 { Bad_Opcode },
8000 { Bad_Opcode },
4e7d34a6 8001 /* f0 */
592d1631
L
8002 { Bad_Opcode },
8003 { Bad_Opcode },
8004 { Bad_Opcode },
8005 { Bad_Opcode },
8006 { Bad_Opcode },
8007 { Bad_Opcode },
8008 { Bad_Opcode },
8009 { Bad_Opcode },
4e7d34a6 8010 /* f8 */
592d1631
L
8011 { Bad_Opcode },
8012 { Bad_Opcode },
8013 { Bad_Opcode },
8014 { Bad_Opcode },
8015 { Bad_Opcode },
8016 { Bad_Opcode },
8017 { Bad_Opcode },
8018 { Bad_Opcode },
4e7d34a6 8019 },
f88c9eb0 8020 /* XOP_0A */
4e7d34a6
L
8021 {
8022 /* 00 */
592d1631
L
8023 { Bad_Opcode },
8024 { Bad_Opcode },
8025 { Bad_Opcode },
8026 { Bad_Opcode },
8027 { Bad_Opcode },
8028 { Bad_Opcode },
8029 { Bad_Opcode },
8030 { Bad_Opcode },
4e7d34a6 8031 /* 08 */
592d1631
L
8032 { Bad_Opcode },
8033 { Bad_Opcode },
8034 { Bad_Opcode },
8035 { Bad_Opcode },
8036 { Bad_Opcode },
8037 { Bad_Opcode },
8038 { Bad_Opcode },
8039 { Bad_Opcode },
4e7d34a6 8040 /* 10 */
2a2a0f38 8041 { "bextr", { Gv, Ev, Iq } },
592d1631 8042 { Bad_Opcode },
f88c9eb0 8043 { REG_TABLE (REG_XOP_LWP) },
592d1631
L
8044 { Bad_Opcode },
8045 { Bad_Opcode },
8046 { Bad_Opcode },
8047 { Bad_Opcode },
8048 { Bad_Opcode },
4e7d34a6 8049 /* 18 */
592d1631
L
8050 { Bad_Opcode },
8051 { Bad_Opcode },
8052 { Bad_Opcode },
8053 { Bad_Opcode },
8054 { Bad_Opcode },
8055 { Bad_Opcode },
8056 { Bad_Opcode },
8057 { Bad_Opcode },
4e7d34a6 8058 /* 20 */
592d1631
L
8059 { Bad_Opcode },
8060 { Bad_Opcode },
8061 { Bad_Opcode },
8062 { Bad_Opcode },
8063 { Bad_Opcode },
8064 { Bad_Opcode },
8065 { Bad_Opcode },
8066 { Bad_Opcode },
4e7d34a6 8067 /* 28 */
592d1631
L
8068 { Bad_Opcode },
8069 { Bad_Opcode },
8070 { Bad_Opcode },
8071 { Bad_Opcode },
8072 { Bad_Opcode },
8073 { Bad_Opcode },
8074 { Bad_Opcode },
8075 { Bad_Opcode },
4e7d34a6 8076 /* 30 */
592d1631
L
8077 { Bad_Opcode },
8078 { Bad_Opcode },
8079 { Bad_Opcode },
8080 { Bad_Opcode },
8081 { Bad_Opcode },
8082 { Bad_Opcode },
8083 { Bad_Opcode },
8084 { Bad_Opcode },
c0f3af97 8085 /* 38 */
592d1631
L
8086 { Bad_Opcode },
8087 { Bad_Opcode },
8088 { Bad_Opcode },
8089 { Bad_Opcode },
8090 { Bad_Opcode },
8091 { Bad_Opcode },
8092 { Bad_Opcode },
8093 { Bad_Opcode },
c0f3af97 8094 /* 40 */
592d1631
L
8095 { Bad_Opcode },
8096 { Bad_Opcode },
8097 { Bad_Opcode },
8098 { Bad_Opcode },
8099 { Bad_Opcode },
8100 { Bad_Opcode },
8101 { Bad_Opcode },
8102 { Bad_Opcode },
c1e679ec 8103 /* 48 */
592d1631
L
8104 { Bad_Opcode },
8105 { Bad_Opcode },
8106 { Bad_Opcode },
8107 { Bad_Opcode },
8108 { Bad_Opcode },
8109 { Bad_Opcode },
8110 { Bad_Opcode },
8111 { Bad_Opcode },
c1e679ec 8112 /* 50 */
592d1631
L
8113 { Bad_Opcode },
8114 { Bad_Opcode },
8115 { Bad_Opcode },
8116 { Bad_Opcode },
8117 { Bad_Opcode },
8118 { Bad_Opcode },
8119 { Bad_Opcode },
8120 { Bad_Opcode },
4e7d34a6 8121 /* 58 */
592d1631
L
8122 { Bad_Opcode },
8123 { Bad_Opcode },
8124 { Bad_Opcode },
8125 { Bad_Opcode },
8126 { Bad_Opcode },
8127 { Bad_Opcode },
8128 { Bad_Opcode },
8129 { Bad_Opcode },
4e7d34a6 8130 /* 60 */
592d1631
L
8131 { Bad_Opcode },
8132 { Bad_Opcode },
8133 { Bad_Opcode },
8134 { Bad_Opcode },
8135 { Bad_Opcode },
8136 { Bad_Opcode },
8137 { Bad_Opcode },
8138 { Bad_Opcode },
4e7d34a6 8139 /* 68 */
592d1631
L
8140 { Bad_Opcode },
8141 { Bad_Opcode },
8142 { Bad_Opcode },
8143 { Bad_Opcode },
8144 { Bad_Opcode },
8145 { Bad_Opcode },
8146 { Bad_Opcode },
8147 { Bad_Opcode },
4e7d34a6 8148 /* 70 */
592d1631
L
8149 { Bad_Opcode },
8150 { Bad_Opcode },
8151 { Bad_Opcode },
8152 { Bad_Opcode },
8153 { Bad_Opcode },
8154 { Bad_Opcode },
8155 { Bad_Opcode },
8156 { Bad_Opcode },
4e7d34a6 8157 /* 78 */
592d1631
L
8158 { Bad_Opcode },
8159 { Bad_Opcode },
8160 { Bad_Opcode },
8161 { Bad_Opcode },
8162 { Bad_Opcode },
8163 { Bad_Opcode },
8164 { Bad_Opcode },
8165 { Bad_Opcode },
4e7d34a6 8166 /* 80 */
592d1631
L
8167 { Bad_Opcode },
8168 { Bad_Opcode },
8169 { Bad_Opcode },
8170 { Bad_Opcode },
8171 { Bad_Opcode },
8172 { Bad_Opcode },
8173 { Bad_Opcode },
8174 { Bad_Opcode },
4e7d34a6 8175 /* 88 */
592d1631
L
8176 { Bad_Opcode },
8177 { Bad_Opcode },
8178 { Bad_Opcode },
8179 { Bad_Opcode },
8180 { Bad_Opcode },
8181 { Bad_Opcode },
8182 { Bad_Opcode },
8183 { Bad_Opcode },
4e7d34a6 8184 /* 90 */
592d1631
L
8185 { Bad_Opcode },
8186 { Bad_Opcode },
8187 { Bad_Opcode },
8188 { Bad_Opcode },
8189 { Bad_Opcode },
8190 { Bad_Opcode },
8191 { Bad_Opcode },
8192 { Bad_Opcode },
4e7d34a6 8193 /* 98 */
592d1631
L
8194 { Bad_Opcode },
8195 { Bad_Opcode },
8196 { Bad_Opcode },
8197 { Bad_Opcode },
8198 { Bad_Opcode },
8199 { Bad_Opcode },
8200 { Bad_Opcode },
8201 { Bad_Opcode },
4e7d34a6 8202 /* a0 */
592d1631
L
8203 { Bad_Opcode },
8204 { Bad_Opcode },
8205 { Bad_Opcode },
8206 { Bad_Opcode },
8207 { Bad_Opcode },
8208 { Bad_Opcode },
8209 { Bad_Opcode },
8210 { Bad_Opcode },
4e7d34a6 8211 /* a8 */
592d1631
L
8212 { Bad_Opcode },
8213 { Bad_Opcode },
8214 { Bad_Opcode },
8215 { Bad_Opcode },
8216 { Bad_Opcode },
8217 { Bad_Opcode },
8218 { Bad_Opcode },
8219 { Bad_Opcode },
d5d7db8e 8220 /* b0 */
592d1631
L
8221 { Bad_Opcode },
8222 { Bad_Opcode },
8223 { Bad_Opcode },
8224 { Bad_Opcode },
8225 { Bad_Opcode },
8226 { Bad_Opcode },
8227 { Bad_Opcode },
8228 { Bad_Opcode },
85f10a01 8229 /* b8 */
592d1631
L
8230 { Bad_Opcode },
8231 { Bad_Opcode },
8232 { Bad_Opcode },
8233 { Bad_Opcode },
8234 { Bad_Opcode },
8235 { Bad_Opcode },
8236 { Bad_Opcode },
8237 { Bad_Opcode },
85f10a01 8238 /* c0 */
592d1631
L
8239 { Bad_Opcode },
8240 { Bad_Opcode },
8241 { Bad_Opcode },
8242 { Bad_Opcode },
8243 { Bad_Opcode },
8244 { Bad_Opcode },
8245 { Bad_Opcode },
8246 { Bad_Opcode },
85f10a01 8247 /* c8 */
592d1631
L
8248 { Bad_Opcode },
8249 { Bad_Opcode },
8250 { Bad_Opcode },
8251 { Bad_Opcode },
8252 { Bad_Opcode },
8253 { Bad_Opcode },
8254 { Bad_Opcode },
8255 { Bad_Opcode },
85f10a01 8256 /* d0 */
592d1631
L
8257 { Bad_Opcode },
8258 { Bad_Opcode },
8259 { Bad_Opcode },
8260 { Bad_Opcode },
8261 { Bad_Opcode },
8262 { Bad_Opcode },
8263 { Bad_Opcode },
8264 { Bad_Opcode },
85f10a01 8265 /* d8 */
592d1631
L
8266 { Bad_Opcode },
8267 { Bad_Opcode },
8268 { Bad_Opcode },
8269 { Bad_Opcode },
8270 { Bad_Opcode },
8271 { Bad_Opcode },
8272 { Bad_Opcode },
8273 { Bad_Opcode },
85f10a01 8274 /* e0 */
592d1631
L
8275 { Bad_Opcode },
8276 { Bad_Opcode },
8277 { Bad_Opcode },
8278 { Bad_Opcode },
8279 { Bad_Opcode },
8280 { Bad_Opcode },
8281 { Bad_Opcode },
8282 { Bad_Opcode },
85f10a01 8283 /* e8 */
592d1631
L
8284 { Bad_Opcode },
8285 { Bad_Opcode },
8286 { Bad_Opcode },
8287 { Bad_Opcode },
8288 { Bad_Opcode },
8289 { Bad_Opcode },
8290 { Bad_Opcode },
8291 { Bad_Opcode },
85f10a01 8292 /* f0 */
592d1631
L
8293 { Bad_Opcode },
8294 { Bad_Opcode },
8295 { Bad_Opcode },
8296 { Bad_Opcode },
8297 { Bad_Opcode },
8298 { Bad_Opcode },
8299 { Bad_Opcode },
8300 { Bad_Opcode },
85f10a01 8301 /* f8 */
592d1631
L
8302 { Bad_Opcode },
8303 { Bad_Opcode },
8304 { Bad_Opcode },
8305 { Bad_Opcode },
8306 { Bad_Opcode },
8307 { Bad_Opcode },
8308 { Bad_Opcode },
8309 { Bad_Opcode },
85f10a01 8310 },
c0f3af97
L
8311};
8312
8313static const struct dis386 vex_table[][256] = {
8314 /* VEX_0F */
85f10a01
MM
8315 {
8316 /* 00 */
592d1631
L
8317 { Bad_Opcode },
8318 { Bad_Opcode },
8319 { Bad_Opcode },
8320 { Bad_Opcode },
8321 { Bad_Opcode },
8322 { Bad_Opcode },
8323 { Bad_Opcode },
8324 { Bad_Opcode },
85f10a01 8325 /* 08 */
592d1631
L
8326 { Bad_Opcode },
8327 { Bad_Opcode },
8328 { Bad_Opcode },
8329 { Bad_Opcode },
8330 { Bad_Opcode },
8331 { Bad_Opcode },
8332 { Bad_Opcode },
8333 { Bad_Opcode },
c0f3af97 8334 /* 10 */
592a252b
L
8335 { PREFIX_TABLE (PREFIX_VEX_0F10) },
8336 { PREFIX_TABLE (PREFIX_VEX_0F11) },
8337 { PREFIX_TABLE (PREFIX_VEX_0F12) },
8338 { MOD_TABLE (MOD_VEX_0F13) },
8339 { VEX_W_TABLE (VEX_W_0F14) },
8340 { VEX_W_TABLE (VEX_W_0F15) },
8341 { PREFIX_TABLE (PREFIX_VEX_0F16) },
8342 { MOD_TABLE (MOD_VEX_0F17) },
c0f3af97 8343 /* 18 */
592d1631
L
8344 { Bad_Opcode },
8345 { Bad_Opcode },
8346 { Bad_Opcode },
8347 { Bad_Opcode },
8348 { Bad_Opcode },
8349 { Bad_Opcode },
8350 { Bad_Opcode },
8351 { Bad_Opcode },
c0f3af97 8352 /* 20 */
592d1631
L
8353 { Bad_Opcode },
8354 { Bad_Opcode },
8355 { Bad_Opcode },
8356 { Bad_Opcode },
8357 { Bad_Opcode },
8358 { Bad_Opcode },
8359 { Bad_Opcode },
8360 { Bad_Opcode },
c0f3af97 8361 /* 28 */
592a252b
L
8362 { VEX_W_TABLE (VEX_W_0F28) },
8363 { VEX_W_TABLE (VEX_W_0F29) },
8364 { PREFIX_TABLE (PREFIX_VEX_0F2A) },
8365 { MOD_TABLE (MOD_VEX_0F2B) },
8366 { PREFIX_TABLE (PREFIX_VEX_0F2C) },
8367 { PREFIX_TABLE (PREFIX_VEX_0F2D) },
8368 { PREFIX_TABLE (PREFIX_VEX_0F2E) },
8369 { PREFIX_TABLE (PREFIX_VEX_0F2F) },
85f10a01 8370 /* 30 */
592d1631
L
8371 { Bad_Opcode },
8372 { Bad_Opcode },
8373 { Bad_Opcode },
8374 { Bad_Opcode },
8375 { Bad_Opcode },
8376 { Bad_Opcode },
8377 { Bad_Opcode },
8378 { Bad_Opcode },
4e7d34a6 8379 /* 38 */
592d1631
L
8380 { Bad_Opcode },
8381 { Bad_Opcode },
8382 { Bad_Opcode },
8383 { Bad_Opcode },
8384 { Bad_Opcode },
8385 { Bad_Opcode },
8386 { Bad_Opcode },
8387 { Bad_Opcode },
d5d7db8e 8388 /* 40 */
592d1631 8389 { Bad_Opcode },
43234a1e
L
8390 { PREFIX_TABLE (PREFIX_VEX_0F41) },
8391 { PREFIX_TABLE (PREFIX_VEX_0F42) },
592d1631 8392 { Bad_Opcode },
43234a1e
L
8393 { PREFIX_TABLE (PREFIX_VEX_0F44) },
8394 { PREFIX_TABLE (PREFIX_VEX_0F45) },
8395 { PREFIX_TABLE (PREFIX_VEX_0F46) },
8396 { PREFIX_TABLE (PREFIX_VEX_0F47) },
85f10a01 8397 /* 48 */
592d1631
L
8398 { Bad_Opcode },
8399 { Bad_Opcode },
8400 { Bad_Opcode },
43234a1e 8401 { PREFIX_TABLE (PREFIX_VEX_0F4B) },
592d1631
L
8402 { Bad_Opcode },
8403 { Bad_Opcode },
8404 { Bad_Opcode },
8405 { Bad_Opcode },
d5d7db8e 8406 /* 50 */
592a252b
L
8407 { MOD_TABLE (MOD_VEX_0F50) },
8408 { PREFIX_TABLE (PREFIX_VEX_0F51) },
8409 { PREFIX_TABLE (PREFIX_VEX_0F52) },
8410 { PREFIX_TABLE (PREFIX_VEX_0F53) },
c0f3af97
L
8411 { "vandpX", { XM, Vex, EXx } },
8412 { "vandnpX", { XM, Vex, EXx } },
8413 { "vorpX", { XM, Vex, EXx } },
8414 { "vxorpX", { XM, Vex, EXx } },
8415 /* 58 */
592a252b
L
8416 { PREFIX_TABLE (PREFIX_VEX_0F58) },
8417 { PREFIX_TABLE (PREFIX_VEX_0F59) },
8418 { PREFIX_TABLE (PREFIX_VEX_0F5A) },
8419 { PREFIX_TABLE (PREFIX_VEX_0F5B) },
8420 { PREFIX_TABLE (PREFIX_VEX_0F5C) },
8421 { PREFIX_TABLE (PREFIX_VEX_0F5D) },
8422 { PREFIX_TABLE (PREFIX_VEX_0F5E) },
8423 { PREFIX_TABLE (PREFIX_VEX_0F5F) },
c0f3af97 8424 /* 60 */
592a252b
L
8425 { PREFIX_TABLE (PREFIX_VEX_0F60) },
8426 { PREFIX_TABLE (PREFIX_VEX_0F61) },
8427 { PREFIX_TABLE (PREFIX_VEX_0F62) },
8428 { PREFIX_TABLE (PREFIX_VEX_0F63) },
8429 { PREFIX_TABLE (PREFIX_VEX_0F64) },
8430 { PREFIX_TABLE (PREFIX_VEX_0F65) },
8431 { PREFIX_TABLE (PREFIX_VEX_0F66) },
8432 { PREFIX_TABLE (PREFIX_VEX_0F67) },
c0f3af97 8433 /* 68 */
592a252b
L
8434 { PREFIX_TABLE (PREFIX_VEX_0F68) },
8435 { PREFIX_TABLE (PREFIX_VEX_0F69) },
8436 { PREFIX_TABLE (PREFIX_VEX_0F6A) },
8437 { PREFIX_TABLE (PREFIX_VEX_0F6B) },
8438 { PREFIX_TABLE (PREFIX_VEX_0F6C) },
8439 { PREFIX_TABLE (PREFIX_VEX_0F6D) },
8440 { PREFIX_TABLE (PREFIX_VEX_0F6E) },
8441 { PREFIX_TABLE (PREFIX_VEX_0F6F) },
c0f3af97 8442 /* 70 */
592a252b
L
8443 { PREFIX_TABLE (PREFIX_VEX_0F70) },
8444 { REG_TABLE (REG_VEX_0F71) },
8445 { REG_TABLE (REG_VEX_0F72) },
8446 { REG_TABLE (REG_VEX_0F73) },
8447 { PREFIX_TABLE (PREFIX_VEX_0F74) },
8448 { PREFIX_TABLE (PREFIX_VEX_0F75) },
8449 { PREFIX_TABLE (PREFIX_VEX_0F76) },
8450 { PREFIX_TABLE (PREFIX_VEX_0F77) },
c0f3af97 8451 /* 78 */
592d1631
L
8452 { Bad_Opcode },
8453 { Bad_Opcode },
8454 { Bad_Opcode },
8455 { Bad_Opcode },
592a252b
L
8456 { PREFIX_TABLE (PREFIX_VEX_0F7C) },
8457 { PREFIX_TABLE (PREFIX_VEX_0F7D) },
8458 { PREFIX_TABLE (PREFIX_VEX_0F7E) },
8459 { PREFIX_TABLE (PREFIX_VEX_0F7F) },
c0f3af97 8460 /* 80 */
592d1631
L
8461 { Bad_Opcode },
8462 { Bad_Opcode },
8463 { Bad_Opcode },
8464 { Bad_Opcode },
8465 { Bad_Opcode },
8466 { Bad_Opcode },
8467 { Bad_Opcode },
8468 { Bad_Opcode },
c0f3af97 8469 /* 88 */
592d1631
L
8470 { Bad_Opcode },
8471 { Bad_Opcode },
8472 { Bad_Opcode },
8473 { Bad_Opcode },
8474 { Bad_Opcode },
8475 { Bad_Opcode },
8476 { Bad_Opcode },
8477 { Bad_Opcode },
c0f3af97 8478 /* 90 */
43234a1e
L
8479 { PREFIX_TABLE (PREFIX_VEX_0F90) },
8480 { PREFIX_TABLE (PREFIX_VEX_0F91) },
8481 { PREFIX_TABLE (PREFIX_VEX_0F92) },
8482 { PREFIX_TABLE (PREFIX_VEX_0F93) },
592d1631
L
8483 { Bad_Opcode },
8484 { Bad_Opcode },
8485 { Bad_Opcode },
8486 { Bad_Opcode },
c0f3af97 8487 /* 98 */
43234a1e 8488 { PREFIX_TABLE (PREFIX_VEX_0F98) },
592d1631
L
8489 { Bad_Opcode },
8490 { Bad_Opcode },
8491 { Bad_Opcode },
8492 { Bad_Opcode },
8493 { Bad_Opcode },
8494 { Bad_Opcode },
8495 { Bad_Opcode },
c0f3af97 8496 /* a0 */
592d1631
L
8497 { Bad_Opcode },
8498 { Bad_Opcode },
8499 { Bad_Opcode },
8500 { Bad_Opcode },
8501 { Bad_Opcode },
8502 { Bad_Opcode },
8503 { Bad_Opcode },
8504 { Bad_Opcode },
c0f3af97 8505 /* a8 */
592d1631
L
8506 { Bad_Opcode },
8507 { Bad_Opcode },
8508 { Bad_Opcode },
8509 { Bad_Opcode },
8510 { Bad_Opcode },
8511 { Bad_Opcode },
592a252b 8512 { REG_TABLE (REG_VEX_0FAE) },
592d1631 8513 { Bad_Opcode },
c0f3af97 8514 /* b0 */
592d1631
L
8515 { Bad_Opcode },
8516 { Bad_Opcode },
8517 { Bad_Opcode },
8518 { Bad_Opcode },
8519 { Bad_Opcode },
8520 { Bad_Opcode },
8521 { Bad_Opcode },
8522 { Bad_Opcode },
c0f3af97 8523 /* b8 */
592d1631
L
8524 { Bad_Opcode },
8525 { Bad_Opcode },
8526 { Bad_Opcode },
8527 { Bad_Opcode },
8528 { Bad_Opcode },
8529 { Bad_Opcode },
8530 { Bad_Opcode },
8531 { Bad_Opcode },
c0f3af97 8532 /* c0 */
592d1631
L
8533 { Bad_Opcode },
8534 { Bad_Opcode },
592a252b 8535 { PREFIX_TABLE (PREFIX_VEX_0FC2) },
592d1631 8536 { Bad_Opcode },
592a252b
L
8537 { PREFIX_TABLE (PREFIX_VEX_0FC4) },
8538 { PREFIX_TABLE (PREFIX_VEX_0FC5) },
c0f3af97 8539 { "vshufpX", { XM, Vex, EXx, Ib } },
592d1631 8540 { Bad_Opcode },
c0f3af97 8541 /* c8 */
592d1631
L
8542 { Bad_Opcode },
8543 { Bad_Opcode },
8544 { Bad_Opcode },
8545 { Bad_Opcode },
8546 { Bad_Opcode },
8547 { Bad_Opcode },
8548 { Bad_Opcode },
8549 { Bad_Opcode },
c0f3af97 8550 /* d0 */
592a252b
L
8551 { PREFIX_TABLE (PREFIX_VEX_0FD0) },
8552 { PREFIX_TABLE (PREFIX_VEX_0FD1) },
8553 { PREFIX_TABLE (PREFIX_VEX_0FD2) },
8554 { PREFIX_TABLE (PREFIX_VEX_0FD3) },
8555 { PREFIX_TABLE (PREFIX_VEX_0FD4) },
8556 { PREFIX_TABLE (PREFIX_VEX_0FD5) },
8557 { PREFIX_TABLE (PREFIX_VEX_0FD6) },
8558 { PREFIX_TABLE (PREFIX_VEX_0FD7) },
c0f3af97 8559 /* d8 */
592a252b
L
8560 { PREFIX_TABLE (PREFIX_VEX_0FD8) },
8561 { PREFIX_TABLE (PREFIX_VEX_0FD9) },
8562 { PREFIX_TABLE (PREFIX_VEX_0FDA) },
8563 { PREFIX_TABLE (PREFIX_VEX_0FDB) },
8564 { PREFIX_TABLE (PREFIX_VEX_0FDC) },
8565 { PREFIX_TABLE (PREFIX_VEX_0FDD) },
8566 { PREFIX_TABLE (PREFIX_VEX_0FDE) },
8567 { PREFIX_TABLE (PREFIX_VEX_0FDF) },
c0f3af97 8568 /* e0 */
592a252b
L
8569 { PREFIX_TABLE (PREFIX_VEX_0FE0) },
8570 { PREFIX_TABLE (PREFIX_VEX_0FE1) },
8571 { PREFIX_TABLE (PREFIX_VEX_0FE2) },
8572 { PREFIX_TABLE (PREFIX_VEX_0FE3) },
8573 { PREFIX_TABLE (PREFIX_VEX_0FE4) },
8574 { PREFIX_TABLE (PREFIX_VEX_0FE5) },
8575 { PREFIX_TABLE (PREFIX_VEX_0FE6) },
8576 { PREFIX_TABLE (PREFIX_VEX_0FE7) },
c0f3af97 8577 /* e8 */
592a252b
L
8578 { PREFIX_TABLE (PREFIX_VEX_0FE8) },
8579 { PREFIX_TABLE (PREFIX_VEX_0FE9) },
8580 { PREFIX_TABLE (PREFIX_VEX_0FEA) },
8581 { PREFIX_TABLE (PREFIX_VEX_0FEB) },
8582 { PREFIX_TABLE (PREFIX_VEX_0FEC) },
8583 { PREFIX_TABLE (PREFIX_VEX_0FED) },
8584 { PREFIX_TABLE (PREFIX_VEX_0FEE) },
8585 { PREFIX_TABLE (PREFIX_VEX_0FEF) },
c0f3af97 8586 /* f0 */
592a252b
L
8587 { PREFIX_TABLE (PREFIX_VEX_0FF0) },
8588 { PREFIX_TABLE (PREFIX_VEX_0FF1) },
8589 { PREFIX_TABLE (PREFIX_VEX_0FF2) },
8590 { PREFIX_TABLE (PREFIX_VEX_0FF3) },
8591 { PREFIX_TABLE (PREFIX_VEX_0FF4) },
8592 { PREFIX_TABLE (PREFIX_VEX_0FF5) },
8593 { PREFIX_TABLE (PREFIX_VEX_0FF6) },
8594 { PREFIX_TABLE (PREFIX_VEX_0FF7) },
c0f3af97 8595 /* f8 */
592a252b
L
8596 { PREFIX_TABLE (PREFIX_VEX_0FF8) },
8597 { PREFIX_TABLE (PREFIX_VEX_0FF9) },
8598 { PREFIX_TABLE (PREFIX_VEX_0FFA) },
8599 { PREFIX_TABLE (PREFIX_VEX_0FFB) },
8600 { PREFIX_TABLE (PREFIX_VEX_0FFC) },
8601 { PREFIX_TABLE (PREFIX_VEX_0FFD) },
8602 { PREFIX_TABLE (PREFIX_VEX_0FFE) },
592d1631 8603 { Bad_Opcode },
c0f3af97
L
8604 },
8605 /* VEX_0F38 */
8606 {
8607 /* 00 */
592a252b
L
8608 { PREFIX_TABLE (PREFIX_VEX_0F3800) },
8609 { PREFIX_TABLE (PREFIX_VEX_0F3801) },
8610 { PREFIX_TABLE (PREFIX_VEX_0F3802) },
8611 { PREFIX_TABLE (PREFIX_VEX_0F3803) },
8612 { PREFIX_TABLE (PREFIX_VEX_0F3804) },
8613 { PREFIX_TABLE (PREFIX_VEX_0F3805) },
8614 { PREFIX_TABLE (PREFIX_VEX_0F3806) },
8615 { PREFIX_TABLE (PREFIX_VEX_0F3807) },
c0f3af97 8616 /* 08 */
592a252b
L
8617 { PREFIX_TABLE (PREFIX_VEX_0F3808) },
8618 { PREFIX_TABLE (PREFIX_VEX_0F3809) },
8619 { PREFIX_TABLE (PREFIX_VEX_0F380A) },
8620 { PREFIX_TABLE (PREFIX_VEX_0F380B) },
8621 { PREFIX_TABLE (PREFIX_VEX_0F380C) },
8622 { PREFIX_TABLE (PREFIX_VEX_0F380D) },
8623 { PREFIX_TABLE (PREFIX_VEX_0F380E) },
8624 { PREFIX_TABLE (PREFIX_VEX_0F380F) },
c0f3af97 8625 /* 10 */
592d1631
L
8626 { Bad_Opcode },
8627 { Bad_Opcode },
8628 { Bad_Opcode },
592a252b 8629 { PREFIX_TABLE (PREFIX_VEX_0F3813) },
592d1631
L
8630 { Bad_Opcode },
8631 { Bad_Opcode },
6c30d220 8632 { PREFIX_TABLE (PREFIX_VEX_0F3816) },
592a252b 8633 { PREFIX_TABLE (PREFIX_VEX_0F3817) },
c0f3af97 8634 /* 18 */
592a252b
L
8635 { PREFIX_TABLE (PREFIX_VEX_0F3818) },
8636 { PREFIX_TABLE (PREFIX_VEX_0F3819) },
8637 { PREFIX_TABLE (PREFIX_VEX_0F381A) },
592d1631 8638 { Bad_Opcode },
592a252b
L
8639 { PREFIX_TABLE (PREFIX_VEX_0F381C) },
8640 { PREFIX_TABLE (PREFIX_VEX_0F381D) },
8641 { PREFIX_TABLE (PREFIX_VEX_0F381E) },
592d1631 8642 { Bad_Opcode },
c0f3af97 8643 /* 20 */
592a252b
L
8644 { PREFIX_TABLE (PREFIX_VEX_0F3820) },
8645 { PREFIX_TABLE (PREFIX_VEX_0F3821) },
8646 { PREFIX_TABLE (PREFIX_VEX_0F3822) },
8647 { PREFIX_TABLE (PREFIX_VEX_0F3823) },
8648 { PREFIX_TABLE (PREFIX_VEX_0F3824) },
8649 { PREFIX_TABLE (PREFIX_VEX_0F3825) },
592d1631
L
8650 { Bad_Opcode },
8651 { Bad_Opcode },
c0f3af97 8652 /* 28 */
592a252b
L
8653 { PREFIX_TABLE (PREFIX_VEX_0F3828) },
8654 { PREFIX_TABLE (PREFIX_VEX_0F3829) },
8655 { PREFIX_TABLE (PREFIX_VEX_0F382A) },
8656 { PREFIX_TABLE (PREFIX_VEX_0F382B) },
8657 { PREFIX_TABLE (PREFIX_VEX_0F382C) },
8658 { PREFIX_TABLE (PREFIX_VEX_0F382D) },
8659 { PREFIX_TABLE (PREFIX_VEX_0F382E) },
8660 { PREFIX_TABLE (PREFIX_VEX_0F382F) },
c0f3af97 8661 /* 30 */
592a252b
L
8662 { PREFIX_TABLE (PREFIX_VEX_0F3830) },
8663 { PREFIX_TABLE (PREFIX_VEX_0F3831) },
8664 { PREFIX_TABLE (PREFIX_VEX_0F3832) },
8665 { PREFIX_TABLE (PREFIX_VEX_0F3833) },
8666 { PREFIX_TABLE (PREFIX_VEX_0F3834) },
8667 { PREFIX_TABLE (PREFIX_VEX_0F3835) },
6c30d220 8668 { PREFIX_TABLE (PREFIX_VEX_0F3836) },
592a252b 8669 { PREFIX_TABLE (PREFIX_VEX_0F3837) },
c0f3af97 8670 /* 38 */
592a252b
L
8671 { PREFIX_TABLE (PREFIX_VEX_0F3838) },
8672 { PREFIX_TABLE (PREFIX_VEX_0F3839) },
8673 { PREFIX_TABLE (PREFIX_VEX_0F383A) },
8674 { PREFIX_TABLE (PREFIX_VEX_0F383B) },
8675 { PREFIX_TABLE (PREFIX_VEX_0F383C) },
8676 { PREFIX_TABLE (PREFIX_VEX_0F383D) },
8677 { PREFIX_TABLE (PREFIX_VEX_0F383E) },
8678 { PREFIX_TABLE (PREFIX_VEX_0F383F) },
c0f3af97 8679 /* 40 */
592a252b
L
8680 { PREFIX_TABLE (PREFIX_VEX_0F3840) },
8681 { PREFIX_TABLE (PREFIX_VEX_0F3841) },
592d1631
L
8682 { Bad_Opcode },
8683 { Bad_Opcode },
8684 { Bad_Opcode },
6c30d220
L
8685 { PREFIX_TABLE (PREFIX_VEX_0F3845) },
8686 { PREFIX_TABLE (PREFIX_VEX_0F3846) },
8687 { PREFIX_TABLE (PREFIX_VEX_0F3847) },
c0f3af97 8688 /* 48 */
592d1631
L
8689 { Bad_Opcode },
8690 { Bad_Opcode },
8691 { Bad_Opcode },
8692 { Bad_Opcode },
8693 { Bad_Opcode },
8694 { Bad_Opcode },
8695 { Bad_Opcode },
8696 { Bad_Opcode },
c0f3af97 8697 /* 50 */
592d1631
L
8698 { Bad_Opcode },
8699 { Bad_Opcode },
8700 { Bad_Opcode },
8701 { Bad_Opcode },
8702 { Bad_Opcode },
8703 { Bad_Opcode },
8704 { Bad_Opcode },
8705 { Bad_Opcode },
c0f3af97 8706 /* 58 */
6c30d220
L
8707 { PREFIX_TABLE (PREFIX_VEX_0F3858) },
8708 { PREFIX_TABLE (PREFIX_VEX_0F3859) },
8709 { PREFIX_TABLE (PREFIX_VEX_0F385A) },
592d1631
L
8710 { Bad_Opcode },
8711 { Bad_Opcode },
8712 { Bad_Opcode },
8713 { Bad_Opcode },
8714 { Bad_Opcode },
c0f3af97 8715 /* 60 */
592d1631
L
8716 { Bad_Opcode },
8717 { Bad_Opcode },
8718 { Bad_Opcode },
8719 { Bad_Opcode },
8720 { Bad_Opcode },
8721 { Bad_Opcode },
8722 { Bad_Opcode },
8723 { Bad_Opcode },
c0f3af97 8724 /* 68 */
592d1631
L
8725 { Bad_Opcode },
8726 { Bad_Opcode },
8727 { Bad_Opcode },
8728 { Bad_Opcode },
8729 { Bad_Opcode },
8730 { Bad_Opcode },
8731 { Bad_Opcode },
8732 { Bad_Opcode },
c0f3af97 8733 /* 70 */
592d1631
L
8734 { Bad_Opcode },
8735 { Bad_Opcode },
8736 { Bad_Opcode },
8737 { Bad_Opcode },
8738 { Bad_Opcode },
8739 { Bad_Opcode },
8740 { Bad_Opcode },
8741 { Bad_Opcode },
c0f3af97 8742 /* 78 */
6c30d220
L
8743 { PREFIX_TABLE (PREFIX_VEX_0F3878) },
8744 { PREFIX_TABLE (PREFIX_VEX_0F3879) },
592d1631
L
8745 { Bad_Opcode },
8746 { Bad_Opcode },
8747 { Bad_Opcode },
8748 { Bad_Opcode },
8749 { Bad_Opcode },
8750 { Bad_Opcode },
c0f3af97 8751 /* 80 */
592d1631
L
8752 { Bad_Opcode },
8753 { Bad_Opcode },
8754 { Bad_Opcode },
8755 { Bad_Opcode },
8756 { Bad_Opcode },
8757 { Bad_Opcode },
8758 { Bad_Opcode },
8759 { Bad_Opcode },
c0f3af97 8760 /* 88 */
592d1631
L
8761 { Bad_Opcode },
8762 { Bad_Opcode },
8763 { Bad_Opcode },
8764 { Bad_Opcode },
6c30d220 8765 { PREFIX_TABLE (PREFIX_VEX_0F388C) },
592d1631 8766 { Bad_Opcode },
6c30d220 8767 { PREFIX_TABLE (PREFIX_VEX_0F388E) },
592d1631 8768 { Bad_Opcode },
c0f3af97 8769 /* 90 */
6c30d220
L
8770 { PREFIX_TABLE (PREFIX_VEX_0F3890) },
8771 { PREFIX_TABLE (PREFIX_VEX_0F3891) },
8772 { PREFIX_TABLE (PREFIX_VEX_0F3892) },
8773 { PREFIX_TABLE (PREFIX_VEX_0F3893) },
592d1631
L
8774 { Bad_Opcode },
8775 { Bad_Opcode },
592a252b
L
8776 { PREFIX_TABLE (PREFIX_VEX_0F3896) },
8777 { PREFIX_TABLE (PREFIX_VEX_0F3897) },
c0f3af97 8778 /* 98 */
592a252b
L
8779 { PREFIX_TABLE (PREFIX_VEX_0F3898) },
8780 { PREFIX_TABLE (PREFIX_VEX_0F3899) },
8781 { PREFIX_TABLE (PREFIX_VEX_0F389A) },
8782 { PREFIX_TABLE (PREFIX_VEX_0F389B) },
8783 { PREFIX_TABLE (PREFIX_VEX_0F389C) },
8784 { PREFIX_TABLE (PREFIX_VEX_0F389D) },
8785 { PREFIX_TABLE (PREFIX_VEX_0F389E) },
8786 { PREFIX_TABLE (PREFIX_VEX_0F389F) },
c0f3af97 8787 /* a0 */
592d1631
L
8788 { Bad_Opcode },
8789 { Bad_Opcode },
8790 { Bad_Opcode },
8791 { Bad_Opcode },
8792 { Bad_Opcode },
8793 { Bad_Opcode },
592a252b
L
8794 { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
8795 { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
c0f3af97 8796 /* a8 */
592a252b
L
8797 { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
8798 { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
8799 { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
8800 { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
8801 { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
8802 { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
8803 { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
8804 { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
c0f3af97 8805 /* b0 */
592d1631
L
8806 { Bad_Opcode },
8807 { Bad_Opcode },
8808 { Bad_Opcode },
8809 { Bad_Opcode },
8810 { Bad_Opcode },
8811 { Bad_Opcode },
592a252b
L
8812 { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
8813 { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
c0f3af97 8814 /* b8 */
592a252b
L
8815 { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
8816 { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
8817 { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
8818 { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
8819 { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
8820 { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
8821 { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
8822 { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
c0f3af97 8823 /* c0 */
592d1631
L
8824 { Bad_Opcode },
8825 { Bad_Opcode },
8826 { Bad_Opcode },
8827 { Bad_Opcode },
8828 { Bad_Opcode },
8829 { Bad_Opcode },
8830 { Bad_Opcode },
8831 { Bad_Opcode },
c0f3af97 8832 /* c8 */
592d1631
L
8833 { Bad_Opcode },
8834 { Bad_Opcode },
8835 { Bad_Opcode },
8836 { Bad_Opcode },
8837 { Bad_Opcode },
8838 { Bad_Opcode },
8839 { Bad_Opcode },
8840 { Bad_Opcode },
c0f3af97 8841 /* d0 */
592d1631
L
8842 { Bad_Opcode },
8843 { Bad_Opcode },
8844 { Bad_Opcode },
8845 { Bad_Opcode },
8846 { Bad_Opcode },
8847 { Bad_Opcode },
8848 { Bad_Opcode },
8849 { Bad_Opcode },
c0f3af97 8850 /* d8 */
592d1631
L
8851 { Bad_Opcode },
8852 { Bad_Opcode },
8853 { Bad_Opcode },
592a252b
L
8854 { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
8855 { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
8856 { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
8857 { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
8858 { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
c0f3af97 8859 /* e0 */
592d1631
L
8860 { Bad_Opcode },
8861 { Bad_Opcode },
8862 { Bad_Opcode },
8863 { Bad_Opcode },
8864 { Bad_Opcode },
8865 { Bad_Opcode },
8866 { Bad_Opcode },
8867 { Bad_Opcode },
c0f3af97 8868 /* e8 */
592d1631
L
8869 { Bad_Opcode },
8870 { Bad_Opcode },
8871 { Bad_Opcode },
8872 { Bad_Opcode },
8873 { Bad_Opcode },
8874 { Bad_Opcode },
8875 { Bad_Opcode },
8876 { Bad_Opcode },
c0f3af97 8877 /* f0 */
592d1631
L
8878 { Bad_Opcode },
8879 { Bad_Opcode },
f12dc422
L
8880 { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
8881 { REG_TABLE (REG_VEX_0F38F3) },
592d1631 8882 { Bad_Opcode },
6c30d220
L
8883 { PREFIX_TABLE (PREFIX_VEX_0F38F5) },
8884 { PREFIX_TABLE (PREFIX_VEX_0F38F6) },
f12dc422 8885 { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
c0f3af97 8886 /* f8 */
592d1631
L
8887 { Bad_Opcode },
8888 { Bad_Opcode },
8889 { Bad_Opcode },
8890 { Bad_Opcode },
8891 { Bad_Opcode },
8892 { Bad_Opcode },
8893 { Bad_Opcode },
8894 { Bad_Opcode },
c0f3af97
L
8895 },
8896 /* VEX_0F3A */
8897 {
8898 /* 00 */
6c30d220
L
8899 { PREFIX_TABLE (PREFIX_VEX_0F3A00) },
8900 { PREFIX_TABLE (PREFIX_VEX_0F3A01) },
8901 { PREFIX_TABLE (PREFIX_VEX_0F3A02) },
592d1631 8902 { Bad_Opcode },
592a252b
L
8903 { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
8904 { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
8905 { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
592d1631 8906 { Bad_Opcode },
c0f3af97 8907 /* 08 */
592a252b
L
8908 { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
8909 { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
8910 { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
8911 { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
8912 { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
8913 { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
8914 { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
8915 { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
c0f3af97 8916 /* 10 */
592d1631
L
8917 { Bad_Opcode },
8918 { Bad_Opcode },
8919 { Bad_Opcode },
8920 { Bad_Opcode },
592a252b
L
8921 { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
8922 { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
8923 { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
8924 { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
c0f3af97 8925 /* 18 */
592a252b
L
8926 { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
8927 { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
592d1631
L
8928 { Bad_Opcode },
8929 { Bad_Opcode },
8930 { Bad_Opcode },
592a252b 8931 { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
592d1631
L
8932 { Bad_Opcode },
8933 { Bad_Opcode },
c0f3af97 8934 /* 20 */
592a252b
L
8935 { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
8936 { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
8937 { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
592d1631
L
8938 { Bad_Opcode },
8939 { Bad_Opcode },
8940 { Bad_Opcode },
8941 { Bad_Opcode },
8942 { Bad_Opcode },
c0f3af97 8943 /* 28 */
592d1631
L
8944 { Bad_Opcode },
8945 { Bad_Opcode },
8946 { Bad_Opcode },
8947 { Bad_Opcode },
8948 { Bad_Opcode },
8949 { Bad_Opcode },
8950 { Bad_Opcode },
8951 { Bad_Opcode },
c0f3af97 8952 /* 30 */
43234a1e 8953 { PREFIX_TABLE (PREFIX_VEX_0F3A30) },
592d1631 8954 { Bad_Opcode },
43234a1e 8955 { PREFIX_TABLE (PREFIX_VEX_0F3A32) },
592d1631
L
8956 { Bad_Opcode },
8957 { Bad_Opcode },
8958 { Bad_Opcode },
8959 { Bad_Opcode },
8960 { Bad_Opcode },
c0f3af97 8961 /* 38 */
6c30d220
L
8962 { PREFIX_TABLE (PREFIX_VEX_0F3A38) },
8963 { PREFIX_TABLE (PREFIX_VEX_0F3A39) },
592d1631
L
8964 { Bad_Opcode },
8965 { Bad_Opcode },
8966 { Bad_Opcode },
8967 { Bad_Opcode },
8968 { Bad_Opcode },
8969 { Bad_Opcode },
c0f3af97 8970 /* 40 */
592a252b
L
8971 { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
8972 { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
8973 { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
592d1631 8974 { Bad_Opcode },
592a252b 8975 { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
592d1631 8976 { Bad_Opcode },
6c30d220 8977 { PREFIX_TABLE (PREFIX_VEX_0F3A46) },
592d1631 8978 { Bad_Opcode },
c0f3af97 8979 /* 48 */
592a252b
L
8980 { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
8981 { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
8982 { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
8983 { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
8984 { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
592d1631
L
8985 { Bad_Opcode },
8986 { Bad_Opcode },
8987 { Bad_Opcode },
c0f3af97 8988 /* 50 */
592d1631
L
8989 { Bad_Opcode },
8990 { Bad_Opcode },
8991 { Bad_Opcode },
8992 { Bad_Opcode },
8993 { Bad_Opcode },
8994 { Bad_Opcode },
8995 { Bad_Opcode },
8996 { Bad_Opcode },
c0f3af97 8997 /* 58 */
592d1631
L
8998 { Bad_Opcode },
8999 { Bad_Opcode },
9000 { Bad_Opcode },
9001 { Bad_Opcode },
592a252b
L
9002 { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
9003 { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
9004 { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
9005 { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
c0f3af97 9006 /* 60 */
592a252b
L
9007 { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
9008 { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
9009 { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
9010 { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
592d1631
L
9011 { Bad_Opcode },
9012 { Bad_Opcode },
9013 { Bad_Opcode },
9014 { Bad_Opcode },
c0f3af97 9015 /* 68 */
592a252b
L
9016 { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
9017 { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
9018 { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
9019 { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
9020 { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
9021 { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
9022 { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
9023 { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
c0f3af97 9024 /* 70 */
592d1631
L
9025 { Bad_Opcode },
9026 { Bad_Opcode },
9027 { Bad_Opcode },
9028 { Bad_Opcode },
9029 { Bad_Opcode },
9030 { Bad_Opcode },
9031 { Bad_Opcode },
9032 { Bad_Opcode },
c0f3af97 9033 /* 78 */
592a252b
L
9034 { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
9035 { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
9036 { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
9037 { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
9038 { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
9039 { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
9040 { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
9041 { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
c0f3af97 9042 /* 80 */
592d1631
L
9043 { Bad_Opcode },
9044 { Bad_Opcode },
9045 { Bad_Opcode },
9046 { Bad_Opcode },
9047 { Bad_Opcode },
9048 { Bad_Opcode },
9049 { Bad_Opcode },
9050 { Bad_Opcode },
c0f3af97 9051 /* 88 */
592d1631
L
9052 { Bad_Opcode },
9053 { Bad_Opcode },
9054 { Bad_Opcode },
9055 { Bad_Opcode },
9056 { Bad_Opcode },
9057 { Bad_Opcode },
9058 { Bad_Opcode },
9059 { Bad_Opcode },
c0f3af97 9060 /* 90 */
592d1631
L
9061 { Bad_Opcode },
9062 { Bad_Opcode },
9063 { Bad_Opcode },
9064 { Bad_Opcode },
9065 { Bad_Opcode },
9066 { Bad_Opcode },
9067 { Bad_Opcode },
9068 { Bad_Opcode },
c0f3af97 9069 /* 98 */
592d1631
L
9070 { Bad_Opcode },
9071 { Bad_Opcode },
9072 { Bad_Opcode },
9073 { Bad_Opcode },
9074 { Bad_Opcode },
9075 { Bad_Opcode },
9076 { Bad_Opcode },
9077 { Bad_Opcode },
c0f3af97 9078 /* a0 */
592d1631
L
9079 { Bad_Opcode },
9080 { Bad_Opcode },
9081 { Bad_Opcode },
9082 { Bad_Opcode },
9083 { Bad_Opcode },
9084 { Bad_Opcode },
9085 { Bad_Opcode },
9086 { Bad_Opcode },
c0f3af97 9087 /* a8 */
592d1631
L
9088 { Bad_Opcode },
9089 { Bad_Opcode },
9090 { Bad_Opcode },
9091 { Bad_Opcode },
9092 { Bad_Opcode },
9093 { Bad_Opcode },
9094 { Bad_Opcode },
9095 { Bad_Opcode },
c0f3af97 9096 /* b0 */
592d1631
L
9097 { Bad_Opcode },
9098 { Bad_Opcode },
9099 { Bad_Opcode },
9100 { Bad_Opcode },
9101 { Bad_Opcode },
9102 { Bad_Opcode },
9103 { Bad_Opcode },
9104 { Bad_Opcode },
c0f3af97 9105 /* b8 */
592d1631
L
9106 { Bad_Opcode },
9107 { Bad_Opcode },
9108 { Bad_Opcode },
9109 { Bad_Opcode },
9110 { Bad_Opcode },
9111 { Bad_Opcode },
9112 { Bad_Opcode },
9113 { Bad_Opcode },
c0f3af97 9114 /* c0 */
592d1631
L
9115 { Bad_Opcode },
9116 { Bad_Opcode },
9117 { Bad_Opcode },
9118 { Bad_Opcode },
9119 { Bad_Opcode },
9120 { Bad_Opcode },
9121 { Bad_Opcode },
9122 { Bad_Opcode },
c0f3af97 9123 /* c8 */
592d1631
L
9124 { Bad_Opcode },
9125 { Bad_Opcode },
9126 { Bad_Opcode },
9127 { Bad_Opcode },
9128 { Bad_Opcode },
9129 { Bad_Opcode },
9130 { Bad_Opcode },
9131 { Bad_Opcode },
c0f3af97 9132 /* d0 */
592d1631
L
9133 { Bad_Opcode },
9134 { Bad_Opcode },
9135 { Bad_Opcode },
9136 { Bad_Opcode },
9137 { Bad_Opcode },
9138 { Bad_Opcode },
9139 { Bad_Opcode },
9140 { Bad_Opcode },
c0f3af97 9141 /* d8 */
592d1631
L
9142 { Bad_Opcode },
9143 { Bad_Opcode },
9144 { Bad_Opcode },
9145 { Bad_Opcode },
9146 { Bad_Opcode },
9147 { Bad_Opcode },
9148 { Bad_Opcode },
592a252b 9149 { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
c0f3af97 9150 /* e0 */
592d1631
L
9151 { Bad_Opcode },
9152 { Bad_Opcode },
9153 { Bad_Opcode },
9154 { Bad_Opcode },
9155 { Bad_Opcode },
9156 { Bad_Opcode },
9157 { Bad_Opcode },
9158 { Bad_Opcode },
c0f3af97 9159 /* e8 */
592d1631
L
9160 { Bad_Opcode },
9161 { Bad_Opcode },
9162 { Bad_Opcode },
9163 { Bad_Opcode },
9164 { Bad_Opcode },
9165 { Bad_Opcode },
9166 { Bad_Opcode },
9167 { Bad_Opcode },
c0f3af97 9168 /* f0 */
6c30d220 9169 { PREFIX_TABLE (PREFIX_VEX_0F3AF0) },
592d1631
L
9170 { Bad_Opcode },
9171 { Bad_Opcode },
9172 { Bad_Opcode },
9173 { Bad_Opcode },
9174 { Bad_Opcode },
9175 { Bad_Opcode },
9176 { Bad_Opcode },
c0f3af97 9177 /* f8 */
592d1631
L
9178 { Bad_Opcode },
9179 { Bad_Opcode },
9180 { Bad_Opcode },
9181 { Bad_Opcode },
9182 { Bad_Opcode },
9183 { Bad_Opcode },
9184 { Bad_Opcode },
9185 { Bad_Opcode },
c0f3af97
L
9186 },
9187};
9188
43234a1e
L
9189#define NEED_OPCODE_TABLE
9190#include "i386-dis-evex.h"
9191#undef NEED_OPCODE_TABLE
c0f3af97 9192static const struct dis386 vex_len_table[][2] = {
592a252b 9193 /* VEX_LEN_0F10_P_1 */
c0f3af97 9194 {
592a252b
L
9195 { VEX_W_TABLE (VEX_W_0F10_P_1) },
9196 { VEX_W_TABLE (VEX_W_0F10_P_1) },
c0f3af97
L
9197 },
9198
592a252b 9199 /* VEX_LEN_0F10_P_3 */
c0f3af97 9200 {
592a252b
L
9201 { VEX_W_TABLE (VEX_W_0F10_P_3) },
9202 { VEX_W_TABLE (VEX_W_0F10_P_3) },
c0f3af97
L
9203 },
9204
592a252b 9205 /* VEX_LEN_0F11_P_1 */
c0f3af97 9206 {
592a252b
L
9207 { VEX_W_TABLE (VEX_W_0F11_P_1) },
9208 { VEX_W_TABLE (VEX_W_0F11_P_1) },
c0f3af97
L
9209 },
9210
592a252b 9211 /* VEX_LEN_0F11_P_3 */
c0f3af97 9212 {
592a252b
L
9213 { VEX_W_TABLE (VEX_W_0F11_P_3) },
9214 { VEX_W_TABLE (VEX_W_0F11_P_3) },
c0f3af97
L
9215 },
9216
592a252b 9217 /* VEX_LEN_0F12_P_0_M_0 */
c0f3af97 9218 {
592a252b 9219 { VEX_W_TABLE (VEX_W_0F12_P_0_M_0) },
c0f3af97
L
9220 },
9221
592a252b 9222 /* VEX_LEN_0F12_P_0_M_1 */
c0f3af97 9223 {
592a252b 9224 { VEX_W_TABLE (VEX_W_0F12_P_0_M_1) },
c0f3af97
L
9225 },
9226
592a252b 9227 /* VEX_LEN_0F12_P_2 */
c0f3af97 9228 {
592a252b 9229 { VEX_W_TABLE (VEX_W_0F12_P_2) },
c0f3af97
L
9230 },
9231
592a252b 9232 /* VEX_LEN_0F13_M_0 */
c0f3af97 9233 {
592a252b 9234 { VEX_W_TABLE (VEX_W_0F13_M_0) },
c0f3af97
L
9235 },
9236
592a252b 9237 /* VEX_LEN_0F16_P_0_M_0 */
c0f3af97 9238 {
592a252b 9239 { VEX_W_TABLE (VEX_W_0F16_P_0_M_0) },
c0f3af97
L
9240 },
9241
592a252b 9242 /* VEX_LEN_0F16_P_0_M_1 */
c0f3af97 9243 {
592a252b 9244 { VEX_W_TABLE (VEX_W_0F16_P_0_M_1) },
c0f3af97
L
9245 },
9246
592a252b 9247 /* VEX_LEN_0F16_P_2 */
c0f3af97 9248 {
592a252b 9249 { VEX_W_TABLE (VEX_W_0F16_P_2) },
c0f3af97
L
9250 },
9251
592a252b 9252 /* VEX_LEN_0F17_M_0 */
c0f3af97 9253 {
592a252b 9254 { VEX_W_TABLE (VEX_W_0F17_M_0) },
c0f3af97
L
9255 },
9256
592a252b 9257 /* VEX_LEN_0F2A_P_1 */
c0f3af97 9258 {
539f890d
L
9259 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev } },
9260 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev } },
c0f3af97
L
9261 },
9262
592a252b 9263 /* VEX_LEN_0F2A_P_3 */
c0f3af97 9264 {
539f890d
L
9265 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev } },
9266 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev } },
c0f3af97
L
9267 },
9268
592a252b 9269 /* VEX_LEN_0F2C_P_1 */
c0f3af97 9270 {
539f890d
L
9271 { "vcvttss2siY", { Gv, EXdScalar } },
9272 { "vcvttss2siY", { Gv, EXdScalar } },
c0f3af97
L
9273 },
9274
592a252b 9275 /* VEX_LEN_0F2C_P_3 */
c0f3af97 9276 {
539f890d
L
9277 { "vcvttsd2siY", { Gv, EXqScalar } },
9278 { "vcvttsd2siY", { Gv, EXqScalar } },
c0f3af97
L
9279 },
9280
592a252b 9281 /* VEX_LEN_0F2D_P_1 */
c0f3af97 9282 {
539f890d
L
9283 { "vcvtss2siY", { Gv, EXdScalar } },
9284 { "vcvtss2siY", { Gv, EXdScalar } },
c0f3af97
L
9285 },
9286
592a252b 9287 /* VEX_LEN_0F2D_P_3 */
c0f3af97 9288 {
539f890d
L
9289 { "vcvtsd2siY", { Gv, EXqScalar } },
9290 { "vcvtsd2siY", { Gv, EXqScalar } },
c0f3af97
L
9291 },
9292
592a252b 9293 /* VEX_LEN_0F2E_P_0 */
c0f3af97 9294 {
592a252b
L
9295 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
9296 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
c0f3af97
L
9297 },
9298
592a252b 9299 /* VEX_LEN_0F2E_P_2 */
c0f3af97 9300 {
592a252b
L
9301 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
9302 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
c0f3af97
L
9303 },
9304
592a252b 9305 /* VEX_LEN_0F2F_P_0 */
c0f3af97 9306 {
592a252b
L
9307 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
9308 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
c0f3af97
L
9309 },
9310
592a252b 9311 /* VEX_LEN_0F2F_P_2 */
c0f3af97 9312 {
592a252b
L
9313 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
9314 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
c0f3af97
L
9315 },
9316
43234a1e
L
9317 /* VEX_LEN_0F41_P_0 */
9318 {
9319 { Bad_Opcode },
9320 { VEX_W_TABLE (VEX_W_0F41_P_0_LEN_1) },
9321 },
9322 /* VEX_LEN_0F42_P_0 */
9323 {
9324 { Bad_Opcode },
9325 { VEX_W_TABLE (VEX_W_0F42_P_0_LEN_1) },
9326 },
9327 /* VEX_LEN_0F44_P_0 */
9328 {
9329 { VEX_W_TABLE (VEX_W_0F44_P_0_LEN_0) },
9330 },
9331 /* VEX_LEN_0F45_P_0 */
9332 {
9333 { Bad_Opcode },
9334 { VEX_W_TABLE (VEX_W_0F45_P_0_LEN_1) },
9335 },
9336 /* VEX_LEN_0F46_P_0 */
9337 {
9338 { Bad_Opcode },
9339 { VEX_W_TABLE (VEX_W_0F46_P_0_LEN_1) },
9340 },
9341 /* VEX_LEN_0F47_P_0 */
9342 {
9343 { Bad_Opcode },
9344 { VEX_W_TABLE (VEX_W_0F47_P_0_LEN_1) },
9345 },
9346 /* VEX_LEN_0F4B_P_2 */
9347 {
9348 { Bad_Opcode },
9349 { VEX_W_TABLE (VEX_W_0F4B_P_2_LEN_1) },
9350 },
9351
592a252b 9352 /* VEX_LEN_0F51_P_1 */
c0f3af97 9353 {
592a252b
L
9354 { VEX_W_TABLE (VEX_W_0F51_P_1) },
9355 { VEX_W_TABLE (VEX_W_0F51_P_1) },
c0f3af97
L
9356 },
9357
592a252b 9358 /* VEX_LEN_0F51_P_3 */
c0f3af97 9359 {
592a252b
L
9360 { VEX_W_TABLE (VEX_W_0F51_P_3) },
9361 { VEX_W_TABLE (VEX_W_0F51_P_3) },
c0f3af97
L
9362 },
9363
592a252b 9364 /* VEX_LEN_0F52_P_1 */
c0f3af97 9365 {
592a252b
L
9366 { VEX_W_TABLE (VEX_W_0F52_P_1) },
9367 { VEX_W_TABLE (VEX_W_0F52_P_1) },
c0f3af97
L
9368 },
9369
592a252b 9370 /* VEX_LEN_0F53_P_1 */
c0f3af97 9371 {
592a252b
L
9372 { VEX_W_TABLE (VEX_W_0F53_P_1) },
9373 { VEX_W_TABLE (VEX_W_0F53_P_1) },
c0f3af97
L
9374 },
9375
592a252b 9376 /* VEX_LEN_0F58_P_1 */
c0f3af97 9377 {
592a252b
L
9378 { VEX_W_TABLE (VEX_W_0F58_P_1) },
9379 { VEX_W_TABLE (VEX_W_0F58_P_1) },
c0f3af97
L
9380 },
9381
592a252b 9382 /* VEX_LEN_0F58_P_3 */
c0f3af97 9383 {
592a252b
L
9384 { VEX_W_TABLE (VEX_W_0F58_P_3) },
9385 { VEX_W_TABLE (VEX_W_0F58_P_3) },
c0f3af97
L
9386 },
9387
592a252b 9388 /* VEX_LEN_0F59_P_1 */
c0f3af97 9389 {
592a252b
L
9390 { VEX_W_TABLE (VEX_W_0F59_P_1) },
9391 { VEX_W_TABLE (VEX_W_0F59_P_1) },
c0f3af97
L
9392 },
9393
592a252b 9394 /* VEX_LEN_0F59_P_3 */
c0f3af97 9395 {
592a252b
L
9396 { VEX_W_TABLE (VEX_W_0F59_P_3) },
9397 { VEX_W_TABLE (VEX_W_0F59_P_3) },
c0f3af97
L
9398 },
9399
592a252b 9400 /* VEX_LEN_0F5A_P_1 */
c0f3af97 9401 {
592a252b
L
9402 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
9403 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
c0f3af97
L
9404 },
9405
592a252b 9406 /* VEX_LEN_0F5A_P_3 */
c0f3af97 9407 {
592a252b
L
9408 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
9409 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
c0f3af97
L
9410 },
9411
592a252b 9412 /* VEX_LEN_0F5C_P_1 */
c0f3af97 9413 {
592a252b
L
9414 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
9415 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
c0f3af97
L
9416 },
9417
592a252b 9418 /* VEX_LEN_0F5C_P_3 */
c0f3af97 9419 {
592a252b
L
9420 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
9421 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
c0f3af97
L
9422 },
9423
592a252b 9424 /* VEX_LEN_0F5D_P_1 */
c0f3af97 9425 {
592a252b
L
9426 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
9427 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
c0f3af97
L
9428 },
9429
592a252b 9430 /* VEX_LEN_0F5D_P_3 */
c0f3af97 9431 {
592a252b
L
9432 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
9433 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
c0f3af97
L
9434 },
9435
592a252b 9436 /* VEX_LEN_0F5E_P_1 */
c0f3af97 9437 {
592a252b
L
9438 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
9439 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
c0f3af97
L
9440 },
9441
592a252b 9442 /* VEX_LEN_0F5E_P_3 */
c0f3af97 9443 {
592a252b
L
9444 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
9445 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
c0f3af97
L
9446 },
9447
592a252b 9448 /* VEX_LEN_0F5F_P_1 */
c0f3af97 9449 {
592a252b
L
9450 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
9451 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
c0f3af97
L
9452 },
9453
592a252b 9454 /* VEX_LEN_0F5F_P_3 */
c0f3af97 9455 {
592a252b
L
9456 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
9457 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
c0f3af97
L
9458 },
9459
592a252b 9460 /* VEX_LEN_0F6E_P_2 */
c0f3af97 9461 {
539f890d
L
9462 { "vmovK", { XMScalar, Edq } },
9463 { "vmovK", { XMScalar, Edq } },
c0f3af97
L
9464 },
9465
592a252b 9466 /* VEX_LEN_0F7E_P_1 */
c0f3af97 9467 {
592a252b
L
9468 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
9469 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
c0f3af97
L
9470 },
9471
592a252b 9472 /* VEX_LEN_0F7E_P_2 */
c0f3af97 9473 {
539f890d 9474 { "vmovK", { Edq, XMScalar } },
6c30d220 9475 { "vmovK", { Edq, XMScalar } },
c0f3af97
L
9476 },
9477
43234a1e
L
9478 /* VEX_LEN_0F90_P_0 */
9479 {
9480 { VEX_W_TABLE (VEX_W_0F90_P_0_LEN_0) },
9481 },
9482
9483 /* VEX_LEN_0F91_P_0 */
9484 {
9485 { VEX_W_TABLE (VEX_W_0F91_P_0_LEN_0) },
9486 },
9487
9488 /* VEX_LEN_0F92_P_0 */
9489 {
9490 { VEX_W_TABLE (VEX_W_0F92_P_0_LEN_0) },
9491 },
9492
9493 /* VEX_LEN_0F93_P_0 */
9494 {
9495 { VEX_W_TABLE (VEX_W_0F93_P_0_LEN_0) },
9496 },
9497
9498 /* VEX_LEN_0F98_P_0 */
9499 {
9500 { VEX_W_TABLE (VEX_W_0F98_P_0_LEN_0) },
9501 },
9502
6c30d220 9503 /* VEX_LEN_0FAE_R_2_M_0 */
c0f3af97 9504 {
6c30d220 9505 { VEX_W_TABLE (VEX_W_0FAE_R_2_M_0) },
c0f3af97
L
9506 },
9507
6c30d220 9508 /* VEX_LEN_0FAE_R_3_M_0 */
c0f3af97 9509 {
6c30d220 9510 { VEX_W_TABLE (VEX_W_0FAE_R_3_M_0) },
c0f3af97
L
9511 },
9512
6c30d220 9513 /* VEX_LEN_0FC2_P_1 */
c0f3af97 9514 {
6c30d220
L
9515 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
9516 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
c0f3af97
L
9517 },
9518
6c30d220 9519 /* VEX_LEN_0FC2_P_3 */
c0f3af97 9520 {
6c30d220
L
9521 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
9522 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
c0f3af97
L
9523 },
9524
6c30d220 9525 /* VEX_LEN_0FC4_P_2 */
c0f3af97 9526 {
6c30d220 9527 { VEX_W_TABLE (VEX_W_0FC4_P_2) },
c0f3af97
L
9528 },
9529
6c30d220 9530 /* VEX_LEN_0FC5_P_2 */
c0f3af97 9531 {
6c30d220 9532 { VEX_W_TABLE (VEX_W_0FC5_P_2) },
c0f3af97
L
9533 },
9534
6c30d220 9535 /* VEX_LEN_0FD6_P_2 */
c0f3af97 9536 {
6c30d220
L
9537 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
9538 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
c0f3af97
L
9539 },
9540
6c30d220 9541 /* VEX_LEN_0FF7_P_2 */
c0f3af97 9542 {
6c30d220 9543 { VEX_W_TABLE (VEX_W_0FF7_P_2) },
c0f3af97
L
9544 },
9545
6c30d220 9546 /* VEX_LEN_0F3816_P_2 */
c0f3af97 9547 {
6c30d220
L
9548 { Bad_Opcode },
9549 { VEX_W_TABLE (VEX_W_0F3816_P_2) },
c0f3af97
L
9550 },
9551
6c30d220 9552 /* VEX_LEN_0F3819_P_2 */
c0f3af97 9553 {
6c30d220
L
9554 { Bad_Opcode },
9555 { VEX_W_TABLE (VEX_W_0F3819_P_2) },
c0f3af97
L
9556 },
9557
6c30d220 9558 /* VEX_LEN_0F381A_P_2_M_0 */
c0f3af97 9559 {
6c30d220
L
9560 { Bad_Opcode },
9561 { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
c0f3af97
L
9562 },
9563
6c30d220 9564 /* VEX_LEN_0F3836_P_2 */
c0f3af97 9565 {
6c30d220
L
9566 { Bad_Opcode },
9567 { VEX_W_TABLE (VEX_W_0F3836_P_2) },
c0f3af97
L
9568 },
9569
592a252b 9570 /* VEX_LEN_0F3841_P_2 */
c0f3af97 9571 {
592a252b 9572 { VEX_W_TABLE (VEX_W_0F3841_P_2) },
c0f3af97
L
9573 },
9574
6c30d220
L
9575 /* VEX_LEN_0F385A_P_2_M_0 */
9576 {
9577 { Bad_Opcode },
9578 { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) },
9579 },
9580
592a252b 9581 /* VEX_LEN_0F38DB_P_2 */
a5ff0eb2 9582 {
592a252b 9583 { VEX_W_TABLE (VEX_W_0F38DB_P_2) },
a5ff0eb2
L
9584 },
9585
592a252b 9586 /* VEX_LEN_0F38DC_P_2 */
a5ff0eb2 9587 {
592a252b 9588 { VEX_W_TABLE (VEX_W_0F38DC_P_2) },
a5ff0eb2
L
9589 },
9590
592a252b 9591 /* VEX_LEN_0F38DD_P_2 */
a5ff0eb2 9592 {
592a252b 9593 { VEX_W_TABLE (VEX_W_0F38DD_P_2) },
a5ff0eb2
L
9594 },
9595
592a252b 9596 /* VEX_LEN_0F38DE_P_2 */
a5ff0eb2 9597 {
592a252b 9598 { VEX_W_TABLE (VEX_W_0F38DE_P_2) },
a5ff0eb2
L
9599 },
9600
592a252b 9601 /* VEX_LEN_0F38DF_P_2 */
a5ff0eb2 9602 {
592a252b 9603 { VEX_W_TABLE (VEX_W_0F38DF_P_2) },
a5ff0eb2
L
9604 },
9605
f12dc422
L
9606 /* VEX_LEN_0F38F2_P_0 */
9607 {
9608 { "andnS", { Gdq, VexGdq, Edq } },
9609 },
9610
9611 /* VEX_LEN_0F38F3_R_1_P_0 */
9612 {
9613 { "blsrS", { VexGdq, Edq } },
9614 },
9615
9616 /* VEX_LEN_0F38F3_R_2_P_0 */
9617 {
9618 { "blsmskS", { VexGdq, Edq } },
9619 },
9620
9621 /* VEX_LEN_0F38F3_R_3_P_0 */
9622 {
9623 { "blsiS", { VexGdq, Edq } },
9624 },
9625
6c30d220
L
9626 /* VEX_LEN_0F38F5_P_0 */
9627 {
9628 { "bzhiS", { Gdq, Edq, VexGdq } },
9629 },
9630
9631 /* VEX_LEN_0F38F5_P_1 */
9632 {
9633 { "pextS", { Gdq, VexGdq, Edq } },
9634 },
9635
9636 /* VEX_LEN_0F38F5_P_3 */
9637 {
9638 { "pdepS", { Gdq, VexGdq, Edq } },
9639 },
9640
9641 /* VEX_LEN_0F38F6_P_3 */
9642 {
9643 { "mulxS", { Gdq, VexGdq, Edq } },
9644 },
9645
f12dc422
L
9646 /* VEX_LEN_0F38F7_P_0 */
9647 {
9648 { "bextrS", { Gdq, Edq, VexGdq } },
9649 },
9650
6c30d220
L
9651 /* VEX_LEN_0F38F7_P_1 */
9652 {
9653 { "sarxS", { Gdq, Edq, VexGdq } },
9654 },
9655
9656 /* VEX_LEN_0F38F7_P_2 */
9657 {
9658 { "shlxS", { Gdq, Edq, VexGdq } },
9659 },
9660
9661 /* VEX_LEN_0F38F7_P_3 */
9662 {
9663 { "shrxS", { Gdq, Edq, VexGdq } },
9664 },
9665
9666 /* VEX_LEN_0F3A00_P_2 */
9667 {
9668 { Bad_Opcode },
9669 { VEX_W_TABLE (VEX_W_0F3A00_P_2) },
9670 },
9671
9672 /* VEX_LEN_0F3A01_P_2 */
9673 {
9674 { Bad_Opcode },
9675 { VEX_W_TABLE (VEX_W_0F3A01_P_2) },
9676 },
9677
592a252b 9678 /* VEX_LEN_0F3A06_P_2 */
c0f3af97 9679 {
592d1631 9680 { Bad_Opcode },
592a252b 9681 { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
c0f3af97
L
9682 },
9683
592a252b 9684 /* VEX_LEN_0F3A0A_P_2 */
c0f3af97 9685 {
592a252b
L
9686 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
9687 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
c0f3af97
L
9688 },
9689
592a252b 9690 /* VEX_LEN_0F3A0B_P_2 */
c0f3af97 9691 {
592a252b
L
9692 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
9693 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
c0f3af97
L
9694 },
9695
592a252b 9696 /* VEX_LEN_0F3A14_P_2 */
c0f3af97 9697 {
592a252b 9698 { VEX_W_TABLE (VEX_W_0F3A14_P_2) },
c0f3af97
L
9699 },
9700
592a252b 9701 /* VEX_LEN_0F3A15_P_2 */
c0f3af97 9702 {
592a252b 9703 { VEX_W_TABLE (VEX_W_0F3A15_P_2) },
c0f3af97
L
9704 },
9705
592a252b 9706 /* VEX_LEN_0F3A16_P_2 */
c0f3af97
L
9707 {
9708 { "vpextrK", { Edq, XM, Ib } },
c0f3af97
L
9709 },
9710
592a252b 9711 /* VEX_LEN_0F3A17_P_2 */
c0f3af97
L
9712 {
9713 { "vextractps", { Edqd, XM, Ib } },
c0f3af97
L
9714 },
9715
592a252b 9716 /* VEX_LEN_0F3A18_P_2 */
c0f3af97 9717 {
592d1631 9718 { Bad_Opcode },
592a252b 9719 { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
c0f3af97
L
9720 },
9721
592a252b 9722 /* VEX_LEN_0F3A19_P_2 */
c0f3af97 9723 {
592d1631 9724 { Bad_Opcode },
592a252b 9725 { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
c0f3af97
L
9726 },
9727
592a252b 9728 /* VEX_LEN_0F3A20_P_2 */
c0f3af97 9729 {
592a252b 9730 { VEX_W_TABLE (VEX_W_0F3A20_P_2) },
c0f3af97
L
9731 },
9732
592a252b 9733 /* VEX_LEN_0F3A21_P_2 */
c0f3af97 9734 {
592a252b 9735 { VEX_W_TABLE (VEX_W_0F3A21_P_2) },
c0f3af97
L
9736 },
9737
592a252b 9738 /* VEX_LEN_0F3A22_P_2 */
c0f3af97
L
9739 {
9740 { "vpinsrK", { XM, Vex128, Edq, Ib } },
c0f3af97
L
9741 },
9742
43234a1e
L
9743 /* VEX_LEN_0F3A30_P_2 */
9744 {
9745 { VEX_W_TABLE (VEX_W_0F3A30_P_2_LEN_0) },
9746 },
9747
9748 /* VEX_LEN_0F3A32_P_2 */
9749 {
9750 { VEX_W_TABLE (VEX_W_0F3A32_P_2_LEN_0) },
9751 },
9752
6c30d220 9753 /* VEX_LEN_0F3A38_P_2 */
c0f3af97 9754 {
6c30d220
L
9755 { Bad_Opcode },
9756 { VEX_W_TABLE (VEX_W_0F3A38_P_2) },
c0f3af97
L
9757 },
9758
6c30d220 9759 /* VEX_LEN_0F3A39_P_2 */
c0f3af97 9760 {
6c30d220
L
9761 { Bad_Opcode },
9762 { VEX_W_TABLE (VEX_W_0F3A39_P_2) },
9763 },
9764
9765 /* VEX_LEN_0F3A41_P_2 */
9766 {
9767 { VEX_W_TABLE (VEX_W_0F3A41_P_2) },
c0f3af97
L
9768 },
9769
592a252b 9770 /* VEX_LEN_0F3A44_P_2 */
ce2f5b3c 9771 {
592a252b 9772 { VEX_W_TABLE (VEX_W_0F3A44_P_2) },
ce2f5b3c
L
9773 },
9774
6c30d220 9775 /* VEX_LEN_0F3A46_P_2 */
c0f3af97 9776 {
6c30d220
L
9777 { Bad_Opcode },
9778 { VEX_W_TABLE (VEX_W_0F3A46_P_2) },
c0f3af97
L
9779 },
9780
592a252b 9781 /* VEX_LEN_0F3A60_P_2 */
c0f3af97 9782 {
592a252b 9783 { VEX_W_TABLE (VEX_W_0F3A60_P_2) },
c0f3af97
L
9784 },
9785
592a252b 9786 /* VEX_LEN_0F3A61_P_2 */
c0f3af97 9787 {
592a252b 9788 { VEX_W_TABLE (VEX_W_0F3A61_P_2) },
c0f3af97
L
9789 },
9790
592a252b 9791 /* VEX_LEN_0F3A62_P_2 */
c0f3af97 9792 {
592a252b 9793 { VEX_W_TABLE (VEX_W_0F3A62_P_2) },
c0f3af97
L
9794 },
9795
592a252b 9796 /* VEX_LEN_0F3A63_P_2 */
c0f3af97 9797 {
592a252b 9798 { VEX_W_TABLE (VEX_W_0F3A63_P_2) },
c0f3af97
L
9799 },
9800
592a252b 9801 /* VEX_LEN_0F3A6A_P_2 */
922d8de8 9802 {
206c2556 9803 { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9804 },
9805
592a252b 9806 /* VEX_LEN_0F3A6B_P_2 */
922d8de8 9807 {
206c2556 9808 { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9809 },
9810
592a252b 9811 /* VEX_LEN_0F3A6E_P_2 */
922d8de8 9812 {
206c2556 9813 { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9814 },
9815
592a252b 9816 /* VEX_LEN_0F3A6F_P_2 */
922d8de8 9817 {
206c2556 9818 { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9819 },
9820
592a252b 9821 /* VEX_LEN_0F3A7A_P_2 */
922d8de8 9822 {
206c2556 9823 { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9824 },
9825
592a252b 9826 /* VEX_LEN_0F3A7B_P_2 */
922d8de8 9827 {
206c2556 9828 { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9829 },
9830
592a252b 9831 /* VEX_LEN_0F3A7E_P_2 */
922d8de8 9832 {
206c2556 9833 { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9834 },
9835
592a252b 9836 /* VEX_LEN_0F3A7F_P_2 */
922d8de8 9837 {
206c2556 9838 { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9839 },
9840
592a252b 9841 /* VEX_LEN_0F3ADF_P_2 */
a5ff0eb2 9842 {
592a252b 9843 { VEX_W_TABLE (VEX_W_0F3ADF_P_2) },
a5ff0eb2 9844 },
4c807e72 9845
6c30d220
L
9846 /* VEX_LEN_0F3AF0_P_3 */
9847 {
182ae480 9848 { "rorxS", { Gdq, Edq, Ib } },
6c30d220
L
9849 },
9850
ff688e1f
L
9851 /* VEX_LEN_0FXOP_08_CC */
9852 {
9853 { "vpcomb", { XM, Vex128, EXx, Ib } },
9854 },
9855
9856 /* VEX_LEN_0FXOP_08_CD */
9857 {
9858 { "vpcomw", { XM, Vex128, EXx, Ib } },
9859 },
9860
9861 /* VEX_LEN_0FXOP_08_CE */
9862 {
9863 { "vpcomd", { XM, Vex128, EXx, Ib } },
9864 },
9865
9866 /* VEX_LEN_0FXOP_08_CF */
9867 {
9868 { "vpcomq", { XM, Vex128, EXx, Ib } },
9869 },
9870
9871 /* VEX_LEN_0FXOP_08_EC */
9872 {
9873 { "vpcomub", { XM, Vex128, EXx, Ib } },
9874 },
9875
9876 /* VEX_LEN_0FXOP_08_ED */
9877 {
9878 { "vpcomuw", { XM, Vex128, EXx, Ib } },
9879 },
9880
9881 /* VEX_LEN_0FXOP_08_EE */
9882 {
9883 { "vpcomud", { XM, Vex128, EXx, Ib } },
9884 },
9885
9886 /* VEX_LEN_0FXOP_08_EF */
9887 {
9888 { "vpcomuq", { XM, Vex128, EXx, Ib } },
9889 },
9890
592a252b 9891 /* VEX_LEN_0FXOP_09_80 */
5dd85c99 9892 {
4c807e72
L
9893 { "vfrczps", { XM, EXxmm } },
9894 { "vfrczps", { XM, EXymmq } },
5dd85c99 9895 },
4c807e72 9896
592a252b 9897 /* VEX_LEN_0FXOP_09_81 */
5dd85c99 9898 {
4c807e72
L
9899 { "vfrczpd", { XM, EXxmm } },
9900 { "vfrczpd", { XM, EXymmq } },
5dd85c99 9901 },
331d2d0d
L
9902};
9903
9e30b8e0 9904static const struct dis386 vex_w_table[][2] = {
b844680a 9905 {
592a252b 9906 /* VEX_W_0F10_P_0 */
9e30b8e0 9907 { "vmovups", { XM, EXx } },
d8faab4e
L
9908 },
9909 {
592a252b 9910 /* VEX_W_0F10_P_1 */
539f890d 9911 { "vmovss", { XMVexScalar, VexScalar, EXdScalar } },
d8faab4e
L
9912 },
9913 {
592a252b 9914 /* VEX_W_0F10_P_2 */
9e30b8e0 9915 { "vmovupd", { XM, EXx } },
d8faab4e
L
9916 },
9917 {
592a252b 9918 /* VEX_W_0F10_P_3 */
539f890d 9919 { "vmovsd", { XMVexScalar, VexScalar, EXqScalar } },
d8faab4e
L
9920 },
9921 {
592a252b 9922 /* VEX_W_0F11_P_0 */
9e30b8e0 9923 { "vmovups", { EXxS, XM } },
d8faab4e
L
9924 },
9925 {
592a252b 9926 /* VEX_W_0F11_P_1 */
539f890d 9927 { "vmovss", { EXdVexScalarS, VexScalar, XMScalar } },
b844680a
L
9928 },
9929 {
592a252b 9930 /* VEX_W_0F11_P_2 */
9e30b8e0 9931 { "vmovupd", { EXxS, XM } },
b844680a
L
9932 },
9933 {
592a252b 9934 /* VEX_W_0F11_P_3 */
539f890d 9935 { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar } },
d8faab4e
L
9936 },
9937 {
592a252b 9938 /* VEX_W_0F12_P_0_M_0 */
9e30b8e0 9939 { "vmovlps", { XM, Vex128, EXq } },
b844680a
L
9940 },
9941 {
592a252b 9942 /* VEX_W_0F12_P_0_M_1 */
9e30b8e0 9943 { "vmovhlps", { XM, Vex128, EXq } },
b844680a
L
9944 },
9945 {
592a252b 9946 /* VEX_W_0F12_P_1 */
9e30b8e0 9947 { "vmovsldup", { XM, EXx } },
b844680a
L
9948 },
9949 {
592a252b 9950 /* VEX_W_0F12_P_2 */
9e30b8e0 9951 { "vmovlpd", { XM, Vex128, EXq } },
b844680a
L
9952 },
9953 {
592a252b 9954 /* VEX_W_0F12_P_3 */
9e30b8e0 9955 { "vmovddup", { XM, EXymmq } },
b844680a
L
9956 },
9957 {
592a252b 9958 /* VEX_W_0F13_M_0 */
9e30b8e0 9959 { "vmovlpX", { EXq, XM } },
b844680a
L
9960 },
9961 {
592a252b 9962 /* VEX_W_0F14 */
9e30b8e0 9963 { "vunpcklpX", { XM, Vex, EXx } },
b844680a
L
9964 },
9965 {
592a252b 9966 /* VEX_W_0F15 */
9e30b8e0 9967 { "vunpckhpX", { XM, Vex, EXx } },
b844680a
L
9968 },
9969 {
592a252b 9970 /* VEX_W_0F16_P_0_M_0 */
9e30b8e0 9971 { "vmovhps", { XM, Vex128, EXq } },
9e30b8e0
L
9972 },
9973 {
592a252b 9974 /* VEX_W_0F16_P_0_M_1 */
9e30b8e0 9975 { "vmovlhps", { XM, Vex128, EXq } },
9e30b8e0
L
9976 },
9977 {
592a252b 9978 /* VEX_W_0F16_P_1 */
9e30b8e0 9979 { "vmovshdup", { XM, EXx } },
9e30b8e0
L
9980 },
9981 {
592a252b 9982 /* VEX_W_0F16_P_2 */
9e30b8e0 9983 { "vmovhpd", { XM, Vex128, EXq } },
9e30b8e0
L
9984 },
9985 {
592a252b 9986 /* VEX_W_0F17_M_0 */
9e30b8e0 9987 { "vmovhpX", { EXq, XM } },
9e30b8e0
L
9988 },
9989 {
592a252b 9990 /* VEX_W_0F28 */
9e30b8e0 9991 { "vmovapX", { XM, EXx } },
9e30b8e0
L
9992 },
9993 {
592a252b 9994 /* VEX_W_0F29 */
9e30b8e0 9995 { "vmovapX", { EXxS, XM } },
9e30b8e0
L
9996 },
9997 {
592a252b 9998 /* VEX_W_0F2B_M_0 */
9e30b8e0 9999 { "vmovntpX", { Mx, XM } },
9e30b8e0
L
10000 },
10001 {
592a252b 10002 /* VEX_W_0F2E_P_0 */
7bb15c6f 10003 { "vucomiss", { XMScalar, EXdScalar } },
9e30b8e0
L
10004 },
10005 {
592a252b 10006 /* VEX_W_0F2E_P_2 */
7bb15c6f 10007 { "vucomisd", { XMScalar, EXqScalar } },
9e30b8e0
L
10008 },
10009 {
592a252b 10010 /* VEX_W_0F2F_P_0 */
539f890d 10011 { "vcomiss", { XMScalar, EXdScalar } },
9e30b8e0
L
10012 },
10013 {
592a252b 10014 /* VEX_W_0F2F_P_2 */
539f890d 10015 { "vcomisd", { XMScalar, EXqScalar } },
9e30b8e0 10016 },
43234a1e
L
10017 {
10018 /* VEX_W_0F41_P_0_LEN_1 */
10019 { "kandw", { MaskG, MaskVex, MaskR } },
10020 },
10021 {
10022 /* VEX_W_0F42_P_0_LEN_1 */
10023 { "kandnw", { MaskG, MaskVex, MaskR } },
10024 },
10025 {
10026 /* VEX_W_0F44_P_0_LEN_0 */
10027 { "knotw", { MaskG, MaskR } },
10028 },
10029 {
10030 /* VEX_W_0F45_P_0_LEN_1 */
10031 { "korw", { MaskG, MaskVex, MaskR } },
10032 },
10033 {
10034 /* VEX_W_0F46_P_0_LEN_1 */
10035 { "kxnorw", { MaskG, MaskVex, MaskR } },
10036 },
10037 {
10038 /* VEX_W_0F47_P_0_LEN_1 */
10039 { "kxorw", { MaskG, MaskVex, MaskR } },
10040 },
10041 {
10042 /* VEX_W_0F4B_P_2_LEN_1 */
10043 { "kunpckbw", { MaskG, MaskVex, MaskR } },
10044 },
9e30b8e0 10045 {
592a252b 10046 /* VEX_W_0F50_M_0 */
9e30b8e0 10047 { "vmovmskpX", { Gdq, XS } },
9e30b8e0
L
10048 },
10049 {
592a252b 10050 /* VEX_W_0F51_P_0 */
9e30b8e0 10051 { "vsqrtps", { XM, EXx } },
9e30b8e0
L
10052 },
10053 {
592a252b 10054 /* VEX_W_0F51_P_1 */
539f890d 10055 { "vsqrtss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10056 },
10057 {
592a252b 10058 /* VEX_W_0F51_P_2 */
9e30b8e0 10059 { "vsqrtpd", { XM, EXx } },
9e30b8e0
L
10060 },
10061 {
592a252b 10062 /* VEX_W_0F51_P_3 */
539f890d 10063 { "vsqrtsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10064 },
10065 {
592a252b 10066 /* VEX_W_0F52_P_0 */
9e30b8e0 10067 { "vrsqrtps", { XM, EXx } },
9e30b8e0
L
10068 },
10069 {
592a252b 10070 /* VEX_W_0F52_P_1 */
539f890d 10071 { "vrsqrtss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10072 },
10073 {
592a252b 10074 /* VEX_W_0F53_P_0 */
9e30b8e0 10075 { "vrcpps", { XM, EXx } },
9e30b8e0
L
10076 },
10077 {
592a252b 10078 /* VEX_W_0F53_P_1 */
539f890d 10079 { "vrcpss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10080 },
10081 {
592a252b 10082 /* VEX_W_0F58_P_0 */
9e30b8e0 10083 { "vaddps", { XM, Vex, EXx } },
9e30b8e0
L
10084 },
10085 {
592a252b 10086 /* VEX_W_0F58_P_1 */
539f890d 10087 { "vaddss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10088 },
10089 {
592a252b 10090 /* VEX_W_0F58_P_2 */
9e30b8e0 10091 { "vaddpd", { XM, Vex, EXx } },
9e30b8e0
L
10092 },
10093 {
592a252b 10094 /* VEX_W_0F58_P_3 */
539f890d 10095 { "vaddsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10096 },
10097 {
592a252b 10098 /* VEX_W_0F59_P_0 */
9e30b8e0 10099 { "vmulps", { XM, Vex, EXx } },
9e30b8e0
L
10100 },
10101 {
592a252b 10102 /* VEX_W_0F59_P_1 */
539f890d 10103 { "vmulss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10104 },
10105 {
592a252b 10106 /* VEX_W_0F59_P_2 */
9e30b8e0 10107 { "vmulpd", { XM, Vex, EXx } },
9e30b8e0
L
10108 },
10109 {
592a252b 10110 /* VEX_W_0F59_P_3 */
539f890d 10111 { "vmulsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10112 },
10113 {
592a252b 10114 /* VEX_W_0F5A_P_0 */
9e30b8e0 10115 { "vcvtps2pd", { XM, EXxmmq } },
9e30b8e0
L
10116 },
10117 {
592a252b 10118 /* VEX_W_0F5A_P_1 */
539f890d 10119 { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10120 },
10121 {
592a252b 10122 /* VEX_W_0F5A_P_3 */
539f890d 10123 { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10124 },
10125 {
592a252b 10126 /* VEX_W_0F5B_P_0 */
9e30b8e0 10127 { "vcvtdq2ps", { XM, EXx } },
9e30b8e0
L
10128 },
10129 {
592a252b 10130 /* VEX_W_0F5B_P_1 */
9e30b8e0 10131 { "vcvttps2dq", { XM, EXx } },
9e30b8e0
L
10132 },
10133 {
592a252b 10134 /* VEX_W_0F5B_P_2 */
9e30b8e0 10135 { "vcvtps2dq", { XM, EXx } },
9e30b8e0
L
10136 },
10137 {
592a252b 10138 /* VEX_W_0F5C_P_0 */
9e30b8e0 10139 { "vsubps", { XM, Vex, EXx } },
9e30b8e0
L
10140 },
10141 {
592a252b 10142 /* VEX_W_0F5C_P_1 */
539f890d 10143 { "vsubss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10144 },
10145 {
592a252b 10146 /* VEX_W_0F5C_P_2 */
9e30b8e0 10147 { "vsubpd", { XM, Vex, EXx } },
9e30b8e0
L
10148 },
10149 {
592a252b 10150 /* VEX_W_0F5C_P_3 */
539f890d 10151 { "vsubsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10152 },
10153 {
592a252b 10154 /* VEX_W_0F5D_P_0 */
9e30b8e0 10155 { "vminps", { XM, Vex, EXx } },
9e30b8e0
L
10156 },
10157 {
592a252b 10158 /* VEX_W_0F5D_P_1 */
539f890d 10159 { "vminss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10160 },
10161 {
592a252b 10162 /* VEX_W_0F5D_P_2 */
9e30b8e0 10163 { "vminpd", { XM, Vex, EXx } },
9e30b8e0
L
10164 },
10165 {
592a252b 10166 /* VEX_W_0F5D_P_3 */
539f890d 10167 { "vminsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10168 },
10169 {
592a252b 10170 /* VEX_W_0F5E_P_0 */
9e30b8e0 10171 { "vdivps", { XM, Vex, EXx } },
9e30b8e0
L
10172 },
10173 {
592a252b 10174 /* VEX_W_0F5E_P_1 */
539f890d 10175 { "vdivss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10176 },
10177 {
592a252b 10178 /* VEX_W_0F5E_P_2 */
9e30b8e0 10179 { "vdivpd", { XM, Vex, EXx } },
9e30b8e0
L
10180 },
10181 {
592a252b 10182 /* VEX_W_0F5E_P_3 */
539f890d 10183 { "vdivsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10184 },
10185 {
592a252b 10186 /* VEX_W_0F5F_P_0 */
9e30b8e0 10187 { "vmaxps", { XM, Vex, EXx } },
9e30b8e0
L
10188 },
10189 {
592a252b 10190 /* VEX_W_0F5F_P_1 */
539f890d 10191 { "vmaxss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10192 },
10193 {
592a252b 10194 /* VEX_W_0F5F_P_2 */
9e30b8e0 10195 { "vmaxpd", { XM, Vex, EXx } },
9e30b8e0
L
10196 },
10197 {
592a252b 10198 /* VEX_W_0F5F_P_3 */
539f890d 10199 { "vmaxsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10200 },
10201 {
592a252b 10202 /* VEX_W_0F60_P_2 */
6c30d220 10203 { "vpunpcklbw", { XM, Vex, EXx } },
9e30b8e0
L
10204 },
10205 {
592a252b 10206 /* VEX_W_0F61_P_2 */
6c30d220 10207 { "vpunpcklwd", { XM, Vex, EXx } },
9e30b8e0
L
10208 },
10209 {
592a252b 10210 /* VEX_W_0F62_P_2 */
6c30d220 10211 { "vpunpckldq", { XM, Vex, EXx } },
9e30b8e0
L
10212 },
10213 {
592a252b 10214 /* VEX_W_0F63_P_2 */
6c30d220 10215 { "vpacksswb", { XM, Vex, EXx } },
9e30b8e0
L
10216 },
10217 {
592a252b 10218 /* VEX_W_0F64_P_2 */
6c30d220 10219 { "vpcmpgtb", { XM, Vex, EXx } },
9e30b8e0
L
10220 },
10221 {
592a252b 10222 /* VEX_W_0F65_P_2 */
6c30d220 10223 { "vpcmpgtw", { XM, Vex, EXx } },
9e30b8e0
L
10224 },
10225 {
592a252b 10226 /* VEX_W_0F66_P_2 */
6c30d220 10227 { "vpcmpgtd", { XM, Vex, EXx } },
9e30b8e0
L
10228 },
10229 {
592a252b 10230 /* VEX_W_0F67_P_2 */
6c30d220 10231 { "vpackuswb", { XM, Vex, EXx } },
9e30b8e0
L
10232 },
10233 {
592a252b 10234 /* VEX_W_0F68_P_2 */
6c30d220 10235 { "vpunpckhbw", { XM, Vex, EXx } },
9e30b8e0
L
10236 },
10237 {
592a252b 10238 /* VEX_W_0F69_P_2 */
6c30d220 10239 { "vpunpckhwd", { XM, Vex, EXx } },
9e30b8e0
L
10240 },
10241 {
592a252b 10242 /* VEX_W_0F6A_P_2 */
6c30d220 10243 { "vpunpckhdq", { XM, Vex, EXx } },
9e30b8e0
L
10244 },
10245 {
592a252b 10246 /* VEX_W_0F6B_P_2 */
6c30d220 10247 { "vpackssdw", { XM, Vex, EXx } },
9e30b8e0
L
10248 },
10249 {
592a252b 10250 /* VEX_W_0F6C_P_2 */
6c30d220 10251 { "vpunpcklqdq", { XM, Vex, EXx } },
9e30b8e0
L
10252 },
10253 {
592a252b 10254 /* VEX_W_0F6D_P_2 */
6c30d220 10255 { "vpunpckhqdq", { XM, Vex, EXx } },
9e30b8e0
L
10256 },
10257 {
592a252b 10258 /* VEX_W_0F6F_P_1 */
efdb52b7 10259 { "vmovdqu", { XM, EXx } },
9e30b8e0
L
10260 },
10261 {
592a252b 10262 /* VEX_W_0F6F_P_2 */
efdb52b7 10263 { "vmovdqa", { XM, EXx } },
9e30b8e0
L
10264 },
10265 {
592a252b 10266 /* VEX_W_0F70_P_1 */
9e30b8e0 10267 { "vpshufhw", { XM, EXx, Ib } },
9e30b8e0
L
10268 },
10269 {
592a252b 10270 /* VEX_W_0F70_P_2 */
9e30b8e0 10271 { "vpshufd", { XM, EXx, Ib } },
9e30b8e0
L
10272 },
10273 {
592a252b 10274 /* VEX_W_0F70_P_3 */
9e30b8e0 10275 { "vpshuflw", { XM, EXx, Ib } },
9e30b8e0
L
10276 },
10277 {
592a252b 10278 /* VEX_W_0F71_R_2_P_2 */
6c30d220 10279 { "vpsrlw", { Vex, XS, Ib } },
9e30b8e0
L
10280 },
10281 {
592a252b 10282 /* VEX_W_0F71_R_4_P_2 */
6c30d220 10283 { "vpsraw", { Vex, XS, Ib } },
9e30b8e0
L
10284 },
10285 {
592a252b 10286 /* VEX_W_0F71_R_6_P_2 */
6c30d220 10287 { "vpsllw", { Vex, XS, Ib } },
9e30b8e0
L
10288 },
10289 {
592a252b 10290 /* VEX_W_0F72_R_2_P_2 */
6c30d220 10291 { "vpsrld", { Vex, XS, Ib } },
9e30b8e0
L
10292 },
10293 {
592a252b 10294 /* VEX_W_0F72_R_4_P_2 */
6c30d220 10295 { "vpsrad", { Vex, XS, Ib } },
9e30b8e0
L
10296 },
10297 {
592a252b 10298 /* VEX_W_0F72_R_6_P_2 */
6c30d220 10299 { "vpslld", { Vex, XS, Ib } },
9e30b8e0
L
10300 },
10301 {
592a252b 10302 /* VEX_W_0F73_R_2_P_2 */
6c30d220 10303 { "vpsrlq", { Vex, XS, Ib } },
9e30b8e0
L
10304 },
10305 {
592a252b 10306 /* VEX_W_0F73_R_3_P_2 */
6c30d220 10307 { "vpsrldq", { Vex, XS, Ib } },
9e30b8e0
L
10308 },
10309 {
592a252b 10310 /* VEX_W_0F73_R_6_P_2 */
6c30d220 10311 { "vpsllq", { Vex, XS, Ib } },
9e30b8e0
L
10312 },
10313 {
592a252b 10314 /* VEX_W_0F73_R_7_P_2 */
6c30d220 10315 { "vpslldq", { Vex, XS, Ib } },
9e30b8e0
L
10316 },
10317 {
592a252b 10318 /* VEX_W_0F74_P_2 */
6c30d220 10319 { "vpcmpeqb", { XM, Vex, EXx } },
9e30b8e0
L
10320 },
10321 {
592a252b 10322 /* VEX_W_0F75_P_2 */
6c30d220 10323 { "vpcmpeqw", { XM, Vex, EXx } },
9e30b8e0
L
10324 },
10325 {
592a252b 10326 /* VEX_W_0F76_P_2 */
6c30d220 10327 { "vpcmpeqd", { XM, Vex, EXx } },
9e30b8e0
L
10328 },
10329 {
592a252b 10330 /* VEX_W_0F77_P_0 */
9e30b8e0 10331 { "", { VZERO } },
9e30b8e0
L
10332 },
10333 {
592a252b 10334 /* VEX_W_0F7C_P_2 */
9e30b8e0 10335 { "vhaddpd", { XM, Vex, EXx } },
9e30b8e0
L
10336 },
10337 {
592a252b 10338 /* VEX_W_0F7C_P_3 */
9e30b8e0 10339 { "vhaddps", { XM, Vex, EXx } },
9e30b8e0
L
10340 },
10341 {
592a252b 10342 /* VEX_W_0F7D_P_2 */
9e30b8e0 10343 { "vhsubpd", { XM, Vex, EXx } },
9e30b8e0
L
10344 },
10345 {
592a252b 10346 /* VEX_W_0F7D_P_3 */
9e30b8e0 10347 { "vhsubps", { XM, Vex, EXx } },
9e30b8e0
L
10348 },
10349 {
592a252b 10350 /* VEX_W_0F7E_P_1 */
539f890d 10351 { "vmovq", { XMScalar, EXqScalar } },
9e30b8e0
L
10352 },
10353 {
592a252b 10354 /* VEX_W_0F7F_P_1 */
9e30b8e0 10355 { "vmovdqu", { EXxS, XM } },
9e30b8e0
L
10356 },
10357 {
592a252b 10358 /* VEX_W_0F7F_P_2 */
9e30b8e0 10359 { "vmovdqa", { EXxS, XM } },
9e30b8e0 10360 },
43234a1e
L
10361 {
10362 /* VEX_W_0F90_P_0_LEN_0 */
10363 { "kmovw", { MaskG, MaskE } },
10364 },
10365 {
10366 /* VEX_W_0F91_P_0_LEN_0 */
10367 { "kmovw", { Ew, MaskG } },
10368 },
10369 {
10370 /* VEX_W_0F92_P_0_LEN_0 */
10371 { "kmovw", { MaskG, Rdq } },
10372 },
10373 {
10374 /* VEX_W_0F93_P_0_LEN_0 */
10375 { "kmovw", { Gdq, MaskR } },
10376 },
10377 {
10378 /* VEX_W_0F98_P_0_LEN_0 */
10379 { "kortestw", { MaskG, MaskR } },
10380 },
9e30b8e0 10381 {
592a252b 10382 /* VEX_W_0FAE_R_2_M_0 */
9e30b8e0 10383 { "vldmxcsr", { Md } },
9e30b8e0
L
10384 },
10385 {
592a252b 10386 /* VEX_W_0FAE_R_3_M_0 */
9e30b8e0 10387 { "vstmxcsr", { Md } },
9e30b8e0
L
10388 },
10389 {
592a252b 10390 /* VEX_W_0FC2_P_0 */
9e30b8e0 10391 { "vcmpps", { XM, Vex, EXx, VCMP } },
9e30b8e0
L
10392 },
10393 {
592a252b 10394 /* VEX_W_0FC2_P_1 */
539f890d 10395 { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP } },
9e30b8e0
L
10396 },
10397 {
592a252b 10398 /* VEX_W_0FC2_P_2 */
9e30b8e0 10399 { "vcmppd", { XM, Vex, EXx, VCMP } },
9e30b8e0
L
10400 },
10401 {
592a252b 10402 /* VEX_W_0FC2_P_3 */
539f890d 10403 { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP } },
9e30b8e0
L
10404 },
10405 {
592a252b 10406 /* VEX_W_0FC4_P_2 */
9e30b8e0 10407 { "vpinsrw", { XM, Vex128, Edqw, Ib } },
9e30b8e0
L
10408 },
10409 {
592a252b 10410 /* VEX_W_0FC5_P_2 */
9e30b8e0 10411 { "vpextrw", { Gdq, XS, Ib } },
9e30b8e0
L
10412 },
10413 {
592a252b 10414 /* VEX_W_0FD0_P_2 */
9e30b8e0 10415 { "vaddsubpd", { XM, Vex, EXx } },
9e30b8e0
L
10416 },
10417 {
592a252b 10418 /* VEX_W_0FD0_P_3 */
9e30b8e0 10419 { "vaddsubps", { XM, Vex, EXx } },
9e30b8e0
L
10420 },
10421 {
592a252b 10422 /* VEX_W_0FD1_P_2 */
6c30d220 10423 { "vpsrlw", { XM, Vex, EXxmm } },
9e30b8e0
L
10424 },
10425 {
592a252b 10426 /* VEX_W_0FD2_P_2 */
6c30d220 10427 { "vpsrld", { XM, Vex, EXxmm } },
9e30b8e0
L
10428 },
10429 {
592a252b 10430 /* VEX_W_0FD3_P_2 */
6c30d220 10431 { "vpsrlq", { XM, Vex, EXxmm } },
9e30b8e0
L
10432 },
10433 {
592a252b 10434 /* VEX_W_0FD4_P_2 */
6c30d220 10435 { "vpaddq", { XM, Vex, EXx } },
9e30b8e0
L
10436 },
10437 {
592a252b 10438 /* VEX_W_0FD5_P_2 */
6c30d220 10439 { "vpmullw", { XM, Vex, EXx } },
9e30b8e0
L
10440 },
10441 {
592a252b 10442 /* VEX_W_0FD6_P_2 */
539f890d 10443 { "vmovq", { EXqScalarS, XMScalar } },
9e30b8e0
L
10444 },
10445 {
592a252b 10446 /* VEX_W_0FD7_P_2_M_1 */
9e30b8e0 10447 { "vpmovmskb", { Gdq, XS } },
9e30b8e0
L
10448 },
10449 {
592a252b 10450 /* VEX_W_0FD8_P_2 */
6c30d220 10451 { "vpsubusb", { XM, Vex, EXx } },
9e30b8e0
L
10452 },
10453 {
592a252b 10454 /* VEX_W_0FD9_P_2 */
6c30d220 10455 { "vpsubusw", { XM, Vex, EXx } },
9e30b8e0
L
10456 },
10457 {
592a252b 10458 /* VEX_W_0FDA_P_2 */
6c30d220 10459 { "vpminub", { XM, Vex, EXx } },
9e30b8e0
L
10460 },
10461 {
592a252b 10462 /* VEX_W_0FDB_P_2 */
6c30d220 10463 { "vpand", { XM, Vex, EXx } },
9e30b8e0
L
10464 },
10465 {
592a252b 10466 /* VEX_W_0FDC_P_2 */
6c30d220 10467 { "vpaddusb", { XM, Vex, EXx } },
9e30b8e0
L
10468 },
10469 {
592a252b 10470 /* VEX_W_0FDD_P_2 */
6c30d220 10471 { "vpaddusw", { XM, Vex, EXx } },
9e30b8e0
L
10472 },
10473 {
592a252b 10474 /* VEX_W_0FDE_P_2 */
6c30d220 10475 { "vpmaxub", { XM, Vex, EXx } },
9e30b8e0
L
10476 },
10477 {
592a252b 10478 /* VEX_W_0FDF_P_2 */
6c30d220 10479 { "vpandn", { XM, Vex, EXx } },
9e30b8e0
L
10480 },
10481 {
592a252b 10482 /* VEX_W_0FE0_P_2 */
6c30d220 10483 { "vpavgb", { XM, Vex, EXx } },
9e30b8e0
L
10484 },
10485 {
592a252b 10486 /* VEX_W_0FE1_P_2 */
6c30d220 10487 { "vpsraw", { XM, Vex, EXxmm } },
9e30b8e0
L
10488 },
10489 {
592a252b 10490 /* VEX_W_0FE2_P_2 */
6c30d220 10491 { "vpsrad", { XM, Vex, EXxmm } },
9e30b8e0
L
10492 },
10493 {
592a252b 10494 /* VEX_W_0FE3_P_2 */
6c30d220 10495 { "vpavgw", { XM, Vex, EXx } },
9e30b8e0
L
10496 },
10497 {
592a252b 10498 /* VEX_W_0FE4_P_2 */
6c30d220 10499 { "vpmulhuw", { XM, Vex, EXx } },
9e30b8e0
L
10500 },
10501 {
592a252b 10502 /* VEX_W_0FE5_P_2 */
6c30d220 10503 { "vpmulhw", { XM, Vex, EXx } },
9e30b8e0
L
10504 },
10505 {
592a252b 10506 /* VEX_W_0FE6_P_1 */
efdb52b7 10507 { "vcvtdq2pd", { XM, EXxmmq } },
9e30b8e0
L
10508 },
10509 {
592a252b 10510 /* VEX_W_0FE6_P_2 */
a179a9fd 10511 { "vcvttpd2dq%XY", { XMM, EXx } },
9e30b8e0
L
10512 },
10513 {
592a252b 10514 /* VEX_W_0FE6_P_3 */
a179a9fd 10515 { "vcvtpd2dq%XY", { XMM, EXx } },
9e30b8e0
L
10516 },
10517 {
592a252b 10518 /* VEX_W_0FE7_P_2_M_0 */
9e30b8e0 10519 { "vmovntdq", { Mx, XM } },
9e30b8e0
L
10520 },
10521 {
592a252b 10522 /* VEX_W_0FE8_P_2 */
6c30d220 10523 { "vpsubsb", { XM, Vex, EXx } },
9e30b8e0
L
10524 },
10525 {
592a252b 10526 /* VEX_W_0FE9_P_2 */
6c30d220 10527 { "vpsubsw", { XM, Vex, EXx } },
9e30b8e0
L
10528 },
10529 {
592a252b 10530 /* VEX_W_0FEA_P_2 */
6c30d220 10531 { "vpminsw", { XM, Vex, EXx } },
9e30b8e0
L
10532 },
10533 {
592a252b 10534 /* VEX_W_0FEB_P_2 */
6c30d220 10535 { "vpor", { XM, Vex, EXx } },
9e30b8e0
L
10536 },
10537 {
592a252b 10538 /* VEX_W_0FEC_P_2 */
6c30d220 10539 { "vpaddsb", { XM, Vex, EXx } },
9e30b8e0
L
10540 },
10541 {
592a252b 10542 /* VEX_W_0FED_P_2 */
6c30d220 10543 { "vpaddsw", { XM, Vex, EXx } },
9e30b8e0
L
10544 },
10545 {
592a252b 10546 /* VEX_W_0FEE_P_2 */
6c30d220 10547 { "vpmaxsw", { XM, Vex, EXx } },
9e30b8e0
L
10548 },
10549 {
592a252b 10550 /* VEX_W_0FEF_P_2 */
6c30d220 10551 { "vpxor", { XM, Vex, EXx } },
9e30b8e0
L
10552 },
10553 {
592a252b 10554 /* VEX_W_0FF0_P_3_M_0 */
9e30b8e0 10555 { "vlddqu", { XM, M } },
9e30b8e0
L
10556 },
10557 {
592a252b 10558 /* VEX_W_0FF1_P_2 */
6c30d220 10559 { "vpsllw", { XM, Vex, EXxmm } },
9e30b8e0
L
10560 },
10561 {
592a252b 10562 /* VEX_W_0FF2_P_2 */
6c30d220 10563 { "vpslld", { XM, Vex, EXxmm } },
9e30b8e0
L
10564 },
10565 {
592a252b 10566 /* VEX_W_0FF3_P_2 */
6c30d220 10567 { "vpsllq", { XM, Vex, EXxmm } },
9e30b8e0
L
10568 },
10569 {
592a252b 10570 /* VEX_W_0FF4_P_2 */
6c30d220 10571 { "vpmuludq", { XM, Vex, EXx } },
9e30b8e0
L
10572 },
10573 {
592a252b 10574 /* VEX_W_0FF5_P_2 */
6c30d220 10575 { "vpmaddwd", { XM, Vex, EXx } },
9e30b8e0
L
10576 },
10577 {
592a252b 10578 /* VEX_W_0FF6_P_2 */
6c30d220 10579 { "vpsadbw", { XM, Vex, EXx } },
9e30b8e0
L
10580 },
10581 {
592a252b 10582 /* VEX_W_0FF7_P_2 */
9e30b8e0 10583 { "vmaskmovdqu", { XM, XS } },
9e30b8e0
L
10584 },
10585 {
592a252b 10586 /* VEX_W_0FF8_P_2 */
6c30d220 10587 { "vpsubb", { XM, Vex, EXx } },
9e30b8e0
L
10588 },
10589 {
592a252b 10590 /* VEX_W_0FF9_P_2 */
6c30d220 10591 { "vpsubw", { XM, Vex, EXx } },
9e30b8e0
L
10592 },
10593 {
592a252b 10594 /* VEX_W_0FFA_P_2 */
6c30d220 10595 { "vpsubd", { XM, Vex, EXx } },
9e30b8e0
L
10596 },
10597 {
592a252b 10598 /* VEX_W_0FFB_P_2 */
6c30d220 10599 { "vpsubq", { XM, Vex, EXx } },
9e30b8e0
L
10600 },
10601 {
592a252b 10602 /* VEX_W_0FFC_P_2 */
6c30d220 10603 { "vpaddb", { XM, Vex, EXx } },
9e30b8e0
L
10604 },
10605 {
592a252b 10606 /* VEX_W_0FFD_P_2 */
6c30d220 10607 { "vpaddw", { XM, Vex, EXx } },
9e30b8e0
L
10608 },
10609 {
592a252b 10610 /* VEX_W_0FFE_P_2 */
6c30d220 10611 { "vpaddd", { XM, Vex, EXx } },
9e30b8e0
L
10612 },
10613 {
592a252b 10614 /* VEX_W_0F3800_P_2 */
6c30d220 10615 { "vpshufb", { XM, Vex, EXx } },
9e30b8e0
L
10616 },
10617 {
592a252b 10618 /* VEX_W_0F3801_P_2 */
6c30d220 10619 { "vphaddw", { XM, Vex, EXx } },
9e30b8e0
L
10620 },
10621 {
592a252b 10622 /* VEX_W_0F3802_P_2 */
6c30d220 10623 { "vphaddd", { XM, Vex, EXx } },
9e30b8e0
L
10624 },
10625 {
592a252b 10626 /* VEX_W_0F3803_P_2 */
6c30d220 10627 { "vphaddsw", { XM, Vex, EXx } },
9e30b8e0
L
10628 },
10629 {
592a252b 10630 /* VEX_W_0F3804_P_2 */
6c30d220 10631 { "vpmaddubsw", { XM, Vex, EXx } },
9e30b8e0
L
10632 },
10633 {
592a252b 10634 /* VEX_W_0F3805_P_2 */
6c30d220 10635 { "vphsubw", { XM, Vex, EXx } },
9e30b8e0
L
10636 },
10637 {
592a252b 10638 /* VEX_W_0F3806_P_2 */
6c30d220 10639 { "vphsubd", { XM, Vex, EXx } },
9e30b8e0
L
10640 },
10641 {
592a252b 10642 /* VEX_W_0F3807_P_2 */
6c30d220 10643 { "vphsubsw", { XM, Vex, EXx } },
9e30b8e0
L
10644 },
10645 {
592a252b 10646 /* VEX_W_0F3808_P_2 */
6c30d220 10647 { "vpsignb", { XM, Vex, EXx } },
9e30b8e0
L
10648 },
10649 {
592a252b 10650 /* VEX_W_0F3809_P_2 */
6c30d220 10651 { "vpsignw", { XM, Vex, EXx } },
9e30b8e0
L
10652 },
10653 {
592a252b 10654 /* VEX_W_0F380A_P_2 */
6c30d220 10655 { "vpsignd", { XM, Vex, EXx } },
9e30b8e0
L
10656 },
10657 {
592a252b 10658 /* VEX_W_0F380B_P_2 */
6c30d220 10659 { "vpmulhrsw", { XM, Vex, EXx } },
9e30b8e0
L
10660 },
10661 {
592a252b 10662 /* VEX_W_0F380C_P_2 */
9e30b8e0 10663 { "vpermilps", { XM, Vex, EXx } },
9e30b8e0
L
10664 },
10665 {
592a252b 10666 /* VEX_W_0F380D_P_2 */
9e30b8e0 10667 { "vpermilpd", { XM, Vex, EXx } },
9e30b8e0
L
10668 },
10669 {
592a252b 10670 /* VEX_W_0F380E_P_2 */
9e30b8e0 10671 { "vtestps", { XM, EXx } },
9e30b8e0
L
10672 },
10673 {
592a252b 10674 /* VEX_W_0F380F_P_2 */
9e30b8e0 10675 { "vtestpd", { XM, EXx } },
9e30b8e0 10676 },
6c30d220
L
10677 {
10678 /* VEX_W_0F3816_P_2 */
10679 { "vpermps", { XM, Vex, EXx } },
10680 },
9e30b8e0 10681 {
592a252b 10682 /* VEX_W_0F3817_P_2 */
9e30b8e0 10683 { "vptest", { XM, EXx } },
9e30b8e0 10684 },
bcf2684f 10685 {
6c30d220
L
10686 /* VEX_W_0F3818_P_2 */
10687 { "vbroadcastss", { XM, EXxmm_md } },
bcf2684f 10688 },
9e30b8e0 10689 {
6c30d220
L
10690 /* VEX_W_0F3819_P_2 */
10691 { "vbroadcastsd", { XM, EXxmm_mq } },
9e30b8e0
L
10692 },
10693 {
592a252b 10694 /* VEX_W_0F381A_P_2_M_0 */
9e30b8e0 10695 { "vbroadcastf128", { XM, Mxmm } },
9e30b8e0
L
10696 },
10697 {
592a252b 10698 /* VEX_W_0F381C_P_2 */
9e30b8e0 10699 { "vpabsb", { XM, EXx } },
9e30b8e0
L
10700 },
10701 {
592a252b 10702 /* VEX_W_0F381D_P_2 */
9e30b8e0 10703 { "vpabsw", { XM, EXx } },
9e30b8e0
L
10704 },
10705 {
592a252b 10706 /* VEX_W_0F381E_P_2 */
9e30b8e0 10707 { "vpabsd", { XM, EXx } },
9e30b8e0
L
10708 },
10709 {
592a252b 10710 /* VEX_W_0F3820_P_2 */
6c30d220 10711 { "vpmovsxbw", { XM, EXxmmq } },
9e30b8e0
L
10712 },
10713 {
592a252b 10714 /* VEX_W_0F3821_P_2 */
6c30d220 10715 { "vpmovsxbd", { XM, EXxmmqd } },
9e30b8e0
L
10716 },
10717 {
592a252b 10718 /* VEX_W_0F3822_P_2 */
6c30d220 10719 { "vpmovsxbq", { XM, EXxmmdw } },
9e30b8e0
L
10720 },
10721 {
592a252b 10722 /* VEX_W_0F3823_P_2 */
6c30d220 10723 { "vpmovsxwd", { XM, EXxmmq } },
9e30b8e0
L
10724 },
10725 {
592a252b 10726 /* VEX_W_0F3824_P_2 */
6c30d220 10727 { "vpmovsxwq", { XM, EXxmmqd } },
9e30b8e0
L
10728 },
10729 {
592a252b 10730 /* VEX_W_0F3825_P_2 */
6c30d220 10731 { "vpmovsxdq", { XM, EXxmmq } },
9e30b8e0
L
10732 },
10733 {
592a252b 10734 /* VEX_W_0F3828_P_2 */
6c30d220 10735 { "vpmuldq", { XM, Vex, EXx } },
9e30b8e0
L
10736 },
10737 {
592a252b 10738 /* VEX_W_0F3829_P_2 */
6c30d220 10739 { "vpcmpeqq", { XM, Vex, EXx } },
9e30b8e0
L
10740 },
10741 {
592a252b 10742 /* VEX_W_0F382A_P_2_M_0 */
9e30b8e0 10743 { "vmovntdqa", { XM, Mx } },
9e30b8e0
L
10744 },
10745 {
592a252b 10746 /* VEX_W_0F382B_P_2 */
6c30d220 10747 { "vpackusdw", { XM, Vex, EXx } },
9e30b8e0 10748 },
53aa04a0 10749 {
592a252b 10750 /* VEX_W_0F382C_P_2_M_0 */
53aa04a0 10751 { "vmaskmovps", { XM, Vex, Mx } },
53aa04a0
L
10752 },
10753 {
592a252b 10754 /* VEX_W_0F382D_P_2_M_0 */
53aa04a0 10755 { "vmaskmovpd", { XM, Vex, Mx } },
53aa04a0
L
10756 },
10757 {
592a252b 10758 /* VEX_W_0F382E_P_2_M_0 */
53aa04a0 10759 { "vmaskmovps", { Mx, Vex, XM } },
53aa04a0
L
10760 },
10761 {
592a252b 10762 /* VEX_W_0F382F_P_2_M_0 */
53aa04a0 10763 { "vmaskmovpd", { Mx, Vex, XM } },
53aa04a0 10764 },
9e30b8e0 10765 {
592a252b 10766 /* VEX_W_0F3830_P_2 */
6c30d220 10767 { "vpmovzxbw", { XM, EXxmmq } },
9e30b8e0
L
10768 },
10769 {
592a252b 10770 /* VEX_W_0F3831_P_2 */
6c30d220 10771 { "vpmovzxbd", { XM, EXxmmqd } },
9e30b8e0
L
10772 },
10773 {
592a252b 10774 /* VEX_W_0F3832_P_2 */
6c30d220 10775 { "vpmovzxbq", { XM, EXxmmdw } },
9e30b8e0
L
10776 },
10777 {
592a252b 10778 /* VEX_W_0F3833_P_2 */
6c30d220 10779 { "vpmovzxwd", { XM, EXxmmq } },
9e30b8e0
L
10780 },
10781 {
592a252b 10782 /* VEX_W_0F3834_P_2 */
6c30d220 10783 { "vpmovzxwq", { XM, EXxmmqd } },
9e30b8e0
L
10784 },
10785 {
592a252b 10786 /* VEX_W_0F3835_P_2 */
6c30d220
L
10787 { "vpmovzxdq", { XM, EXxmmq } },
10788 },
10789 {
10790 /* VEX_W_0F3836_P_2 */
10791 { "vpermd", { XM, Vex, EXx } },
9e30b8e0
L
10792 },
10793 {
592a252b 10794 /* VEX_W_0F3837_P_2 */
6c30d220 10795 { "vpcmpgtq", { XM, Vex, EXx } },
9e30b8e0
L
10796 },
10797 {
592a252b 10798 /* VEX_W_0F3838_P_2 */
6c30d220 10799 { "vpminsb", { XM, Vex, EXx } },
9e30b8e0
L
10800 },
10801 {
592a252b 10802 /* VEX_W_0F3839_P_2 */
6c30d220 10803 { "vpminsd", { XM, Vex, EXx } },
9e30b8e0
L
10804 },
10805 {
592a252b 10806 /* VEX_W_0F383A_P_2 */
6c30d220 10807 { "vpminuw", { XM, Vex, EXx } },
9e30b8e0
L
10808 },
10809 {
592a252b 10810 /* VEX_W_0F383B_P_2 */
6c30d220 10811 { "vpminud", { XM, Vex, EXx } },
9e30b8e0
L
10812 },
10813 {
592a252b 10814 /* VEX_W_0F383C_P_2 */
6c30d220 10815 { "vpmaxsb", { XM, Vex, EXx } },
9e30b8e0
L
10816 },
10817 {
592a252b 10818 /* VEX_W_0F383D_P_2 */
6c30d220 10819 { "vpmaxsd", { XM, Vex, EXx } },
9e30b8e0
L
10820 },
10821 {
592a252b 10822 /* VEX_W_0F383E_P_2 */
6c30d220 10823 { "vpmaxuw", { XM, Vex, EXx } },
9e30b8e0
L
10824 },
10825 {
592a252b 10826 /* VEX_W_0F383F_P_2 */
6c30d220 10827 { "vpmaxud", { XM, Vex, EXx } },
9e30b8e0
L
10828 },
10829 {
592a252b 10830 /* VEX_W_0F3840_P_2 */
6c30d220 10831 { "vpmulld", { XM, Vex, EXx } },
9e30b8e0
L
10832 },
10833 {
592a252b 10834 /* VEX_W_0F3841_P_2 */
9e30b8e0 10835 { "vphminposuw", { XM, EXx } },
9e30b8e0 10836 },
6c30d220
L
10837 {
10838 /* VEX_W_0F3846_P_2 */
10839 { "vpsravd", { XM, Vex, EXx } },
10840 },
10841 {
10842 /* VEX_W_0F3858_P_2 */
10843 { "vpbroadcastd", { XM, EXxmm_md } },
10844 },
10845 {
10846 /* VEX_W_0F3859_P_2 */
10847 { "vpbroadcastq", { XM, EXxmm_mq } },
10848 },
10849 {
10850 /* VEX_W_0F385A_P_2_M_0 */
10851 { "vbroadcasti128", { XM, Mxmm } },
10852 },
10853 {
10854 /* VEX_W_0F3878_P_2 */
10855 { "vpbroadcastb", { XM, EXxmm_mb } },
10856 },
10857 {
10858 /* VEX_W_0F3879_P_2 */
10859 { "vpbroadcastw", { XM, EXxmm_mw } },
10860 },
9e30b8e0 10861 {
592a252b 10862 /* VEX_W_0F38DB_P_2 */
9e30b8e0 10863 { "vaesimc", { XM, EXx } },
9e30b8e0
L
10864 },
10865 {
592a252b 10866 /* VEX_W_0F38DC_P_2 */
9e30b8e0 10867 { "vaesenc", { XM, Vex128, EXx } },
9e30b8e0
L
10868 },
10869 {
592a252b 10870 /* VEX_W_0F38DD_P_2 */
9e30b8e0 10871 { "vaesenclast", { XM, Vex128, EXx } },
9e30b8e0
L
10872 },
10873 {
592a252b 10874 /* VEX_W_0F38DE_P_2 */
9e30b8e0 10875 { "vaesdec", { XM, Vex128, EXx } },
9e30b8e0
L
10876 },
10877 {
592a252b 10878 /* VEX_W_0F38DF_P_2 */
9e30b8e0 10879 { "vaesdeclast", { XM, Vex128, EXx } },
9e30b8e0 10880 },
6c30d220
L
10881 {
10882 /* VEX_W_0F3A00_P_2 */
10883 { Bad_Opcode },
10884 { "vpermq", { XM, EXx, Ib } },
10885 },
10886 {
10887 /* VEX_W_0F3A01_P_2 */
10888 { Bad_Opcode },
10889 { "vpermpd", { XM, EXx, Ib } },
10890 },
10891 {
10892 /* VEX_W_0F3A02_P_2 */
10893 { "vpblendd", { XM, Vex, EXx, Ib } },
10894 },
9e30b8e0 10895 {
592a252b 10896 /* VEX_W_0F3A04_P_2 */
9e30b8e0 10897 { "vpermilps", { XM, EXx, Ib } },
9e30b8e0
L
10898 },
10899 {
592a252b 10900 /* VEX_W_0F3A05_P_2 */
9e30b8e0 10901 { "vpermilpd", { XM, EXx, Ib } },
9e30b8e0
L
10902 },
10903 {
592a252b 10904 /* VEX_W_0F3A06_P_2 */
9e30b8e0 10905 { "vperm2f128", { XM, Vex256, EXx, Ib } },
9e30b8e0
L
10906 },
10907 {
592a252b 10908 /* VEX_W_0F3A08_P_2 */
9e30b8e0 10909 { "vroundps", { XM, EXx, Ib } },
9e30b8e0
L
10910 },
10911 {
592a252b 10912 /* VEX_W_0F3A09_P_2 */
9e30b8e0 10913 { "vroundpd", { XM, EXx, Ib } },
9e30b8e0
L
10914 },
10915 {
592a252b 10916 /* VEX_W_0F3A0A_P_2 */
539f890d 10917 { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib } },
9e30b8e0
L
10918 },
10919 {
592a252b 10920 /* VEX_W_0F3A0B_P_2 */
539f890d 10921 { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib } },
9e30b8e0
L
10922 },
10923 {
592a252b 10924 /* VEX_W_0F3A0C_P_2 */
9e30b8e0 10925 { "vblendps", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10926 },
10927 {
592a252b 10928 /* VEX_W_0F3A0D_P_2 */
9e30b8e0 10929 { "vblendpd", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10930 },
10931 {
592a252b 10932 /* VEX_W_0F3A0E_P_2 */
6c30d220 10933 { "vpblendw", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10934 },
10935 {
592a252b 10936 /* VEX_W_0F3A0F_P_2 */
6c30d220 10937 { "vpalignr", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10938 },
10939 {
592a252b 10940 /* VEX_W_0F3A14_P_2 */
9e30b8e0 10941 { "vpextrb", { Edqb, XM, Ib } },
9e30b8e0
L
10942 },
10943 {
592a252b 10944 /* VEX_W_0F3A15_P_2 */
9e30b8e0 10945 { "vpextrw", { Edqw, XM, Ib } },
9e30b8e0
L
10946 },
10947 {
592a252b 10948 /* VEX_W_0F3A18_P_2 */
9e30b8e0 10949 { "vinsertf128", { XM, Vex256, EXxmm, Ib } },
9e30b8e0
L
10950 },
10951 {
592a252b 10952 /* VEX_W_0F3A19_P_2 */
9e30b8e0 10953 { "vextractf128", { EXxmm, XM, Ib } },
9e30b8e0
L
10954 },
10955 {
592a252b 10956 /* VEX_W_0F3A20_P_2 */
9e30b8e0 10957 { "vpinsrb", { XM, Vex128, Edqb, Ib } },
9e30b8e0
L
10958 },
10959 {
592a252b 10960 /* VEX_W_0F3A21_P_2 */
9e30b8e0 10961 { "vinsertps", { XM, Vex128, EXd, Ib } },
9e30b8e0 10962 },
43234a1e
L
10963 {
10964 /* VEX_W_0F3A30_P_2 */
10965 { Bad_Opcode },
10966 { "kshiftrw", { MaskG, MaskR, Ib } },
10967 },
10968 {
10969 /* VEX_W_0F3A32_P_2 */
10970 { Bad_Opcode },
10971 { "kshiftlw", { MaskG, MaskR, Ib } },
10972 },
6c30d220
L
10973 {
10974 /* VEX_W_0F3A38_P_2 */
10975 { "vinserti128", { XM, Vex256, EXxmm, Ib } },
10976 },
10977 {
10978 /* VEX_W_0F3A39_P_2 */
10979 { "vextracti128", { EXxmm, XM, Ib } },
10980 },
9e30b8e0 10981 {
592a252b 10982 /* VEX_W_0F3A40_P_2 */
9e30b8e0 10983 { "vdpps", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10984 },
10985 {
592a252b 10986 /* VEX_W_0F3A41_P_2 */
9e30b8e0 10987 { "vdppd", { XM, Vex128, EXx, Ib } },
9e30b8e0
L
10988 },
10989 {
592a252b 10990 /* VEX_W_0F3A42_P_2 */
6c30d220 10991 { "vmpsadbw", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10992 },
10993 {
592a252b 10994 /* VEX_W_0F3A44_P_2 */
9e30b8e0 10995 { "vpclmulqdq", { XM, Vex128, EXx, PCLMUL } },
9e30b8e0 10996 },
6c30d220
L
10997 {
10998 /* VEX_W_0F3A46_P_2 */
10999 { "vperm2i128", { XM, Vex256, EXx, Ib } },
11000 },
a683cc34 11001 {
592a252b 11002 /* VEX_W_0F3A48_P_2 */
a683cc34
SP
11003 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
11004 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
11005 },
11006 {
592a252b 11007 /* VEX_W_0F3A49_P_2 */
a683cc34
SP
11008 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
11009 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
11010 },
9e30b8e0 11011 {
592a252b 11012 /* VEX_W_0F3A4A_P_2 */
9e30b8e0 11013 { "vblendvps", { XM, Vex, EXx, XMVexI4 } },
9e30b8e0
L
11014 },
11015 {
592a252b 11016 /* VEX_W_0F3A4B_P_2 */
9e30b8e0 11017 { "vblendvpd", { XM, Vex, EXx, XMVexI4 } },
9e30b8e0
L
11018 },
11019 {
592a252b 11020 /* VEX_W_0F3A4C_P_2 */
6c30d220 11021 { "vpblendvb", { XM, Vex, EXx, XMVexI4 } },
9e30b8e0
L
11022 },
11023 {
592a252b 11024 /* VEX_W_0F3A60_P_2 */
9e30b8e0 11025 { "vpcmpestrm", { XM, EXx, Ib } },
9e30b8e0
L
11026 },
11027 {
592a252b 11028 /* VEX_W_0F3A61_P_2 */
9e30b8e0 11029 { "vpcmpestri", { XM, EXx, Ib } },
9e30b8e0
L
11030 },
11031 {
592a252b 11032 /* VEX_W_0F3A62_P_2 */
9e30b8e0 11033 { "vpcmpistrm", { XM, EXx, Ib } },
9e30b8e0
L
11034 },
11035 {
592a252b 11036 /* VEX_W_0F3A63_P_2 */
9e30b8e0 11037 { "vpcmpistri", { XM, EXx, Ib } },
9e30b8e0
L
11038 },
11039 {
592a252b 11040 /* VEX_W_0F3ADF_P_2 */
9e30b8e0 11041 { "vaeskeygenassist", { XM, EXx, Ib } },
9e30b8e0 11042 },
43234a1e
L
11043#define NEED_VEX_W_TABLE
11044#include "i386-dis-evex.h"
11045#undef NEED_VEX_W_TABLE
9e30b8e0
L
11046};
11047
11048static const struct dis386 mod_table[][2] = {
11049 {
11050 /* MOD_8D */
11051 { "leaS", { Gv, M } },
9e30b8e0 11052 },
42164a71
L
11053 {
11054 /* MOD_C6_REG_7 */
11055 { Bad_Opcode },
11056 { RM_TABLE (RM_C6_REG_7) },
11057 },
11058 {
11059 /* MOD_C7_REG_7 */
11060 { Bad_Opcode },
11061 { RM_TABLE (RM_C7_REG_7) },
11062 },
4a357820
MZ
11063 {
11064 /* MOD_FF_REG_3 */
11065 { "Jcall{T|}", { indirEp } },
11066 },
11067 {
11068 /* MOD_FF_REG_5 */
11069 { "Jjmp{T|}", { indirEp } },
11070 },
9e30b8e0
L
11071 {
11072 /* MOD_0F01_REG_0 */
11073 { X86_64_TABLE (X86_64_0F01_REG_0) },
11074 { RM_TABLE (RM_0F01_REG_0) },
11075 },
11076 {
11077 /* MOD_0F01_REG_1 */
11078 { X86_64_TABLE (X86_64_0F01_REG_1) },
11079 { RM_TABLE (RM_0F01_REG_1) },
11080 },
11081 {
11082 /* MOD_0F01_REG_2 */
11083 { X86_64_TABLE (X86_64_0F01_REG_2) },
11084 { RM_TABLE (RM_0F01_REG_2) },
11085 },
11086 {
11087 /* MOD_0F01_REG_3 */
11088 { X86_64_TABLE (X86_64_0F01_REG_3) },
11089 { RM_TABLE (RM_0F01_REG_3) },
11090 },
11091 {
11092 /* MOD_0F01_REG_7 */
11093 { "invlpg", { Mb } },
11094 { RM_TABLE (RM_0F01_REG_7) },
11095 },
11096 {
11097 /* MOD_0F12_PREFIX_0 */
11098 { "movlps", { XM, EXq } },
11099 { "movhlps", { XM, EXq } },
11100 },
11101 {
11102 /* MOD_0F13 */
11103 { "movlpX", { EXq, XM } },
9e30b8e0
L
11104 },
11105 {
11106 /* MOD_0F16_PREFIX_0 */
11107 { "movhps", { XM, EXq } },
11108 { "movlhps", { XM, EXq } },
11109 },
11110 {
11111 /* MOD_0F17 */
11112 { "movhpX", { EXq, XM } },
9e30b8e0
L
11113 },
11114 {
11115 /* MOD_0F18_REG_0 */
11116 { "prefetchnta", { Mb } },
9e30b8e0
L
11117 },
11118 {
11119 /* MOD_0F18_REG_1 */
11120 { "prefetcht0", { Mb } },
9e30b8e0
L
11121 },
11122 {
11123 /* MOD_0F18_REG_2 */
11124 { "prefetcht1", { Mb } },
9e30b8e0
L
11125 },
11126 {
11127 /* MOD_0F18_REG_3 */
11128 { "prefetcht2", { Mb } },
9e30b8e0 11129 },
d7189fa5
RM
11130 {
11131 /* MOD_0F18_REG_4 */
11132 { "nop/reserved", { Mb } },
11133 },
11134 {
11135 /* MOD_0F18_REG_5 */
11136 { "nop/reserved", { Mb } },
11137 },
11138 {
11139 /* MOD_0F18_REG_6 */
11140 { "nop/reserved", { Mb } },
11141 },
11142 {
11143 /* MOD_0F18_REG_7 */
11144 { "nop/reserved", { Mb } },
11145 },
7e8b059b
L
11146 {
11147 /* MOD_0F1A_PREFIX_0 */
11148 { "bndldx", { Gbnd, Ev_bnd } },
11149 { "nopQ", { Ev } },
11150 },
11151 {
11152 /* MOD_0F1B_PREFIX_0 */
11153 { "bndstx", { Ev_bnd, Gbnd } },
11154 { "nopQ", { Ev } },
11155 },
11156 {
11157 /* MOD_0F1B_PREFIX_1 */
11158 { "bndmk", { Gbnd, Ev_bnd } },
11159 { "nopQ", { Ev } },
11160 },
9e30b8e0
L
11161 {
11162 /* MOD_0F20 */
592d1631 11163 { Bad_Opcode },
9e30b8e0
L
11164 { "movZ", { Rm, Cm } },
11165 },
11166 {
11167 /* MOD_0F21 */
592d1631 11168 { Bad_Opcode },
9e30b8e0
L
11169 { "movZ", { Rm, Dm } },
11170 },
11171 {
11172 /* MOD_0F22 */
592d1631 11173 { Bad_Opcode },
9e30b8e0 11174 { "movZ", { Cm, Rm } },
b844680a
L
11175 },
11176 {
92fddf8e 11177 /* MOD_0F23 */
592d1631 11178 { Bad_Opcode },
92fddf8e 11179 { "movZ", { Dm, Rm } },
b844680a
L
11180 },
11181 {
92fddf8e 11182 /* MOD_0F24 */
7bb15c6f 11183 { Bad_Opcode },
92fddf8e 11184 { "movL", { Rd, Td } },
b844680a
L
11185 },
11186 {
92fddf8e 11187 /* MOD_0F26 */
592d1631 11188 { Bad_Opcode },
92fddf8e 11189 { "movL", { Td, Rd } },
b844680a 11190 },
75c135a8
L
11191 {
11192 /* MOD_0F2B_PREFIX_0 */
4ee52178 11193 {"movntps", { Mx, XM } },
75c135a8
L
11194 },
11195 {
11196 /* MOD_0F2B_PREFIX_1 */
4ee52178 11197 {"movntss", { Md, XM } },
75c135a8
L
11198 },
11199 {
11200 /* MOD_0F2B_PREFIX_2 */
4ee52178 11201 {"movntpd", { Mx, XM } },
75c135a8
L
11202 },
11203 {
11204 /* MOD_0F2B_PREFIX_3 */
4ee52178 11205 {"movntsd", { Mq, XM } },
75c135a8
L
11206 },
11207 {
11208 /* MOD_0F51 */
592d1631 11209 { Bad_Opcode },
75c135a8
L
11210 { "movmskpX", { Gdq, XS } },
11211 },
b844680a 11212 {
1ceb70f8 11213 /* MOD_0F71_REG_2 */
592d1631 11214 { Bad_Opcode },
4e7d34a6 11215 { "psrlw", { MS, Ib } },
b844680a
L
11216 },
11217 {
1ceb70f8 11218 /* MOD_0F71_REG_4 */
592d1631 11219 { Bad_Opcode },
4e7d34a6 11220 { "psraw", { MS, Ib } },
b844680a
L
11221 },
11222 {
1ceb70f8 11223 /* MOD_0F71_REG_6 */
592d1631 11224 { Bad_Opcode },
4e7d34a6 11225 { "psllw", { MS, Ib } },
b844680a
L
11226 },
11227 {
1ceb70f8 11228 /* MOD_0F72_REG_2 */
592d1631 11229 { Bad_Opcode },
4e7d34a6 11230 { "psrld", { MS, Ib } },
b844680a
L
11231 },
11232 {
1ceb70f8 11233 /* MOD_0F72_REG_4 */
592d1631 11234 { Bad_Opcode },
4e7d34a6 11235 { "psrad", { MS, Ib } },
b844680a
L
11236 },
11237 {
1ceb70f8 11238 /* MOD_0F72_REG_6 */
592d1631 11239 { Bad_Opcode },
4e7d34a6 11240 { "pslld", { MS, Ib } },
b844680a
L
11241 },
11242 {
1ceb70f8 11243 /* MOD_0F73_REG_2 */
592d1631 11244 { Bad_Opcode },
4e7d34a6 11245 { "psrlq", { MS, Ib } },
b844680a
L
11246 },
11247 {
1ceb70f8 11248 /* MOD_0F73_REG_3 */
592d1631 11249 { Bad_Opcode },
c0f3af97
L
11250 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
11251 },
11252 {
11253 /* MOD_0F73_REG_6 */
592d1631 11254 { Bad_Opcode },
c0f3af97
L
11255 { "psllq", { MS, Ib } },
11256 },
11257 {
11258 /* MOD_0F73_REG_7 */
592d1631 11259 { Bad_Opcode },
c0f3af97
L
11260 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
11261 },
11262 {
11263 /* MOD_0FAE_REG_0 */
eacc9c89 11264 { "fxsave", { FXSAVE } },
c7b8aa3a 11265 { PREFIX_TABLE (PREFIX_0FAE_REG_0) },
c0f3af97
L
11266 },
11267 {
11268 /* MOD_0FAE_REG_1 */
eacc9c89 11269 { "fxrstor", { FXSAVE } },
c7b8aa3a 11270 { PREFIX_TABLE (PREFIX_0FAE_REG_1) },
c0f3af97
L
11271 },
11272 {
11273 /* MOD_0FAE_REG_2 */
11274 { "ldmxcsr", { Md } },
c7b8aa3a 11275 { PREFIX_TABLE (PREFIX_0FAE_REG_2) },
c0f3af97
L
11276 },
11277 {
11278 /* MOD_0FAE_REG_3 */
11279 { "stmxcsr", { Md } },
c7b8aa3a 11280 { PREFIX_TABLE (PREFIX_0FAE_REG_3) },
c0f3af97
L
11281 },
11282 {
11283 /* MOD_0FAE_REG_4 */
73bb6729 11284 { "xsave", { FXSAVE } },
c0f3af97
L
11285 },
11286 {
11287 /* MOD_0FAE_REG_5 */
73bb6729 11288 { "xrstor", { FXSAVE } },
c0f3af97
L
11289 { RM_TABLE (RM_0FAE_REG_5) },
11290 },
11291 {
11292 /* MOD_0FAE_REG_6 */
c7b8aa3a 11293 { "xsaveopt", { FXSAVE } },
c0f3af97
L
11294 { RM_TABLE (RM_0FAE_REG_6) },
11295 },
11296 {
11297 /* MOD_0FAE_REG_7 */
963f3586 11298 { PREFIX_TABLE (PREFIX_0FAE_REG_7) },
c0f3af97
L
11299 { RM_TABLE (RM_0FAE_REG_7) },
11300 },
11301 {
11302 /* MOD_0FB2 */
11303 { "lssS", { Gv, Mp } },
c0f3af97
L
11304 },
11305 {
11306 /* MOD_0FB4 */
11307 { "lfsS", { Gv, Mp } },
c0f3af97
L
11308 },
11309 {
11310 /* MOD_0FB5 */
11311 { "lgsS", { Gv, Mp } },
c0f3af97 11312 },
963f3586
IT
11313 {
11314 /* MOD_0FC7_REG_3 */
11315 { "xrstors", { FXSAVE } },
11316 },
11317 {
11318 /* MOD_0FC7_REG_4 */
11319 { "xsavec", { FXSAVE } },
11320 },
11321 {
11322 /* MOD_0FC7_REG_5 */
11323 { "xsaves", { FXSAVE } },
11324 },
c0f3af97
L
11325 {
11326 /* MOD_0FC7_REG_6 */
11327 { PREFIX_TABLE (PREFIX_0FC7_REG_6) },
d7d9a9f8 11328 { "rdrand", { Ev } },
c0f3af97
L
11329 },
11330 {
11331 /* MOD_0FC7_REG_7 */
11332 { "vmptrst", { Mq } },
e2e1fcde 11333 { "rdseed", { Ev } },
c0f3af97
L
11334 },
11335 {
11336 /* MOD_0FD7 */
592d1631 11337 { Bad_Opcode },
c0f3af97
L
11338 { "pmovmskb", { Gdq, MS } },
11339 },
11340 {
11341 /* MOD_0FE7_PREFIX_2 */
11342 { "movntdq", { Mx, XM } },
c0f3af97
L
11343 },
11344 {
11345 /* MOD_0FF0_PREFIX_3 */
11346 { "lddqu", { XM, M } },
c0f3af97
L
11347 },
11348 {
11349 /* MOD_0F382A_PREFIX_2 */
11350 { "movntdqa", { XM, Mx } },
c0f3af97
L
11351 },
11352 {
11353 /* MOD_62_32BIT */
11354 { "bound{S|}", { Gv, Ma } },
43234a1e 11355 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
11356 },
11357 {
11358 /* MOD_C4_32BIT */
11359 { "lesS", { Gv, Mp } },
11360 { VEX_C4_TABLE (VEX_0F) },
11361 },
11362 {
11363 /* MOD_C5_32BIT */
11364 { "ldsS", { Gv, Mp } },
11365 { VEX_C5_TABLE (VEX_0F) },
11366 },
11367 {
592a252b
L
11368 /* MOD_VEX_0F12_PREFIX_0 */
11369 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
11370 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
c0f3af97
L
11371 },
11372 {
592a252b
L
11373 /* MOD_VEX_0F13 */
11374 { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
c0f3af97
L
11375 },
11376 {
592a252b
L
11377 /* MOD_VEX_0F16_PREFIX_0 */
11378 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
11379 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
c0f3af97
L
11380 },
11381 {
592a252b
L
11382 /* MOD_VEX_0F17 */
11383 { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
c0f3af97
L
11384 },
11385 {
592a252b
L
11386 /* MOD_VEX_0F2B */
11387 { VEX_W_TABLE (VEX_W_0F2B_M_0) },
c0f3af97
L
11388 },
11389 {
592a252b 11390 /* MOD_VEX_0F50 */
592d1631 11391 { Bad_Opcode },
592a252b 11392 { VEX_W_TABLE (VEX_W_0F50_M_0) },
c0f3af97
L
11393 },
11394 {
592a252b 11395 /* MOD_VEX_0F71_REG_2 */
592d1631 11396 { Bad_Opcode },
592a252b 11397 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
b844680a
L
11398 },
11399 {
592a252b 11400 /* MOD_VEX_0F71_REG_4 */
592d1631 11401 { Bad_Opcode },
592a252b 11402 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
b844680a
L
11403 },
11404 {
592a252b 11405 /* MOD_VEX_0F71_REG_6 */
592d1631 11406 { Bad_Opcode },
592a252b 11407 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
b844680a
L
11408 },
11409 {
592a252b 11410 /* MOD_VEX_0F72_REG_2 */
592d1631 11411 { Bad_Opcode },
592a252b 11412 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
b844680a 11413 },
d8faab4e 11414 {
592a252b 11415 /* MOD_VEX_0F72_REG_4 */
592d1631 11416 { Bad_Opcode },
592a252b 11417 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
d8faab4e
L
11418 },
11419 {
592a252b 11420 /* MOD_VEX_0F72_REG_6 */
592d1631 11421 { Bad_Opcode },
592a252b 11422 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
d8faab4e 11423 },
876d4bfa 11424 {
592a252b 11425 /* MOD_VEX_0F73_REG_2 */
592d1631 11426 { Bad_Opcode },
592a252b 11427 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
876d4bfa
L
11428 },
11429 {
592a252b 11430 /* MOD_VEX_0F73_REG_3 */
592d1631 11431 { Bad_Opcode },
592a252b 11432 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
475a2301
L
11433 },
11434 {
592a252b 11435 /* MOD_VEX_0F73_REG_6 */
592d1631 11436 { Bad_Opcode },
592a252b 11437 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
876d4bfa
L
11438 },
11439 {
592a252b 11440 /* MOD_VEX_0F73_REG_7 */
592d1631 11441 { Bad_Opcode },
592a252b 11442 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
876d4bfa
L
11443 },
11444 {
592a252b
L
11445 /* MOD_VEX_0FAE_REG_2 */
11446 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
876d4bfa 11447 },
bbedc832 11448 {
592a252b
L
11449 /* MOD_VEX_0FAE_REG_3 */
11450 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
bbedc832 11451 },
144c41d9 11452 {
592a252b 11453 /* MOD_VEX_0FD7_PREFIX_2 */
592d1631 11454 { Bad_Opcode },
6c30d220 11455 { VEX_W_TABLE (VEX_W_0FD7_P_2_M_1) },
144c41d9 11456 },
1afd85e3 11457 {
592a252b
L
11458 /* MOD_VEX_0FE7_PREFIX_2 */
11459 { VEX_W_TABLE (VEX_W_0FE7_P_2_M_0) },
1afd85e3
L
11460 },
11461 {
592a252b
L
11462 /* MOD_VEX_0FF0_PREFIX_3 */
11463 { VEX_W_TABLE (VEX_W_0FF0_P_3_M_0) },
92fddf8e 11464 },
75c135a8 11465 {
592a252b
L
11466 /* MOD_VEX_0F381A_PREFIX_2 */
11467 { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
75c135a8 11468 },
1afd85e3 11469 {
592a252b 11470 /* MOD_VEX_0F382A_PREFIX_2 */
6c30d220 11471 { VEX_W_TABLE (VEX_W_0F382A_P_2_M_0) },
1afd85e3 11472 },
75c135a8 11473 {
592a252b
L
11474 /* MOD_VEX_0F382C_PREFIX_2 */
11475 { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
75c135a8 11476 },
1afd85e3 11477 {
592a252b
L
11478 /* MOD_VEX_0F382D_PREFIX_2 */
11479 { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
1afd85e3
L
11480 },
11481 {
592a252b
L
11482 /* MOD_VEX_0F382E_PREFIX_2 */
11483 { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
1afd85e3
L
11484 },
11485 {
592a252b
L
11486 /* MOD_VEX_0F382F_PREFIX_2 */
11487 { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
1afd85e3 11488 },
6c30d220
L
11489 {
11490 /* MOD_VEX_0F385A_PREFIX_2 */
11491 { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) },
11492 },
11493 {
11494 /* MOD_VEX_0F388C_PREFIX_2 */
11495 { "vpmaskmov%LW", { XM, Vex, Mx } },
11496 },
11497 {
11498 /* MOD_VEX_0F388E_PREFIX_2 */
11499 { "vpmaskmov%LW", { Mx, Vex, XM } },
11500 },
43234a1e
L
11501#define NEED_MOD_TABLE
11502#include "i386-dis-evex.h"
11503#undef NEED_MOD_TABLE
b844680a
L
11504};
11505
1ceb70f8 11506static const struct dis386 rm_table[][8] = {
42164a71
L
11507 {
11508 /* RM_C6_REG_7 */
11509 { "xabort", { Skip_MODRM, Ib } },
11510 },
11511 {
11512 /* RM_C7_REG_7 */
11513 { "xbeginT", { Skip_MODRM, Jv } },
11514 },
b844680a 11515 {
1ceb70f8 11516 /* RM_0F01_REG_0 */
592d1631 11517 { Bad_Opcode },
b844680a
L
11518 { "vmcall", { Skip_MODRM } },
11519 { "vmlaunch", { Skip_MODRM } },
11520 { "vmresume", { Skip_MODRM } },
11521 { "vmxoff", { Skip_MODRM } },
b844680a
L
11522 },
11523 {
1ceb70f8 11524 /* RM_0F01_REG_1 */
b844680a
L
11525 { "monitor", { { OP_Monitor, 0 } } },
11526 { "mwait", { { OP_Mwait, 0 } } },
5c111e37
L
11527 { "clac", { Skip_MODRM } },
11528 { "stac", { Skip_MODRM } },
b844680a 11529 },
475a2301
L
11530 {
11531 /* RM_0F01_REG_2 */
11532 { "xgetbv", { Skip_MODRM } },
11533 { "xsetbv", { Skip_MODRM } },
8729a6f6
L
11534 { Bad_Opcode },
11535 { Bad_Opcode },
11536 { "vmfunc", { Skip_MODRM } },
42164a71
L
11537 { "xend", { Skip_MODRM } },
11538 { "xtest", { Skip_MODRM } },
11539 { Bad_Opcode },
475a2301 11540 },
b844680a 11541 {
1ceb70f8 11542 /* RM_0F01_REG_3 */
4e7d34a6
L
11543 { "vmrun", { Skip_MODRM } },
11544 { "vmmcall", { Skip_MODRM } },
11545 { "vmload", { Skip_MODRM } },
11546 { "vmsave", { Skip_MODRM } },
11547 { "stgi", { Skip_MODRM } },
11548 { "clgi", { Skip_MODRM } },
11549 { "skinit", { Skip_MODRM } },
11550 { "invlpga", { Skip_MODRM } },
11551 },
11552 {
1ceb70f8 11553 /* RM_0F01_REG_7 */
4e7d34a6
L
11554 { "swapgs", { Skip_MODRM } },
11555 { "rdtscp", { Skip_MODRM } },
b844680a
L
11556 },
11557 {
1ceb70f8 11558 /* RM_0FAE_REG_5 */
4e7d34a6 11559 { "lfence", { Skip_MODRM } },
b844680a
L
11560 },
11561 {
1ceb70f8 11562 /* RM_0FAE_REG_6 */
4e7d34a6 11563 { "mfence", { Skip_MODRM } },
b844680a 11564 },
bbedc832 11565 {
1ceb70f8 11566 /* RM_0FAE_REG_7 */
4e7d34a6 11567 { "sfence", { Skip_MODRM } },
144c41d9 11568 },
b844680a
L
11569};
11570
c608c12e
AM
11571#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
11572
f16cd0d5
L
11573/* We use the high bit to indicate different name for the same
11574 prefix. */
11575#define ADDR16_PREFIX (0x67 | 0x100)
11576#define ADDR32_PREFIX (0x67 | 0x200)
11577#define DATA16_PREFIX (0x66 | 0x100)
11578#define DATA32_PREFIX (0x66 | 0x200)
11579#define REP_PREFIX (0xf3 | 0x100)
42164a71
L
11580#define XACQUIRE_PREFIX (0xf2 | 0x200)
11581#define XRELEASE_PREFIX (0xf3 | 0x400)
7e8b059b 11582#define BND_PREFIX (0xf2 | 0x400)
f16cd0d5
L
11583
11584static int
26ca5450 11585ckprefix (void)
252b5132 11586{
f16cd0d5 11587 int newrex, i, length;
52b15da3 11588 rex = 0;
c0f3af97 11589 rex_ignored = 0;
252b5132 11590 prefixes = 0;
7d421014 11591 used_prefixes = 0;
52b15da3 11592 rex_used = 0;
f16cd0d5
L
11593 last_lock_prefix = -1;
11594 last_repz_prefix = -1;
11595 last_repnz_prefix = -1;
11596 last_data_prefix = -1;
11597 last_addr_prefix = -1;
11598 last_rex_prefix = -1;
11599 last_seg_prefix = -1;
f310f33d
L
11600 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
11601 all_prefixes[i] = 0;
11602 i = 0;
f16cd0d5
L
11603 length = 0;
11604 /* The maximum instruction length is 15bytes. */
11605 while (length < MAX_CODE_LENGTH - 1)
252b5132
RH
11606 {
11607 FETCH_DATA (the_info, codep + 1);
52b15da3 11608 newrex = 0;
252b5132
RH
11609 switch (*codep)
11610 {
52b15da3
JH
11611 /* REX prefixes family. */
11612 case 0x40:
11613 case 0x41:
11614 case 0x42:
11615 case 0x43:
11616 case 0x44:
11617 case 0x45:
11618 case 0x46:
11619 case 0x47:
11620 case 0x48:
11621 case 0x49:
11622 case 0x4a:
11623 case 0x4b:
11624 case 0x4c:
11625 case 0x4d:
11626 case 0x4e:
11627 case 0x4f:
f16cd0d5
L
11628 if (address_mode == mode_64bit)
11629 newrex = *codep;
11630 else
11631 return 1;
11632 last_rex_prefix = i;
52b15da3 11633 break;
252b5132
RH
11634 case 0xf3:
11635 prefixes |= PREFIX_REPZ;
f16cd0d5 11636 last_repz_prefix = i;
252b5132
RH
11637 break;
11638 case 0xf2:
11639 prefixes |= PREFIX_REPNZ;
f16cd0d5 11640 last_repnz_prefix = i;
252b5132
RH
11641 break;
11642 case 0xf0:
11643 prefixes |= PREFIX_LOCK;
f16cd0d5 11644 last_lock_prefix = i;
252b5132
RH
11645 break;
11646 case 0x2e:
11647 prefixes |= PREFIX_CS;
f16cd0d5 11648 last_seg_prefix = i;
252b5132
RH
11649 break;
11650 case 0x36:
11651 prefixes |= PREFIX_SS;
f16cd0d5 11652 last_seg_prefix = i;
252b5132
RH
11653 break;
11654 case 0x3e:
11655 prefixes |= PREFIX_DS;
f16cd0d5 11656 last_seg_prefix = i;
252b5132
RH
11657 break;
11658 case 0x26:
11659 prefixes |= PREFIX_ES;
f16cd0d5 11660 last_seg_prefix = i;
252b5132
RH
11661 break;
11662 case 0x64:
11663 prefixes |= PREFIX_FS;
f16cd0d5 11664 last_seg_prefix = i;
252b5132
RH
11665 break;
11666 case 0x65:
11667 prefixes |= PREFIX_GS;
f16cd0d5 11668 last_seg_prefix = i;
252b5132
RH
11669 break;
11670 case 0x66:
11671 prefixes |= PREFIX_DATA;
f16cd0d5 11672 last_data_prefix = i;
252b5132
RH
11673 break;
11674 case 0x67:
11675 prefixes |= PREFIX_ADDR;
f16cd0d5 11676 last_addr_prefix = i;
252b5132 11677 break;
5076851f 11678 case FWAIT_OPCODE:
252b5132
RH
11679 /* fwait is really an instruction. If there are prefixes
11680 before the fwait, they belong to the fwait, *not* to the
11681 following instruction. */
3e7d61b2 11682 if (prefixes || rex)
252b5132
RH
11683 {
11684 prefixes |= PREFIX_FWAIT;
11685 codep++;
6c067bbb
RM
11686 /* This ensures that the previous REX prefixes are noticed
11687 as unused prefixes, as in the return case below. */
11688 rex_used = rex;
f16cd0d5 11689 return 1;
252b5132
RH
11690 }
11691 prefixes = PREFIX_FWAIT;
11692 break;
11693 default:
f16cd0d5 11694 return 1;
252b5132 11695 }
52b15da3
JH
11696 /* Rex is ignored when followed by another prefix. */
11697 if (rex)
11698 {
3e7d61b2 11699 rex_used = rex;
f16cd0d5 11700 return 1;
52b15da3 11701 }
f16cd0d5
L
11702 if (*codep != FWAIT_OPCODE)
11703 all_prefixes[i++] = *codep;
52b15da3 11704 rex = newrex;
252b5132 11705 codep++;
f16cd0d5
L
11706 length++;
11707 }
11708 return 0;
11709}
11710
11711static int
11712seg_prefix (int pref)
11713{
11714 switch (pref)
11715 {
11716 case 0x2e:
11717 return PREFIX_CS;
11718 case 0x36:
11719 return PREFIX_SS;
11720 case 0x3e:
11721 return PREFIX_DS;
11722 case 0x26:
11723 return PREFIX_ES;
11724 case 0x64:
11725 return PREFIX_FS;
11726 case 0x65:
11727 return PREFIX_GS;
11728 default:
11729 return 0;
252b5132
RH
11730 }
11731}
11732
7d421014
ILT
11733/* Return the name of the prefix byte PREF, or NULL if PREF is not a
11734 prefix byte. */
11735
11736static const char *
26ca5450 11737prefix_name (int pref, int sizeflag)
7d421014 11738{
0003779b
L
11739 static const char *rexes [16] =
11740 {
11741 "rex", /* 0x40 */
11742 "rex.B", /* 0x41 */
11743 "rex.X", /* 0x42 */
11744 "rex.XB", /* 0x43 */
11745 "rex.R", /* 0x44 */
11746 "rex.RB", /* 0x45 */
11747 "rex.RX", /* 0x46 */
11748 "rex.RXB", /* 0x47 */
11749 "rex.W", /* 0x48 */
11750 "rex.WB", /* 0x49 */
11751 "rex.WX", /* 0x4a */
11752 "rex.WXB", /* 0x4b */
11753 "rex.WR", /* 0x4c */
11754 "rex.WRB", /* 0x4d */
11755 "rex.WRX", /* 0x4e */
11756 "rex.WRXB", /* 0x4f */
11757 };
11758
7d421014
ILT
11759 switch (pref)
11760 {
52b15da3
JH
11761 /* REX prefixes family. */
11762 case 0x40:
52b15da3 11763 case 0x41:
52b15da3 11764 case 0x42:
52b15da3 11765 case 0x43:
52b15da3 11766 case 0x44:
52b15da3 11767 case 0x45:
52b15da3 11768 case 0x46:
52b15da3 11769 case 0x47:
52b15da3 11770 case 0x48:
52b15da3 11771 case 0x49:
52b15da3 11772 case 0x4a:
52b15da3 11773 case 0x4b:
52b15da3 11774 case 0x4c:
52b15da3 11775 case 0x4d:
52b15da3 11776 case 0x4e:
52b15da3 11777 case 0x4f:
0003779b 11778 return rexes [pref - 0x40];
7d421014
ILT
11779 case 0xf3:
11780 return "repz";
11781 case 0xf2:
11782 return "repnz";
11783 case 0xf0:
11784 return "lock";
11785 case 0x2e:
11786 return "cs";
11787 case 0x36:
11788 return "ss";
11789 case 0x3e:
11790 return "ds";
11791 case 0x26:
11792 return "es";
11793 case 0x64:
11794 return "fs";
11795 case 0x65:
11796 return "gs";
11797 case 0x66:
11798 return (sizeflag & DFLAG) ? "data16" : "data32";
11799 case 0x67:
cb712a9e 11800 if (address_mode == mode_64bit)
db6eb5be 11801 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 11802 else
2888cb7a 11803 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
11804 case FWAIT_OPCODE:
11805 return "fwait";
f16cd0d5
L
11806 case ADDR16_PREFIX:
11807 return "addr16";
11808 case ADDR32_PREFIX:
11809 return "addr32";
11810 case DATA16_PREFIX:
11811 return "data16";
11812 case DATA32_PREFIX:
11813 return "data32";
11814 case REP_PREFIX:
11815 return "rep";
42164a71
L
11816 case XACQUIRE_PREFIX:
11817 return "xacquire";
11818 case XRELEASE_PREFIX:
11819 return "xrelease";
7e8b059b
L
11820 case BND_PREFIX:
11821 return "bnd";
7d421014
ILT
11822 default:
11823 return NULL;
11824 }
11825}
11826
ce518a5f
L
11827static char op_out[MAX_OPERANDS][100];
11828static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 11829static int two_source_ops;
ce518a5f
L
11830static bfd_vma op_address[MAX_OPERANDS];
11831static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 11832static bfd_vma start_pc;
ce518a5f 11833
252b5132
RH
11834/*
11835 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
11836 * (see topic "Redundant prefixes" in the "Differences from 8086"
11837 * section of the "Virtual 8086 Mode" chapter.)
11838 * 'pc' should be the address of this instruction, it will
11839 * be used to print the target address if this is a relative jump or call
11840 * The function returns the length of this instruction in bytes.
11841 */
11842
252b5132 11843static char intel_syntax;
9d141669 11844static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
11845static char open_char;
11846static char close_char;
11847static char separator_char;
11848static char scale_char;
11849
e396998b
AM
11850/* Here for backwards compatibility. When gdb stops using
11851 print_insn_i386_att and print_insn_i386_intel these functions can
11852 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 11853int
26ca5450 11854print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
11855{
11856 intel_syntax = 0;
e396998b
AM
11857
11858 return print_insn (pc, info);
252b5132
RH
11859}
11860
11861int
26ca5450 11862print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
11863{
11864 intel_syntax = 1;
e396998b
AM
11865
11866 return print_insn (pc, info);
252b5132
RH
11867}
11868
e396998b 11869int
26ca5450 11870print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
11871{
11872 intel_syntax = -1;
11873
11874 return print_insn (pc, info);
11875}
11876
f59a29b9
L
11877void
11878print_i386_disassembler_options (FILE *stream)
11879{
11880 fprintf (stream, _("\n\
11881The following i386/x86-64 specific disassembler options are supported for use\n\
11882with the -M switch (multiple options should be separated by commas):\n"));
11883
11884 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
11885 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
11886 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
11887 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
11888 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
11889 fprintf (stream, _(" att-mnemonic\n"
11890 " Display instruction in AT&T mnemonic\n"));
11891 fprintf (stream, _(" intel-mnemonic\n"
11892 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
11893 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
11894 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
11895 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
11896 fprintf (stream, _(" data32 Assume 32bit data size\n"));
11897 fprintf (stream, _(" data16 Assume 16bit data size\n"));
11898 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
11899}
11900
592d1631
L
11901/* Bad opcode. */
11902static const struct dis386 bad_opcode = { "(bad)", { XX } };
11903
b844680a
L
11904/* Get a pointer to struct dis386 with a valid name. */
11905
11906static const struct dis386 *
8bb15339 11907get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 11908{
91d6fa6a 11909 int vindex, vex_table_index;
b844680a
L
11910
11911 if (dp->name != NULL)
11912 return dp;
11913
11914 switch (dp->op[0].bytemode)
11915 {
1ceb70f8
L
11916 case USE_REG_TABLE:
11917 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
11918 break;
11919
11920 case USE_MOD_TABLE:
91d6fa6a
NC
11921 vindex = modrm.mod == 0x3 ? 1 : 0;
11922 dp = &mod_table[dp->op[1].bytemode][vindex];
1ceb70f8
L
11923 break;
11924
11925 case USE_RM_TABLE:
11926 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
11927 break;
11928
4e7d34a6 11929 case USE_PREFIX_TABLE:
c0f3af97 11930 if (need_vex)
b844680a 11931 {
c0f3af97
L
11932 /* The prefix in VEX is implicit. */
11933 switch (vex.prefix)
11934 {
11935 case 0:
91d6fa6a 11936 vindex = 0;
c0f3af97
L
11937 break;
11938 case REPE_PREFIX_OPCODE:
91d6fa6a 11939 vindex = 1;
c0f3af97
L
11940 break;
11941 case DATA_PREFIX_OPCODE:
91d6fa6a 11942 vindex = 2;
c0f3af97
L
11943 break;
11944 case REPNE_PREFIX_OPCODE:
91d6fa6a 11945 vindex = 3;
c0f3af97
L
11946 break;
11947 default:
11948 abort ();
11949 break;
11950 }
b844680a 11951 }
7bb15c6f 11952 else
b844680a 11953 {
91d6fa6a 11954 vindex = 0;
c0f3af97
L
11955 used_prefixes |= (prefixes & PREFIX_REPZ);
11956 if (prefixes & PREFIX_REPZ)
b844680a 11957 {
91d6fa6a 11958 vindex = 1;
f16cd0d5 11959 all_prefixes[last_repz_prefix] = 0;
b844680a
L
11960 }
11961 else
11962 {
c0f3af97
L
11963 /* We should check PREFIX_REPNZ and PREFIX_REPZ before
11964 PREFIX_DATA. */
11965 used_prefixes |= (prefixes & PREFIX_REPNZ);
11966 if (prefixes & PREFIX_REPNZ)
11967 {
91d6fa6a 11968 vindex = 3;
f16cd0d5 11969 all_prefixes[last_repnz_prefix] = 0;
c0f3af97
L
11970 }
11971 else
b844680a 11972 {
c0f3af97
L
11973 used_prefixes |= (prefixes & PREFIX_DATA);
11974 if (prefixes & PREFIX_DATA)
11975 {
91d6fa6a 11976 vindex = 2;
f16cd0d5 11977 all_prefixes[last_data_prefix] = 0;
c0f3af97 11978 }
b844680a
L
11979 }
11980 }
11981 }
91d6fa6a 11982 dp = &prefix_table[dp->op[1].bytemode][vindex];
b844680a
L
11983 break;
11984
4e7d34a6 11985 case USE_X86_64_TABLE:
91d6fa6a
NC
11986 vindex = address_mode == mode_64bit ? 1 : 0;
11987 dp = &x86_64_table[dp->op[1].bytemode][vindex];
b844680a
L
11988 break;
11989
4e7d34a6 11990 case USE_3BYTE_TABLE:
8bb15339 11991 FETCH_DATA (info, codep + 2);
91d6fa6a
NC
11992 vindex = *codep++;
11993 dp = &three_byte_table[dp->op[1].bytemode][vindex];
8bb15339
L
11994 modrm.mod = (*codep >> 6) & 3;
11995 modrm.reg = (*codep >> 3) & 7;
11996 modrm.rm = *codep & 7;
11997 break;
11998
c0f3af97
L
11999 case USE_VEX_LEN_TABLE:
12000 if (!need_vex)
12001 abort ();
12002
12003 switch (vex.length)
12004 {
12005 case 128:
91d6fa6a 12006 vindex = 0;
c0f3af97
L
12007 break;
12008 case 256:
91d6fa6a 12009 vindex = 1;
c0f3af97
L
12010 break;
12011 default:
12012 abort ();
12013 break;
12014 }
12015
91d6fa6a 12016 dp = &vex_len_table[dp->op[1].bytemode][vindex];
c0f3af97
L
12017 break;
12018
f88c9eb0
SP
12019 case USE_XOP_8F_TABLE:
12020 FETCH_DATA (info, codep + 3);
12021 /* All bits in the REX prefix are ignored. */
12022 rex_ignored = rex;
12023 rex = ~(*codep >> 5) & 0x7;
12024
12025 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
12026 switch ((*codep & 0x1f))
12027 {
12028 default:
f07af43e
L
12029 dp = &bad_opcode;
12030 return dp;
5dd85c99
SP
12031 case 0x8:
12032 vex_table_index = XOP_08;
12033 break;
f88c9eb0
SP
12034 case 0x9:
12035 vex_table_index = XOP_09;
12036 break;
12037 case 0xa:
12038 vex_table_index = XOP_0A;
12039 break;
12040 }
12041 codep++;
12042 vex.w = *codep & 0x80;
12043 if (vex.w && address_mode == mode_64bit)
12044 rex |= REX_W;
12045
12046 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12047 if (address_mode != mode_64bit
12048 && vex.register_specifier > 0x7)
f07af43e
L
12049 {
12050 dp = &bad_opcode;
12051 return dp;
12052 }
f88c9eb0
SP
12053
12054 vex.length = (*codep & 0x4) ? 256 : 128;
12055 switch ((*codep & 0x3))
12056 {
12057 case 0:
12058 vex.prefix = 0;
12059 break;
12060 case 1:
12061 vex.prefix = DATA_PREFIX_OPCODE;
12062 break;
12063 case 2:
12064 vex.prefix = REPE_PREFIX_OPCODE;
12065 break;
12066 case 3:
12067 vex.prefix = REPNE_PREFIX_OPCODE;
12068 break;
12069 }
12070 need_vex = 1;
12071 need_vex_reg = 1;
12072 codep++;
91d6fa6a
NC
12073 vindex = *codep++;
12074 dp = &xop_table[vex_table_index][vindex];
c48244a5
SP
12075
12076 FETCH_DATA (info, codep + 1);
12077 modrm.mod = (*codep >> 6) & 3;
12078 modrm.reg = (*codep >> 3) & 7;
12079 modrm.rm = *codep & 7;
f88c9eb0
SP
12080 break;
12081
c0f3af97 12082 case USE_VEX_C4_TABLE:
43234a1e 12083 /* VEX prefix. */
c0f3af97
L
12084 FETCH_DATA (info, codep + 3);
12085 /* All bits in the REX prefix are ignored. */
12086 rex_ignored = rex;
12087 rex = ~(*codep >> 5) & 0x7;
12088 switch ((*codep & 0x1f))
12089 {
12090 default:
f07af43e
L
12091 dp = &bad_opcode;
12092 return dp;
c0f3af97 12093 case 0x1:
f88c9eb0 12094 vex_table_index = VEX_0F;
c0f3af97
L
12095 break;
12096 case 0x2:
f88c9eb0 12097 vex_table_index = VEX_0F38;
c0f3af97
L
12098 break;
12099 case 0x3:
f88c9eb0 12100 vex_table_index = VEX_0F3A;
c0f3af97
L
12101 break;
12102 }
12103 codep++;
12104 vex.w = *codep & 0x80;
12105 if (vex.w && address_mode == mode_64bit)
12106 rex |= REX_W;
12107
12108 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12109 if (address_mode != mode_64bit
12110 && vex.register_specifier > 0x7)
f07af43e
L
12111 {
12112 dp = &bad_opcode;
12113 return dp;
12114 }
c0f3af97
L
12115
12116 vex.length = (*codep & 0x4) ? 256 : 128;
12117 switch ((*codep & 0x3))
12118 {
12119 case 0:
12120 vex.prefix = 0;
12121 break;
12122 case 1:
12123 vex.prefix = DATA_PREFIX_OPCODE;
12124 break;
12125 case 2:
12126 vex.prefix = REPE_PREFIX_OPCODE;
12127 break;
12128 case 3:
12129 vex.prefix = REPNE_PREFIX_OPCODE;
12130 break;
12131 }
12132 need_vex = 1;
12133 need_vex_reg = 1;
12134 codep++;
91d6fa6a
NC
12135 vindex = *codep++;
12136 dp = &vex_table[vex_table_index][vindex];
c0f3af97 12137 /* There is no MODRM byte for VEX [82|77]. */
91d6fa6a 12138 if (vindex != 0x77 && vindex != 0x82)
c0f3af97
L
12139 {
12140 FETCH_DATA (info, codep + 1);
12141 modrm.mod = (*codep >> 6) & 3;
12142 modrm.reg = (*codep >> 3) & 7;
12143 modrm.rm = *codep & 7;
12144 }
12145 break;
12146
12147 case USE_VEX_C5_TABLE:
43234a1e 12148 /* VEX prefix. */
c0f3af97
L
12149 FETCH_DATA (info, codep + 2);
12150 /* All bits in the REX prefix are ignored. */
12151 rex_ignored = rex;
12152 rex = (*codep & 0x80) ? 0 : REX_R;
12153
12154 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12155 if (address_mode != mode_64bit
12156 && vex.register_specifier > 0x7)
f07af43e
L
12157 {
12158 dp = &bad_opcode;
12159 return dp;
12160 }
c0f3af97 12161
759a05ce
L
12162 vex.w = 0;
12163
c0f3af97
L
12164 vex.length = (*codep & 0x4) ? 256 : 128;
12165 switch ((*codep & 0x3))
12166 {
12167 case 0:
12168 vex.prefix = 0;
12169 break;
12170 case 1:
12171 vex.prefix = DATA_PREFIX_OPCODE;
12172 break;
12173 case 2:
12174 vex.prefix = REPE_PREFIX_OPCODE;
12175 break;
12176 case 3:
12177 vex.prefix = REPNE_PREFIX_OPCODE;
12178 break;
12179 }
12180 need_vex = 1;
12181 need_vex_reg = 1;
12182 codep++;
91d6fa6a
NC
12183 vindex = *codep++;
12184 dp = &vex_table[dp->op[1].bytemode][vindex];
c0f3af97 12185 /* There is no MODRM byte for VEX [82|77]. */
91d6fa6a 12186 if (vindex != 0x77 && vindex != 0x82)
c0f3af97
L
12187 {
12188 FETCH_DATA (info, codep + 1);
12189 modrm.mod = (*codep >> 6) & 3;
12190 modrm.reg = (*codep >> 3) & 7;
12191 modrm.rm = *codep & 7;
12192 }
12193 break;
12194
9e30b8e0
L
12195 case USE_VEX_W_TABLE:
12196 if (!need_vex)
12197 abort ();
12198
12199 dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
12200 break;
12201
43234a1e
L
12202 case USE_EVEX_TABLE:
12203 two_source_ops = 0;
12204 /* EVEX prefix. */
12205 vex.evex = 1;
12206 FETCH_DATA (info, codep + 4);
12207 /* All bits in the REX prefix are ignored. */
12208 rex_ignored = rex;
12209 /* The first byte after 0x62. */
12210 rex = ~(*codep >> 5) & 0x7;
12211 vex.r = *codep & 0x10;
12212 switch ((*codep & 0xf))
12213 {
12214 default:
12215 return &bad_opcode;
12216 case 0x1:
12217 vex_table_index = EVEX_0F;
12218 break;
12219 case 0x2:
12220 vex_table_index = EVEX_0F38;
12221 break;
12222 case 0x3:
12223 vex_table_index = EVEX_0F3A;
12224 break;
12225 }
12226
12227 /* The second byte after 0x62. */
12228 codep++;
12229 vex.w = *codep & 0x80;
12230 if (vex.w && address_mode == mode_64bit)
12231 rex |= REX_W;
12232
12233 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12234 if (address_mode != mode_64bit)
12235 {
12236 /* In 16/32-bit mode silently ignore following bits. */
12237 rex &= ~REX_B;
12238 vex.r = 1;
12239 vex.v = 1;
12240 vex.register_specifier &= 0x7;
12241 }
12242
12243 /* The U bit. */
12244 if (!(*codep & 0x4))
12245 return &bad_opcode;
12246
12247 switch ((*codep & 0x3))
12248 {
12249 case 0:
12250 vex.prefix = 0;
12251 break;
12252 case 1:
12253 vex.prefix = DATA_PREFIX_OPCODE;
12254 break;
12255 case 2:
12256 vex.prefix = REPE_PREFIX_OPCODE;
12257 break;
12258 case 3:
12259 vex.prefix = REPNE_PREFIX_OPCODE;
12260 break;
12261 }
12262
12263 /* The third byte after 0x62. */
12264 codep++;
12265
12266 /* Remember the static rounding bits. */
12267 vex.ll = (*codep >> 5) & 3;
12268 vex.b = (*codep & 0x10) != 0;
12269
12270 vex.v = *codep & 0x8;
12271 vex.mask_register_specifier = *codep & 0x7;
12272 vex.zeroing = *codep & 0x80;
12273
12274 need_vex = 1;
12275 need_vex_reg = 1;
12276 codep++;
12277 vindex = *codep++;
12278 dp = &evex_table[vex_table_index][vindex];
12279 FETCH_DATA (info, codep + 1);
12280 modrm.mod = (*codep >> 6) & 3;
12281 modrm.reg = (*codep >> 3) & 7;
12282 modrm.rm = *codep & 7;
12283
12284 /* Set vector length. */
12285 if (modrm.mod == 3 && vex.b)
12286 vex.length = 512;
12287 else
12288 {
12289 switch (vex.ll)
12290 {
12291 case 0x0:
12292 vex.length = 128;
12293 break;
12294 case 0x1:
12295 vex.length = 256;
12296 break;
12297 case 0x2:
12298 vex.length = 512;
12299 break;
12300 default:
12301 return &bad_opcode;
12302 }
12303 }
12304 break;
12305
592d1631
L
12306 case 0:
12307 dp = &bad_opcode;
12308 break;
12309
b844680a 12310 default:
d34b5006 12311 abort ();
b844680a
L
12312 }
12313
12314 if (dp->name != NULL)
12315 return dp;
12316 else
8bb15339 12317 return get_valid_dis386 (dp, info);
b844680a
L
12318}
12319
dfc8cf43 12320static void
55cf16e1 12321get_sib (disassemble_info *info, int sizeflag)
dfc8cf43
L
12322{
12323 /* If modrm.mod == 3, operand must be register. */
12324 if (need_modrm
55cf16e1 12325 && ((sizeflag & AFLAG) || address_mode == mode_64bit)
dfc8cf43
L
12326 && modrm.mod != 3
12327 && modrm.rm == 4)
12328 {
12329 FETCH_DATA (info, codep + 2);
12330 sib.index = (codep [1] >> 3) & 7;
12331 sib.scale = (codep [1] >> 6) & 3;
12332 sib.base = codep [1] & 7;
12333 }
12334}
12335
e396998b 12336static int
26ca5450 12337print_insn (bfd_vma pc, disassemble_info *info)
252b5132 12338{
2da11e11 12339 const struct dis386 *dp;
252b5132 12340 int i;
ce518a5f 12341 char *op_txt[MAX_OPERANDS];
252b5132 12342 int needcomma;
e396998b
AM
12343 int sizeflag;
12344 const char *p;
252b5132 12345 struct dis_private priv;
f16cd0d5
L
12346 int prefix_length;
12347 int default_prefixes;
252b5132 12348
d7921315
L
12349 priv.orig_sizeflag = AFLAG | DFLAG;
12350 if ((info->mach & bfd_mach_i386_i386) != 0)
cb712a9e 12351 address_mode = mode_32bit;
2da11e11 12352 else if (info->mach == bfd_mach_i386_i8086)
d7921315
L
12353 {
12354 address_mode = mode_16bit;
12355 priv.orig_sizeflag = 0;
12356 }
2da11e11 12357 else
d7921315
L
12358 address_mode = mode_64bit;
12359
12360 if (intel_syntax == (char) -1)
12361 intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
e396998b
AM
12362
12363 for (p = info->disassembler_options; p != NULL; )
12364 {
0112cd26 12365 if (CONST_STRNEQ (p, "x86-64"))
e396998b 12366 {
cb712a9e 12367 address_mode = mode_64bit;
e396998b
AM
12368 priv.orig_sizeflag = AFLAG | DFLAG;
12369 }
0112cd26 12370 else if (CONST_STRNEQ (p, "i386"))
e396998b 12371 {
cb712a9e 12372 address_mode = mode_32bit;
e396998b
AM
12373 priv.orig_sizeflag = AFLAG | DFLAG;
12374 }
0112cd26 12375 else if (CONST_STRNEQ (p, "i8086"))
e396998b 12376 {
cb712a9e 12377 address_mode = mode_16bit;
e396998b
AM
12378 priv.orig_sizeflag = 0;
12379 }
0112cd26 12380 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
12381 {
12382 intel_syntax = 1;
9d141669
L
12383 if (CONST_STRNEQ (p + 5, "-mnemonic"))
12384 intel_mnemonic = 1;
e396998b 12385 }
0112cd26 12386 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
12387 {
12388 intel_syntax = 0;
9d141669
L
12389 if (CONST_STRNEQ (p + 3, "-mnemonic"))
12390 intel_mnemonic = 0;
e396998b 12391 }
0112cd26 12392 else if (CONST_STRNEQ (p, "addr"))
e396998b 12393 {
f59a29b9
L
12394 if (address_mode == mode_64bit)
12395 {
12396 if (p[4] == '3' && p[5] == '2')
12397 priv.orig_sizeflag &= ~AFLAG;
12398 else if (p[4] == '6' && p[5] == '4')
12399 priv.orig_sizeflag |= AFLAG;
12400 }
12401 else
12402 {
12403 if (p[4] == '1' && p[5] == '6')
12404 priv.orig_sizeflag &= ~AFLAG;
12405 else if (p[4] == '3' && p[5] == '2')
12406 priv.orig_sizeflag |= AFLAG;
12407 }
e396998b 12408 }
0112cd26 12409 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
12410 {
12411 if (p[4] == '1' && p[5] == '6')
12412 priv.orig_sizeflag &= ~DFLAG;
12413 else if (p[4] == '3' && p[5] == '2')
12414 priv.orig_sizeflag |= DFLAG;
12415 }
0112cd26 12416 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
12417 priv.orig_sizeflag |= SUFFIX_ALWAYS;
12418
12419 p = strchr (p, ',');
12420 if (p != NULL)
12421 p++;
12422 }
12423
12424 if (intel_syntax)
12425 {
12426 names64 = intel_names64;
12427 names32 = intel_names32;
12428 names16 = intel_names16;
12429 names8 = intel_names8;
12430 names8rex = intel_names8rex;
12431 names_seg = intel_names_seg;
b9733481 12432 names_mm = intel_names_mm;
7e8b059b 12433 names_bnd = intel_names_bnd;
b9733481
L
12434 names_xmm = intel_names_xmm;
12435 names_ymm = intel_names_ymm;
43234a1e 12436 names_zmm = intel_names_zmm;
db51cc60
L
12437 index64 = intel_index64;
12438 index32 = intel_index32;
43234a1e 12439 names_mask = intel_names_mask;
e396998b
AM
12440 index16 = intel_index16;
12441 open_char = '[';
12442 close_char = ']';
12443 separator_char = '+';
12444 scale_char = '*';
12445 }
12446 else
12447 {
12448 names64 = att_names64;
12449 names32 = att_names32;
12450 names16 = att_names16;
12451 names8 = att_names8;
12452 names8rex = att_names8rex;
12453 names_seg = att_names_seg;
b9733481 12454 names_mm = att_names_mm;
7e8b059b 12455 names_bnd = att_names_bnd;
b9733481
L
12456 names_xmm = att_names_xmm;
12457 names_ymm = att_names_ymm;
43234a1e 12458 names_zmm = att_names_zmm;
db51cc60
L
12459 index64 = att_index64;
12460 index32 = att_index32;
43234a1e 12461 names_mask = att_names_mask;
e396998b
AM
12462 index16 = att_index16;
12463 open_char = '(';
12464 close_char = ')';
12465 separator_char = ',';
12466 scale_char = ',';
12467 }
2da11e11 12468
4fe53c98 12469 /* The output looks better if we put 7 bytes on a line, since that
8a9036a4
L
12470 puts most long word instructions on a single line. Use 8 bytes
12471 for Intel L1OM. */
d7921315 12472 if ((info->mach & bfd_mach_l1om) != 0)
8a9036a4
L
12473 info->bytes_per_line = 8;
12474 else
12475 info->bytes_per_line = 7;
252b5132 12476
26ca5450 12477 info->private_data = &priv;
252b5132
RH
12478 priv.max_fetched = priv.the_buffer;
12479 priv.insn_start = pc;
252b5132
RH
12480
12481 obuf[0] = 0;
ce518a5f
L
12482 for (i = 0; i < MAX_OPERANDS; ++i)
12483 {
12484 op_out[i][0] = 0;
12485 op_index[i] = -1;
12486 }
252b5132
RH
12487
12488 the_info = info;
12489 start_pc = pc;
e396998b
AM
12490 start_codep = priv.the_buffer;
12491 codep = priv.the_buffer;
252b5132 12492
5076851f
ILT
12493 if (setjmp (priv.bailout) != 0)
12494 {
7d421014
ILT
12495 const char *name;
12496
5076851f 12497 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
12498 means we have an incomplete instruction of some sort. Just
12499 print the first byte as a prefix or a .byte pseudo-op. */
12500 if (codep > priv.the_buffer)
5076851f 12501 {
e396998b 12502 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
12503 if (name != NULL)
12504 (*info->fprintf_func) (info->stream, "%s", name);
12505 else
5076851f 12506 {
7d421014
ILT
12507 /* Just print the first byte as a .byte instruction. */
12508 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 12509 (unsigned int) priv.the_buffer[0]);
5076851f 12510 }
5076851f 12511
7d421014 12512 return 1;
5076851f
ILT
12513 }
12514
12515 return -1;
12516 }
12517
52b15da3 12518 obufp = obuf;
f16cd0d5
L
12519 sizeflag = priv.orig_sizeflag;
12520
12521 if (!ckprefix () || rex_used)
12522 {
12523 /* Too many prefixes or unused REX prefixes. */
12524 for (i = 0;
f6dd4781 12525 i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
f16cd0d5 12526 i++)
de882298 12527 (*info->fprintf_func) (info->stream, "%s%s",
6c067bbb 12528 i == 0 ? "" : " ",
f16cd0d5 12529 prefix_name (all_prefixes[i], sizeflag));
de882298 12530 return i;
f16cd0d5 12531 }
252b5132
RH
12532
12533 insn_codep = codep;
12534
12535 FETCH_DATA (info, codep + 1);
12536 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
12537
3e7d61b2 12538 if (((prefixes & PREFIX_FWAIT)
f16cd0d5 12539 && ((*codep < 0xd8) || (*codep > 0xdf))))
252b5132 12540 {
f16cd0d5 12541 (*info->fprintf_func) (info->stream, "fwait");
7d421014 12542 return 1;
252b5132
RH
12543 }
12544
252b5132
RH
12545 if (*codep == 0x0f)
12546 {
eec0f4ca 12547 unsigned char threebyte;
252b5132 12548 FETCH_DATA (info, codep + 2);
eec0f4ca
L
12549 threebyte = *++codep;
12550 dp = &dis386_twobyte[threebyte];
252b5132 12551 need_modrm = twobyte_has_modrm[*codep];
eec0f4ca 12552 codep++;
252b5132
RH
12553 }
12554 else
12555 {
6439fc28 12556 dp = &dis386[*codep];
252b5132 12557 need_modrm = onebyte_has_modrm[*codep];
eec0f4ca 12558 codep++;
252b5132 12559 }
246c51aa 12560
b844680a 12561 if ((prefixes & PREFIX_REPZ))
f16cd0d5 12562 used_prefixes |= PREFIX_REPZ;
b844680a 12563 if ((prefixes & PREFIX_REPNZ))
f16cd0d5 12564 used_prefixes |= PREFIX_REPNZ;
b844680a 12565 if ((prefixes & PREFIX_LOCK))
f16cd0d5 12566 used_prefixes |= PREFIX_LOCK;
c608c12e 12567
f16cd0d5 12568 default_prefixes = 0;
c608c12e
AM
12569 if (prefixes & PREFIX_ADDR)
12570 {
12571 sizeflag ^= AFLAG;
ce518a5f 12572 if (dp->op[2].bytemode != loop_jcxz_mode || intel_syntax)
3ffd33cf 12573 {
cb712a9e 12574 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
f16cd0d5 12575 all_prefixes[last_addr_prefix] = ADDR32_PREFIX;
3ffd33cf 12576 else
f16cd0d5
L
12577 all_prefixes[last_addr_prefix] = ADDR16_PREFIX;
12578 default_prefixes |= PREFIX_ADDR;
3ffd33cf
AM
12579 }
12580 }
12581
b844680a 12582 if ((prefixes & PREFIX_DATA))
3ffd33cf
AM
12583 {
12584 sizeflag ^= DFLAG;
ce518a5f
L
12585 if (dp->op[2].bytemode == cond_jump_mode
12586 && dp->op[0].bytemode == v_mode
6439fc28 12587 && !intel_syntax)
3ffd33cf
AM
12588 {
12589 if (sizeflag & DFLAG)
f16cd0d5 12590 all_prefixes[last_data_prefix] = DATA32_PREFIX;
3ffd33cf 12591 else
f16cd0d5
L
12592 all_prefixes[last_data_prefix] = DATA16_PREFIX;
12593 default_prefixes |= PREFIX_DATA;
12594 }
12595 else if (rex & REX_W)
12596 {
12597 /* REX_W will override PREFIX_DATA. */
12598 default_prefixes |= PREFIX_DATA;
3ffd33cf
AM
12599 }
12600 }
12601
8bb15339 12602 if (need_modrm)
252b5132
RH
12603 {
12604 FETCH_DATA (info, codep + 1);
7967e09e
L
12605 modrm.mod = (*codep >> 6) & 3;
12606 modrm.reg = (*codep >> 3) & 7;
12607 modrm.rm = *codep & 7;
252b5132
RH
12608 }
12609
42d5f9c6
MS
12610 need_vex = 0;
12611 need_vex_reg = 0;
12612 vex_w_done = 0;
43234a1e 12613 vex.evex = 0;
55b126d4 12614
ce518a5f 12615 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132 12616 {
55cf16e1 12617 get_sib (info, sizeflag);
252b5132
RH
12618 dofloat (sizeflag);
12619 }
12620 else
12621 {
8bb15339 12622 dp = get_valid_dis386 (dp, info);
b844680a 12623 if (dp != NULL && putop (dp->name, sizeflag) == 0)
6c067bbb 12624 {
55cf16e1 12625 get_sib (info, sizeflag);
ce518a5f
L
12626 for (i = 0; i < MAX_OPERANDS; ++i)
12627 {
246c51aa 12628 obufp = op_out[i];
ce518a5f
L
12629 op_ad = MAX_OPERANDS - 1 - i;
12630 if (dp->op[i].rtn)
12631 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
43234a1e
L
12632 /* For EVEX instruction after the last operand masking
12633 should be printed. */
12634 if (i == 0 && vex.evex)
12635 {
12636 /* Don't print {%k0}. */
12637 if (vex.mask_register_specifier)
12638 {
12639 oappend ("{");
12640 oappend (names_mask[vex.mask_register_specifier]);
12641 oappend ("}");
12642 }
12643 if (vex.zeroing)
12644 oappend ("{z}");
12645 }
ce518a5f 12646 }
6439fc28 12647 }
252b5132
RH
12648 }
12649
7d421014
ILT
12650 /* See if any prefixes were not used. If so, print the first one
12651 separately. If we don't do this, we'll wind up printing an
12652 instruction stream which does not precisely correspond to the
12653 bytes we are disassembling. */
f16cd0d5 12654 if ((prefixes & ~(used_prefixes | default_prefixes)) != 0)
7d421014 12655 {
f16cd0d5
L
12656 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
12657 if (all_prefixes[i])
12658 {
12659 const char *name;
12660 name = prefix_name (all_prefixes[i], priv.orig_sizeflag);
12661 if (name == NULL)
12662 name = INTERNAL_DISASSEMBLER_ERROR;
12663 (*info->fprintf_func) (info->stream, "%s", name);
12664 return 1;
12665 }
52b15da3 12666 }
7d421014 12667
d869730d 12668 /* Check if the REX prefix is used. */
e2e6193d 12669 if (rex_ignored == 0 && (rex ^ rex_used) == 0 && last_rex_prefix >= 0)
f16cd0d5
L
12670 all_prefixes[last_rex_prefix] = 0;
12671
5e6718e4 12672 /* Check if the SEG prefix is used. */
f16cd0d5
L
12673 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
12674 | PREFIX_FS | PREFIX_GS)) != 0
12675 && (used_prefixes
12676 & seg_prefix (all_prefixes[last_seg_prefix])) != 0)
12677 all_prefixes[last_seg_prefix] = 0;
12678
5e6718e4 12679 /* Check if the ADDR prefix is used. */
f16cd0d5
L
12680 if ((prefixes & PREFIX_ADDR) != 0
12681 && (used_prefixes & PREFIX_ADDR) != 0)
12682 all_prefixes[last_addr_prefix] = 0;
12683
5e6718e4 12684 /* Check if the DATA prefix is used. */
f16cd0d5
L
12685 if ((prefixes & PREFIX_DATA) != 0
12686 && (used_prefixes & PREFIX_DATA) != 0)
12687 all_prefixes[last_data_prefix] = 0;
12688
12689 prefix_length = 0;
f310f33d 12690 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
f16cd0d5
L
12691 if (all_prefixes[i])
12692 {
12693 const char *name;
12694 name = prefix_name (all_prefixes[i], sizeflag);
12695 if (name == NULL)
12696 abort ();
12697 prefix_length += strlen (name) + 1;
12698 (*info->fprintf_func) (info->stream, "%s ", name);
12699 }
b844680a 12700
f16cd0d5
L
12701 /* Check maximum code length. */
12702 if ((codep - start_codep) > MAX_CODE_LENGTH)
12703 {
12704 (*info->fprintf_func) (info->stream, "(bad)");
12705 return MAX_CODE_LENGTH;
12706 }
b844680a 12707
ea397f5b 12708 obufp = mnemonicendp;
f16cd0d5 12709 for (i = strlen (obuf) + prefix_length; i < 6; i++)
252b5132
RH
12710 oappend (" ");
12711 oappend (" ");
12712 (*info->fprintf_func) (info->stream, "%s", obuf);
12713
12714 /* The enter and bound instructions are printed with operands in the same
12715 order as the intel book; everything else is printed in reverse order. */
2da11e11 12716 if (intel_syntax || two_source_ops)
252b5132 12717 {
185b1163
L
12718 bfd_vma riprel;
12719
ce518a5f 12720 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 12721 op_txt[i] = op_out[i];
246c51aa 12722
ce518a5f
L
12723 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
12724 {
6c067bbb
RM
12725 op_ad = op_index[i];
12726 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
12727 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
12728 riprel = op_riprel[i];
12729 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
12730 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 12731 }
252b5132
RH
12732 }
12733 else
12734 {
ce518a5f 12735 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 12736 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
12737 }
12738
ce518a5f
L
12739 needcomma = 0;
12740 for (i = 0; i < MAX_OPERANDS; ++i)
12741 if (*op_txt[i])
12742 {
12743 if (needcomma)
12744 (*info->fprintf_func) (info->stream, ",");
12745 if (op_index[i] != -1 && !op_riprel[i])
12746 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
12747 else
12748 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
12749 needcomma = 1;
12750 }
050dfa73 12751
ce518a5f 12752 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
12753 if (op_index[i] != -1 && op_riprel[i])
12754 {
12755 (*info->fprintf_func) (info->stream, " # ");
12756 (*info->print_address_func) ((bfd_vma) (start_pc + codep - start_codep
12757 + op_address[op_index[i]]), info);
185b1163 12758 break;
52b15da3 12759 }
e396998b 12760 return codep - priv.the_buffer;
252b5132
RH
12761}
12762
6439fc28 12763static const char *float_mem[] = {
252b5132 12764 /* d8 */
7c52e0e8
L
12765 "fadd{s|}",
12766 "fmul{s|}",
12767 "fcom{s|}",
12768 "fcomp{s|}",
12769 "fsub{s|}",
12770 "fsubr{s|}",
12771 "fdiv{s|}",
12772 "fdivr{s|}",
db6eb5be 12773 /* d9 */
7c52e0e8 12774 "fld{s|}",
252b5132 12775 "(bad)",
7c52e0e8
L
12776 "fst{s|}",
12777 "fstp{s|}",
9306ca4a 12778 "fldenvIC",
252b5132 12779 "fldcw",
9306ca4a 12780 "fNstenvIC",
252b5132
RH
12781 "fNstcw",
12782 /* da */
7c52e0e8
L
12783 "fiadd{l|}",
12784 "fimul{l|}",
12785 "ficom{l|}",
12786 "ficomp{l|}",
12787 "fisub{l|}",
12788 "fisubr{l|}",
12789 "fidiv{l|}",
12790 "fidivr{l|}",
252b5132 12791 /* db */
7c52e0e8
L
12792 "fild{l|}",
12793 "fisttp{l|}",
12794 "fist{l|}",
12795 "fistp{l|}",
252b5132 12796 "(bad)",
6439fc28 12797 "fld{t||t|}",
252b5132 12798 "(bad)",
6439fc28 12799 "fstp{t||t|}",
252b5132 12800 /* dc */
7c52e0e8
L
12801 "fadd{l|}",
12802 "fmul{l|}",
12803 "fcom{l|}",
12804 "fcomp{l|}",
12805 "fsub{l|}",
12806 "fsubr{l|}",
12807 "fdiv{l|}",
12808 "fdivr{l|}",
252b5132 12809 /* dd */
7c52e0e8
L
12810 "fld{l|}",
12811 "fisttp{ll|}",
12812 "fst{l||}",
12813 "fstp{l|}",
9306ca4a 12814 "frstorIC",
252b5132 12815 "(bad)",
9306ca4a 12816 "fNsaveIC",
252b5132
RH
12817 "fNstsw",
12818 /* de */
12819 "fiadd",
12820 "fimul",
12821 "ficom",
12822 "ficomp",
12823 "fisub",
12824 "fisubr",
12825 "fidiv",
12826 "fidivr",
12827 /* df */
12828 "fild",
ca164297 12829 "fisttp",
252b5132
RH
12830 "fist",
12831 "fistp",
12832 "fbld",
7c52e0e8 12833 "fild{ll|}",
252b5132 12834 "fbstp",
7c52e0e8 12835 "fistp{ll|}",
1d9f512f
AM
12836};
12837
12838static const unsigned char float_mem_mode[] = {
12839 /* d8 */
12840 d_mode,
12841 d_mode,
12842 d_mode,
12843 d_mode,
12844 d_mode,
12845 d_mode,
12846 d_mode,
12847 d_mode,
12848 /* d9 */
12849 d_mode,
12850 0,
12851 d_mode,
12852 d_mode,
12853 0,
12854 w_mode,
12855 0,
12856 w_mode,
12857 /* da */
12858 d_mode,
12859 d_mode,
12860 d_mode,
12861 d_mode,
12862 d_mode,
12863 d_mode,
12864 d_mode,
12865 d_mode,
12866 /* db */
12867 d_mode,
12868 d_mode,
12869 d_mode,
12870 d_mode,
12871 0,
9306ca4a 12872 t_mode,
1d9f512f 12873 0,
9306ca4a 12874 t_mode,
1d9f512f
AM
12875 /* dc */
12876 q_mode,
12877 q_mode,
12878 q_mode,
12879 q_mode,
12880 q_mode,
12881 q_mode,
12882 q_mode,
12883 q_mode,
12884 /* dd */
12885 q_mode,
12886 q_mode,
12887 q_mode,
12888 q_mode,
12889 0,
12890 0,
12891 0,
12892 w_mode,
12893 /* de */
12894 w_mode,
12895 w_mode,
12896 w_mode,
12897 w_mode,
12898 w_mode,
12899 w_mode,
12900 w_mode,
12901 w_mode,
12902 /* df */
12903 w_mode,
12904 w_mode,
12905 w_mode,
12906 w_mode,
9306ca4a 12907 t_mode,
1d9f512f 12908 q_mode,
9306ca4a 12909 t_mode,
1d9f512f 12910 q_mode
252b5132
RH
12911};
12912
ce518a5f
L
12913#define ST { OP_ST, 0 }
12914#define STi { OP_STi, 0 }
252b5132 12915
4efba78c
L
12916#define FGRPd9_2 NULL, { { NULL, 0 } }
12917#define FGRPd9_4 NULL, { { NULL, 1 } }
12918#define FGRPd9_5 NULL, { { NULL, 2 } }
12919#define FGRPd9_6 NULL, { { NULL, 3 } }
12920#define FGRPd9_7 NULL, { { NULL, 4 } }
12921#define FGRPda_5 NULL, { { NULL, 5 } }
12922#define FGRPdb_4 NULL, { { NULL, 6 } }
12923#define FGRPde_3 NULL, { { NULL, 7 } }
12924#define FGRPdf_4 NULL, { { NULL, 8 } }
252b5132 12925
2da11e11 12926static const struct dis386 float_reg[][8] = {
252b5132
RH
12927 /* d8 */
12928 {
ce518a5f
L
12929 { "fadd", { ST, STi } },
12930 { "fmul", { ST, STi } },
12931 { "fcom", { STi } },
12932 { "fcomp", { STi } },
12933 { "fsub", { ST, STi } },
12934 { "fsubr", { ST, STi } },
12935 { "fdiv", { ST, STi } },
12936 { "fdivr", { ST, STi } },
252b5132
RH
12937 },
12938 /* d9 */
12939 {
ce518a5f
L
12940 { "fld", { STi } },
12941 { "fxch", { STi } },
252b5132 12942 { FGRPd9_2 },
592d1631 12943 { Bad_Opcode },
252b5132
RH
12944 { FGRPd9_4 },
12945 { FGRPd9_5 },
12946 { FGRPd9_6 },
12947 { FGRPd9_7 },
12948 },
12949 /* da */
12950 {
ce518a5f
L
12951 { "fcmovb", { ST, STi } },
12952 { "fcmove", { ST, STi } },
12953 { "fcmovbe",{ ST, STi } },
12954 { "fcmovu", { ST, STi } },
592d1631 12955 { Bad_Opcode },
252b5132 12956 { FGRPda_5 },
592d1631
L
12957 { Bad_Opcode },
12958 { Bad_Opcode },
252b5132
RH
12959 },
12960 /* db */
12961 {
ce518a5f
L
12962 { "fcmovnb",{ ST, STi } },
12963 { "fcmovne",{ ST, STi } },
12964 { "fcmovnbe",{ ST, STi } },
12965 { "fcmovnu",{ ST, STi } },
252b5132 12966 { FGRPdb_4 },
ce518a5f
L
12967 { "fucomi", { ST, STi } },
12968 { "fcomi", { ST, STi } },
592d1631 12969 { Bad_Opcode },
252b5132
RH
12970 },
12971 /* dc */
12972 {
ce518a5f
L
12973 { "fadd", { STi, ST } },
12974 { "fmul", { STi, ST } },
592d1631
L
12975 { Bad_Opcode },
12976 { Bad_Opcode },
9d141669
L
12977 { "fsub!M", { STi, ST } },
12978 { "fsubM", { STi, ST } },
12979 { "fdiv!M", { STi, ST } },
12980 { "fdivM", { STi, ST } },
252b5132
RH
12981 },
12982 /* dd */
12983 {
ce518a5f 12984 { "ffree", { STi } },
592d1631 12985 { Bad_Opcode },
ce518a5f
L
12986 { "fst", { STi } },
12987 { "fstp", { STi } },
12988 { "fucom", { STi } },
12989 { "fucomp", { STi } },
592d1631
L
12990 { Bad_Opcode },
12991 { Bad_Opcode },
252b5132
RH
12992 },
12993 /* de */
12994 {
ce518a5f
L
12995 { "faddp", { STi, ST } },
12996 { "fmulp", { STi, ST } },
592d1631 12997 { Bad_Opcode },
252b5132 12998 { FGRPde_3 },
9d141669
L
12999 { "fsub!Mp", { STi, ST } },
13000 { "fsubMp", { STi, ST } },
13001 { "fdiv!Mp", { STi, ST } },
13002 { "fdivMp", { STi, ST } },
252b5132
RH
13003 },
13004 /* df */
13005 {
ce518a5f 13006 { "ffreep", { STi } },
592d1631
L
13007 { Bad_Opcode },
13008 { Bad_Opcode },
13009 { Bad_Opcode },
252b5132 13010 { FGRPdf_4 },
ce518a5f
L
13011 { "fucomip", { ST, STi } },
13012 { "fcomip", { ST, STi } },
592d1631 13013 { Bad_Opcode },
252b5132
RH
13014 },
13015};
13016
252b5132
RH
13017static char *fgrps[][8] = {
13018 /* d9_2 0 */
13019 {
13020 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13021 },
13022
13023 /* d9_4 1 */
13024 {
13025 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
13026 },
13027
13028 /* d9_5 2 */
13029 {
13030 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
13031 },
13032
13033 /* d9_6 3 */
13034 {
13035 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
13036 },
13037
13038 /* d9_7 4 */
13039 {
13040 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
13041 },
13042
13043 /* da_5 5 */
13044 {
13045 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13046 },
13047
13048 /* db_4 6 */
13049 {
309d3373
JB
13050 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
13051 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
252b5132
RH
13052 },
13053
13054 /* de_3 7 */
13055 {
13056 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13057 },
13058
13059 /* df_4 8 */
13060 {
13061 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13062 },
13063};
13064
b6169b20
L
13065static void
13066swap_operand (void)
13067{
13068 mnemonicendp[0] = '.';
13069 mnemonicendp[1] = 's';
13070 mnemonicendp += 2;
13071}
13072
b844680a
L
13073static void
13074OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
13075 int sizeflag ATTRIBUTE_UNUSED)
13076{
13077 /* Skip mod/rm byte. */
13078 MODRM_CHECK;
13079 codep++;
13080}
13081
252b5132 13082static void
26ca5450 13083dofloat (int sizeflag)
252b5132 13084{
2da11e11 13085 const struct dis386 *dp;
252b5132
RH
13086 unsigned char floatop;
13087
13088 floatop = codep[-1];
13089
7967e09e 13090 if (modrm.mod != 3)
252b5132 13091 {
7967e09e 13092 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
13093
13094 putop (float_mem[fp_indx], sizeflag);
ce518a5f 13095 obufp = op_out[0];
6e50d963 13096 op_ad = 2;
1d9f512f 13097 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
13098 return;
13099 }
6608db57 13100 /* Skip mod/rm byte. */
4bba6815 13101 MODRM_CHECK;
252b5132
RH
13102 codep++;
13103
7967e09e 13104 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
13105 if (dp->name == NULL)
13106 {
7967e09e 13107 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 13108
6608db57 13109 /* Instruction fnstsw is only one with strange arg. */
252b5132 13110 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 13111 strcpy (op_out[0], names16[0]);
252b5132
RH
13112 }
13113 else
13114 {
13115 putop (dp->name, sizeflag);
13116
ce518a5f 13117 obufp = op_out[0];
6e50d963 13118 op_ad = 2;
ce518a5f
L
13119 if (dp->op[0].rtn)
13120 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 13121
ce518a5f 13122 obufp = op_out[1];
6e50d963 13123 op_ad = 1;
ce518a5f
L
13124 if (dp->op[1].rtn)
13125 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
13126 }
13127}
13128
9ce09ba2
RM
13129/* Like oappend (below), but S is a string starting with '%'.
13130 In Intel syntax, the '%' is elided. */
13131static void
13132oappend_maybe_intel (const char *s)
13133{
13134 oappend (s + intel_syntax);
13135}
13136
252b5132 13137static void
26ca5450 13138OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13139{
9ce09ba2 13140 oappend_maybe_intel ("%st");
252b5132
RH
13141}
13142
252b5132 13143static void
26ca5450 13144OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13145{
7967e09e 13146 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
9ce09ba2 13147 oappend_maybe_intel (scratchbuf);
252b5132
RH
13148}
13149
6608db57 13150/* Capital letters in template are macros. */
6439fc28 13151static int
d3ce72d0 13152putop (const char *in_template, int sizeflag)
252b5132 13153{
2da11e11 13154 const char *p;
9306ca4a 13155 int alt = 0;
9d141669 13156 int cond = 1;
98b528ac
L
13157 unsigned int l = 0, len = 1;
13158 char last[4];
13159
13160#define SAVE_LAST(c) \
13161 if (l < len && l < sizeof (last)) \
13162 last[l++] = c; \
13163 else \
13164 abort ();
252b5132 13165
d3ce72d0 13166 for (p = in_template; *p; p++)
252b5132
RH
13167 {
13168 switch (*p)
13169 {
13170 default:
13171 *obufp++ = *p;
13172 break;
98b528ac
L
13173 case '%':
13174 len++;
13175 break;
9d141669
L
13176 case '!':
13177 cond = 0;
13178 break;
6439fc28
AM
13179 case '{':
13180 alt = 0;
13181 if (intel_syntax)
6439fc28
AM
13182 {
13183 while (*++p != '|')
7c52e0e8
L
13184 if (*p == '}' || *p == '\0')
13185 abort ();
6439fc28 13186 }
9306ca4a
JB
13187 /* Fall through. */
13188 case 'I':
13189 alt = 1;
13190 continue;
6439fc28
AM
13191 case '|':
13192 while (*++p != '}')
13193 {
13194 if (*p == '\0')
13195 abort ();
13196 }
13197 break;
13198 case '}':
13199 break;
252b5132 13200 case 'A':
db6eb5be
AM
13201 if (intel_syntax)
13202 break;
7967e09e 13203 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
13204 *obufp++ = 'b';
13205 break;
13206 case 'B':
4b06377f
L
13207 if (l == 0 && len == 1)
13208 {
13209case_B:
13210 if (intel_syntax)
13211 break;
13212 if (sizeflag & SUFFIX_ALWAYS)
13213 *obufp++ = 'b';
13214 }
13215 else
13216 {
13217 if (l != 1
13218 || len != 2
13219 || last[0] != 'L')
13220 {
13221 SAVE_LAST (*p);
13222 break;
13223 }
13224
13225 if (address_mode == mode_64bit
13226 && !(prefixes & PREFIX_ADDR))
13227 {
13228 *obufp++ = 'a';
13229 *obufp++ = 'b';
13230 *obufp++ = 's';
13231 }
13232
13233 goto case_B;
13234 }
252b5132 13235 break;
9306ca4a
JB
13236 case 'C':
13237 if (intel_syntax && !alt)
13238 break;
13239 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
13240 {
13241 if (sizeflag & DFLAG)
13242 *obufp++ = intel_syntax ? 'd' : 'l';
13243 else
13244 *obufp++ = intel_syntax ? 'w' : 's';
13245 used_prefixes |= (prefixes & PREFIX_DATA);
13246 }
13247 break;
ed7841b3
JB
13248 case 'D':
13249 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
13250 break;
161a04f6 13251 USED_REX (REX_W);
7967e09e 13252 if (modrm.mod == 3)
ed7841b3 13253 {
161a04f6 13254 if (rex & REX_W)
ed7841b3 13255 *obufp++ = 'q';
ed7841b3 13256 else
f16cd0d5
L
13257 {
13258 if (sizeflag & DFLAG)
13259 *obufp++ = intel_syntax ? 'd' : 'l';
13260 else
13261 *obufp++ = 'w';
13262 used_prefixes |= (prefixes & PREFIX_DATA);
13263 }
ed7841b3
JB
13264 }
13265 else
13266 *obufp++ = 'w';
13267 break;
252b5132 13268 case 'E': /* For jcxz/jecxz */
cb712a9e 13269 if (address_mode == mode_64bit)
c1a64871
JH
13270 {
13271 if (sizeflag & AFLAG)
13272 *obufp++ = 'r';
13273 else
13274 *obufp++ = 'e';
13275 }
13276 else
13277 if (sizeflag & AFLAG)
13278 *obufp++ = 'e';
3ffd33cf
AM
13279 used_prefixes |= (prefixes & PREFIX_ADDR);
13280 break;
13281 case 'F':
db6eb5be
AM
13282 if (intel_syntax)
13283 break;
e396998b 13284 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
13285 {
13286 if (sizeflag & AFLAG)
cb712a9e 13287 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 13288 else
cb712a9e 13289 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
13290 used_prefixes |= (prefixes & PREFIX_ADDR);
13291 }
252b5132 13292 break;
52fd6d94
JB
13293 case 'G':
13294 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
13295 break;
161a04f6 13296 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
13297 *obufp++ = 'l';
13298 else
13299 *obufp++ = 'w';
161a04f6 13300 if (!(rex & REX_W))
52fd6d94
JB
13301 used_prefixes |= (prefixes & PREFIX_DATA);
13302 break;
5dd0794d 13303 case 'H':
db6eb5be
AM
13304 if (intel_syntax)
13305 break;
5dd0794d
AM
13306 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
13307 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
13308 {
13309 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
13310 *obufp++ = ',';
13311 *obufp++ = 'p';
13312 if (prefixes & PREFIX_DS)
13313 *obufp++ = 't';
13314 else
13315 *obufp++ = 'n';
13316 }
13317 break;
9306ca4a
JB
13318 case 'J':
13319 if (intel_syntax)
13320 break;
13321 *obufp++ = 'l';
13322 break;
42903f7f
L
13323 case 'K':
13324 USED_REX (REX_W);
13325 if (rex & REX_W)
13326 *obufp++ = 'q';
13327 else
13328 *obufp++ = 'd';
13329 break;
6dd5059a
L
13330 case 'Z':
13331 if (intel_syntax)
13332 break;
13333 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
13334 {
13335 *obufp++ = 'q';
13336 break;
13337 }
13338 /* Fall through. */
98b528ac 13339 goto case_L;
252b5132 13340 case 'L':
98b528ac
L
13341 if (l != 0 || len != 1)
13342 {
13343 SAVE_LAST (*p);
13344 break;
13345 }
13346case_L:
db6eb5be
AM
13347 if (intel_syntax)
13348 break;
252b5132
RH
13349 if (sizeflag & SUFFIX_ALWAYS)
13350 *obufp++ = 'l';
252b5132 13351 break;
9d141669
L
13352 case 'M':
13353 if (intel_mnemonic != cond)
13354 *obufp++ = 'r';
13355 break;
252b5132
RH
13356 case 'N':
13357 if ((prefixes & PREFIX_FWAIT) == 0)
13358 *obufp++ = 'n';
7d421014
ILT
13359 else
13360 used_prefixes |= PREFIX_FWAIT;
252b5132 13361 break;
52b15da3 13362 case 'O':
161a04f6
L
13363 USED_REX (REX_W);
13364 if (rex & REX_W)
6439fc28 13365 *obufp++ = 'o';
a35ca55a
JB
13366 else if (intel_syntax && (sizeflag & DFLAG))
13367 *obufp++ = 'q';
52b15da3
JH
13368 else
13369 *obufp++ = 'd';
161a04f6 13370 if (!(rex & REX_W))
a35ca55a 13371 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 13372 break;
6439fc28 13373 case 'T':
d9e3625e
L
13374 if (!intel_syntax
13375 && address_mode == mode_64bit
7bb15c6f 13376 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
13377 {
13378 *obufp++ = 'q';
13379 break;
13380 }
6608db57 13381 /* Fall through. */
252b5132 13382 case 'P':
db6eb5be 13383 if (intel_syntax)
d9e3625e
L
13384 {
13385 if ((rex & REX_W) == 0
13386 && (prefixes & PREFIX_DATA))
13387 {
13388 if ((sizeflag & DFLAG) == 0)
13389 *obufp++ = 'w';
13390 used_prefixes |= (prefixes & PREFIX_DATA);
13391 }
13392 break;
13393 }
252b5132 13394 if ((prefixes & PREFIX_DATA)
161a04f6 13395 || (rex & REX_W)
e396998b 13396 || (sizeflag & SUFFIX_ALWAYS))
252b5132 13397 {
161a04f6
L
13398 USED_REX (REX_W);
13399 if (rex & REX_W)
52b15da3 13400 *obufp++ = 'q';
c2419411 13401 else
52b15da3
JH
13402 {
13403 if (sizeflag & DFLAG)
13404 *obufp++ = 'l';
13405 else
13406 *obufp++ = 'w';
f16cd0d5 13407 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 13408 }
252b5132
RH
13409 }
13410 break;
6439fc28 13411 case 'U':
db6eb5be
AM
13412 if (intel_syntax)
13413 break;
7bb15c6f 13414 if (address_mode == mode_64bit
6c067bbb 13415 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28 13416 {
7967e09e 13417 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 13418 *obufp++ = 'q';
6439fc28
AM
13419 break;
13420 }
6608db57 13421 /* Fall through. */
98b528ac 13422 goto case_Q;
252b5132 13423 case 'Q':
98b528ac 13424 if (l == 0 && len == 1)
252b5132 13425 {
98b528ac
L
13426case_Q:
13427 if (intel_syntax && !alt)
13428 break;
13429 USED_REX (REX_W);
13430 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 13431 {
98b528ac
L
13432 if (rex & REX_W)
13433 *obufp++ = 'q';
52b15da3 13434 else
98b528ac
L
13435 {
13436 if (sizeflag & DFLAG)
13437 *obufp++ = intel_syntax ? 'd' : 'l';
13438 else
13439 *obufp++ = 'w';
f16cd0d5 13440 used_prefixes |= (prefixes & PREFIX_DATA);
98b528ac 13441 }
52b15da3 13442 }
98b528ac
L
13443 }
13444 else
13445 {
13446 if (l != 1 || len != 2 || last[0] != 'L')
13447 {
13448 SAVE_LAST (*p);
13449 break;
13450 }
13451 if (intel_syntax
13452 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
13453 break;
13454 if ((rex & REX_W))
13455 {
13456 USED_REX (REX_W);
13457 *obufp++ = 'q';
13458 }
13459 else
13460 *obufp++ = 'l';
252b5132
RH
13461 }
13462 break;
13463 case 'R':
161a04f6
L
13464 USED_REX (REX_W);
13465 if (rex & REX_W)
a35ca55a
JB
13466 *obufp++ = 'q';
13467 else if (sizeflag & DFLAG)
c608c12e 13468 {
a35ca55a 13469 if (intel_syntax)
c608c12e 13470 *obufp++ = 'd';
c608c12e 13471 else
a35ca55a 13472 *obufp++ = 'l';
c608c12e 13473 }
252b5132 13474 else
a35ca55a
JB
13475 *obufp++ = 'w';
13476 if (intel_syntax && !p[1]
161a04f6 13477 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 13478 *obufp++ = 'e';
161a04f6 13479 if (!(rex & REX_W))
52b15da3 13480 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 13481 break;
1a114b12 13482 case 'V':
4b06377f 13483 if (l == 0 && len == 1)
1a114b12 13484 {
4b06377f
L
13485 if (intel_syntax)
13486 break;
7bb15c6f 13487 if (address_mode == mode_64bit
6c067bbb 13488 && ((sizeflag & DFLAG) || (rex & REX_W)))
4b06377f
L
13489 {
13490 if (sizeflag & SUFFIX_ALWAYS)
13491 *obufp++ = 'q';
13492 break;
13493 }
13494 }
13495 else
13496 {
13497 if (l != 1
13498 || len != 2
13499 || last[0] != 'L')
13500 {
13501 SAVE_LAST (*p);
13502 break;
13503 }
13504
13505 if (rex & REX_W)
13506 {
13507 *obufp++ = 'a';
13508 *obufp++ = 'b';
13509 *obufp++ = 's';
13510 }
1a114b12
JB
13511 }
13512 /* Fall through. */
4b06377f 13513 goto case_S;
252b5132 13514 case 'S':
4b06377f 13515 if (l == 0 && len == 1)
252b5132 13516 {
4b06377f
L
13517case_S:
13518 if (intel_syntax)
13519 break;
13520 if (sizeflag & SUFFIX_ALWAYS)
52b15da3 13521 {
4b06377f
L
13522 if (rex & REX_W)
13523 *obufp++ = 'q';
52b15da3 13524 else
4b06377f
L
13525 {
13526 if (sizeflag & DFLAG)
13527 *obufp++ = 'l';
13528 else
13529 *obufp++ = 'w';
13530 used_prefixes |= (prefixes & PREFIX_DATA);
13531 }
13532 }
13533 }
13534 else
13535 {
13536 if (l != 1
13537 || len != 2
13538 || last[0] != 'L')
13539 {
13540 SAVE_LAST (*p);
13541 break;
52b15da3 13542 }
4b06377f
L
13543
13544 if (address_mode == mode_64bit
13545 && !(prefixes & PREFIX_ADDR))
13546 {
13547 *obufp++ = 'a';
13548 *obufp++ = 'b';
13549 *obufp++ = 's';
13550 }
13551
13552 goto case_S;
252b5132 13553 }
252b5132 13554 break;
041bd2e0 13555 case 'X':
c0f3af97
L
13556 if (l != 0 || len != 1)
13557 {
13558 SAVE_LAST (*p);
13559 break;
13560 }
13561 if (need_vex && vex.prefix)
13562 {
13563 if (vex.prefix == DATA_PREFIX_OPCODE)
13564 *obufp++ = 'd';
13565 else
13566 *obufp++ = 's';
13567 }
041bd2e0 13568 else
f16cd0d5
L
13569 {
13570 if (prefixes & PREFIX_DATA)
13571 *obufp++ = 'd';
13572 else
13573 *obufp++ = 's';
13574 used_prefixes |= (prefixes & PREFIX_DATA);
13575 }
041bd2e0 13576 break;
76f227a5 13577 case 'Y':
c0f3af97 13578 if (l == 0 && len == 1)
76f227a5 13579 {
c0f3af97
L
13580 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
13581 break;
13582 if (rex & REX_W)
13583 {
13584 USED_REX (REX_W);
13585 *obufp++ = 'q';
13586 }
13587 break;
13588 }
13589 else
13590 {
13591 if (l != 1 || len != 2 || last[0] != 'X')
13592 {
13593 SAVE_LAST (*p);
13594 break;
13595 }
13596 if (!need_vex)
13597 abort ();
13598 if (intel_syntax
13599 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
13600 break;
13601 switch (vex.length)
13602 {
13603 case 128:
13604 *obufp++ = 'x';
13605 break;
13606 case 256:
13607 *obufp++ = 'y';
13608 break;
13609 default:
13610 abort ();
13611 }
76f227a5
JH
13612 }
13613 break;
252b5132 13614 case 'W':
0bfee649 13615 if (l == 0 && len == 1)
a35ca55a 13616 {
0bfee649
L
13617 /* operand size flag for cwtl, cbtw */
13618 USED_REX (REX_W);
13619 if (rex & REX_W)
13620 {
13621 if (intel_syntax)
13622 *obufp++ = 'd';
13623 else
13624 *obufp++ = 'l';
13625 }
13626 else if (sizeflag & DFLAG)
13627 *obufp++ = 'w';
a35ca55a 13628 else
0bfee649
L
13629 *obufp++ = 'b';
13630 if (!(rex & REX_W))
13631 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 13632 }
252b5132 13633 else
0bfee649 13634 {
6c30d220
L
13635 if (l != 1
13636 || len != 2
13637 || (last[0] != 'X'
13638 && last[0] != 'L'))
0bfee649
L
13639 {
13640 SAVE_LAST (*p);
13641 break;
13642 }
13643 if (!need_vex)
13644 abort ();
6c30d220
L
13645 if (last[0] == 'X')
13646 *obufp++ = vex.w ? 'd': 's';
13647 else
13648 *obufp++ = vex.w ? 'q': 'd';
0bfee649 13649 }
252b5132
RH
13650 break;
13651 }
9306ca4a 13652 alt = 0;
252b5132
RH
13653 }
13654 *obufp = 0;
ea397f5b 13655 mnemonicendp = obufp;
6439fc28 13656 return 0;
252b5132
RH
13657}
13658
13659static void
26ca5450 13660oappend (const char *s)
252b5132 13661{
ea397f5b 13662 obufp = stpcpy (obufp, s);
252b5132
RH
13663}
13664
13665static void
26ca5450 13666append_seg (void)
252b5132
RH
13667{
13668 if (prefixes & PREFIX_CS)
7d421014 13669 {
7d421014 13670 used_prefixes |= PREFIX_CS;
9ce09ba2 13671 oappend_maybe_intel ("%cs:");
7d421014 13672 }
252b5132 13673 if (prefixes & PREFIX_DS)
7d421014 13674 {
7d421014 13675 used_prefixes |= PREFIX_DS;
9ce09ba2 13676 oappend_maybe_intel ("%ds:");
7d421014 13677 }
252b5132 13678 if (prefixes & PREFIX_SS)
7d421014 13679 {
7d421014 13680 used_prefixes |= PREFIX_SS;
9ce09ba2 13681 oappend_maybe_intel ("%ss:");
7d421014 13682 }
252b5132 13683 if (prefixes & PREFIX_ES)
7d421014 13684 {
7d421014 13685 used_prefixes |= PREFIX_ES;
9ce09ba2 13686 oappend_maybe_intel ("%es:");
7d421014 13687 }
252b5132 13688 if (prefixes & PREFIX_FS)
7d421014 13689 {
7d421014 13690 used_prefixes |= PREFIX_FS;
9ce09ba2 13691 oappend_maybe_intel ("%fs:");
7d421014 13692 }
252b5132 13693 if (prefixes & PREFIX_GS)
7d421014 13694 {
7d421014 13695 used_prefixes |= PREFIX_GS;
9ce09ba2 13696 oappend_maybe_intel ("%gs:");
7d421014 13697 }
252b5132
RH
13698}
13699
13700static void
26ca5450 13701OP_indirE (int bytemode, int sizeflag)
252b5132
RH
13702{
13703 if (!intel_syntax)
13704 oappend ("*");
13705 OP_E (bytemode, sizeflag);
13706}
13707
52b15da3 13708static void
26ca5450 13709print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 13710{
cb712a9e 13711 if (address_mode == mode_64bit)
52b15da3
JH
13712 {
13713 if (hex)
13714 {
13715 char tmp[30];
13716 int i;
13717 buf[0] = '0';
13718 buf[1] = 'x';
13719 sprintf_vma (tmp, disp);
6608db57 13720 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
13721 strcpy (buf + 2, tmp + i);
13722 }
13723 else
13724 {
13725 bfd_signed_vma v = disp;
13726 char tmp[30];
13727 int i;
13728 if (v < 0)
13729 {
13730 *(buf++) = '-';
13731 v = -disp;
6608db57 13732 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
13733 if (v < 0)
13734 {
13735 strcpy (buf, "9223372036854775808");
13736 return;
13737 }
13738 }
13739 if (!v)
13740 {
13741 strcpy (buf, "0");
13742 return;
13743 }
13744
13745 i = 0;
13746 tmp[29] = 0;
13747 while (v)
13748 {
6608db57 13749 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
13750 v /= 10;
13751 i++;
13752 }
13753 strcpy (buf, tmp + 29 - i);
13754 }
13755 }
13756 else
13757 {
13758 if (hex)
13759 sprintf (buf, "0x%x", (unsigned int) disp);
13760 else
13761 sprintf (buf, "%d", (int) disp);
13762 }
13763}
13764
5d669648
L
13765/* Put DISP in BUF as signed hex number. */
13766
13767static void
13768print_displacement (char *buf, bfd_vma disp)
13769{
13770 bfd_signed_vma val = disp;
13771 char tmp[30];
13772 int i, j = 0;
13773
13774 if (val < 0)
13775 {
13776 buf[j++] = '-';
13777 val = -disp;
13778
13779 /* Check for possible overflow. */
13780 if (val < 0)
13781 {
13782 switch (address_mode)
13783 {
13784 case mode_64bit:
13785 strcpy (buf + j, "0x8000000000000000");
13786 break;
13787 case mode_32bit:
13788 strcpy (buf + j, "0x80000000");
13789 break;
13790 case mode_16bit:
13791 strcpy (buf + j, "0x8000");
13792 break;
13793 }
13794 return;
13795 }
13796 }
13797
13798 buf[j++] = '0';
13799 buf[j++] = 'x';
13800
0af1713e 13801 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
13802 for (i = 0; tmp[i] == '0'; i++)
13803 continue;
13804 if (tmp[i] == '\0')
13805 i--;
13806 strcpy (buf + j, tmp + i);
13807}
13808
3f31e633
JB
13809static void
13810intel_operand_size (int bytemode, int sizeflag)
13811{
43234a1e
L
13812 if (vex.evex
13813 && vex.b
13814 && (bytemode == x_mode
13815 || bytemode == evex_half_bcst_xmmq_mode))
13816 {
13817 if (vex.w)
13818 oappend ("QWORD PTR ");
13819 else
13820 oappend ("DWORD PTR ");
13821 return;
13822 }
3f31e633
JB
13823 switch (bytemode)
13824 {
13825 case b_mode:
b6169b20 13826 case b_swap_mode:
42903f7f 13827 case dqb_mode:
3f31e633
JB
13828 oappend ("BYTE PTR ");
13829 break;
13830 case w_mode:
13831 case dqw_mode:
13832 oappend ("WORD PTR ");
13833 break;
1a114b12 13834 case stack_v_mode:
7bb15c6f 13835 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
3f31e633
JB
13836 {
13837 oappend ("QWORD PTR ");
3f31e633
JB
13838 break;
13839 }
13840 /* FALLTHRU */
13841 case v_mode:
b6169b20 13842 case v_swap_mode:
3f31e633 13843 case dq_mode:
161a04f6
L
13844 USED_REX (REX_W);
13845 if (rex & REX_W)
3f31e633 13846 oappend ("QWORD PTR ");
3f31e633 13847 else
f16cd0d5
L
13848 {
13849 if ((sizeflag & DFLAG) || bytemode == dq_mode)
13850 oappend ("DWORD PTR ");
13851 else
13852 oappend ("WORD PTR ");
13853 used_prefixes |= (prefixes & PREFIX_DATA);
13854 }
3f31e633 13855 break;
52fd6d94 13856 case z_mode:
161a04f6 13857 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
13858 *obufp++ = 'D';
13859 oappend ("WORD PTR ");
161a04f6 13860 if (!(rex & REX_W))
52fd6d94
JB
13861 used_prefixes |= (prefixes & PREFIX_DATA);
13862 break;
34b772a6
JB
13863 case a_mode:
13864 if (sizeflag & DFLAG)
13865 oappend ("QWORD PTR ");
13866 else
13867 oappend ("DWORD PTR ");
13868 used_prefixes |= (prefixes & PREFIX_DATA);
13869 break;
3f31e633 13870 case d_mode:
539f890d
L
13871 case d_scalar_mode:
13872 case d_scalar_swap_mode:
fa99fab2 13873 case d_swap_mode:
42903f7f 13874 case dqd_mode:
3f31e633
JB
13875 oappend ("DWORD PTR ");
13876 break;
13877 case q_mode:
539f890d
L
13878 case q_scalar_mode:
13879 case q_scalar_swap_mode:
b6169b20 13880 case q_swap_mode:
3f31e633
JB
13881 oappend ("QWORD PTR ");
13882 break;
13883 case m_mode:
cb712a9e 13884 if (address_mode == mode_64bit)
3f31e633
JB
13885 oappend ("QWORD PTR ");
13886 else
13887 oappend ("DWORD PTR ");
13888 break;
13889 case f_mode:
13890 if (sizeflag & DFLAG)
13891 oappend ("FWORD PTR ");
13892 else
13893 oappend ("DWORD PTR ");
13894 used_prefixes |= (prefixes & PREFIX_DATA);
13895 break;
13896 case t_mode:
13897 oappend ("TBYTE PTR ");
13898 break;
13899 case x_mode:
b6169b20 13900 case x_swap_mode:
43234a1e
L
13901 case evex_x_gscat_mode:
13902 case evex_x_nobcst_mode:
c0f3af97
L
13903 if (need_vex)
13904 {
13905 switch (vex.length)
13906 {
13907 case 128:
13908 oappend ("XMMWORD PTR ");
13909 break;
13910 case 256:
13911 oappend ("YMMWORD PTR ");
13912 break;
43234a1e
L
13913 case 512:
13914 oappend ("ZMMWORD PTR ");
13915 break;
c0f3af97
L
13916 default:
13917 abort ();
13918 }
13919 }
13920 else
13921 oappend ("XMMWORD PTR ");
13922 break;
13923 case xmm_mode:
3f31e633
JB
13924 oappend ("XMMWORD PTR ");
13925 break;
43234a1e
L
13926 case ymm_mode:
13927 oappend ("YMMWORD PTR ");
13928 break;
c0f3af97 13929 case xmmq_mode:
43234a1e 13930 case evex_half_bcst_xmmq_mode:
c0f3af97
L
13931 if (!need_vex)
13932 abort ();
13933
13934 switch (vex.length)
13935 {
13936 case 128:
13937 oappend ("QWORD PTR ");
13938 break;
13939 case 256:
13940 oappend ("XMMWORD PTR ");
13941 break;
43234a1e
L
13942 case 512:
13943 oappend ("YMMWORD PTR ");
13944 break;
c0f3af97
L
13945 default:
13946 abort ();
13947 }
13948 break;
6c30d220
L
13949 case xmm_mb_mode:
13950 if (!need_vex)
13951 abort ();
13952
13953 switch (vex.length)
13954 {
13955 case 128:
13956 case 256:
43234a1e 13957 case 512:
6c30d220
L
13958 oappend ("BYTE PTR ");
13959 break;
13960 default:
13961 abort ();
13962 }
13963 break;
13964 case xmm_mw_mode:
13965 if (!need_vex)
13966 abort ();
13967
13968 switch (vex.length)
13969 {
13970 case 128:
13971 case 256:
43234a1e 13972 case 512:
6c30d220
L
13973 oappend ("WORD PTR ");
13974 break;
13975 default:
13976 abort ();
13977 }
13978 break;
13979 case xmm_md_mode:
13980 if (!need_vex)
13981 abort ();
13982
13983 switch (vex.length)
13984 {
13985 case 128:
13986 case 256:
43234a1e 13987 case 512:
6c30d220
L
13988 oappend ("DWORD PTR ");
13989 break;
13990 default:
13991 abort ();
13992 }
13993 break;
13994 case xmm_mq_mode:
13995 if (!need_vex)
13996 abort ();
13997
13998 switch (vex.length)
13999 {
14000 case 128:
14001 case 256:
43234a1e 14002 case 512:
6c30d220
L
14003 oappend ("QWORD PTR ");
14004 break;
14005 default:
14006 abort ();
14007 }
14008 break;
14009 case xmmdw_mode:
14010 if (!need_vex)
14011 abort ();
14012
14013 switch (vex.length)
14014 {
14015 case 128:
14016 oappend ("WORD PTR ");
14017 break;
14018 case 256:
14019 oappend ("DWORD PTR ");
14020 break;
43234a1e
L
14021 case 512:
14022 oappend ("QWORD PTR ");
14023 break;
6c30d220
L
14024 default:
14025 abort ();
14026 }
14027 break;
14028 case xmmqd_mode:
14029 if (!need_vex)
14030 abort ();
14031
14032 switch (vex.length)
14033 {
14034 case 128:
14035 oappend ("DWORD PTR ");
14036 break;
14037 case 256:
14038 oappend ("QWORD PTR ");
14039 break;
43234a1e
L
14040 case 512:
14041 oappend ("XMMWORD PTR ");
14042 break;
6c30d220
L
14043 default:
14044 abort ();
14045 }
14046 break;
c0f3af97
L
14047 case ymmq_mode:
14048 if (!need_vex)
14049 abort ();
14050
14051 switch (vex.length)
14052 {
14053 case 128:
14054 oappend ("QWORD PTR ");
14055 break;
14056 case 256:
14057 oappend ("YMMWORD PTR ");
14058 break;
43234a1e
L
14059 case 512:
14060 oappend ("ZMMWORD PTR ");
14061 break;
c0f3af97
L
14062 default:
14063 abort ();
14064 }
14065 break;
6c30d220
L
14066 case ymmxmm_mode:
14067 if (!need_vex)
14068 abort ();
14069
14070 switch (vex.length)
14071 {
14072 case 128:
14073 case 256:
14074 oappend ("XMMWORD PTR ");
14075 break;
14076 default:
14077 abort ();
14078 }
14079 break;
fb9c77c7
L
14080 case o_mode:
14081 oappend ("OWORD PTR ");
14082 break;
43234a1e 14083 case xmm_mdq_mode:
0bfee649 14084 case vex_w_dq_mode:
1c480963 14085 case vex_scalar_w_dq_mode:
0bfee649
L
14086 if (!need_vex)
14087 abort ();
14088
14089 if (vex.w)
14090 oappend ("QWORD PTR ");
14091 else
14092 oappend ("DWORD PTR ");
14093 break;
43234a1e
L
14094 case vex_vsib_d_w_dq_mode:
14095 case vex_vsib_q_w_dq_mode:
14096 if (!need_vex)
14097 abort ();
14098
14099 if (!vex.evex)
14100 {
14101 if (vex.w)
14102 oappend ("QWORD PTR ");
14103 else
14104 oappend ("DWORD PTR ");
14105 }
14106 else
14107 {
14108 if (vex.length != 512)
14109 abort ();
14110 oappend ("ZMMWORD PTR ");
14111 }
14112 break;
14113 case mask_mode:
14114 if (!need_vex)
14115 abort ();
14116 /* Currently the only instructions, which allows either mask or
14117 memory operand, are AVX512's KMOVW instructions. They need
14118 Word-sized operand. */
14119 if (vex.w || vex.length != 128)
14120 abort ();
14121 oappend ("WORD PTR ");
14122 break;
6c75cc62 14123 case v_bnd_mode:
3f31e633
JB
14124 default:
14125 break;
14126 }
14127}
14128
252b5132 14129static void
c0f3af97 14130OP_E_register (int bytemode, int sizeflag)
252b5132 14131{
c0f3af97
L
14132 int reg = modrm.rm;
14133 const char **names;
252b5132 14134
c0f3af97
L
14135 USED_REX (REX_B);
14136 if ((rex & REX_B))
14137 reg += 8;
252b5132 14138
b6169b20
L
14139 if ((sizeflag & SUFFIX_ALWAYS)
14140 && (bytemode == b_swap_mode || bytemode == v_swap_mode))
14141 swap_operand ();
14142
c0f3af97 14143 switch (bytemode)
252b5132 14144 {
c0f3af97 14145 case b_mode:
b6169b20 14146 case b_swap_mode:
c0f3af97
L
14147 USED_REX (0);
14148 if (rex)
14149 names = names8rex;
14150 else
14151 names = names8;
14152 break;
14153 case w_mode:
14154 names = names16;
14155 break;
14156 case d_mode:
14157 names = names32;
14158 break;
14159 case q_mode:
14160 names = names64;
14161 break;
14162 case m_mode:
6c75cc62 14163 case v_bnd_mode:
c0f3af97
L
14164 names = address_mode == mode_64bit ? names64 : names32;
14165 break;
7e8b059b
L
14166 case bnd_mode:
14167 names = names_bnd;
14168 break;
c0f3af97 14169 case stack_v_mode:
7bb15c6f 14170 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
252b5132 14171 {
c0f3af97 14172 names = names64;
252b5132 14173 break;
252b5132 14174 }
c0f3af97
L
14175 bytemode = v_mode;
14176 /* FALLTHRU */
14177 case v_mode:
b6169b20 14178 case v_swap_mode:
c0f3af97
L
14179 case dq_mode:
14180 case dqb_mode:
14181 case dqd_mode:
14182 case dqw_mode:
14183 USED_REX (REX_W);
14184 if (rex & REX_W)
14185 names = names64;
c0f3af97 14186 else
f16cd0d5 14187 {
7bb15c6f 14188 if ((sizeflag & DFLAG)
f16cd0d5
L
14189 || (bytemode != v_mode
14190 && bytemode != v_swap_mode))
14191 names = names32;
14192 else
14193 names = names16;
14194 used_prefixes |= (prefixes & PREFIX_DATA);
14195 }
c0f3af97 14196 break;
43234a1e
L
14197 case mask_mode:
14198 names = names_mask;
14199 break;
c0f3af97
L
14200 case 0:
14201 return;
14202 default:
14203 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
14204 return;
14205 }
c0f3af97
L
14206 oappend (names[reg]);
14207}
14208
14209static void
c1e679ec 14210OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
14211{
14212 bfd_vma disp = 0;
14213 int add = (rex & REX_B) ? 8 : 0;
14214 int riprel = 0;
43234a1e
L
14215 int shift;
14216
14217 if (vex.evex)
14218 {
14219 /* In EVEX, if operand doesn't allow broadcast, vex.b should be 0. */
14220 if (vex.b
14221 && bytemode != x_mode
14222 && bytemode != evex_half_bcst_xmmq_mode)
14223 {
14224 BadOp ();
14225 return;
14226 }
14227 switch (bytemode)
14228 {
14229 case vex_vsib_d_w_dq_mode:
eaa9d1ad 14230 case vex_vsib_q_w_dq_mode:
43234a1e
L
14231 case evex_x_gscat_mode:
14232 case xmm_mdq_mode:
14233 shift = vex.w ? 3 : 2;
14234 break;
43234a1e
L
14235 case x_mode:
14236 case evex_half_bcst_xmmq_mode:
14237 if (vex.b)
14238 {
14239 shift = vex.w ? 3 : 2;
14240 break;
14241 }
14242 /* Fall through if vex.b == 0. */
14243 case xmmqd_mode:
14244 case xmmdw_mode:
14245 case xmmq_mode:
14246 case ymmq_mode:
14247 case evex_x_nobcst_mode:
14248 case x_swap_mode:
14249 switch (vex.length)
14250 {
14251 case 128:
14252 shift = 4;
14253 break;
14254 case 256:
14255 shift = 5;
14256 break;
14257 case 512:
14258 shift = 6;
14259 break;
14260 default:
14261 abort ();
14262 }
14263 break;
14264 case ymm_mode:
14265 shift = 5;
14266 break;
14267 case xmm_mode:
14268 shift = 4;
14269 break;
14270 case xmm_mq_mode:
14271 case q_mode:
14272 case q_scalar_mode:
14273 case q_swap_mode:
14274 case q_scalar_swap_mode:
14275 shift = 3;
14276 break;
14277 case dqd_mode:
14278 case xmm_md_mode:
14279 case d_mode:
14280 case d_scalar_mode:
14281 case d_swap_mode:
14282 case d_scalar_swap_mode:
14283 shift = 2;
14284 break;
14285 case xmm_mw_mode:
14286 shift = 1;
14287 break;
14288 case xmm_mb_mode:
14289 shift = 0;
14290 break;
14291 default:
14292 abort ();
14293 }
14294 /* Make necessary corrections to shift for modes that need it.
14295 For these modes we currently have shift 4, 5 or 6 depending on
14296 vex.length (it corresponds to xmmword, ymmword or zmmword
14297 operand). We might want to make it 3, 4 or 5 (e.g. for
14298 xmmq_mode). In case of broadcast enabled the corrections
14299 aren't needed, as element size is always 32 or 64 bits. */
14300 if (bytemode == xmmq_mode
14301 || (bytemode == evex_half_bcst_xmmq_mode
14302 && !vex.b))
14303 shift -= 1;
14304 else if (bytemode == xmmqd_mode)
14305 shift -= 2;
14306 else if (bytemode == xmmdw_mode)
14307 shift -= 3;
14308 }
14309 else
14310 shift = 0;
252b5132 14311
c0f3af97 14312 USED_REX (REX_B);
3f31e633
JB
14313 if (intel_syntax)
14314 intel_operand_size (bytemode, sizeflag);
252b5132
RH
14315 append_seg ();
14316
5d669648 14317 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 14318 {
5d669648
L
14319 /* 32/64 bit address mode */
14320 int havedisp;
252b5132
RH
14321 int havesib;
14322 int havebase;
0f7da397 14323 int haveindex;
20afcfb7 14324 int needindex;
82c18208 14325 int base, rbase;
91d6fa6a 14326 int vindex = 0;
252b5132 14327 int scale = 0;
7e8b059b
L
14328 int addr32flag = !((sizeflag & AFLAG)
14329 || bytemode == v_bnd_mode
14330 || bytemode == bnd_mode);
6c30d220
L
14331 const char **indexes64 = names64;
14332 const char **indexes32 = names32;
252b5132
RH
14333
14334 havesib = 0;
14335 havebase = 1;
0f7da397 14336 haveindex = 0;
7967e09e 14337 base = modrm.rm;
252b5132
RH
14338
14339 if (base == 4)
14340 {
14341 havesib = 1;
dfc8cf43 14342 vindex = sib.index;
161a04f6
L
14343 USED_REX (REX_X);
14344 if (rex & REX_X)
91d6fa6a 14345 vindex += 8;
6c30d220
L
14346 switch (bytemode)
14347 {
14348 case vex_vsib_d_w_dq_mode:
14349 case vex_vsib_q_w_dq_mode:
14350 if (!need_vex)
14351 abort ();
43234a1e
L
14352 if (vex.evex)
14353 {
14354 if (!vex.v)
14355 vindex += 16;
14356 }
6c30d220
L
14357
14358 haveindex = 1;
14359 switch (vex.length)
14360 {
14361 case 128:
7bb15c6f 14362 indexes64 = indexes32 = names_xmm;
6c30d220
L
14363 break;
14364 case 256:
14365 if (!vex.w || bytemode == vex_vsib_q_w_dq_mode)
7bb15c6f 14366 indexes64 = indexes32 = names_ymm;
6c30d220 14367 else
7bb15c6f 14368 indexes64 = indexes32 = names_xmm;
6c30d220 14369 break;
43234a1e
L
14370 case 512:
14371 if (!vex.w || bytemode == vex_vsib_q_w_dq_mode)
14372 indexes64 = indexes32 = names_zmm;
14373 else
14374 indexes64 = indexes32 = names_ymm;
14375 break;
6c30d220
L
14376 default:
14377 abort ();
14378 }
14379 break;
14380 default:
14381 haveindex = vindex != 4;
14382 break;
14383 }
14384 scale = sib.scale;
14385 base = sib.base;
252b5132
RH
14386 codep++;
14387 }
82c18208 14388 rbase = base + add;
252b5132 14389
7967e09e 14390 switch (modrm.mod)
252b5132
RH
14391 {
14392 case 0:
82c18208 14393 if (base == 5)
252b5132
RH
14394 {
14395 havebase = 0;
cb712a9e 14396 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
14397 riprel = 1;
14398 disp = get32s ();
252b5132
RH
14399 }
14400 break;
14401 case 1:
14402 FETCH_DATA (the_info, codep + 1);
14403 disp = *codep++;
14404 if ((disp & 0x80) != 0)
14405 disp -= 0x100;
43234a1e
L
14406 if (vex.evex && shift > 0)
14407 disp <<= shift;
252b5132
RH
14408 break;
14409 case 2:
52b15da3 14410 disp = get32s ();
252b5132
RH
14411 break;
14412 }
14413
20afcfb7
L
14414 /* In 32bit mode, we need index register to tell [offset] from
14415 [eiz*1 + offset]. */
14416 needindex = (havesib
14417 && !havebase
14418 && !haveindex
14419 && address_mode == mode_32bit);
14420 havedisp = (havebase
14421 || needindex
14422 || (havesib && (haveindex || scale != 0)));
5d669648 14423
252b5132 14424 if (!intel_syntax)
82c18208 14425 if (modrm.mod != 0 || base == 5)
db6eb5be 14426 {
5d669648
L
14427 if (havedisp || riprel)
14428 print_displacement (scratchbuf, disp);
14429 else
14430 print_operand_value (scratchbuf, 1, disp);
db6eb5be 14431 oappend (scratchbuf);
52b15da3
JH
14432 if (riprel)
14433 {
14434 set_op (disp, 1);
87767711 14435 oappend (sizeflag & AFLAG ? "(%rip)" : "(%eip)");
52b15da3 14436 }
db6eb5be 14437 }
2da11e11 14438
7e8b059b
L
14439 if ((havebase || haveindex || riprel)
14440 && (bytemode != v_bnd_mode)
14441 && (bytemode != bnd_mode))
87767711
JB
14442 used_prefixes |= PREFIX_ADDR;
14443
5d669648 14444 if (havedisp || (intel_syntax && riprel))
252b5132 14445 {
252b5132 14446 *obufp++ = open_char;
52b15da3 14447 if (intel_syntax && riprel)
185b1163
L
14448 {
14449 set_op (disp, 1);
87767711 14450 oappend (sizeflag & AFLAG ? "rip" : "eip");
185b1163 14451 }
db6eb5be 14452 *obufp = '\0';
252b5132 14453 if (havebase)
7e8b059b 14454 oappend (address_mode == mode_64bit && !addr32flag
82c18208 14455 ? names64[rbase] : names32[rbase]);
252b5132
RH
14456 if (havesib)
14457 {
db51cc60
L
14458 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
14459 print index to tell base + index from base. */
14460 if (scale != 0
20afcfb7 14461 || needindex
db51cc60
L
14462 || haveindex
14463 || (havebase && base != ESP_REG_NUM))
252b5132 14464 {
9306ca4a 14465 if (!intel_syntax || havebase)
db6eb5be 14466 {
9306ca4a
JB
14467 *obufp++ = separator_char;
14468 *obufp = '\0';
db6eb5be 14469 }
db51cc60 14470 if (haveindex)
7e8b059b 14471 oappend (address_mode == mode_64bit && !addr32flag
6c30d220 14472 ? indexes64[vindex] : indexes32[vindex]);
db51cc60 14473 else
7e8b059b 14474 oappend (address_mode == mode_64bit && !addr32flag
db51cc60
L
14475 ? index64 : index32);
14476
db6eb5be
AM
14477 *obufp++ = scale_char;
14478 *obufp = '\0';
14479 sprintf (scratchbuf, "%d", 1 << scale);
14480 oappend (scratchbuf);
14481 }
252b5132 14482 }
185b1163 14483 if (intel_syntax
82c18208 14484 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 14485 {
db51cc60 14486 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
14487 {
14488 *obufp++ = '+';
14489 *obufp = '\0';
14490 }
05203043 14491 else if (modrm.mod != 1 && disp != -disp)
3d456fa1
JB
14492 {
14493 *obufp++ = '-';
14494 *obufp = '\0';
14495 disp = - (bfd_signed_vma) disp;
14496 }
14497
db51cc60
L
14498 if (havedisp)
14499 print_displacement (scratchbuf, disp);
14500 else
14501 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
14502 oappend (scratchbuf);
14503 }
252b5132
RH
14504
14505 *obufp++ = close_char;
db6eb5be 14506 *obufp = '\0';
252b5132
RH
14507 }
14508 else if (intel_syntax)
db6eb5be 14509 {
82c18208 14510 if (modrm.mod != 0 || base == 5)
db6eb5be 14511 {
252b5132
RH
14512 if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
14513 | PREFIX_ES | PREFIX_FS | PREFIX_GS))
14514 ;
14515 else
14516 {
d708bcba 14517 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
14518 oappend (":");
14519 }
52b15da3 14520 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
14521 oappend (scratchbuf);
14522 }
14523 }
252b5132
RH
14524 }
14525 else
f16cd0d5
L
14526 {
14527 /* 16 bit address mode */
14528 used_prefixes |= prefixes & PREFIX_ADDR;
7967e09e 14529 switch (modrm.mod)
252b5132
RH
14530 {
14531 case 0:
7967e09e 14532 if (modrm.rm == 6)
252b5132
RH
14533 {
14534 disp = get16 ();
14535 if ((disp & 0x8000) != 0)
14536 disp -= 0x10000;
14537 }
14538 break;
14539 case 1:
14540 FETCH_DATA (the_info, codep + 1);
14541 disp = *codep++;
14542 if ((disp & 0x80) != 0)
14543 disp -= 0x100;
14544 break;
14545 case 2:
14546 disp = get16 ();
14547 if ((disp & 0x8000) != 0)
14548 disp -= 0x10000;
14549 break;
14550 }
14551
14552 if (!intel_syntax)
7967e09e 14553 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 14554 {
5d669648 14555 print_displacement (scratchbuf, disp);
db6eb5be
AM
14556 oappend (scratchbuf);
14557 }
252b5132 14558
7967e09e 14559 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
14560 {
14561 *obufp++ = open_char;
db6eb5be 14562 *obufp = '\0';
7967e09e 14563 oappend (index16[modrm.rm]);
5d669648
L
14564 if (intel_syntax
14565 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 14566 {
5d669648 14567 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
14568 {
14569 *obufp++ = '+';
14570 *obufp = '\0';
14571 }
7967e09e 14572 else if (modrm.mod != 1)
3d456fa1
JB
14573 {
14574 *obufp++ = '-';
14575 *obufp = '\0';
14576 disp = - (bfd_signed_vma) disp;
14577 }
14578
5d669648 14579 print_displacement (scratchbuf, disp);
3d456fa1
JB
14580 oappend (scratchbuf);
14581 }
14582
db6eb5be
AM
14583 *obufp++ = close_char;
14584 *obufp = '\0';
252b5132 14585 }
3d456fa1
JB
14586 else if (intel_syntax)
14587 {
14588 if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
14589 | PREFIX_ES | PREFIX_FS | PREFIX_GS))
14590 ;
14591 else
14592 {
14593 oappend (names_seg[ds_reg - es_reg]);
14594 oappend (":");
14595 }
14596 print_operand_value (scratchbuf, 1, disp & 0xffff);
14597 oappend (scratchbuf);
14598 }
252b5132 14599 }
43234a1e
L
14600 if (vex.evex && vex.b
14601 && (bytemode == x_mode
14602 || bytemode == evex_half_bcst_xmmq_mode))
14603 {
14604 if (vex.w || bytemode == evex_half_bcst_xmmq_mode)
14605 oappend ("{1to8}");
14606 else
14607 oappend ("{1to16}");
14608 }
252b5132
RH
14609}
14610
c0f3af97 14611static void
8b3f93e7 14612OP_E (int bytemode, int sizeflag)
c0f3af97
L
14613{
14614 /* Skip mod/rm byte. */
14615 MODRM_CHECK;
14616 codep++;
14617
14618 if (modrm.mod == 3)
14619 OP_E_register (bytemode, sizeflag);
14620 else
c1e679ec 14621 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
14622}
14623
252b5132 14624static void
26ca5450 14625OP_G (int bytemode, int sizeflag)
252b5132 14626{
52b15da3 14627 int add = 0;
161a04f6
L
14628 USED_REX (REX_R);
14629 if (rex & REX_R)
52b15da3 14630 add += 8;
252b5132
RH
14631 switch (bytemode)
14632 {
14633 case b_mode:
52b15da3
JH
14634 USED_REX (0);
14635 if (rex)
7967e09e 14636 oappend (names8rex[modrm.reg + add]);
52b15da3 14637 else
7967e09e 14638 oappend (names8[modrm.reg + add]);
252b5132
RH
14639 break;
14640 case w_mode:
7967e09e 14641 oappend (names16[modrm.reg + add]);
252b5132
RH
14642 break;
14643 case d_mode:
7967e09e 14644 oappend (names32[modrm.reg + add]);
52b15da3
JH
14645 break;
14646 case q_mode:
7967e09e 14647 oappend (names64[modrm.reg + add]);
252b5132 14648 break;
7e8b059b
L
14649 case bnd_mode:
14650 oappend (names_bnd[modrm.reg]);
14651 break;
252b5132 14652 case v_mode:
9306ca4a 14653 case dq_mode:
42903f7f
L
14654 case dqb_mode:
14655 case dqd_mode:
9306ca4a 14656 case dqw_mode:
161a04f6
L
14657 USED_REX (REX_W);
14658 if (rex & REX_W)
7967e09e 14659 oappend (names64[modrm.reg + add]);
252b5132 14660 else
f16cd0d5
L
14661 {
14662 if ((sizeflag & DFLAG) || bytemode != v_mode)
14663 oappend (names32[modrm.reg + add]);
14664 else
14665 oappend (names16[modrm.reg + add]);
14666 used_prefixes |= (prefixes & PREFIX_DATA);
14667 }
252b5132 14668 break;
90700ea2 14669 case m_mode:
cb712a9e 14670 if (address_mode == mode_64bit)
7967e09e 14671 oappend (names64[modrm.reg + add]);
90700ea2 14672 else
7967e09e 14673 oappend (names32[modrm.reg + add]);
90700ea2 14674 break;
43234a1e
L
14675 case mask_mode:
14676 oappend (names_mask[modrm.reg + add]);
14677 break;
252b5132
RH
14678 default:
14679 oappend (INTERNAL_DISASSEMBLER_ERROR);
14680 break;
14681 }
14682}
14683
52b15da3 14684static bfd_vma
26ca5450 14685get64 (void)
52b15da3 14686{
5dd0794d 14687 bfd_vma x;
52b15da3 14688#ifdef BFD64
5dd0794d
AM
14689 unsigned int a;
14690 unsigned int b;
14691
52b15da3
JH
14692 FETCH_DATA (the_info, codep + 8);
14693 a = *codep++ & 0xff;
14694 a |= (*codep++ & 0xff) << 8;
14695 a |= (*codep++ & 0xff) << 16;
14696 a |= (*codep++ & 0xff) << 24;
5dd0794d 14697 b = *codep++ & 0xff;
52b15da3
JH
14698 b |= (*codep++ & 0xff) << 8;
14699 b |= (*codep++ & 0xff) << 16;
14700 b |= (*codep++ & 0xff) << 24;
14701 x = a + ((bfd_vma) b << 32);
14702#else
6608db57 14703 abort ();
5dd0794d 14704 x = 0;
52b15da3
JH
14705#endif
14706 return x;
14707}
14708
14709static bfd_signed_vma
26ca5450 14710get32 (void)
252b5132 14711{
52b15da3 14712 bfd_signed_vma x = 0;
252b5132
RH
14713
14714 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
14715 x = *codep++ & (bfd_signed_vma) 0xff;
14716 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
14717 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
14718 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
14719 return x;
14720}
14721
14722static bfd_signed_vma
26ca5450 14723get32s (void)
52b15da3
JH
14724{
14725 bfd_signed_vma x = 0;
14726
14727 FETCH_DATA (the_info, codep + 4);
14728 x = *codep++ & (bfd_signed_vma) 0xff;
14729 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
14730 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
14731 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
14732
14733 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
14734
252b5132
RH
14735 return x;
14736}
14737
14738static int
26ca5450 14739get16 (void)
252b5132
RH
14740{
14741 int x = 0;
14742
14743 FETCH_DATA (the_info, codep + 2);
14744 x = *codep++ & 0xff;
14745 x |= (*codep++ & 0xff) << 8;
14746 return x;
14747}
14748
14749static void
26ca5450 14750set_op (bfd_vma op, int riprel)
252b5132
RH
14751{
14752 op_index[op_ad] = op_ad;
cb712a9e 14753 if (address_mode == mode_64bit)
7081ff04
AJ
14754 {
14755 op_address[op_ad] = op;
14756 op_riprel[op_ad] = riprel;
14757 }
14758 else
14759 {
14760 /* Mask to get a 32-bit address. */
14761 op_address[op_ad] = op & 0xffffffff;
14762 op_riprel[op_ad] = riprel & 0xffffffff;
14763 }
252b5132
RH
14764}
14765
14766static void
26ca5450 14767OP_REG (int code, int sizeflag)
252b5132 14768{
2da11e11 14769 const char *s;
9b60702d 14770 int add;
de882298
RM
14771
14772 switch (code)
14773 {
14774 case es_reg: case ss_reg: case cs_reg:
14775 case ds_reg: case fs_reg: case gs_reg:
14776 oappend (names_seg[code - es_reg]);
14777 return;
14778 }
14779
161a04f6
L
14780 USED_REX (REX_B);
14781 if (rex & REX_B)
52b15da3 14782 add = 8;
9b60702d
L
14783 else
14784 add = 0;
52b15da3
JH
14785
14786 switch (code)
14787 {
52b15da3
JH
14788 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
14789 case sp_reg: case bp_reg: case si_reg: case di_reg:
14790 s = names16[code - ax_reg + add];
14791 break;
52b15da3
JH
14792 case al_reg: case ah_reg: case cl_reg: case ch_reg:
14793 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
14794 USED_REX (0);
14795 if (rex)
14796 s = names8rex[code - al_reg + add];
14797 else
14798 s = names8[code - al_reg];
14799 break;
6439fc28
AM
14800 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
14801 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
7bb15c6f 14802 if (address_mode == mode_64bit
6c067bbb 14803 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
14804 {
14805 s = names64[code - rAX_reg + add];
14806 break;
14807 }
14808 code += eAX_reg - rAX_reg;
6608db57 14809 /* Fall through. */
52b15da3
JH
14810 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
14811 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
14812 USED_REX (REX_W);
14813 if (rex & REX_W)
52b15da3 14814 s = names64[code - eAX_reg + add];
52b15da3 14815 else
f16cd0d5
L
14816 {
14817 if (sizeflag & DFLAG)
14818 s = names32[code - eAX_reg + add];
14819 else
14820 s = names16[code - eAX_reg + add];
14821 used_prefixes |= (prefixes & PREFIX_DATA);
14822 }
52b15da3 14823 break;
52b15da3
JH
14824 default:
14825 s = INTERNAL_DISASSEMBLER_ERROR;
14826 break;
14827 }
14828 oappend (s);
14829}
14830
14831static void
26ca5450 14832OP_IMREG (int code, int sizeflag)
52b15da3
JH
14833{
14834 const char *s;
252b5132
RH
14835
14836 switch (code)
14837 {
14838 case indir_dx_reg:
d708bcba 14839 if (intel_syntax)
52fd6d94 14840 s = "dx";
d708bcba 14841 else
db6eb5be 14842 s = "(%dx)";
252b5132
RH
14843 break;
14844 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
14845 case sp_reg: case bp_reg: case si_reg: case di_reg:
14846 s = names16[code - ax_reg];
14847 break;
14848 case es_reg: case ss_reg: case cs_reg:
14849 case ds_reg: case fs_reg: case gs_reg:
14850 s = names_seg[code - es_reg];
14851 break;
14852 case al_reg: case ah_reg: case cl_reg: case ch_reg:
14853 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
52b15da3
JH
14854 USED_REX (0);
14855 if (rex)
14856 s = names8rex[code - al_reg];
14857 else
14858 s = names8[code - al_reg];
252b5132
RH
14859 break;
14860 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
14861 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
14862 USED_REX (REX_W);
14863 if (rex & REX_W)
52b15da3 14864 s = names64[code - eAX_reg];
252b5132 14865 else
f16cd0d5
L
14866 {
14867 if (sizeflag & DFLAG)
14868 s = names32[code - eAX_reg];
14869 else
14870 s = names16[code - eAX_reg];
14871 used_prefixes |= (prefixes & PREFIX_DATA);
14872 }
252b5132 14873 break;
52fd6d94 14874 case z_mode_ax_reg:
161a04f6 14875 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
14876 s = *names32;
14877 else
14878 s = *names16;
161a04f6 14879 if (!(rex & REX_W))
52fd6d94
JB
14880 used_prefixes |= (prefixes & PREFIX_DATA);
14881 break;
252b5132
RH
14882 default:
14883 s = INTERNAL_DISASSEMBLER_ERROR;
14884 break;
14885 }
14886 oappend (s);
14887}
14888
14889static void
26ca5450 14890OP_I (int bytemode, int sizeflag)
252b5132 14891{
52b15da3
JH
14892 bfd_signed_vma op;
14893 bfd_signed_vma mask = -1;
252b5132
RH
14894
14895 switch (bytemode)
14896 {
14897 case b_mode:
14898 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
14899 op = *codep++;
14900 mask = 0xff;
14901 break;
14902 case q_mode:
cb712a9e 14903 if (address_mode == mode_64bit)
6439fc28
AM
14904 {
14905 op = get32s ();
14906 break;
14907 }
6608db57 14908 /* Fall through. */
252b5132 14909 case v_mode:
161a04f6
L
14910 USED_REX (REX_W);
14911 if (rex & REX_W)
52b15da3 14912 op = get32s ();
252b5132 14913 else
52b15da3 14914 {
f16cd0d5
L
14915 if (sizeflag & DFLAG)
14916 {
14917 op = get32 ();
14918 mask = 0xffffffff;
14919 }
14920 else
14921 {
14922 op = get16 ();
14923 mask = 0xfffff;
14924 }
14925 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 14926 }
252b5132
RH
14927 break;
14928 case w_mode:
52b15da3 14929 mask = 0xfffff;
252b5132
RH
14930 op = get16 ();
14931 break;
9306ca4a
JB
14932 case const_1_mode:
14933 if (intel_syntax)
6c067bbb 14934 oappend ("1");
9306ca4a 14935 return;
252b5132
RH
14936 default:
14937 oappend (INTERNAL_DISASSEMBLER_ERROR);
14938 return;
14939 }
14940
52b15da3
JH
14941 op &= mask;
14942 scratchbuf[0] = '$';
d708bcba 14943 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 14944 oappend_maybe_intel (scratchbuf);
52b15da3
JH
14945 scratchbuf[0] = '\0';
14946}
14947
14948static void
26ca5450 14949OP_I64 (int bytemode, int sizeflag)
52b15da3
JH
14950{
14951 bfd_signed_vma op;
14952 bfd_signed_vma mask = -1;
14953
cb712a9e 14954 if (address_mode != mode_64bit)
6439fc28
AM
14955 {
14956 OP_I (bytemode, sizeflag);
14957 return;
14958 }
14959
52b15da3
JH
14960 switch (bytemode)
14961 {
14962 case b_mode:
14963 FETCH_DATA (the_info, codep + 1);
14964 op = *codep++;
14965 mask = 0xff;
14966 break;
14967 case v_mode:
161a04f6
L
14968 USED_REX (REX_W);
14969 if (rex & REX_W)
52b15da3 14970 op = get64 ();
52b15da3
JH
14971 else
14972 {
f16cd0d5
L
14973 if (sizeflag & DFLAG)
14974 {
14975 op = get32 ();
14976 mask = 0xffffffff;
14977 }
14978 else
14979 {
14980 op = get16 ();
14981 mask = 0xfffff;
14982 }
14983 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 14984 }
52b15da3
JH
14985 break;
14986 case w_mode:
14987 mask = 0xfffff;
14988 op = get16 ();
14989 break;
14990 default:
14991 oappend (INTERNAL_DISASSEMBLER_ERROR);
14992 return;
14993 }
14994
14995 op &= mask;
14996 scratchbuf[0] = '$';
d708bcba 14997 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 14998 oappend_maybe_intel (scratchbuf);
252b5132
RH
14999 scratchbuf[0] = '\0';
15000}
15001
15002static void
26ca5450 15003OP_sI (int bytemode, int sizeflag)
252b5132 15004{
52b15da3 15005 bfd_signed_vma op;
252b5132
RH
15006
15007 switch (bytemode)
15008 {
15009 case b_mode:
e3949f17 15010 case b_T_mode:
252b5132
RH
15011 FETCH_DATA (the_info, codep + 1);
15012 op = *codep++;
15013 if ((op & 0x80) != 0)
15014 op -= 0x100;
e3949f17
L
15015 if (bytemode == b_T_mode)
15016 {
15017 if (address_mode != mode_64bit
7bb15c6f 15018 || !((sizeflag & DFLAG) || (rex & REX_W)))
e3949f17 15019 {
6c067bbb
RM
15020 /* The operand-size prefix is overridden by a REX prefix. */
15021 if ((sizeflag & DFLAG) || (rex & REX_W))
e3949f17
L
15022 op &= 0xffffffff;
15023 else
15024 op &= 0xffff;
15025 }
15026 }
15027 else
15028 {
15029 if (!(rex & REX_W))
15030 {
15031 if (sizeflag & DFLAG)
15032 op &= 0xffffffff;
15033 else
15034 op &= 0xffff;
15035 }
15036 }
252b5132
RH
15037 break;
15038 case v_mode:
7bb15c6f
RM
15039 /* The operand-size prefix is overridden by a REX prefix. */
15040 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 15041 op = get32s ();
252b5132 15042 else
d9e3625e 15043 op = get16 ();
252b5132
RH
15044 break;
15045 default:
15046 oappend (INTERNAL_DISASSEMBLER_ERROR);
15047 return;
15048 }
52b15da3
JH
15049
15050 scratchbuf[0] = '$';
15051 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 15052 oappend_maybe_intel (scratchbuf);
252b5132
RH
15053}
15054
15055static void
26ca5450 15056OP_J (int bytemode, int sizeflag)
252b5132 15057{
52b15da3 15058 bfd_vma disp;
7081ff04 15059 bfd_vma mask = -1;
65ca155d 15060 bfd_vma segment = 0;
252b5132
RH
15061
15062 switch (bytemode)
15063 {
15064 case b_mode:
15065 FETCH_DATA (the_info, codep + 1);
15066 disp = *codep++;
15067 if ((disp & 0x80) != 0)
15068 disp -= 0x100;
15069 break;
15070 case v_mode:
f16cd0d5 15071 USED_REX (REX_W);
161a04f6 15072 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 15073 disp = get32s ();
252b5132
RH
15074 else
15075 {
15076 disp = get16 ();
206717e8
L
15077 if ((disp & 0x8000) != 0)
15078 disp -= 0x10000;
65ca155d
L
15079 /* In 16bit mode, address is wrapped around at 64k within
15080 the same segment. Otherwise, a data16 prefix on a jump
15081 instruction means that the pc is masked to 16 bits after
15082 the displacement is added! */
15083 mask = 0xffff;
15084 if ((prefixes & PREFIX_DATA) == 0)
15085 segment = ((start_pc + codep - start_codep)
15086 & ~((bfd_vma) 0xffff));
252b5132 15087 }
f16cd0d5
L
15088 if (!(rex & REX_W))
15089 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
15090 break;
15091 default:
15092 oappend (INTERNAL_DISASSEMBLER_ERROR);
15093 return;
15094 }
42d5f9c6 15095 disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
52b15da3
JH
15096 set_op (disp, 0);
15097 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
15098 oappend (scratchbuf);
15099}
15100
252b5132 15101static void
ed7841b3 15102OP_SEG (int bytemode, int sizeflag)
252b5132 15103{
ed7841b3 15104 if (bytemode == w_mode)
7967e09e 15105 oappend (names_seg[modrm.reg]);
ed7841b3 15106 else
7967e09e 15107 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
15108}
15109
15110static void
26ca5450 15111OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
15112{
15113 int seg, offset;
15114
c608c12e 15115 if (sizeflag & DFLAG)
252b5132 15116 {
c608c12e
AM
15117 offset = get32 ();
15118 seg = get16 ();
252b5132 15119 }
c608c12e
AM
15120 else
15121 {
15122 offset = get16 ();
15123 seg = get16 ();
15124 }
7d421014 15125 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 15126 if (intel_syntax)
3f31e633 15127 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
15128 else
15129 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 15130 oappend (scratchbuf);
252b5132
RH
15131}
15132
252b5132 15133static void
3f31e633 15134OP_OFF (int bytemode, int sizeflag)
252b5132 15135{
52b15da3 15136 bfd_vma off;
252b5132 15137
3f31e633
JB
15138 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
15139 intel_operand_size (bytemode, sizeflag);
252b5132
RH
15140 append_seg ();
15141
cb712a9e 15142 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
15143 off = get32 ();
15144 else
15145 off = get16 ();
15146
15147 if (intel_syntax)
15148 {
15149 if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
db6eb5be 15150 | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
252b5132 15151 {
d708bcba 15152 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
15153 oappend (":");
15154 }
15155 }
52b15da3
JH
15156 print_operand_value (scratchbuf, 1, off);
15157 oappend (scratchbuf);
15158}
6439fc28 15159
52b15da3 15160static void
3f31e633 15161OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
15162{
15163 bfd_vma off;
15164
539e75ad
L
15165 if (address_mode != mode_64bit
15166 || (prefixes & PREFIX_ADDR))
6439fc28
AM
15167 {
15168 OP_OFF (bytemode, sizeflag);
15169 return;
15170 }
15171
3f31e633
JB
15172 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
15173 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
15174 append_seg ();
15175
6608db57 15176 off = get64 ();
52b15da3
JH
15177
15178 if (intel_syntax)
15179 {
15180 if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
db6eb5be 15181 | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
52b15da3 15182 {
d708bcba 15183 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
15184 oappend (":");
15185 }
15186 }
15187 print_operand_value (scratchbuf, 1, off);
252b5132
RH
15188 oappend (scratchbuf);
15189}
15190
15191static void
26ca5450 15192ptr_reg (int code, int sizeflag)
252b5132 15193{
2da11e11 15194 const char *s;
d708bcba 15195
1d9f512f 15196 *obufp++ = open_char;
20f0a1fc 15197 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 15198 if (address_mode == mode_64bit)
c1a64871
JH
15199 {
15200 if (!(sizeflag & AFLAG))
db6eb5be 15201 s = names32[code - eAX_reg];
c1a64871 15202 else
db6eb5be 15203 s = names64[code - eAX_reg];
c1a64871 15204 }
52b15da3 15205 else if (sizeflag & AFLAG)
252b5132
RH
15206 s = names32[code - eAX_reg];
15207 else
15208 s = names16[code - eAX_reg];
15209 oappend (s);
1d9f512f
AM
15210 *obufp++ = close_char;
15211 *obufp = 0;
252b5132
RH
15212}
15213
15214static void
26ca5450 15215OP_ESreg (int code, int sizeflag)
252b5132 15216{
9306ca4a 15217 if (intel_syntax)
52fd6d94
JB
15218 {
15219 switch (codep[-1])
15220 {
15221 case 0x6d: /* insw/insl */
15222 intel_operand_size (z_mode, sizeflag);
15223 break;
15224 case 0xa5: /* movsw/movsl/movsq */
15225 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15226 case 0xab: /* stosw/stosl */
15227 case 0xaf: /* scasw/scasl */
15228 intel_operand_size (v_mode, sizeflag);
15229 break;
15230 default:
15231 intel_operand_size (b_mode, sizeflag);
15232 }
15233 }
9ce09ba2 15234 oappend_maybe_intel ("%es:");
252b5132
RH
15235 ptr_reg (code, sizeflag);
15236}
15237
15238static void
26ca5450 15239OP_DSreg (int code, int sizeflag)
252b5132 15240{
9306ca4a 15241 if (intel_syntax)
52fd6d94
JB
15242 {
15243 switch (codep[-1])
15244 {
15245 case 0x6f: /* outsw/outsl */
15246 intel_operand_size (z_mode, sizeflag);
15247 break;
15248 case 0xa5: /* movsw/movsl/movsq */
15249 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15250 case 0xad: /* lodsw/lodsl/lodsq */
15251 intel_operand_size (v_mode, sizeflag);
15252 break;
15253 default:
15254 intel_operand_size (b_mode, sizeflag);
15255 }
15256 }
252b5132
RH
15257 if ((prefixes
15258 & (PREFIX_CS
15259 | PREFIX_DS
15260 | PREFIX_SS
15261 | PREFIX_ES
15262 | PREFIX_FS
15263 | PREFIX_GS)) == 0)
15264 prefixes |= PREFIX_DS;
6608db57 15265 append_seg ();
252b5132
RH
15266 ptr_reg (code, sizeflag);
15267}
15268
252b5132 15269static void
26ca5450 15270OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15271{
9b60702d 15272 int add;
161a04f6 15273 if (rex & REX_R)
c4a530c5 15274 {
161a04f6 15275 USED_REX (REX_R);
c4a530c5
JB
15276 add = 8;
15277 }
cb712a9e 15278 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 15279 {
f16cd0d5 15280 all_prefixes[last_lock_prefix] = 0;
c4a530c5
JB
15281 used_prefixes |= PREFIX_LOCK;
15282 add = 8;
15283 }
9b60702d
L
15284 else
15285 add = 0;
7967e09e 15286 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
9ce09ba2 15287 oappend_maybe_intel (scratchbuf);
252b5132
RH
15288}
15289
252b5132 15290static void
26ca5450 15291OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15292{
9b60702d 15293 int add;
161a04f6
L
15294 USED_REX (REX_R);
15295 if (rex & REX_R)
52b15da3 15296 add = 8;
9b60702d
L
15297 else
15298 add = 0;
d708bcba 15299 if (intel_syntax)
7967e09e 15300 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 15301 else
7967e09e 15302 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
15303 oappend (scratchbuf);
15304}
15305
252b5132 15306static void
26ca5450 15307OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15308{
7967e09e 15309 sprintf (scratchbuf, "%%tr%d", modrm.reg);
9ce09ba2 15310 oappend_maybe_intel (scratchbuf);
252b5132
RH
15311}
15312
15313static void
6f74c397 15314OP_R (int bytemode, int sizeflag)
252b5132 15315{
7967e09e 15316 if (modrm.mod == 3)
2da11e11
AM
15317 OP_E (bytemode, sizeflag);
15318 else
6608db57 15319 BadOp ();
252b5132
RH
15320}
15321
15322static void
26ca5450 15323OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15324{
b9733481
L
15325 int reg = modrm.reg;
15326 const char **names;
15327
041bd2e0
JH
15328 used_prefixes |= (prefixes & PREFIX_DATA);
15329 if (prefixes & PREFIX_DATA)
20f0a1fc 15330 {
b9733481 15331 names = names_xmm;
161a04f6
L
15332 USED_REX (REX_R);
15333 if (rex & REX_R)
b9733481 15334 reg += 8;
20f0a1fc 15335 }
041bd2e0 15336 else
b9733481
L
15337 names = names_mm;
15338 oappend (names[reg]);
252b5132
RH
15339}
15340
c608c12e 15341static void
c0f3af97 15342OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 15343{
b9733481
L
15344 int reg = modrm.reg;
15345 const char **names;
15346
161a04f6
L
15347 USED_REX (REX_R);
15348 if (rex & REX_R)
b9733481 15349 reg += 8;
43234a1e
L
15350 if (vex.evex)
15351 {
15352 if (!vex.r)
15353 reg += 16;
15354 }
15355
539f890d
L
15356 if (need_vex
15357 && bytemode != xmm_mode
43234a1e
L
15358 && bytemode != xmmq_mode
15359 && bytemode != evex_half_bcst_xmmq_mode
15360 && bytemode != ymm_mode
539f890d 15361 && bytemode != scalar_mode)
c0f3af97
L
15362 {
15363 switch (vex.length)
15364 {
15365 case 128:
b9733481 15366 names = names_xmm;
c0f3af97
L
15367 break;
15368 case 256:
6c30d220
L
15369 if (vex.w || bytemode != vex_vsib_q_w_dq_mode)
15370 names = names_ymm;
15371 else
15372 names = names_xmm;
c0f3af97 15373 break;
43234a1e
L
15374 case 512:
15375 names = names_zmm;
15376 break;
c0f3af97
L
15377 default:
15378 abort ();
15379 }
15380 }
43234a1e
L
15381 else if (bytemode == xmmq_mode
15382 || bytemode == evex_half_bcst_xmmq_mode)
15383 {
15384 switch (vex.length)
15385 {
15386 case 128:
15387 case 256:
15388 names = names_xmm;
15389 break;
15390 case 512:
15391 names = names_ymm;
15392 break;
15393 default:
15394 abort ();
15395 }
15396 }
15397 else if (bytemode == ymm_mode)
15398 names = names_ymm;
c0f3af97 15399 else
b9733481
L
15400 names = names_xmm;
15401 oappend (names[reg]);
c608c12e
AM
15402}
15403
252b5132 15404static void
26ca5450 15405OP_EM (int bytemode, int sizeflag)
252b5132 15406{
b9733481
L
15407 int reg;
15408 const char **names;
15409
7967e09e 15410 if (modrm.mod != 3)
252b5132 15411 {
b6169b20
L
15412 if (intel_syntax
15413 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
15414 {
15415 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15416 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 15417 }
252b5132
RH
15418 OP_E (bytemode, sizeflag);
15419 return;
15420 }
15421
b6169b20
L
15422 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
15423 swap_operand ();
15424
6608db57 15425 /* Skip mod/rm byte. */
4bba6815 15426 MODRM_CHECK;
252b5132 15427 codep++;
041bd2e0 15428 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15429 reg = modrm.rm;
041bd2e0 15430 if (prefixes & PREFIX_DATA)
20f0a1fc 15431 {
b9733481 15432 names = names_xmm;
161a04f6
L
15433 USED_REX (REX_B);
15434 if (rex & REX_B)
b9733481 15435 reg += 8;
20f0a1fc 15436 }
041bd2e0 15437 else
b9733481
L
15438 names = names_mm;
15439 oappend (names[reg]);
252b5132
RH
15440}
15441
246c51aa
L
15442/* cvt* are the only instructions in sse2 which have
15443 both SSE and MMX operands and also have 0x66 prefix
15444 in their opcode. 0x66 was originally used to differentiate
15445 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
15446 cvt* separately using OP_EMC and OP_MXC */
15447static void
15448OP_EMC (int bytemode, int sizeflag)
15449{
7967e09e 15450 if (modrm.mod != 3)
4d9567e0
MM
15451 {
15452 if (intel_syntax && bytemode == v_mode)
15453 {
15454 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15455 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 15456 }
4d9567e0
MM
15457 OP_E (bytemode, sizeflag);
15458 return;
15459 }
246c51aa 15460
4d9567e0
MM
15461 /* Skip mod/rm byte. */
15462 MODRM_CHECK;
15463 codep++;
15464 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15465 oappend (names_mm[modrm.rm]);
4d9567e0
MM
15466}
15467
15468static void
15469OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15470{
15471 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15472 oappend (names_mm[modrm.reg]);
4d9567e0
MM
15473}
15474
c608c12e 15475static void
26ca5450 15476OP_EX (int bytemode, int sizeflag)
c608c12e 15477{
b9733481
L
15478 int reg;
15479 const char **names;
d6f574e0
L
15480
15481 /* Skip mod/rm byte. */
15482 MODRM_CHECK;
15483 codep++;
15484
7967e09e 15485 if (modrm.mod != 3)
c608c12e 15486 {
c1e679ec 15487 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
15488 return;
15489 }
d6f574e0 15490
b9733481 15491 reg = modrm.rm;
161a04f6
L
15492 USED_REX (REX_B);
15493 if (rex & REX_B)
b9733481 15494 reg += 8;
43234a1e
L
15495 if (vex.evex)
15496 {
15497 USED_REX (REX_X);
15498 if ((rex & REX_X))
15499 reg += 16;
15500 }
c608c12e 15501
b6169b20 15502 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
15503 && (bytemode == x_swap_mode
15504 || bytemode == d_swap_mode
7bb15c6f 15505 || bytemode == d_scalar_swap_mode
539f890d
L
15506 || bytemode == q_swap_mode
15507 || bytemode == q_scalar_swap_mode))
b6169b20
L
15508 swap_operand ();
15509
c0f3af97
L
15510 if (need_vex
15511 && bytemode != xmm_mode
6c30d220
L
15512 && bytemode != xmmdw_mode
15513 && bytemode != xmmqd_mode
15514 && bytemode != xmm_mb_mode
15515 && bytemode != xmm_mw_mode
15516 && bytemode != xmm_md_mode
15517 && bytemode != xmm_mq_mode
43234a1e 15518 && bytemode != xmm_mdq_mode
539f890d 15519 && bytemode != xmmq_mode
43234a1e
L
15520 && bytemode != evex_half_bcst_xmmq_mode
15521 && bytemode != ymm_mode
539f890d 15522 && bytemode != d_scalar_mode
7bb15c6f 15523 && bytemode != d_scalar_swap_mode
539f890d 15524 && bytemode != q_scalar_mode
1c480963
L
15525 && bytemode != q_scalar_swap_mode
15526 && bytemode != vex_scalar_w_dq_mode)
c0f3af97
L
15527 {
15528 switch (vex.length)
15529 {
15530 case 128:
b9733481 15531 names = names_xmm;
c0f3af97
L
15532 break;
15533 case 256:
b9733481 15534 names = names_ymm;
c0f3af97 15535 break;
43234a1e
L
15536 case 512:
15537 names = names_zmm;
15538 break;
c0f3af97
L
15539 default:
15540 abort ();
15541 }
15542 }
43234a1e
L
15543 else if (bytemode == xmmq_mode
15544 || bytemode == evex_half_bcst_xmmq_mode)
15545 {
15546 switch (vex.length)
15547 {
15548 case 128:
15549 case 256:
15550 names = names_xmm;
15551 break;
15552 case 512:
15553 names = names_ymm;
15554 break;
15555 default:
15556 abort ();
15557 }
15558 }
15559 else if (bytemode == ymm_mode)
15560 names = names_ymm;
c0f3af97 15561 else
b9733481
L
15562 names = names_xmm;
15563 oappend (names[reg]);
c608c12e
AM
15564}
15565
252b5132 15566static void
26ca5450 15567OP_MS (int bytemode, int sizeflag)
252b5132 15568{
7967e09e 15569 if (modrm.mod == 3)
2da11e11
AM
15570 OP_EM (bytemode, sizeflag);
15571 else
6608db57 15572 BadOp ();
252b5132
RH
15573}
15574
992aaec9 15575static void
26ca5450 15576OP_XS (int bytemode, int sizeflag)
992aaec9 15577{
7967e09e 15578 if (modrm.mod == 3)
992aaec9
AM
15579 OP_EX (bytemode, sizeflag);
15580 else
6608db57 15581 BadOp ();
992aaec9
AM
15582}
15583
cc0ec051
AM
15584static void
15585OP_M (int bytemode, int sizeflag)
15586{
7967e09e 15587 if (modrm.mod == 3)
75413a22
L
15588 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
15589 BadOp ();
cc0ec051
AM
15590 else
15591 OP_E (bytemode, sizeflag);
15592}
15593
15594static void
15595OP_0f07 (int bytemode, int sizeflag)
15596{
7967e09e 15597 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
15598 BadOp ();
15599 else
15600 OP_E (bytemode, sizeflag);
15601}
15602
46e883c5 15603/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 15604 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 15605
cc0ec051 15606static void
46e883c5 15607NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 15608{
8b38ad71
L
15609 if ((prefixes & PREFIX_DATA) != 0
15610 || (rex != 0
15611 && rex != 0x48
15612 && address_mode == mode_64bit))
46e883c5
L
15613 OP_REG (bytemode, sizeflag);
15614 else
15615 strcpy (obuf, "nop");
15616}
15617
15618static void
15619NOP_Fixup2 (int bytemode, int sizeflag)
15620{
8b38ad71
L
15621 if ((prefixes & PREFIX_DATA) != 0
15622 || (rex != 0
15623 && rex != 0x48
15624 && address_mode == mode_64bit))
46e883c5 15625 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
15626}
15627
84037f8c 15628static const char *const Suffix3DNow[] = {
252b5132
RH
15629/* 00 */ NULL, NULL, NULL, NULL,
15630/* 04 */ NULL, NULL, NULL, NULL,
15631/* 08 */ NULL, NULL, NULL, NULL,
9e525108 15632/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
15633/* 10 */ NULL, NULL, NULL, NULL,
15634/* 14 */ NULL, NULL, NULL, NULL,
15635/* 18 */ NULL, NULL, NULL, NULL,
9e525108 15636/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
15637/* 20 */ NULL, NULL, NULL, NULL,
15638/* 24 */ NULL, NULL, NULL, NULL,
15639/* 28 */ NULL, NULL, NULL, NULL,
15640/* 2C */ NULL, NULL, NULL, NULL,
15641/* 30 */ NULL, NULL, NULL, NULL,
15642/* 34 */ NULL, NULL, NULL, NULL,
15643/* 38 */ NULL, NULL, NULL, NULL,
15644/* 3C */ NULL, NULL, NULL, NULL,
15645/* 40 */ NULL, NULL, NULL, NULL,
15646/* 44 */ NULL, NULL, NULL, NULL,
15647/* 48 */ NULL, NULL, NULL, NULL,
15648/* 4C */ NULL, NULL, NULL, NULL,
15649/* 50 */ NULL, NULL, NULL, NULL,
15650/* 54 */ NULL, NULL, NULL, NULL,
15651/* 58 */ NULL, NULL, NULL, NULL,
15652/* 5C */ NULL, NULL, NULL, NULL,
15653/* 60 */ NULL, NULL, NULL, NULL,
15654/* 64 */ NULL, NULL, NULL, NULL,
15655/* 68 */ NULL, NULL, NULL, NULL,
15656/* 6C */ NULL, NULL, NULL, NULL,
15657/* 70 */ NULL, NULL, NULL, NULL,
15658/* 74 */ NULL, NULL, NULL, NULL,
15659/* 78 */ NULL, NULL, NULL, NULL,
15660/* 7C */ NULL, NULL, NULL, NULL,
15661/* 80 */ NULL, NULL, NULL, NULL,
15662/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
15663/* 88 */ NULL, NULL, "pfnacc", NULL,
15664/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
15665/* 90 */ "pfcmpge", NULL, NULL, NULL,
15666/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
15667/* 98 */ NULL, NULL, "pfsub", NULL,
15668/* 9C */ NULL, NULL, "pfadd", NULL,
15669/* A0 */ "pfcmpgt", NULL, NULL, NULL,
15670/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
15671/* A8 */ NULL, NULL, "pfsubr", NULL,
15672/* AC */ NULL, NULL, "pfacc", NULL,
15673/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 15674/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 15675/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
15676/* BC */ NULL, NULL, NULL, "pavgusb",
15677/* C0 */ NULL, NULL, NULL, NULL,
15678/* C4 */ NULL, NULL, NULL, NULL,
15679/* C8 */ NULL, NULL, NULL, NULL,
15680/* CC */ NULL, NULL, NULL, NULL,
15681/* D0 */ NULL, NULL, NULL, NULL,
15682/* D4 */ NULL, NULL, NULL, NULL,
15683/* D8 */ NULL, NULL, NULL, NULL,
15684/* DC */ NULL, NULL, NULL, NULL,
15685/* E0 */ NULL, NULL, NULL, NULL,
15686/* E4 */ NULL, NULL, NULL, NULL,
15687/* E8 */ NULL, NULL, NULL, NULL,
15688/* EC */ NULL, NULL, NULL, NULL,
15689/* F0 */ NULL, NULL, NULL, NULL,
15690/* F4 */ NULL, NULL, NULL, NULL,
15691/* F8 */ NULL, NULL, NULL, NULL,
15692/* FC */ NULL, NULL, NULL, NULL,
15693};
15694
15695static void
26ca5450 15696OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
15697{
15698 const char *mnemonic;
15699
15700 FETCH_DATA (the_info, codep + 1);
15701 /* AMD 3DNow! instructions are specified by an opcode suffix in the
15702 place where an 8-bit immediate would normally go. ie. the last
15703 byte of the instruction. */
ea397f5b 15704 obufp = mnemonicendp;
c608c12e 15705 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 15706 if (mnemonic)
2da11e11 15707 oappend (mnemonic);
252b5132
RH
15708 else
15709 {
15710 /* Since a variable sized modrm/sib chunk is between the start
15711 of the opcode (0x0f0f) and the opcode suffix, we need to do
15712 all the modrm processing first, and don't know until now that
15713 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
15714 op_out[0][0] = '\0';
15715 op_out[1][0] = '\0';
6608db57 15716 BadOp ();
252b5132 15717 }
ea397f5b 15718 mnemonicendp = obufp;
252b5132 15719}
c608c12e 15720
ea397f5b
L
15721static struct op simd_cmp_op[] =
15722{
15723 { STRING_COMMA_LEN ("eq") },
15724 { STRING_COMMA_LEN ("lt") },
15725 { STRING_COMMA_LEN ("le") },
15726 { STRING_COMMA_LEN ("unord") },
15727 { STRING_COMMA_LEN ("neq") },
15728 { STRING_COMMA_LEN ("nlt") },
15729 { STRING_COMMA_LEN ("nle") },
15730 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
15731};
15732
15733static void
ad19981d 15734CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
15735{
15736 unsigned int cmp_type;
15737
15738 FETCH_DATA (the_info, codep + 1);
15739 cmp_type = *codep++ & 0xff;
c0f3af97 15740 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 15741 {
ad19981d 15742 char suffix [3];
ea397f5b 15743 char *p = mnemonicendp - 2;
ad19981d
L
15744 suffix[0] = p[0];
15745 suffix[1] = p[1];
15746 suffix[2] = '\0';
ea397f5b
L
15747 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
15748 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
15749 }
15750 else
15751 {
ad19981d
L
15752 /* We have a reserved extension byte. Output it directly. */
15753 scratchbuf[0] = '$';
15754 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 15755 oappend_maybe_intel (scratchbuf);
ad19981d 15756 scratchbuf[0] = '\0';
c608c12e
AM
15757 }
15758}
15759
ca164297 15760static void
b844680a
L
15761OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
15762 int sizeflag ATTRIBUTE_UNUSED)
15763{
15764 /* mwait %eax,%ecx */
15765 if (!intel_syntax)
15766 {
15767 const char **names = (address_mode == mode_64bit
15768 ? names64 : names32);
15769 strcpy (op_out[0], names[0]);
15770 strcpy (op_out[1], names[1]);
15771 two_source_ops = 1;
15772 }
15773 /* Skip mod/rm byte. */
15774 MODRM_CHECK;
15775 codep++;
15776}
15777
15778static void
15779OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
15780 int sizeflag ATTRIBUTE_UNUSED)
ca164297 15781{
b844680a
L
15782 /* monitor %eax,%ecx,%edx" */
15783 if (!intel_syntax)
ca164297 15784 {
b844680a 15785 const char **op1_names;
cb712a9e
L
15786 const char **names = (address_mode == mode_64bit
15787 ? names64 : names32);
1d9f512f 15788
b844680a
L
15789 if (!(prefixes & PREFIX_ADDR))
15790 op1_names = (address_mode == mode_16bit
15791 ? names16 : names);
ca164297
L
15792 else
15793 {
b844680a 15794 /* Remove "addr16/addr32". */
f16cd0d5 15795 all_prefixes[last_addr_prefix] = 0;
b844680a
L
15796 op1_names = (address_mode != mode_32bit
15797 ? names32 : names16);
15798 used_prefixes |= PREFIX_ADDR;
ca164297 15799 }
b844680a
L
15800 strcpy (op_out[0], op1_names[0]);
15801 strcpy (op_out[1], names[1]);
15802 strcpy (op_out[2], names[2]);
15803 two_source_ops = 1;
ca164297 15804 }
b844680a
L
15805 /* Skip mod/rm byte. */
15806 MODRM_CHECK;
15807 codep++;
30123838
JB
15808}
15809
6608db57
KH
15810static void
15811BadOp (void)
2da11e11 15812{
6608db57
KH
15813 /* Throw away prefixes and 1st. opcode byte. */
15814 codep = insn_codep + 1;
2da11e11
AM
15815 oappend ("(bad)");
15816}
4cc91dba 15817
35c52694
L
15818static void
15819REP_Fixup (int bytemode, int sizeflag)
15820{
15821 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
15822 lods and stos. */
35c52694 15823 if (prefixes & PREFIX_REPZ)
f16cd0d5 15824 all_prefixes[last_repz_prefix] = REP_PREFIX;
35c52694
L
15825
15826 switch (bytemode)
15827 {
15828 case al_reg:
15829 case eAX_reg:
15830 case indir_dx_reg:
15831 OP_IMREG (bytemode, sizeflag);
15832 break;
15833 case eDI_reg:
15834 OP_ESreg (bytemode, sizeflag);
15835 break;
15836 case eSI_reg:
15837 OP_DSreg (bytemode, sizeflag);
15838 break;
15839 default:
15840 abort ();
15841 break;
15842 }
15843}
f5804c90 15844
7e8b059b
L
15845/* For BND-prefixed instructions 0xF2 prefix should be displayed as
15846 "bnd". */
15847
15848static void
15849BND_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15850{
15851 if (prefixes & PREFIX_REPNZ)
15852 all_prefixes[last_repnz_prefix] = BND_PREFIX;
15853}
15854
42164a71
L
15855/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
15856 "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
15857 */
15858
15859static void
15860HLE_Fixup1 (int bytemode, int sizeflag)
15861{
15862 if (modrm.mod != 3
15863 && (prefixes & PREFIX_LOCK) != 0)
15864 {
15865 if (prefixes & PREFIX_REPZ)
15866 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15867 if (prefixes & PREFIX_REPNZ)
15868 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15869 }
15870
15871 OP_E (bytemode, sizeflag);
15872}
15873
15874/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
15875 "xacquire"/"xrelease" for memory operand. No check for LOCK prefix.
15876 */
15877
15878static void
15879HLE_Fixup2 (int bytemode, int sizeflag)
15880{
15881 if (modrm.mod != 3)
15882 {
15883 if (prefixes & PREFIX_REPZ)
15884 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15885 if (prefixes & PREFIX_REPNZ)
15886 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15887 }
15888
15889 OP_E (bytemode, sizeflag);
15890}
15891
15892/* Similar to OP_E. But the 0xf3 prefixes should be displayed as
15893 "xrelease" for memory operand. No check for LOCK prefix. */
15894
15895static void
15896HLE_Fixup3 (int bytemode, int sizeflag)
15897{
15898 if (modrm.mod != 3
15899 && last_repz_prefix > last_repnz_prefix
15900 && (prefixes & PREFIX_REPZ) != 0)
15901 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15902
15903 OP_E (bytemode, sizeflag);
15904}
15905
f5804c90
L
15906static void
15907CMPXCHG8B_Fixup (int bytemode, int sizeflag)
15908{
161a04f6
L
15909 USED_REX (REX_W);
15910 if (rex & REX_W)
f5804c90
L
15911 {
15912 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
15913 char *p = mnemonicendp - 2;
15914 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 15915 bytemode = o_mode;
f5804c90 15916 }
42164a71
L
15917 else if ((prefixes & PREFIX_LOCK) != 0)
15918 {
15919 if (prefixes & PREFIX_REPZ)
15920 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15921 if (prefixes & PREFIX_REPNZ)
15922 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15923 }
15924
f5804c90
L
15925 OP_M (bytemode, sizeflag);
15926}
42903f7f
L
15927
15928static void
15929XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
15930{
b9733481
L
15931 const char **names;
15932
c0f3af97
L
15933 if (need_vex)
15934 {
15935 switch (vex.length)
15936 {
15937 case 128:
b9733481 15938 names = names_xmm;
c0f3af97
L
15939 break;
15940 case 256:
b9733481 15941 names = names_ymm;
c0f3af97
L
15942 break;
15943 default:
15944 abort ();
15945 }
15946 }
15947 else
b9733481
L
15948 names = names_xmm;
15949 oappend (names[reg]);
42903f7f 15950}
381d071f
L
15951
15952static void
15953CRC32_Fixup (int bytemode, int sizeflag)
15954{
15955 /* Add proper suffix to "crc32". */
ea397f5b 15956 char *p = mnemonicendp;
381d071f
L
15957
15958 switch (bytemode)
15959 {
15960 case b_mode:
20592a94 15961 if (intel_syntax)
ea397f5b 15962 goto skip;
20592a94 15963
381d071f
L
15964 *p++ = 'b';
15965 break;
15966 case v_mode:
20592a94 15967 if (intel_syntax)
ea397f5b 15968 goto skip;
20592a94 15969
381d071f
L
15970 USED_REX (REX_W);
15971 if (rex & REX_W)
15972 *p++ = 'q';
7bb15c6f 15973 else
f16cd0d5
L
15974 {
15975 if (sizeflag & DFLAG)
15976 *p++ = 'l';
15977 else
15978 *p++ = 'w';
15979 used_prefixes |= (prefixes & PREFIX_DATA);
15980 }
381d071f
L
15981 break;
15982 default:
15983 oappend (INTERNAL_DISASSEMBLER_ERROR);
15984 break;
15985 }
ea397f5b 15986 mnemonicendp = p;
381d071f
L
15987 *p = '\0';
15988
ea397f5b 15989skip:
381d071f
L
15990 if (modrm.mod == 3)
15991 {
15992 int add;
15993
15994 /* Skip mod/rm byte. */
15995 MODRM_CHECK;
15996 codep++;
15997
15998 USED_REX (REX_B);
15999 add = (rex & REX_B) ? 8 : 0;
16000 if (bytemode == b_mode)
16001 {
16002 USED_REX (0);
16003 if (rex)
16004 oappend (names8rex[modrm.rm + add]);
16005 else
16006 oappend (names8[modrm.rm + add]);
16007 }
16008 else
16009 {
16010 USED_REX (REX_W);
16011 if (rex & REX_W)
16012 oappend (names64[modrm.rm + add]);
16013 else if ((prefixes & PREFIX_DATA))
16014 oappend (names16[modrm.rm + add]);
16015 else
16016 oappend (names32[modrm.rm + add]);
16017 }
16018 }
16019 else
9344ff29 16020 OP_E (bytemode, sizeflag);
381d071f 16021}
85f10a01 16022
eacc9c89
L
16023static void
16024FXSAVE_Fixup (int bytemode, int sizeflag)
16025{
16026 /* Add proper suffix to "fxsave" and "fxrstor". */
16027 USED_REX (REX_W);
16028 if (rex & REX_W)
16029 {
16030 char *p = mnemonicendp;
16031 *p++ = '6';
16032 *p++ = '4';
16033 *p = '\0';
16034 mnemonicendp = p;
16035 }
16036 OP_M (bytemode, sizeflag);
16037}
16038
c0f3af97
L
16039/* Display the destination register operand for instructions with
16040 VEX. */
16041
16042static void
16043OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16044{
539f890d 16045 int reg;
b9733481
L
16046 const char **names;
16047
c0f3af97
L
16048 if (!need_vex)
16049 abort ();
16050
16051 if (!need_vex_reg)
16052 return;
16053
539f890d 16054 reg = vex.register_specifier;
43234a1e
L
16055 if (vex.evex)
16056 {
16057 if (!vex.v)
16058 reg += 16;
16059 }
16060
539f890d
L
16061 if (bytemode == vex_scalar_mode)
16062 {
16063 oappend (names_xmm[reg]);
16064 return;
16065 }
16066
c0f3af97
L
16067 switch (vex.length)
16068 {
16069 case 128:
16070 switch (bytemode)
16071 {
16072 case vex_mode:
16073 case vex128_mode:
6c30d220 16074 case vex_vsib_q_w_dq_mode:
cb21baef
L
16075 names = names_xmm;
16076 break;
16077 case dq_mode:
16078 if (vex.w)
16079 names = names64;
16080 else
16081 names = names32;
c0f3af97 16082 break;
43234a1e
L
16083 case mask_mode:
16084 names = names_mask;
16085 break;
c0f3af97
L
16086 default:
16087 abort ();
16088 return;
16089 }
c0f3af97
L
16090 break;
16091 case 256:
16092 switch (bytemode)
16093 {
16094 case vex_mode:
16095 case vex256_mode:
6c30d220
L
16096 names = names_ymm;
16097 break;
16098 case vex_vsib_q_w_dq_mode:
16099 names = vex.w ? names_ymm : names_xmm;
c0f3af97 16100 break;
43234a1e
L
16101 case mask_mode:
16102 names = names_mask;
16103 break;
c0f3af97
L
16104 default:
16105 abort ();
16106 return;
16107 }
c0f3af97 16108 break;
43234a1e
L
16109 case 512:
16110 names = names_zmm;
16111 break;
c0f3af97
L
16112 default:
16113 abort ();
16114 break;
16115 }
539f890d 16116 oappend (names[reg]);
c0f3af97
L
16117}
16118
922d8de8
DR
16119/* Get the VEX immediate byte without moving codep. */
16120
16121static unsigned char
ccc5981b 16122get_vex_imm8 (int sizeflag, int opnum)
922d8de8
DR
16123{
16124 int bytes_before_imm = 0;
16125
922d8de8
DR
16126 if (modrm.mod != 3)
16127 {
16128 /* There are SIB/displacement bytes. */
16129 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
6c067bbb 16130 {
922d8de8 16131 /* 32/64 bit address mode */
6c067bbb 16132 int base = modrm.rm;
922d8de8
DR
16133
16134 /* Check SIB byte. */
6c067bbb
RM
16135 if (base == 4)
16136 {
16137 FETCH_DATA (the_info, codep + 1);
16138 base = *codep & 7;
16139 /* When decoding the third source, don't increase
16140 bytes_before_imm as this has already been incremented
16141 by one in OP_E_memory while decoding the second
16142 source operand. */
16143 if (opnum == 0)
16144 bytes_before_imm++;
16145 }
16146
16147 /* Don't increase bytes_before_imm when decoding the third source,
16148 it has already been incremented by OP_E_memory while decoding
16149 the second source operand. */
16150 if (opnum == 0)
16151 {
16152 switch (modrm.mod)
16153 {
16154 case 0:
16155 /* When modrm.rm == 5 or modrm.rm == 4 and base in
16156 SIB == 5, there is a 4 byte displacement. */
16157 if (base != 5)
16158 /* No displacement. */
16159 break;
16160 case 2:
16161 /* 4 byte displacement. */
16162 bytes_before_imm += 4;
16163 break;
16164 case 1:
16165 /* 1 byte displacement. */
16166 bytes_before_imm++;
16167 break;
16168 }
16169 }
16170 }
922d8de8 16171 else
02e647f9
SP
16172 {
16173 /* 16 bit address mode */
6c067bbb
RM
16174 /* Don't increase bytes_before_imm when decoding the third source,
16175 it has already been incremented by OP_E_memory while decoding
16176 the second source operand. */
16177 if (opnum == 0)
16178 {
02e647f9
SP
16179 switch (modrm.mod)
16180 {
16181 case 0:
16182 /* When modrm.rm == 6, there is a 2 byte displacement. */
16183 if (modrm.rm != 6)
16184 /* No displacement. */
16185 break;
16186 case 2:
16187 /* 2 byte displacement. */
16188 bytes_before_imm += 2;
16189 break;
16190 case 1:
16191 /* 1 byte displacement: when decoding the third source,
16192 don't increase bytes_before_imm as this has already
16193 been incremented by one in OP_E_memory while decoding
16194 the second source operand. */
16195 if (opnum == 0)
16196 bytes_before_imm++;
ccc5981b 16197
02e647f9
SP
16198 break;
16199 }
922d8de8
DR
16200 }
16201 }
16202 }
16203
16204 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
16205 return codep [bytes_before_imm];
16206}
16207
16208static void
16209OP_EX_VexReg (int bytemode, int sizeflag, int reg)
16210{
b9733481
L
16211 const char **names;
16212
922d8de8
DR
16213 if (reg == -1 && modrm.mod != 3)
16214 {
16215 OP_E_memory (bytemode, sizeflag);
16216 return;
16217 }
16218 else
16219 {
16220 if (reg == -1)
16221 {
16222 reg = modrm.rm;
16223 USED_REX (REX_B);
16224 if (rex & REX_B)
16225 reg += 8;
16226 }
16227 else if (reg > 7 && address_mode != mode_64bit)
16228 BadOp ();
16229 }
16230
16231 switch (vex.length)
16232 {
16233 case 128:
b9733481 16234 names = names_xmm;
922d8de8
DR
16235 break;
16236 case 256:
b9733481 16237 names = names_ymm;
922d8de8
DR
16238 break;
16239 default:
16240 abort ();
16241 }
b9733481 16242 oappend (names[reg]);
922d8de8
DR
16243}
16244
a683cc34
SP
16245static void
16246OP_EX_VexImmW (int bytemode, int sizeflag)
16247{
16248 int reg = -1;
16249 static unsigned char vex_imm8;
16250
16251 if (vex_w_done == 0)
16252 {
16253 vex_w_done = 1;
16254
16255 /* Skip mod/rm byte. */
16256 MODRM_CHECK;
16257 codep++;
16258
16259 vex_imm8 = get_vex_imm8 (sizeflag, 0);
16260
16261 if (vex.w)
16262 reg = vex_imm8 >> 4;
16263
16264 OP_EX_VexReg (bytemode, sizeflag, reg);
16265 }
16266 else if (vex_w_done == 1)
16267 {
16268 vex_w_done = 2;
16269
16270 if (!vex.w)
16271 reg = vex_imm8 >> 4;
16272
16273 OP_EX_VexReg (bytemode, sizeflag, reg);
16274 }
16275 else
16276 {
16277 /* Output the imm8 directly. */
16278 scratchbuf[0] = '$';
16279 print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
9ce09ba2 16280 oappend_maybe_intel (scratchbuf);
a683cc34
SP
16281 scratchbuf[0] = '\0';
16282 codep++;
16283 }
16284}
16285
5dd85c99
SP
16286static void
16287OP_Vex_2src (int bytemode, int sizeflag)
16288{
16289 if (modrm.mod == 3)
16290 {
b9733481 16291 int reg = modrm.rm;
5dd85c99 16292 USED_REX (REX_B);
b9733481
L
16293 if (rex & REX_B)
16294 reg += 8;
16295 oappend (names_xmm[reg]);
5dd85c99
SP
16296 }
16297 else
16298 {
16299 if (intel_syntax
16300 && (bytemode == v_mode || bytemode == v_swap_mode))
16301 {
16302 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16303 used_prefixes |= (prefixes & PREFIX_DATA);
16304 }
16305 OP_E (bytemode, sizeflag);
16306 }
16307}
16308
16309static void
16310OP_Vex_2src_1 (int bytemode, int sizeflag)
16311{
16312 if (modrm.mod == 3)
16313 {
16314 /* Skip mod/rm byte. */
16315 MODRM_CHECK;
16316 codep++;
16317 }
16318
16319 if (vex.w)
b9733481 16320 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
16321 else
16322 OP_Vex_2src (bytemode, sizeflag);
16323}
16324
16325static void
16326OP_Vex_2src_2 (int bytemode, int sizeflag)
16327{
16328 if (vex.w)
16329 OP_Vex_2src (bytemode, sizeflag);
16330 else
b9733481 16331 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
16332}
16333
922d8de8
DR
16334static void
16335OP_EX_VexW (int bytemode, int sizeflag)
16336{
16337 int reg = -1;
16338
16339 if (!vex_w_done)
16340 {
16341 vex_w_done = 1;
41effecb
SP
16342
16343 /* Skip mod/rm byte. */
16344 MODRM_CHECK;
16345 codep++;
16346
922d8de8 16347 if (vex.w)
ccc5981b 16348 reg = get_vex_imm8 (sizeflag, 0) >> 4;
922d8de8
DR
16349 }
16350 else
16351 {
16352 if (!vex.w)
ccc5981b 16353 reg = get_vex_imm8 (sizeflag, 1) >> 4;
922d8de8
DR
16354 }
16355
16356 OP_EX_VexReg (bytemode, sizeflag, reg);
16357}
16358
922d8de8
DR
16359static void
16360VEXI4_Fixup (int bytemode ATTRIBUTE_UNUSED,
16361 int sizeflag ATTRIBUTE_UNUSED)
16362{
16363 /* Skip the immediate byte and check for invalid bits. */
16364 FETCH_DATA (the_info, codep + 1);
16365 if (*codep++ & 0xf)
16366 BadOp ();
16367}
16368
c0f3af97
L
16369static void
16370OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16371{
16372 int reg;
b9733481
L
16373 const char **names;
16374
c0f3af97
L
16375 FETCH_DATA (the_info, codep + 1);
16376 reg = *codep++;
16377
16378 if (bytemode != x_mode)
16379 abort ();
16380
16381 if (reg & 0xf)
16382 BadOp ();
16383
16384 reg >>= 4;
dae39acc
L
16385 if (reg > 7 && address_mode != mode_64bit)
16386 BadOp ();
16387
c0f3af97
L
16388 switch (vex.length)
16389 {
16390 case 128:
b9733481 16391 names = names_xmm;
c0f3af97
L
16392 break;
16393 case 256:
b9733481 16394 names = names_ymm;
c0f3af97
L
16395 break;
16396 default:
16397 abort ();
16398 }
b9733481 16399 oappend (names[reg]);
c0f3af97
L
16400}
16401
922d8de8
DR
16402static void
16403OP_XMM_VexW (int bytemode, int sizeflag)
16404{
16405 /* Turn off the REX.W bit since it is used for swapping operands
16406 now. */
16407 rex &= ~REX_W;
16408 OP_XMM (bytemode, sizeflag);
16409}
16410
c0f3af97
L
16411static void
16412OP_EX_Vex (int bytemode, int sizeflag)
16413{
16414 if (modrm.mod != 3)
16415 {
16416 if (vex.register_specifier != 0)
16417 BadOp ();
16418 need_vex_reg = 0;
16419 }
16420 OP_EX (bytemode, sizeflag);
16421}
16422
16423static void
16424OP_XMM_Vex (int bytemode, int sizeflag)
16425{
16426 if (modrm.mod != 3)
16427 {
16428 if (vex.register_specifier != 0)
16429 BadOp ();
16430 need_vex_reg = 0;
16431 }
16432 OP_XMM (bytemode, sizeflag);
16433}
16434
16435static void
16436VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16437{
16438 switch (vex.length)
16439 {
16440 case 128:
ea397f5b 16441 mnemonicendp = stpcpy (obuf, "vzeroupper");
c0f3af97
L
16442 break;
16443 case 256:
ea397f5b 16444 mnemonicendp = stpcpy (obuf, "vzeroall");
c0f3af97
L
16445 break;
16446 default:
16447 abort ();
16448 }
16449}
16450
ea397f5b
L
16451static struct op vex_cmp_op[] =
16452{
16453 { STRING_COMMA_LEN ("eq") },
16454 { STRING_COMMA_LEN ("lt") },
16455 { STRING_COMMA_LEN ("le") },
16456 { STRING_COMMA_LEN ("unord") },
16457 { STRING_COMMA_LEN ("neq") },
16458 { STRING_COMMA_LEN ("nlt") },
16459 { STRING_COMMA_LEN ("nle") },
16460 { STRING_COMMA_LEN ("ord") },
16461 { STRING_COMMA_LEN ("eq_uq") },
16462 { STRING_COMMA_LEN ("nge") },
16463 { STRING_COMMA_LEN ("ngt") },
16464 { STRING_COMMA_LEN ("false") },
16465 { STRING_COMMA_LEN ("neq_oq") },
16466 { STRING_COMMA_LEN ("ge") },
16467 { STRING_COMMA_LEN ("gt") },
16468 { STRING_COMMA_LEN ("true") },
16469 { STRING_COMMA_LEN ("eq_os") },
16470 { STRING_COMMA_LEN ("lt_oq") },
16471 { STRING_COMMA_LEN ("le_oq") },
16472 { STRING_COMMA_LEN ("unord_s") },
16473 { STRING_COMMA_LEN ("neq_us") },
16474 { STRING_COMMA_LEN ("nlt_uq") },
16475 { STRING_COMMA_LEN ("nle_uq") },
16476 { STRING_COMMA_LEN ("ord_s") },
16477 { STRING_COMMA_LEN ("eq_us") },
16478 { STRING_COMMA_LEN ("nge_uq") },
16479 { STRING_COMMA_LEN ("ngt_uq") },
16480 { STRING_COMMA_LEN ("false_os") },
16481 { STRING_COMMA_LEN ("neq_os") },
16482 { STRING_COMMA_LEN ("ge_oq") },
16483 { STRING_COMMA_LEN ("gt_oq") },
16484 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
16485};
16486
16487static void
16488VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16489{
16490 unsigned int cmp_type;
16491
16492 FETCH_DATA (the_info, codep + 1);
16493 cmp_type = *codep++ & 0xff;
16494 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
16495 {
16496 char suffix [3];
ea397f5b 16497 char *p = mnemonicendp - 2;
c0f3af97
L
16498 suffix[0] = p[0];
16499 suffix[1] = p[1];
16500 suffix[2] = '\0';
ea397f5b
L
16501 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
16502 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
16503 }
16504 else
16505 {
16506 /* We have a reserved extension byte. Output it directly. */
16507 scratchbuf[0] = '$';
16508 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16509 oappend_maybe_intel (scratchbuf);
c0f3af97
L
16510 scratchbuf[0] = '\0';
16511 }
16512}
16513
43234a1e
L
16514static void
16515VPCMP_Fixup (int bytemode ATTRIBUTE_UNUSED,
16516 int sizeflag ATTRIBUTE_UNUSED)
16517{
16518 unsigned int cmp_type;
16519
16520 if (!vex.evex)
16521 abort ();
16522
16523 FETCH_DATA (the_info, codep + 1);
16524 cmp_type = *codep++ & 0xff;
16525 /* There are aliases for immediates 0, 1, 2, 4, 5, 6.
16526 If it's the case, print suffix, otherwise - print the immediate. */
16527 if (cmp_type < ARRAY_SIZE (simd_cmp_op)
16528 && cmp_type != 3
16529 && cmp_type != 7)
16530 {
16531 char suffix [3];
16532 char *p = mnemonicendp - 2;
16533
16534 /* vpcmp* can have both one- and two-lettered suffix. */
16535 if (p[0] == 'p')
16536 {
16537 p++;
16538 suffix[0] = p[0];
16539 suffix[1] = '\0';
16540 }
16541 else
16542 {
16543 suffix[0] = p[0];
16544 suffix[1] = p[1];
16545 suffix[2] = '\0';
16546 }
16547
16548 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
16549 mnemonicendp += simd_cmp_op[cmp_type].len;
16550 }
16551 else
16552 {
16553 /* We have a reserved extension byte. Output it directly. */
16554 scratchbuf[0] = '$';
16555 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16556 oappend_maybe_intel (scratchbuf);
43234a1e
L
16557 scratchbuf[0] = '\0';
16558 }
16559}
16560
ea397f5b
L
16561static const struct op pclmul_op[] =
16562{
16563 { STRING_COMMA_LEN ("lql") },
16564 { STRING_COMMA_LEN ("hql") },
16565 { STRING_COMMA_LEN ("lqh") },
16566 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
16567};
16568
16569static void
16570PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
16571 int sizeflag ATTRIBUTE_UNUSED)
16572{
16573 unsigned int pclmul_type;
16574
16575 FETCH_DATA (the_info, codep + 1);
16576 pclmul_type = *codep++ & 0xff;
16577 switch (pclmul_type)
16578 {
16579 case 0x10:
16580 pclmul_type = 2;
16581 break;
16582 case 0x11:
16583 pclmul_type = 3;
16584 break;
16585 default:
16586 break;
7bb15c6f 16587 }
c0f3af97
L
16588 if (pclmul_type < ARRAY_SIZE (pclmul_op))
16589 {
16590 char suffix [4];
ea397f5b 16591 char *p = mnemonicendp - 3;
c0f3af97
L
16592 suffix[0] = p[0];
16593 suffix[1] = p[1];
16594 suffix[2] = p[2];
16595 suffix[3] = '\0';
ea397f5b
L
16596 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
16597 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
16598 }
16599 else
16600 {
16601 /* We have a reserved extension byte. Output it directly. */
16602 scratchbuf[0] = '$';
16603 print_operand_value (scratchbuf + 1, 1, pclmul_type);
9ce09ba2 16604 oappend_maybe_intel (scratchbuf);
c0f3af97
L
16605 scratchbuf[0] = '\0';
16606 }
16607}
16608
f1f8f695
L
16609static void
16610MOVBE_Fixup (int bytemode, int sizeflag)
16611{
16612 /* Add proper suffix to "movbe". */
ea397f5b 16613 char *p = mnemonicendp;
f1f8f695
L
16614
16615 switch (bytemode)
16616 {
16617 case v_mode:
16618 if (intel_syntax)
ea397f5b 16619 goto skip;
f1f8f695
L
16620
16621 USED_REX (REX_W);
16622 if (sizeflag & SUFFIX_ALWAYS)
16623 {
16624 if (rex & REX_W)
16625 *p++ = 'q';
f1f8f695 16626 else
f16cd0d5
L
16627 {
16628 if (sizeflag & DFLAG)
16629 *p++ = 'l';
16630 else
16631 *p++ = 'w';
16632 used_prefixes |= (prefixes & PREFIX_DATA);
16633 }
f1f8f695 16634 }
f1f8f695
L
16635 break;
16636 default:
16637 oappend (INTERNAL_DISASSEMBLER_ERROR);
16638 break;
16639 }
ea397f5b 16640 mnemonicendp = p;
f1f8f695
L
16641 *p = '\0';
16642
ea397f5b 16643skip:
f1f8f695
L
16644 OP_M (bytemode, sizeflag);
16645}
f88c9eb0
SP
16646
16647static void
16648OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16649{
16650 int reg;
16651 const char **names;
16652
16653 /* Skip mod/rm byte. */
16654 MODRM_CHECK;
16655 codep++;
16656
16657 if (vex.w)
16658 names = names64;
f88c9eb0 16659 else
ce7d077e 16660 names = names32;
f88c9eb0
SP
16661
16662 reg = modrm.rm;
16663 USED_REX (REX_B);
16664 if (rex & REX_B)
16665 reg += 8;
16666
16667 oappend (names[reg]);
16668}
16669
16670static void
16671OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16672{
16673 const char **names;
16674
16675 if (vex.w)
16676 names = names64;
f88c9eb0 16677 else
ce7d077e 16678 names = names32;
f88c9eb0
SP
16679
16680 oappend (names[vex.register_specifier]);
16681}
43234a1e
L
16682
16683static void
16684OP_Mask (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16685{
16686 if (!vex.evex
16687 || bytemode != mask_mode)
16688 abort ();
16689
16690 USED_REX (REX_R);
16691 if ((rex & REX_R) != 0 || !vex.r)
16692 {
16693 BadOp ();
16694 return;
16695 }
16696
16697 oappend (names_mask [modrm.reg]);
16698}
16699
16700static void
16701OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16702{
16703 if (!vex.evex
16704 || (bytemode != evex_rounding_mode
16705 && bytemode != evex_sae_mode))
16706 abort ();
16707 if (modrm.mod == 3 && vex.b)
16708 switch (bytemode)
16709 {
16710 case evex_rounding_mode:
16711 oappend (names_rounding[vex.ll]);
16712 break;
16713 case evex_sae_mode:
16714 oappend ("{sae}");
16715 break;
16716 default:
16717 break;
16718 }
16719}
This page took 2.27414 seconds and 4 git commands to generate.