xtensa: fix gas segfault with --text-section-literals
[deliverable/binutils-gdb.git] / opcodes / i386-dis.c
CommitLineData
252b5132 1/* Print i386 instructions for GDB, the GNU debugger.
b90efa5b 2 Copyright (C) 1988-2015 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;
8df14d78 134 OPCODES_SIGJMP_BUF bailout;
252b5132
RH
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);
8df14d78 217 OPCODES_SIGLONGJMP (priv->bailout, 1);
252b5132
RH
218 }
219 else
220 priv->max_fetched = addr;
221 return 1;
222}
223
bf890a93 224/* Possible values for prefix requirement. */
507bd325
L
225#define PREFIX_IGNORED_SHIFT 16
226#define PREFIX_IGNORED_REPZ (PREFIX_REPZ << PREFIX_IGNORED_SHIFT)
227#define PREFIX_IGNORED_REPNZ (PREFIX_REPNZ << PREFIX_IGNORED_SHIFT)
228#define PREFIX_IGNORED_DATA (PREFIX_DATA << PREFIX_IGNORED_SHIFT)
229#define PREFIX_IGNORED_ADDR (PREFIX_ADDR << PREFIX_IGNORED_SHIFT)
230#define PREFIX_IGNORED_LOCK (PREFIX_LOCK << PREFIX_IGNORED_SHIFT)
231
232/* Opcode prefixes. */
233#define PREFIX_OPCODE (PREFIX_REPZ \
234 | PREFIX_REPNZ \
235 | PREFIX_DATA)
236
237/* Prefixes ignored. */
238#define PREFIX_IGNORED (PREFIX_IGNORED_REPZ \
239 | PREFIX_IGNORED_REPNZ \
240 | PREFIX_IGNORED_DATA)
bf890a93 241
ce518a5f 242#define XX { NULL, 0 }
507bd325 243#define Bad_Opcode NULL, { { NULL, 0 } }, 0
ce518a5f
L
244
245#define Eb { OP_E, b_mode }
7e8b059b 246#define Ebnd { OP_E, bnd_mode }
b6169b20 247#define EbS { OP_E, b_swap_mode }
ce518a5f 248#define Ev { OP_E, v_mode }
7e8b059b 249#define Ev_bnd { OP_E, v_bnd_mode }
b6169b20 250#define EvS { OP_E, v_swap_mode }
ce518a5f
L
251#define Ed { OP_E, d_mode }
252#define Edq { OP_E, dq_mode }
253#define Edqw { OP_E, dqw_mode }
1ba585e8 254#define EdqwS { OP_E, dqw_swap_mode }
42903f7f 255#define Edqb { OP_E, dqb_mode }
1ba585e8
IT
256#define Edb { OP_E, db_mode }
257#define Edw { OP_E, dw_mode }
42903f7f 258#define Edqd { OP_E, dqd_mode }
09335d05 259#define Eq { OP_E, q_mode }
ce518a5f
L
260#define indirEv { OP_indirE, stack_v_mode }
261#define indirEp { OP_indirE, f_mode }
262#define stackEv { OP_E, stack_v_mode }
263#define Em { OP_E, m_mode }
264#define Ew { OP_E, w_mode }
265#define M { OP_M, 0 } /* lea, lgdt, etc. */
34b772a6 266#define Ma { OP_M, a_mode }
b844680a 267#define Mb { OP_M, b_mode }
d9a5e5e5 268#define Md { OP_M, d_mode }
f1f8f695 269#define Mo { OP_M, o_mode }
ce518a5f
L
270#define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for LDS, LES etc */
271#define Mq { OP_M, q_mode }
4ee52178 272#define Mx { OP_M, x_mode }
c0f3af97 273#define Mxmm { OP_M, xmm_mode }
ce518a5f 274#define Gb { OP_G, b_mode }
7e8b059b 275#define Gbnd { OP_G, bnd_mode }
ce518a5f
L
276#define Gv { OP_G, v_mode }
277#define Gd { OP_G, d_mode }
278#define Gdq { OP_G, dq_mode }
279#define Gm { OP_G, m_mode }
280#define Gw { OP_G, w_mode }
6f74c397 281#define Rd { OP_R, d_mode }
43234a1e 282#define Rdq { OP_R, dq_mode }
6f74c397 283#define Rm { OP_R, m_mode }
ce518a5f
L
284#define Ib { OP_I, b_mode }
285#define sIb { OP_sI, b_mode } /* sign extened byte */
e3949f17 286#define sIbT { OP_sI, b_T_mode } /* sign extened byte like 'T' */
ce518a5f 287#define Iv { OP_I, v_mode }
7bb15c6f 288#define sIv { OP_sI, v_mode }
ce518a5f
L
289#define Iq { OP_I, q_mode }
290#define Iv64 { OP_I64, v_mode }
291#define Iw { OP_I, w_mode }
292#define I1 { OP_I, const_1_mode }
293#define Jb { OP_J, b_mode }
294#define Jv { OP_J, v_mode }
295#define Cm { OP_C, m_mode }
296#define Dm { OP_D, m_mode }
297#define Td { OP_T, d_mode }
b844680a 298#define Skip_MODRM { OP_Skip_MODRM, 0 }
ce518a5f
L
299
300#define RMeAX { OP_REG, eAX_reg }
301#define RMeBX { OP_REG, eBX_reg }
302#define RMeCX { OP_REG, eCX_reg }
303#define RMeDX { OP_REG, eDX_reg }
304#define RMeSP { OP_REG, eSP_reg }
305#define RMeBP { OP_REG, eBP_reg }
306#define RMeSI { OP_REG, eSI_reg }
307#define RMeDI { OP_REG, eDI_reg }
308#define RMrAX { OP_REG, rAX_reg }
309#define RMrBX { OP_REG, rBX_reg }
310#define RMrCX { OP_REG, rCX_reg }
311#define RMrDX { OP_REG, rDX_reg }
312#define RMrSP { OP_REG, rSP_reg }
313#define RMrBP { OP_REG, rBP_reg }
314#define RMrSI { OP_REG, rSI_reg }
315#define RMrDI { OP_REG, rDI_reg }
316#define RMAL { OP_REG, al_reg }
ce518a5f
L
317#define RMCL { OP_REG, cl_reg }
318#define RMDL { OP_REG, dl_reg }
319#define RMBL { OP_REG, bl_reg }
320#define RMAH { OP_REG, ah_reg }
321#define RMCH { OP_REG, ch_reg }
322#define RMDH { OP_REG, dh_reg }
323#define RMBH { OP_REG, bh_reg }
324#define RMAX { OP_REG, ax_reg }
325#define RMDX { OP_REG, dx_reg }
326
327#define eAX { OP_IMREG, eAX_reg }
328#define eBX { OP_IMREG, eBX_reg }
329#define eCX { OP_IMREG, eCX_reg }
330#define eDX { OP_IMREG, eDX_reg }
331#define eSP { OP_IMREG, eSP_reg }
332#define eBP { OP_IMREG, eBP_reg }
333#define eSI { OP_IMREG, eSI_reg }
334#define eDI { OP_IMREG, eDI_reg }
335#define AL { OP_IMREG, al_reg }
336#define CL { OP_IMREG, cl_reg }
337#define DL { OP_IMREG, dl_reg }
338#define BL { OP_IMREG, bl_reg }
339#define AH { OP_IMREG, ah_reg }
340#define CH { OP_IMREG, ch_reg }
341#define DH { OP_IMREG, dh_reg }
342#define BH { OP_IMREG, bh_reg }
343#define AX { OP_IMREG, ax_reg }
344#define DX { OP_IMREG, dx_reg }
345#define zAX { OP_IMREG, z_mode_ax_reg }
346#define indirDX { OP_IMREG, indir_dx_reg }
347
348#define Sw { OP_SEG, w_mode }
349#define Sv { OP_SEG, v_mode }
350#define Ap { OP_DIR, 0 }
351#define Ob { OP_OFF64, b_mode }
352#define Ov { OP_OFF64, v_mode }
353#define Xb { OP_DSreg, eSI_reg }
354#define Xv { OP_DSreg, eSI_reg }
355#define Xz { OP_DSreg, eSI_reg }
356#define Yb { OP_ESreg, eDI_reg }
357#define Yv { OP_ESreg, eDI_reg }
358#define DSBX { OP_DSreg, eBX_reg }
359
360#define es { OP_REG, es_reg }
361#define ss { OP_REG, ss_reg }
362#define cs { OP_REG, cs_reg }
363#define ds { OP_REG, ds_reg }
364#define fs { OP_REG, fs_reg }
365#define gs { OP_REG, gs_reg }
366
367#define MX { OP_MMX, 0 }
368#define XM { OP_XMM, 0 }
539f890d 369#define XMScalar { OP_XMM, scalar_mode }
6c30d220 370#define XMGatherQ { OP_XMM, vex_vsib_q_w_dq_mode }
c0f3af97 371#define XMM { OP_XMM, xmm_mode }
43234a1e 372#define XMxmmq { OP_XMM, xmmq_mode }
ce518a5f 373#define EM { OP_EM, v_mode }
b6169b20 374#define EMS { OP_EM, v_swap_mode }
09a2c6cf 375#define EMd { OP_EM, d_mode }
14051056 376#define EMx { OP_EM, x_mode }
8976381e 377#define EXw { OP_EX, w_mode }
09a2c6cf 378#define EXd { OP_EX, d_mode }
539f890d 379#define EXdScalar { OP_EX, d_scalar_mode }
fa99fab2 380#define EXdS { OP_EX, d_swap_mode }
43234a1e 381#define EXdScalarS { OP_EX, d_scalar_swap_mode }
09a2c6cf 382#define EXq { OP_EX, q_mode }
539f890d
L
383#define EXqScalar { OP_EX, q_scalar_mode }
384#define EXqScalarS { OP_EX, q_scalar_swap_mode }
b6169b20 385#define EXqS { OP_EX, q_swap_mode }
09a2c6cf 386#define EXx { OP_EX, x_mode }
b6169b20 387#define EXxS { OP_EX, x_swap_mode }
c0f3af97 388#define EXxmm { OP_EX, xmm_mode }
43234a1e 389#define EXymm { OP_EX, ymm_mode }
c0f3af97 390#define EXxmmq { OP_EX, xmmq_mode }
43234a1e 391#define EXEvexHalfBcstXmmq { OP_EX, evex_half_bcst_xmmq_mode }
6c30d220
L
392#define EXxmm_mb { OP_EX, xmm_mb_mode }
393#define EXxmm_mw { OP_EX, xmm_mw_mode }
394#define EXxmm_md { OP_EX, xmm_md_mode }
395#define EXxmm_mq { OP_EX, xmm_mq_mode }
43234a1e 396#define EXxmm_mdq { OP_EX, xmm_mdq_mode }
6c30d220
L
397#define EXxmmdw { OP_EX, xmmdw_mode }
398#define EXxmmqd { OP_EX, xmmqd_mode }
c0f3af97 399#define EXymmq { OP_EX, ymmq_mode }
0bfee649 400#define EXVexWdq { OP_EX, vex_w_dq_mode }
1c480963 401#define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
43234a1e
L
402#define EXEvexXGscat { OP_EX, evex_x_gscat_mode }
403#define EXEvexXNoBcst { OP_EX, evex_x_nobcst_mode }
ce518a5f
L
404#define MS { OP_MS, v_mode }
405#define XS { OP_XS, v_mode }
09335d05 406#define EMCq { OP_EMC, q_mode }
ce518a5f 407#define MXC { OP_MXC, 0 }
ce518a5f 408#define OPSUF { OP_3DNowSuffix, 0 }
ad19981d 409#define CMP { CMP_Fixup, 0 }
42903f7f 410#define XMM0 { XMM_Fixup, 0 }
eacc9c89 411#define FXSAVE { FXSAVE_Fixup, 0 }
5dd85c99
SP
412#define Vex_2src_1 { OP_Vex_2src_1, 0 }
413#define Vex_2src_2 { OP_Vex_2src_2, 0 }
252b5132 414
c0f3af97 415#define Vex { OP_VEX, vex_mode }
539f890d 416#define VexScalar { OP_VEX, vex_scalar_mode }
6c30d220 417#define VexGatherQ { OP_VEX, vex_vsib_q_w_dq_mode }
c0f3af97
L
418#define Vex128 { OP_VEX, vex128_mode }
419#define Vex256 { OP_VEX, vex256_mode }
cb21baef 420#define VexGdq { OP_VEX, dq_mode }
922d8de8 421#define VexI4 { VEXI4_Fixup, 0}
c0f3af97 422#define EXdVex { OP_EX_Vex, d_mode }
fa99fab2 423#define EXdVexS { OP_EX_Vex, d_swap_mode }
539f890d 424#define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode }
c0f3af97 425#define EXqVex { OP_EX_Vex, q_mode }
fa99fab2 426#define EXqVexS { OP_EX_Vex, q_swap_mode }
539f890d 427#define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode }
922d8de8
DR
428#define EXVexW { OP_EX_VexW, x_mode }
429#define EXdVexW { OP_EX_VexW, d_mode }
430#define EXqVexW { OP_EX_VexW, q_mode }
a683cc34 431#define EXVexImmW { OP_EX_VexImmW, x_mode }
c0f3af97 432#define XMVex { OP_XMM_Vex, 0 }
539f890d 433#define XMVexScalar { OP_XMM_Vex, scalar_mode }
922d8de8 434#define XMVexW { OP_XMM_VexW, 0 }
c0f3af97
L
435#define XMVexI4 { OP_REG_VexI4, x_mode }
436#define PCLMUL { PCLMUL_Fixup, 0 }
437#define VZERO { VZERO_Fixup, 0 }
438#define VCMP { VCMP_Fixup, 0 }
43234a1e
L
439#define VPCMP { VPCMP_Fixup, 0 }
440
441#define EXxEVexR { OP_Rounding, evex_rounding_mode }
442#define EXxEVexS { OP_Rounding, evex_sae_mode }
443
444#define XMask { OP_Mask, mask_mode }
445#define MaskG { OP_G, mask_mode }
446#define MaskE { OP_E, mask_mode }
1ba585e8 447#define MaskBDE { OP_E, mask_bd_mode }
43234a1e
L
448#define MaskR { OP_R, mask_mode }
449#define MaskVex { OP_VEX, mask_mode }
c0f3af97 450
6c30d220 451#define MVexVSIBDWpX { OP_M, vex_vsib_d_w_dq_mode }
5fc35d96 452#define MVexVSIBDQWpX { OP_M, vex_vsib_d_w_d_mode }
6c30d220 453#define MVexVSIBQWpX { OP_M, vex_vsib_q_w_dq_mode }
5fc35d96 454#define MVexVSIBQDWpX { OP_M, vex_vsib_q_w_d_mode }
6c30d220 455
35c52694 456/* Used handle "rep" prefix for string instructions. */
ce518a5f
L
457#define Xbr { REP_Fixup, eSI_reg }
458#define Xvr { REP_Fixup, eSI_reg }
459#define Ybr { REP_Fixup, eDI_reg }
460#define Yvr { REP_Fixup, eDI_reg }
461#define Yzr { REP_Fixup, eDI_reg }
462#define indirDXr { REP_Fixup, indir_dx_reg }
463#define ALr { REP_Fixup, al_reg }
464#define eAXr { REP_Fixup, eAX_reg }
465
42164a71
L
466/* Used handle HLE prefix for lockable instructions. */
467#define Ebh1 { HLE_Fixup1, b_mode }
468#define Evh1 { HLE_Fixup1, v_mode }
469#define Ebh2 { HLE_Fixup2, b_mode }
470#define Evh2 { HLE_Fixup2, v_mode }
471#define Ebh3 { HLE_Fixup3, b_mode }
472#define Evh3 { HLE_Fixup3, v_mode }
473
7e8b059b
L
474#define BND { BND_Fixup, 0 }
475
ce518a5f
L
476#define cond_jump_flag { NULL, cond_jump_mode }
477#define loop_jcxz_flag { NULL, loop_jcxz_mode }
3ffd33cf 478
252b5132 479/* bits in sizeflag */
252b5132 480#define SUFFIX_ALWAYS 4
252b5132
RH
481#define AFLAG 2
482#define DFLAG 1
483
51e7da1b
L
484enum
485{
486 /* byte operand */
487 b_mode = 1,
488 /* byte operand with operand swapped */
3873ba12 489 b_swap_mode,
e3949f17
L
490 /* byte operand, sign extend like 'T' suffix */
491 b_T_mode,
51e7da1b 492 /* operand size depends on prefixes */
3873ba12 493 v_mode,
51e7da1b 494 /* operand size depends on prefixes with operand swapped */
3873ba12 495 v_swap_mode,
51e7da1b 496 /* word operand */
3873ba12 497 w_mode,
51e7da1b 498 /* double word operand */
3873ba12 499 d_mode,
51e7da1b 500 /* double word operand with operand swapped */
3873ba12 501 d_swap_mode,
51e7da1b 502 /* quad word operand */
3873ba12 503 q_mode,
51e7da1b 504 /* quad word operand with operand swapped */
3873ba12 505 q_swap_mode,
51e7da1b 506 /* ten-byte operand */
3873ba12 507 t_mode,
43234a1e
L
508 /* 16-byte XMM, 32-byte YMM or 64-byte ZMM operand. In EVEX with
509 broadcast enabled. */
3873ba12 510 x_mode,
43234a1e
L
511 /* Similar to x_mode, but with different EVEX mem shifts. */
512 evex_x_gscat_mode,
513 /* Similar to x_mode, but with disabled broadcast. */
514 evex_x_nobcst_mode,
515 /* Similar to x_mode, but with operands swapped and disabled broadcast
516 in EVEX. */
3873ba12 517 x_swap_mode,
51e7da1b 518 /* 16-byte XMM operand */
3873ba12 519 xmm_mode,
43234a1e
L
520 /* XMM, XMM or YMM register operand, or quad word, xmmword or ymmword
521 memory operand (depending on vector length). Broadcast isn't
522 allowed. */
3873ba12 523 xmmq_mode,
43234a1e
L
524 /* Same as xmmq_mode, but broadcast is allowed. */
525 evex_half_bcst_xmmq_mode,
6c30d220
L
526 /* XMM register or byte memory operand */
527 xmm_mb_mode,
528 /* XMM register or word memory operand */
529 xmm_mw_mode,
530 /* XMM register or double word memory operand */
531 xmm_md_mode,
532 /* XMM register or quad word memory operand */
533 xmm_mq_mode,
43234a1e
L
534 /* XMM register or double/quad word memory operand, depending on
535 VEX.W. */
536 xmm_mdq_mode,
537 /* 16-byte XMM, word, double word or quad word operand. */
6c30d220 538 xmmdw_mode,
43234a1e 539 /* 16-byte XMM, double word, quad word operand or xmm word operand. */
6c30d220 540 xmmqd_mode,
43234a1e
L
541 /* 32-byte YMM operand */
542 ymm_mode,
543 /* quad word, ymmword or zmmword memory operand. */
3873ba12 544 ymmq_mode,
6c30d220
L
545 /* 32-byte YMM or 16-byte word operand */
546 ymmxmm_mode,
51e7da1b 547 /* d_mode in 32bit, q_mode in 64bit mode. */
3873ba12 548 m_mode,
51e7da1b 549 /* pair of v_mode operands */
3873ba12
L
550 a_mode,
551 cond_jump_mode,
552 loop_jcxz_mode,
7e8b059b 553 v_bnd_mode,
51e7da1b 554 /* operand size depends on REX prefixes. */
3873ba12 555 dq_mode,
51e7da1b 556 /* registers like dq_mode, memory like w_mode. */
3873ba12 557 dqw_mode,
1ba585e8 558 dqw_swap_mode,
7e8b059b 559 bnd_mode,
51e7da1b 560 /* 4- or 6-byte pointer operand */
3873ba12
L
561 f_mode,
562 const_1_mode,
51e7da1b 563 /* v_mode for stack-related opcodes. */
3873ba12 564 stack_v_mode,
51e7da1b 565 /* non-quad operand size depends on prefixes */
3873ba12 566 z_mode,
51e7da1b 567 /* 16-byte operand */
3873ba12 568 o_mode,
51e7da1b 569 /* registers like dq_mode, memory like b_mode. */
3873ba12 570 dqb_mode,
1ba585e8
IT
571 /* registers like d_mode, memory like b_mode. */
572 db_mode,
573 /* registers like d_mode, memory like w_mode. */
574 dw_mode,
51e7da1b 575 /* registers like dq_mode, memory like d_mode. */
3873ba12 576 dqd_mode,
51e7da1b 577 /* normal vex mode */
3873ba12 578 vex_mode,
51e7da1b 579 /* 128bit vex mode */
3873ba12 580 vex128_mode,
51e7da1b 581 /* 256bit vex mode */
3873ba12 582 vex256_mode,
51e7da1b 583 /* operand size depends on the VEX.W bit. */
3873ba12 584 vex_w_dq_mode,
d55ee72f 585
6c30d220
L
586 /* Similar to vex_w_dq_mode, with VSIB dword indices. */
587 vex_vsib_d_w_dq_mode,
5fc35d96
IT
588 /* Similar to vex_vsib_d_w_dq_mode, with smaller memory. */
589 vex_vsib_d_w_d_mode,
6c30d220
L
590 /* Similar to vex_w_dq_mode, with VSIB qword indices. */
591 vex_vsib_q_w_dq_mode,
5fc35d96
IT
592 /* Similar to vex_vsib_q_w_dq_mode, with smaller memory. */
593 vex_vsib_q_w_d_mode,
6c30d220 594
539f890d
L
595 /* scalar, ignore vector length. */
596 scalar_mode,
597 /* like d_mode, ignore vector length. */
598 d_scalar_mode,
599 /* like d_swap_mode, ignore vector length. */
600 d_scalar_swap_mode,
601 /* like q_mode, ignore vector length. */
602 q_scalar_mode,
603 /* like q_swap_mode, ignore vector length. */
604 q_scalar_swap_mode,
605 /* like vex_mode, ignore vector length. */
606 vex_scalar_mode,
1c480963
L
607 /* like vex_w_dq_mode, ignore vector length. */
608 vex_scalar_w_dq_mode,
539f890d 609
43234a1e
L
610 /* Static rounding. */
611 evex_rounding_mode,
612 /* Supress all exceptions. */
613 evex_sae_mode,
614
615 /* Mask register operand. */
616 mask_mode,
1ba585e8
IT
617 /* Mask register operand. */
618 mask_bd_mode,
43234a1e 619
3873ba12
L
620 es_reg,
621 cs_reg,
622 ss_reg,
623 ds_reg,
624 fs_reg,
625 gs_reg,
d55ee72f 626
3873ba12
L
627 eAX_reg,
628 eCX_reg,
629 eDX_reg,
630 eBX_reg,
631 eSP_reg,
632 eBP_reg,
633 eSI_reg,
634 eDI_reg,
d55ee72f 635
3873ba12
L
636 al_reg,
637 cl_reg,
638 dl_reg,
639 bl_reg,
640 ah_reg,
641 ch_reg,
642 dh_reg,
643 bh_reg,
d55ee72f 644
3873ba12
L
645 ax_reg,
646 cx_reg,
647 dx_reg,
648 bx_reg,
649 sp_reg,
650 bp_reg,
651 si_reg,
652 di_reg,
d55ee72f 653
3873ba12
L
654 rAX_reg,
655 rCX_reg,
656 rDX_reg,
657 rBX_reg,
658 rSP_reg,
659 rBP_reg,
660 rSI_reg,
661 rDI_reg,
d55ee72f 662
3873ba12
L
663 z_mode_ax_reg,
664 indir_dx_reg
51e7da1b 665};
252b5132 666
51e7da1b
L
667enum
668{
669 FLOATCODE = 1,
3873ba12
L
670 USE_REG_TABLE,
671 USE_MOD_TABLE,
672 USE_RM_TABLE,
673 USE_PREFIX_TABLE,
674 USE_X86_64_TABLE,
675 USE_3BYTE_TABLE,
f88c9eb0 676 USE_XOP_8F_TABLE,
3873ba12
L
677 USE_VEX_C4_TABLE,
678 USE_VEX_C5_TABLE,
9e30b8e0 679 USE_VEX_LEN_TABLE,
43234a1e
L
680 USE_VEX_W_TABLE,
681 USE_EVEX_TABLE
51e7da1b 682};
6439fc28 683
bf890a93 684#define FLOAT NULL, { { NULL, FLOATCODE } }, 0
4efba78c 685
bf890a93
IT
686#define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }, 0
687#define DIS386_PREFIX(T, I, P) NULL, { { NULL, (T)}, { NULL, (I) } }, P
1ceb70f8
L
688#define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
689#define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
690#define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
691#define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
4e7d34a6
L
692#define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
693#define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
bf890a93 694#define THREE_BYTE_TABLE_PREFIX(I, P) DIS386_PREFIX (USE_3BYTE_TABLE, (I), P)
f88c9eb0 695#define XOP_8F_TABLE(I) DIS386 (USE_XOP_8F_TABLE, (I))
c0f3af97
L
696#define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
697#define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
698#define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
9e30b8e0 699#define VEX_W_TABLE(I) DIS386 (USE_VEX_W_TABLE, (I))
43234a1e 700#define EVEX_TABLE(I) DIS386 (USE_EVEX_TABLE, (I))
1ceb70f8 701
51e7da1b
L
702enum
703{
704 REG_80 = 0,
3873ba12
L
705 REG_81,
706 REG_82,
707 REG_8F,
708 REG_C0,
709 REG_C1,
710 REG_C6,
711 REG_C7,
712 REG_D0,
713 REG_D1,
714 REG_D2,
715 REG_D3,
716 REG_F6,
717 REG_F7,
718 REG_FE,
719 REG_FF,
720 REG_0F00,
721 REG_0F01,
722 REG_0F0D,
723 REG_0F18,
724 REG_0F71,
725 REG_0F72,
726 REG_0F73,
727 REG_0FA6,
728 REG_0FA7,
729 REG_0FAE,
730 REG_0FBA,
731 REG_0FC7,
592a252b
L
732 REG_VEX_0F71,
733 REG_VEX_0F72,
734 REG_VEX_0F73,
735 REG_VEX_0FAE,
f12dc422 736 REG_VEX_0F38F3,
f88c9eb0 737 REG_XOP_LWPCB,
2a2a0f38
QN
738 REG_XOP_LWP,
739 REG_XOP_TBM_01,
43234a1e
L
740 REG_XOP_TBM_02,
741
1ba585e8 742 REG_EVEX_0F71,
43234a1e
L
743 REG_EVEX_0F72,
744 REG_EVEX_0F73,
745 REG_EVEX_0F38C6,
746 REG_EVEX_0F38C7
51e7da1b 747};
1ceb70f8 748
51e7da1b
L
749enum
750{
751 MOD_8D = 0,
42164a71
L
752 MOD_C6_REG_7,
753 MOD_C7_REG_7,
4a357820
MZ
754 MOD_FF_REG_3,
755 MOD_FF_REG_5,
3873ba12
L
756 MOD_0F01_REG_0,
757 MOD_0F01_REG_1,
758 MOD_0F01_REG_2,
759 MOD_0F01_REG_3,
760 MOD_0F01_REG_7,
761 MOD_0F12_PREFIX_0,
762 MOD_0F13,
763 MOD_0F16_PREFIX_0,
764 MOD_0F17,
765 MOD_0F18_REG_0,
766 MOD_0F18_REG_1,
767 MOD_0F18_REG_2,
768 MOD_0F18_REG_3,
d7189fa5
RM
769 MOD_0F18_REG_4,
770 MOD_0F18_REG_5,
771 MOD_0F18_REG_6,
772 MOD_0F18_REG_7,
7e8b059b
L
773 MOD_0F1A_PREFIX_0,
774 MOD_0F1B_PREFIX_0,
775 MOD_0F1B_PREFIX_1,
3873ba12
L
776 MOD_0F24,
777 MOD_0F26,
778 MOD_0F2B_PREFIX_0,
779 MOD_0F2B_PREFIX_1,
780 MOD_0F2B_PREFIX_2,
781 MOD_0F2B_PREFIX_3,
782 MOD_0F51,
783 MOD_0F71_REG_2,
784 MOD_0F71_REG_4,
785 MOD_0F71_REG_6,
786 MOD_0F72_REG_2,
787 MOD_0F72_REG_4,
788 MOD_0F72_REG_6,
789 MOD_0F73_REG_2,
790 MOD_0F73_REG_3,
791 MOD_0F73_REG_6,
792 MOD_0F73_REG_7,
793 MOD_0FAE_REG_0,
794 MOD_0FAE_REG_1,
795 MOD_0FAE_REG_2,
796 MOD_0FAE_REG_3,
797 MOD_0FAE_REG_4,
798 MOD_0FAE_REG_5,
799 MOD_0FAE_REG_6,
800 MOD_0FAE_REG_7,
801 MOD_0FB2,
802 MOD_0FB4,
803 MOD_0FB5,
963f3586
IT
804 MOD_0FC7_REG_3,
805 MOD_0FC7_REG_4,
806 MOD_0FC7_REG_5,
3873ba12
L
807 MOD_0FC7_REG_6,
808 MOD_0FC7_REG_7,
809 MOD_0FD7,
810 MOD_0FE7_PREFIX_2,
811 MOD_0FF0_PREFIX_3,
812 MOD_0F382A_PREFIX_2,
813 MOD_62_32BIT,
814 MOD_C4_32BIT,
815 MOD_C5_32BIT,
592a252b
L
816 MOD_VEX_0F12_PREFIX_0,
817 MOD_VEX_0F13,
818 MOD_VEX_0F16_PREFIX_0,
819 MOD_VEX_0F17,
820 MOD_VEX_0F2B,
821 MOD_VEX_0F50,
822 MOD_VEX_0F71_REG_2,
823 MOD_VEX_0F71_REG_4,
824 MOD_VEX_0F71_REG_6,
825 MOD_VEX_0F72_REG_2,
826 MOD_VEX_0F72_REG_4,
827 MOD_VEX_0F72_REG_6,
828 MOD_VEX_0F73_REG_2,
829 MOD_VEX_0F73_REG_3,
830 MOD_VEX_0F73_REG_6,
831 MOD_VEX_0F73_REG_7,
832 MOD_VEX_0FAE_REG_2,
833 MOD_VEX_0FAE_REG_3,
834 MOD_VEX_0FD7_PREFIX_2,
835 MOD_VEX_0FE7_PREFIX_2,
836 MOD_VEX_0FF0_PREFIX_3,
592a252b
L
837 MOD_VEX_0F381A_PREFIX_2,
838 MOD_VEX_0F382A_PREFIX_2,
839 MOD_VEX_0F382C_PREFIX_2,
840 MOD_VEX_0F382D_PREFIX_2,
841 MOD_VEX_0F382E_PREFIX_2,
6c30d220
L
842 MOD_VEX_0F382F_PREFIX_2,
843 MOD_VEX_0F385A_PREFIX_2,
844 MOD_VEX_0F388C_PREFIX_2,
845 MOD_VEX_0F388E_PREFIX_2,
43234a1e
L
846
847 MOD_EVEX_0F10_PREFIX_1,
848 MOD_EVEX_0F10_PREFIX_3,
849 MOD_EVEX_0F11_PREFIX_1,
850 MOD_EVEX_0F11_PREFIX_3,
851 MOD_EVEX_0F12_PREFIX_0,
852 MOD_EVEX_0F16_PREFIX_0,
853 MOD_EVEX_0F38C6_REG_1,
854 MOD_EVEX_0F38C6_REG_2,
855 MOD_EVEX_0F38C6_REG_5,
856 MOD_EVEX_0F38C6_REG_6,
857 MOD_EVEX_0F38C7_REG_1,
858 MOD_EVEX_0F38C7_REG_2,
859 MOD_EVEX_0F38C7_REG_5,
860 MOD_EVEX_0F38C7_REG_6
51e7da1b 861};
1ceb70f8 862
51e7da1b
L
863enum
864{
42164a71
L
865 RM_C6_REG_7 = 0,
866 RM_C7_REG_7,
867 RM_0F01_REG_0,
3873ba12
L
868 RM_0F01_REG_1,
869 RM_0F01_REG_2,
870 RM_0F01_REG_3,
871 RM_0F01_REG_7,
872 RM_0FAE_REG_5,
873 RM_0FAE_REG_6,
874 RM_0FAE_REG_7
51e7da1b 875};
1ceb70f8 876
51e7da1b
L
877enum
878{
879 PREFIX_90 = 0,
3873ba12
L
880 PREFIX_0F10,
881 PREFIX_0F11,
882 PREFIX_0F12,
883 PREFIX_0F16,
7e8b059b
L
884 PREFIX_0F1A,
885 PREFIX_0F1B,
3873ba12
L
886 PREFIX_0F2A,
887 PREFIX_0F2B,
888 PREFIX_0F2C,
889 PREFIX_0F2D,
890 PREFIX_0F2E,
891 PREFIX_0F2F,
892 PREFIX_0F51,
893 PREFIX_0F52,
894 PREFIX_0F53,
895 PREFIX_0F58,
896 PREFIX_0F59,
897 PREFIX_0F5A,
898 PREFIX_0F5B,
899 PREFIX_0F5C,
900 PREFIX_0F5D,
901 PREFIX_0F5E,
902 PREFIX_0F5F,
903 PREFIX_0F60,
904 PREFIX_0F61,
905 PREFIX_0F62,
906 PREFIX_0F6C,
907 PREFIX_0F6D,
908 PREFIX_0F6F,
909 PREFIX_0F70,
910 PREFIX_0F73_REG_3,
911 PREFIX_0F73_REG_7,
912 PREFIX_0F78,
913 PREFIX_0F79,
914 PREFIX_0F7C,
915 PREFIX_0F7D,
916 PREFIX_0F7E,
917 PREFIX_0F7F,
c7b8aa3a
L
918 PREFIX_0FAE_REG_0,
919 PREFIX_0FAE_REG_1,
920 PREFIX_0FAE_REG_2,
921 PREFIX_0FAE_REG_3,
c5e7287a 922 PREFIX_0FAE_REG_6,
963f3586 923 PREFIX_0FAE_REG_7,
9d8596f0 924 PREFIX_RM_0_0FAE_REG_7,
3873ba12 925 PREFIX_0FB8,
f12dc422 926 PREFIX_0FBC,
3873ba12
L
927 PREFIX_0FBD,
928 PREFIX_0FC2,
929 PREFIX_0FC3,
f24bcbaa
L
930 PREFIX_MOD_0_0FC7_REG_6,
931 PREFIX_MOD_3_0FC7_REG_6,
932 PREFIX_MOD_3_0FC7_REG_7,
3873ba12
L
933 PREFIX_0FD0,
934 PREFIX_0FD6,
935 PREFIX_0FE6,
936 PREFIX_0FE7,
937 PREFIX_0FF0,
938 PREFIX_0FF7,
939 PREFIX_0F3810,
940 PREFIX_0F3814,
941 PREFIX_0F3815,
942 PREFIX_0F3817,
943 PREFIX_0F3820,
944 PREFIX_0F3821,
945 PREFIX_0F3822,
946 PREFIX_0F3823,
947 PREFIX_0F3824,
948 PREFIX_0F3825,
949 PREFIX_0F3828,
950 PREFIX_0F3829,
951 PREFIX_0F382A,
952 PREFIX_0F382B,
953 PREFIX_0F3830,
954 PREFIX_0F3831,
955 PREFIX_0F3832,
956 PREFIX_0F3833,
957 PREFIX_0F3834,
958 PREFIX_0F3835,
959 PREFIX_0F3837,
960 PREFIX_0F3838,
961 PREFIX_0F3839,
962 PREFIX_0F383A,
963 PREFIX_0F383B,
964 PREFIX_0F383C,
965 PREFIX_0F383D,
966 PREFIX_0F383E,
967 PREFIX_0F383F,
968 PREFIX_0F3840,
969 PREFIX_0F3841,
970 PREFIX_0F3880,
971 PREFIX_0F3881,
6c30d220 972 PREFIX_0F3882,
a0046408
L
973 PREFIX_0F38C8,
974 PREFIX_0F38C9,
975 PREFIX_0F38CA,
976 PREFIX_0F38CB,
977 PREFIX_0F38CC,
978 PREFIX_0F38CD,
3873ba12
L
979 PREFIX_0F38DB,
980 PREFIX_0F38DC,
981 PREFIX_0F38DD,
982 PREFIX_0F38DE,
983 PREFIX_0F38DF,
984 PREFIX_0F38F0,
985 PREFIX_0F38F1,
e2e1fcde 986 PREFIX_0F38F6,
3873ba12
L
987 PREFIX_0F3A08,
988 PREFIX_0F3A09,
989 PREFIX_0F3A0A,
990 PREFIX_0F3A0B,
991 PREFIX_0F3A0C,
992 PREFIX_0F3A0D,
993 PREFIX_0F3A0E,
994 PREFIX_0F3A14,
995 PREFIX_0F3A15,
996 PREFIX_0F3A16,
997 PREFIX_0F3A17,
998 PREFIX_0F3A20,
999 PREFIX_0F3A21,
1000 PREFIX_0F3A22,
1001 PREFIX_0F3A40,
1002 PREFIX_0F3A41,
1003 PREFIX_0F3A42,
1004 PREFIX_0F3A44,
1005 PREFIX_0F3A60,
1006 PREFIX_0F3A61,
1007 PREFIX_0F3A62,
1008 PREFIX_0F3A63,
a0046408 1009 PREFIX_0F3ACC,
3873ba12 1010 PREFIX_0F3ADF,
592a252b
L
1011 PREFIX_VEX_0F10,
1012 PREFIX_VEX_0F11,
1013 PREFIX_VEX_0F12,
1014 PREFIX_VEX_0F16,
1015 PREFIX_VEX_0F2A,
1016 PREFIX_VEX_0F2C,
1017 PREFIX_VEX_0F2D,
1018 PREFIX_VEX_0F2E,
1019 PREFIX_VEX_0F2F,
43234a1e
L
1020 PREFIX_VEX_0F41,
1021 PREFIX_VEX_0F42,
1022 PREFIX_VEX_0F44,
1023 PREFIX_VEX_0F45,
1024 PREFIX_VEX_0F46,
1025 PREFIX_VEX_0F47,
1ba585e8 1026 PREFIX_VEX_0F4A,
43234a1e 1027 PREFIX_VEX_0F4B,
592a252b
L
1028 PREFIX_VEX_0F51,
1029 PREFIX_VEX_0F52,
1030 PREFIX_VEX_0F53,
1031 PREFIX_VEX_0F58,
1032 PREFIX_VEX_0F59,
1033 PREFIX_VEX_0F5A,
1034 PREFIX_VEX_0F5B,
1035 PREFIX_VEX_0F5C,
1036 PREFIX_VEX_0F5D,
1037 PREFIX_VEX_0F5E,
1038 PREFIX_VEX_0F5F,
1039 PREFIX_VEX_0F60,
1040 PREFIX_VEX_0F61,
1041 PREFIX_VEX_0F62,
1042 PREFIX_VEX_0F63,
1043 PREFIX_VEX_0F64,
1044 PREFIX_VEX_0F65,
1045 PREFIX_VEX_0F66,
1046 PREFIX_VEX_0F67,
1047 PREFIX_VEX_0F68,
1048 PREFIX_VEX_0F69,
1049 PREFIX_VEX_0F6A,
1050 PREFIX_VEX_0F6B,
1051 PREFIX_VEX_0F6C,
1052 PREFIX_VEX_0F6D,
1053 PREFIX_VEX_0F6E,
1054 PREFIX_VEX_0F6F,
1055 PREFIX_VEX_0F70,
1056 PREFIX_VEX_0F71_REG_2,
1057 PREFIX_VEX_0F71_REG_4,
1058 PREFIX_VEX_0F71_REG_6,
1059 PREFIX_VEX_0F72_REG_2,
1060 PREFIX_VEX_0F72_REG_4,
1061 PREFIX_VEX_0F72_REG_6,
1062 PREFIX_VEX_0F73_REG_2,
1063 PREFIX_VEX_0F73_REG_3,
1064 PREFIX_VEX_0F73_REG_6,
1065 PREFIX_VEX_0F73_REG_7,
1066 PREFIX_VEX_0F74,
1067 PREFIX_VEX_0F75,
1068 PREFIX_VEX_0F76,
1069 PREFIX_VEX_0F77,
1070 PREFIX_VEX_0F7C,
1071 PREFIX_VEX_0F7D,
1072 PREFIX_VEX_0F7E,
1073 PREFIX_VEX_0F7F,
43234a1e
L
1074 PREFIX_VEX_0F90,
1075 PREFIX_VEX_0F91,
1076 PREFIX_VEX_0F92,
1077 PREFIX_VEX_0F93,
1078 PREFIX_VEX_0F98,
1ba585e8 1079 PREFIX_VEX_0F99,
592a252b
L
1080 PREFIX_VEX_0FC2,
1081 PREFIX_VEX_0FC4,
1082 PREFIX_VEX_0FC5,
1083 PREFIX_VEX_0FD0,
1084 PREFIX_VEX_0FD1,
1085 PREFIX_VEX_0FD2,
1086 PREFIX_VEX_0FD3,
1087 PREFIX_VEX_0FD4,
1088 PREFIX_VEX_0FD5,
1089 PREFIX_VEX_0FD6,
1090 PREFIX_VEX_0FD7,
1091 PREFIX_VEX_0FD8,
1092 PREFIX_VEX_0FD9,
1093 PREFIX_VEX_0FDA,
1094 PREFIX_VEX_0FDB,
1095 PREFIX_VEX_0FDC,
1096 PREFIX_VEX_0FDD,
1097 PREFIX_VEX_0FDE,
1098 PREFIX_VEX_0FDF,
1099 PREFIX_VEX_0FE0,
1100 PREFIX_VEX_0FE1,
1101 PREFIX_VEX_0FE2,
1102 PREFIX_VEX_0FE3,
1103 PREFIX_VEX_0FE4,
1104 PREFIX_VEX_0FE5,
1105 PREFIX_VEX_0FE6,
1106 PREFIX_VEX_0FE7,
1107 PREFIX_VEX_0FE8,
1108 PREFIX_VEX_0FE9,
1109 PREFIX_VEX_0FEA,
1110 PREFIX_VEX_0FEB,
1111 PREFIX_VEX_0FEC,
1112 PREFIX_VEX_0FED,
1113 PREFIX_VEX_0FEE,
1114 PREFIX_VEX_0FEF,
1115 PREFIX_VEX_0FF0,
1116 PREFIX_VEX_0FF1,
1117 PREFIX_VEX_0FF2,
1118 PREFIX_VEX_0FF3,
1119 PREFIX_VEX_0FF4,
1120 PREFIX_VEX_0FF5,
1121 PREFIX_VEX_0FF6,
1122 PREFIX_VEX_0FF7,
1123 PREFIX_VEX_0FF8,
1124 PREFIX_VEX_0FF9,
1125 PREFIX_VEX_0FFA,
1126 PREFIX_VEX_0FFB,
1127 PREFIX_VEX_0FFC,
1128 PREFIX_VEX_0FFD,
1129 PREFIX_VEX_0FFE,
1130 PREFIX_VEX_0F3800,
1131 PREFIX_VEX_0F3801,
1132 PREFIX_VEX_0F3802,
1133 PREFIX_VEX_0F3803,
1134 PREFIX_VEX_0F3804,
1135 PREFIX_VEX_0F3805,
1136 PREFIX_VEX_0F3806,
1137 PREFIX_VEX_0F3807,
1138 PREFIX_VEX_0F3808,
1139 PREFIX_VEX_0F3809,
1140 PREFIX_VEX_0F380A,
1141 PREFIX_VEX_0F380B,
1142 PREFIX_VEX_0F380C,
1143 PREFIX_VEX_0F380D,
1144 PREFIX_VEX_0F380E,
1145 PREFIX_VEX_0F380F,
1146 PREFIX_VEX_0F3813,
6c30d220 1147 PREFIX_VEX_0F3816,
592a252b
L
1148 PREFIX_VEX_0F3817,
1149 PREFIX_VEX_0F3818,
1150 PREFIX_VEX_0F3819,
1151 PREFIX_VEX_0F381A,
1152 PREFIX_VEX_0F381C,
1153 PREFIX_VEX_0F381D,
1154 PREFIX_VEX_0F381E,
1155 PREFIX_VEX_0F3820,
1156 PREFIX_VEX_0F3821,
1157 PREFIX_VEX_0F3822,
1158 PREFIX_VEX_0F3823,
1159 PREFIX_VEX_0F3824,
1160 PREFIX_VEX_0F3825,
1161 PREFIX_VEX_0F3828,
1162 PREFIX_VEX_0F3829,
1163 PREFIX_VEX_0F382A,
1164 PREFIX_VEX_0F382B,
1165 PREFIX_VEX_0F382C,
1166 PREFIX_VEX_0F382D,
1167 PREFIX_VEX_0F382E,
1168 PREFIX_VEX_0F382F,
1169 PREFIX_VEX_0F3830,
1170 PREFIX_VEX_0F3831,
1171 PREFIX_VEX_0F3832,
1172 PREFIX_VEX_0F3833,
1173 PREFIX_VEX_0F3834,
1174 PREFIX_VEX_0F3835,
6c30d220 1175 PREFIX_VEX_0F3836,
592a252b
L
1176 PREFIX_VEX_0F3837,
1177 PREFIX_VEX_0F3838,
1178 PREFIX_VEX_0F3839,
1179 PREFIX_VEX_0F383A,
1180 PREFIX_VEX_0F383B,
1181 PREFIX_VEX_0F383C,
1182 PREFIX_VEX_0F383D,
1183 PREFIX_VEX_0F383E,
1184 PREFIX_VEX_0F383F,
1185 PREFIX_VEX_0F3840,
1186 PREFIX_VEX_0F3841,
6c30d220
L
1187 PREFIX_VEX_0F3845,
1188 PREFIX_VEX_0F3846,
1189 PREFIX_VEX_0F3847,
1190 PREFIX_VEX_0F3858,
1191 PREFIX_VEX_0F3859,
1192 PREFIX_VEX_0F385A,
1193 PREFIX_VEX_0F3878,
1194 PREFIX_VEX_0F3879,
1195 PREFIX_VEX_0F388C,
1196 PREFIX_VEX_0F388E,
1197 PREFIX_VEX_0F3890,
1198 PREFIX_VEX_0F3891,
1199 PREFIX_VEX_0F3892,
1200 PREFIX_VEX_0F3893,
592a252b
L
1201 PREFIX_VEX_0F3896,
1202 PREFIX_VEX_0F3897,
1203 PREFIX_VEX_0F3898,
1204 PREFIX_VEX_0F3899,
1205 PREFIX_VEX_0F389A,
1206 PREFIX_VEX_0F389B,
1207 PREFIX_VEX_0F389C,
1208 PREFIX_VEX_0F389D,
1209 PREFIX_VEX_0F389E,
1210 PREFIX_VEX_0F389F,
1211 PREFIX_VEX_0F38A6,
1212 PREFIX_VEX_0F38A7,
1213 PREFIX_VEX_0F38A8,
1214 PREFIX_VEX_0F38A9,
1215 PREFIX_VEX_0F38AA,
1216 PREFIX_VEX_0F38AB,
1217 PREFIX_VEX_0F38AC,
1218 PREFIX_VEX_0F38AD,
1219 PREFIX_VEX_0F38AE,
1220 PREFIX_VEX_0F38AF,
1221 PREFIX_VEX_0F38B6,
1222 PREFIX_VEX_0F38B7,
1223 PREFIX_VEX_0F38B8,
1224 PREFIX_VEX_0F38B9,
1225 PREFIX_VEX_0F38BA,
1226 PREFIX_VEX_0F38BB,
1227 PREFIX_VEX_0F38BC,
1228 PREFIX_VEX_0F38BD,
1229 PREFIX_VEX_0F38BE,
1230 PREFIX_VEX_0F38BF,
1231 PREFIX_VEX_0F38DB,
1232 PREFIX_VEX_0F38DC,
1233 PREFIX_VEX_0F38DD,
1234 PREFIX_VEX_0F38DE,
1235 PREFIX_VEX_0F38DF,
f12dc422
L
1236 PREFIX_VEX_0F38F2,
1237 PREFIX_VEX_0F38F3_REG_1,
1238 PREFIX_VEX_0F38F3_REG_2,
1239 PREFIX_VEX_0F38F3_REG_3,
6c30d220
L
1240 PREFIX_VEX_0F38F5,
1241 PREFIX_VEX_0F38F6,
f12dc422 1242 PREFIX_VEX_0F38F7,
6c30d220
L
1243 PREFIX_VEX_0F3A00,
1244 PREFIX_VEX_0F3A01,
1245 PREFIX_VEX_0F3A02,
592a252b
L
1246 PREFIX_VEX_0F3A04,
1247 PREFIX_VEX_0F3A05,
1248 PREFIX_VEX_0F3A06,
1249 PREFIX_VEX_0F3A08,
1250 PREFIX_VEX_0F3A09,
1251 PREFIX_VEX_0F3A0A,
1252 PREFIX_VEX_0F3A0B,
1253 PREFIX_VEX_0F3A0C,
1254 PREFIX_VEX_0F3A0D,
1255 PREFIX_VEX_0F3A0E,
1256 PREFIX_VEX_0F3A0F,
1257 PREFIX_VEX_0F3A14,
1258 PREFIX_VEX_0F3A15,
1259 PREFIX_VEX_0F3A16,
1260 PREFIX_VEX_0F3A17,
1261 PREFIX_VEX_0F3A18,
1262 PREFIX_VEX_0F3A19,
1263 PREFIX_VEX_0F3A1D,
1264 PREFIX_VEX_0F3A20,
1265 PREFIX_VEX_0F3A21,
1266 PREFIX_VEX_0F3A22,
43234a1e 1267 PREFIX_VEX_0F3A30,
1ba585e8 1268 PREFIX_VEX_0F3A31,
43234a1e 1269 PREFIX_VEX_0F3A32,
1ba585e8 1270 PREFIX_VEX_0F3A33,
6c30d220
L
1271 PREFIX_VEX_0F3A38,
1272 PREFIX_VEX_0F3A39,
592a252b
L
1273 PREFIX_VEX_0F3A40,
1274 PREFIX_VEX_0F3A41,
1275 PREFIX_VEX_0F3A42,
1276 PREFIX_VEX_0F3A44,
6c30d220 1277 PREFIX_VEX_0F3A46,
592a252b
L
1278 PREFIX_VEX_0F3A48,
1279 PREFIX_VEX_0F3A49,
1280 PREFIX_VEX_0F3A4A,
1281 PREFIX_VEX_0F3A4B,
1282 PREFIX_VEX_0F3A4C,
1283 PREFIX_VEX_0F3A5C,
1284 PREFIX_VEX_0F3A5D,
1285 PREFIX_VEX_0F3A5E,
1286 PREFIX_VEX_0F3A5F,
1287 PREFIX_VEX_0F3A60,
1288 PREFIX_VEX_0F3A61,
1289 PREFIX_VEX_0F3A62,
1290 PREFIX_VEX_0F3A63,
1291 PREFIX_VEX_0F3A68,
1292 PREFIX_VEX_0F3A69,
1293 PREFIX_VEX_0F3A6A,
1294 PREFIX_VEX_0F3A6B,
1295 PREFIX_VEX_0F3A6C,
1296 PREFIX_VEX_0F3A6D,
1297 PREFIX_VEX_0F3A6E,
1298 PREFIX_VEX_0F3A6F,
1299 PREFIX_VEX_0F3A78,
1300 PREFIX_VEX_0F3A79,
1301 PREFIX_VEX_0F3A7A,
1302 PREFIX_VEX_0F3A7B,
1303 PREFIX_VEX_0F3A7C,
1304 PREFIX_VEX_0F3A7D,
1305 PREFIX_VEX_0F3A7E,
1306 PREFIX_VEX_0F3A7F,
6c30d220 1307 PREFIX_VEX_0F3ADF,
43234a1e
L
1308 PREFIX_VEX_0F3AF0,
1309
1310 PREFIX_EVEX_0F10,
1311 PREFIX_EVEX_0F11,
1312 PREFIX_EVEX_0F12,
1313 PREFIX_EVEX_0F13,
1314 PREFIX_EVEX_0F14,
1315 PREFIX_EVEX_0F15,
1316 PREFIX_EVEX_0F16,
1317 PREFIX_EVEX_0F17,
1318 PREFIX_EVEX_0F28,
1319 PREFIX_EVEX_0F29,
1320 PREFIX_EVEX_0F2A,
1321 PREFIX_EVEX_0F2B,
1322 PREFIX_EVEX_0F2C,
1323 PREFIX_EVEX_0F2D,
1324 PREFIX_EVEX_0F2E,
1325 PREFIX_EVEX_0F2F,
1326 PREFIX_EVEX_0F51,
90a915bf
IT
1327 PREFIX_EVEX_0F54,
1328 PREFIX_EVEX_0F55,
1329 PREFIX_EVEX_0F56,
1330 PREFIX_EVEX_0F57,
43234a1e
L
1331 PREFIX_EVEX_0F58,
1332 PREFIX_EVEX_0F59,
1333 PREFIX_EVEX_0F5A,
1334 PREFIX_EVEX_0F5B,
1335 PREFIX_EVEX_0F5C,
1336 PREFIX_EVEX_0F5D,
1337 PREFIX_EVEX_0F5E,
1338 PREFIX_EVEX_0F5F,
1ba585e8
IT
1339 PREFIX_EVEX_0F60,
1340 PREFIX_EVEX_0F61,
43234a1e 1341 PREFIX_EVEX_0F62,
1ba585e8
IT
1342 PREFIX_EVEX_0F63,
1343 PREFIX_EVEX_0F64,
1344 PREFIX_EVEX_0F65,
43234a1e 1345 PREFIX_EVEX_0F66,
1ba585e8
IT
1346 PREFIX_EVEX_0F67,
1347 PREFIX_EVEX_0F68,
1348 PREFIX_EVEX_0F69,
43234a1e 1349 PREFIX_EVEX_0F6A,
1ba585e8 1350 PREFIX_EVEX_0F6B,
43234a1e
L
1351 PREFIX_EVEX_0F6C,
1352 PREFIX_EVEX_0F6D,
1353 PREFIX_EVEX_0F6E,
1354 PREFIX_EVEX_0F6F,
1355 PREFIX_EVEX_0F70,
1ba585e8
IT
1356 PREFIX_EVEX_0F71_REG_2,
1357 PREFIX_EVEX_0F71_REG_4,
1358 PREFIX_EVEX_0F71_REG_6,
43234a1e
L
1359 PREFIX_EVEX_0F72_REG_0,
1360 PREFIX_EVEX_0F72_REG_1,
1361 PREFIX_EVEX_0F72_REG_2,
1362 PREFIX_EVEX_0F72_REG_4,
1363 PREFIX_EVEX_0F72_REG_6,
1364 PREFIX_EVEX_0F73_REG_2,
1ba585e8 1365 PREFIX_EVEX_0F73_REG_3,
43234a1e 1366 PREFIX_EVEX_0F73_REG_6,
1ba585e8
IT
1367 PREFIX_EVEX_0F73_REG_7,
1368 PREFIX_EVEX_0F74,
1369 PREFIX_EVEX_0F75,
43234a1e
L
1370 PREFIX_EVEX_0F76,
1371 PREFIX_EVEX_0F78,
1372 PREFIX_EVEX_0F79,
1373 PREFIX_EVEX_0F7A,
1374 PREFIX_EVEX_0F7B,
1375 PREFIX_EVEX_0F7E,
1376 PREFIX_EVEX_0F7F,
1377 PREFIX_EVEX_0FC2,
1ba585e8
IT
1378 PREFIX_EVEX_0FC4,
1379 PREFIX_EVEX_0FC5,
43234a1e 1380 PREFIX_EVEX_0FC6,
1ba585e8 1381 PREFIX_EVEX_0FD1,
43234a1e
L
1382 PREFIX_EVEX_0FD2,
1383 PREFIX_EVEX_0FD3,
1384 PREFIX_EVEX_0FD4,
1ba585e8 1385 PREFIX_EVEX_0FD5,
43234a1e 1386 PREFIX_EVEX_0FD6,
1ba585e8
IT
1387 PREFIX_EVEX_0FD8,
1388 PREFIX_EVEX_0FD9,
1389 PREFIX_EVEX_0FDA,
43234a1e 1390 PREFIX_EVEX_0FDB,
1ba585e8
IT
1391 PREFIX_EVEX_0FDC,
1392 PREFIX_EVEX_0FDD,
1393 PREFIX_EVEX_0FDE,
43234a1e 1394 PREFIX_EVEX_0FDF,
1ba585e8
IT
1395 PREFIX_EVEX_0FE0,
1396 PREFIX_EVEX_0FE1,
43234a1e 1397 PREFIX_EVEX_0FE2,
1ba585e8
IT
1398 PREFIX_EVEX_0FE3,
1399 PREFIX_EVEX_0FE4,
1400 PREFIX_EVEX_0FE5,
43234a1e
L
1401 PREFIX_EVEX_0FE6,
1402 PREFIX_EVEX_0FE7,
1ba585e8
IT
1403 PREFIX_EVEX_0FE8,
1404 PREFIX_EVEX_0FE9,
1405 PREFIX_EVEX_0FEA,
43234a1e 1406 PREFIX_EVEX_0FEB,
1ba585e8
IT
1407 PREFIX_EVEX_0FEC,
1408 PREFIX_EVEX_0FED,
1409 PREFIX_EVEX_0FEE,
43234a1e 1410 PREFIX_EVEX_0FEF,
1ba585e8 1411 PREFIX_EVEX_0FF1,
43234a1e
L
1412 PREFIX_EVEX_0FF2,
1413 PREFIX_EVEX_0FF3,
1414 PREFIX_EVEX_0FF4,
1ba585e8
IT
1415 PREFIX_EVEX_0FF5,
1416 PREFIX_EVEX_0FF6,
1417 PREFIX_EVEX_0FF8,
1418 PREFIX_EVEX_0FF9,
43234a1e
L
1419 PREFIX_EVEX_0FFA,
1420 PREFIX_EVEX_0FFB,
1ba585e8
IT
1421 PREFIX_EVEX_0FFC,
1422 PREFIX_EVEX_0FFD,
43234a1e 1423 PREFIX_EVEX_0FFE,
1ba585e8
IT
1424 PREFIX_EVEX_0F3800,
1425 PREFIX_EVEX_0F3804,
1426 PREFIX_EVEX_0F380B,
43234a1e
L
1427 PREFIX_EVEX_0F380C,
1428 PREFIX_EVEX_0F380D,
1ba585e8 1429 PREFIX_EVEX_0F3810,
43234a1e
L
1430 PREFIX_EVEX_0F3811,
1431 PREFIX_EVEX_0F3812,
1432 PREFIX_EVEX_0F3813,
1433 PREFIX_EVEX_0F3814,
1434 PREFIX_EVEX_0F3815,
1435 PREFIX_EVEX_0F3816,
1436 PREFIX_EVEX_0F3818,
1437 PREFIX_EVEX_0F3819,
1438 PREFIX_EVEX_0F381A,
1439 PREFIX_EVEX_0F381B,
1ba585e8
IT
1440 PREFIX_EVEX_0F381C,
1441 PREFIX_EVEX_0F381D,
43234a1e
L
1442 PREFIX_EVEX_0F381E,
1443 PREFIX_EVEX_0F381F,
1ba585e8 1444 PREFIX_EVEX_0F3820,
43234a1e
L
1445 PREFIX_EVEX_0F3821,
1446 PREFIX_EVEX_0F3822,
1447 PREFIX_EVEX_0F3823,
1448 PREFIX_EVEX_0F3824,
1449 PREFIX_EVEX_0F3825,
1ba585e8 1450 PREFIX_EVEX_0F3826,
43234a1e
L
1451 PREFIX_EVEX_0F3827,
1452 PREFIX_EVEX_0F3828,
1453 PREFIX_EVEX_0F3829,
1454 PREFIX_EVEX_0F382A,
1ba585e8 1455 PREFIX_EVEX_0F382B,
43234a1e
L
1456 PREFIX_EVEX_0F382C,
1457 PREFIX_EVEX_0F382D,
1ba585e8 1458 PREFIX_EVEX_0F3830,
43234a1e
L
1459 PREFIX_EVEX_0F3831,
1460 PREFIX_EVEX_0F3832,
1461 PREFIX_EVEX_0F3833,
1462 PREFIX_EVEX_0F3834,
1463 PREFIX_EVEX_0F3835,
1464 PREFIX_EVEX_0F3836,
1465 PREFIX_EVEX_0F3837,
1ba585e8 1466 PREFIX_EVEX_0F3838,
43234a1e
L
1467 PREFIX_EVEX_0F3839,
1468 PREFIX_EVEX_0F383A,
1469 PREFIX_EVEX_0F383B,
1ba585e8 1470 PREFIX_EVEX_0F383C,
43234a1e 1471 PREFIX_EVEX_0F383D,
1ba585e8 1472 PREFIX_EVEX_0F383E,
43234a1e
L
1473 PREFIX_EVEX_0F383F,
1474 PREFIX_EVEX_0F3840,
1475 PREFIX_EVEX_0F3842,
1476 PREFIX_EVEX_0F3843,
1477 PREFIX_EVEX_0F3844,
1478 PREFIX_EVEX_0F3845,
1479 PREFIX_EVEX_0F3846,
1480 PREFIX_EVEX_0F3847,
1481 PREFIX_EVEX_0F384C,
1482 PREFIX_EVEX_0F384D,
1483 PREFIX_EVEX_0F384E,
1484 PREFIX_EVEX_0F384F,
1485 PREFIX_EVEX_0F3858,
1486 PREFIX_EVEX_0F3859,
1487 PREFIX_EVEX_0F385A,
1488 PREFIX_EVEX_0F385B,
1489 PREFIX_EVEX_0F3864,
1490 PREFIX_EVEX_0F3865,
1ba585e8
IT
1491 PREFIX_EVEX_0F3866,
1492 PREFIX_EVEX_0F3875,
43234a1e
L
1493 PREFIX_EVEX_0F3876,
1494 PREFIX_EVEX_0F3877,
1ba585e8
IT
1495 PREFIX_EVEX_0F3878,
1496 PREFIX_EVEX_0F3879,
1497 PREFIX_EVEX_0F387A,
1498 PREFIX_EVEX_0F387B,
43234a1e 1499 PREFIX_EVEX_0F387C,
1ba585e8 1500 PREFIX_EVEX_0F387D,
43234a1e
L
1501 PREFIX_EVEX_0F387E,
1502 PREFIX_EVEX_0F387F,
14f195c9 1503 PREFIX_EVEX_0F3883,
43234a1e
L
1504 PREFIX_EVEX_0F3888,
1505 PREFIX_EVEX_0F3889,
1506 PREFIX_EVEX_0F388A,
1507 PREFIX_EVEX_0F388B,
1ba585e8 1508 PREFIX_EVEX_0F388D,
43234a1e
L
1509 PREFIX_EVEX_0F3890,
1510 PREFIX_EVEX_0F3891,
1511 PREFIX_EVEX_0F3892,
1512 PREFIX_EVEX_0F3893,
1513 PREFIX_EVEX_0F3896,
1514 PREFIX_EVEX_0F3897,
1515 PREFIX_EVEX_0F3898,
1516 PREFIX_EVEX_0F3899,
1517 PREFIX_EVEX_0F389A,
1518 PREFIX_EVEX_0F389B,
1519 PREFIX_EVEX_0F389C,
1520 PREFIX_EVEX_0F389D,
1521 PREFIX_EVEX_0F389E,
1522 PREFIX_EVEX_0F389F,
1523 PREFIX_EVEX_0F38A0,
1524 PREFIX_EVEX_0F38A1,
1525 PREFIX_EVEX_0F38A2,
1526 PREFIX_EVEX_0F38A3,
1527 PREFIX_EVEX_0F38A6,
1528 PREFIX_EVEX_0F38A7,
1529 PREFIX_EVEX_0F38A8,
1530 PREFIX_EVEX_0F38A9,
1531 PREFIX_EVEX_0F38AA,
1532 PREFIX_EVEX_0F38AB,
1533 PREFIX_EVEX_0F38AC,
1534 PREFIX_EVEX_0F38AD,
1535 PREFIX_EVEX_0F38AE,
1536 PREFIX_EVEX_0F38AF,
2cc1b5aa
IT
1537 PREFIX_EVEX_0F38B4,
1538 PREFIX_EVEX_0F38B5,
43234a1e
L
1539 PREFIX_EVEX_0F38B6,
1540 PREFIX_EVEX_0F38B7,
1541 PREFIX_EVEX_0F38B8,
1542 PREFIX_EVEX_0F38B9,
1543 PREFIX_EVEX_0F38BA,
1544 PREFIX_EVEX_0F38BB,
1545 PREFIX_EVEX_0F38BC,
1546 PREFIX_EVEX_0F38BD,
1547 PREFIX_EVEX_0F38BE,
1548 PREFIX_EVEX_0F38BF,
1549 PREFIX_EVEX_0F38C4,
1550 PREFIX_EVEX_0F38C6_REG_1,
1551 PREFIX_EVEX_0F38C6_REG_2,
1552 PREFIX_EVEX_0F38C6_REG_5,
1553 PREFIX_EVEX_0F38C6_REG_6,
1554 PREFIX_EVEX_0F38C7_REG_1,
1555 PREFIX_EVEX_0F38C7_REG_2,
1556 PREFIX_EVEX_0F38C7_REG_5,
1557 PREFIX_EVEX_0F38C7_REG_6,
1558 PREFIX_EVEX_0F38C8,
1559 PREFIX_EVEX_0F38CA,
1560 PREFIX_EVEX_0F38CB,
1561 PREFIX_EVEX_0F38CC,
1562 PREFIX_EVEX_0F38CD,
1563
1564 PREFIX_EVEX_0F3A00,
1565 PREFIX_EVEX_0F3A01,
1566 PREFIX_EVEX_0F3A03,
1567 PREFIX_EVEX_0F3A04,
1568 PREFIX_EVEX_0F3A05,
1569 PREFIX_EVEX_0F3A08,
1570 PREFIX_EVEX_0F3A09,
1571 PREFIX_EVEX_0F3A0A,
1572 PREFIX_EVEX_0F3A0B,
1ba585e8
IT
1573 PREFIX_EVEX_0F3A0F,
1574 PREFIX_EVEX_0F3A14,
1575 PREFIX_EVEX_0F3A15,
90a915bf 1576 PREFIX_EVEX_0F3A16,
43234a1e
L
1577 PREFIX_EVEX_0F3A17,
1578 PREFIX_EVEX_0F3A18,
1579 PREFIX_EVEX_0F3A19,
1580 PREFIX_EVEX_0F3A1A,
1581 PREFIX_EVEX_0F3A1B,
1582 PREFIX_EVEX_0F3A1D,
1583 PREFIX_EVEX_0F3A1E,
1584 PREFIX_EVEX_0F3A1F,
1ba585e8 1585 PREFIX_EVEX_0F3A20,
43234a1e 1586 PREFIX_EVEX_0F3A21,
90a915bf 1587 PREFIX_EVEX_0F3A22,
43234a1e
L
1588 PREFIX_EVEX_0F3A23,
1589 PREFIX_EVEX_0F3A25,
1590 PREFIX_EVEX_0F3A26,
1591 PREFIX_EVEX_0F3A27,
1592 PREFIX_EVEX_0F3A38,
1593 PREFIX_EVEX_0F3A39,
1594 PREFIX_EVEX_0F3A3A,
1595 PREFIX_EVEX_0F3A3B,
1ba585e8
IT
1596 PREFIX_EVEX_0F3A3E,
1597 PREFIX_EVEX_0F3A3F,
1598 PREFIX_EVEX_0F3A42,
43234a1e 1599 PREFIX_EVEX_0F3A43,
90a915bf
IT
1600 PREFIX_EVEX_0F3A50,
1601 PREFIX_EVEX_0F3A51,
43234a1e 1602 PREFIX_EVEX_0F3A54,
90a915bf
IT
1603 PREFIX_EVEX_0F3A55,
1604 PREFIX_EVEX_0F3A56,
1605 PREFIX_EVEX_0F3A57,
1606 PREFIX_EVEX_0F3A66,
1607 PREFIX_EVEX_0F3A67
51e7da1b 1608};
4e7d34a6 1609
51e7da1b
L
1610enum
1611{
1612 X86_64_06 = 0,
3873ba12
L
1613 X86_64_07,
1614 X86_64_0D,
1615 X86_64_16,
1616 X86_64_17,
1617 X86_64_1E,
1618 X86_64_1F,
1619 X86_64_27,
1620 X86_64_2F,
1621 X86_64_37,
1622 X86_64_3F,
1623 X86_64_60,
1624 X86_64_61,
1625 X86_64_62,
1626 X86_64_63,
1627 X86_64_6D,
1628 X86_64_6F,
1629 X86_64_9A,
1630 X86_64_C4,
1631 X86_64_C5,
1632 X86_64_CE,
1633 X86_64_D4,
1634 X86_64_D5,
a72d2af2
L
1635 X86_64_E8,
1636 X86_64_E9,
3873ba12
L
1637 X86_64_EA,
1638 X86_64_0F01_REG_0,
1639 X86_64_0F01_REG_1,
1640 X86_64_0F01_REG_2,
1641 X86_64_0F01_REG_3
51e7da1b 1642};
4e7d34a6 1643
51e7da1b
L
1644enum
1645{
1646 THREE_BYTE_0F38 = 0,
3873ba12
L
1647 THREE_BYTE_0F3A,
1648 THREE_BYTE_0F7A
51e7da1b 1649};
4e7d34a6 1650
f88c9eb0
SP
1651enum
1652{
5dd85c99
SP
1653 XOP_08 = 0,
1654 XOP_09,
f88c9eb0
SP
1655 XOP_0A
1656};
1657
51e7da1b
L
1658enum
1659{
1660 VEX_0F = 0,
3873ba12
L
1661 VEX_0F38,
1662 VEX_0F3A
51e7da1b 1663};
c0f3af97 1664
43234a1e
L
1665enum
1666{
1667 EVEX_0F = 0,
1668 EVEX_0F38,
1669 EVEX_0F3A
1670};
1671
51e7da1b
L
1672enum
1673{
592a252b
L
1674 VEX_LEN_0F10_P_1 = 0,
1675 VEX_LEN_0F10_P_3,
1676 VEX_LEN_0F11_P_1,
1677 VEX_LEN_0F11_P_3,
1678 VEX_LEN_0F12_P_0_M_0,
1679 VEX_LEN_0F12_P_0_M_1,
1680 VEX_LEN_0F12_P_2,
1681 VEX_LEN_0F13_M_0,
1682 VEX_LEN_0F16_P_0_M_0,
1683 VEX_LEN_0F16_P_0_M_1,
1684 VEX_LEN_0F16_P_2,
1685 VEX_LEN_0F17_M_0,
1686 VEX_LEN_0F2A_P_1,
1687 VEX_LEN_0F2A_P_3,
1688 VEX_LEN_0F2C_P_1,
1689 VEX_LEN_0F2C_P_3,
1690 VEX_LEN_0F2D_P_1,
1691 VEX_LEN_0F2D_P_3,
1692 VEX_LEN_0F2E_P_0,
1693 VEX_LEN_0F2E_P_2,
1694 VEX_LEN_0F2F_P_0,
1695 VEX_LEN_0F2F_P_2,
43234a1e 1696 VEX_LEN_0F41_P_0,
1ba585e8 1697 VEX_LEN_0F41_P_2,
43234a1e 1698 VEX_LEN_0F42_P_0,
1ba585e8 1699 VEX_LEN_0F42_P_2,
43234a1e 1700 VEX_LEN_0F44_P_0,
1ba585e8 1701 VEX_LEN_0F44_P_2,
43234a1e 1702 VEX_LEN_0F45_P_0,
1ba585e8 1703 VEX_LEN_0F45_P_2,
43234a1e 1704 VEX_LEN_0F46_P_0,
1ba585e8 1705 VEX_LEN_0F46_P_2,
43234a1e 1706 VEX_LEN_0F47_P_0,
1ba585e8
IT
1707 VEX_LEN_0F47_P_2,
1708 VEX_LEN_0F4A_P_0,
1709 VEX_LEN_0F4A_P_2,
1710 VEX_LEN_0F4B_P_0,
43234a1e 1711 VEX_LEN_0F4B_P_2,
592a252b
L
1712 VEX_LEN_0F51_P_1,
1713 VEX_LEN_0F51_P_3,
1714 VEX_LEN_0F52_P_1,
1715 VEX_LEN_0F53_P_1,
1716 VEX_LEN_0F58_P_1,
1717 VEX_LEN_0F58_P_3,
1718 VEX_LEN_0F59_P_1,
1719 VEX_LEN_0F59_P_3,
1720 VEX_LEN_0F5A_P_1,
1721 VEX_LEN_0F5A_P_3,
1722 VEX_LEN_0F5C_P_1,
1723 VEX_LEN_0F5C_P_3,
1724 VEX_LEN_0F5D_P_1,
1725 VEX_LEN_0F5D_P_3,
1726 VEX_LEN_0F5E_P_1,
1727 VEX_LEN_0F5E_P_3,
1728 VEX_LEN_0F5F_P_1,
1729 VEX_LEN_0F5F_P_3,
592a252b 1730 VEX_LEN_0F6E_P_2,
592a252b
L
1731 VEX_LEN_0F7E_P_1,
1732 VEX_LEN_0F7E_P_2,
43234a1e 1733 VEX_LEN_0F90_P_0,
1ba585e8 1734 VEX_LEN_0F90_P_2,
43234a1e 1735 VEX_LEN_0F91_P_0,
1ba585e8 1736 VEX_LEN_0F91_P_2,
43234a1e 1737 VEX_LEN_0F92_P_0,
90a915bf 1738 VEX_LEN_0F92_P_2,
1ba585e8 1739 VEX_LEN_0F92_P_3,
43234a1e 1740 VEX_LEN_0F93_P_0,
90a915bf 1741 VEX_LEN_0F93_P_2,
1ba585e8 1742 VEX_LEN_0F93_P_3,
43234a1e 1743 VEX_LEN_0F98_P_0,
1ba585e8
IT
1744 VEX_LEN_0F98_P_2,
1745 VEX_LEN_0F99_P_0,
1746 VEX_LEN_0F99_P_2,
592a252b
L
1747 VEX_LEN_0FAE_R_2_M_0,
1748 VEX_LEN_0FAE_R_3_M_0,
1749 VEX_LEN_0FC2_P_1,
1750 VEX_LEN_0FC2_P_3,
1751 VEX_LEN_0FC4_P_2,
1752 VEX_LEN_0FC5_P_2,
592a252b 1753 VEX_LEN_0FD6_P_2,
592a252b 1754 VEX_LEN_0FF7_P_2,
6c30d220
L
1755 VEX_LEN_0F3816_P_2,
1756 VEX_LEN_0F3819_P_2,
592a252b 1757 VEX_LEN_0F381A_P_2_M_0,
6c30d220 1758 VEX_LEN_0F3836_P_2,
592a252b 1759 VEX_LEN_0F3841_P_2,
6c30d220 1760 VEX_LEN_0F385A_P_2_M_0,
592a252b
L
1761 VEX_LEN_0F38DB_P_2,
1762 VEX_LEN_0F38DC_P_2,
1763 VEX_LEN_0F38DD_P_2,
1764 VEX_LEN_0F38DE_P_2,
1765 VEX_LEN_0F38DF_P_2,
f12dc422
L
1766 VEX_LEN_0F38F2_P_0,
1767 VEX_LEN_0F38F3_R_1_P_0,
1768 VEX_LEN_0F38F3_R_2_P_0,
1769 VEX_LEN_0F38F3_R_3_P_0,
6c30d220
L
1770 VEX_LEN_0F38F5_P_0,
1771 VEX_LEN_0F38F5_P_1,
1772 VEX_LEN_0F38F5_P_3,
1773 VEX_LEN_0F38F6_P_3,
f12dc422 1774 VEX_LEN_0F38F7_P_0,
6c30d220
L
1775 VEX_LEN_0F38F7_P_1,
1776 VEX_LEN_0F38F7_P_2,
1777 VEX_LEN_0F38F7_P_3,
1778 VEX_LEN_0F3A00_P_2,
1779 VEX_LEN_0F3A01_P_2,
592a252b
L
1780 VEX_LEN_0F3A06_P_2,
1781 VEX_LEN_0F3A0A_P_2,
1782 VEX_LEN_0F3A0B_P_2,
592a252b
L
1783 VEX_LEN_0F3A14_P_2,
1784 VEX_LEN_0F3A15_P_2,
1785 VEX_LEN_0F3A16_P_2,
1786 VEX_LEN_0F3A17_P_2,
1787 VEX_LEN_0F3A18_P_2,
1788 VEX_LEN_0F3A19_P_2,
1789 VEX_LEN_0F3A20_P_2,
1790 VEX_LEN_0F3A21_P_2,
1791 VEX_LEN_0F3A22_P_2,
43234a1e 1792 VEX_LEN_0F3A30_P_2,
1ba585e8 1793 VEX_LEN_0F3A31_P_2,
43234a1e 1794 VEX_LEN_0F3A32_P_2,
1ba585e8 1795 VEX_LEN_0F3A33_P_2,
6c30d220
L
1796 VEX_LEN_0F3A38_P_2,
1797 VEX_LEN_0F3A39_P_2,
592a252b 1798 VEX_LEN_0F3A41_P_2,
592a252b 1799 VEX_LEN_0F3A44_P_2,
6c30d220 1800 VEX_LEN_0F3A46_P_2,
592a252b
L
1801 VEX_LEN_0F3A60_P_2,
1802 VEX_LEN_0F3A61_P_2,
1803 VEX_LEN_0F3A62_P_2,
1804 VEX_LEN_0F3A63_P_2,
1805 VEX_LEN_0F3A6A_P_2,
1806 VEX_LEN_0F3A6B_P_2,
1807 VEX_LEN_0F3A6E_P_2,
1808 VEX_LEN_0F3A6F_P_2,
1809 VEX_LEN_0F3A7A_P_2,
1810 VEX_LEN_0F3A7B_P_2,
1811 VEX_LEN_0F3A7E_P_2,
1812 VEX_LEN_0F3A7F_P_2,
1813 VEX_LEN_0F3ADF_P_2,
6c30d220 1814 VEX_LEN_0F3AF0_P_3,
ff688e1f
L
1815 VEX_LEN_0FXOP_08_CC,
1816 VEX_LEN_0FXOP_08_CD,
1817 VEX_LEN_0FXOP_08_CE,
1818 VEX_LEN_0FXOP_08_CF,
1819 VEX_LEN_0FXOP_08_EC,
1820 VEX_LEN_0FXOP_08_ED,
1821 VEX_LEN_0FXOP_08_EE,
1822 VEX_LEN_0FXOP_08_EF,
592a252b
L
1823 VEX_LEN_0FXOP_09_80,
1824 VEX_LEN_0FXOP_09_81
51e7da1b 1825};
c0f3af97 1826
9e30b8e0
L
1827enum
1828{
592a252b
L
1829 VEX_W_0F10_P_0 = 0,
1830 VEX_W_0F10_P_1,
1831 VEX_W_0F10_P_2,
1832 VEX_W_0F10_P_3,
1833 VEX_W_0F11_P_0,
1834 VEX_W_0F11_P_1,
1835 VEX_W_0F11_P_2,
1836 VEX_W_0F11_P_3,
1837 VEX_W_0F12_P_0_M_0,
1838 VEX_W_0F12_P_0_M_1,
1839 VEX_W_0F12_P_1,
1840 VEX_W_0F12_P_2,
1841 VEX_W_0F12_P_3,
1842 VEX_W_0F13_M_0,
1843 VEX_W_0F14,
1844 VEX_W_0F15,
1845 VEX_W_0F16_P_0_M_0,
1846 VEX_W_0F16_P_0_M_1,
1847 VEX_W_0F16_P_1,
1848 VEX_W_0F16_P_2,
1849 VEX_W_0F17_M_0,
1850 VEX_W_0F28,
1851 VEX_W_0F29,
1852 VEX_W_0F2B_M_0,
1853 VEX_W_0F2E_P_0,
1854 VEX_W_0F2E_P_2,
1855 VEX_W_0F2F_P_0,
1856 VEX_W_0F2F_P_2,
43234a1e 1857 VEX_W_0F41_P_0_LEN_1,
1ba585e8 1858 VEX_W_0F41_P_2_LEN_1,
43234a1e 1859 VEX_W_0F42_P_0_LEN_1,
1ba585e8 1860 VEX_W_0F42_P_2_LEN_1,
43234a1e 1861 VEX_W_0F44_P_0_LEN_0,
1ba585e8 1862 VEX_W_0F44_P_2_LEN_0,
43234a1e 1863 VEX_W_0F45_P_0_LEN_1,
1ba585e8 1864 VEX_W_0F45_P_2_LEN_1,
43234a1e 1865 VEX_W_0F46_P_0_LEN_1,
1ba585e8 1866 VEX_W_0F46_P_2_LEN_1,
43234a1e 1867 VEX_W_0F47_P_0_LEN_1,
1ba585e8
IT
1868 VEX_W_0F47_P_2_LEN_1,
1869 VEX_W_0F4A_P_0_LEN_1,
1870 VEX_W_0F4A_P_2_LEN_1,
1871 VEX_W_0F4B_P_0_LEN_1,
43234a1e 1872 VEX_W_0F4B_P_2_LEN_1,
592a252b
L
1873 VEX_W_0F50_M_0,
1874 VEX_W_0F51_P_0,
1875 VEX_W_0F51_P_1,
1876 VEX_W_0F51_P_2,
1877 VEX_W_0F51_P_3,
1878 VEX_W_0F52_P_0,
1879 VEX_W_0F52_P_1,
1880 VEX_W_0F53_P_0,
1881 VEX_W_0F53_P_1,
1882 VEX_W_0F58_P_0,
1883 VEX_W_0F58_P_1,
1884 VEX_W_0F58_P_2,
1885 VEX_W_0F58_P_3,
1886 VEX_W_0F59_P_0,
1887 VEX_W_0F59_P_1,
1888 VEX_W_0F59_P_2,
1889 VEX_W_0F59_P_3,
1890 VEX_W_0F5A_P_0,
1891 VEX_W_0F5A_P_1,
1892 VEX_W_0F5A_P_3,
1893 VEX_W_0F5B_P_0,
1894 VEX_W_0F5B_P_1,
1895 VEX_W_0F5B_P_2,
1896 VEX_W_0F5C_P_0,
1897 VEX_W_0F5C_P_1,
1898 VEX_W_0F5C_P_2,
1899 VEX_W_0F5C_P_3,
1900 VEX_W_0F5D_P_0,
1901 VEX_W_0F5D_P_1,
1902 VEX_W_0F5D_P_2,
1903 VEX_W_0F5D_P_3,
1904 VEX_W_0F5E_P_0,
1905 VEX_W_0F5E_P_1,
1906 VEX_W_0F5E_P_2,
1907 VEX_W_0F5E_P_3,
1908 VEX_W_0F5F_P_0,
1909 VEX_W_0F5F_P_1,
1910 VEX_W_0F5F_P_2,
1911 VEX_W_0F5F_P_3,
1912 VEX_W_0F60_P_2,
1913 VEX_W_0F61_P_2,
1914 VEX_W_0F62_P_2,
1915 VEX_W_0F63_P_2,
1916 VEX_W_0F64_P_2,
1917 VEX_W_0F65_P_2,
1918 VEX_W_0F66_P_2,
1919 VEX_W_0F67_P_2,
1920 VEX_W_0F68_P_2,
1921 VEX_W_0F69_P_2,
1922 VEX_W_0F6A_P_2,
1923 VEX_W_0F6B_P_2,
1924 VEX_W_0F6C_P_2,
1925 VEX_W_0F6D_P_2,
1926 VEX_W_0F6F_P_1,
1927 VEX_W_0F6F_P_2,
1928 VEX_W_0F70_P_1,
1929 VEX_W_0F70_P_2,
1930 VEX_W_0F70_P_3,
1931 VEX_W_0F71_R_2_P_2,
1932 VEX_W_0F71_R_4_P_2,
1933 VEX_W_0F71_R_6_P_2,
1934 VEX_W_0F72_R_2_P_2,
1935 VEX_W_0F72_R_4_P_2,
1936 VEX_W_0F72_R_6_P_2,
1937 VEX_W_0F73_R_2_P_2,
1938 VEX_W_0F73_R_3_P_2,
1939 VEX_W_0F73_R_6_P_2,
1940 VEX_W_0F73_R_7_P_2,
1941 VEX_W_0F74_P_2,
1942 VEX_W_0F75_P_2,
1943 VEX_W_0F76_P_2,
1944 VEX_W_0F77_P_0,
1945 VEX_W_0F7C_P_2,
1946 VEX_W_0F7C_P_3,
1947 VEX_W_0F7D_P_2,
1948 VEX_W_0F7D_P_3,
1949 VEX_W_0F7E_P_1,
1950 VEX_W_0F7F_P_1,
1951 VEX_W_0F7F_P_2,
43234a1e 1952 VEX_W_0F90_P_0_LEN_0,
1ba585e8 1953 VEX_W_0F90_P_2_LEN_0,
43234a1e 1954 VEX_W_0F91_P_0_LEN_0,
1ba585e8 1955 VEX_W_0F91_P_2_LEN_0,
43234a1e 1956 VEX_W_0F92_P_0_LEN_0,
90a915bf 1957 VEX_W_0F92_P_2_LEN_0,
1ba585e8 1958 VEX_W_0F92_P_3_LEN_0,
43234a1e 1959 VEX_W_0F93_P_0_LEN_0,
90a915bf 1960 VEX_W_0F93_P_2_LEN_0,
1ba585e8 1961 VEX_W_0F93_P_3_LEN_0,
43234a1e 1962 VEX_W_0F98_P_0_LEN_0,
1ba585e8
IT
1963 VEX_W_0F98_P_2_LEN_0,
1964 VEX_W_0F99_P_0_LEN_0,
1965 VEX_W_0F99_P_2_LEN_0,
592a252b
L
1966 VEX_W_0FAE_R_2_M_0,
1967 VEX_W_0FAE_R_3_M_0,
1968 VEX_W_0FC2_P_0,
1969 VEX_W_0FC2_P_1,
1970 VEX_W_0FC2_P_2,
1971 VEX_W_0FC2_P_3,
1972 VEX_W_0FC4_P_2,
1973 VEX_W_0FC5_P_2,
1974 VEX_W_0FD0_P_2,
1975 VEX_W_0FD0_P_3,
1976 VEX_W_0FD1_P_2,
1977 VEX_W_0FD2_P_2,
1978 VEX_W_0FD3_P_2,
1979 VEX_W_0FD4_P_2,
1980 VEX_W_0FD5_P_2,
1981 VEX_W_0FD6_P_2,
1982 VEX_W_0FD7_P_2_M_1,
1983 VEX_W_0FD8_P_2,
1984 VEX_W_0FD9_P_2,
1985 VEX_W_0FDA_P_2,
1986 VEX_W_0FDB_P_2,
1987 VEX_W_0FDC_P_2,
1988 VEX_W_0FDD_P_2,
1989 VEX_W_0FDE_P_2,
1990 VEX_W_0FDF_P_2,
1991 VEX_W_0FE0_P_2,
1992 VEX_W_0FE1_P_2,
1993 VEX_W_0FE2_P_2,
1994 VEX_W_0FE3_P_2,
1995 VEX_W_0FE4_P_2,
1996 VEX_W_0FE5_P_2,
1997 VEX_W_0FE6_P_1,
1998 VEX_W_0FE6_P_2,
1999 VEX_W_0FE6_P_3,
2000 VEX_W_0FE7_P_2_M_0,
2001 VEX_W_0FE8_P_2,
2002 VEX_W_0FE9_P_2,
2003 VEX_W_0FEA_P_2,
2004 VEX_W_0FEB_P_2,
2005 VEX_W_0FEC_P_2,
2006 VEX_W_0FED_P_2,
2007 VEX_W_0FEE_P_2,
2008 VEX_W_0FEF_P_2,
2009 VEX_W_0FF0_P_3_M_0,
2010 VEX_W_0FF1_P_2,
2011 VEX_W_0FF2_P_2,
2012 VEX_W_0FF3_P_2,
2013 VEX_W_0FF4_P_2,
2014 VEX_W_0FF5_P_2,
2015 VEX_W_0FF6_P_2,
2016 VEX_W_0FF7_P_2,
2017 VEX_W_0FF8_P_2,
2018 VEX_W_0FF9_P_2,
2019 VEX_W_0FFA_P_2,
2020 VEX_W_0FFB_P_2,
2021 VEX_W_0FFC_P_2,
2022 VEX_W_0FFD_P_2,
2023 VEX_W_0FFE_P_2,
2024 VEX_W_0F3800_P_2,
2025 VEX_W_0F3801_P_2,
2026 VEX_W_0F3802_P_2,
2027 VEX_W_0F3803_P_2,
2028 VEX_W_0F3804_P_2,
2029 VEX_W_0F3805_P_2,
2030 VEX_W_0F3806_P_2,
2031 VEX_W_0F3807_P_2,
2032 VEX_W_0F3808_P_2,
2033 VEX_W_0F3809_P_2,
2034 VEX_W_0F380A_P_2,
2035 VEX_W_0F380B_P_2,
2036 VEX_W_0F380C_P_2,
2037 VEX_W_0F380D_P_2,
2038 VEX_W_0F380E_P_2,
2039 VEX_W_0F380F_P_2,
6c30d220 2040 VEX_W_0F3816_P_2,
592a252b 2041 VEX_W_0F3817_P_2,
6c30d220
L
2042 VEX_W_0F3818_P_2,
2043 VEX_W_0F3819_P_2,
592a252b
L
2044 VEX_W_0F381A_P_2_M_0,
2045 VEX_W_0F381C_P_2,
2046 VEX_W_0F381D_P_2,
2047 VEX_W_0F381E_P_2,
2048 VEX_W_0F3820_P_2,
2049 VEX_W_0F3821_P_2,
2050 VEX_W_0F3822_P_2,
2051 VEX_W_0F3823_P_2,
2052 VEX_W_0F3824_P_2,
2053 VEX_W_0F3825_P_2,
2054 VEX_W_0F3828_P_2,
2055 VEX_W_0F3829_P_2,
2056 VEX_W_0F382A_P_2_M_0,
2057 VEX_W_0F382B_P_2,
2058 VEX_W_0F382C_P_2_M_0,
2059 VEX_W_0F382D_P_2_M_0,
2060 VEX_W_0F382E_P_2_M_0,
2061 VEX_W_0F382F_P_2_M_0,
2062 VEX_W_0F3830_P_2,
2063 VEX_W_0F3831_P_2,
2064 VEX_W_0F3832_P_2,
2065 VEX_W_0F3833_P_2,
2066 VEX_W_0F3834_P_2,
2067 VEX_W_0F3835_P_2,
6c30d220 2068 VEX_W_0F3836_P_2,
592a252b
L
2069 VEX_W_0F3837_P_2,
2070 VEX_W_0F3838_P_2,
2071 VEX_W_0F3839_P_2,
2072 VEX_W_0F383A_P_2,
2073 VEX_W_0F383B_P_2,
2074 VEX_W_0F383C_P_2,
2075 VEX_W_0F383D_P_2,
2076 VEX_W_0F383E_P_2,
2077 VEX_W_0F383F_P_2,
2078 VEX_W_0F3840_P_2,
2079 VEX_W_0F3841_P_2,
6c30d220
L
2080 VEX_W_0F3846_P_2,
2081 VEX_W_0F3858_P_2,
2082 VEX_W_0F3859_P_2,
2083 VEX_W_0F385A_P_2_M_0,
2084 VEX_W_0F3878_P_2,
2085 VEX_W_0F3879_P_2,
592a252b
L
2086 VEX_W_0F38DB_P_2,
2087 VEX_W_0F38DC_P_2,
2088 VEX_W_0F38DD_P_2,
2089 VEX_W_0F38DE_P_2,
2090 VEX_W_0F38DF_P_2,
6c30d220
L
2091 VEX_W_0F3A00_P_2,
2092 VEX_W_0F3A01_P_2,
2093 VEX_W_0F3A02_P_2,
592a252b
L
2094 VEX_W_0F3A04_P_2,
2095 VEX_W_0F3A05_P_2,
2096 VEX_W_0F3A06_P_2,
2097 VEX_W_0F3A08_P_2,
2098 VEX_W_0F3A09_P_2,
2099 VEX_W_0F3A0A_P_2,
2100 VEX_W_0F3A0B_P_2,
2101 VEX_W_0F3A0C_P_2,
2102 VEX_W_0F3A0D_P_2,
2103 VEX_W_0F3A0E_P_2,
2104 VEX_W_0F3A0F_P_2,
2105 VEX_W_0F3A14_P_2,
2106 VEX_W_0F3A15_P_2,
2107 VEX_W_0F3A18_P_2,
2108 VEX_W_0F3A19_P_2,
2109 VEX_W_0F3A20_P_2,
2110 VEX_W_0F3A21_P_2,
43234a1e 2111 VEX_W_0F3A30_P_2_LEN_0,
1ba585e8 2112 VEX_W_0F3A31_P_2_LEN_0,
43234a1e 2113 VEX_W_0F3A32_P_2_LEN_0,
1ba585e8 2114 VEX_W_0F3A33_P_2_LEN_0,
6c30d220
L
2115 VEX_W_0F3A38_P_2,
2116 VEX_W_0F3A39_P_2,
592a252b
L
2117 VEX_W_0F3A40_P_2,
2118 VEX_W_0F3A41_P_2,
2119 VEX_W_0F3A42_P_2,
2120 VEX_W_0F3A44_P_2,
6c30d220 2121 VEX_W_0F3A46_P_2,
592a252b
L
2122 VEX_W_0F3A48_P_2,
2123 VEX_W_0F3A49_P_2,
2124 VEX_W_0F3A4A_P_2,
2125 VEX_W_0F3A4B_P_2,
2126 VEX_W_0F3A4C_P_2,
2127 VEX_W_0F3A60_P_2,
2128 VEX_W_0F3A61_P_2,
2129 VEX_W_0F3A62_P_2,
2130 VEX_W_0F3A63_P_2,
43234a1e
L
2131 VEX_W_0F3ADF_P_2,
2132
2133 EVEX_W_0F10_P_0,
2134 EVEX_W_0F10_P_1_M_0,
2135 EVEX_W_0F10_P_1_M_1,
2136 EVEX_W_0F10_P_2,
2137 EVEX_W_0F10_P_3_M_0,
2138 EVEX_W_0F10_P_3_M_1,
2139 EVEX_W_0F11_P_0,
2140 EVEX_W_0F11_P_1_M_0,
2141 EVEX_W_0F11_P_1_M_1,
2142 EVEX_W_0F11_P_2,
2143 EVEX_W_0F11_P_3_M_0,
2144 EVEX_W_0F11_P_3_M_1,
2145 EVEX_W_0F12_P_0_M_0,
2146 EVEX_W_0F12_P_0_M_1,
2147 EVEX_W_0F12_P_1,
2148 EVEX_W_0F12_P_2,
2149 EVEX_W_0F12_P_3,
2150 EVEX_W_0F13_P_0,
2151 EVEX_W_0F13_P_2,
2152 EVEX_W_0F14_P_0,
2153 EVEX_W_0F14_P_2,
2154 EVEX_W_0F15_P_0,
2155 EVEX_W_0F15_P_2,
2156 EVEX_W_0F16_P_0_M_0,
2157 EVEX_W_0F16_P_0_M_1,
2158 EVEX_W_0F16_P_1,
2159 EVEX_W_0F16_P_2,
2160 EVEX_W_0F17_P_0,
2161 EVEX_W_0F17_P_2,
2162 EVEX_W_0F28_P_0,
2163 EVEX_W_0F28_P_2,
2164 EVEX_W_0F29_P_0,
2165 EVEX_W_0F29_P_2,
2166 EVEX_W_0F2A_P_1,
2167 EVEX_W_0F2A_P_3,
2168 EVEX_W_0F2B_P_0,
2169 EVEX_W_0F2B_P_2,
2170 EVEX_W_0F2E_P_0,
2171 EVEX_W_0F2E_P_2,
2172 EVEX_W_0F2F_P_0,
2173 EVEX_W_0F2F_P_2,
2174 EVEX_W_0F51_P_0,
2175 EVEX_W_0F51_P_1,
2176 EVEX_W_0F51_P_2,
2177 EVEX_W_0F51_P_3,
90a915bf
IT
2178 EVEX_W_0F54_P_0,
2179 EVEX_W_0F54_P_2,
2180 EVEX_W_0F55_P_0,
2181 EVEX_W_0F55_P_2,
2182 EVEX_W_0F56_P_0,
2183 EVEX_W_0F56_P_2,
2184 EVEX_W_0F57_P_0,
2185 EVEX_W_0F57_P_2,
43234a1e
L
2186 EVEX_W_0F58_P_0,
2187 EVEX_W_0F58_P_1,
2188 EVEX_W_0F58_P_2,
2189 EVEX_W_0F58_P_3,
2190 EVEX_W_0F59_P_0,
2191 EVEX_W_0F59_P_1,
2192 EVEX_W_0F59_P_2,
2193 EVEX_W_0F59_P_3,
2194 EVEX_W_0F5A_P_0,
2195 EVEX_W_0F5A_P_1,
2196 EVEX_W_0F5A_P_2,
2197 EVEX_W_0F5A_P_3,
2198 EVEX_W_0F5B_P_0,
2199 EVEX_W_0F5B_P_1,
2200 EVEX_W_0F5B_P_2,
2201 EVEX_W_0F5C_P_0,
2202 EVEX_W_0F5C_P_1,
2203 EVEX_W_0F5C_P_2,
2204 EVEX_W_0F5C_P_3,
2205 EVEX_W_0F5D_P_0,
2206 EVEX_W_0F5D_P_1,
2207 EVEX_W_0F5D_P_2,
2208 EVEX_W_0F5D_P_3,
2209 EVEX_W_0F5E_P_0,
2210 EVEX_W_0F5E_P_1,
2211 EVEX_W_0F5E_P_2,
2212 EVEX_W_0F5E_P_3,
2213 EVEX_W_0F5F_P_0,
2214 EVEX_W_0F5F_P_1,
2215 EVEX_W_0F5F_P_2,
2216 EVEX_W_0F5F_P_3,
2217 EVEX_W_0F62_P_2,
2218 EVEX_W_0F66_P_2,
2219 EVEX_W_0F6A_P_2,
1ba585e8 2220 EVEX_W_0F6B_P_2,
43234a1e
L
2221 EVEX_W_0F6C_P_2,
2222 EVEX_W_0F6D_P_2,
2223 EVEX_W_0F6E_P_2,
2224 EVEX_W_0F6F_P_1,
2225 EVEX_W_0F6F_P_2,
1ba585e8 2226 EVEX_W_0F6F_P_3,
43234a1e
L
2227 EVEX_W_0F70_P_2,
2228 EVEX_W_0F72_R_2_P_2,
2229 EVEX_W_0F72_R_6_P_2,
2230 EVEX_W_0F73_R_2_P_2,
2231 EVEX_W_0F73_R_6_P_2,
2232 EVEX_W_0F76_P_2,
2233 EVEX_W_0F78_P_0,
90a915bf 2234 EVEX_W_0F78_P_2,
43234a1e 2235 EVEX_W_0F79_P_0,
90a915bf 2236 EVEX_W_0F79_P_2,
43234a1e 2237 EVEX_W_0F7A_P_1,
90a915bf 2238 EVEX_W_0F7A_P_2,
43234a1e
L
2239 EVEX_W_0F7A_P_3,
2240 EVEX_W_0F7B_P_1,
90a915bf 2241 EVEX_W_0F7B_P_2,
43234a1e
L
2242 EVEX_W_0F7B_P_3,
2243 EVEX_W_0F7E_P_1,
2244 EVEX_W_0F7E_P_2,
2245 EVEX_W_0F7F_P_1,
2246 EVEX_W_0F7F_P_2,
1ba585e8 2247 EVEX_W_0F7F_P_3,
43234a1e
L
2248 EVEX_W_0FC2_P_0,
2249 EVEX_W_0FC2_P_1,
2250 EVEX_W_0FC2_P_2,
2251 EVEX_W_0FC2_P_3,
2252 EVEX_W_0FC6_P_0,
2253 EVEX_W_0FC6_P_2,
2254 EVEX_W_0FD2_P_2,
2255 EVEX_W_0FD3_P_2,
2256 EVEX_W_0FD4_P_2,
2257 EVEX_W_0FD6_P_2,
2258 EVEX_W_0FE6_P_1,
2259 EVEX_W_0FE6_P_2,
2260 EVEX_W_0FE6_P_3,
2261 EVEX_W_0FE7_P_2,
2262 EVEX_W_0FF2_P_2,
2263 EVEX_W_0FF3_P_2,
2264 EVEX_W_0FF4_P_2,
2265 EVEX_W_0FFA_P_2,
2266 EVEX_W_0FFB_P_2,
2267 EVEX_W_0FFE_P_2,
2268 EVEX_W_0F380C_P_2,
2269 EVEX_W_0F380D_P_2,
1ba585e8
IT
2270 EVEX_W_0F3810_P_1,
2271 EVEX_W_0F3810_P_2,
43234a1e 2272 EVEX_W_0F3811_P_1,
1ba585e8 2273 EVEX_W_0F3811_P_2,
43234a1e 2274 EVEX_W_0F3812_P_1,
1ba585e8 2275 EVEX_W_0F3812_P_2,
43234a1e
L
2276 EVEX_W_0F3813_P_1,
2277 EVEX_W_0F3813_P_2,
2278 EVEX_W_0F3814_P_1,
2279 EVEX_W_0F3815_P_1,
2280 EVEX_W_0F3818_P_2,
2281 EVEX_W_0F3819_P_2,
2282 EVEX_W_0F381A_P_2,
2283 EVEX_W_0F381B_P_2,
2284 EVEX_W_0F381E_P_2,
2285 EVEX_W_0F381F_P_2,
1ba585e8 2286 EVEX_W_0F3820_P_1,
43234a1e
L
2287 EVEX_W_0F3821_P_1,
2288 EVEX_W_0F3822_P_1,
2289 EVEX_W_0F3823_P_1,
2290 EVEX_W_0F3824_P_1,
2291 EVEX_W_0F3825_P_1,
2292 EVEX_W_0F3825_P_2,
1ba585e8
IT
2293 EVEX_W_0F3826_P_1,
2294 EVEX_W_0F3826_P_2,
2295 EVEX_W_0F3828_P_1,
43234a1e 2296 EVEX_W_0F3828_P_2,
1ba585e8 2297 EVEX_W_0F3829_P_1,
43234a1e
L
2298 EVEX_W_0F3829_P_2,
2299 EVEX_W_0F382A_P_1,
2300 EVEX_W_0F382A_P_2,
1ba585e8
IT
2301 EVEX_W_0F382B_P_2,
2302 EVEX_W_0F3830_P_1,
43234a1e
L
2303 EVEX_W_0F3831_P_1,
2304 EVEX_W_0F3832_P_1,
2305 EVEX_W_0F3833_P_1,
2306 EVEX_W_0F3834_P_1,
2307 EVEX_W_0F3835_P_1,
2308 EVEX_W_0F3835_P_2,
2309 EVEX_W_0F3837_P_2,
90a915bf
IT
2310 EVEX_W_0F3838_P_1,
2311 EVEX_W_0F3839_P_1,
43234a1e
L
2312 EVEX_W_0F383A_P_1,
2313 EVEX_W_0F3840_P_2,
2314 EVEX_W_0F3858_P_2,
2315 EVEX_W_0F3859_P_2,
2316 EVEX_W_0F385A_P_2,
2317 EVEX_W_0F385B_P_2,
1ba585e8
IT
2318 EVEX_W_0F3866_P_2,
2319 EVEX_W_0F3875_P_2,
2320 EVEX_W_0F3878_P_2,
2321 EVEX_W_0F3879_P_2,
2322 EVEX_W_0F387A_P_2,
2323 EVEX_W_0F387B_P_2,
2324 EVEX_W_0F387D_P_2,
14f195c9 2325 EVEX_W_0F3883_P_2,
1ba585e8 2326 EVEX_W_0F388D_P_2,
43234a1e
L
2327 EVEX_W_0F3891_P_2,
2328 EVEX_W_0F3893_P_2,
2329 EVEX_W_0F38A1_P_2,
2330 EVEX_W_0F38A3_P_2,
2331 EVEX_W_0F38C7_R_1_P_2,
2332 EVEX_W_0F38C7_R_2_P_2,
2333 EVEX_W_0F38C7_R_5_P_2,
2334 EVEX_W_0F38C7_R_6_P_2,
2335
2336 EVEX_W_0F3A00_P_2,
2337 EVEX_W_0F3A01_P_2,
2338 EVEX_W_0F3A04_P_2,
2339 EVEX_W_0F3A05_P_2,
2340 EVEX_W_0F3A08_P_2,
2341 EVEX_W_0F3A09_P_2,
2342 EVEX_W_0F3A0A_P_2,
2343 EVEX_W_0F3A0B_P_2,
90a915bf 2344 EVEX_W_0F3A16_P_2,
43234a1e
L
2345 EVEX_W_0F3A18_P_2,
2346 EVEX_W_0F3A19_P_2,
2347 EVEX_W_0F3A1A_P_2,
2348 EVEX_W_0F3A1B_P_2,
2349 EVEX_W_0F3A1D_P_2,
2350 EVEX_W_0F3A21_P_2,
90a915bf 2351 EVEX_W_0F3A22_P_2,
43234a1e
L
2352 EVEX_W_0F3A23_P_2,
2353 EVEX_W_0F3A38_P_2,
2354 EVEX_W_0F3A39_P_2,
2355 EVEX_W_0F3A3A_P_2,
2356 EVEX_W_0F3A3B_P_2,
1ba585e8
IT
2357 EVEX_W_0F3A3E_P_2,
2358 EVEX_W_0F3A3F_P_2,
2359 EVEX_W_0F3A42_P_2,
90a915bf
IT
2360 EVEX_W_0F3A43_P_2,
2361 EVEX_W_0F3A50_P_2,
2362 EVEX_W_0F3A51_P_2,
2363 EVEX_W_0F3A56_P_2,
2364 EVEX_W_0F3A57_P_2,
2365 EVEX_W_0F3A66_P_2,
2366 EVEX_W_0F3A67_P_2
9e30b8e0
L
2367};
2368
26ca5450 2369typedef void (*op_rtn) (int bytemode, int sizeflag);
252b5132
RH
2370
2371struct dis386 {
2da11e11 2372 const char *name;
ce518a5f
L
2373 struct
2374 {
2375 op_rtn rtn;
2376 int bytemode;
2377 } op[MAX_OPERANDS];
bf890a93 2378 unsigned int prefix_requirement;
252b5132
RH
2379};
2380
2381/* Upper case letters in the instruction names here are macros.
2382 'A' => print 'b' if no register operands or suffix_always is true
2383 'B' => print 'b' if suffix_always is true
9306ca4a 2384 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
98b528ac 2385 size prefix
ed7841b3 2386 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
98b528ac 2387 suffix_always is true
252b5132 2388 'E' => print 'e' if 32-bit form of jcxz
3ffd33cf 2389 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
52fd6d94 2390 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
5dd0794d 2391 'H' => print ",pt" or ",pn" branch hint
9306ca4a 2392 'I' => honor following macro letter even in Intel mode (implemented only
98b528ac 2393 for some of the macro letters)
9306ca4a 2394 'J' => print 'l'
42903f7f 2395 'K' => print 'd' or 'q' if rex prefix is present.
252b5132 2396 'L' => print 'l' if suffix_always is true
9d141669 2397 'M' => print 'r' if intel_mnemonic is false.
252b5132 2398 'N' => print 'n' if instruction has no wait "prefix"
a35ca55a 2399 'O' => print 'd' or 'o' (or 'q' in Intel mode)
52b15da3 2400 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
98b528ac
L
2401 or suffix_always is true. print 'q' if rex prefix is present.
2402 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
2403 is true
a35ca55a 2404 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
52b15da3 2405 'S' => print 'w', 'l' or 'q' if suffix_always is true
a72d2af2
L
2406 'T' => print 'q' in 64bit mode if instruction has no operand size
2407 prefix and behave as 'P' otherwise
2408 'U' => print 'q' in 64bit mode if instruction has no operand size
2409 prefix and behave as 'Q' otherwise
2410 'V' => print 'q' in 64bit mode if instruction has no operand size
2411 prefix and behave as 'S' otherwise
a35ca55a 2412 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
9306ca4a 2413 'X' => print 's', 'd' depending on data16 prefix (for XMM)
8a72226a
L
2414 'Y' => 'q' if instruction has an REX 64bit overwrite prefix and
2415 suffix_always is true.
6dd5059a 2416 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
9d141669 2417 '!' => change condition from true to false or from false to true.
98b528ac 2418 '%' => add 1 upper case letter to the macro.
a72d2af2
L
2419 '^' => print 'w' or 'l' depending on operand size prefix or
2420 suffix_always is true (lcall/ljmp).
5db04b09
L
2421 '@' => print 'q' for Intel64 ISA, 'w' or 'q' for AMD64 ISA depending
2422 on operand size prefix.
98b528ac
L
2423
2424 2 upper case letter macros:
04d824a4
JB
2425 "XY" => print 'x' or 'y' if suffix_always is true or no register
2426 operands and no broadcast.
2427 "XZ" => print 'x', 'y', or 'z' if suffix_always is true or no
2428 register operands and no broadcast.
4b06377f
L
2429 "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
2430 "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
98b528ac 2431 or suffix_always is true
4b06377f
L
2432 "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
2433 "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
2434 "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
6c30d220 2435 "LW" => print 'd', 'q' depending on the VEX.W bit
4b4c407a
L
2436 "LP" => print 'w' or 'l' ('d' in Intel mode) if instruction has
2437 an operand size prefix, or suffix_always is true. print
2438 'q' if rex prefix is present.
52b15da3 2439
6439fc28
AM
2440 Many of the above letters print nothing in Intel mode. See "putop"
2441 for the details.
52b15da3 2442
6439fc28 2443 Braces '{' and '}', and vertical bars '|', indicate alternative
7c52e0e8 2444 mnemonic strings for AT&T and Intel. */
252b5132 2445
6439fc28 2446static const struct dis386 dis386[] = {
252b5132 2447 /* 00 */
bf890a93
IT
2448 { "addB", { Ebh1, Gb }, 0 },
2449 { "addS", { Evh1, Gv }, 0 },
2450 { "addB", { Gb, EbS }, 0 },
2451 { "addS", { Gv, EvS }, 0 },
2452 { "addB", { AL, Ib }, 0 },
2453 { "addS", { eAX, Iv }, 0 },
4e7d34a6
L
2454 { X86_64_TABLE (X86_64_06) },
2455 { X86_64_TABLE (X86_64_07) },
252b5132 2456 /* 08 */
bf890a93
IT
2457 { "orB", { Ebh1, Gb }, 0 },
2458 { "orS", { Evh1, Gv }, 0 },
2459 { "orB", { Gb, EbS }, 0 },
2460 { "orS", { Gv, EvS }, 0 },
2461 { "orB", { AL, Ib }, 0 },
2462 { "orS", { eAX, Iv }, 0 },
4e7d34a6 2463 { X86_64_TABLE (X86_64_0D) },
592d1631 2464 { Bad_Opcode }, /* 0x0f extended opcode escape */
252b5132 2465 /* 10 */
bf890a93
IT
2466 { "adcB", { Ebh1, Gb }, 0 },
2467 { "adcS", { Evh1, Gv }, 0 },
2468 { "adcB", { Gb, EbS }, 0 },
2469 { "adcS", { Gv, EvS }, 0 },
2470 { "adcB", { AL, Ib }, 0 },
2471 { "adcS", { eAX, Iv }, 0 },
4e7d34a6
L
2472 { X86_64_TABLE (X86_64_16) },
2473 { X86_64_TABLE (X86_64_17) },
252b5132 2474 /* 18 */
bf890a93
IT
2475 { "sbbB", { Ebh1, Gb }, 0 },
2476 { "sbbS", { Evh1, Gv }, 0 },
2477 { "sbbB", { Gb, EbS }, 0 },
2478 { "sbbS", { Gv, EvS }, 0 },
2479 { "sbbB", { AL, Ib }, 0 },
2480 { "sbbS", { eAX, Iv }, 0 },
4e7d34a6
L
2481 { X86_64_TABLE (X86_64_1E) },
2482 { X86_64_TABLE (X86_64_1F) },
252b5132 2483 /* 20 */
bf890a93
IT
2484 { "andB", { Ebh1, Gb }, 0 },
2485 { "andS", { Evh1, Gv }, 0 },
2486 { "andB", { Gb, EbS }, 0 },
2487 { "andS", { Gv, EvS }, 0 },
2488 { "andB", { AL, Ib }, 0 },
2489 { "andS", { eAX, Iv }, 0 },
592d1631 2490 { Bad_Opcode }, /* SEG ES prefix */
4e7d34a6 2491 { X86_64_TABLE (X86_64_27) },
252b5132 2492 /* 28 */
bf890a93
IT
2493 { "subB", { Ebh1, Gb }, 0 },
2494 { "subS", { Evh1, Gv }, 0 },
2495 { "subB", { Gb, EbS }, 0 },
2496 { "subS", { Gv, EvS }, 0 },
2497 { "subB", { AL, Ib }, 0 },
2498 { "subS", { eAX, Iv }, 0 },
592d1631 2499 { Bad_Opcode }, /* SEG CS prefix */
4e7d34a6 2500 { X86_64_TABLE (X86_64_2F) },
252b5132 2501 /* 30 */
bf890a93
IT
2502 { "xorB", { Ebh1, Gb }, 0 },
2503 { "xorS", { Evh1, Gv }, 0 },
2504 { "xorB", { Gb, EbS }, 0 },
2505 { "xorS", { Gv, EvS }, 0 },
2506 { "xorB", { AL, Ib }, 0 },
2507 { "xorS", { eAX, Iv }, 0 },
592d1631 2508 { Bad_Opcode }, /* SEG SS prefix */
4e7d34a6 2509 { X86_64_TABLE (X86_64_37) },
252b5132 2510 /* 38 */
bf890a93
IT
2511 { "cmpB", { Eb, Gb }, 0 },
2512 { "cmpS", { Ev, Gv }, 0 },
2513 { "cmpB", { Gb, EbS }, 0 },
2514 { "cmpS", { Gv, EvS }, 0 },
2515 { "cmpB", { AL, Ib }, 0 },
2516 { "cmpS", { eAX, Iv }, 0 },
592d1631 2517 { Bad_Opcode }, /* SEG DS prefix */
4e7d34a6 2518 { X86_64_TABLE (X86_64_3F) },
252b5132 2519 /* 40 */
bf890a93
IT
2520 { "inc{S|}", { RMeAX }, 0 },
2521 { "inc{S|}", { RMeCX }, 0 },
2522 { "inc{S|}", { RMeDX }, 0 },
2523 { "inc{S|}", { RMeBX }, 0 },
2524 { "inc{S|}", { RMeSP }, 0 },
2525 { "inc{S|}", { RMeBP }, 0 },
2526 { "inc{S|}", { RMeSI }, 0 },
2527 { "inc{S|}", { RMeDI }, 0 },
252b5132 2528 /* 48 */
bf890a93
IT
2529 { "dec{S|}", { RMeAX }, 0 },
2530 { "dec{S|}", { RMeCX }, 0 },
2531 { "dec{S|}", { RMeDX }, 0 },
2532 { "dec{S|}", { RMeBX }, 0 },
2533 { "dec{S|}", { RMeSP }, 0 },
2534 { "dec{S|}", { RMeBP }, 0 },
2535 { "dec{S|}", { RMeSI }, 0 },
2536 { "dec{S|}", { RMeDI }, 0 },
252b5132 2537 /* 50 */
bf890a93
IT
2538 { "pushV", { RMrAX }, 0 },
2539 { "pushV", { RMrCX }, 0 },
2540 { "pushV", { RMrDX }, 0 },
2541 { "pushV", { RMrBX }, 0 },
2542 { "pushV", { RMrSP }, 0 },
2543 { "pushV", { RMrBP }, 0 },
2544 { "pushV", { RMrSI }, 0 },
2545 { "pushV", { RMrDI }, 0 },
252b5132 2546 /* 58 */
bf890a93
IT
2547 { "popV", { RMrAX }, 0 },
2548 { "popV", { RMrCX }, 0 },
2549 { "popV", { RMrDX }, 0 },
2550 { "popV", { RMrBX }, 0 },
2551 { "popV", { RMrSP }, 0 },
2552 { "popV", { RMrBP }, 0 },
2553 { "popV", { RMrSI }, 0 },
2554 { "popV", { RMrDI }, 0 },
252b5132 2555 /* 60 */
4e7d34a6
L
2556 { X86_64_TABLE (X86_64_60) },
2557 { X86_64_TABLE (X86_64_61) },
2558 { X86_64_TABLE (X86_64_62) },
2559 { X86_64_TABLE (X86_64_63) },
592d1631
L
2560 { Bad_Opcode }, /* seg fs */
2561 { Bad_Opcode }, /* seg gs */
2562 { Bad_Opcode }, /* op size prefix */
2563 { Bad_Opcode }, /* adr size prefix */
252b5132 2564 /* 68 */
bf890a93
IT
2565 { "pushT", { sIv }, 0 },
2566 { "imulS", { Gv, Ev, Iv }, 0 },
2567 { "pushT", { sIbT }, 0 },
2568 { "imulS", { Gv, Ev, sIb }, 0 },
2569 { "ins{b|}", { Ybr, indirDX }, 0 },
4e7d34a6 2570 { X86_64_TABLE (X86_64_6D) },
bf890a93 2571 { "outs{b|}", { indirDXr, Xb }, 0 },
4e7d34a6 2572 { X86_64_TABLE (X86_64_6F) },
252b5132 2573 /* 70 */
bf890a93
IT
2574 { "joH", { Jb, BND, cond_jump_flag }, 0 },
2575 { "jnoH", { Jb, BND, cond_jump_flag }, 0 },
2576 { "jbH", { Jb, BND, cond_jump_flag }, 0 },
2577 { "jaeH", { Jb, BND, cond_jump_flag }, 0 },
2578 { "jeH", { Jb, BND, cond_jump_flag }, 0 },
2579 { "jneH", { Jb, BND, cond_jump_flag }, 0 },
2580 { "jbeH", { Jb, BND, cond_jump_flag }, 0 },
2581 { "jaH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2582 /* 78 */
bf890a93
IT
2583 { "jsH", { Jb, BND, cond_jump_flag }, 0 },
2584 { "jnsH", { Jb, BND, cond_jump_flag }, 0 },
2585 { "jpH", { Jb, BND, cond_jump_flag }, 0 },
2586 { "jnpH", { Jb, BND, cond_jump_flag }, 0 },
2587 { "jlH", { Jb, BND, cond_jump_flag }, 0 },
2588 { "jgeH", { Jb, BND, cond_jump_flag }, 0 },
2589 { "jleH", { Jb, BND, cond_jump_flag }, 0 },
2590 { "jgH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2591 /* 80 */
1ceb70f8
L
2592 { REG_TABLE (REG_80) },
2593 { REG_TABLE (REG_81) },
592d1631 2594 { Bad_Opcode },
1ceb70f8 2595 { REG_TABLE (REG_82) },
bf890a93
IT
2596 { "testB", { Eb, Gb }, 0 },
2597 { "testS", { Ev, Gv }, 0 },
2598 { "xchgB", { Ebh2, Gb }, 0 },
2599 { "xchgS", { Evh2, Gv }, 0 },
252b5132 2600 /* 88 */
bf890a93
IT
2601 { "movB", { Ebh3, Gb }, 0 },
2602 { "movS", { Evh3, Gv }, 0 },
2603 { "movB", { Gb, EbS }, 0 },
2604 { "movS", { Gv, EvS }, 0 },
2605 { "movD", { Sv, Sw }, 0 },
1ceb70f8 2606 { MOD_TABLE (MOD_8D) },
bf890a93 2607 { "movD", { Sw, Sv }, 0 },
1ceb70f8 2608 { REG_TABLE (REG_8F) },
252b5132 2609 /* 90 */
1ceb70f8 2610 { PREFIX_TABLE (PREFIX_90) },
bf890a93
IT
2611 { "xchgS", { RMeCX, eAX }, 0 },
2612 { "xchgS", { RMeDX, eAX }, 0 },
2613 { "xchgS", { RMeBX, eAX }, 0 },
2614 { "xchgS", { RMeSP, eAX }, 0 },
2615 { "xchgS", { RMeBP, eAX }, 0 },
2616 { "xchgS", { RMeSI, eAX }, 0 },
2617 { "xchgS", { RMeDI, eAX }, 0 },
252b5132 2618 /* 98 */
bf890a93
IT
2619 { "cW{t|}R", { XX }, 0 },
2620 { "cR{t|}O", { XX }, 0 },
4e7d34a6 2621 { X86_64_TABLE (X86_64_9A) },
592d1631 2622 { Bad_Opcode }, /* fwait */
bf890a93
IT
2623 { "pushfT", { XX }, 0 },
2624 { "popfT", { XX }, 0 },
2625 { "sahf", { XX }, 0 },
2626 { "lahf", { XX }, 0 },
252b5132 2627 /* a0 */
bf890a93
IT
2628 { "mov%LB", { AL, Ob }, 0 },
2629 { "mov%LS", { eAX, Ov }, 0 },
2630 { "mov%LB", { Ob, AL }, 0 },
2631 { "mov%LS", { Ov, eAX }, 0 },
2632 { "movs{b|}", { Ybr, Xb }, 0 },
2633 { "movs{R|}", { Yvr, Xv }, 0 },
2634 { "cmps{b|}", { Xb, Yb }, 0 },
2635 { "cmps{R|}", { Xv, Yv }, 0 },
252b5132 2636 /* a8 */
bf890a93
IT
2637 { "testB", { AL, Ib }, 0 },
2638 { "testS", { eAX, Iv }, 0 },
2639 { "stosB", { Ybr, AL }, 0 },
2640 { "stosS", { Yvr, eAX }, 0 },
2641 { "lodsB", { ALr, Xb }, 0 },
2642 { "lodsS", { eAXr, Xv }, 0 },
2643 { "scasB", { AL, Yb }, 0 },
2644 { "scasS", { eAX, Yv }, 0 },
252b5132 2645 /* b0 */
bf890a93
IT
2646 { "movB", { RMAL, Ib }, 0 },
2647 { "movB", { RMCL, Ib }, 0 },
2648 { "movB", { RMDL, Ib }, 0 },
2649 { "movB", { RMBL, Ib }, 0 },
2650 { "movB", { RMAH, Ib }, 0 },
2651 { "movB", { RMCH, Ib }, 0 },
2652 { "movB", { RMDH, Ib }, 0 },
2653 { "movB", { RMBH, Ib }, 0 },
252b5132 2654 /* b8 */
bf890a93
IT
2655 { "mov%LV", { RMeAX, Iv64 }, 0 },
2656 { "mov%LV", { RMeCX, Iv64 }, 0 },
2657 { "mov%LV", { RMeDX, Iv64 }, 0 },
2658 { "mov%LV", { RMeBX, Iv64 }, 0 },
2659 { "mov%LV", { RMeSP, Iv64 }, 0 },
2660 { "mov%LV", { RMeBP, Iv64 }, 0 },
2661 { "mov%LV", { RMeSI, Iv64 }, 0 },
2662 { "mov%LV", { RMeDI, Iv64 }, 0 },
252b5132 2663 /* c0 */
1ceb70f8
L
2664 { REG_TABLE (REG_C0) },
2665 { REG_TABLE (REG_C1) },
bf890a93
IT
2666 { "retT", { Iw, BND }, 0 },
2667 { "retT", { BND }, 0 },
4e7d34a6
L
2668 { X86_64_TABLE (X86_64_C4) },
2669 { X86_64_TABLE (X86_64_C5) },
1ceb70f8
L
2670 { REG_TABLE (REG_C6) },
2671 { REG_TABLE (REG_C7) },
252b5132 2672 /* c8 */
bf890a93
IT
2673 { "enterT", { Iw, Ib }, 0 },
2674 { "leaveT", { XX }, 0 },
2675 { "Jret{|f}P", { Iw }, 0 },
2676 { "Jret{|f}P", { XX }, 0 },
2677 { "int3", { XX }, 0 },
2678 { "int", { Ib }, 0 },
4e7d34a6 2679 { X86_64_TABLE (X86_64_CE) },
bf890a93 2680 { "iret%LP", { XX }, 0 },
252b5132 2681 /* d0 */
1ceb70f8
L
2682 { REG_TABLE (REG_D0) },
2683 { REG_TABLE (REG_D1) },
2684 { REG_TABLE (REG_D2) },
2685 { REG_TABLE (REG_D3) },
4e7d34a6
L
2686 { X86_64_TABLE (X86_64_D4) },
2687 { X86_64_TABLE (X86_64_D5) },
592d1631 2688 { Bad_Opcode },
bf890a93 2689 { "xlat", { DSBX }, 0 },
252b5132
RH
2690 /* d8 */
2691 { FLOAT },
2692 { FLOAT },
2693 { FLOAT },
2694 { FLOAT },
2695 { FLOAT },
2696 { FLOAT },
2697 { FLOAT },
2698 { FLOAT },
2699 /* e0 */
bf890a93
IT
2700 { "loopneFH", { Jb, XX, loop_jcxz_flag }, 0 },
2701 { "loopeFH", { Jb, XX, loop_jcxz_flag }, 0 },
2702 { "loopFH", { Jb, XX, loop_jcxz_flag }, 0 },
2703 { "jEcxzH", { Jb, XX, loop_jcxz_flag }, 0 },
2704 { "inB", { AL, Ib }, 0 },
2705 { "inG", { zAX, Ib }, 0 },
2706 { "outB", { Ib, AL }, 0 },
2707 { "outG", { Ib, zAX }, 0 },
252b5132 2708 /* e8 */
a72d2af2
L
2709 { X86_64_TABLE (X86_64_E8) },
2710 { X86_64_TABLE (X86_64_E9) },
4e7d34a6 2711 { X86_64_TABLE (X86_64_EA) },
bf890a93
IT
2712 { "jmp", { Jb, BND }, 0 },
2713 { "inB", { AL, indirDX }, 0 },
2714 { "inG", { zAX, indirDX }, 0 },
2715 { "outB", { indirDX, AL }, 0 },
2716 { "outG", { indirDX, zAX }, 0 },
252b5132 2717 /* f0 */
592d1631 2718 { Bad_Opcode }, /* lock prefix */
bf890a93 2719 { "icebp", { XX }, 0 },
592d1631
L
2720 { Bad_Opcode }, /* repne */
2721 { Bad_Opcode }, /* repz */
bf890a93
IT
2722 { "hlt", { XX }, 0 },
2723 { "cmc", { XX }, 0 },
1ceb70f8
L
2724 { REG_TABLE (REG_F6) },
2725 { REG_TABLE (REG_F7) },
252b5132 2726 /* f8 */
bf890a93
IT
2727 { "clc", { XX }, 0 },
2728 { "stc", { XX }, 0 },
2729 { "cli", { XX }, 0 },
2730 { "sti", { XX }, 0 },
2731 { "cld", { XX }, 0 },
2732 { "std", { XX }, 0 },
1ceb70f8
L
2733 { REG_TABLE (REG_FE) },
2734 { REG_TABLE (REG_FF) },
252b5132
RH
2735};
2736
6439fc28 2737static const struct dis386 dis386_twobyte[] = {
252b5132 2738 /* 00 */
1ceb70f8
L
2739 { REG_TABLE (REG_0F00 ) },
2740 { REG_TABLE (REG_0F01 ) },
bf890a93
IT
2741 { "larS", { Gv, Ew }, 0 },
2742 { "lslS", { Gv, Ew }, 0 },
592d1631 2743 { Bad_Opcode },
bf890a93
IT
2744 { "syscall", { XX }, 0 },
2745 { "clts", { XX }, 0 },
2746 { "sysret%LP", { XX }, 0 },
252b5132 2747 /* 08 */
bf890a93
IT
2748 { "invd", { XX }, 0 },
2749 { "wbinvd", { XX }, 0 },
592d1631 2750 { Bad_Opcode },
bf890a93 2751 { "ud2", { XX }, 0 },
592d1631 2752 { Bad_Opcode },
b5b1fc4f 2753 { REG_TABLE (REG_0F0D) },
bf890a93
IT
2754 { "femms", { XX }, 0 },
2755 { "", { MX, EM, OPSUF }, 0 }, /* See OP_3DNowSuffix. */
252b5132 2756 /* 10 */
1ceb70f8
L
2757 { PREFIX_TABLE (PREFIX_0F10) },
2758 { PREFIX_TABLE (PREFIX_0F11) },
2759 { PREFIX_TABLE (PREFIX_0F12) },
2760 { MOD_TABLE (MOD_0F13) },
507bd325
L
2761 { "unpcklpX", { XM, EXx }, PREFIX_OPCODE },
2762 { "unpckhpX", { XM, EXx }, PREFIX_OPCODE },
1ceb70f8
L
2763 { PREFIX_TABLE (PREFIX_0F16) },
2764 { MOD_TABLE (MOD_0F17) },
252b5132 2765 /* 18 */
1ceb70f8 2766 { REG_TABLE (REG_0F18) },
bf890a93 2767 { "nopQ", { Ev }, 0 },
7e8b059b
L
2768 { PREFIX_TABLE (PREFIX_0F1A) },
2769 { PREFIX_TABLE (PREFIX_0F1B) },
bf890a93
IT
2770 { "nopQ", { Ev }, 0 },
2771 { "nopQ", { Ev }, 0 },
2772 { "nopQ", { Ev }, 0 },
2773 { "nopQ", { Ev }, 0 },
252b5132 2774 /* 20 */
bf890a93
IT
2775 { "movZ", { Rm, Cm }, 0 },
2776 { "movZ", { Rm, Dm }, 0 },
2777 { "movZ", { Cm, Rm }, 0 },
2778 { "movZ", { Dm, Rm }, 0 },
1ceb70f8 2779 { MOD_TABLE (MOD_0F24) },
592d1631 2780 { Bad_Opcode },
1ceb70f8 2781 { MOD_TABLE (MOD_0F26) },
592d1631 2782 { Bad_Opcode },
252b5132 2783 /* 28 */
507bd325
L
2784 { "movapX", { XM, EXx }, PREFIX_OPCODE },
2785 { "movapX", { EXxS, XM }, PREFIX_OPCODE },
1ceb70f8
L
2786 { PREFIX_TABLE (PREFIX_0F2A) },
2787 { PREFIX_TABLE (PREFIX_0F2B) },
2788 { PREFIX_TABLE (PREFIX_0F2C) },
2789 { PREFIX_TABLE (PREFIX_0F2D) },
2790 { PREFIX_TABLE (PREFIX_0F2E) },
2791 { PREFIX_TABLE (PREFIX_0F2F) },
252b5132 2792 /* 30 */
bf890a93
IT
2793 { "wrmsr", { XX }, 0 },
2794 { "rdtsc", { XX }, 0 },
2795 { "rdmsr", { XX }, 0 },
2796 { "rdpmc", { XX }, 0 },
2797 { "sysenter", { XX }, 0 },
2798 { "sysexit", { XX }, 0 },
592d1631 2799 { Bad_Opcode },
bf890a93 2800 { "getsec", { XX }, 0 },
252b5132 2801 /* 38 */
507bd325 2802 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F38, PREFIX_OPCODE) },
592d1631 2803 { Bad_Opcode },
507bd325 2804 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F3A, PREFIX_OPCODE) },
592d1631
L
2805 { Bad_Opcode },
2806 { Bad_Opcode },
2807 { Bad_Opcode },
2808 { Bad_Opcode },
2809 { Bad_Opcode },
252b5132 2810 /* 40 */
bf890a93
IT
2811 { "cmovoS", { Gv, Ev }, 0 },
2812 { "cmovnoS", { Gv, Ev }, 0 },
2813 { "cmovbS", { Gv, Ev }, 0 },
2814 { "cmovaeS", { Gv, Ev }, 0 },
2815 { "cmoveS", { Gv, Ev }, 0 },
2816 { "cmovneS", { Gv, Ev }, 0 },
2817 { "cmovbeS", { Gv, Ev }, 0 },
2818 { "cmovaS", { Gv, Ev }, 0 },
252b5132 2819 /* 48 */
bf890a93
IT
2820 { "cmovsS", { Gv, Ev }, 0 },
2821 { "cmovnsS", { Gv, Ev }, 0 },
2822 { "cmovpS", { Gv, Ev }, 0 },
2823 { "cmovnpS", { Gv, Ev }, 0 },
2824 { "cmovlS", { Gv, Ev }, 0 },
2825 { "cmovgeS", { Gv, Ev }, 0 },
2826 { "cmovleS", { Gv, Ev }, 0 },
2827 { "cmovgS", { Gv, Ev }, 0 },
252b5132 2828 /* 50 */
75c135a8 2829 { MOD_TABLE (MOD_0F51) },
1ceb70f8
L
2830 { PREFIX_TABLE (PREFIX_0F51) },
2831 { PREFIX_TABLE (PREFIX_0F52) },
2832 { PREFIX_TABLE (PREFIX_0F53) },
507bd325
L
2833 { "andpX", { XM, EXx }, PREFIX_OPCODE },
2834 { "andnpX", { XM, EXx }, PREFIX_OPCODE },
2835 { "orpX", { XM, EXx }, PREFIX_OPCODE },
2836 { "xorpX", { XM, EXx }, PREFIX_OPCODE },
252b5132 2837 /* 58 */
1ceb70f8
L
2838 { PREFIX_TABLE (PREFIX_0F58) },
2839 { PREFIX_TABLE (PREFIX_0F59) },
2840 { PREFIX_TABLE (PREFIX_0F5A) },
2841 { PREFIX_TABLE (PREFIX_0F5B) },
2842 { PREFIX_TABLE (PREFIX_0F5C) },
2843 { PREFIX_TABLE (PREFIX_0F5D) },
2844 { PREFIX_TABLE (PREFIX_0F5E) },
2845 { PREFIX_TABLE (PREFIX_0F5F) },
252b5132 2846 /* 60 */
1ceb70f8
L
2847 { PREFIX_TABLE (PREFIX_0F60) },
2848 { PREFIX_TABLE (PREFIX_0F61) },
2849 { PREFIX_TABLE (PREFIX_0F62) },
507bd325
L
2850 { "packsswb", { MX, EM }, PREFIX_OPCODE },
2851 { "pcmpgtb", { MX, EM }, PREFIX_OPCODE },
2852 { "pcmpgtw", { MX, EM }, PREFIX_OPCODE },
2853 { "pcmpgtd", { MX, EM }, PREFIX_OPCODE },
2854 { "packuswb", { MX, EM }, PREFIX_OPCODE },
252b5132 2855 /* 68 */
507bd325
L
2856 { "punpckhbw", { MX, EM }, PREFIX_OPCODE },
2857 { "punpckhwd", { MX, EM }, PREFIX_OPCODE },
2858 { "punpckhdq", { MX, EM }, PREFIX_OPCODE },
2859 { "packssdw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
2860 { PREFIX_TABLE (PREFIX_0F6C) },
2861 { PREFIX_TABLE (PREFIX_0F6D) },
507bd325 2862 { "movK", { MX, Edq }, PREFIX_OPCODE },
1ceb70f8 2863 { PREFIX_TABLE (PREFIX_0F6F) },
252b5132 2864 /* 70 */
1ceb70f8
L
2865 { PREFIX_TABLE (PREFIX_0F70) },
2866 { REG_TABLE (REG_0F71) },
2867 { REG_TABLE (REG_0F72) },
2868 { REG_TABLE (REG_0F73) },
507bd325
L
2869 { "pcmpeqb", { MX, EM }, PREFIX_OPCODE },
2870 { "pcmpeqw", { MX, EM }, PREFIX_OPCODE },
2871 { "pcmpeqd", { MX, EM }, PREFIX_OPCODE },
2872 { "emms", { XX }, PREFIX_OPCODE },
252b5132 2873 /* 78 */
1ceb70f8
L
2874 { PREFIX_TABLE (PREFIX_0F78) },
2875 { PREFIX_TABLE (PREFIX_0F79) },
4e7d34a6 2876 { THREE_BYTE_TABLE (THREE_BYTE_0F7A) },
592d1631 2877 { Bad_Opcode },
1ceb70f8
L
2878 { PREFIX_TABLE (PREFIX_0F7C) },
2879 { PREFIX_TABLE (PREFIX_0F7D) },
2880 { PREFIX_TABLE (PREFIX_0F7E) },
2881 { PREFIX_TABLE (PREFIX_0F7F) },
252b5132 2882 /* 80 */
bf890a93
IT
2883 { "joH", { Jv, BND, cond_jump_flag }, 0 },
2884 { "jnoH", { Jv, BND, cond_jump_flag }, 0 },
2885 { "jbH", { Jv, BND, cond_jump_flag }, 0 },
2886 { "jaeH", { Jv, BND, cond_jump_flag }, 0 },
2887 { "jeH", { Jv, BND, cond_jump_flag }, 0 },
2888 { "jneH", { Jv, BND, cond_jump_flag }, 0 },
2889 { "jbeH", { Jv, BND, cond_jump_flag }, 0 },
2890 { "jaH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 2891 /* 88 */
bf890a93
IT
2892 { "jsH", { Jv, BND, cond_jump_flag }, 0 },
2893 { "jnsH", { Jv, BND, cond_jump_flag }, 0 },
2894 { "jpH", { Jv, BND, cond_jump_flag }, 0 },
2895 { "jnpH", { Jv, BND, cond_jump_flag }, 0 },
2896 { "jlH", { Jv, BND, cond_jump_flag }, 0 },
2897 { "jgeH", { Jv, BND, cond_jump_flag }, 0 },
2898 { "jleH", { Jv, BND, cond_jump_flag }, 0 },
2899 { "jgH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 2900 /* 90 */
bf890a93
IT
2901 { "seto", { Eb }, 0 },
2902 { "setno", { Eb }, 0 },
2903 { "setb", { Eb }, 0 },
2904 { "setae", { Eb }, 0 },
2905 { "sete", { Eb }, 0 },
2906 { "setne", { Eb }, 0 },
2907 { "setbe", { Eb }, 0 },
2908 { "seta", { Eb }, 0 },
252b5132 2909 /* 98 */
bf890a93
IT
2910 { "sets", { Eb }, 0 },
2911 { "setns", { Eb }, 0 },
2912 { "setp", { Eb }, 0 },
2913 { "setnp", { Eb }, 0 },
2914 { "setl", { Eb }, 0 },
2915 { "setge", { Eb }, 0 },
2916 { "setle", { Eb }, 0 },
2917 { "setg", { Eb }, 0 },
252b5132 2918 /* a0 */
bf890a93
IT
2919 { "pushT", { fs }, 0 },
2920 { "popT", { fs }, 0 },
2921 { "cpuid", { XX }, 0 },
2922 { "btS", { Ev, Gv }, 0 },
2923 { "shldS", { Ev, Gv, Ib }, 0 },
2924 { "shldS", { Ev, Gv, CL }, 0 },
1ceb70f8
L
2925 { REG_TABLE (REG_0FA6) },
2926 { REG_TABLE (REG_0FA7) },
252b5132 2927 /* a8 */
bf890a93
IT
2928 { "pushT", { gs }, 0 },
2929 { "popT", { gs }, 0 },
2930 { "rsm", { XX }, 0 },
2931 { "btsS", { Evh1, Gv }, 0 },
2932 { "shrdS", { Ev, Gv, Ib }, 0 },
2933 { "shrdS", { Ev, Gv, CL }, 0 },
1ceb70f8 2934 { REG_TABLE (REG_0FAE) },
bf890a93 2935 { "imulS", { Gv, Ev }, 0 },
252b5132 2936 /* b0 */
bf890a93
IT
2937 { "cmpxchgB", { Ebh1, Gb }, 0 },
2938 { "cmpxchgS", { Evh1, Gv }, 0 },
1ceb70f8 2939 { MOD_TABLE (MOD_0FB2) },
bf890a93 2940 { "btrS", { Evh1, Gv }, 0 },
1ceb70f8
L
2941 { MOD_TABLE (MOD_0FB4) },
2942 { MOD_TABLE (MOD_0FB5) },
bf890a93
IT
2943 { "movz{bR|x}", { Gv, Eb }, 0 },
2944 { "movz{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movzww ! */
252b5132 2945 /* b8 */
1ceb70f8 2946 { PREFIX_TABLE (PREFIX_0FB8) },
bf890a93 2947 { "ud1", { XX }, 0 },
1ceb70f8 2948 { REG_TABLE (REG_0FBA) },
bf890a93 2949 { "btcS", { Evh1, Gv }, 0 },
f12dc422 2950 { PREFIX_TABLE (PREFIX_0FBC) },
1ceb70f8 2951 { PREFIX_TABLE (PREFIX_0FBD) },
bf890a93
IT
2952 { "movs{bR|x}", { Gv, Eb }, 0 },
2953 { "movs{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movsww ! */
252b5132 2954 /* c0 */
bf890a93
IT
2955 { "xaddB", { Ebh1, Gb }, 0 },
2956 { "xaddS", { Evh1, Gv }, 0 },
1ceb70f8 2957 { PREFIX_TABLE (PREFIX_0FC2) },
4ee52178 2958 { PREFIX_TABLE (PREFIX_0FC3) },
507bd325
L
2959 { "pinsrw", { MX, Edqw, Ib }, PREFIX_OPCODE },
2960 { "pextrw", { Gdq, MS, Ib }, PREFIX_OPCODE },
2961 { "shufpX", { XM, EXx, Ib }, PREFIX_OPCODE },
1ceb70f8 2962 { REG_TABLE (REG_0FC7) },
252b5132 2963 /* c8 */
bf890a93
IT
2964 { "bswap", { RMeAX }, 0 },
2965 { "bswap", { RMeCX }, 0 },
2966 { "bswap", { RMeDX }, 0 },
2967 { "bswap", { RMeBX }, 0 },
2968 { "bswap", { RMeSP }, 0 },
2969 { "bswap", { RMeBP }, 0 },
2970 { "bswap", { RMeSI }, 0 },
2971 { "bswap", { RMeDI }, 0 },
252b5132 2972 /* d0 */
1ceb70f8 2973 { PREFIX_TABLE (PREFIX_0FD0) },
507bd325
L
2974 { "psrlw", { MX, EM }, PREFIX_OPCODE },
2975 { "psrld", { MX, EM }, PREFIX_OPCODE },
2976 { "psrlq", { MX, EM }, PREFIX_OPCODE },
2977 { "paddq", { MX, EM }, PREFIX_OPCODE },
2978 { "pmullw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 2979 { PREFIX_TABLE (PREFIX_0FD6) },
75c135a8 2980 { MOD_TABLE (MOD_0FD7) },
252b5132 2981 /* d8 */
507bd325
L
2982 { "psubusb", { MX, EM }, PREFIX_OPCODE },
2983 { "psubusw", { MX, EM }, PREFIX_OPCODE },
2984 { "pminub", { MX, EM }, PREFIX_OPCODE },
2985 { "pand", { MX, EM }, PREFIX_OPCODE },
2986 { "paddusb", { MX, EM }, PREFIX_OPCODE },
2987 { "paddusw", { MX, EM }, PREFIX_OPCODE },
2988 { "pmaxub", { MX, EM }, PREFIX_OPCODE },
2989 { "pandn", { MX, EM }, PREFIX_OPCODE },
252b5132 2990 /* e0 */
507bd325
L
2991 { "pavgb", { MX, EM }, PREFIX_OPCODE },
2992 { "psraw", { MX, EM }, PREFIX_OPCODE },
2993 { "psrad", { MX, EM }, PREFIX_OPCODE },
2994 { "pavgw", { MX, EM }, PREFIX_OPCODE },
2995 { "pmulhuw", { MX, EM }, PREFIX_OPCODE },
2996 { "pmulhw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
2997 { PREFIX_TABLE (PREFIX_0FE6) },
2998 { PREFIX_TABLE (PREFIX_0FE7) },
252b5132 2999 /* e8 */
507bd325
L
3000 { "psubsb", { MX, EM }, PREFIX_OPCODE },
3001 { "psubsw", { MX, EM }, PREFIX_OPCODE },
3002 { "pminsw", { MX, EM }, PREFIX_OPCODE },
3003 { "por", { MX, EM }, PREFIX_OPCODE },
3004 { "paddsb", { MX, EM }, PREFIX_OPCODE },
3005 { "paddsw", { MX, EM }, PREFIX_OPCODE },
3006 { "pmaxsw", { MX, EM }, PREFIX_OPCODE },
3007 { "pxor", { MX, EM }, PREFIX_OPCODE },
252b5132 3008 /* f0 */
1ceb70f8 3009 { PREFIX_TABLE (PREFIX_0FF0) },
507bd325
L
3010 { "psllw", { MX, EM }, PREFIX_OPCODE },
3011 { "pslld", { MX, EM }, PREFIX_OPCODE },
3012 { "psllq", { MX, EM }, PREFIX_OPCODE },
3013 { "pmuludq", { MX, EM }, PREFIX_OPCODE },
3014 { "pmaddwd", { MX, EM }, PREFIX_OPCODE },
3015 { "psadbw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 3016 { PREFIX_TABLE (PREFIX_0FF7) },
252b5132 3017 /* f8 */
507bd325
L
3018 { "psubb", { MX, EM }, PREFIX_OPCODE },
3019 { "psubw", { MX, EM }, PREFIX_OPCODE },
3020 { "psubd", { MX, EM }, PREFIX_OPCODE },
3021 { "psubq", { MX, EM }, PREFIX_OPCODE },
3022 { "paddb", { MX, EM }, PREFIX_OPCODE },
3023 { "paddw", { MX, EM }, PREFIX_OPCODE },
3024 { "paddd", { MX, EM }, PREFIX_OPCODE },
592d1631 3025 { Bad_Opcode },
252b5132
RH
3026};
3027
3028static const unsigned char onebyte_has_modrm[256] = {
c608c12e
AM
3029 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3030 /* ------------------------------- */
3031 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
3032 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
3033 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
3034 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
3035 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
3036 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
3037 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
3038 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
3039 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
3040 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
3041 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
3042 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
3043 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
3044 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
3045 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
3046 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
3047 /* ------------------------------- */
3048 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
252b5132
RH
3049};
3050
3051static const unsigned char twobyte_has_modrm[256] = {
c608c12e
AM
3052 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3053 /* ------------------------------- */
252b5132 3054 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
b5b1fc4f 3055 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
85f10a01 3056 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
331d2d0d 3057 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
252b5132 3058 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
4bba6815
AM
3059 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
3060 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
85f10a01 3061 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
252b5132
RH
3062 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
3063 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
30d1c836 3064 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
050dfa73 3065 /* b0 */ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* bf */
252b5132 3066 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
ca164297 3067 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
4bba6815 3068 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
ca164297 3069 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* ff */
c608c12e
AM
3070 /* ------------------------------- */
3071 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3072};
3073
252b5132
RH
3074static char obuf[100];
3075static char *obufp;
ea397f5b 3076static char *mnemonicendp;
252b5132
RH
3077static char scratchbuf[100];
3078static unsigned char *start_codep;
3079static unsigned char *insn_codep;
3080static unsigned char *codep;
285ca992 3081static unsigned char *end_codep;
f16cd0d5
L
3082static int last_lock_prefix;
3083static int last_repz_prefix;
3084static int last_repnz_prefix;
3085static int last_data_prefix;
3086static int last_addr_prefix;
3087static int last_rex_prefix;
3088static int last_seg_prefix;
d9949a36 3089static int fwait_prefix;
285ca992
L
3090/* The active segment register prefix. */
3091static int active_seg_prefix;
f16cd0d5
L
3092#define MAX_CODE_LENGTH 15
3093/* We can up to 14 prefixes since the maximum instruction length is
3094 15bytes. */
3095static int all_prefixes[MAX_CODE_LENGTH - 1];
252b5132 3096static disassemble_info *the_info;
7967e09e
L
3097static struct
3098 {
3099 int mod;
7967e09e 3100 int reg;
484c222e 3101 int rm;
7967e09e
L
3102 }
3103modrm;
4bba6815 3104static unsigned char need_modrm;
dfc8cf43
L
3105static struct
3106 {
3107 int scale;
3108 int index;
3109 int base;
3110 }
3111sib;
c0f3af97
L
3112static struct
3113 {
3114 int register_specifier;
3115 int length;
3116 int prefix;
3117 int w;
43234a1e
L
3118 int evex;
3119 int r;
3120 int v;
3121 int mask_register_specifier;
3122 int zeroing;
3123 int ll;
3124 int b;
c0f3af97
L
3125 }
3126vex;
3127static unsigned char need_vex;
3128static unsigned char need_vex_reg;
dae39acc 3129static unsigned char vex_w_done;
252b5132 3130
ea397f5b
L
3131struct op
3132 {
3133 const char *name;
3134 unsigned int len;
3135 };
3136
4bba6815
AM
3137/* If we are accessing mod/rm/reg without need_modrm set, then the
3138 values are stale. Hitting this abort likely indicates that you
3139 need to update onebyte_has_modrm or twobyte_has_modrm. */
3140#define MODRM_CHECK if (!need_modrm) abort ()
3141
d708bcba
AM
3142static const char **names64;
3143static const char **names32;
3144static const char **names16;
3145static const char **names8;
3146static const char **names8rex;
3147static const char **names_seg;
db51cc60
L
3148static const char *index64;
3149static const char *index32;
d708bcba 3150static const char **index16;
7e8b059b 3151static const char **names_bnd;
d708bcba
AM
3152
3153static const char *intel_names64[] = {
3154 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
3155 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
3156};
3157static const char *intel_names32[] = {
3158 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
3159 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
3160};
3161static const char *intel_names16[] = {
3162 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
3163 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
3164};
3165static const char *intel_names8[] = {
3166 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
3167};
3168static const char *intel_names8rex[] = {
3169 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
3170 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
3171};
3172static const char *intel_names_seg[] = {
3173 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
3174};
db51cc60
L
3175static const char *intel_index64 = "riz";
3176static const char *intel_index32 = "eiz";
d708bcba
AM
3177static const char *intel_index16[] = {
3178 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
3179};
3180
3181static const char *att_names64[] = {
3182 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
52b15da3
JH
3183 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
3184};
d708bcba
AM
3185static const char *att_names32[] = {
3186 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
52b15da3 3187 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
252b5132 3188};
d708bcba
AM
3189static const char *att_names16[] = {
3190 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
52b15da3 3191 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
252b5132 3192};
d708bcba
AM
3193static const char *att_names8[] = {
3194 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
252b5132 3195};
d708bcba
AM
3196static const char *att_names8rex[] = {
3197 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
52b15da3
JH
3198 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
3199};
d708bcba
AM
3200static const char *att_names_seg[] = {
3201 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
252b5132 3202};
db51cc60
L
3203static const char *att_index64 = "%riz";
3204static const char *att_index32 = "%eiz";
d708bcba
AM
3205static const char *att_index16[] = {
3206 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
252b5132
RH
3207};
3208
b9733481
L
3209static const char **names_mm;
3210static const char *intel_names_mm[] = {
3211 "mm0", "mm1", "mm2", "mm3",
3212 "mm4", "mm5", "mm6", "mm7"
3213};
3214static const char *att_names_mm[] = {
3215 "%mm0", "%mm1", "%mm2", "%mm3",
3216 "%mm4", "%mm5", "%mm6", "%mm7"
3217};
3218
7e8b059b
L
3219static const char *intel_names_bnd[] = {
3220 "bnd0", "bnd1", "bnd2", "bnd3"
3221};
3222
3223static const char *att_names_bnd[] = {
3224 "%bnd0", "%bnd1", "%bnd2", "%bnd3"
3225};
3226
b9733481
L
3227static const char **names_xmm;
3228static const char *intel_names_xmm[] = {
3229 "xmm0", "xmm1", "xmm2", "xmm3",
3230 "xmm4", "xmm5", "xmm6", "xmm7",
3231 "xmm8", "xmm9", "xmm10", "xmm11",
43234a1e
L
3232 "xmm12", "xmm13", "xmm14", "xmm15",
3233 "xmm16", "xmm17", "xmm18", "xmm19",
3234 "xmm20", "xmm21", "xmm22", "xmm23",
3235 "xmm24", "xmm25", "xmm26", "xmm27",
3236 "xmm28", "xmm29", "xmm30", "xmm31"
b9733481
L
3237};
3238static const char *att_names_xmm[] = {
3239 "%xmm0", "%xmm1", "%xmm2", "%xmm3",
3240 "%xmm4", "%xmm5", "%xmm6", "%xmm7",
3241 "%xmm8", "%xmm9", "%xmm10", "%xmm11",
43234a1e
L
3242 "%xmm12", "%xmm13", "%xmm14", "%xmm15",
3243 "%xmm16", "%xmm17", "%xmm18", "%xmm19",
3244 "%xmm20", "%xmm21", "%xmm22", "%xmm23",
3245 "%xmm24", "%xmm25", "%xmm26", "%xmm27",
3246 "%xmm28", "%xmm29", "%xmm30", "%xmm31"
b9733481
L
3247};
3248
3249static const char **names_ymm;
3250static const char *intel_names_ymm[] = {
3251 "ymm0", "ymm1", "ymm2", "ymm3",
3252 "ymm4", "ymm5", "ymm6", "ymm7",
3253 "ymm8", "ymm9", "ymm10", "ymm11",
43234a1e
L
3254 "ymm12", "ymm13", "ymm14", "ymm15",
3255 "ymm16", "ymm17", "ymm18", "ymm19",
3256 "ymm20", "ymm21", "ymm22", "ymm23",
3257 "ymm24", "ymm25", "ymm26", "ymm27",
3258 "ymm28", "ymm29", "ymm30", "ymm31"
b9733481
L
3259};
3260static const char *att_names_ymm[] = {
3261 "%ymm0", "%ymm1", "%ymm2", "%ymm3",
3262 "%ymm4", "%ymm5", "%ymm6", "%ymm7",
3263 "%ymm8", "%ymm9", "%ymm10", "%ymm11",
43234a1e
L
3264 "%ymm12", "%ymm13", "%ymm14", "%ymm15",
3265 "%ymm16", "%ymm17", "%ymm18", "%ymm19",
3266 "%ymm20", "%ymm21", "%ymm22", "%ymm23",
3267 "%ymm24", "%ymm25", "%ymm26", "%ymm27",
3268 "%ymm28", "%ymm29", "%ymm30", "%ymm31"
3269};
3270
3271static const char **names_zmm;
3272static const char *intel_names_zmm[] = {
3273 "zmm0", "zmm1", "zmm2", "zmm3",
3274 "zmm4", "zmm5", "zmm6", "zmm7",
3275 "zmm8", "zmm9", "zmm10", "zmm11",
3276 "zmm12", "zmm13", "zmm14", "zmm15",
3277 "zmm16", "zmm17", "zmm18", "zmm19",
3278 "zmm20", "zmm21", "zmm22", "zmm23",
3279 "zmm24", "zmm25", "zmm26", "zmm27",
3280 "zmm28", "zmm29", "zmm30", "zmm31"
3281};
3282static const char *att_names_zmm[] = {
3283 "%zmm0", "%zmm1", "%zmm2", "%zmm3",
3284 "%zmm4", "%zmm5", "%zmm6", "%zmm7",
3285 "%zmm8", "%zmm9", "%zmm10", "%zmm11",
3286 "%zmm12", "%zmm13", "%zmm14", "%zmm15",
3287 "%zmm16", "%zmm17", "%zmm18", "%zmm19",
3288 "%zmm20", "%zmm21", "%zmm22", "%zmm23",
3289 "%zmm24", "%zmm25", "%zmm26", "%zmm27",
3290 "%zmm28", "%zmm29", "%zmm30", "%zmm31"
3291};
3292
3293static const char **names_mask;
3294static const char *intel_names_mask[] = {
3295 "k0", "k1", "k2", "k3", "k4", "k5", "k6", "k7"
3296};
3297static const char *att_names_mask[] = {
3298 "%k0", "%k1", "%k2", "%k3", "%k4", "%k5", "%k6", "%k7"
3299};
3300
3301static const char *names_rounding[] =
3302{
3303 "{rn-sae}",
3304 "{rd-sae}",
3305 "{ru-sae}",
3306 "{rz-sae}"
b9733481
L
3307};
3308
1ceb70f8
L
3309static const struct dis386 reg_table[][8] = {
3310 /* REG_80 */
252b5132 3311 {
bf890a93
IT
3312 { "addA", { Ebh1, Ib }, 0 },
3313 { "orA", { Ebh1, Ib }, 0 },
3314 { "adcA", { Ebh1, Ib }, 0 },
3315 { "sbbA", { Ebh1, Ib }, 0 },
3316 { "andA", { Ebh1, Ib }, 0 },
3317 { "subA", { Ebh1, Ib }, 0 },
3318 { "xorA", { Ebh1, Ib }, 0 },
3319 { "cmpA", { Eb, Ib }, 0 },
252b5132 3320 },
1ceb70f8 3321 /* REG_81 */
252b5132 3322 {
bf890a93
IT
3323 { "addQ", { Evh1, Iv }, 0 },
3324 { "orQ", { Evh1, Iv }, 0 },
3325 { "adcQ", { Evh1, Iv }, 0 },
3326 { "sbbQ", { Evh1, Iv }, 0 },
3327 { "andQ", { Evh1, Iv }, 0 },
3328 { "subQ", { Evh1, Iv }, 0 },
3329 { "xorQ", { Evh1, Iv }, 0 },
3330 { "cmpQ", { Ev, Iv }, 0 },
252b5132 3331 },
1ceb70f8 3332 /* REG_82 */
252b5132 3333 {
bf890a93
IT
3334 { "addQ", { Evh1, sIb }, 0 },
3335 { "orQ", { Evh1, sIb }, 0 },
3336 { "adcQ", { Evh1, sIb }, 0 },
3337 { "sbbQ", { Evh1, sIb }, 0 },
3338 { "andQ", { Evh1, sIb }, 0 },
3339 { "subQ", { Evh1, sIb }, 0 },
3340 { "xorQ", { Evh1, sIb }, 0 },
3341 { "cmpQ", { Ev, sIb }, 0 },
252b5132 3342 },
1ceb70f8 3343 /* REG_8F */
4e7d34a6 3344 {
bf890a93 3345 { "popU", { stackEv }, 0 },
c48244a5 3346 { XOP_8F_TABLE (XOP_09) },
592d1631
L
3347 { Bad_Opcode },
3348 { Bad_Opcode },
3349 { Bad_Opcode },
f88c9eb0 3350 { XOP_8F_TABLE (XOP_09) },
4e7d34a6 3351 },
1ceb70f8 3352 /* REG_C0 */
252b5132 3353 {
bf890a93
IT
3354 { "rolA", { Eb, Ib }, 0 },
3355 { "rorA", { Eb, Ib }, 0 },
3356 { "rclA", { Eb, Ib }, 0 },
3357 { "rcrA", { Eb, Ib }, 0 },
3358 { "shlA", { Eb, Ib }, 0 },
3359 { "shrA", { Eb, Ib }, 0 },
592d1631 3360 { Bad_Opcode },
bf890a93 3361 { "sarA", { Eb, Ib }, 0 },
252b5132 3362 },
1ceb70f8 3363 /* REG_C1 */
252b5132 3364 {
bf890a93
IT
3365 { "rolQ", { Ev, Ib }, 0 },
3366 { "rorQ", { Ev, Ib }, 0 },
3367 { "rclQ", { Ev, Ib }, 0 },
3368 { "rcrQ", { Ev, Ib }, 0 },
3369 { "shlQ", { Ev, Ib }, 0 },
3370 { "shrQ", { Ev, Ib }, 0 },
592d1631 3371 { Bad_Opcode },
bf890a93 3372 { "sarQ", { Ev, Ib }, 0 },
252b5132 3373 },
1ceb70f8 3374 /* REG_C6 */
4e7d34a6 3375 {
bf890a93 3376 { "movA", { Ebh3, Ib }, 0 },
42164a71
L
3377 { Bad_Opcode },
3378 { Bad_Opcode },
3379 { Bad_Opcode },
3380 { Bad_Opcode },
3381 { Bad_Opcode },
3382 { Bad_Opcode },
3383 { MOD_TABLE (MOD_C6_REG_7) },
4e7d34a6 3384 },
1ceb70f8 3385 /* REG_C7 */
4e7d34a6 3386 {
bf890a93 3387 { "movQ", { Evh3, Iv }, 0 },
42164a71
L
3388 { Bad_Opcode },
3389 { Bad_Opcode },
3390 { Bad_Opcode },
3391 { Bad_Opcode },
3392 { Bad_Opcode },
3393 { Bad_Opcode },
3394 { MOD_TABLE (MOD_C7_REG_7) },
4e7d34a6 3395 },
1ceb70f8 3396 /* REG_D0 */
252b5132 3397 {
bf890a93
IT
3398 { "rolA", { Eb, I1 }, 0 },
3399 { "rorA", { Eb, I1 }, 0 },
3400 { "rclA", { Eb, I1 }, 0 },
3401 { "rcrA", { Eb, I1 }, 0 },
3402 { "shlA", { Eb, I1 }, 0 },
3403 { "shrA", { Eb, I1 }, 0 },
592d1631 3404 { Bad_Opcode },
bf890a93 3405 { "sarA", { Eb, I1 }, 0 },
252b5132 3406 },
1ceb70f8 3407 /* REG_D1 */
252b5132 3408 {
bf890a93
IT
3409 { "rolQ", { Ev, I1 }, 0 },
3410 { "rorQ", { Ev, I1 }, 0 },
3411 { "rclQ", { Ev, I1 }, 0 },
3412 { "rcrQ", { Ev, I1 }, 0 },
3413 { "shlQ", { Ev, I1 }, 0 },
3414 { "shrQ", { Ev, I1 }, 0 },
592d1631 3415 { Bad_Opcode },
bf890a93 3416 { "sarQ", { Ev, I1 }, 0 },
252b5132 3417 },
1ceb70f8 3418 /* REG_D2 */
252b5132 3419 {
bf890a93
IT
3420 { "rolA", { Eb, CL }, 0 },
3421 { "rorA", { Eb, CL }, 0 },
3422 { "rclA", { Eb, CL }, 0 },
3423 { "rcrA", { Eb, CL }, 0 },
3424 { "shlA", { Eb, CL }, 0 },
3425 { "shrA", { Eb, CL }, 0 },
592d1631 3426 { Bad_Opcode },
bf890a93 3427 { "sarA", { Eb, CL }, 0 },
252b5132 3428 },
1ceb70f8 3429 /* REG_D3 */
252b5132 3430 {
bf890a93
IT
3431 { "rolQ", { Ev, CL }, 0 },
3432 { "rorQ", { Ev, CL }, 0 },
3433 { "rclQ", { Ev, CL }, 0 },
3434 { "rcrQ", { Ev, CL }, 0 },
3435 { "shlQ", { Ev, CL }, 0 },
3436 { "shrQ", { Ev, CL }, 0 },
592d1631 3437 { Bad_Opcode },
bf890a93 3438 { "sarQ", { Ev, CL }, 0 },
252b5132 3439 },
1ceb70f8 3440 /* REG_F6 */
252b5132 3441 {
bf890a93 3442 { "testA", { Eb, Ib }, 0 },
592d1631 3443 { Bad_Opcode },
bf890a93
IT
3444 { "notA", { Ebh1 }, 0 },
3445 { "negA", { Ebh1 }, 0 },
3446 { "mulA", { Eb }, 0 }, /* Don't print the implicit %al register, */
3447 { "imulA", { Eb }, 0 }, /* to distinguish these opcodes from other */
3448 { "divA", { Eb }, 0 }, /* mul/imul opcodes. Do the same for div */
3449 { "idivA", { Eb }, 0 }, /* and idiv for consistency. */
252b5132 3450 },
1ceb70f8 3451 /* REG_F7 */
252b5132 3452 {
bf890a93 3453 { "testQ", { Ev, Iv }, 0 },
592d1631 3454 { Bad_Opcode },
bf890a93
IT
3455 { "notQ", { Evh1 }, 0 },
3456 { "negQ", { Evh1 }, 0 },
3457 { "mulQ", { Ev }, 0 }, /* Don't print the implicit register. */
3458 { "imulQ", { Ev }, 0 },
3459 { "divQ", { Ev }, 0 },
3460 { "idivQ", { Ev }, 0 },
252b5132 3461 },
1ceb70f8 3462 /* REG_FE */
252b5132 3463 {
bf890a93
IT
3464 { "incA", { Ebh1 }, 0 },
3465 { "decA", { Ebh1 }, 0 },
252b5132 3466 },
1ceb70f8 3467 /* REG_FF */
252b5132 3468 {
bf890a93
IT
3469 { "incQ", { Evh1 }, 0 },
3470 { "decQ", { Evh1 }, 0 },
3471 { "call{T|}", { indirEv, BND }, 0 },
4a357820 3472 { MOD_TABLE (MOD_FF_REG_3) },
bf890a93 3473 { "jmp{T|}", { indirEv, BND }, 0 },
4a357820 3474 { MOD_TABLE (MOD_FF_REG_5) },
bf890a93 3475 { "pushU", { stackEv }, 0 },
592d1631 3476 { Bad_Opcode },
252b5132 3477 },
1ceb70f8 3478 /* REG_0F00 */
252b5132 3479 {
bf890a93
IT
3480 { "sldtD", { Sv }, 0 },
3481 { "strD", { Sv }, 0 },
3482 { "lldt", { Ew }, 0 },
3483 { "ltr", { Ew }, 0 },
3484 { "verr", { Ew }, 0 },
3485 { "verw", { Ew }, 0 },
592d1631
L
3486 { Bad_Opcode },
3487 { Bad_Opcode },
252b5132 3488 },
1ceb70f8 3489 /* REG_0F01 */
252b5132 3490 {
1ceb70f8
L
3491 { MOD_TABLE (MOD_0F01_REG_0) },
3492 { MOD_TABLE (MOD_0F01_REG_1) },
3493 { MOD_TABLE (MOD_0F01_REG_2) },
3494 { MOD_TABLE (MOD_0F01_REG_3) },
bf890a93 3495 { "smswD", { Sv }, 0 },
592d1631 3496 { Bad_Opcode },
bf890a93 3497 { "lmsw", { Ew }, 0 },
1ceb70f8 3498 { MOD_TABLE (MOD_0F01_REG_7) },
252b5132 3499 },
b5b1fc4f 3500 /* REG_0F0D */
252b5132 3501 {
bf890a93
IT
3502 { "prefetch", { Mb }, 0 },
3503 { "prefetchw", { Mb }, 0 },
3504 { "prefetchwt1", { Mb }, 0 },
3505 { "prefetch", { Mb }, 0 },
3506 { "prefetch", { Mb }, 0 },
3507 { "prefetch", { Mb }, 0 },
3508 { "prefetch", { Mb }, 0 },
3509 { "prefetch", { Mb }, 0 },
252b5132 3510 },
1ceb70f8 3511 /* REG_0F18 */
252b5132 3512 {
1ceb70f8
L
3513 { MOD_TABLE (MOD_0F18_REG_0) },
3514 { MOD_TABLE (MOD_0F18_REG_1) },
3515 { MOD_TABLE (MOD_0F18_REG_2) },
3516 { MOD_TABLE (MOD_0F18_REG_3) },
d7189fa5
RM
3517 { MOD_TABLE (MOD_0F18_REG_4) },
3518 { MOD_TABLE (MOD_0F18_REG_5) },
3519 { MOD_TABLE (MOD_0F18_REG_6) },
3520 { MOD_TABLE (MOD_0F18_REG_7) },
252b5132 3521 },
1ceb70f8 3522 /* REG_0F71 */
a6bd098c 3523 {
592d1631
L
3524 { Bad_Opcode },
3525 { Bad_Opcode },
1ceb70f8 3526 { MOD_TABLE (MOD_0F71_REG_2) },
592d1631 3527 { Bad_Opcode },
1ceb70f8 3528 { MOD_TABLE (MOD_0F71_REG_4) },
592d1631 3529 { Bad_Opcode },
1ceb70f8 3530 { MOD_TABLE (MOD_0F71_REG_6) },
a6bd098c 3531 },
1ceb70f8 3532 /* REG_0F72 */
a6bd098c 3533 {
592d1631
L
3534 { Bad_Opcode },
3535 { Bad_Opcode },
1ceb70f8 3536 { MOD_TABLE (MOD_0F72_REG_2) },
592d1631 3537 { Bad_Opcode },
1ceb70f8 3538 { MOD_TABLE (MOD_0F72_REG_4) },
592d1631 3539 { Bad_Opcode },
1ceb70f8 3540 { MOD_TABLE (MOD_0F72_REG_6) },
a6bd098c 3541 },
1ceb70f8 3542 /* REG_0F73 */
252b5132 3543 {
592d1631
L
3544 { Bad_Opcode },
3545 { Bad_Opcode },
1ceb70f8
L
3546 { MOD_TABLE (MOD_0F73_REG_2) },
3547 { MOD_TABLE (MOD_0F73_REG_3) },
592d1631
L
3548 { Bad_Opcode },
3549 { Bad_Opcode },
1ceb70f8
L
3550 { MOD_TABLE (MOD_0F73_REG_6) },
3551 { MOD_TABLE (MOD_0F73_REG_7) },
252b5132 3552 },
1ceb70f8 3553 /* REG_0FA6 */
252b5132 3554 {
bf890a93
IT
3555 { "montmul", { { OP_0f07, 0 } }, 0 },
3556 { "xsha1", { { OP_0f07, 0 } }, 0 },
3557 { "xsha256", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3558 },
1ceb70f8 3559 /* REG_0FA7 */
4e7d34a6 3560 {
bf890a93
IT
3561 { "xstore-rng", { { OP_0f07, 0 } }, 0 },
3562 { "xcrypt-ecb", { { OP_0f07, 0 } }, 0 },
3563 { "xcrypt-cbc", { { OP_0f07, 0 } }, 0 },
3564 { "xcrypt-ctr", { { OP_0f07, 0 } }, 0 },
3565 { "xcrypt-cfb", { { OP_0f07, 0 } }, 0 },
3566 { "xcrypt-ofb", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3567 },
1ceb70f8 3568 /* REG_0FAE */
4e7d34a6 3569 {
1ceb70f8
L
3570 { MOD_TABLE (MOD_0FAE_REG_0) },
3571 { MOD_TABLE (MOD_0FAE_REG_1) },
3572 { MOD_TABLE (MOD_0FAE_REG_2) },
3573 { MOD_TABLE (MOD_0FAE_REG_3) },
475a2301 3574 { MOD_TABLE (MOD_0FAE_REG_4) },
1ceb70f8
L
3575 { MOD_TABLE (MOD_0FAE_REG_5) },
3576 { MOD_TABLE (MOD_0FAE_REG_6) },
3577 { MOD_TABLE (MOD_0FAE_REG_7) },
252b5132 3578 },
1ceb70f8 3579 /* REG_0FBA */
252b5132 3580 {
592d1631
L
3581 { Bad_Opcode },
3582 { Bad_Opcode },
3583 { Bad_Opcode },
3584 { Bad_Opcode },
bf890a93
IT
3585 { "btQ", { Ev, Ib }, 0 },
3586 { "btsQ", { Evh1, Ib }, 0 },
3587 { "btrQ", { Evh1, Ib }, 0 },
3588 { "btcQ", { Evh1, Ib }, 0 },
c608c12e 3589 },
1ceb70f8 3590 /* REG_0FC7 */
c608c12e 3591 {
592d1631 3592 { Bad_Opcode },
bf890a93 3593 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } }, 0 },
592d1631 3594 { Bad_Opcode },
963f3586
IT
3595 { MOD_TABLE (MOD_0FC7_REG_3) },
3596 { MOD_TABLE (MOD_0FC7_REG_4) },
3597 { MOD_TABLE (MOD_0FC7_REG_5) },
1ceb70f8
L
3598 { MOD_TABLE (MOD_0FC7_REG_6) },
3599 { MOD_TABLE (MOD_0FC7_REG_7) },
252b5132 3600 },
592a252b 3601 /* REG_VEX_0F71 */
c0f3af97 3602 {
592d1631
L
3603 { Bad_Opcode },
3604 { Bad_Opcode },
592a252b 3605 { MOD_TABLE (MOD_VEX_0F71_REG_2) },
592d1631 3606 { Bad_Opcode },
592a252b 3607 { MOD_TABLE (MOD_VEX_0F71_REG_4) },
592d1631 3608 { Bad_Opcode },
592a252b 3609 { MOD_TABLE (MOD_VEX_0F71_REG_6) },
c0f3af97 3610 },
592a252b 3611 /* REG_VEX_0F72 */
c0f3af97 3612 {
592d1631
L
3613 { Bad_Opcode },
3614 { Bad_Opcode },
592a252b 3615 { MOD_TABLE (MOD_VEX_0F72_REG_2) },
592d1631 3616 { Bad_Opcode },
592a252b 3617 { MOD_TABLE (MOD_VEX_0F72_REG_4) },
592d1631 3618 { Bad_Opcode },
592a252b 3619 { MOD_TABLE (MOD_VEX_0F72_REG_6) },
c0f3af97 3620 },
592a252b 3621 /* REG_VEX_0F73 */
c0f3af97 3622 {
592d1631
L
3623 { Bad_Opcode },
3624 { Bad_Opcode },
592a252b
L
3625 { MOD_TABLE (MOD_VEX_0F73_REG_2) },
3626 { MOD_TABLE (MOD_VEX_0F73_REG_3) },
592d1631
L
3627 { Bad_Opcode },
3628 { Bad_Opcode },
592a252b
L
3629 { MOD_TABLE (MOD_VEX_0F73_REG_6) },
3630 { MOD_TABLE (MOD_VEX_0F73_REG_7) },
c0f3af97 3631 },
592a252b 3632 /* REG_VEX_0FAE */
c0f3af97 3633 {
592d1631
L
3634 { Bad_Opcode },
3635 { Bad_Opcode },
592a252b
L
3636 { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
3637 { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
c0f3af97 3638 },
f12dc422
L
3639 /* REG_VEX_0F38F3 */
3640 {
3641 { Bad_Opcode },
3642 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
3643 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
3644 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
3645 },
f88c9eb0
SP
3646 /* REG_XOP_LWPCB */
3647 {
bf890a93
IT
3648 { "llwpcb", { { OP_LWPCB_E, 0 } }, 0 },
3649 { "slwpcb", { { OP_LWPCB_E, 0 } }, 0 },
f88c9eb0
SP
3650 },
3651 /* REG_XOP_LWP */
3652 {
bf890a93
IT
3653 { "lwpins", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
3654 { "lwpval", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
f88c9eb0 3655 },
2a2a0f38
QN
3656 /* REG_XOP_TBM_01 */
3657 {
3658 { Bad_Opcode },
bf890a93
IT
3659 { "blcfill", { { OP_LWP_E, 0 }, Ev }, 0 },
3660 { "blsfill", { { OP_LWP_E, 0 }, Ev }, 0 },
3661 { "blcs", { { OP_LWP_E, 0 }, Ev }, 0 },
3662 { "tzmsk", { { OP_LWP_E, 0 }, Ev }, 0 },
3663 { "blcic", { { OP_LWP_E, 0 }, Ev }, 0 },
3664 { "blsic", { { OP_LWP_E, 0 }, Ev }, 0 },
3665 { "t1mskc", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38
QN
3666 },
3667 /* REG_XOP_TBM_02 */
3668 {
3669 { Bad_Opcode },
bf890a93 3670 { "blcmsk", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38
QN
3671 { Bad_Opcode },
3672 { Bad_Opcode },
3673 { Bad_Opcode },
3674 { Bad_Opcode },
bf890a93 3675 { "blci", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38 3676 },
43234a1e
L
3677#define NEED_REG_TABLE
3678#include "i386-dis-evex.h"
3679#undef NEED_REG_TABLE
4e7d34a6
L
3680};
3681
1ceb70f8
L
3682static const struct dis386 prefix_table[][4] = {
3683 /* PREFIX_90 */
252b5132 3684 {
bf890a93
IT
3685 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
3686 { "pause", { XX }, 0 },
3687 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
507bd325 3688 { NULL, { { NULL, 0 } }, PREFIX_IGNORED }
0f10071e 3689 },
4e7d34a6 3690
1ceb70f8 3691 /* PREFIX_0F10 */
cc0ec051 3692 {
507bd325
L
3693 { "movups", { XM, EXx }, PREFIX_OPCODE },
3694 { "movss", { XM, EXd }, PREFIX_OPCODE },
3695 { "movupd", { XM, EXx }, PREFIX_OPCODE },
3696 { "movsd", { XM, EXq }, PREFIX_OPCODE },
30d1c836 3697 },
4e7d34a6 3698
1ceb70f8 3699 /* PREFIX_0F11 */
30d1c836 3700 {
507bd325
L
3701 { "movups", { EXxS, XM }, PREFIX_OPCODE },
3702 { "movss", { EXdS, XM }, PREFIX_OPCODE },
3703 { "movupd", { EXxS, XM }, PREFIX_OPCODE },
3704 { "movsd", { EXqS, XM }, PREFIX_OPCODE },
4e7d34a6 3705 },
252b5132 3706
1ceb70f8 3707 /* PREFIX_0F12 */
c608c12e 3708 {
1ceb70f8 3709 { MOD_TABLE (MOD_0F12_PREFIX_0) },
507bd325
L
3710 { "movsldup", { XM, EXx }, PREFIX_OPCODE },
3711 { "movlpd", { XM, EXq }, PREFIX_OPCODE },
3712 { "movddup", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3713 },
4e7d34a6 3714
1ceb70f8 3715 /* PREFIX_0F16 */
c608c12e 3716 {
1ceb70f8 3717 { MOD_TABLE (MOD_0F16_PREFIX_0) },
507bd325
L
3718 { "movshdup", { XM, EXx }, PREFIX_OPCODE },
3719 { "movhpd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3720 },
4e7d34a6 3721
7e8b059b
L
3722 /* PREFIX_0F1A */
3723 {
3724 { MOD_TABLE (MOD_0F1A_PREFIX_0) },
bf890a93
IT
3725 { "bndcl", { Gbnd, Ev_bnd }, 0 },
3726 { "bndmov", { Gbnd, Ebnd }, 0 },
3727 { "bndcu", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3728 },
3729
3730 /* PREFIX_0F1B */
3731 {
3732 { MOD_TABLE (MOD_0F1B_PREFIX_0) },
3733 { MOD_TABLE (MOD_0F1B_PREFIX_1) },
bf890a93
IT
3734 { "bndmov", { Ebnd, Gbnd }, 0 },
3735 { "bndcn", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3736 },
3737
1ceb70f8 3738 /* PREFIX_0F2A */
c608c12e 3739 {
507bd325
L
3740 { "cvtpi2ps", { XM, EMCq }, PREFIX_OPCODE },
3741 { "cvtsi2ss%LQ", { XM, Ev }, PREFIX_OPCODE },
3742 { "cvtpi2pd", { XM, EMCq }, PREFIX_OPCODE },
bf890a93 3743 { "cvtsi2sd%LQ", { XM, Ev }, 0 },
c608c12e 3744 },
4e7d34a6 3745
1ceb70f8 3746 /* PREFIX_0F2B */
c608c12e 3747 {
75c135a8
L
3748 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
3749 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
3750 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
3751 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
c608c12e 3752 },
4e7d34a6 3753
1ceb70f8 3754 /* PREFIX_0F2C */
c608c12e 3755 {
507bd325
L
3756 { "cvttps2pi", { MXC, EXq }, PREFIX_OPCODE },
3757 { "cvttss2siY", { Gv, EXd }, PREFIX_OPCODE },
3758 { "cvttpd2pi", { MXC, EXx }, PREFIX_OPCODE },
3759 { "cvttsd2siY", { Gv, EXq }, PREFIX_OPCODE },
c608c12e 3760 },
4e7d34a6 3761
1ceb70f8 3762 /* PREFIX_0F2D */
c608c12e 3763 {
507bd325
L
3764 { "cvtps2pi", { MXC, EXq }, PREFIX_OPCODE },
3765 { "cvtss2siY", { Gv, EXd }, PREFIX_OPCODE },
3766 { "cvtpd2pi", { MXC, EXx }, PREFIX_OPCODE },
3767 { "cvtsd2siY", { Gv, EXq }, PREFIX_OPCODE },
c608c12e 3768 },
4e7d34a6 3769
1ceb70f8 3770 /* PREFIX_0F2E */
c608c12e 3771 {
bf890a93 3772 { "ucomiss",{ XM, EXd }, 0 },
592d1631 3773 { Bad_Opcode },
bf890a93 3774 { "ucomisd",{ XM, EXq }, 0 },
c608c12e 3775 },
4e7d34a6 3776
1ceb70f8 3777 /* PREFIX_0F2F */
c608c12e 3778 {
bf890a93 3779 { "comiss", { XM, EXd }, 0 },
592d1631 3780 { Bad_Opcode },
bf890a93 3781 { "comisd", { XM, EXq }, 0 },
c608c12e 3782 },
4e7d34a6 3783
1ceb70f8 3784 /* PREFIX_0F51 */
c608c12e 3785 {
507bd325
L
3786 { "sqrtps", { XM, EXx }, PREFIX_OPCODE },
3787 { "sqrtss", { XM, EXd }, PREFIX_OPCODE },
3788 { "sqrtpd", { XM, EXx }, PREFIX_OPCODE },
3789 { "sqrtsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3790 },
4e7d34a6 3791
1ceb70f8 3792 /* PREFIX_0F52 */
c608c12e 3793 {
507bd325
L
3794 { "rsqrtps",{ XM, EXx }, PREFIX_OPCODE },
3795 { "rsqrtss",{ XM, EXd }, PREFIX_OPCODE },
c608c12e 3796 },
4e7d34a6 3797
1ceb70f8 3798 /* PREFIX_0F53 */
c608c12e 3799 {
507bd325
L
3800 { "rcpps", { XM, EXx }, PREFIX_OPCODE },
3801 { "rcpss", { XM, EXd }, PREFIX_OPCODE },
c608c12e 3802 },
4e7d34a6 3803
1ceb70f8 3804 /* PREFIX_0F58 */
c608c12e 3805 {
507bd325
L
3806 { "addps", { XM, EXx }, PREFIX_OPCODE },
3807 { "addss", { XM, EXd }, PREFIX_OPCODE },
3808 { "addpd", { XM, EXx }, PREFIX_OPCODE },
3809 { "addsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3810 },
4e7d34a6 3811
1ceb70f8 3812 /* PREFIX_0F59 */
c608c12e 3813 {
507bd325
L
3814 { "mulps", { XM, EXx }, PREFIX_OPCODE },
3815 { "mulss", { XM, EXd }, PREFIX_OPCODE },
3816 { "mulpd", { XM, EXx }, PREFIX_OPCODE },
3817 { "mulsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3818 },
4e7d34a6 3819
1ceb70f8 3820 /* PREFIX_0F5A */
041bd2e0 3821 {
507bd325
L
3822 { "cvtps2pd", { XM, EXq }, PREFIX_OPCODE },
3823 { "cvtss2sd", { XM, EXd }, PREFIX_OPCODE },
3824 { "cvtpd2ps", { XM, EXx }, PREFIX_OPCODE },
3825 { "cvtsd2ss", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3826 },
4e7d34a6 3827
1ceb70f8 3828 /* PREFIX_0F5B */
041bd2e0 3829 {
507bd325
L
3830 { "cvtdq2ps", { XM, EXx }, PREFIX_OPCODE },
3831 { "cvttps2dq", { XM, EXx }, PREFIX_OPCODE },
3832 { "cvtps2dq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 3833 },
4e7d34a6 3834
1ceb70f8 3835 /* PREFIX_0F5C */
041bd2e0 3836 {
507bd325
L
3837 { "subps", { XM, EXx }, PREFIX_OPCODE },
3838 { "subss", { XM, EXd }, PREFIX_OPCODE },
3839 { "subpd", { XM, EXx }, PREFIX_OPCODE },
3840 { "subsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3841 },
4e7d34a6 3842
1ceb70f8 3843 /* PREFIX_0F5D */
041bd2e0 3844 {
507bd325
L
3845 { "minps", { XM, EXx }, PREFIX_OPCODE },
3846 { "minss", { XM, EXd }, PREFIX_OPCODE },
3847 { "minpd", { XM, EXx }, PREFIX_OPCODE },
3848 { "minsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3849 },
4e7d34a6 3850
1ceb70f8 3851 /* PREFIX_0F5E */
041bd2e0 3852 {
507bd325
L
3853 { "divps", { XM, EXx }, PREFIX_OPCODE },
3854 { "divss", { XM, EXd }, PREFIX_OPCODE },
3855 { "divpd", { XM, EXx }, PREFIX_OPCODE },
3856 { "divsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3857 },
4e7d34a6 3858
1ceb70f8 3859 /* PREFIX_0F5F */
041bd2e0 3860 {
507bd325
L
3861 { "maxps", { XM, EXx }, PREFIX_OPCODE },
3862 { "maxss", { XM, EXd }, PREFIX_OPCODE },
3863 { "maxpd", { XM, EXx }, PREFIX_OPCODE },
3864 { "maxsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3865 },
4e7d34a6 3866
1ceb70f8 3867 /* PREFIX_0F60 */
041bd2e0 3868 {
507bd325 3869 { "punpcklbw",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3870 { Bad_Opcode },
507bd325 3871 { "punpcklbw",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3872 },
4e7d34a6 3873
1ceb70f8 3874 /* PREFIX_0F61 */
041bd2e0 3875 {
507bd325 3876 { "punpcklwd",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3877 { Bad_Opcode },
507bd325 3878 { "punpcklwd",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3879 },
4e7d34a6 3880
1ceb70f8 3881 /* PREFIX_0F62 */
041bd2e0 3882 {
507bd325 3883 { "punpckldq",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3884 { Bad_Opcode },
507bd325 3885 { "punpckldq",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3886 },
4e7d34a6 3887
1ceb70f8 3888 /* PREFIX_0F6C */
041bd2e0 3889 {
592d1631
L
3890 { Bad_Opcode },
3891 { Bad_Opcode },
507bd325 3892 { "punpcklqdq", { XM, EXx }, PREFIX_OPCODE },
0f17484f 3893 },
4e7d34a6 3894
1ceb70f8 3895 /* PREFIX_0F6D */
0f17484f 3896 {
592d1631
L
3897 { Bad_Opcode },
3898 { Bad_Opcode },
507bd325 3899 { "punpckhqdq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 3900 },
4e7d34a6 3901
1ceb70f8 3902 /* PREFIX_0F6F */
ca164297 3903 {
507bd325
L
3904 { "movq", { MX, EM }, PREFIX_OPCODE },
3905 { "movdqu", { XM, EXx }, PREFIX_OPCODE },
3906 { "movdqa", { XM, EXx }, PREFIX_OPCODE },
ca164297 3907 },
4e7d34a6 3908
1ceb70f8 3909 /* PREFIX_0F70 */
4e7d34a6 3910 {
507bd325
L
3911 { "pshufw", { MX, EM, Ib }, PREFIX_OPCODE },
3912 { "pshufhw",{ XM, EXx, Ib }, PREFIX_OPCODE },
3913 { "pshufd", { XM, EXx, Ib }, PREFIX_OPCODE },
3914 { "pshuflw",{ XM, EXx, Ib }, PREFIX_OPCODE },
4e7d34a6
L
3915 },
3916
92fddf8e
L
3917 /* PREFIX_0F73_REG_3 */
3918 {
592d1631
L
3919 { Bad_Opcode },
3920 { Bad_Opcode },
bf890a93 3921 { "psrldq", { XS, Ib }, 0 },
92fddf8e
L
3922 },
3923
3924 /* PREFIX_0F73_REG_7 */
3925 {
592d1631
L
3926 { Bad_Opcode },
3927 { Bad_Opcode },
bf890a93 3928 { "pslldq", { XS, Ib }, 0 },
92fddf8e
L
3929 },
3930
1ceb70f8 3931 /* PREFIX_0F78 */
4e7d34a6 3932 {
bf890a93 3933 {"vmread", { Em, Gm }, 0 },
592d1631 3934 { Bad_Opcode },
bf890a93
IT
3935 {"extrq", { XS, Ib, Ib }, 0 },
3936 {"insertq", { XM, XS, Ib, Ib }, 0 },
4e7d34a6
L
3937 },
3938
1ceb70f8 3939 /* PREFIX_0F79 */
4e7d34a6 3940 {
bf890a93 3941 {"vmwrite", { Gm, Em }, 0 },
592d1631 3942 { Bad_Opcode },
bf890a93
IT
3943 {"extrq", { XM, XS }, 0 },
3944 {"insertq", { XM, XS }, 0 },
4e7d34a6
L
3945 },
3946
1ceb70f8 3947 /* PREFIX_0F7C */
ca164297 3948 {
592d1631
L
3949 { Bad_Opcode },
3950 { Bad_Opcode },
507bd325
L
3951 { "haddpd", { XM, EXx }, PREFIX_OPCODE },
3952 { "haddps", { XM, EXx }, PREFIX_OPCODE },
ca164297 3953 },
4e7d34a6 3954
1ceb70f8 3955 /* PREFIX_0F7D */
ca164297 3956 {
592d1631
L
3957 { Bad_Opcode },
3958 { Bad_Opcode },
507bd325
L
3959 { "hsubpd", { XM, EXx }, PREFIX_OPCODE },
3960 { "hsubps", { XM, EXx }, PREFIX_OPCODE },
ca164297 3961 },
4e7d34a6 3962
1ceb70f8 3963 /* PREFIX_0F7E */
ca164297 3964 {
507bd325
L
3965 { "movK", { Edq, MX }, PREFIX_OPCODE },
3966 { "movq", { XM, EXq }, PREFIX_OPCODE },
3967 { "movK", { Edq, XM }, PREFIX_OPCODE },
ca164297 3968 },
4e7d34a6 3969
1ceb70f8 3970 /* PREFIX_0F7F */
ca164297 3971 {
507bd325
L
3972 { "movq", { EMS, MX }, PREFIX_OPCODE },
3973 { "movdqu", { EXxS, XM }, PREFIX_OPCODE },
3974 { "movdqa", { EXxS, XM }, PREFIX_OPCODE },
ca164297 3975 },
4e7d34a6 3976
c7b8aa3a
L
3977 /* PREFIX_0FAE_REG_0 */
3978 {
3979 { Bad_Opcode },
bf890a93 3980 { "rdfsbase", { Ev }, 0 },
c7b8aa3a
L
3981 },
3982
3983 /* PREFIX_0FAE_REG_1 */
3984 {
3985 { Bad_Opcode },
bf890a93 3986 { "rdgsbase", { Ev }, 0 },
c7b8aa3a
L
3987 },
3988
3989 /* PREFIX_0FAE_REG_2 */
3990 {
3991 { Bad_Opcode },
bf890a93 3992 { "wrfsbase", { Ev }, 0 },
c7b8aa3a
L
3993 },
3994
3995 /* PREFIX_0FAE_REG_3 */
3996 {
3997 { Bad_Opcode },
bf890a93 3998 { "wrgsbase", { Ev }, 0 },
c7b8aa3a
L
3999 },
4000
c5e7287a
IT
4001 /* PREFIX_0FAE_REG_6 */
4002 {
bf890a93 4003 { "xsaveopt", { FXSAVE }, 0 },
c5e7287a 4004 { Bad_Opcode },
bf890a93 4005 { "clwb", { Mb }, 0 },
c5e7287a
IT
4006 },
4007
963f3586
IT
4008 /* PREFIX_0FAE_REG_7 */
4009 {
bf890a93 4010 { "clflush", { Mb }, 0 },
963f3586 4011 { Bad_Opcode },
bf890a93 4012 { "clflushopt", { Mb }, 0 },
963f3586
IT
4013 },
4014
9d8596f0
IT
4015 /* PREFIX_RM_0_0FAE_REG_7 */
4016 {
bf890a93 4017 { "sfence", { Skip_MODRM }, 0 },
9d8596f0 4018 { Bad_Opcode },
bf890a93 4019 { "pcommit", { Skip_MODRM }, 0 },
9d8596f0
IT
4020 },
4021
1ceb70f8 4022 /* PREFIX_0FB8 */
ca164297 4023 {
592d1631 4024 { Bad_Opcode },
bf890a93 4025 { "popcntS", { Gv, Ev }, 0 },
ca164297 4026 },
4e7d34a6 4027
f12dc422
L
4028 /* PREFIX_0FBC */
4029 {
bf890a93
IT
4030 { "bsfS", { Gv, Ev }, 0 },
4031 { "tzcntS", { Gv, Ev }, 0 },
4032 { "bsfS", { Gv, Ev }, 0 },
f12dc422
L
4033 },
4034
1ceb70f8 4035 /* PREFIX_0FBD */
050dfa73 4036 {
bf890a93
IT
4037 { "bsrS", { Gv, Ev }, 0 },
4038 { "lzcntS", { Gv, Ev }, 0 },
4039 { "bsrS", { Gv, Ev }, 0 },
050dfa73
MM
4040 },
4041
1ceb70f8 4042 /* PREFIX_0FC2 */
050dfa73 4043 {
507bd325
L
4044 { "cmpps", { XM, EXx, CMP }, PREFIX_OPCODE },
4045 { "cmpss", { XM, EXd, CMP }, PREFIX_OPCODE },
4046 { "cmppd", { XM, EXx, CMP }, PREFIX_OPCODE },
4047 { "cmpsd", { XM, EXq, CMP }, PREFIX_OPCODE },
050dfa73 4048 },
246c51aa 4049
4ee52178
L
4050 /* PREFIX_0FC3 */
4051 {
507bd325 4052 { "movntiS", { Ma, Gv }, PREFIX_OPCODE },
4ee52178
L
4053 },
4054
f24bcbaa 4055 /* PREFIX_MOD_0_0FC7_REG_6 */
92fddf8e 4056 {
bf890a93
IT
4057 { "vmptrld",{ Mq }, 0 },
4058 { "vmxon", { Mq }, 0 },
4059 { "vmclear",{ Mq }, 0 },
92fddf8e
L
4060 },
4061
f24bcbaa
L
4062 /* PREFIX_MOD_3_0FC7_REG_6 */
4063 {
4064 { "rdrand", { Ev }, 0 },
4065 { Bad_Opcode },
4066 { "rdrand", { Ev }, 0 }
4067 },
4068
4069 /* PREFIX_MOD_3_0FC7_REG_7 */
4070 {
4071 { "rdseed", { Ev }, 0 },
4072 { Bad_Opcode },
4073 { "rdseed", { Ev }, 0 },
4074 },
4075
1ceb70f8 4076 /* PREFIX_0FD0 */
050dfa73 4077 {
592d1631
L
4078 { Bad_Opcode },
4079 { Bad_Opcode },
bf890a93
IT
4080 { "addsubpd", { XM, EXx }, 0 },
4081 { "addsubps", { XM, EXx }, 0 },
246c51aa 4082 },
050dfa73 4083
1ceb70f8 4084 /* PREFIX_0FD6 */
050dfa73 4085 {
592d1631 4086 { Bad_Opcode },
bf890a93
IT
4087 { "movq2dq",{ XM, MS }, 0 },
4088 { "movq", { EXqS, XM }, 0 },
4089 { "movdq2q",{ MX, XS }, 0 },
050dfa73
MM
4090 },
4091
1ceb70f8 4092 /* PREFIX_0FE6 */
7918206c 4093 {
592d1631 4094 { Bad_Opcode },
507bd325
L
4095 { "cvtdq2pd", { XM, EXq }, PREFIX_OPCODE },
4096 { "cvttpd2dq", { XM, EXx }, PREFIX_OPCODE },
4097 { "cvtpd2dq", { XM, EXx }, PREFIX_OPCODE },
7918206c 4098 },
8b38ad71 4099
1ceb70f8 4100 /* PREFIX_0FE7 */
8b38ad71 4101 {
507bd325 4102 { "movntq", { Mq, MX }, PREFIX_OPCODE },
592d1631 4103 { Bad_Opcode },
75c135a8 4104 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
4e7d34a6
L
4105 },
4106
1ceb70f8 4107 /* PREFIX_0FF0 */
4e7d34a6 4108 {
592d1631
L
4109 { Bad_Opcode },
4110 { Bad_Opcode },
4111 { Bad_Opcode },
1ceb70f8 4112 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4e7d34a6
L
4113 },
4114
1ceb70f8 4115 /* PREFIX_0FF7 */
4e7d34a6 4116 {
507bd325 4117 { "maskmovq", { MX, MS }, PREFIX_OPCODE },
592d1631 4118 { Bad_Opcode },
507bd325 4119 { "maskmovdqu", { XM, XS }, PREFIX_OPCODE },
8b38ad71 4120 },
42903f7f 4121
1ceb70f8 4122 /* PREFIX_0F3810 */
42903f7f 4123 {
592d1631
L
4124 { Bad_Opcode },
4125 { Bad_Opcode },
507bd325 4126 { "pblendvb", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4127 },
4128
1ceb70f8 4129 /* PREFIX_0F3814 */
42903f7f 4130 {
592d1631
L
4131 { Bad_Opcode },
4132 { Bad_Opcode },
507bd325 4133 { "blendvps", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4134 },
4135
1ceb70f8 4136 /* PREFIX_0F3815 */
42903f7f 4137 {
592d1631
L
4138 { Bad_Opcode },
4139 { Bad_Opcode },
507bd325 4140 { "blendvpd", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4141 },
4142
1ceb70f8 4143 /* PREFIX_0F3817 */
42903f7f 4144 {
592d1631
L
4145 { Bad_Opcode },
4146 { Bad_Opcode },
507bd325 4147 { "ptest", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4148 },
4149
1ceb70f8 4150 /* PREFIX_0F3820 */
42903f7f 4151 {
592d1631
L
4152 { Bad_Opcode },
4153 { Bad_Opcode },
507bd325 4154 { "pmovsxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4155 },
4156
1ceb70f8 4157 /* PREFIX_0F3821 */
42903f7f 4158 {
592d1631
L
4159 { Bad_Opcode },
4160 { Bad_Opcode },
507bd325 4161 { "pmovsxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4162 },
4163
1ceb70f8 4164 /* PREFIX_0F3822 */
42903f7f 4165 {
592d1631
L
4166 { Bad_Opcode },
4167 { Bad_Opcode },
507bd325 4168 { "pmovsxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4169 },
4170
1ceb70f8 4171 /* PREFIX_0F3823 */
42903f7f 4172 {
592d1631
L
4173 { Bad_Opcode },
4174 { Bad_Opcode },
507bd325 4175 { "pmovsxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4176 },
4177
1ceb70f8 4178 /* PREFIX_0F3824 */
42903f7f 4179 {
592d1631
L
4180 { Bad_Opcode },
4181 { Bad_Opcode },
507bd325 4182 { "pmovsxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4183 },
4184
1ceb70f8 4185 /* PREFIX_0F3825 */
42903f7f 4186 {
592d1631
L
4187 { Bad_Opcode },
4188 { Bad_Opcode },
507bd325 4189 { "pmovsxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4190 },
4191
1ceb70f8 4192 /* PREFIX_0F3828 */
42903f7f 4193 {
592d1631
L
4194 { Bad_Opcode },
4195 { Bad_Opcode },
507bd325 4196 { "pmuldq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4197 },
4198
1ceb70f8 4199 /* PREFIX_0F3829 */
42903f7f 4200 {
592d1631
L
4201 { Bad_Opcode },
4202 { Bad_Opcode },
507bd325 4203 { "pcmpeqq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4204 },
4205
1ceb70f8 4206 /* PREFIX_0F382A */
42903f7f 4207 {
592d1631
L
4208 { Bad_Opcode },
4209 { Bad_Opcode },
75c135a8 4210 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
42903f7f
L
4211 },
4212
1ceb70f8 4213 /* PREFIX_0F382B */
42903f7f 4214 {
592d1631
L
4215 { Bad_Opcode },
4216 { Bad_Opcode },
507bd325 4217 { "packusdw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4218 },
4219
1ceb70f8 4220 /* PREFIX_0F3830 */
42903f7f 4221 {
592d1631
L
4222 { Bad_Opcode },
4223 { Bad_Opcode },
507bd325 4224 { "pmovzxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4225 },
4226
1ceb70f8 4227 /* PREFIX_0F3831 */
42903f7f 4228 {
592d1631
L
4229 { Bad_Opcode },
4230 { Bad_Opcode },
507bd325 4231 { "pmovzxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4232 },
4233
1ceb70f8 4234 /* PREFIX_0F3832 */
42903f7f 4235 {
592d1631
L
4236 { Bad_Opcode },
4237 { Bad_Opcode },
507bd325 4238 { "pmovzxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4239 },
4240
1ceb70f8 4241 /* PREFIX_0F3833 */
42903f7f 4242 {
592d1631
L
4243 { Bad_Opcode },
4244 { Bad_Opcode },
507bd325 4245 { "pmovzxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4246 },
4247
1ceb70f8 4248 /* PREFIX_0F3834 */
42903f7f 4249 {
592d1631
L
4250 { Bad_Opcode },
4251 { Bad_Opcode },
507bd325 4252 { "pmovzxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4253 },
4254
1ceb70f8 4255 /* PREFIX_0F3835 */
42903f7f 4256 {
592d1631
L
4257 { Bad_Opcode },
4258 { Bad_Opcode },
507bd325 4259 { "pmovzxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4260 },
4261
1ceb70f8 4262 /* PREFIX_0F3837 */
4e7d34a6 4263 {
592d1631
L
4264 { Bad_Opcode },
4265 { Bad_Opcode },
507bd325 4266 { "pcmpgtq", { XM, EXx }, PREFIX_OPCODE },
4e7d34a6
L
4267 },
4268
1ceb70f8 4269 /* PREFIX_0F3838 */
42903f7f 4270 {
592d1631
L
4271 { Bad_Opcode },
4272 { Bad_Opcode },
507bd325 4273 { "pminsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4274 },
4275
1ceb70f8 4276 /* PREFIX_0F3839 */
42903f7f 4277 {
592d1631
L
4278 { Bad_Opcode },
4279 { Bad_Opcode },
507bd325 4280 { "pminsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4281 },
4282
1ceb70f8 4283 /* PREFIX_0F383A */
42903f7f 4284 {
592d1631
L
4285 { Bad_Opcode },
4286 { Bad_Opcode },
507bd325 4287 { "pminuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4288 },
4289
1ceb70f8 4290 /* PREFIX_0F383B */
42903f7f 4291 {
592d1631
L
4292 { Bad_Opcode },
4293 { Bad_Opcode },
507bd325 4294 { "pminud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4295 },
4296
1ceb70f8 4297 /* PREFIX_0F383C */
42903f7f 4298 {
592d1631
L
4299 { Bad_Opcode },
4300 { Bad_Opcode },
507bd325 4301 { "pmaxsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4302 },
4303
1ceb70f8 4304 /* PREFIX_0F383D */
42903f7f 4305 {
592d1631
L
4306 { Bad_Opcode },
4307 { Bad_Opcode },
507bd325 4308 { "pmaxsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4309 },
4310
1ceb70f8 4311 /* PREFIX_0F383E */
42903f7f 4312 {
592d1631
L
4313 { Bad_Opcode },
4314 { Bad_Opcode },
507bd325 4315 { "pmaxuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4316 },
4317
1ceb70f8 4318 /* PREFIX_0F383F */
42903f7f 4319 {
592d1631
L
4320 { Bad_Opcode },
4321 { Bad_Opcode },
507bd325 4322 { "pmaxud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4323 },
4324
1ceb70f8 4325 /* PREFIX_0F3840 */
42903f7f 4326 {
592d1631
L
4327 { Bad_Opcode },
4328 { Bad_Opcode },
507bd325 4329 { "pmulld", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4330 },
4331
1ceb70f8 4332 /* PREFIX_0F3841 */
42903f7f 4333 {
592d1631
L
4334 { Bad_Opcode },
4335 { Bad_Opcode },
507bd325 4336 { "phminposuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4337 },
4338
f1f8f695
L
4339 /* PREFIX_0F3880 */
4340 {
592d1631
L
4341 { Bad_Opcode },
4342 { Bad_Opcode },
507bd325 4343 { "invept", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4344 },
4345
4346 /* PREFIX_0F3881 */
4347 {
592d1631
L
4348 { Bad_Opcode },
4349 { Bad_Opcode },
507bd325 4350 { "invvpid", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4351 },
4352
6c30d220
L
4353 /* PREFIX_0F3882 */
4354 {
4355 { Bad_Opcode },
4356 { Bad_Opcode },
507bd325 4357 { "invpcid", { Gm, M }, PREFIX_OPCODE },
6c30d220
L
4358 },
4359
a0046408
L
4360 /* PREFIX_0F38C8 */
4361 {
507bd325 4362 { "sha1nexte", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4363 },
4364
4365 /* PREFIX_0F38C9 */
4366 {
507bd325 4367 { "sha1msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4368 },
4369
4370 /* PREFIX_0F38CA */
4371 {
507bd325 4372 { "sha1msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4373 },
4374
4375 /* PREFIX_0F38CB */
4376 {
507bd325 4377 { "sha256rnds2", { XM, EXxmm, XMM0 }, PREFIX_OPCODE },
a0046408
L
4378 },
4379
4380 /* PREFIX_0F38CC */
4381 {
507bd325 4382 { "sha256msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4383 },
4384
4385 /* PREFIX_0F38CD */
4386 {
507bd325 4387 { "sha256msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4388 },
4389
c0f3af97
L
4390 /* PREFIX_0F38DB */
4391 {
592d1631
L
4392 { Bad_Opcode },
4393 { Bad_Opcode },
507bd325 4394 { "aesimc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4395 },
4396
4397 /* PREFIX_0F38DC */
4398 {
592d1631
L
4399 { Bad_Opcode },
4400 { Bad_Opcode },
507bd325 4401 { "aesenc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4402 },
4403
4404 /* PREFIX_0F38DD */
4405 {
592d1631
L
4406 { Bad_Opcode },
4407 { Bad_Opcode },
507bd325 4408 { "aesenclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4409 },
4410
4411 /* PREFIX_0F38DE */
4412 {
592d1631
L
4413 { Bad_Opcode },
4414 { Bad_Opcode },
507bd325 4415 { "aesdec", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4416 },
4417
4418 /* PREFIX_0F38DF */
4419 {
592d1631
L
4420 { Bad_Opcode },
4421 { Bad_Opcode },
507bd325 4422 { "aesdeclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4423 },
4424
1ceb70f8 4425 /* PREFIX_0F38F0 */
4e7d34a6 4426 {
507bd325 4427 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
592d1631 4428 { Bad_Opcode },
507bd325
L
4429 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
4430 { "crc32", { Gdq, { CRC32_Fixup, b_mode } }, PREFIX_OPCODE },
4e7d34a6
L
4431 },
4432
1ceb70f8 4433 /* PREFIX_0F38F1 */
4e7d34a6 4434 {
507bd325 4435 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
592d1631 4436 { Bad_Opcode },
507bd325
L
4437 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
4438 { "crc32", { Gdq, { CRC32_Fixup, v_mode } }, PREFIX_OPCODE },
4e7d34a6
L
4439 },
4440
e2e1fcde
L
4441 /* PREFIX_0F38F6 */
4442 {
4443 { Bad_Opcode },
507bd325
L
4444 { "adoxS", { Gdq, Edq}, PREFIX_OPCODE },
4445 { "adcxS", { Gdq, Edq}, PREFIX_OPCODE },
e2e1fcde
L
4446 { Bad_Opcode },
4447 },
4448
1ceb70f8 4449 /* PREFIX_0F3A08 */
42903f7f 4450 {
592d1631
L
4451 { Bad_Opcode },
4452 { Bad_Opcode },
507bd325 4453 { "roundps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4454 },
4455
1ceb70f8 4456 /* PREFIX_0F3A09 */
42903f7f 4457 {
592d1631
L
4458 { Bad_Opcode },
4459 { Bad_Opcode },
507bd325 4460 { "roundpd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4461 },
4462
1ceb70f8 4463 /* PREFIX_0F3A0A */
42903f7f 4464 {
592d1631
L
4465 { Bad_Opcode },
4466 { Bad_Opcode },
507bd325 4467 { "roundss", { XM, EXd, Ib }, PREFIX_OPCODE },
42903f7f
L
4468 },
4469
1ceb70f8 4470 /* PREFIX_0F3A0B */
42903f7f 4471 {
592d1631
L
4472 { Bad_Opcode },
4473 { Bad_Opcode },
507bd325 4474 { "roundsd", { XM, EXq, Ib }, PREFIX_OPCODE },
42903f7f
L
4475 },
4476
1ceb70f8 4477 /* PREFIX_0F3A0C */
42903f7f 4478 {
592d1631
L
4479 { Bad_Opcode },
4480 { Bad_Opcode },
507bd325 4481 { "blendps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4482 },
4483
1ceb70f8 4484 /* PREFIX_0F3A0D */
42903f7f 4485 {
592d1631
L
4486 { Bad_Opcode },
4487 { Bad_Opcode },
507bd325 4488 { "blendpd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4489 },
4490
1ceb70f8 4491 /* PREFIX_0F3A0E */
42903f7f 4492 {
592d1631
L
4493 { Bad_Opcode },
4494 { Bad_Opcode },
507bd325 4495 { "pblendw", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4496 },
4497
1ceb70f8 4498 /* PREFIX_0F3A14 */
42903f7f 4499 {
592d1631
L
4500 { Bad_Opcode },
4501 { Bad_Opcode },
507bd325 4502 { "pextrb", { Edqb, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4503 },
4504
1ceb70f8 4505 /* PREFIX_0F3A15 */
42903f7f 4506 {
592d1631
L
4507 { Bad_Opcode },
4508 { Bad_Opcode },
507bd325 4509 { "pextrw", { Edqw, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4510 },
4511
1ceb70f8 4512 /* PREFIX_0F3A16 */
42903f7f 4513 {
592d1631
L
4514 { Bad_Opcode },
4515 { Bad_Opcode },
507bd325 4516 { "pextrK", { Edq, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4517 },
4518
1ceb70f8 4519 /* PREFIX_0F3A17 */
42903f7f 4520 {
592d1631
L
4521 { Bad_Opcode },
4522 { Bad_Opcode },
507bd325 4523 { "extractps", { Edqd, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4524 },
4525
1ceb70f8 4526 /* PREFIX_0F3A20 */
42903f7f 4527 {
592d1631
L
4528 { Bad_Opcode },
4529 { Bad_Opcode },
507bd325 4530 { "pinsrb", { XM, Edqb, Ib }, PREFIX_OPCODE },
42903f7f
L
4531 },
4532
1ceb70f8 4533 /* PREFIX_0F3A21 */
42903f7f 4534 {
592d1631
L
4535 { Bad_Opcode },
4536 { Bad_Opcode },
507bd325 4537 { "insertps", { XM, EXd, Ib }, PREFIX_OPCODE },
42903f7f
L
4538 },
4539
1ceb70f8 4540 /* PREFIX_0F3A22 */
42903f7f 4541 {
592d1631
L
4542 { Bad_Opcode },
4543 { Bad_Opcode },
507bd325 4544 { "pinsrK", { XM, Edq, Ib }, PREFIX_OPCODE },
42903f7f
L
4545 },
4546
1ceb70f8 4547 /* PREFIX_0F3A40 */
42903f7f 4548 {
592d1631
L
4549 { Bad_Opcode },
4550 { Bad_Opcode },
507bd325 4551 { "dpps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4552 },
4553
1ceb70f8 4554 /* PREFIX_0F3A41 */
42903f7f 4555 {
592d1631
L
4556 { Bad_Opcode },
4557 { Bad_Opcode },
507bd325 4558 { "dppd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4559 },
4560
1ceb70f8 4561 /* PREFIX_0F3A42 */
42903f7f 4562 {
592d1631
L
4563 { Bad_Opcode },
4564 { Bad_Opcode },
507bd325 4565 { "mpsadbw", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f 4566 },
381d071f 4567
c0f3af97
L
4568 /* PREFIX_0F3A44 */
4569 {
592d1631
L
4570 { Bad_Opcode },
4571 { Bad_Opcode },
507bd325 4572 { "pclmulqdq", { XM, EXx, PCLMUL }, PREFIX_OPCODE },
c0f3af97
L
4573 },
4574
1ceb70f8 4575 /* PREFIX_0F3A60 */
381d071f 4576 {
592d1631
L
4577 { Bad_Opcode },
4578 { Bad_Opcode },
507bd325 4579 { "pcmpestrm", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f
L
4580 },
4581
1ceb70f8 4582 /* PREFIX_0F3A61 */
381d071f 4583 {
592d1631
L
4584 { Bad_Opcode },
4585 { Bad_Opcode },
507bd325 4586 { "pcmpestri", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f
L
4587 },
4588
1ceb70f8 4589 /* PREFIX_0F3A62 */
381d071f 4590 {
592d1631
L
4591 { Bad_Opcode },
4592 { Bad_Opcode },
507bd325 4593 { "pcmpistrm", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f
L
4594 },
4595
1ceb70f8 4596 /* PREFIX_0F3A63 */
381d071f 4597 {
592d1631
L
4598 { Bad_Opcode },
4599 { Bad_Opcode },
507bd325 4600 { "pcmpistri", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f 4601 },
09a2c6cf 4602
a0046408
L
4603 /* PREFIX_0F3ACC */
4604 {
507bd325 4605 { "sha1rnds4", { XM, EXxmm, Ib }, PREFIX_OPCODE },
a0046408
L
4606 },
4607
c0f3af97 4608 /* PREFIX_0F3ADF */
09a2c6cf 4609 {
592d1631
L
4610 { Bad_Opcode },
4611 { Bad_Opcode },
507bd325 4612 { "aeskeygenassist", { XM, EXx, Ib }, PREFIX_OPCODE },
09a2c6cf
L
4613 },
4614
592a252b 4615 /* PREFIX_VEX_0F10 */
09a2c6cf 4616 {
592a252b
L
4617 { VEX_W_TABLE (VEX_W_0F10_P_0) },
4618 { VEX_LEN_TABLE (VEX_LEN_0F10_P_1) },
4619 { VEX_W_TABLE (VEX_W_0F10_P_2) },
4620 { VEX_LEN_TABLE (VEX_LEN_0F10_P_3) },
09a2c6cf
L
4621 },
4622
592a252b 4623 /* PREFIX_VEX_0F11 */
09a2c6cf 4624 {
592a252b
L
4625 { VEX_W_TABLE (VEX_W_0F11_P_0) },
4626 { VEX_LEN_TABLE (VEX_LEN_0F11_P_1) },
4627 { VEX_W_TABLE (VEX_W_0F11_P_2) },
4628 { VEX_LEN_TABLE (VEX_LEN_0F11_P_3) },
09a2c6cf
L
4629 },
4630
592a252b 4631 /* PREFIX_VEX_0F12 */
09a2c6cf 4632 {
592a252b
L
4633 { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
4634 { VEX_W_TABLE (VEX_W_0F12_P_1) },
4635 { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) },
4636 { VEX_W_TABLE (VEX_W_0F12_P_3) },
09a2c6cf
L
4637 },
4638
592a252b 4639 /* PREFIX_VEX_0F16 */
09a2c6cf 4640 {
592a252b
L
4641 { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
4642 { VEX_W_TABLE (VEX_W_0F16_P_1) },
4643 { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) },
5f754f58 4644 },
7c52e0e8 4645
592a252b 4646 /* PREFIX_VEX_0F2A */
5f754f58 4647 {
592d1631 4648 { Bad_Opcode },
592a252b 4649 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_1) },
592d1631 4650 { Bad_Opcode },
592a252b 4651 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_3) },
5f754f58 4652 },
7c52e0e8 4653
592a252b 4654 /* PREFIX_VEX_0F2C */
5f754f58 4655 {
592d1631 4656 { Bad_Opcode },
592a252b 4657 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_1) },
592d1631 4658 { Bad_Opcode },
592a252b 4659 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_3) },
5f754f58 4660 },
7c52e0e8 4661
592a252b 4662 /* PREFIX_VEX_0F2D */
7c52e0e8 4663 {
592d1631 4664 { Bad_Opcode },
592a252b 4665 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_1) },
592d1631 4666 { Bad_Opcode },
592a252b 4667 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_3) },
7c52e0e8
L
4668 },
4669
592a252b 4670 /* PREFIX_VEX_0F2E */
7c52e0e8 4671 {
592a252b 4672 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_0) },
592d1631 4673 { Bad_Opcode },
592a252b 4674 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_2) },
7c52e0e8
L
4675 },
4676
592a252b 4677 /* PREFIX_VEX_0F2F */
7c52e0e8 4678 {
592a252b 4679 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_0) },
592d1631 4680 { Bad_Opcode },
592a252b 4681 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_2) },
7c52e0e8
L
4682 },
4683
43234a1e
L
4684 /* PREFIX_VEX_0F41 */
4685 {
4686 { VEX_LEN_TABLE (VEX_LEN_0F41_P_0) },
1ba585e8
IT
4687 { Bad_Opcode },
4688 { VEX_LEN_TABLE (VEX_LEN_0F41_P_2) },
43234a1e
L
4689 },
4690
4691 /* PREFIX_VEX_0F42 */
4692 {
4693 { VEX_LEN_TABLE (VEX_LEN_0F42_P_0) },
1ba585e8
IT
4694 { Bad_Opcode },
4695 { VEX_LEN_TABLE (VEX_LEN_0F42_P_2) },
43234a1e
L
4696 },
4697
4698 /* PREFIX_VEX_0F44 */
4699 {
4700 { VEX_LEN_TABLE (VEX_LEN_0F44_P_0) },
1ba585e8
IT
4701 { Bad_Opcode },
4702 { VEX_LEN_TABLE (VEX_LEN_0F44_P_2) },
43234a1e
L
4703 },
4704
4705 /* PREFIX_VEX_0F45 */
4706 {
4707 { VEX_LEN_TABLE (VEX_LEN_0F45_P_0) },
1ba585e8
IT
4708 { Bad_Opcode },
4709 { VEX_LEN_TABLE (VEX_LEN_0F45_P_2) },
43234a1e
L
4710 },
4711
4712 /* PREFIX_VEX_0F46 */
4713 {
4714 { VEX_LEN_TABLE (VEX_LEN_0F46_P_0) },
1ba585e8
IT
4715 { Bad_Opcode },
4716 { VEX_LEN_TABLE (VEX_LEN_0F46_P_2) },
43234a1e
L
4717 },
4718
4719 /* PREFIX_VEX_0F47 */
4720 {
4721 { VEX_LEN_TABLE (VEX_LEN_0F47_P_0) },
1ba585e8
IT
4722 { Bad_Opcode },
4723 { VEX_LEN_TABLE (VEX_LEN_0F47_P_2) },
43234a1e
L
4724 },
4725
1ba585e8 4726 /* PREFIX_VEX_0F4A */
43234a1e 4727 {
1ba585e8 4728 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_0) },
43234a1e 4729 { Bad_Opcode },
1ba585e8
IT
4730 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_2) },
4731 },
4732
4733 /* PREFIX_VEX_0F4B */
4734 {
4735 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_0) },
43234a1e
L
4736 { Bad_Opcode },
4737 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_2) },
4738 },
4739
592a252b 4740 /* PREFIX_VEX_0F51 */
7c52e0e8 4741 {
592a252b
L
4742 { VEX_W_TABLE (VEX_W_0F51_P_0) },
4743 { VEX_LEN_TABLE (VEX_LEN_0F51_P_1) },
4744 { VEX_W_TABLE (VEX_W_0F51_P_2) },
4745 { VEX_LEN_TABLE (VEX_LEN_0F51_P_3) },
7c52e0e8
L
4746 },
4747
592a252b 4748 /* PREFIX_VEX_0F52 */
7c52e0e8 4749 {
592a252b
L
4750 { VEX_W_TABLE (VEX_W_0F52_P_0) },
4751 { VEX_LEN_TABLE (VEX_LEN_0F52_P_1) },
7c52e0e8
L
4752 },
4753
592a252b 4754 /* PREFIX_VEX_0F53 */
7c52e0e8 4755 {
592a252b
L
4756 { VEX_W_TABLE (VEX_W_0F53_P_0) },
4757 { VEX_LEN_TABLE (VEX_LEN_0F53_P_1) },
7c52e0e8
L
4758 },
4759
592a252b 4760 /* PREFIX_VEX_0F58 */
7c52e0e8 4761 {
592a252b
L
4762 { VEX_W_TABLE (VEX_W_0F58_P_0) },
4763 { VEX_LEN_TABLE (VEX_LEN_0F58_P_1) },
4764 { VEX_W_TABLE (VEX_W_0F58_P_2) },
4765 { VEX_LEN_TABLE (VEX_LEN_0F58_P_3) },
7c52e0e8
L
4766 },
4767
592a252b 4768 /* PREFIX_VEX_0F59 */
7c52e0e8 4769 {
592a252b
L
4770 { VEX_W_TABLE (VEX_W_0F59_P_0) },
4771 { VEX_LEN_TABLE (VEX_LEN_0F59_P_1) },
4772 { VEX_W_TABLE (VEX_W_0F59_P_2) },
4773 { VEX_LEN_TABLE (VEX_LEN_0F59_P_3) },
7c52e0e8
L
4774 },
4775
592a252b 4776 /* PREFIX_VEX_0F5A */
7c52e0e8 4777 {
592a252b
L
4778 { VEX_W_TABLE (VEX_W_0F5A_P_0) },
4779 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_1) },
bf890a93 4780 { "vcvtpd2ps%XY", { XMM, EXx }, 0 },
592a252b 4781 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_3) },
7c52e0e8
L
4782 },
4783
592a252b 4784 /* PREFIX_VEX_0F5B */
7c52e0e8 4785 {
592a252b
L
4786 { VEX_W_TABLE (VEX_W_0F5B_P_0) },
4787 { VEX_W_TABLE (VEX_W_0F5B_P_1) },
4788 { VEX_W_TABLE (VEX_W_0F5B_P_2) },
7c52e0e8
L
4789 },
4790
592a252b 4791 /* PREFIX_VEX_0F5C */
7c52e0e8 4792 {
592a252b
L
4793 { VEX_W_TABLE (VEX_W_0F5C_P_0) },
4794 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_1) },
4795 { VEX_W_TABLE (VEX_W_0F5C_P_2) },
4796 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_3) },
7c52e0e8
L
4797 },
4798
592a252b 4799 /* PREFIX_VEX_0F5D */
7c52e0e8 4800 {
592a252b
L
4801 { VEX_W_TABLE (VEX_W_0F5D_P_0) },
4802 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_1) },
4803 { VEX_W_TABLE (VEX_W_0F5D_P_2) },
4804 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_3) },
7c52e0e8
L
4805 },
4806
592a252b 4807 /* PREFIX_VEX_0F5E */
7c52e0e8 4808 {
592a252b
L
4809 { VEX_W_TABLE (VEX_W_0F5E_P_0) },
4810 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_1) },
4811 { VEX_W_TABLE (VEX_W_0F5E_P_2) },
4812 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_3) },
7c52e0e8
L
4813 },
4814
592a252b 4815 /* PREFIX_VEX_0F5F */
7c52e0e8 4816 {
592a252b
L
4817 { VEX_W_TABLE (VEX_W_0F5F_P_0) },
4818 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_1) },
4819 { VEX_W_TABLE (VEX_W_0F5F_P_2) },
4820 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_3) },
7c52e0e8
L
4821 },
4822
592a252b 4823 /* PREFIX_VEX_0F60 */
7c52e0e8 4824 {
592d1631
L
4825 { Bad_Opcode },
4826 { Bad_Opcode },
6c30d220 4827 { VEX_W_TABLE (VEX_W_0F60_P_2) },
7c52e0e8
L
4828 },
4829
592a252b 4830 /* PREFIX_VEX_0F61 */
7c52e0e8 4831 {
592d1631
L
4832 { Bad_Opcode },
4833 { Bad_Opcode },
6c30d220 4834 { VEX_W_TABLE (VEX_W_0F61_P_2) },
7c52e0e8
L
4835 },
4836
592a252b 4837 /* PREFIX_VEX_0F62 */
7c52e0e8 4838 {
592d1631
L
4839 { Bad_Opcode },
4840 { Bad_Opcode },
6c30d220 4841 { VEX_W_TABLE (VEX_W_0F62_P_2) },
7c52e0e8
L
4842 },
4843
592a252b 4844 /* PREFIX_VEX_0F63 */
7c52e0e8 4845 {
592d1631
L
4846 { Bad_Opcode },
4847 { Bad_Opcode },
6c30d220 4848 { VEX_W_TABLE (VEX_W_0F63_P_2) },
7c52e0e8
L
4849 },
4850
592a252b 4851 /* PREFIX_VEX_0F64 */
7c52e0e8 4852 {
592d1631
L
4853 { Bad_Opcode },
4854 { Bad_Opcode },
6c30d220 4855 { VEX_W_TABLE (VEX_W_0F64_P_2) },
7c52e0e8
L
4856 },
4857
592a252b 4858 /* PREFIX_VEX_0F65 */
7c52e0e8 4859 {
592d1631
L
4860 { Bad_Opcode },
4861 { Bad_Opcode },
6c30d220 4862 { VEX_W_TABLE (VEX_W_0F65_P_2) },
7c52e0e8
L
4863 },
4864
592a252b 4865 /* PREFIX_VEX_0F66 */
7c52e0e8 4866 {
592d1631
L
4867 { Bad_Opcode },
4868 { Bad_Opcode },
6c30d220 4869 { VEX_W_TABLE (VEX_W_0F66_P_2) },
7c52e0e8 4870 },
6439fc28 4871
592a252b 4872 /* PREFIX_VEX_0F67 */
331d2d0d 4873 {
592d1631
L
4874 { Bad_Opcode },
4875 { Bad_Opcode },
6c30d220 4876 { VEX_W_TABLE (VEX_W_0F67_P_2) },
c0f3af97
L
4877 },
4878
592a252b 4879 /* PREFIX_VEX_0F68 */
c0f3af97 4880 {
592d1631
L
4881 { Bad_Opcode },
4882 { Bad_Opcode },
6c30d220 4883 { VEX_W_TABLE (VEX_W_0F68_P_2) },
c0f3af97
L
4884 },
4885
592a252b 4886 /* PREFIX_VEX_0F69 */
c0f3af97 4887 {
592d1631
L
4888 { Bad_Opcode },
4889 { Bad_Opcode },
6c30d220 4890 { VEX_W_TABLE (VEX_W_0F69_P_2) },
c0f3af97
L
4891 },
4892
592a252b 4893 /* PREFIX_VEX_0F6A */
c0f3af97 4894 {
592d1631
L
4895 { Bad_Opcode },
4896 { Bad_Opcode },
6c30d220 4897 { VEX_W_TABLE (VEX_W_0F6A_P_2) },
c0f3af97
L
4898 },
4899
592a252b 4900 /* PREFIX_VEX_0F6B */
c0f3af97 4901 {
592d1631
L
4902 { Bad_Opcode },
4903 { Bad_Opcode },
6c30d220 4904 { VEX_W_TABLE (VEX_W_0F6B_P_2) },
c0f3af97
L
4905 },
4906
592a252b 4907 /* PREFIX_VEX_0F6C */
c0f3af97 4908 {
592d1631
L
4909 { Bad_Opcode },
4910 { Bad_Opcode },
6c30d220 4911 { VEX_W_TABLE (VEX_W_0F6C_P_2) },
c0f3af97
L
4912 },
4913
592a252b 4914 /* PREFIX_VEX_0F6D */
c0f3af97 4915 {
592d1631
L
4916 { Bad_Opcode },
4917 { Bad_Opcode },
6c30d220 4918 { VEX_W_TABLE (VEX_W_0F6D_P_2) },
c0f3af97
L
4919 },
4920
592a252b 4921 /* PREFIX_VEX_0F6E */
c0f3af97 4922 {
592d1631
L
4923 { Bad_Opcode },
4924 { Bad_Opcode },
592a252b 4925 { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) },
c0f3af97
L
4926 },
4927
592a252b 4928 /* PREFIX_VEX_0F6F */
c0f3af97 4929 {
592d1631 4930 { Bad_Opcode },
592a252b
L
4931 { VEX_W_TABLE (VEX_W_0F6F_P_1) },
4932 { VEX_W_TABLE (VEX_W_0F6F_P_2) },
c0f3af97
L
4933 },
4934
592a252b 4935 /* PREFIX_VEX_0F70 */
c0f3af97 4936 {
592d1631 4937 { Bad_Opcode },
6c30d220
L
4938 { VEX_W_TABLE (VEX_W_0F70_P_1) },
4939 { VEX_W_TABLE (VEX_W_0F70_P_2) },
4940 { VEX_W_TABLE (VEX_W_0F70_P_3) },
c0f3af97
L
4941 },
4942
592a252b 4943 /* PREFIX_VEX_0F71_REG_2 */
c0f3af97 4944 {
592d1631
L
4945 { Bad_Opcode },
4946 { Bad_Opcode },
6c30d220 4947 { VEX_W_TABLE (VEX_W_0F71_R_2_P_2) },
c0f3af97
L
4948 },
4949
592a252b 4950 /* PREFIX_VEX_0F71_REG_4 */
c0f3af97 4951 {
592d1631
L
4952 { Bad_Opcode },
4953 { Bad_Opcode },
6c30d220 4954 { VEX_W_TABLE (VEX_W_0F71_R_4_P_2) },
c0f3af97
L
4955 },
4956
592a252b 4957 /* PREFIX_VEX_0F71_REG_6 */
c0f3af97 4958 {
592d1631
L
4959 { Bad_Opcode },
4960 { Bad_Opcode },
6c30d220 4961 { VEX_W_TABLE (VEX_W_0F71_R_6_P_2) },
c0f3af97
L
4962 },
4963
592a252b 4964 /* PREFIX_VEX_0F72_REG_2 */
c0f3af97 4965 {
592d1631
L
4966 { Bad_Opcode },
4967 { Bad_Opcode },
6c30d220 4968 { VEX_W_TABLE (VEX_W_0F72_R_2_P_2) },
c0f3af97
L
4969 },
4970
592a252b 4971 /* PREFIX_VEX_0F72_REG_4 */
c0f3af97 4972 {
592d1631
L
4973 { Bad_Opcode },
4974 { Bad_Opcode },
6c30d220 4975 { VEX_W_TABLE (VEX_W_0F72_R_4_P_2) },
c0f3af97
L
4976 },
4977
592a252b 4978 /* PREFIX_VEX_0F72_REG_6 */
c0f3af97 4979 {
592d1631
L
4980 { Bad_Opcode },
4981 { Bad_Opcode },
6c30d220 4982 { VEX_W_TABLE (VEX_W_0F72_R_6_P_2) },
c0f3af97
L
4983 },
4984
592a252b 4985 /* PREFIX_VEX_0F73_REG_2 */
c0f3af97 4986 {
592d1631
L
4987 { Bad_Opcode },
4988 { Bad_Opcode },
6c30d220 4989 { VEX_W_TABLE (VEX_W_0F73_R_2_P_2) },
c0f3af97
L
4990 },
4991
592a252b 4992 /* PREFIX_VEX_0F73_REG_3 */
c0f3af97 4993 {
592d1631
L
4994 { Bad_Opcode },
4995 { Bad_Opcode },
6c30d220 4996 { VEX_W_TABLE (VEX_W_0F73_R_3_P_2) },
c0f3af97
L
4997 },
4998
592a252b 4999 /* PREFIX_VEX_0F73_REG_6 */
c0f3af97 5000 {
592d1631
L
5001 { Bad_Opcode },
5002 { Bad_Opcode },
6c30d220 5003 { VEX_W_TABLE (VEX_W_0F73_R_6_P_2) },
c0f3af97
L
5004 },
5005
592a252b 5006 /* PREFIX_VEX_0F73_REG_7 */
c0f3af97 5007 {
592d1631
L
5008 { Bad_Opcode },
5009 { Bad_Opcode },
6c30d220 5010 { VEX_W_TABLE (VEX_W_0F73_R_7_P_2) },
c0f3af97
L
5011 },
5012
592a252b 5013 /* PREFIX_VEX_0F74 */
c0f3af97 5014 {
592d1631
L
5015 { Bad_Opcode },
5016 { Bad_Opcode },
6c30d220 5017 { VEX_W_TABLE (VEX_W_0F74_P_2) },
c0f3af97
L
5018 },
5019
592a252b 5020 /* PREFIX_VEX_0F75 */
c0f3af97 5021 {
592d1631
L
5022 { Bad_Opcode },
5023 { Bad_Opcode },
6c30d220 5024 { VEX_W_TABLE (VEX_W_0F75_P_2) },
c0f3af97
L
5025 },
5026
592a252b 5027 /* PREFIX_VEX_0F76 */
c0f3af97 5028 {
592d1631
L
5029 { Bad_Opcode },
5030 { Bad_Opcode },
6c30d220 5031 { VEX_W_TABLE (VEX_W_0F76_P_2) },
c0f3af97
L
5032 },
5033
592a252b 5034 /* PREFIX_VEX_0F77 */
c0f3af97 5035 {
592a252b 5036 { VEX_W_TABLE (VEX_W_0F77_P_0) },
c0f3af97
L
5037 },
5038
592a252b 5039 /* PREFIX_VEX_0F7C */
c0f3af97 5040 {
592d1631
L
5041 { Bad_Opcode },
5042 { Bad_Opcode },
592a252b
L
5043 { VEX_W_TABLE (VEX_W_0F7C_P_2) },
5044 { VEX_W_TABLE (VEX_W_0F7C_P_3) },
c0f3af97
L
5045 },
5046
592a252b 5047 /* PREFIX_VEX_0F7D */
c0f3af97 5048 {
592d1631
L
5049 { Bad_Opcode },
5050 { Bad_Opcode },
592a252b
L
5051 { VEX_W_TABLE (VEX_W_0F7D_P_2) },
5052 { VEX_W_TABLE (VEX_W_0F7D_P_3) },
c0f3af97
L
5053 },
5054
592a252b 5055 /* PREFIX_VEX_0F7E */
c0f3af97 5056 {
592d1631 5057 { Bad_Opcode },
592a252b
L
5058 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) },
5059 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
c0f3af97
L
5060 },
5061
592a252b 5062 /* PREFIX_VEX_0F7F */
c0f3af97 5063 {
592d1631 5064 { Bad_Opcode },
592a252b
L
5065 { VEX_W_TABLE (VEX_W_0F7F_P_1) },
5066 { VEX_W_TABLE (VEX_W_0F7F_P_2) },
c0f3af97
L
5067 },
5068
43234a1e
L
5069 /* PREFIX_VEX_0F90 */
5070 {
5071 { VEX_LEN_TABLE (VEX_LEN_0F90_P_0) },
1ba585e8
IT
5072 { Bad_Opcode },
5073 { VEX_LEN_TABLE (VEX_LEN_0F90_P_2) },
43234a1e
L
5074 },
5075
5076 /* PREFIX_VEX_0F91 */
5077 {
5078 { VEX_LEN_TABLE (VEX_LEN_0F91_P_0) },
1ba585e8
IT
5079 { Bad_Opcode },
5080 { VEX_LEN_TABLE (VEX_LEN_0F91_P_2) },
43234a1e
L
5081 },
5082
5083 /* PREFIX_VEX_0F92 */
5084 {
5085 { VEX_LEN_TABLE (VEX_LEN_0F92_P_0) },
1ba585e8 5086 { Bad_Opcode },
90a915bf 5087 { VEX_LEN_TABLE (VEX_LEN_0F92_P_2) },
1ba585e8 5088 { VEX_LEN_TABLE (VEX_LEN_0F92_P_3) },
43234a1e
L
5089 },
5090
5091 /* PREFIX_VEX_0F93 */
5092 {
5093 { VEX_LEN_TABLE (VEX_LEN_0F93_P_0) },
1ba585e8 5094 { Bad_Opcode },
90a915bf 5095 { VEX_LEN_TABLE (VEX_LEN_0F93_P_2) },
1ba585e8 5096 { VEX_LEN_TABLE (VEX_LEN_0F93_P_3) },
43234a1e
L
5097 },
5098
5099 /* PREFIX_VEX_0F98 */
5100 {
5101 { VEX_LEN_TABLE (VEX_LEN_0F98_P_0) },
1ba585e8
IT
5102 { Bad_Opcode },
5103 { VEX_LEN_TABLE (VEX_LEN_0F98_P_2) },
5104 },
5105
5106 /* PREFIX_VEX_0F99 */
5107 {
5108 { VEX_LEN_TABLE (VEX_LEN_0F99_P_0) },
5109 { Bad_Opcode },
5110 { VEX_LEN_TABLE (VEX_LEN_0F99_P_2) },
43234a1e
L
5111 },
5112
592a252b 5113 /* PREFIX_VEX_0FC2 */
c0f3af97 5114 {
592a252b
L
5115 { VEX_W_TABLE (VEX_W_0FC2_P_0) },
5116 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_1) },
5117 { VEX_W_TABLE (VEX_W_0FC2_P_2) },
5118 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_3) },
c0f3af97
L
5119 },
5120
592a252b 5121 /* PREFIX_VEX_0FC4 */
c0f3af97 5122 {
592d1631
L
5123 { Bad_Opcode },
5124 { Bad_Opcode },
592a252b 5125 { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) },
c0f3af97
L
5126 },
5127
592a252b 5128 /* PREFIX_VEX_0FC5 */
c0f3af97 5129 {
592d1631
L
5130 { Bad_Opcode },
5131 { Bad_Opcode },
592a252b 5132 { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) },
c0f3af97
L
5133 },
5134
592a252b 5135 /* PREFIX_VEX_0FD0 */
c0f3af97 5136 {
592d1631
L
5137 { Bad_Opcode },
5138 { Bad_Opcode },
592a252b
L
5139 { VEX_W_TABLE (VEX_W_0FD0_P_2) },
5140 { VEX_W_TABLE (VEX_W_0FD0_P_3) },
c0f3af97
L
5141 },
5142
592a252b 5143 /* PREFIX_VEX_0FD1 */
c0f3af97 5144 {
592d1631
L
5145 { Bad_Opcode },
5146 { Bad_Opcode },
6c30d220 5147 { VEX_W_TABLE (VEX_W_0FD1_P_2) },
c0f3af97
L
5148 },
5149
592a252b 5150 /* PREFIX_VEX_0FD2 */
c0f3af97 5151 {
592d1631
L
5152 { Bad_Opcode },
5153 { Bad_Opcode },
6c30d220 5154 { VEX_W_TABLE (VEX_W_0FD2_P_2) },
c0f3af97
L
5155 },
5156
592a252b 5157 /* PREFIX_VEX_0FD3 */
c0f3af97 5158 {
592d1631
L
5159 { Bad_Opcode },
5160 { Bad_Opcode },
6c30d220 5161 { VEX_W_TABLE (VEX_W_0FD3_P_2) },
c0f3af97
L
5162 },
5163
592a252b 5164 /* PREFIX_VEX_0FD4 */
c0f3af97 5165 {
592d1631
L
5166 { Bad_Opcode },
5167 { Bad_Opcode },
6c30d220 5168 { VEX_W_TABLE (VEX_W_0FD4_P_2) },
c0f3af97
L
5169 },
5170
592a252b 5171 /* PREFIX_VEX_0FD5 */
c0f3af97 5172 {
592d1631
L
5173 { Bad_Opcode },
5174 { Bad_Opcode },
6c30d220 5175 { VEX_W_TABLE (VEX_W_0FD5_P_2) },
c0f3af97
L
5176 },
5177
592a252b 5178 /* PREFIX_VEX_0FD6 */
c0f3af97 5179 {
592d1631
L
5180 { Bad_Opcode },
5181 { Bad_Opcode },
592a252b 5182 { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) },
c0f3af97
L
5183 },
5184
592a252b 5185 /* PREFIX_VEX_0FD7 */
c0f3af97 5186 {
592d1631
L
5187 { Bad_Opcode },
5188 { Bad_Opcode },
592a252b 5189 { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) },
c0f3af97
L
5190 },
5191
592a252b 5192 /* PREFIX_VEX_0FD8 */
c0f3af97 5193 {
592d1631
L
5194 { Bad_Opcode },
5195 { Bad_Opcode },
6c30d220 5196 { VEX_W_TABLE (VEX_W_0FD8_P_2) },
c0f3af97
L
5197 },
5198
592a252b 5199 /* PREFIX_VEX_0FD9 */
c0f3af97 5200 {
592d1631
L
5201 { Bad_Opcode },
5202 { Bad_Opcode },
6c30d220 5203 { VEX_W_TABLE (VEX_W_0FD9_P_2) },
c0f3af97
L
5204 },
5205
592a252b 5206 /* PREFIX_VEX_0FDA */
c0f3af97 5207 {
592d1631
L
5208 { Bad_Opcode },
5209 { Bad_Opcode },
6c30d220 5210 { VEX_W_TABLE (VEX_W_0FDA_P_2) },
c0f3af97
L
5211 },
5212
592a252b 5213 /* PREFIX_VEX_0FDB */
c0f3af97 5214 {
592d1631
L
5215 { Bad_Opcode },
5216 { Bad_Opcode },
6c30d220 5217 { VEX_W_TABLE (VEX_W_0FDB_P_2) },
c0f3af97
L
5218 },
5219
592a252b 5220 /* PREFIX_VEX_0FDC */
c0f3af97 5221 {
592d1631
L
5222 { Bad_Opcode },
5223 { Bad_Opcode },
6c30d220 5224 { VEX_W_TABLE (VEX_W_0FDC_P_2) },
c0f3af97
L
5225 },
5226
592a252b 5227 /* PREFIX_VEX_0FDD */
c0f3af97 5228 {
592d1631
L
5229 { Bad_Opcode },
5230 { Bad_Opcode },
6c30d220 5231 { VEX_W_TABLE (VEX_W_0FDD_P_2) },
c0f3af97
L
5232 },
5233
592a252b 5234 /* PREFIX_VEX_0FDE */
c0f3af97 5235 {
592d1631
L
5236 { Bad_Opcode },
5237 { Bad_Opcode },
6c30d220 5238 { VEX_W_TABLE (VEX_W_0FDE_P_2) },
c0f3af97
L
5239 },
5240
592a252b 5241 /* PREFIX_VEX_0FDF */
c0f3af97 5242 {
592d1631
L
5243 { Bad_Opcode },
5244 { Bad_Opcode },
6c30d220 5245 { VEX_W_TABLE (VEX_W_0FDF_P_2) },
c0f3af97
L
5246 },
5247
592a252b 5248 /* PREFIX_VEX_0FE0 */
c0f3af97 5249 {
592d1631
L
5250 { Bad_Opcode },
5251 { Bad_Opcode },
6c30d220 5252 { VEX_W_TABLE (VEX_W_0FE0_P_2) },
c0f3af97
L
5253 },
5254
592a252b 5255 /* PREFIX_VEX_0FE1 */
c0f3af97 5256 {
592d1631
L
5257 { Bad_Opcode },
5258 { Bad_Opcode },
6c30d220 5259 { VEX_W_TABLE (VEX_W_0FE1_P_2) },
c0f3af97
L
5260 },
5261
592a252b 5262 /* PREFIX_VEX_0FE2 */
c0f3af97 5263 {
592d1631
L
5264 { Bad_Opcode },
5265 { Bad_Opcode },
6c30d220 5266 { VEX_W_TABLE (VEX_W_0FE2_P_2) },
c0f3af97
L
5267 },
5268
592a252b 5269 /* PREFIX_VEX_0FE3 */
c0f3af97 5270 {
592d1631
L
5271 { Bad_Opcode },
5272 { Bad_Opcode },
6c30d220 5273 { VEX_W_TABLE (VEX_W_0FE3_P_2) },
c0f3af97
L
5274 },
5275
592a252b 5276 /* PREFIX_VEX_0FE4 */
c0f3af97 5277 {
592d1631
L
5278 { Bad_Opcode },
5279 { Bad_Opcode },
6c30d220 5280 { VEX_W_TABLE (VEX_W_0FE4_P_2) },
c0f3af97
L
5281 },
5282
592a252b 5283 /* PREFIX_VEX_0FE5 */
c0f3af97 5284 {
592d1631
L
5285 { Bad_Opcode },
5286 { Bad_Opcode },
6c30d220 5287 { VEX_W_TABLE (VEX_W_0FE5_P_2) },
c0f3af97
L
5288 },
5289
592a252b 5290 /* PREFIX_VEX_0FE6 */
c0f3af97 5291 {
592d1631 5292 { Bad_Opcode },
592a252b
L
5293 { VEX_W_TABLE (VEX_W_0FE6_P_1) },
5294 { VEX_W_TABLE (VEX_W_0FE6_P_2) },
5295 { VEX_W_TABLE (VEX_W_0FE6_P_3) },
c0f3af97
L
5296 },
5297
592a252b 5298 /* PREFIX_VEX_0FE7 */
c0f3af97 5299 {
592d1631
L
5300 { Bad_Opcode },
5301 { Bad_Opcode },
592a252b 5302 { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) },
c0f3af97
L
5303 },
5304
592a252b 5305 /* PREFIX_VEX_0FE8 */
c0f3af97 5306 {
592d1631
L
5307 { Bad_Opcode },
5308 { Bad_Opcode },
6c30d220 5309 { VEX_W_TABLE (VEX_W_0FE8_P_2) },
c0f3af97
L
5310 },
5311
592a252b 5312 /* PREFIX_VEX_0FE9 */
c0f3af97 5313 {
592d1631
L
5314 { Bad_Opcode },
5315 { Bad_Opcode },
6c30d220 5316 { VEX_W_TABLE (VEX_W_0FE9_P_2) },
c0f3af97
L
5317 },
5318
592a252b 5319 /* PREFIX_VEX_0FEA */
c0f3af97 5320 {
592d1631
L
5321 { Bad_Opcode },
5322 { Bad_Opcode },
6c30d220 5323 { VEX_W_TABLE (VEX_W_0FEA_P_2) },
c0f3af97
L
5324 },
5325
592a252b 5326 /* PREFIX_VEX_0FEB */
c0f3af97 5327 {
592d1631
L
5328 { Bad_Opcode },
5329 { Bad_Opcode },
6c30d220 5330 { VEX_W_TABLE (VEX_W_0FEB_P_2) },
c0f3af97
L
5331 },
5332
592a252b 5333 /* PREFIX_VEX_0FEC */
c0f3af97 5334 {
592d1631
L
5335 { Bad_Opcode },
5336 { Bad_Opcode },
6c30d220 5337 { VEX_W_TABLE (VEX_W_0FEC_P_2) },
c0f3af97
L
5338 },
5339
592a252b 5340 /* PREFIX_VEX_0FED */
c0f3af97 5341 {
592d1631
L
5342 { Bad_Opcode },
5343 { Bad_Opcode },
6c30d220 5344 { VEX_W_TABLE (VEX_W_0FED_P_2) },
c0f3af97
L
5345 },
5346
592a252b 5347 /* PREFIX_VEX_0FEE */
c0f3af97 5348 {
592d1631
L
5349 { Bad_Opcode },
5350 { Bad_Opcode },
6c30d220 5351 { VEX_W_TABLE (VEX_W_0FEE_P_2) },
c0f3af97
L
5352 },
5353
592a252b 5354 /* PREFIX_VEX_0FEF */
c0f3af97 5355 {
592d1631
L
5356 { Bad_Opcode },
5357 { Bad_Opcode },
6c30d220 5358 { VEX_W_TABLE (VEX_W_0FEF_P_2) },
c0f3af97
L
5359 },
5360
592a252b 5361 /* PREFIX_VEX_0FF0 */
c0f3af97 5362 {
592d1631
L
5363 { Bad_Opcode },
5364 { Bad_Opcode },
5365 { Bad_Opcode },
592a252b 5366 { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) },
c0f3af97
L
5367 },
5368
592a252b 5369 /* PREFIX_VEX_0FF1 */
c0f3af97 5370 {
592d1631
L
5371 { Bad_Opcode },
5372 { Bad_Opcode },
6c30d220 5373 { VEX_W_TABLE (VEX_W_0FF1_P_2) },
c0f3af97
L
5374 },
5375
592a252b 5376 /* PREFIX_VEX_0FF2 */
c0f3af97 5377 {
592d1631
L
5378 { Bad_Opcode },
5379 { Bad_Opcode },
6c30d220 5380 { VEX_W_TABLE (VEX_W_0FF2_P_2) },
c0f3af97
L
5381 },
5382
592a252b 5383 /* PREFIX_VEX_0FF3 */
c0f3af97 5384 {
592d1631
L
5385 { Bad_Opcode },
5386 { Bad_Opcode },
6c30d220 5387 { VEX_W_TABLE (VEX_W_0FF3_P_2) },
c0f3af97
L
5388 },
5389
592a252b 5390 /* PREFIX_VEX_0FF4 */
c0f3af97 5391 {
592d1631
L
5392 { Bad_Opcode },
5393 { Bad_Opcode },
6c30d220 5394 { VEX_W_TABLE (VEX_W_0FF4_P_2) },
c0f3af97
L
5395 },
5396
592a252b 5397 /* PREFIX_VEX_0FF5 */
c0f3af97 5398 {
592d1631
L
5399 { Bad_Opcode },
5400 { Bad_Opcode },
6c30d220 5401 { VEX_W_TABLE (VEX_W_0FF5_P_2) },
c0f3af97
L
5402 },
5403
592a252b 5404 /* PREFIX_VEX_0FF6 */
c0f3af97 5405 {
592d1631
L
5406 { Bad_Opcode },
5407 { Bad_Opcode },
6c30d220 5408 { VEX_W_TABLE (VEX_W_0FF6_P_2) },
c0f3af97
L
5409 },
5410
592a252b 5411 /* PREFIX_VEX_0FF7 */
c0f3af97 5412 {
592d1631
L
5413 { Bad_Opcode },
5414 { Bad_Opcode },
592a252b 5415 { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) },
c0f3af97
L
5416 },
5417
592a252b 5418 /* PREFIX_VEX_0FF8 */
c0f3af97 5419 {
592d1631
L
5420 { Bad_Opcode },
5421 { Bad_Opcode },
6c30d220 5422 { VEX_W_TABLE (VEX_W_0FF8_P_2) },
c0f3af97
L
5423 },
5424
592a252b 5425 /* PREFIX_VEX_0FF9 */
c0f3af97 5426 {
592d1631
L
5427 { Bad_Opcode },
5428 { Bad_Opcode },
6c30d220 5429 { VEX_W_TABLE (VEX_W_0FF9_P_2) },
c0f3af97
L
5430 },
5431
592a252b 5432 /* PREFIX_VEX_0FFA */
c0f3af97 5433 {
592d1631
L
5434 { Bad_Opcode },
5435 { Bad_Opcode },
6c30d220 5436 { VEX_W_TABLE (VEX_W_0FFA_P_2) },
c0f3af97
L
5437 },
5438
592a252b 5439 /* PREFIX_VEX_0FFB */
c0f3af97 5440 {
592d1631
L
5441 { Bad_Opcode },
5442 { Bad_Opcode },
6c30d220 5443 { VEX_W_TABLE (VEX_W_0FFB_P_2) },
c0f3af97
L
5444 },
5445
592a252b 5446 /* PREFIX_VEX_0FFC */
c0f3af97 5447 {
592d1631
L
5448 { Bad_Opcode },
5449 { Bad_Opcode },
6c30d220 5450 { VEX_W_TABLE (VEX_W_0FFC_P_2) },
c0f3af97
L
5451 },
5452
592a252b 5453 /* PREFIX_VEX_0FFD */
c0f3af97 5454 {
592d1631
L
5455 { Bad_Opcode },
5456 { Bad_Opcode },
6c30d220 5457 { VEX_W_TABLE (VEX_W_0FFD_P_2) },
c0f3af97
L
5458 },
5459
592a252b 5460 /* PREFIX_VEX_0FFE */
c0f3af97 5461 {
592d1631
L
5462 { Bad_Opcode },
5463 { Bad_Opcode },
6c30d220 5464 { VEX_W_TABLE (VEX_W_0FFE_P_2) },
c0f3af97
L
5465 },
5466
592a252b 5467 /* PREFIX_VEX_0F3800 */
c0f3af97 5468 {
592d1631
L
5469 { Bad_Opcode },
5470 { Bad_Opcode },
6c30d220 5471 { VEX_W_TABLE (VEX_W_0F3800_P_2) },
c0f3af97
L
5472 },
5473
592a252b 5474 /* PREFIX_VEX_0F3801 */
c0f3af97 5475 {
592d1631
L
5476 { Bad_Opcode },
5477 { Bad_Opcode },
6c30d220 5478 { VEX_W_TABLE (VEX_W_0F3801_P_2) },
c0f3af97
L
5479 },
5480
592a252b 5481 /* PREFIX_VEX_0F3802 */
c0f3af97 5482 {
592d1631
L
5483 { Bad_Opcode },
5484 { Bad_Opcode },
6c30d220 5485 { VEX_W_TABLE (VEX_W_0F3802_P_2) },
c0f3af97
L
5486 },
5487
592a252b 5488 /* PREFIX_VEX_0F3803 */
c0f3af97 5489 {
592d1631
L
5490 { Bad_Opcode },
5491 { Bad_Opcode },
6c30d220 5492 { VEX_W_TABLE (VEX_W_0F3803_P_2) },
c0f3af97
L
5493 },
5494
592a252b 5495 /* PREFIX_VEX_0F3804 */
c0f3af97 5496 {
592d1631
L
5497 { Bad_Opcode },
5498 { Bad_Opcode },
6c30d220 5499 { VEX_W_TABLE (VEX_W_0F3804_P_2) },
c0f3af97
L
5500 },
5501
592a252b 5502 /* PREFIX_VEX_0F3805 */
c0f3af97 5503 {
592d1631
L
5504 { Bad_Opcode },
5505 { Bad_Opcode },
6c30d220 5506 { VEX_W_TABLE (VEX_W_0F3805_P_2) },
c0f3af97
L
5507 },
5508
592a252b 5509 /* PREFIX_VEX_0F3806 */
c0f3af97 5510 {
592d1631
L
5511 { Bad_Opcode },
5512 { Bad_Opcode },
6c30d220 5513 { VEX_W_TABLE (VEX_W_0F3806_P_2) },
c0f3af97
L
5514 },
5515
592a252b 5516 /* PREFIX_VEX_0F3807 */
c0f3af97 5517 {
592d1631
L
5518 { Bad_Opcode },
5519 { Bad_Opcode },
6c30d220 5520 { VEX_W_TABLE (VEX_W_0F3807_P_2) },
c0f3af97
L
5521 },
5522
592a252b 5523 /* PREFIX_VEX_0F3808 */
c0f3af97 5524 {
592d1631
L
5525 { Bad_Opcode },
5526 { Bad_Opcode },
6c30d220 5527 { VEX_W_TABLE (VEX_W_0F3808_P_2) },
c0f3af97
L
5528 },
5529
592a252b 5530 /* PREFIX_VEX_0F3809 */
c0f3af97 5531 {
592d1631
L
5532 { Bad_Opcode },
5533 { Bad_Opcode },
6c30d220 5534 { VEX_W_TABLE (VEX_W_0F3809_P_2) },
c0f3af97
L
5535 },
5536
592a252b 5537 /* PREFIX_VEX_0F380A */
c0f3af97 5538 {
592d1631
L
5539 { Bad_Opcode },
5540 { Bad_Opcode },
6c30d220 5541 { VEX_W_TABLE (VEX_W_0F380A_P_2) },
c0f3af97
L
5542 },
5543
592a252b 5544 /* PREFIX_VEX_0F380B */
c0f3af97 5545 {
592d1631
L
5546 { Bad_Opcode },
5547 { Bad_Opcode },
6c30d220 5548 { VEX_W_TABLE (VEX_W_0F380B_P_2) },
c0f3af97
L
5549 },
5550
592a252b 5551 /* PREFIX_VEX_0F380C */
c0f3af97 5552 {
592d1631
L
5553 { Bad_Opcode },
5554 { Bad_Opcode },
592a252b 5555 { VEX_W_TABLE (VEX_W_0F380C_P_2) },
c0f3af97
L
5556 },
5557
592a252b 5558 /* PREFIX_VEX_0F380D */
c0f3af97 5559 {
592d1631
L
5560 { Bad_Opcode },
5561 { Bad_Opcode },
592a252b 5562 { VEX_W_TABLE (VEX_W_0F380D_P_2) },
c0f3af97
L
5563 },
5564
592a252b 5565 /* PREFIX_VEX_0F380E */
c0f3af97 5566 {
592d1631
L
5567 { Bad_Opcode },
5568 { Bad_Opcode },
592a252b 5569 { VEX_W_TABLE (VEX_W_0F380E_P_2) },
c0f3af97
L
5570 },
5571
592a252b 5572 /* PREFIX_VEX_0F380F */
c0f3af97 5573 {
592d1631
L
5574 { Bad_Opcode },
5575 { Bad_Opcode },
592a252b 5576 { VEX_W_TABLE (VEX_W_0F380F_P_2) },
c0f3af97
L
5577 },
5578
592a252b 5579 /* PREFIX_VEX_0F3813 */
c7b8aa3a
L
5580 {
5581 { Bad_Opcode },
5582 { Bad_Opcode },
bf890a93 5583 { "vcvtph2ps", { XM, EXxmmq }, 0 },
c7b8aa3a
L
5584 },
5585
6c30d220
L
5586 /* PREFIX_VEX_0F3816 */
5587 {
5588 { Bad_Opcode },
5589 { Bad_Opcode },
5590 { VEX_LEN_TABLE (VEX_LEN_0F3816_P_2) },
5591 },
5592
592a252b 5593 /* PREFIX_VEX_0F3817 */
c0f3af97 5594 {
592d1631
L
5595 { Bad_Opcode },
5596 { Bad_Opcode },
592a252b 5597 { VEX_W_TABLE (VEX_W_0F3817_P_2) },
c0f3af97
L
5598 },
5599
592a252b 5600 /* PREFIX_VEX_0F3818 */
c0f3af97 5601 {
592d1631
L
5602 { Bad_Opcode },
5603 { Bad_Opcode },
6c30d220 5604 { VEX_W_TABLE (VEX_W_0F3818_P_2) },
c0f3af97
L
5605 },
5606
592a252b 5607 /* PREFIX_VEX_0F3819 */
c0f3af97 5608 {
592d1631
L
5609 { Bad_Opcode },
5610 { Bad_Opcode },
6c30d220 5611 { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2) },
c0f3af97
L
5612 },
5613
592a252b 5614 /* PREFIX_VEX_0F381A */
c0f3af97 5615 {
592d1631
L
5616 { Bad_Opcode },
5617 { Bad_Opcode },
592a252b 5618 { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) },
c0f3af97
L
5619 },
5620
592a252b 5621 /* PREFIX_VEX_0F381C */
c0f3af97 5622 {
592d1631
L
5623 { Bad_Opcode },
5624 { Bad_Opcode },
6c30d220 5625 { VEX_W_TABLE (VEX_W_0F381C_P_2) },
c0f3af97
L
5626 },
5627
592a252b 5628 /* PREFIX_VEX_0F381D */
c0f3af97 5629 {
592d1631
L
5630 { Bad_Opcode },
5631 { Bad_Opcode },
6c30d220 5632 { VEX_W_TABLE (VEX_W_0F381D_P_2) },
c0f3af97
L
5633 },
5634
592a252b 5635 /* PREFIX_VEX_0F381E */
c0f3af97 5636 {
592d1631
L
5637 { Bad_Opcode },
5638 { Bad_Opcode },
6c30d220 5639 { VEX_W_TABLE (VEX_W_0F381E_P_2) },
c0f3af97
L
5640 },
5641
592a252b 5642 /* PREFIX_VEX_0F3820 */
c0f3af97 5643 {
592d1631
L
5644 { Bad_Opcode },
5645 { Bad_Opcode },
6c30d220 5646 { VEX_W_TABLE (VEX_W_0F3820_P_2) },
c0f3af97
L
5647 },
5648
592a252b 5649 /* PREFIX_VEX_0F3821 */
c0f3af97 5650 {
592d1631
L
5651 { Bad_Opcode },
5652 { Bad_Opcode },
6c30d220 5653 { VEX_W_TABLE (VEX_W_0F3821_P_2) },
c0f3af97
L
5654 },
5655
592a252b 5656 /* PREFIX_VEX_0F3822 */
c0f3af97 5657 {
592d1631
L
5658 { Bad_Opcode },
5659 { Bad_Opcode },
6c30d220 5660 { VEX_W_TABLE (VEX_W_0F3822_P_2) },
c0f3af97
L
5661 },
5662
592a252b 5663 /* PREFIX_VEX_0F3823 */
c0f3af97 5664 {
592d1631
L
5665 { Bad_Opcode },
5666 { Bad_Opcode },
6c30d220 5667 { VEX_W_TABLE (VEX_W_0F3823_P_2) },
c0f3af97
L
5668 },
5669
592a252b 5670 /* PREFIX_VEX_0F3824 */
c0f3af97 5671 {
592d1631
L
5672 { Bad_Opcode },
5673 { Bad_Opcode },
6c30d220 5674 { VEX_W_TABLE (VEX_W_0F3824_P_2) },
c0f3af97
L
5675 },
5676
592a252b 5677 /* PREFIX_VEX_0F3825 */
c0f3af97 5678 {
592d1631
L
5679 { Bad_Opcode },
5680 { Bad_Opcode },
6c30d220 5681 { VEX_W_TABLE (VEX_W_0F3825_P_2) },
c0f3af97
L
5682 },
5683
592a252b 5684 /* PREFIX_VEX_0F3828 */
c0f3af97 5685 {
592d1631
L
5686 { Bad_Opcode },
5687 { Bad_Opcode },
6c30d220 5688 { VEX_W_TABLE (VEX_W_0F3828_P_2) },
c0f3af97
L
5689 },
5690
592a252b 5691 /* PREFIX_VEX_0F3829 */
c0f3af97 5692 {
592d1631
L
5693 { Bad_Opcode },
5694 { Bad_Opcode },
6c30d220 5695 { VEX_W_TABLE (VEX_W_0F3829_P_2) },
c0f3af97
L
5696 },
5697
592a252b 5698 /* PREFIX_VEX_0F382A */
c0f3af97 5699 {
592d1631
L
5700 { Bad_Opcode },
5701 { Bad_Opcode },
592a252b 5702 { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) },
c0f3af97
L
5703 },
5704
592a252b 5705 /* PREFIX_VEX_0F382B */
c0f3af97 5706 {
592d1631
L
5707 { Bad_Opcode },
5708 { Bad_Opcode },
6c30d220 5709 { VEX_W_TABLE (VEX_W_0F382B_P_2) },
c0f3af97
L
5710 },
5711
592a252b 5712 /* PREFIX_VEX_0F382C */
c0f3af97 5713 {
592d1631
L
5714 { Bad_Opcode },
5715 { Bad_Opcode },
592a252b 5716 { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) },
c0f3af97
L
5717 },
5718
592a252b 5719 /* PREFIX_VEX_0F382D */
c0f3af97 5720 {
592d1631
L
5721 { Bad_Opcode },
5722 { Bad_Opcode },
592a252b 5723 { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) },
c0f3af97
L
5724 },
5725
592a252b 5726 /* PREFIX_VEX_0F382E */
c0f3af97 5727 {
592d1631
L
5728 { Bad_Opcode },
5729 { Bad_Opcode },
592a252b 5730 { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) },
c0f3af97
L
5731 },
5732
592a252b 5733 /* PREFIX_VEX_0F382F */
c0f3af97 5734 {
592d1631
L
5735 { Bad_Opcode },
5736 { Bad_Opcode },
592a252b 5737 { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) },
c0f3af97
L
5738 },
5739
592a252b 5740 /* PREFIX_VEX_0F3830 */
c0f3af97 5741 {
592d1631
L
5742 { Bad_Opcode },
5743 { Bad_Opcode },
6c30d220 5744 { VEX_W_TABLE (VEX_W_0F3830_P_2) },
c0f3af97
L
5745 },
5746
592a252b 5747 /* PREFIX_VEX_0F3831 */
c0f3af97 5748 {
592d1631
L
5749 { Bad_Opcode },
5750 { Bad_Opcode },
6c30d220 5751 { VEX_W_TABLE (VEX_W_0F3831_P_2) },
c0f3af97
L
5752 },
5753
592a252b 5754 /* PREFIX_VEX_0F3832 */
c0f3af97 5755 {
592d1631
L
5756 { Bad_Opcode },
5757 { Bad_Opcode },
6c30d220 5758 { VEX_W_TABLE (VEX_W_0F3832_P_2) },
c0f3af97
L
5759 },
5760
592a252b 5761 /* PREFIX_VEX_0F3833 */
c0f3af97 5762 {
592d1631
L
5763 { Bad_Opcode },
5764 { Bad_Opcode },
6c30d220 5765 { VEX_W_TABLE (VEX_W_0F3833_P_2) },
c0f3af97
L
5766 },
5767
592a252b 5768 /* PREFIX_VEX_0F3834 */
c0f3af97 5769 {
592d1631
L
5770 { Bad_Opcode },
5771 { Bad_Opcode },
6c30d220 5772 { VEX_W_TABLE (VEX_W_0F3834_P_2) },
c0f3af97
L
5773 },
5774
592a252b 5775 /* PREFIX_VEX_0F3835 */
c0f3af97 5776 {
592d1631
L
5777 { Bad_Opcode },
5778 { Bad_Opcode },
6c30d220
L
5779 { VEX_W_TABLE (VEX_W_0F3835_P_2) },
5780 },
5781
5782 /* PREFIX_VEX_0F3836 */
5783 {
5784 { Bad_Opcode },
5785 { Bad_Opcode },
5786 { VEX_LEN_TABLE (VEX_LEN_0F3836_P_2) },
c0f3af97
L
5787 },
5788
592a252b 5789 /* PREFIX_VEX_0F3837 */
c0f3af97 5790 {
592d1631
L
5791 { Bad_Opcode },
5792 { Bad_Opcode },
6c30d220 5793 { VEX_W_TABLE (VEX_W_0F3837_P_2) },
c0f3af97
L
5794 },
5795
592a252b 5796 /* PREFIX_VEX_0F3838 */
c0f3af97 5797 {
592d1631
L
5798 { Bad_Opcode },
5799 { Bad_Opcode },
6c30d220 5800 { VEX_W_TABLE (VEX_W_0F3838_P_2) },
c0f3af97
L
5801 },
5802
592a252b 5803 /* PREFIX_VEX_0F3839 */
c0f3af97 5804 {
592d1631
L
5805 { Bad_Opcode },
5806 { Bad_Opcode },
6c30d220 5807 { VEX_W_TABLE (VEX_W_0F3839_P_2) },
c0f3af97
L
5808 },
5809
592a252b 5810 /* PREFIX_VEX_0F383A */
c0f3af97 5811 {
592d1631
L
5812 { Bad_Opcode },
5813 { Bad_Opcode },
6c30d220 5814 { VEX_W_TABLE (VEX_W_0F383A_P_2) },
c0f3af97
L
5815 },
5816
592a252b 5817 /* PREFIX_VEX_0F383B */
c0f3af97 5818 {
592d1631
L
5819 { Bad_Opcode },
5820 { Bad_Opcode },
6c30d220 5821 { VEX_W_TABLE (VEX_W_0F383B_P_2) },
c0f3af97
L
5822 },
5823
592a252b 5824 /* PREFIX_VEX_0F383C */
c0f3af97 5825 {
592d1631
L
5826 { Bad_Opcode },
5827 { Bad_Opcode },
6c30d220 5828 { VEX_W_TABLE (VEX_W_0F383C_P_2) },
c0f3af97
L
5829 },
5830
592a252b 5831 /* PREFIX_VEX_0F383D */
c0f3af97 5832 {
592d1631
L
5833 { Bad_Opcode },
5834 { Bad_Opcode },
6c30d220 5835 { VEX_W_TABLE (VEX_W_0F383D_P_2) },
c0f3af97
L
5836 },
5837
592a252b 5838 /* PREFIX_VEX_0F383E */
c0f3af97 5839 {
592d1631
L
5840 { Bad_Opcode },
5841 { Bad_Opcode },
6c30d220 5842 { VEX_W_TABLE (VEX_W_0F383E_P_2) },
c0f3af97
L
5843 },
5844
592a252b 5845 /* PREFIX_VEX_0F383F */
c0f3af97 5846 {
592d1631
L
5847 { Bad_Opcode },
5848 { Bad_Opcode },
6c30d220 5849 { VEX_W_TABLE (VEX_W_0F383F_P_2) },
c0f3af97
L
5850 },
5851
592a252b 5852 /* PREFIX_VEX_0F3840 */
c0f3af97 5853 {
592d1631
L
5854 { Bad_Opcode },
5855 { Bad_Opcode },
6c30d220 5856 { VEX_W_TABLE (VEX_W_0F3840_P_2) },
c0f3af97
L
5857 },
5858
592a252b 5859 /* PREFIX_VEX_0F3841 */
c0f3af97 5860 {
592d1631
L
5861 { Bad_Opcode },
5862 { Bad_Opcode },
592a252b 5863 { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) },
c0f3af97
L
5864 },
5865
6c30d220
L
5866 /* PREFIX_VEX_0F3845 */
5867 {
5868 { Bad_Opcode },
5869 { Bad_Opcode },
bf890a93 5870 { "vpsrlv%LW", { XM, Vex, EXx }, 0 },
6c30d220
L
5871 },
5872
5873 /* PREFIX_VEX_0F3846 */
5874 {
5875 { Bad_Opcode },
5876 { Bad_Opcode },
5877 { VEX_W_TABLE (VEX_W_0F3846_P_2) },
5878 },
5879
5880 /* PREFIX_VEX_0F3847 */
5881 {
5882 { Bad_Opcode },
5883 { Bad_Opcode },
bf890a93 5884 { "vpsllv%LW", { XM, Vex, EXx }, 0 },
6c30d220
L
5885 },
5886
5887 /* PREFIX_VEX_0F3858 */
5888 {
5889 { Bad_Opcode },
5890 { Bad_Opcode },
5891 { VEX_W_TABLE (VEX_W_0F3858_P_2) },
5892 },
5893
5894 /* PREFIX_VEX_0F3859 */
5895 {
5896 { Bad_Opcode },
5897 { Bad_Opcode },
5898 { VEX_W_TABLE (VEX_W_0F3859_P_2) },
5899 },
5900
5901 /* PREFIX_VEX_0F385A */
5902 {
5903 { Bad_Opcode },
5904 { Bad_Opcode },
5905 { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) },
5906 },
5907
5908 /* PREFIX_VEX_0F3878 */
5909 {
5910 { Bad_Opcode },
5911 { Bad_Opcode },
5912 { VEX_W_TABLE (VEX_W_0F3878_P_2) },
5913 },
5914
5915 /* PREFIX_VEX_0F3879 */
5916 {
5917 { Bad_Opcode },
5918 { Bad_Opcode },
5919 { VEX_W_TABLE (VEX_W_0F3879_P_2) },
5920 },
5921
5922 /* PREFIX_VEX_0F388C */
5923 {
5924 { Bad_Opcode },
5925 { Bad_Opcode },
f7002f42 5926 { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) },
6c30d220
L
5927 },
5928
5929 /* PREFIX_VEX_0F388E */
5930 {
5931 { Bad_Opcode },
5932 { Bad_Opcode },
f7002f42 5933 { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) },
6c30d220
L
5934 },
5935
5936 /* PREFIX_VEX_0F3890 */
5937 {
5938 { Bad_Opcode },
5939 { Bad_Opcode },
bf890a93 5940 { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
5941 },
5942
5943 /* PREFIX_VEX_0F3891 */
5944 {
5945 { Bad_Opcode },
5946 { Bad_Opcode },
bf890a93 5947 { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
5948 },
5949
5950 /* PREFIX_VEX_0F3892 */
5951 {
5952 { Bad_Opcode },
5953 { Bad_Opcode },
bf890a93 5954 { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
5955 },
5956
5957 /* PREFIX_VEX_0F3893 */
5958 {
5959 { Bad_Opcode },
5960 { Bad_Opcode },
bf890a93 5961 { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
5962 },
5963
592a252b 5964 /* PREFIX_VEX_0F3896 */
a5ff0eb2 5965 {
592d1631
L
5966 { Bad_Opcode },
5967 { Bad_Opcode },
bf890a93 5968 { "vfmaddsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
5969 },
5970
592a252b 5971 /* PREFIX_VEX_0F3897 */
a5ff0eb2 5972 {
592d1631
L
5973 { Bad_Opcode },
5974 { Bad_Opcode },
bf890a93 5975 { "vfmsubadd132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
5976 },
5977
592a252b 5978 /* PREFIX_VEX_0F3898 */
a5ff0eb2 5979 {
592d1631
L
5980 { Bad_Opcode },
5981 { Bad_Opcode },
bf890a93 5982 { "vfmadd132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
5983 },
5984
592a252b 5985 /* PREFIX_VEX_0F3899 */
a5ff0eb2 5986 {
592d1631
L
5987 { Bad_Opcode },
5988 { Bad_Opcode },
bf890a93 5989 { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
a5ff0eb2
L
5990 },
5991
592a252b 5992 /* PREFIX_VEX_0F389A */
a5ff0eb2 5993 {
592d1631
L
5994 { Bad_Opcode },
5995 { Bad_Opcode },
bf890a93 5996 { "vfmsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
5997 },
5998
592a252b 5999 /* PREFIX_VEX_0F389B */
c0f3af97 6000 {
592d1631
L
6001 { Bad_Opcode },
6002 { Bad_Opcode },
bf890a93 6003 { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6004 },
6005
592a252b 6006 /* PREFIX_VEX_0F389C */
c0f3af97 6007 {
592d1631
L
6008 { Bad_Opcode },
6009 { Bad_Opcode },
bf890a93 6010 { "vfnmadd132p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6011 },
6012
592a252b 6013 /* PREFIX_VEX_0F389D */
c0f3af97 6014 {
592d1631
L
6015 { Bad_Opcode },
6016 { Bad_Opcode },
bf890a93 6017 { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6018 },
6019
592a252b 6020 /* PREFIX_VEX_0F389E */
c0f3af97 6021 {
592d1631
L
6022 { Bad_Opcode },
6023 { Bad_Opcode },
bf890a93 6024 { "vfnmsub132p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6025 },
6026
592a252b 6027 /* PREFIX_VEX_0F389F */
c0f3af97 6028 {
592d1631
L
6029 { Bad_Opcode },
6030 { Bad_Opcode },
bf890a93 6031 { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6032 },
6033
592a252b 6034 /* PREFIX_VEX_0F38A6 */
c0f3af97 6035 {
592d1631
L
6036 { Bad_Opcode },
6037 { Bad_Opcode },
bf890a93 6038 { "vfmaddsub213p%XW", { XM, Vex, EXx }, 0 },
592d1631 6039 { Bad_Opcode },
c0f3af97
L
6040 },
6041
592a252b 6042 /* PREFIX_VEX_0F38A7 */
c0f3af97 6043 {
592d1631
L
6044 { Bad_Opcode },
6045 { Bad_Opcode },
bf890a93 6046 { "vfmsubadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6047 },
6048
592a252b 6049 /* PREFIX_VEX_0F38A8 */
c0f3af97 6050 {
592d1631
L
6051 { Bad_Opcode },
6052 { Bad_Opcode },
bf890a93 6053 { "vfmadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6054 },
6055
592a252b 6056 /* PREFIX_VEX_0F38A9 */
c0f3af97 6057 {
592d1631
L
6058 { Bad_Opcode },
6059 { Bad_Opcode },
bf890a93 6060 { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6061 },
6062
592a252b 6063 /* PREFIX_VEX_0F38AA */
c0f3af97 6064 {
592d1631
L
6065 { Bad_Opcode },
6066 { Bad_Opcode },
bf890a93 6067 { "vfmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6068 },
6069
592a252b 6070 /* PREFIX_VEX_0F38AB */
c0f3af97 6071 {
592d1631
L
6072 { Bad_Opcode },
6073 { Bad_Opcode },
bf890a93 6074 { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6075 },
6076
592a252b 6077 /* PREFIX_VEX_0F38AC */
c0f3af97 6078 {
592d1631
L
6079 { Bad_Opcode },
6080 { Bad_Opcode },
bf890a93 6081 { "vfnmadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6082 },
6083
592a252b 6084 /* PREFIX_VEX_0F38AD */
c0f3af97 6085 {
592d1631
L
6086 { Bad_Opcode },
6087 { Bad_Opcode },
bf890a93 6088 { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6089 },
6090
592a252b 6091 /* PREFIX_VEX_0F38AE */
c0f3af97 6092 {
592d1631
L
6093 { Bad_Opcode },
6094 { Bad_Opcode },
bf890a93 6095 { "vfnmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6096 },
6097
592a252b 6098 /* PREFIX_VEX_0F38AF */
c0f3af97 6099 {
592d1631
L
6100 { Bad_Opcode },
6101 { Bad_Opcode },
bf890a93 6102 { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6103 },
6104
592a252b 6105 /* PREFIX_VEX_0F38B6 */
c0f3af97 6106 {
592d1631
L
6107 { Bad_Opcode },
6108 { Bad_Opcode },
bf890a93 6109 { "vfmaddsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6110 },
6111
592a252b 6112 /* PREFIX_VEX_0F38B7 */
c0f3af97 6113 {
592d1631
L
6114 { Bad_Opcode },
6115 { Bad_Opcode },
bf890a93 6116 { "vfmsubadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6117 },
6118
592a252b 6119 /* PREFIX_VEX_0F38B8 */
c0f3af97 6120 {
592d1631
L
6121 { Bad_Opcode },
6122 { Bad_Opcode },
bf890a93 6123 { "vfmadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6124 },
6125
592a252b 6126 /* PREFIX_VEX_0F38B9 */
c0f3af97 6127 {
592d1631
L
6128 { Bad_Opcode },
6129 { Bad_Opcode },
bf890a93 6130 { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6131 },
6132
592a252b 6133 /* PREFIX_VEX_0F38BA */
c0f3af97 6134 {
592d1631
L
6135 { Bad_Opcode },
6136 { Bad_Opcode },
bf890a93 6137 { "vfmsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6138 },
6139
592a252b 6140 /* PREFIX_VEX_0F38BB */
c0f3af97 6141 {
592d1631
L
6142 { Bad_Opcode },
6143 { Bad_Opcode },
bf890a93 6144 { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6145 },
6146
592a252b 6147 /* PREFIX_VEX_0F38BC */
c0f3af97 6148 {
592d1631
L
6149 { Bad_Opcode },
6150 { Bad_Opcode },
bf890a93 6151 { "vfnmadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6152 },
6153
592a252b 6154 /* PREFIX_VEX_0F38BD */
c0f3af97 6155 {
592d1631
L
6156 { Bad_Opcode },
6157 { Bad_Opcode },
bf890a93 6158 { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6159 },
6160
592a252b 6161 /* PREFIX_VEX_0F38BE */
c0f3af97 6162 {
592d1631
L
6163 { Bad_Opcode },
6164 { Bad_Opcode },
bf890a93 6165 { "vfnmsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6166 },
6167
592a252b 6168 /* PREFIX_VEX_0F38BF */
c0f3af97 6169 {
592d1631
L
6170 { Bad_Opcode },
6171 { Bad_Opcode },
bf890a93 6172 { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6173 },
6174
592a252b 6175 /* PREFIX_VEX_0F38DB */
c0f3af97 6176 {
592d1631
L
6177 { Bad_Opcode },
6178 { Bad_Opcode },
592a252b 6179 { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
c0f3af97
L
6180 },
6181
592a252b 6182 /* PREFIX_VEX_0F38DC */
c0f3af97 6183 {
592d1631
L
6184 { Bad_Opcode },
6185 { Bad_Opcode },
592a252b 6186 { VEX_LEN_TABLE (VEX_LEN_0F38DC_P_2) },
c0f3af97
L
6187 },
6188
592a252b 6189 /* PREFIX_VEX_0F38DD */
c0f3af97 6190 {
592d1631
L
6191 { Bad_Opcode },
6192 { Bad_Opcode },
592a252b 6193 { VEX_LEN_TABLE (VEX_LEN_0F38DD_P_2) },
c0f3af97
L
6194 },
6195
592a252b 6196 /* PREFIX_VEX_0F38DE */
c0f3af97 6197 {
592d1631
L
6198 { Bad_Opcode },
6199 { Bad_Opcode },
592a252b 6200 { VEX_LEN_TABLE (VEX_LEN_0F38DE_P_2) },
c0f3af97
L
6201 },
6202
592a252b 6203 /* PREFIX_VEX_0F38DF */
c0f3af97 6204 {
592d1631
L
6205 { Bad_Opcode },
6206 { Bad_Opcode },
592a252b 6207 { VEX_LEN_TABLE (VEX_LEN_0F38DF_P_2) },
c0f3af97
L
6208 },
6209
f12dc422
L
6210 /* PREFIX_VEX_0F38F2 */
6211 {
6212 { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
6213 },
6214
6215 /* PREFIX_VEX_0F38F3_REG_1 */
6216 {
6217 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
6218 },
6219
6220 /* PREFIX_VEX_0F38F3_REG_2 */
6221 {
6222 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
6223 },
6224
6225 /* PREFIX_VEX_0F38F3_REG_3 */
6226 {
6227 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
6228 },
6229
6c30d220
L
6230 /* PREFIX_VEX_0F38F5 */
6231 {
6232 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) },
6233 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) },
6234 { Bad_Opcode },
6235 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) },
6236 },
6237
6238 /* PREFIX_VEX_0F38F6 */
6239 {
6240 { Bad_Opcode },
6241 { Bad_Opcode },
6242 { Bad_Opcode },
6243 { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) },
6244 },
6245
f12dc422
L
6246 /* PREFIX_VEX_0F38F7 */
6247 {
6248 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
6c30d220
L
6249 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) },
6250 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) },
6251 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) },
6252 },
6253
6254 /* PREFIX_VEX_0F3A00 */
6255 {
6256 { Bad_Opcode },
6257 { Bad_Opcode },
6258 { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) },
6259 },
6260
6261 /* PREFIX_VEX_0F3A01 */
6262 {
6263 { Bad_Opcode },
6264 { Bad_Opcode },
6265 { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) },
6266 },
6267
6268 /* PREFIX_VEX_0F3A02 */
6269 {
6270 { Bad_Opcode },
6271 { Bad_Opcode },
6272 { VEX_W_TABLE (VEX_W_0F3A02_P_2) },
f12dc422
L
6273 },
6274
592a252b 6275 /* PREFIX_VEX_0F3A04 */
c0f3af97 6276 {
592d1631
L
6277 { Bad_Opcode },
6278 { Bad_Opcode },
592a252b 6279 { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
c0f3af97
L
6280 },
6281
592a252b 6282 /* PREFIX_VEX_0F3A05 */
c0f3af97 6283 {
592d1631
L
6284 { Bad_Opcode },
6285 { Bad_Opcode },
592a252b 6286 { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
c0f3af97
L
6287 },
6288
592a252b 6289 /* PREFIX_VEX_0F3A06 */
c0f3af97 6290 {
592d1631
L
6291 { Bad_Opcode },
6292 { Bad_Opcode },
592a252b 6293 { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
c0f3af97
L
6294 },
6295
592a252b 6296 /* PREFIX_VEX_0F3A08 */
c0f3af97 6297 {
592d1631
L
6298 { Bad_Opcode },
6299 { Bad_Opcode },
592a252b 6300 { VEX_W_TABLE (VEX_W_0F3A08_P_2) },
c0f3af97
L
6301 },
6302
592a252b 6303 /* PREFIX_VEX_0F3A09 */
c0f3af97 6304 {
592d1631
L
6305 { Bad_Opcode },
6306 { Bad_Opcode },
592a252b 6307 { VEX_W_TABLE (VEX_W_0F3A09_P_2) },
c0f3af97
L
6308 },
6309
592a252b 6310 /* PREFIX_VEX_0F3A0A */
c0f3af97 6311 {
592d1631
L
6312 { Bad_Opcode },
6313 { Bad_Opcode },
592a252b 6314 { VEX_LEN_TABLE (VEX_LEN_0F3A0A_P_2) },
0bfee649
L
6315 },
6316
592a252b 6317 /* PREFIX_VEX_0F3A0B */
0bfee649 6318 {
592d1631
L
6319 { Bad_Opcode },
6320 { Bad_Opcode },
592a252b 6321 { VEX_LEN_TABLE (VEX_LEN_0F3A0B_P_2) },
0bfee649
L
6322 },
6323
592a252b 6324 /* PREFIX_VEX_0F3A0C */
0bfee649 6325 {
592d1631
L
6326 { Bad_Opcode },
6327 { Bad_Opcode },
592a252b 6328 { VEX_W_TABLE (VEX_W_0F3A0C_P_2) },
0bfee649
L
6329 },
6330
592a252b 6331 /* PREFIX_VEX_0F3A0D */
0bfee649 6332 {
592d1631
L
6333 { Bad_Opcode },
6334 { Bad_Opcode },
592a252b 6335 { VEX_W_TABLE (VEX_W_0F3A0D_P_2) },
c0f3af97
L
6336 },
6337
592a252b 6338 /* PREFIX_VEX_0F3A0E */
0bfee649 6339 {
592d1631
L
6340 { Bad_Opcode },
6341 { Bad_Opcode },
6c30d220 6342 { VEX_W_TABLE (VEX_W_0F3A0E_P_2) },
0bfee649
L
6343 },
6344
592a252b 6345 /* PREFIX_VEX_0F3A0F */
0bfee649 6346 {
592d1631
L
6347 { Bad_Opcode },
6348 { Bad_Opcode },
6c30d220 6349 { VEX_W_TABLE (VEX_W_0F3A0F_P_2) },
0bfee649
L
6350 },
6351
592a252b 6352 /* PREFIX_VEX_0F3A14 */
0bfee649 6353 {
592d1631
L
6354 { Bad_Opcode },
6355 { Bad_Opcode },
592a252b 6356 { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
0bfee649
L
6357 },
6358
592a252b 6359 /* PREFIX_VEX_0F3A15 */
0bfee649 6360 {
592d1631
L
6361 { Bad_Opcode },
6362 { Bad_Opcode },
592a252b 6363 { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
0bfee649
L
6364 },
6365
592a252b 6366 /* PREFIX_VEX_0F3A16 */
c0f3af97 6367 {
592d1631
L
6368 { Bad_Opcode },
6369 { Bad_Opcode },
592a252b 6370 { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
c0f3af97
L
6371 },
6372
592a252b 6373 /* PREFIX_VEX_0F3A17 */
c0f3af97 6374 {
592d1631
L
6375 { Bad_Opcode },
6376 { Bad_Opcode },
592a252b 6377 { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
c0f3af97
L
6378 },
6379
592a252b 6380 /* PREFIX_VEX_0F3A18 */
c0f3af97 6381 {
592d1631
L
6382 { Bad_Opcode },
6383 { Bad_Opcode },
592a252b 6384 { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
c0f3af97
L
6385 },
6386
592a252b 6387 /* PREFIX_VEX_0F3A19 */
c0f3af97 6388 {
592d1631
L
6389 { Bad_Opcode },
6390 { Bad_Opcode },
592a252b 6391 { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
c0f3af97
L
6392 },
6393
592a252b 6394 /* PREFIX_VEX_0F3A1D */
c7b8aa3a
L
6395 {
6396 { Bad_Opcode },
6397 { Bad_Opcode },
bf890a93 6398 { "vcvtps2ph", { EXxmmq, XM, Ib }, 0 },
c7b8aa3a
L
6399 },
6400
592a252b 6401 /* PREFIX_VEX_0F3A20 */
c0f3af97 6402 {
592d1631
L
6403 { Bad_Opcode },
6404 { Bad_Opcode },
592a252b 6405 { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
c0f3af97
L
6406 },
6407
592a252b 6408 /* PREFIX_VEX_0F3A21 */
c0f3af97 6409 {
592d1631
L
6410 { Bad_Opcode },
6411 { Bad_Opcode },
592a252b 6412 { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
c0f3af97
L
6413 },
6414
592a252b 6415 /* PREFIX_VEX_0F3A22 */
0bfee649 6416 {
592d1631
L
6417 { Bad_Opcode },
6418 { Bad_Opcode },
592a252b 6419 { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
0bfee649
L
6420 },
6421
43234a1e
L
6422 /* PREFIX_VEX_0F3A30 */
6423 {
6424 { Bad_Opcode },
6425 { Bad_Opcode },
6426 { VEX_LEN_TABLE (VEX_LEN_0F3A30_P_2) },
6427 },
6428
1ba585e8
IT
6429 /* PREFIX_VEX_0F3A31 */
6430 {
6431 { Bad_Opcode },
6432 { Bad_Opcode },
6433 { VEX_LEN_TABLE (VEX_LEN_0F3A31_P_2) },
6434 },
6435
43234a1e
L
6436 /* PREFIX_VEX_0F3A32 */
6437 {
6438 { Bad_Opcode },
6439 { Bad_Opcode },
6440 { VEX_LEN_TABLE (VEX_LEN_0F3A32_P_2) },
6441 },
6442
1ba585e8
IT
6443 /* PREFIX_VEX_0F3A33 */
6444 {
6445 { Bad_Opcode },
6446 { Bad_Opcode },
6447 { VEX_LEN_TABLE (VEX_LEN_0F3A33_P_2) },
6448 },
6449
6c30d220
L
6450 /* PREFIX_VEX_0F3A38 */
6451 {
6452 { Bad_Opcode },
6453 { Bad_Opcode },
6454 { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) },
6455 },
6456
6457 /* PREFIX_VEX_0F3A39 */
6458 {
6459 { Bad_Opcode },
6460 { Bad_Opcode },
6461 { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) },
6462 },
6463
592a252b 6464 /* PREFIX_VEX_0F3A40 */
c0f3af97 6465 {
592d1631
L
6466 { Bad_Opcode },
6467 { Bad_Opcode },
592a252b 6468 { VEX_W_TABLE (VEX_W_0F3A40_P_2) },
c0f3af97
L
6469 },
6470
592a252b 6471 /* PREFIX_VEX_0F3A41 */
c0f3af97 6472 {
592d1631
L
6473 { Bad_Opcode },
6474 { Bad_Opcode },
592a252b 6475 { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
c0f3af97
L
6476 },
6477
592a252b 6478 /* PREFIX_VEX_0F3A42 */
c0f3af97 6479 {
592d1631
L
6480 { Bad_Opcode },
6481 { Bad_Opcode },
6c30d220 6482 { VEX_W_TABLE (VEX_W_0F3A42_P_2) },
c0f3af97
L
6483 },
6484
592a252b 6485 /* PREFIX_VEX_0F3A44 */
ce2f5b3c 6486 {
592d1631
L
6487 { Bad_Opcode },
6488 { Bad_Opcode },
592a252b 6489 { VEX_LEN_TABLE (VEX_LEN_0F3A44_P_2) },
ce2f5b3c
L
6490 },
6491
6c30d220
L
6492 /* PREFIX_VEX_0F3A46 */
6493 {
6494 { Bad_Opcode },
6495 { Bad_Opcode },
6496 { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) },
6497 },
6498
592a252b 6499 /* PREFIX_VEX_0F3A48 */
a683cc34
SP
6500 {
6501 { Bad_Opcode },
6502 { Bad_Opcode },
592a252b 6503 { VEX_W_TABLE (VEX_W_0F3A48_P_2) },
a683cc34
SP
6504 },
6505
592a252b 6506 /* PREFIX_VEX_0F3A49 */
a683cc34
SP
6507 {
6508 { Bad_Opcode },
6509 { Bad_Opcode },
592a252b 6510 { VEX_W_TABLE (VEX_W_0F3A49_P_2) },
a683cc34
SP
6511 },
6512
592a252b 6513 /* PREFIX_VEX_0F3A4A */
c0f3af97 6514 {
592d1631
L
6515 { Bad_Opcode },
6516 { Bad_Opcode },
592a252b 6517 { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
c0f3af97
L
6518 },
6519
592a252b 6520 /* PREFIX_VEX_0F3A4B */
c0f3af97 6521 {
592d1631
L
6522 { Bad_Opcode },
6523 { Bad_Opcode },
592a252b 6524 { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
c0f3af97
L
6525 },
6526
592a252b 6527 /* PREFIX_VEX_0F3A4C */
c0f3af97 6528 {
592d1631
L
6529 { Bad_Opcode },
6530 { Bad_Opcode },
6c30d220 6531 { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
c0f3af97
L
6532 },
6533
592a252b 6534 /* PREFIX_VEX_0F3A5C */
922d8de8 6535 {
592d1631
L
6536 { Bad_Opcode },
6537 { Bad_Opcode },
bf890a93 6538 { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6539 },
6540
592a252b 6541 /* PREFIX_VEX_0F3A5D */
922d8de8 6542 {
592d1631
L
6543 { Bad_Opcode },
6544 { Bad_Opcode },
bf890a93 6545 { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6546 },
6547
592a252b 6548 /* PREFIX_VEX_0F3A5E */
922d8de8 6549 {
592d1631
L
6550 { Bad_Opcode },
6551 { Bad_Opcode },
bf890a93 6552 { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6553 },
6554
592a252b 6555 /* PREFIX_VEX_0F3A5F */
922d8de8 6556 {
592d1631
L
6557 { Bad_Opcode },
6558 { Bad_Opcode },
bf890a93 6559 { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6560 },
6561
592a252b 6562 /* PREFIX_VEX_0F3A60 */
c0f3af97 6563 {
592d1631
L
6564 { Bad_Opcode },
6565 { Bad_Opcode },
592a252b 6566 { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
592d1631 6567 { Bad_Opcode },
c0f3af97
L
6568 },
6569
592a252b 6570 /* PREFIX_VEX_0F3A61 */
c0f3af97 6571 {
592d1631
L
6572 { Bad_Opcode },
6573 { Bad_Opcode },
592a252b 6574 { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
c0f3af97
L
6575 },
6576
592a252b 6577 /* PREFIX_VEX_0F3A62 */
c0f3af97 6578 {
592d1631
L
6579 { Bad_Opcode },
6580 { Bad_Opcode },
592a252b 6581 { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
c0f3af97
L
6582 },
6583
592a252b 6584 /* PREFIX_VEX_0F3A63 */
c0f3af97 6585 {
592d1631
L
6586 { Bad_Opcode },
6587 { Bad_Opcode },
592a252b 6588 { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
c0f3af97 6589 },
a5ff0eb2 6590
592a252b 6591 /* PREFIX_VEX_0F3A68 */
922d8de8 6592 {
592d1631
L
6593 { Bad_Opcode },
6594 { Bad_Opcode },
bf890a93 6595 { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6596 },
6597
592a252b 6598 /* PREFIX_VEX_0F3A69 */
922d8de8 6599 {
592d1631
L
6600 { Bad_Opcode },
6601 { Bad_Opcode },
bf890a93 6602 { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6603 },
6604
592a252b 6605 /* PREFIX_VEX_0F3A6A */
922d8de8 6606 {
592d1631
L
6607 { Bad_Opcode },
6608 { Bad_Opcode },
592a252b 6609 { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) },
922d8de8
DR
6610 },
6611
592a252b 6612 /* PREFIX_VEX_0F3A6B */
922d8de8 6613 {
592d1631
L
6614 { Bad_Opcode },
6615 { Bad_Opcode },
592a252b 6616 { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) },
922d8de8
DR
6617 },
6618
592a252b 6619 /* PREFIX_VEX_0F3A6C */
922d8de8 6620 {
592d1631
L
6621 { Bad_Opcode },
6622 { Bad_Opcode },
bf890a93 6623 { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6624 },
6625
592a252b 6626 /* PREFIX_VEX_0F3A6D */
922d8de8 6627 {
592d1631
L
6628 { Bad_Opcode },
6629 { Bad_Opcode },
bf890a93 6630 { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6631 },
6632
592a252b 6633 /* PREFIX_VEX_0F3A6E */
922d8de8 6634 {
592d1631
L
6635 { Bad_Opcode },
6636 { Bad_Opcode },
592a252b 6637 { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) },
922d8de8
DR
6638 },
6639
592a252b 6640 /* PREFIX_VEX_0F3A6F */
922d8de8 6641 {
592d1631
L
6642 { Bad_Opcode },
6643 { Bad_Opcode },
592a252b 6644 { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) },
922d8de8
DR
6645 },
6646
592a252b 6647 /* PREFIX_VEX_0F3A78 */
922d8de8 6648 {
592d1631
L
6649 { Bad_Opcode },
6650 { Bad_Opcode },
bf890a93 6651 { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6652 },
6653
592a252b 6654 /* PREFIX_VEX_0F3A79 */
922d8de8 6655 {
592d1631
L
6656 { Bad_Opcode },
6657 { Bad_Opcode },
bf890a93 6658 { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6659 },
6660
592a252b 6661 /* PREFIX_VEX_0F3A7A */
922d8de8 6662 {
592d1631
L
6663 { Bad_Opcode },
6664 { Bad_Opcode },
592a252b 6665 { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) },
922d8de8
DR
6666 },
6667
592a252b 6668 /* PREFIX_VEX_0F3A7B */
922d8de8 6669 {
592d1631
L
6670 { Bad_Opcode },
6671 { Bad_Opcode },
592a252b 6672 { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) },
922d8de8
DR
6673 },
6674
592a252b 6675 /* PREFIX_VEX_0F3A7C */
922d8de8 6676 {
592d1631
L
6677 { Bad_Opcode },
6678 { Bad_Opcode },
bf890a93 6679 { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
592d1631 6680 { Bad_Opcode },
922d8de8
DR
6681 },
6682
592a252b 6683 /* PREFIX_VEX_0F3A7D */
922d8de8 6684 {
592d1631
L
6685 { Bad_Opcode },
6686 { Bad_Opcode },
bf890a93 6687 { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6688 },
6689
592a252b 6690 /* PREFIX_VEX_0F3A7E */
922d8de8 6691 {
592d1631
L
6692 { Bad_Opcode },
6693 { Bad_Opcode },
592a252b 6694 { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) },
922d8de8
DR
6695 },
6696
592a252b 6697 /* PREFIX_VEX_0F3A7F */
922d8de8 6698 {
592d1631
L
6699 { Bad_Opcode },
6700 { Bad_Opcode },
592a252b 6701 { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) },
922d8de8
DR
6702 },
6703
592a252b 6704 /* PREFIX_VEX_0F3ADF */
a5ff0eb2 6705 {
592d1631
L
6706 { Bad_Opcode },
6707 { Bad_Opcode },
592a252b 6708 { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
a5ff0eb2 6709 },
6c30d220
L
6710
6711 /* PREFIX_VEX_0F3AF0 */
6712 {
6713 { Bad_Opcode },
6714 { Bad_Opcode },
6715 { Bad_Opcode },
6716 { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) },
6717 },
43234a1e
L
6718
6719#define NEED_PREFIX_TABLE
6720#include "i386-dis-evex.h"
6721#undef NEED_PREFIX_TABLE
c0f3af97
L
6722};
6723
6724static const struct dis386 x86_64_table[][2] = {
6725 /* X86_64_06 */
6726 {
bf890a93 6727 { "pushP", { es }, 0 },
c0f3af97
L
6728 },
6729
6730 /* X86_64_07 */
6731 {
bf890a93 6732 { "popP", { es }, 0 },
c0f3af97
L
6733 },
6734
6735 /* X86_64_0D */
6736 {
bf890a93 6737 { "pushP", { cs }, 0 },
c0f3af97
L
6738 },
6739
6740 /* X86_64_16 */
6741 {
bf890a93 6742 { "pushP", { ss }, 0 },
c0f3af97
L
6743 },
6744
6745 /* X86_64_17 */
6746 {
bf890a93 6747 { "popP", { ss }, 0 },
c0f3af97
L
6748 },
6749
6750 /* X86_64_1E */
6751 {
bf890a93 6752 { "pushP", { ds }, 0 },
c0f3af97
L
6753 },
6754
6755 /* X86_64_1F */
6756 {
bf890a93 6757 { "popP", { ds }, 0 },
c0f3af97
L
6758 },
6759
6760 /* X86_64_27 */
6761 {
bf890a93 6762 { "daa", { XX }, 0 },
c0f3af97
L
6763 },
6764
6765 /* X86_64_2F */
6766 {
bf890a93 6767 { "das", { XX }, 0 },
c0f3af97
L
6768 },
6769
6770 /* X86_64_37 */
6771 {
bf890a93 6772 { "aaa", { XX }, 0 },
c0f3af97
L
6773 },
6774
6775 /* X86_64_3F */
6776 {
bf890a93 6777 { "aas", { XX }, 0 },
c0f3af97
L
6778 },
6779
6780 /* X86_64_60 */
6781 {
bf890a93 6782 { "pushaP", { XX }, 0 },
c0f3af97
L
6783 },
6784
6785 /* X86_64_61 */
6786 {
bf890a93 6787 { "popaP", { XX }, 0 },
c0f3af97
L
6788 },
6789
6790 /* X86_64_62 */
6791 {
6792 { MOD_TABLE (MOD_62_32BIT) },
43234a1e 6793 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
6794 },
6795
6796 /* X86_64_63 */
6797 {
bf890a93
IT
6798 { "arpl", { Ew, Gw }, 0 },
6799 { "movs{lq|xd}", { Gv, Ed }, 0 },
c0f3af97
L
6800 },
6801
6802 /* X86_64_6D */
6803 {
bf890a93
IT
6804 { "ins{R|}", { Yzr, indirDX }, 0 },
6805 { "ins{G|}", { Yzr, indirDX }, 0 },
c0f3af97
L
6806 },
6807
6808 /* X86_64_6F */
6809 {
bf890a93
IT
6810 { "outs{R|}", { indirDXr, Xz }, 0 },
6811 { "outs{G|}", { indirDXr, Xz }, 0 },
c0f3af97
L
6812 },
6813
6814 /* X86_64_9A */
6815 {
bf890a93 6816 { "Jcall{T|}", { Ap }, 0 },
c0f3af97
L
6817 },
6818
6819 /* X86_64_C4 */
6820 {
6821 { MOD_TABLE (MOD_C4_32BIT) },
6822 { VEX_C4_TABLE (VEX_0F) },
6823 },
6824
6825 /* X86_64_C5 */
6826 {
6827 { MOD_TABLE (MOD_C5_32BIT) },
6828 { VEX_C5_TABLE (VEX_0F) },
6829 },
6830
6831 /* X86_64_CE */
6832 {
bf890a93 6833 { "into", { XX }, 0 },
c0f3af97
L
6834 },
6835
6836 /* X86_64_D4 */
6837 {
bf890a93 6838 { "aam", { Ib }, 0 },
c0f3af97
L
6839 },
6840
6841 /* X86_64_D5 */
6842 {
bf890a93 6843 { "aad", { Ib }, 0 },
c0f3af97
L
6844 },
6845
a72d2af2
L
6846 /* X86_64_E8 */
6847 {
6848 { "callP", { Jv, BND }, 0 },
5db04b09 6849 { "call@", { Jv, BND }, 0 }
a72d2af2
L
6850 },
6851
6852 /* X86_64_E9 */
6853 {
6854 { "jmpP", { Jv, BND }, 0 },
5db04b09 6855 { "jmp@", { Jv, BND }, 0 }
a72d2af2
L
6856 },
6857
c0f3af97
L
6858 /* X86_64_EA */
6859 {
bf890a93 6860 { "Jjmp{T|}", { Ap }, 0 },
c0f3af97
L
6861 },
6862
6863 /* X86_64_0F01_REG_0 */
6864 {
bf890a93
IT
6865 { "sgdt{Q|IQ}", { M }, 0 },
6866 { "sgdt", { M }, 0 },
c0f3af97
L
6867 },
6868
6869 /* X86_64_0F01_REG_1 */
6870 {
bf890a93
IT
6871 { "sidt{Q|IQ}", { M }, 0 },
6872 { "sidt", { M }, 0 },
c0f3af97
L
6873 },
6874
6875 /* X86_64_0F01_REG_2 */
6876 {
bf890a93
IT
6877 { "lgdt{Q|Q}", { M }, 0 },
6878 { "lgdt", { M }, 0 },
c0f3af97
L
6879 },
6880
6881 /* X86_64_0F01_REG_3 */
6882 {
bf890a93
IT
6883 { "lidt{Q|Q}", { M }, 0 },
6884 { "lidt", { M }, 0 },
c0f3af97
L
6885 },
6886};
6887
6888static const struct dis386 three_byte_table[][256] = {
c1e679ec
DR
6889
6890 /* THREE_BYTE_0F38 */
c0f3af97
L
6891 {
6892 /* 00 */
507bd325
L
6893 { "pshufb", { MX, EM }, PREFIX_OPCODE },
6894 { "phaddw", { MX, EM }, PREFIX_OPCODE },
6895 { "phaddd", { MX, EM }, PREFIX_OPCODE },
6896 { "phaddsw", { MX, EM }, PREFIX_OPCODE },
6897 { "pmaddubsw", { MX, EM }, PREFIX_OPCODE },
6898 { "phsubw", { MX, EM }, PREFIX_OPCODE },
6899 { "phsubd", { MX, EM }, PREFIX_OPCODE },
6900 { "phsubsw", { MX, EM }, PREFIX_OPCODE },
c0f3af97 6901 /* 08 */
507bd325
L
6902 { "psignb", { MX, EM }, PREFIX_OPCODE },
6903 { "psignw", { MX, EM }, PREFIX_OPCODE },
6904 { "psignd", { MX, EM }, PREFIX_OPCODE },
6905 { "pmulhrsw", { MX, EM }, PREFIX_OPCODE },
592d1631
L
6906 { Bad_Opcode },
6907 { Bad_Opcode },
6908 { Bad_Opcode },
6909 { Bad_Opcode },
f88c9eb0
SP
6910 /* 10 */
6911 { PREFIX_TABLE (PREFIX_0F3810) },
592d1631
L
6912 { Bad_Opcode },
6913 { Bad_Opcode },
6914 { Bad_Opcode },
f88c9eb0
SP
6915 { PREFIX_TABLE (PREFIX_0F3814) },
6916 { PREFIX_TABLE (PREFIX_0F3815) },
592d1631 6917 { Bad_Opcode },
f88c9eb0
SP
6918 { PREFIX_TABLE (PREFIX_0F3817) },
6919 /* 18 */
592d1631
L
6920 { Bad_Opcode },
6921 { Bad_Opcode },
6922 { Bad_Opcode },
6923 { Bad_Opcode },
507bd325
L
6924 { "pabsb", { MX, EM }, PREFIX_OPCODE },
6925 { "pabsw", { MX, EM }, PREFIX_OPCODE },
6926 { "pabsd", { MX, EM }, PREFIX_OPCODE },
592d1631 6927 { Bad_Opcode },
f88c9eb0
SP
6928 /* 20 */
6929 { PREFIX_TABLE (PREFIX_0F3820) },
6930 { PREFIX_TABLE (PREFIX_0F3821) },
6931 { PREFIX_TABLE (PREFIX_0F3822) },
6932 { PREFIX_TABLE (PREFIX_0F3823) },
6933 { PREFIX_TABLE (PREFIX_0F3824) },
6934 { PREFIX_TABLE (PREFIX_0F3825) },
592d1631
L
6935 { Bad_Opcode },
6936 { Bad_Opcode },
f88c9eb0
SP
6937 /* 28 */
6938 { PREFIX_TABLE (PREFIX_0F3828) },
6939 { PREFIX_TABLE (PREFIX_0F3829) },
6940 { PREFIX_TABLE (PREFIX_0F382A) },
6941 { PREFIX_TABLE (PREFIX_0F382B) },
592d1631
L
6942 { Bad_Opcode },
6943 { Bad_Opcode },
6944 { Bad_Opcode },
6945 { Bad_Opcode },
f88c9eb0
SP
6946 /* 30 */
6947 { PREFIX_TABLE (PREFIX_0F3830) },
6948 { PREFIX_TABLE (PREFIX_0F3831) },
6949 { PREFIX_TABLE (PREFIX_0F3832) },
6950 { PREFIX_TABLE (PREFIX_0F3833) },
6951 { PREFIX_TABLE (PREFIX_0F3834) },
6952 { PREFIX_TABLE (PREFIX_0F3835) },
592d1631 6953 { Bad_Opcode },
f88c9eb0
SP
6954 { PREFIX_TABLE (PREFIX_0F3837) },
6955 /* 38 */
6956 { PREFIX_TABLE (PREFIX_0F3838) },
6957 { PREFIX_TABLE (PREFIX_0F3839) },
6958 { PREFIX_TABLE (PREFIX_0F383A) },
6959 { PREFIX_TABLE (PREFIX_0F383B) },
6960 { PREFIX_TABLE (PREFIX_0F383C) },
6961 { PREFIX_TABLE (PREFIX_0F383D) },
6962 { PREFIX_TABLE (PREFIX_0F383E) },
6963 { PREFIX_TABLE (PREFIX_0F383F) },
6964 /* 40 */
6965 { PREFIX_TABLE (PREFIX_0F3840) },
6966 { PREFIX_TABLE (PREFIX_0F3841) },
592d1631
L
6967 { Bad_Opcode },
6968 { Bad_Opcode },
6969 { Bad_Opcode },
6970 { Bad_Opcode },
6971 { Bad_Opcode },
6972 { Bad_Opcode },
f88c9eb0 6973 /* 48 */
592d1631
L
6974 { Bad_Opcode },
6975 { Bad_Opcode },
6976 { Bad_Opcode },
6977 { Bad_Opcode },
6978 { Bad_Opcode },
6979 { Bad_Opcode },
6980 { Bad_Opcode },
6981 { Bad_Opcode },
f88c9eb0 6982 /* 50 */
592d1631
L
6983 { Bad_Opcode },
6984 { Bad_Opcode },
6985 { Bad_Opcode },
6986 { Bad_Opcode },
6987 { Bad_Opcode },
6988 { Bad_Opcode },
6989 { Bad_Opcode },
6990 { Bad_Opcode },
f88c9eb0 6991 /* 58 */
592d1631
L
6992 { Bad_Opcode },
6993 { Bad_Opcode },
6994 { Bad_Opcode },
6995 { Bad_Opcode },
6996 { Bad_Opcode },
6997 { Bad_Opcode },
6998 { Bad_Opcode },
6999 { Bad_Opcode },
f88c9eb0 7000 /* 60 */
592d1631
L
7001 { Bad_Opcode },
7002 { Bad_Opcode },
7003 { Bad_Opcode },
7004 { Bad_Opcode },
7005 { Bad_Opcode },
7006 { Bad_Opcode },
7007 { Bad_Opcode },
7008 { Bad_Opcode },
f88c9eb0 7009 /* 68 */
592d1631
L
7010 { Bad_Opcode },
7011 { Bad_Opcode },
7012 { Bad_Opcode },
7013 { Bad_Opcode },
7014 { Bad_Opcode },
7015 { Bad_Opcode },
7016 { Bad_Opcode },
7017 { Bad_Opcode },
f88c9eb0 7018 /* 70 */
592d1631
L
7019 { Bad_Opcode },
7020 { Bad_Opcode },
7021 { Bad_Opcode },
7022 { Bad_Opcode },
7023 { Bad_Opcode },
7024 { Bad_Opcode },
7025 { Bad_Opcode },
7026 { Bad_Opcode },
f88c9eb0 7027 /* 78 */
592d1631
L
7028 { Bad_Opcode },
7029 { Bad_Opcode },
7030 { Bad_Opcode },
7031 { Bad_Opcode },
7032 { Bad_Opcode },
7033 { Bad_Opcode },
7034 { Bad_Opcode },
7035 { Bad_Opcode },
f88c9eb0
SP
7036 /* 80 */
7037 { PREFIX_TABLE (PREFIX_0F3880) },
7038 { PREFIX_TABLE (PREFIX_0F3881) },
6c30d220 7039 { PREFIX_TABLE (PREFIX_0F3882) },
592d1631
L
7040 { Bad_Opcode },
7041 { Bad_Opcode },
7042 { Bad_Opcode },
7043 { Bad_Opcode },
7044 { Bad_Opcode },
f88c9eb0 7045 /* 88 */
592d1631
L
7046 { Bad_Opcode },
7047 { Bad_Opcode },
7048 { Bad_Opcode },
7049 { Bad_Opcode },
7050 { Bad_Opcode },
7051 { Bad_Opcode },
7052 { Bad_Opcode },
7053 { Bad_Opcode },
f88c9eb0 7054 /* 90 */
592d1631
L
7055 { Bad_Opcode },
7056 { Bad_Opcode },
7057 { Bad_Opcode },
7058 { Bad_Opcode },
7059 { Bad_Opcode },
7060 { Bad_Opcode },
7061 { Bad_Opcode },
7062 { Bad_Opcode },
f88c9eb0 7063 /* 98 */
592d1631
L
7064 { Bad_Opcode },
7065 { Bad_Opcode },
7066 { Bad_Opcode },
7067 { Bad_Opcode },
7068 { Bad_Opcode },
7069 { Bad_Opcode },
7070 { Bad_Opcode },
7071 { Bad_Opcode },
f88c9eb0 7072 /* a0 */
592d1631
L
7073 { Bad_Opcode },
7074 { Bad_Opcode },
7075 { Bad_Opcode },
7076 { Bad_Opcode },
7077 { Bad_Opcode },
7078 { Bad_Opcode },
7079 { Bad_Opcode },
7080 { Bad_Opcode },
f88c9eb0 7081 /* a8 */
592d1631
L
7082 { Bad_Opcode },
7083 { Bad_Opcode },
7084 { Bad_Opcode },
7085 { Bad_Opcode },
7086 { Bad_Opcode },
7087 { Bad_Opcode },
7088 { Bad_Opcode },
7089 { Bad_Opcode },
f88c9eb0 7090 /* b0 */
592d1631
L
7091 { Bad_Opcode },
7092 { Bad_Opcode },
7093 { Bad_Opcode },
7094 { Bad_Opcode },
7095 { Bad_Opcode },
7096 { Bad_Opcode },
7097 { Bad_Opcode },
7098 { Bad_Opcode },
f88c9eb0 7099 /* b8 */
592d1631
L
7100 { Bad_Opcode },
7101 { Bad_Opcode },
7102 { Bad_Opcode },
7103 { Bad_Opcode },
7104 { Bad_Opcode },
7105 { Bad_Opcode },
7106 { Bad_Opcode },
7107 { Bad_Opcode },
f88c9eb0 7108 /* c0 */
592d1631
L
7109 { Bad_Opcode },
7110 { Bad_Opcode },
7111 { Bad_Opcode },
7112 { Bad_Opcode },
7113 { Bad_Opcode },
7114 { Bad_Opcode },
7115 { Bad_Opcode },
7116 { Bad_Opcode },
f88c9eb0 7117 /* c8 */
a0046408
L
7118 { PREFIX_TABLE (PREFIX_0F38C8) },
7119 { PREFIX_TABLE (PREFIX_0F38C9) },
7120 { PREFIX_TABLE (PREFIX_0F38CA) },
7121 { PREFIX_TABLE (PREFIX_0F38CB) },
7122 { PREFIX_TABLE (PREFIX_0F38CC) },
7123 { PREFIX_TABLE (PREFIX_0F38CD) },
592d1631
L
7124 { Bad_Opcode },
7125 { Bad_Opcode },
f88c9eb0 7126 /* d0 */
592d1631
L
7127 { Bad_Opcode },
7128 { Bad_Opcode },
7129 { Bad_Opcode },
7130 { Bad_Opcode },
7131 { Bad_Opcode },
7132 { Bad_Opcode },
7133 { Bad_Opcode },
7134 { Bad_Opcode },
f88c9eb0 7135 /* d8 */
592d1631
L
7136 { Bad_Opcode },
7137 { Bad_Opcode },
7138 { Bad_Opcode },
f88c9eb0
SP
7139 { PREFIX_TABLE (PREFIX_0F38DB) },
7140 { PREFIX_TABLE (PREFIX_0F38DC) },
7141 { PREFIX_TABLE (PREFIX_0F38DD) },
7142 { PREFIX_TABLE (PREFIX_0F38DE) },
7143 { PREFIX_TABLE (PREFIX_0F38DF) },
7144 /* e0 */
592d1631
L
7145 { Bad_Opcode },
7146 { Bad_Opcode },
7147 { Bad_Opcode },
7148 { Bad_Opcode },
7149 { Bad_Opcode },
7150 { Bad_Opcode },
7151 { Bad_Opcode },
7152 { Bad_Opcode },
f88c9eb0 7153 /* e8 */
592d1631
L
7154 { Bad_Opcode },
7155 { Bad_Opcode },
7156 { Bad_Opcode },
7157 { Bad_Opcode },
7158 { Bad_Opcode },
7159 { Bad_Opcode },
7160 { Bad_Opcode },
7161 { Bad_Opcode },
f88c9eb0
SP
7162 /* f0 */
7163 { PREFIX_TABLE (PREFIX_0F38F0) },
7164 { PREFIX_TABLE (PREFIX_0F38F1) },
592d1631
L
7165 { Bad_Opcode },
7166 { Bad_Opcode },
7167 { Bad_Opcode },
7168 { Bad_Opcode },
e2e1fcde 7169 { PREFIX_TABLE (PREFIX_0F38F6) },
592d1631 7170 { Bad_Opcode },
f88c9eb0 7171 /* f8 */
592d1631
L
7172 { Bad_Opcode },
7173 { Bad_Opcode },
7174 { Bad_Opcode },
7175 { Bad_Opcode },
7176 { Bad_Opcode },
7177 { Bad_Opcode },
7178 { Bad_Opcode },
7179 { Bad_Opcode },
f88c9eb0
SP
7180 },
7181 /* THREE_BYTE_0F3A */
7182 {
7183 /* 00 */
592d1631
L
7184 { Bad_Opcode },
7185 { Bad_Opcode },
7186 { Bad_Opcode },
7187 { Bad_Opcode },
7188 { Bad_Opcode },
7189 { Bad_Opcode },
7190 { Bad_Opcode },
7191 { Bad_Opcode },
f88c9eb0
SP
7192 /* 08 */
7193 { PREFIX_TABLE (PREFIX_0F3A08) },
7194 { PREFIX_TABLE (PREFIX_0F3A09) },
7195 { PREFIX_TABLE (PREFIX_0F3A0A) },
7196 { PREFIX_TABLE (PREFIX_0F3A0B) },
7197 { PREFIX_TABLE (PREFIX_0F3A0C) },
7198 { PREFIX_TABLE (PREFIX_0F3A0D) },
7199 { PREFIX_TABLE (PREFIX_0F3A0E) },
507bd325 7200 { "palignr", { MX, EM, Ib }, PREFIX_OPCODE },
f88c9eb0 7201 /* 10 */
592d1631
L
7202 { Bad_Opcode },
7203 { Bad_Opcode },
7204 { Bad_Opcode },
7205 { Bad_Opcode },
f88c9eb0
SP
7206 { PREFIX_TABLE (PREFIX_0F3A14) },
7207 { PREFIX_TABLE (PREFIX_0F3A15) },
7208 { PREFIX_TABLE (PREFIX_0F3A16) },
7209 { PREFIX_TABLE (PREFIX_0F3A17) },
7210 /* 18 */
592d1631
L
7211 { Bad_Opcode },
7212 { Bad_Opcode },
7213 { Bad_Opcode },
7214 { Bad_Opcode },
7215 { Bad_Opcode },
7216 { Bad_Opcode },
7217 { Bad_Opcode },
7218 { Bad_Opcode },
f88c9eb0
SP
7219 /* 20 */
7220 { PREFIX_TABLE (PREFIX_0F3A20) },
7221 { PREFIX_TABLE (PREFIX_0F3A21) },
7222 { PREFIX_TABLE (PREFIX_0F3A22) },
592d1631
L
7223 { Bad_Opcode },
7224 { Bad_Opcode },
7225 { Bad_Opcode },
7226 { Bad_Opcode },
7227 { Bad_Opcode },
f88c9eb0 7228 /* 28 */
592d1631
L
7229 { Bad_Opcode },
7230 { Bad_Opcode },
7231 { Bad_Opcode },
7232 { Bad_Opcode },
7233 { Bad_Opcode },
7234 { Bad_Opcode },
7235 { Bad_Opcode },
7236 { Bad_Opcode },
f88c9eb0 7237 /* 30 */
592d1631
L
7238 { Bad_Opcode },
7239 { Bad_Opcode },
7240 { Bad_Opcode },
7241 { Bad_Opcode },
7242 { Bad_Opcode },
7243 { Bad_Opcode },
7244 { Bad_Opcode },
7245 { Bad_Opcode },
f88c9eb0 7246 /* 38 */
592d1631
L
7247 { Bad_Opcode },
7248 { Bad_Opcode },
7249 { Bad_Opcode },
7250 { Bad_Opcode },
7251 { Bad_Opcode },
7252 { Bad_Opcode },
7253 { Bad_Opcode },
7254 { Bad_Opcode },
f88c9eb0
SP
7255 /* 40 */
7256 { PREFIX_TABLE (PREFIX_0F3A40) },
7257 { PREFIX_TABLE (PREFIX_0F3A41) },
7258 { PREFIX_TABLE (PREFIX_0F3A42) },
592d1631 7259 { Bad_Opcode },
f88c9eb0 7260 { PREFIX_TABLE (PREFIX_0F3A44) },
592d1631
L
7261 { Bad_Opcode },
7262 { Bad_Opcode },
7263 { Bad_Opcode },
f88c9eb0 7264 /* 48 */
592d1631
L
7265 { Bad_Opcode },
7266 { Bad_Opcode },
7267 { Bad_Opcode },
7268 { Bad_Opcode },
7269 { Bad_Opcode },
7270 { Bad_Opcode },
7271 { Bad_Opcode },
7272 { Bad_Opcode },
f88c9eb0 7273 /* 50 */
592d1631
L
7274 { Bad_Opcode },
7275 { Bad_Opcode },
7276 { Bad_Opcode },
7277 { Bad_Opcode },
7278 { Bad_Opcode },
7279 { Bad_Opcode },
7280 { Bad_Opcode },
7281 { Bad_Opcode },
f88c9eb0 7282 /* 58 */
592d1631
L
7283 { Bad_Opcode },
7284 { Bad_Opcode },
7285 { Bad_Opcode },
7286 { Bad_Opcode },
7287 { Bad_Opcode },
7288 { Bad_Opcode },
7289 { Bad_Opcode },
7290 { Bad_Opcode },
f88c9eb0
SP
7291 /* 60 */
7292 { PREFIX_TABLE (PREFIX_0F3A60) },
7293 { PREFIX_TABLE (PREFIX_0F3A61) },
7294 { PREFIX_TABLE (PREFIX_0F3A62) },
7295 { PREFIX_TABLE (PREFIX_0F3A63) },
592d1631
L
7296 { Bad_Opcode },
7297 { Bad_Opcode },
7298 { Bad_Opcode },
7299 { Bad_Opcode },
f88c9eb0 7300 /* 68 */
592d1631
L
7301 { Bad_Opcode },
7302 { Bad_Opcode },
7303 { Bad_Opcode },
7304 { Bad_Opcode },
7305 { Bad_Opcode },
7306 { Bad_Opcode },
7307 { Bad_Opcode },
7308 { Bad_Opcode },
f88c9eb0 7309 /* 70 */
592d1631
L
7310 { Bad_Opcode },
7311 { Bad_Opcode },
7312 { Bad_Opcode },
7313 { Bad_Opcode },
7314 { Bad_Opcode },
7315 { Bad_Opcode },
7316 { Bad_Opcode },
7317 { Bad_Opcode },
f88c9eb0 7318 /* 78 */
592d1631
L
7319 { Bad_Opcode },
7320 { Bad_Opcode },
7321 { Bad_Opcode },
7322 { Bad_Opcode },
7323 { Bad_Opcode },
7324 { Bad_Opcode },
7325 { Bad_Opcode },
7326 { Bad_Opcode },
f88c9eb0 7327 /* 80 */
592d1631
L
7328 { Bad_Opcode },
7329 { Bad_Opcode },
7330 { Bad_Opcode },
7331 { Bad_Opcode },
7332 { Bad_Opcode },
7333 { Bad_Opcode },
7334 { Bad_Opcode },
7335 { Bad_Opcode },
f88c9eb0 7336 /* 88 */
592d1631
L
7337 { Bad_Opcode },
7338 { Bad_Opcode },
7339 { Bad_Opcode },
7340 { Bad_Opcode },
7341 { Bad_Opcode },
7342 { Bad_Opcode },
7343 { Bad_Opcode },
7344 { Bad_Opcode },
f88c9eb0 7345 /* 90 */
592d1631
L
7346 { Bad_Opcode },
7347 { Bad_Opcode },
7348 { Bad_Opcode },
7349 { Bad_Opcode },
7350 { Bad_Opcode },
7351 { Bad_Opcode },
7352 { Bad_Opcode },
7353 { Bad_Opcode },
f88c9eb0 7354 /* 98 */
592d1631
L
7355 { Bad_Opcode },
7356 { Bad_Opcode },
7357 { Bad_Opcode },
7358 { Bad_Opcode },
7359 { Bad_Opcode },
7360 { Bad_Opcode },
7361 { Bad_Opcode },
7362 { Bad_Opcode },
f88c9eb0 7363 /* a0 */
592d1631
L
7364 { Bad_Opcode },
7365 { Bad_Opcode },
7366 { Bad_Opcode },
7367 { Bad_Opcode },
7368 { Bad_Opcode },
7369 { Bad_Opcode },
7370 { Bad_Opcode },
7371 { Bad_Opcode },
f88c9eb0 7372 /* a8 */
592d1631
L
7373 { Bad_Opcode },
7374 { Bad_Opcode },
7375 { Bad_Opcode },
7376 { Bad_Opcode },
7377 { Bad_Opcode },
7378 { Bad_Opcode },
7379 { Bad_Opcode },
7380 { Bad_Opcode },
f88c9eb0 7381 /* b0 */
592d1631
L
7382 { Bad_Opcode },
7383 { Bad_Opcode },
7384 { Bad_Opcode },
7385 { Bad_Opcode },
7386 { Bad_Opcode },
7387 { Bad_Opcode },
7388 { Bad_Opcode },
7389 { Bad_Opcode },
f88c9eb0 7390 /* b8 */
592d1631
L
7391 { Bad_Opcode },
7392 { Bad_Opcode },
7393 { Bad_Opcode },
7394 { Bad_Opcode },
7395 { Bad_Opcode },
7396 { Bad_Opcode },
7397 { Bad_Opcode },
7398 { Bad_Opcode },
f88c9eb0 7399 /* c0 */
592d1631
L
7400 { Bad_Opcode },
7401 { Bad_Opcode },
7402 { Bad_Opcode },
7403 { Bad_Opcode },
7404 { Bad_Opcode },
7405 { Bad_Opcode },
7406 { Bad_Opcode },
7407 { Bad_Opcode },
f88c9eb0 7408 /* c8 */
592d1631
L
7409 { Bad_Opcode },
7410 { Bad_Opcode },
7411 { Bad_Opcode },
7412 { Bad_Opcode },
a0046408 7413 { PREFIX_TABLE (PREFIX_0F3ACC) },
592d1631
L
7414 { Bad_Opcode },
7415 { Bad_Opcode },
7416 { Bad_Opcode },
f88c9eb0 7417 /* d0 */
592d1631
L
7418 { Bad_Opcode },
7419 { Bad_Opcode },
7420 { Bad_Opcode },
7421 { Bad_Opcode },
7422 { Bad_Opcode },
7423 { Bad_Opcode },
7424 { Bad_Opcode },
7425 { Bad_Opcode },
f88c9eb0 7426 /* d8 */
592d1631
L
7427 { Bad_Opcode },
7428 { Bad_Opcode },
7429 { Bad_Opcode },
7430 { Bad_Opcode },
7431 { Bad_Opcode },
7432 { Bad_Opcode },
7433 { Bad_Opcode },
f88c9eb0
SP
7434 { PREFIX_TABLE (PREFIX_0F3ADF) },
7435 /* e0 */
592d1631
L
7436 { Bad_Opcode },
7437 { Bad_Opcode },
7438 { Bad_Opcode },
7439 { Bad_Opcode },
7440 { Bad_Opcode },
7441 { Bad_Opcode },
7442 { Bad_Opcode },
7443 { Bad_Opcode },
f88c9eb0 7444 /* e8 */
592d1631
L
7445 { Bad_Opcode },
7446 { Bad_Opcode },
7447 { Bad_Opcode },
7448 { Bad_Opcode },
7449 { Bad_Opcode },
7450 { Bad_Opcode },
7451 { Bad_Opcode },
7452 { Bad_Opcode },
f88c9eb0 7453 /* f0 */
592d1631
L
7454 { Bad_Opcode },
7455 { Bad_Opcode },
7456 { Bad_Opcode },
7457 { Bad_Opcode },
7458 { Bad_Opcode },
7459 { Bad_Opcode },
7460 { Bad_Opcode },
7461 { Bad_Opcode },
f88c9eb0 7462 /* f8 */
592d1631
L
7463 { Bad_Opcode },
7464 { Bad_Opcode },
7465 { Bad_Opcode },
7466 { Bad_Opcode },
7467 { Bad_Opcode },
7468 { Bad_Opcode },
7469 { Bad_Opcode },
7470 { Bad_Opcode },
f88c9eb0
SP
7471 },
7472
7473 /* THREE_BYTE_0F7A */
7474 {
7475 /* 00 */
592d1631
L
7476 { Bad_Opcode },
7477 { Bad_Opcode },
7478 { Bad_Opcode },
7479 { Bad_Opcode },
7480 { Bad_Opcode },
7481 { Bad_Opcode },
7482 { Bad_Opcode },
7483 { Bad_Opcode },
f88c9eb0 7484 /* 08 */
592d1631
L
7485 { Bad_Opcode },
7486 { Bad_Opcode },
7487 { Bad_Opcode },
7488 { Bad_Opcode },
7489 { Bad_Opcode },
7490 { Bad_Opcode },
7491 { Bad_Opcode },
7492 { Bad_Opcode },
f88c9eb0 7493 /* 10 */
592d1631
L
7494 { Bad_Opcode },
7495 { Bad_Opcode },
7496 { Bad_Opcode },
7497 { Bad_Opcode },
7498 { Bad_Opcode },
7499 { Bad_Opcode },
7500 { Bad_Opcode },
7501 { Bad_Opcode },
f88c9eb0 7502 /* 18 */
592d1631
L
7503 { Bad_Opcode },
7504 { Bad_Opcode },
7505 { Bad_Opcode },
7506 { Bad_Opcode },
7507 { Bad_Opcode },
7508 { Bad_Opcode },
7509 { Bad_Opcode },
7510 { Bad_Opcode },
f88c9eb0 7511 /* 20 */
507bd325 7512 { "ptest", { XX }, PREFIX_OPCODE },
592d1631
L
7513 { Bad_Opcode },
7514 { Bad_Opcode },
7515 { Bad_Opcode },
7516 { Bad_Opcode },
7517 { Bad_Opcode },
7518 { Bad_Opcode },
7519 { Bad_Opcode },
f88c9eb0 7520 /* 28 */
592d1631
L
7521 { Bad_Opcode },
7522 { Bad_Opcode },
7523 { Bad_Opcode },
7524 { Bad_Opcode },
7525 { Bad_Opcode },
7526 { Bad_Opcode },
7527 { Bad_Opcode },
7528 { Bad_Opcode },
f88c9eb0 7529 /* 30 */
592d1631
L
7530 { Bad_Opcode },
7531 { Bad_Opcode },
7532 { Bad_Opcode },
7533 { Bad_Opcode },
7534 { Bad_Opcode },
7535 { Bad_Opcode },
7536 { Bad_Opcode },
7537 { Bad_Opcode },
f88c9eb0 7538 /* 38 */
592d1631
L
7539 { Bad_Opcode },
7540 { Bad_Opcode },
7541 { Bad_Opcode },
7542 { Bad_Opcode },
7543 { Bad_Opcode },
7544 { Bad_Opcode },
7545 { Bad_Opcode },
7546 { Bad_Opcode },
f88c9eb0 7547 /* 40 */
592d1631 7548 { Bad_Opcode },
507bd325
L
7549 { "phaddbw", { XM, EXq }, PREFIX_OPCODE },
7550 { "phaddbd", { XM, EXq }, PREFIX_OPCODE },
7551 { "phaddbq", { XM, EXq }, PREFIX_OPCODE },
592d1631
L
7552 { Bad_Opcode },
7553 { Bad_Opcode },
507bd325
L
7554 { "phaddwd", { XM, EXq }, PREFIX_OPCODE },
7555 { "phaddwq", { XM, EXq }, PREFIX_OPCODE },
f88c9eb0 7556 /* 48 */
592d1631
L
7557 { Bad_Opcode },
7558 { Bad_Opcode },
7559 { Bad_Opcode },
507bd325 7560 { "phadddq", { XM, EXq }, PREFIX_OPCODE },
592d1631
L
7561 { Bad_Opcode },
7562 { Bad_Opcode },
7563 { Bad_Opcode },
7564 { Bad_Opcode },
f88c9eb0 7565 /* 50 */
592d1631 7566 { Bad_Opcode },
507bd325
L
7567 { "phaddubw", { XM, EXq }, PREFIX_OPCODE },
7568 { "phaddubd", { XM, EXq }, PREFIX_OPCODE },
7569 { "phaddubq", { XM, EXq }, PREFIX_OPCODE },
592d1631
L
7570 { Bad_Opcode },
7571 { Bad_Opcode },
507bd325
L
7572 { "phadduwd", { XM, EXq }, PREFIX_OPCODE },
7573 { "phadduwq", { XM, EXq }, PREFIX_OPCODE },
f88c9eb0 7574 /* 58 */
592d1631
L
7575 { Bad_Opcode },
7576 { Bad_Opcode },
7577 { Bad_Opcode },
507bd325 7578 { "phaddudq", { XM, EXq }, PREFIX_OPCODE },
592d1631
L
7579 { Bad_Opcode },
7580 { Bad_Opcode },
7581 { Bad_Opcode },
7582 { Bad_Opcode },
f88c9eb0 7583 /* 60 */
592d1631 7584 { Bad_Opcode },
507bd325
L
7585 { "phsubbw", { XM, EXq }, PREFIX_OPCODE },
7586 { "phsubbd", { XM, EXq }, PREFIX_OPCODE },
7587 { "phsubbq", { XM, EXq }, PREFIX_OPCODE },
592d1631
L
7588 { Bad_Opcode },
7589 { Bad_Opcode },
7590 { Bad_Opcode },
7591 { Bad_Opcode },
4e7d34a6 7592 /* 68 */
592d1631
L
7593 { Bad_Opcode },
7594 { Bad_Opcode },
7595 { Bad_Opcode },
7596 { Bad_Opcode },
7597 { Bad_Opcode },
7598 { Bad_Opcode },
7599 { Bad_Opcode },
7600 { Bad_Opcode },
85f10a01 7601 /* 70 */
592d1631
L
7602 { Bad_Opcode },
7603 { Bad_Opcode },
7604 { Bad_Opcode },
7605 { Bad_Opcode },
7606 { Bad_Opcode },
7607 { Bad_Opcode },
7608 { Bad_Opcode },
7609 { Bad_Opcode },
85f10a01 7610 /* 78 */
592d1631
L
7611 { Bad_Opcode },
7612 { Bad_Opcode },
7613 { Bad_Opcode },
7614 { Bad_Opcode },
7615 { Bad_Opcode },
7616 { Bad_Opcode },
7617 { Bad_Opcode },
7618 { Bad_Opcode },
85f10a01 7619 /* 80 */
592d1631
L
7620 { Bad_Opcode },
7621 { Bad_Opcode },
7622 { Bad_Opcode },
7623 { Bad_Opcode },
7624 { Bad_Opcode },
7625 { Bad_Opcode },
7626 { Bad_Opcode },
7627 { Bad_Opcode },
85f10a01 7628 /* 88 */
592d1631
L
7629 { Bad_Opcode },
7630 { Bad_Opcode },
7631 { Bad_Opcode },
7632 { Bad_Opcode },
7633 { Bad_Opcode },
7634 { Bad_Opcode },
7635 { Bad_Opcode },
7636 { Bad_Opcode },
85f10a01 7637 /* 90 */
592d1631
L
7638 { Bad_Opcode },
7639 { Bad_Opcode },
7640 { Bad_Opcode },
7641 { Bad_Opcode },
7642 { Bad_Opcode },
7643 { Bad_Opcode },
7644 { Bad_Opcode },
7645 { Bad_Opcode },
85f10a01 7646 /* 98 */
592d1631
L
7647 { Bad_Opcode },
7648 { Bad_Opcode },
7649 { Bad_Opcode },
7650 { Bad_Opcode },
7651 { Bad_Opcode },
7652 { Bad_Opcode },
7653 { Bad_Opcode },
7654 { Bad_Opcode },
85f10a01 7655 /* a0 */
592d1631
L
7656 { Bad_Opcode },
7657 { Bad_Opcode },
7658 { Bad_Opcode },
7659 { Bad_Opcode },
7660 { Bad_Opcode },
7661 { Bad_Opcode },
7662 { Bad_Opcode },
7663 { Bad_Opcode },
85f10a01 7664 /* a8 */
592d1631
L
7665 { Bad_Opcode },
7666 { Bad_Opcode },
7667 { Bad_Opcode },
7668 { Bad_Opcode },
7669 { Bad_Opcode },
7670 { Bad_Opcode },
7671 { Bad_Opcode },
7672 { Bad_Opcode },
85f10a01 7673 /* b0 */
592d1631
L
7674 { Bad_Opcode },
7675 { Bad_Opcode },
7676 { Bad_Opcode },
7677 { Bad_Opcode },
7678 { Bad_Opcode },
7679 { Bad_Opcode },
7680 { Bad_Opcode },
7681 { Bad_Opcode },
85f10a01 7682 /* b8 */
592d1631
L
7683 { Bad_Opcode },
7684 { Bad_Opcode },
7685 { Bad_Opcode },
7686 { Bad_Opcode },
7687 { Bad_Opcode },
7688 { Bad_Opcode },
7689 { Bad_Opcode },
7690 { Bad_Opcode },
85f10a01 7691 /* c0 */
592d1631
L
7692 { Bad_Opcode },
7693 { Bad_Opcode },
7694 { Bad_Opcode },
7695 { Bad_Opcode },
7696 { Bad_Opcode },
7697 { Bad_Opcode },
7698 { Bad_Opcode },
7699 { Bad_Opcode },
85f10a01 7700 /* c8 */
592d1631
L
7701 { Bad_Opcode },
7702 { Bad_Opcode },
7703 { Bad_Opcode },
7704 { Bad_Opcode },
7705 { Bad_Opcode },
7706 { Bad_Opcode },
7707 { Bad_Opcode },
7708 { Bad_Opcode },
85f10a01 7709 /* d0 */
592d1631
L
7710 { Bad_Opcode },
7711 { Bad_Opcode },
7712 { Bad_Opcode },
7713 { Bad_Opcode },
7714 { Bad_Opcode },
7715 { Bad_Opcode },
7716 { Bad_Opcode },
7717 { Bad_Opcode },
85f10a01 7718 /* d8 */
592d1631
L
7719 { Bad_Opcode },
7720 { Bad_Opcode },
7721 { Bad_Opcode },
7722 { Bad_Opcode },
7723 { Bad_Opcode },
7724 { Bad_Opcode },
7725 { Bad_Opcode },
7726 { Bad_Opcode },
85f10a01 7727 /* e0 */
592d1631
L
7728 { Bad_Opcode },
7729 { Bad_Opcode },
7730 { Bad_Opcode },
7731 { Bad_Opcode },
7732 { Bad_Opcode },
7733 { Bad_Opcode },
7734 { Bad_Opcode },
7735 { Bad_Opcode },
85f10a01 7736 /* e8 */
592d1631
L
7737 { Bad_Opcode },
7738 { Bad_Opcode },
7739 { Bad_Opcode },
7740 { Bad_Opcode },
7741 { Bad_Opcode },
7742 { Bad_Opcode },
7743 { Bad_Opcode },
7744 { Bad_Opcode },
85f10a01 7745 /* f0 */
592d1631
L
7746 { Bad_Opcode },
7747 { Bad_Opcode },
7748 { Bad_Opcode },
7749 { Bad_Opcode },
7750 { Bad_Opcode },
7751 { Bad_Opcode },
7752 { Bad_Opcode },
7753 { Bad_Opcode },
85f10a01 7754 /* f8 */
592d1631
L
7755 { Bad_Opcode },
7756 { Bad_Opcode },
7757 { Bad_Opcode },
7758 { Bad_Opcode },
7759 { Bad_Opcode },
7760 { Bad_Opcode },
7761 { Bad_Opcode },
7762 { Bad_Opcode },
85f10a01 7763 },
f88c9eb0
SP
7764};
7765
7766static const struct dis386 xop_table[][256] = {
5dd85c99 7767 /* XOP_08 */
85f10a01
MM
7768 {
7769 /* 00 */
592d1631
L
7770 { Bad_Opcode },
7771 { Bad_Opcode },
7772 { Bad_Opcode },
7773 { Bad_Opcode },
7774 { Bad_Opcode },
7775 { Bad_Opcode },
7776 { Bad_Opcode },
7777 { Bad_Opcode },
85f10a01 7778 /* 08 */
592d1631
L
7779 { Bad_Opcode },
7780 { Bad_Opcode },
7781 { Bad_Opcode },
7782 { Bad_Opcode },
7783 { Bad_Opcode },
7784 { Bad_Opcode },
7785 { Bad_Opcode },
7786 { Bad_Opcode },
85f10a01 7787 /* 10 */
3929df09 7788 { Bad_Opcode },
592d1631
L
7789 { Bad_Opcode },
7790 { Bad_Opcode },
7791 { Bad_Opcode },
7792 { Bad_Opcode },
7793 { Bad_Opcode },
7794 { Bad_Opcode },
7795 { Bad_Opcode },
85f10a01 7796 /* 18 */
592d1631
L
7797 { Bad_Opcode },
7798 { Bad_Opcode },
7799 { Bad_Opcode },
7800 { Bad_Opcode },
7801 { Bad_Opcode },
7802 { Bad_Opcode },
7803 { Bad_Opcode },
7804 { Bad_Opcode },
85f10a01 7805 /* 20 */
592d1631
L
7806 { Bad_Opcode },
7807 { Bad_Opcode },
7808 { Bad_Opcode },
7809 { Bad_Opcode },
7810 { Bad_Opcode },
7811 { Bad_Opcode },
7812 { Bad_Opcode },
7813 { Bad_Opcode },
85f10a01 7814 /* 28 */
592d1631
L
7815 { Bad_Opcode },
7816 { Bad_Opcode },
7817 { Bad_Opcode },
7818 { Bad_Opcode },
7819 { Bad_Opcode },
7820 { Bad_Opcode },
7821 { Bad_Opcode },
7822 { Bad_Opcode },
c0f3af97 7823 /* 30 */
592d1631
L
7824 { Bad_Opcode },
7825 { Bad_Opcode },
7826 { Bad_Opcode },
7827 { Bad_Opcode },
7828 { Bad_Opcode },
7829 { Bad_Opcode },
7830 { Bad_Opcode },
7831 { Bad_Opcode },
c0f3af97 7832 /* 38 */
592d1631
L
7833 { Bad_Opcode },
7834 { Bad_Opcode },
7835 { Bad_Opcode },
7836 { Bad_Opcode },
7837 { Bad_Opcode },
7838 { Bad_Opcode },
7839 { Bad_Opcode },
7840 { Bad_Opcode },
c0f3af97 7841 /* 40 */
592d1631
L
7842 { Bad_Opcode },
7843 { Bad_Opcode },
7844 { Bad_Opcode },
7845 { Bad_Opcode },
7846 { Bad_Opcode },
7847 { Bad_Opcode },
7848 { Bad_Opcode },
7849 { Bad_Opcode },
85f10a01 7850 /* 48 */
592d1631
L
7851 { Bad_Opcode },
7852 { Bad_Opcode },
7853 { Bad_Opcode },
7854 { Bad_Opcode },
7855 { Bad_Opcode },
7856 { Bad_Opcode },
7857 { Bad_Opcode },
7858 { Bad_Opcode },
c0f3af97 7859 /* 50 */
592d1631
L
7860 { Bad_Opcode },
7861 { Bad_Opcode },
7862 { Bad_Opcode },
7863 { Bad_Opcode },
7864 { Bad_Opcode },
7865 { Bad_Opcode },
7866 { Bad_Opcode },
7867 { Bad_Opcode },
85f10a01 7868 /* 58 */
592d1631
L
7869 { Bad_Opcode },
7870 { Bad_Opcode },
7871 { Bad_Opcode },
7872 { Bad_Opcode },
7873 { Bad_Opcode },
7874 { Bad_Opcode },
7875 { Bad_Opcode },
7876 { Bad_Opcode },
c1e679ec 7877 /* 60 */
592d1631
L
7878 { Bad_Opcode },
7879 { Bad_Opcode },
7880 { Bad_Opcode },
7881 { Bad_Opcode },
7882 { Bad_Opcode },
7883 { Bad_Opcode },
7884 { Bad_Opcode },
7885 { Bad_Opcode },
c0f3af97 7886 /* 68 */
592d1631
L
7887 { Bad_Opcode },
7888 { Bad_Opcode },
7889 { Bad_Opcode },
7890 { Bad_Opcode },
7891 { Bad_Opcode },
7892 { Bad_Opcode },
7893 { Bad_Opcode },
7894 { Bad_Opcode },
85f10a01 7895 /* 70 */
592d1631
L
7896 { Bad_Opcode },
7897 { Bad_Opcode },
7898 { Bad_Opcode },
7899 { Bad_Opcode },
7900 { Bad_Opcode },
7901 { Bad_Opcode },
7902 { Bad_Opcode },
7903 { Bad_Opcode },
85f10a01 7904 /* 78 */
592d1631
L
7905 { Bad_Opcode },
7906 { Bad_Opcode },
7907 { Bad_Opcode },
7908 { Bad_Opcode },
7909 { Bad_Opcode },
7910 { Bad_Opcode },
7911 { Bad_Opcode },
7912 { Bad_Opcode },
85f10a01 7913 /* 80 */
592d1631
L
7914 { Bad_Opcode },
7915 { Bad_Opcode },
7916 { Bad_Opcode },
7917 { Bad_Opcode },
7918 { Bad_Opcode },
bf890a93
IT
7919 { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7920 { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7921 { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
5dd85c99 7922 /* 88 */
592d1631
L
7923 { Bad_Opcode },
7924 { Bad_Opcode },
7925 { Bad_Opcode },
7926 { Bad_Opcode },
7927 { Bad_Opcode },
7928 { Bad_Opcode },
bf890a93
IT
7929 { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7930 { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
5dd85c99 7931 /* 90 */
592d1631
L
7932 { Bad_Opcode },
7933 { Bad_Opcode },
7934 { Bad_Opcode },
7935 { Bad_Opcode },
7936 { Bad_Opcode },
bf890a93
IT
7937 { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7938 { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7939 { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
5dd85c99 7940 /* 98 */
592d1631
L
7941 { Bad_Opcode },
7942 { Bad_Opcode },
7943 { Bad_Opcode },
7944 { Bad_Opcode },
7945 { Bad_Opcode },
7946 { Bad_Opcode },
bf890a93
IT
7947 { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7948 { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
5dd85c99 7949 /* a0 */
592d1631
L
7950 { Bad_Opcode },
7951 { Bad_Opcode },
bf890a93
IT
7952 { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7953 { "vpperm", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
592d1631
L
7954 { Bad_Opcode },
7955 { Bad_Opcode },
bf890a93 7956 { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
592d1631 7957 { Bad_Opcode },
5dd85c99 7958 /* a8 */
592d1631
L
7959 { Bad_Opcode },
7960 { Bad_Opcode },
7961 { Bad_Opcode },
7962 { Bad_Opcode },
7963 { Bad_Opcode },
7964 { Bad_Opcode },
7965 { Bad_Opcode },
7966 { Bad_Opcode },
5dd85c99 7967 /* b0 */
592d1631
L
7968 { Bad_Opcode },
7969 { Bad_Opcode },
7970 { Bad_Opcode },
7971 { Bad_Opcode },
7972 { Bad_Opcode },
7973 { Bad_Opcode },
bf890a93 7974 { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
592d1631 7975 { Bad_Opcode },
5dd85c99 7976 /* b8 */
592d1631
L
7977 { Bad_Opcode },
7978 { Bad_Opcode },
7979 { Bad_Opcode },
7980 { Bad_Opcode },
7981 { Bad_Opcode },
7982 { Bad_Opcode },
7983 { Bad_Opcode },
7984 { Bad_Opcode },
5dd85c99 7985 /* c0 */
bf890a93
IT
7986 { "vprotb", { XM, Vex_2src_1, Ib }, 0 },
7987 { "vprotw", { XM, Vex_2src_1, Ib }, 0 },
7988 { "vprotd", { XM, Vex_2src_1, Ib }, 0 },
7989 { "vprotq", { XM, Vex_2src_1, Ib }, 0 },
592d1631
L
7990 { Bad_Opcode },
7991 { Bad_Opcode },
7992 { Bad_Opcode },
7993 { Bad_Opcode },
5dd85c99 7994 /* c8 */
592d1631
L
7995 { Bad_Opcode },
7996 { Bad_Opcode },
7997 { Bad_Opcode },
7998 { Bad_Opcode },
ff688e1f
L
7999 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CC) },
8000 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CD) },
8001 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CE) },
8002 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CF) },
5dd85c99 8003 /* d0 */
592d1631
L
8004 { Bad_Opcode },
8005 { Bad_Opcode },
8006 { Bad_Opcode },
8007 { Bad_Opcode },
8008 { Bad_Opcode },
8009 { Bad_Opcode },
8010 { Bad_Opcode },
8011 { Bad_Opcode },
5dd85c99 8012 /* d8 */
592d1631
L
8013 { Bad_Opcode },
8014 { Bad_Opcode },
8015 { Bad_Opcode },
8016 { Bad_Opcode },
8017 { Bad_Opcode },
8018 { Bad_Opcode },
8019 { Bad_Opcode },
8020 { Bad_Opcode },
5dd85c99 8021 /* e0 */
592d1631
L
8022 { Bad_Opcode },
8023 { Bad_Opcode },
8024 { Bad_Opcode },
8025 { Bad_Opcode },
8026 { Bad_Opcode },
8027 { Bad_Opcode },
8028 { Bad_Opcode },
8029 { Bad_Opcode },
5dd85c99 8030 /* e8 */
592d1631
L
8031 { Bad_Opcode },
8032 { Bad_Opcode },
8033 { Bad_Opcode },
8034 { Bad_Opcode },
ff688e1f
L
8035 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EC) },
8036 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_ED) },
8037 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EE) },
8038 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EF) },
5dd85c99 8039 /* f0 */
592d1631
L
8040 { Bad_Opcode },
8041 { Bad_Opcode },
8042 { Bad_Opcode },
8043 { Bad_Opcode },
8044 { Bad_Opcode },
8045 { Bad_Opcode },
8046 { Bad_Opcode },
8047 { Bad_Opcode },
5dd85c99 8048 /* f8 */
592d1631
L
8049 { Bad_Opcode },
8050 { Bad_Opcode },
8051 { Bad_Opcode },
8052 { Bad_Opcode },
8053 { Bad_Opcode },
8054 { Bad_Opcode },
8055 { Bad_Opcode },
8056 { Bad_Opcode },
5dd85c99
SP
8057 },
8058 /* XOP_09 */
8059 {
8060 /* 00 */
592d1631 8061 { Bad_Opcode },
2a2a0f38
QN
8062 { REG_TABLE (REG_XOP_TBM_01) },
8063 { REG_TABLE (REG_XOP_TBM_02) },
592d1631
L
8064 { Bad_Opcode },
8065 { Bad_Opcode },
8066 { Bad_Opcode },
8067 { Bad_Opcode },
8068 { Bad_Opcode },
5dd85c99 8069 /* 08 */
592d1631
L
8070 { Bad_Opcode },
8071 { Bad_Opcode },
8072 { Bad_Opcode },
8073 { Bad_Opcode },
8074 { Bad_Opcode },
8075 { Bad_Opcode },
8076 { Bad_Opcode },
8077 { Bad_Opcode },
5dd85c99 8078 /* 10 */
592d1631
L
8079 { Bad_Opcode },
8080 { Bad_Opcode },
5dd85c99 8081 { REG_TABLE (REG_XOP_LWPCB) },
592d1631
L
8082 { Bad_Opcode },
8083 { Bad_Opcode },
8084 { Bad_Opcode },
8085 { Bad_Opcode },
8086 { Bad_Opcode },
5dd85c99 8087 /* 18 */
592d1631
L
8088 { Bad_Opcode },
8089 { Bad_Opcode },
8090 { Bad_Opcode },
8091 { Bad_Opcode },
8092 { Bad_Opcode },
8093 { Bad_Opcode },
8094 { Bad_Opcode },
8095 { Bad_Opcode },
5dd85c99 8096 /* 20 */
592d1631
L
8097 { Bad_Opcode },
8098 { Bad_Opcode },
8099 { Bad_Opcode },
8100 { Bad_Opcode },
8101 { Bad_Opcode },
8102 { Bad_Opcode },
8103 { Bad_Opcode },
8104 { Bad_Opcode },
5dd85c99 8105 /* 28 */
592d1631
L
8106 { Bad_Opcode },
8107 { Bad_Opcode },
8108 { Bad_Opcode },
8109 { Bad_Opcode },
8110 { Bad_Opcode },
8111 { Bad_Opcode },
8112 { Bad_Opcode },
8113 { Bad_Opcode },
5dd85c99 8114 /* 30 */
592d1631
L
8115 { Bad_Opcode },
8116 { Bad_Opcode },
8117 { Bad_Opcode },
8118 { Bad_Opcode },
8119 { Bad_Opcode },
8120 { Bad_Opcode },
8121 { Bad_Opcode },
8122 { Bad_Opcode },
5dd85c99 8123 /* 38 */
592d1631
L
8124 { Bad_Opcode },
8125 { Bad_Opcode },
8126 { Bad_Opcode },
8127 { Bad_Opcode },
8128 { Bad_Opcode },
8129 { Bad_Opcode },
8130 { Bad_Opcode },
8131 { Bad_Opcode },
5dd85c99 8132 /* 40 */
592d1631
L
8133 { Bad_Opcode },
8134 { Bad_Opcode },
8135 { Bad_Opcode },
8136 { Bad_Opcode },
8137 { Bad_Opcode },
8138 { Bad_Opcode },
8139 { Bad_Opcode },
8140 { Bad_Opcode },
5dd85c99 8141 /* 48 */
592d1631
L
8142 { Bad_Opcode },
8143 { Bad_Opcode },
8144 { Bad_Opcode },
8145 { Bad_Opcode },
8146 { Bad_Opcode },
8147 { Bad_Opcode },
8148 { Bad_Opcode },
8149 { Bad_Opcode },
5dd85c99 8150 /* 50 */
592d1631
L
8151 { Bad_Opcode },
8152 { Bad_Opcode },
8153 { Bad_Opcode },
8154 { Bad_Opcode },
8155 { Bad_Opcode },
8156 { Bad_Opcode },
8157 { Bad_Opcode },
8158 { Bad_Opcode },
5dd85c99 8159 /* 58 */
592d1631
L
8160 { Bad_Opcode },
8161 { Bad_Opcode },
8162 { Bad_Opcode },
8163 { Bad_Opcode },
8164 { Bad_Opcode },
8165 { Bad_Opcode },
8166 { Bad_Opcode },
8167 { Bad_Opcode },
5dd85c99 8168 /* 60 */
592d1631
L
8169 { Bad_Opcode },
8170 { Bad_Opcode },
8171 { Bad_Opcode },
8172 { Bad_Opcode },
8173 { Bad_Opcode },
8174 { Bad_Opcode },
8175 { Bad_Opcode },
8176 { Bad_Opcode },
5dd85c99 8177 /* 68 */
592d1631
L
8178 { Bad_Opcode },
8179 { Bad_Opcode },
8180 { Bad_Opcode },
8181 { Bad_Opcode },
8182 { Bad_Opcode },
8183 { Bad_Opcode },
8184 { Bad_Opcode },
8185 { Bad_Opcode },
5dd85c99 8186 /* 70 */
592d1631
L
8187 { Bad_Opcode },
8188 { Bad_Opcode },
8189 { Bad_Opcode },
8190 { Bad_Opcode },
8191 { Bad_Opcode },
8192 { Bad_Opcode },
8193 { Bad_Opcode },
8194 { Bad_Opcode },
5dd85c99 8195 /* 78 */
592d1631
L
8196 { Bad_Opcode },
8197 { Bad_Opcode },
8198 { Bad_Opcode },
8199 { Bad_Opcode },
8200 { Bad_Opcode },
8201 { Bad_Opcode },
8202 { Bad_Opcode },
8203 { Bad_Opcode },
5dd85c99 8204 /* 80 */
592a252b
L
8205 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) },
8206 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) },
bf890a93
IT
8207 { "vfrczss", { XM, EXd }, 0 },
8208 { "vfrczsd", { XM, EXq }, 0 },
592d1631
L
8209 { Bad_Opcode },
8210 { Bad_Opcode },
8211 { Bad_Opcode },
8212 { Bad_Opcode },
5dd85c99 8213 /* 88 */
592d1631
L
8214 { Bad_Opcode },
8215 { Bad_Opcode },
8216 { Bad_Opcode },
8217 { Bad_Opcode },
8218 { Bad_Opcode },
8219 { Bad_Opcode },
8220 { Bad_Opcode },
8221 { Bad_Opcode },
5dd85c99 8222 /* 90 */
bf890a93
IT
8223 { "vprotb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8224 { "vprotw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8225 { "vprotd", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8226 { "vprotq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8227 { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8228 { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8229 { "vpshld", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8230 { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
5dd85c99 8231 /* 98 */
bf890a93
IT
8232 { "vpshab", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8233 { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8234 { "vpshad", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8235 { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
592d1631
L
8236 { Bad_Opcode },
8237 { Bad_Opcode },
8238 { Bad_Opcode },
8239 { Bad_Opcode },
5dd85c99 8240 /* a0 */
592d1631
L
8241 { Bad_Opcode },
8242 { Bad_Opcode },
8243 { Bad_Opcode },
8244 { Bad_Opcode },
8245 { Bad_Opcode },
8246 { Bad_Opcode },
8247 { Bad_Opcode },
8248 { Bad_Opcode },
5dd85c99 8249 /* a8 */
592d1631
L
8250 { Bad_Opcode },
8251 { Bad_Opcode },
8252 { Bad_Opcode },
8253 { Bad_Opcode },
8254 { Bad_Opcode },
8255 { Bad_Opcode },
8256 { Bad_Opcode },
8257 { Bad_Opcode },
5dd85c99 8258 /* b0 */
592d1631
L
8259 { Bad_Opcode },
8260 { Bad_Opcode },
8261 { Bad_Opcode },
8262 { Bad_Opcode },
8263 { Bad_Opcode },
8264 { Bad_Opcode },
8265 { Bad_Opcode },
8266 { Bad_Opcode },
5dd85c99 8267 /* b8 */
592d1631
L
8268 { Bad_Opcode },
8269 { Bad_Opcode },
8270 { Bad_Opcode },
8271 { Bad_Opcode },
8272 { Bad_Opcode },
8273 { Bad_Opcode },
8274 { Bad_Opcode },
8275 { Bad_Opcode },
5dd85c99 8276 /* c0 */
592d1631 8277 { Bad_Opcode },
bf890a93
IT
8278 { "vphaddbw", { XM, EXxmm }, 0 },
8279 { "vphaddbd", { XM, EXxmm }, 0 },
8280 { "vphaddbq", { XM, EXxmm }, 0 },
592d1631
L
8281 { Bad_Opcode },
8282 { Bad_Opcode },
bf890a93
IT
8283 { "vphaddwd", { XM, EXxmm }, 0 },
8284 { "vphaddwq", { XM, EXxmm }, 0 },
5dd85c99 8285 /* c8 */
592d1631
L
8286 { Bad_Opcode },
8287 { Bad_Opcode },
8288 { Bad_Opcode },
bf890a93 8289 { "vphadddq", { XM, EXxmm }, 0 },
592d1631
L
8290 { Bad_Opcode },
8291 { Bad_Opcode },
8292 { Bad_Opcode },
8293 { Bad_Opcode },
5dd85c99 8294 /* d0 */
592d1631 8295 { Bad_Opcode },
bf890a93
IT
8296 { "vphaddubw", { XM, EXxmm }, 0 },
8297 { "vphaddubd", { XM, EXxmm }, 0 },
8298 { "vphaddubq", { XM, EXxmm }, 0 },
592d1631
L
8299 { Bad_Opcode },
8300 { Bad_Opcode },
bf890a93
IT
8301 { "vphadduwd", { XM, EXxmm }, 0 },
8302 { "vphadduwq", { XM, EXxmm }, 0 },
5dd85c99 8303 /* d8 */
592d1631
L
8304 { Bad_Opcode },
8305 { Bad_Opcode },
8306 { Bad_Opcode },
bf890a93 8307 { "vphaddudq", { XM, EXxmm }, 0 },
592d1631
L
8308 { Bad_Opcode },
8309 { Bad_Opcode },
8310 { Bad_Opcode },
8311 { Bad_Opcode },
5dd85c99 8312 /* e0 */
592d1631 8313 { Bad_Opcode },
bf890a93
IT
8314 { "vphsubbw", { XM, EXxmm }, 0 },
8315 { "vphsubwd", { XM, EXxmm }, 0 },
8316 { "vphsubdq", { XM, EXxmm }, 0 },
592d1631
L
8317 { Bad_Opcode },
8318 { Bad_Opcode },
8319 { Bad_Opcode },
8320 { Bad_Opcode },
4e7d34a6 8321 /* e8 */
592d1631
L
8322 { Bad_Opcode },
8323 { Bad_Opcode },
8324 { Bad_Opcode },
8325 { Bad_Opcode },
8326 { Bad_Opcode },
8327 { Bad_Opcode },
8328 { Bad_Opcode },
8329 { Bad_Opcode },
4e7d34a6 8330 /* f0 */
592d1631
L
8331 { Bad_Opcode },
8332 { Bad_Opcode },
8333 { Bad_Opcode },
8334 { Bad_Opcode },
8335 { Bad_Opcode },
8336 { Bad_Opcode },
8337 { Bad_Opcode },
8338 { Bad_Opcode },
4e7d34a6 8339 /* f8 */
592d1631
L
8340 { Bad_Opcode },
8341 { Bad_Opcode },
8342 { Bad_Opcode },
8343 { Bad_Opcode },
8344 { Bad_Opcode },
8345 { Bad_Opcode },
8346 { Bad_Opcode },
8347 { Bad_Opcode },
4e7d34a6 8348 },
f88c9eb0 8349 /* XOP_0A */
4e7d34a6
L
8350 {
8351 /* 00 */
592d1631
L
8352 { Bad_Opcode },
8353 { Bad_Opcode },
8354 { Bad_Opcode },
8355 { Bad_Opcode },
8356 { Bad_Opcode },
8357 { Bad_Opcode },
8358 { Bad_Opcode },
8359 { Bad_Opcode },
4e7d34a6 8360 /* 08 */
592d1631
L
8361 { Bad_Opcode },
8362 { Bad_Opcode },
8363 { Bad_Opcode },
8364 { Bad_Opcode },
8365 { Bad_Opcode },
8366 { Bad_Opcode },
8367 { Bad_Opcode },
8368 { Bad_Opcode },
4e7d34a6 8369 /* 10 */
bf890a93 8370 { "bextr", { Gv, Ev, Iq }, 0 },
592d1631 8371 { Bad_Opcode },
f88c9eb0 8372 { REG_TABLE (REG_XOP_LWP) },
592d1631
L
8373 { Bad_Opcode },
8374 { Bad_Opcode },
8375 { Bad_Opcode },
8376 { Bad_Opcode },
8377 { Bad_Opcode },
4e7d34a6 8378 /* 18 */
592d1631
L
8379 { Bad_Opcode },
8380 { Bad_Opcode },
8381 { Bad_Opcode },
8382 { Bad_Opcode },
8383 { Bad_Opcode },
8384 { Bad_Opcode },
8385 { Bad_Opcode },
8386 { Bad_Opcode },
4e7d34a6 8387 /* 20 */
592d1631
L
8388 { Bad_Opcode },
8389 { Bad_Opcode },
8390 { Bad_Opcode },
8391 { Bad_Opcode },
8392 { Bad_Opcode },
8393 { Bad_Opcode },
8394 { Bad_Opcode },
8395 { Bad_Opcode },
4e7d34a6 8396 /* 28 */
592d1631
L
8397 { Bad_Opcode },
8398 { Bad_Opcode },
8399 { Bad_Opcode },
8400 { Bad_Opcode },
8401 { Bad_Opcode },
8402 { Bad_Opcode },
8403 { Bad_Opcode },
8404 { Bad_Opcode },
4e7d34a6 8405 /* 30 */
592d1631
L
8406 { Bad_Opcode },
8407 { Bad_Opcode },
8408 { Bad_Opcode },
8409 { Bad_Opcode },
8410 { Bad_Opcode },
8411 { Bad_Opcode },
8412 { Bad_Opcode },
8413 { Bad_Opcode },
c0f3af97 8414 /* 38 */
592d1631
L
8415 { Bad_Opcode },
8416 { Bad_Opcode },
8417 { Bad_Opcode },
8418 { Bad_Opcode },
8419 { Bad_Opcode },
8420 { Bad_Opcode },
8421 { Bad_Opcode },
8422 { Bad_Opcode },
c0f3af97 8423 /* 40 */
592d1631
L
8424 { Bad_Opcode },
8425 { Bad_Opcode },
8426 { Bad_Opcode },
8427 { Bad_Opcode },
8428 { Bad_Opcode },
8429 { Bad_Opcode },
8430 { Bad_Opcode },
8431 { Bad_Opcode },
c1e679ec 8432 /* 48 */
592d1631
L
8433 { Bad_Opcode },
8434 { Bad_Opcode },
8435 { Bad_Opcode },
8436 { Bad_Opcode },
8437 { Bad_Opcode },
8438 { Bad_Opcode },
8439 { Bad_Opcode },
8440 { Bad_Opcode },
c1e679ec 8441 /* 50 */
592d1631
L
8442 { Bad_Opcode },
8443 { Bad_Opcode },
8444 { Bad_Opcode },
8445 { Bad_Opcode },
8446 { Bad_Opcode },
8447 { Bad_Opcode },
8448 { Bad_Opcode },
8449 { Bad_Opcode },
4e7d34a6 8450 /* 58 */
592d1631
L
8451 { Bad_Opcode },
8452 { Bad_Opcode },
8453 { Bad_Opcode },
8454 { Bad_Opcode },
8455 { Bad_Opcode },
8456 { Bad_Opcode },
8457 { Bad_Opcode },
8458 { Bad_Opcode },
4e7d34a6 8459 /* 60 */
592d1631
L
8460 { Bad_Opcode },
8461 { Bad_Opcode },
8462 { Bad_Opcode },
8463 { Bad_Opcode },
8464 { Bad_Opcode },
8465 { Bad_Opcode },
8466 { Bad_Opcode },
8467 { Bad_Opcode },
4e7d34a6 8468 /* 68 */
592d1631
L
8469 { Bad_Opcode },
8470 { Bad_Opcode },
8471 { Bad_Opcode },
8472 { Bad_Opcode },
8473 { Bad_Opcode },
8474 { Bad_Opcode },
8475 { Bad_Opcode },
8476 { Bad_Opcode },
4e7d34a6 8477 /* 70 */
592d1631
L
8478 { Bad_Opcode },
8479 { Bad_Opcode },
8480 { Bad_Opcode },
8481 { Bad_Opcode },
8482 { Bad_Opcode },
8483 { Bad_Opcode },
8484 { Bad_Opcode },
8485 { Bad_Opcode },
4e7d34a6 8486 /* 78 */
592d1631
L
8487 { Bad_Opcode },
8488 { Bad_Opcode },
8489 { Bad_Opcode },
8490 { Bad_Opcode },
8491 { Bad_Opcode },
8492 { Bad_Opcode },
8493 { Bad_Opcode },
8494 { Bad_Opcode },
4e7d34a6 8495 /* 80 */
592d1631
L
8496 { Bad_Opcode },
8497 { Bad_Opcode },
8498 { Bad_Opcode },
8499 { Bad_Opcode },
8500 { Bad_Opcode },
8501 { Bad_Opcode },
8502 { Bad_Opcode },
8503 { Bad_Opcode },
4e7d34a6 8504 /* 88 */
592d1631
L
8505 { Bad_Opcode },
8506 { Bad_Opcode },
8507 { Bad_Opcode },
8508 { Bad_Opcode },
8509 { Bad_Opcode },
8510 { Bad_Opcode },
8511 { Bad_Opcode },
8512 { Bad_Opcode },
4e7d34a6 8513 /* 90 */
592d1631
L
8514 { Bad_Opcode },
8515 { Bad_Opcode },
8516 { Bad_Opcode },
8517 { Bad_Opcode },
8518 { Bad_Opcode },
8519 { Bad_Opcode },
8520 { Bad_Opcode },
8521 { Bad_Opcode },
4e7d34a6 8522 /* 98 */
592d1631
L
8523 { Bad_Opcode },
8524 { Bad_Opcode },
8525 { Bad_Opcode },
8526 { Bad_Opcode },
8527 { Bad_Opcode },
8528 { Bad_Opcode },
8529 { Bad_Opcode },
8530 { Bad_Opcode },
4e7d34a6 8531 /* a0 */
592d1631
L
8532 { Bad_Opcode },
8533 { Bad_Opcode },
8534 { Bad_Opcode },
8535 { Bad_Opcode },
8536 { Bad_Opcode },
8537 { Bad_Opcode },
8538 { Bad_Opcode },
8539 { Bad_Opcode },
4e7d34a6 8540 /* a8 */
592d1631
L
8541 { Bad_Opcode },
8542 { Bad_Opcode },
8543 { Bad_Opcode },
8544 { Bad_Opcode },
8545 { Bad_Opcode },
8546 { Bad_Opcode },
8547 { Bad_Opcode },
8548 { Bad_Opcode },
d5d7db8e 8549 /* b0 */
592d1631
L
8550 { Bad_Opcode },
8551 { Bad_Opcode },
8552 { Bad_Opcode },
8553 { Bad_Opcode },
8554 { Bad_Opcode },
8555 { Bad_Opcode },
8556 { Bad_Opcode },
8557 { Bad_Opcode },
85f10a01 8558 /* b8 */
592d1631
L
8559 { Bad_Opcode },
8560 { Bad_Opcode },
8561 { Bad_Opcode },
8562 { Bad_Opcode },
8563 { Bad_Opcode },
8564 { Bad_Opcode },
8565 { Bad_Opcode },
8566 { Bad_Opcode },
85f10a01 8567 /* c0 */
592d1631
L
8568 { Bad_Opcode },
8569 { Bad_Opcode },
8570 { Bad_Opcode },
8571 { Bad_Opcode },
8572 { Bad_Opcode },
8573 { Bad_Opcode },
8574 { Bad_Opcode },
8575 { Bad_Opcode },
85f10a01 8576 /* c8 */
592d1631
L
8577 { Bad_Opcode },
8578 { Bad_Opcode },
8579 { Bad_Opcode },
8580 { Bad_Opcode },
8581 { Bad_Opcode },
8582 { Bad_Opcode },
8583 { Bad_Opcode },
8584 { Bad_Opcode },
85f10a01 8585 /* d0 */
592d1631
L
8586 { Bad_Opcode },
8587 { Bad_Opcode },
8588 { Bad_Opcode },
8589 { Bad_Opcode },
8590 { Bad_Opcode },
8591 { Bad_Opcode },
8592 { Bad_Opcode },
8593 { Bad_Opcode },
85f10a01 8594 /* d8 */
592d1631
L
8595 { Bad_Opcode },
8596 { Bad_Opcode },
8597 { Bad_Opcode },
8598 { Bad_Opcode },
8599 { Bad_Opcode },
8600 { Bad_Opcode },
8601 { Bad_Opcode },
8602 { Bad_Opcode },
85f10a01 8603 /* e0 */
592d1631
L
8604 { Bad_Opcode },
8605 { Bad_Opcode },
8606 { Bad_Opcode },
8607 { Bad_Opcode },
8608 { Bad_Opcode },
8609 { Bad_Opcode },
8610 { Bad_Opcode },
8611 { Bad_Opcode },
85f10a01 8612 /* e8 */
592d1631
L
8613 { Bad_Opcode },
8614 { Bad_Opcode },
8615 { Bad_Opcode },
8616 { Bad_Opcode },
8617 { Bad_Opcode },
8618 { Bad_Opcode },
8619 { Bad_Opcode },
8620 { Bad_Opcode },
85f10a01 8621 /* f0 */
592d1631
L
8622 { Bad_Opcode },
8623 { Bad_Opcode },
8624 { Bad_Opcode },
8625 { Bad_Opcode },
8626 { Bad_Opcode },
8627 { Bad_Opcode },
8628 { Bad_Opcode },
8629 { Bad_Opcode },
85f10a01 8630 /* f8 */
592d1631
L
8631 { Bad_Opcode },
8632 { Bad_Opcode },
8633 { Bad_Opcode },
8634 { Bad_Opcode },
8635 { Bad_Opcode },
8636 { Bad_Opcode },
8637 { Bad_Opcode },
8638 { Bad_Opcode },
85f10a01 8639 },
c0f3af97
L
8640};
8641
8642static const struct dis386 vex_table[][256] = {
8643 /* VEX_0F */
85f10a01
MM
8644 {
8645 /* 00 */
592d1631
L
8646 { Bad_Opcode },
8647 { Bad_Opcode },
8648 { Bad_Opcode },
8649 { Bad_Opcode },
8650 { Bad_Opcode },
8651 { Bad_Opcode },
8652 { Bad_Opcode },
8653 { Bad_Opcode },
85f10a01 8654 /* 08 */
592d1631
L
8655 { Bad_Opcode },
8656 { Bad_Opcode },
8657 { Bad_Opcode },
8658 { Bad_Opcode },
8659 { Bad_Opcode },
8660 { Bad_Opcode },
8661 { Bad_Opcode },
8662 { Bad_Opcode },
c0f3af97 8663 /* 10 */
592a252b
L
8664 { PREFIX_TABLE (PREFIX_VEX_0F10) },
8665 { PREFIX_TABLE (PREFIX_VEX_0F11) },
8666 { PREFIX_TABLE (PREFIX_VEX_0F12) },
8667 { MOD_TABLE (MOD_VEX_0F13) },
8668 { VEX_W_TABLE (VEX_W_0F14) },
8669 { VEX_W_TABLE (VEX_W_0F15) },
8670 { PREFIX_TABLE (PREFIX_VEX_0F16) },
8671 { MOD_TABLE (MOD_VEX_0F17) },
c0f3af97 8672 /* 18 */
592d1631
L
8673 { Bad_Opcode },
8674 { Bad_Opcode },
8675 { Bad_Opcode },
8676 { Bad_Opcode },
8677 { Bad_Opcode },
8678 { Bad_Opcode },
8679 { Bad_Opcode },
8680 { Bad_Opcode },
c0f3af97 8681 /* 20 */
592d1631
L
8682 { Bad_Opcode },
8683 { Bad_Opcode },
8684 { Bad_Opcode },
8685 { Bad_Opcode },
8686 { Bad_Opcode },
8687 { Bad_Opcode },
8688 { Bad_Opcode },
8689 { Bad_Opcode },
c0f3af97 8690 /* 28 */
592a252b
L
8691 { VEX_W_TABLE (VEX_W_0F28) },
8692 { VEX_W_TABLE (VEX_W_0F29) },
8693 { PREFIX_TABLE (PREFIX_VEX_0F2A) },
8694 { MOD_TABLE (MOD_VEX_0F2B) },
8695 { PREFIX_TABLE (PREFIX_VEX_0F2C) },
8696 { PREFIX_TABLE (PREFIX_VEX_0F2D) },
8697 { PREFIX_TABLE (PREFIX_VEX_0F2E) },
8698 { PREFIX_TABLE (PREFIX_VEX_0F2F) },
85f10a01 8699 /* 30 */
592d1631
L
8700 { Bad_Opcode },
8701 { Bad_Opcode },
8702 { Bad_Opcode },
8703 { Bad_Opcode },
8704 { Bad_Opcode },
8705 { Bad_Opcode },
8706 { Bad_Opcode },
8707 { Bad_Opcode },
4e7d34a6 8708 /* 38 */
592d1631
L
8709 { Bad_Opcode },
8710 { Bad_Opcode },
8711 { Bad_Opcode },
8712 { Bad_Opcode },
8713 { Bad_Opcode },
8714 { Bad_Opcode },
8715 { Bad_Opcode },
8716 { Bad_Opcode },
d5d7db8e 8717 /* 40 */
592d1631 8718 { Bad_Opcode },
43234a1e
L
8719 { PREFIX_TABLE (PREFIX_VEX_0F41) },
8720 { PREFIX_TABLE (PREFIX_VEX_0F42) },
592d1631 8721 { Bad_Opcode },
43234a1e
L
8722 { PREFIX_TABLE (PREFIX_VEX_0F44) },
8723 { PREFIX_TABLE (PREFIX_VEX_0F45) },
8724 { PREFIX_TABLE (PREFIX_VEX_0F46) },
8725 { PREFIX_TABLE (PREFIX_VEX_0F47) },
85f10a01 8726 /* 48 */
592d1631
L
8727 { Bad_Opcode },
8728 { Bad_Opcode },
1ba585e8 8729 { PREFIX_TABLE (PREFIX_VEX_0F4A) },
43234a1e 8730 { PREFIX_TABLE (PREFIX_VEX_0F4B) },
592d1631
L
8731 { Bad_Opcode },
8732 { Bad_Opcode },
8733 { Bad_Opcode },
8734 { Bad_Opcode },
d5d7db8e 8735 /* 50 */
592a252b
L
8736 { MOD_TABLE (MOD_VEX_0F50) },
8737 { PREFIX_TABLE (PREFIX_VEX_0F51) },
8738 { PREFIX_TABLE (PREFIX_VEX_0F52) },
8739 { PREFIX_TABLE (PREFIX_VEX_0F53) },
bf890a93
IT
8740 { "vandpX", { XM, Vex, EXx }, 0 },
8741 { "vandnpX", { XM, Vex, EXx }, 0 },
8742 { "vorpX", { XM, Vex, EXx }, 0 },
8743 { "vxorpX", { XM, Vex, EXx }, 0 },
c0f3af97 8744 /* 58 */
592a252b
L
8745 { PREFIX_TABLE (PREFIX_VEX_0F58) },
8746 { PREFIX_TABLE (PREFIX_VEX_0F59) },
8747 { PREFIX_TABLE (PREFIX_VEX_0F5A) },
8748 { PREFIX_TABLE (PREFIX_VEX_0F5B) },
8749 { PREFIX_TABLE (PREFIX_VEX_0F5C) },
8750 { PREFIX_TABLE (PREFIX_VEX_0F5D) },
8751 { PREFIX_TABLE (PREFIX_VEX_0F5E) },
8752 { PREFIX_TABLE (PREFIX_VEX_0F5F) },
c0f3af97 8753 /* 60 */
592a252b
L
8754 { PREFIX_TABLE (PREFIX_VEX_0F60) },
8755 { PREFIX_TABLE (PREFIX_VEX_0F61) },
8756 { PREFIX_TABLE (PREFIX_VEX_0F62) },
8757 { PREFIX_TABLE (PREFIX_VEX_0F63) },
8758 { PREFIX_TABLE (PREFIX_VEX_0F64) },
8759 { PREFIX_TABLE (PREFIX_VEX_0F65) },
8760 { PREFIX_TABLE (PREFIX_VEX_0F66) },
8761 { PREFIX_TABLE (PREFIX_VEX_0F67) },
c0f3af97 8762 /* 68 */
592a252b
L
8763 { PREFIX_TABLE (PREFIX_VEX_0F68) },
8764 { PREFIX_TABLE (PREFIX_VEX_0F69) },
8765 { PREFIX_TABLE (PREFIX_VEX_0F6A) },
8766 { PREFIX_TABLE (PREFIX_VEX_0F6B) },
8767 { PREFIX_TABLE (PREFIX_VEX_0F6C) },
8768 { PREFIX_TABLE (PREFIX_VEX_0F6D) },
8769 { PREFIX_TABLE (PREFIX_VEX_0F6E) },
8770 { PREFIX_TABLE (PREFIX_VEX_0F6F) },
c0f3af97 8771 /* 70 */
592a252b
L
8772 { PREFIX_TABLE (PREFIX_VEX_0F70) },
8773 { REG_TABLE (REG_VEX_0F71) },
8774 { REG_TABLE (REG_VEX_0F72) },
8775 { REG_TABLE (REG_VEX_0F73) },
8776 { PREFIX_TABLE (PREFIX_VEX_0F74) },
8777 { PREFIX_TABLE (PREFIX_VEX_0F75) },
8778 { PREFIX_TABLE (PREFIX_VEX_0F76) },
8779 { PREFIX_TABLE (PREFIX_VEX_0F77) },
c0f3af97 8780 /* 78 */
592d1631
L
8781 { Bad_Opcode },
8782 { Bad_Opcode },
8783 { Bad_Opcode },
8784 { Bad_Opcode },
592a252b
L
8785 { PREFIX_TABLE (PREFIX_VEX_0F7C) },
8786 { PREFIX_TABLE (PREFIX_VEX_0F7D) },
8787 { PREFIX_TABLE (PREFIX_VEX_0F7E) },
8788 { PREFIX_TABLE (PREFIX_VEX_0F7F) },
c0f3af97 8789 /* 80 */
592d1631
L
8790 { Bad_Opcode },
8791 { Bad_Opcode },
8792 { Bad_Opcode },
8793 { Bad_Opcode },
8794 { Bad_Opcode },
8795 { Bad_Opcode },
8796 { Bad_Opcode },
8797 { Bad_Opcode },
c0f3af97 8798 /* 88 */
592d1631
L
8799 { Bad_Opcode },
8800 { Bad_Opcode },
8801 { Bad_Opcode },
8802 { Bad_Opcode },
8803 { Bad_Opcode },
8804 { Bad_Opcode },
8805 { Bad_Opcode },
8806 { Bad_Opcode },
c0f3af97 8807 /* 90 */
43234a1e
L
8808 { PREFIX_TABLE (PREFIX_VEX_0F90) },
8809 { PREFIX_TABLE (PREFIX_VEX_0F91) },
8810 { PREFIX_TABLE (PREFIX_VEX_0F92) },
8811 { PREFIX_TABLE (PREFIX_VEX_0F93) },
592d1631
L
8812 { Bad_Opcode },
8813 { Bad_Opcode },
8814 { Bad_Opcode },
8815 { Bad_Opcode },
c0f3af97 8816 /* 98 */
43234a1e 8817 { PREFIX_TABLE (PREFIX_VEX_0F98) },
1ba585e8 8818 { PREFIX_TABLE (PREFIX_VEX_0F99) },
592d1631
L
8819 { Bad_Opcode },
8820 { Bad_Opcode },
8821 { Bad_Opcode },
8822 { Bad_Opcode },
8823 { Bad_Opcode },
8824 { Bad_Opcode },
c0f3af97 8825 /* a0 */
592d1631
L
8826 { Bad_Opcode },
8827 { Bad_Opcode },
8828 { Bad_Opcode },
8829 { Bad_Opcode },
8830 { Bad_Opcode },
8831 { Bad_Opcode },
8832 { Bad_Opcode },
8833 { Bad_Opcode },
c0f3af97 8834 /* a8 */
592d1631
L
8835 { Bad_Opcode },
8836 { Bad_Opcode },
8837 { Bad_Opcode },
8838 { Bad_Opcode },
8839 { Bad_Opcode },
8840 { Bad_Opcode },
592a252b 8841 { REG_TABLE (REG_VEX_0FAE) },
592d1631 8842 { Bad_Opcode },
c0f3af97 8843 /* b0 */
592d1631
L
8844 { Bad_Opcode },
8845 { Bad_Opcode },
8846 { Bad_Opcode },
8847 { Bad_Opcode },
8848 { Bad_Opcode },
8849 { Bad_Opcode },
8850 { Bad_Opcode },
8851 { Bad_Opcode },
c0f3af97 8852 /* b8 */
592d1631
L
8853 { Bad_Opcode },
8854 { Bad_Opcode },
8855 { Bad_Opcode },
8856 { Bad_Opcode },
8857 { Bad_Opcode },
8858 { Bad_Opcode },
8859 { Bad_Opcode },
8860 { Bad_Opcode },
c0f3af97 8861 /* c0 */
592d1631
L
8862 { Bad_Opcode },
8863 { Bad_Opcode },
592a252b 8864 { PREFIX_TABLE (PREFIX_VEX_0FC2) },
592d1631 8865 { Bad_Opcode },
592a252b
L
8866 { PREFIX_TABLE (PREFIX_VEX_0FC4) },
8867 { PREFIX_TABLE (PREFIX_VEX_0FC5) },
bf890a93 8868 { "vshufpX", { XM, Vex, EXx, Ib }, 0 },
592d1631 8869 { Bad_Opcode },
c0f3af97 8870 /* c8 */
592d1631
L
8871 { Bad_Opcode },
8872 { Bad_Opcode },
8873 { Bad_Opcode },
8874 { Bad_Opcode },
8875 { Bad_Opcode },
8876 { Bad_Opcode },
8877 { Bad_Opcode },
8878 { Bad_Opcode },
c0f3af97 8879 /* d0 */
592a252b
L
8880 { PREFIX_TABLE (PREFIX_VEX_0FD0) },
8881 { PREFIX_TABLE (PREFIX_VEX_0FD1) },
8882 { PREFIX_TABLE (PREFIX_VEX_0FD2) },
8883 { PREFIX_TABLE (PREFIX_VEX_0FD3) },
8884 { PREFIX_TABLE (PREFIX_VEX_0FD4) },
8885 { PREFIX_TABLE (PREFIX_VEX_0FD5) },
8886 { PREFIX_TABLE (PREFIX_VEX_0FD6) },
8887 { PREFIX_TABLE (PREFIX_VEX_0FD7) },
c0f3af97 8888 /* d8 */
592a252b
L
8889 { PREFIX_TABLE (PREFIX_VEX_0FD8) },
8890 { PREFIX_TABLE (PREFIX_VEX_0FD9) },
8891 { PREFIX_TABLE (PREFIX_VEX_0FDA) },
8892 { PREFIX_TABLE (PREFIX_VEX_0FDB) },
8893 { PREFIX_TABLE (PREFIX_VEX_0FDC) },
8894 { PREFIX_TABLE (PREFIX_VEX_0FDD) },
8895 { PREFIX_TABLE (PREFIX_VEX_0FDE) },
8896 { PREFIX_TABLE (PREFIX_VEX_0FDF) },
c0f3af97 8897 /* e0 */
592a252b
L
8898 { PREFIX_TABLE (PREFIX_VEX_0FE0) },
8899 { PREFIX_TABLE (PREFIX_VEX_0FE1) },
8900 { PREFIX_TABLE (PREFIX_VEX_0FE2) },
8901 { PREFIX_TABLE (PREFIX_VEX_0FE3) },
8902 { PREFIX_TABLE (PREFIX_VEX_0FE4) },
8903 { PREFIX_TABLE (PREFIX_VEX_0FE5) },
8904 { PREFIX_TABLE (PREFIX_VEX_0FE6) },
8905 { PREFIX_TABLE (PREFIX_VEX_0FE7) },
c0f3af97 8906 /* e8 */
592a252b
L
8907 { PREFIX_TABLE (PREFIX_VEX_0FE8) },
8908 { PREFIX_TABLE (PREFIX_VEX_0FE9) },
8909 { PREFIX_TABLE (PREFIX_VEX_0FEA) },
8910 { PREFIX_TABLE (PREFIX_VEX_0FEB) },
8911 { PREFIX_TABLE (PREFIX_VEX_0FEC) },
8912 { PREFIX_TABLE (PREFIX_VEX_0FED) },
8913 { PREFIX_TABLE (PREFIX_VEX_0FEE) },
8914 { PREFIX_TABLE (PREFIX_VEX_0FEF) },
c0f3af97 8915 /* f0 */
592a252b
L
8916 { PREFIX_TABLE (PREFIX_VEX_0FF0) },
8917 { PREFIX_TABLE (PREFIX_VEX_0FF1) },
8918 { PREFIX_TABLE (PREFIX_VEX_0FF2) },
8919 { PREFIX_TABLE (PREFIX_VEX_0FF3) },
8920 { PREFIX_TABLE (PREFIX_VEX_0FF4) },
8921 { PREFIX_TABLE (PREFIX_VEX_0FF5) },
8922 { PREFIX_TABLE (PREFIX_VEX_0FF6) },
8923 { PREFIX_TABLE (PREFIX_VEX_0FF7) },
c0f3af97 8924 /* f8 */
592a252b
L
8925 { PREFIX_TABLE (PREFIX_VEX_0FF8) },
8926 { PREFIX_TABLE (PREFIX_VEX_0FF9) },
8927 { PREFIX_TABLE (PREFIX_VEX_0FFA) },
8928 { PREFIX_TABLE (PREFIX_VEX_0FFB) },
8929 { PREFIX_TABLE (PREFIX_VEX_0FFC) },
8930 { PREFIX_TABLE (PREFIX_VEX_0FFD) },
8931 { PREFIX_TABLE (PREFIX_VEX_0FFE) },
592d1631 8932 { Bad_Opcode },
c0f3af97
L
8933 },
8934 /* VEX_0F38 */
8935 {
8936 /* 00 */
592a252b
L
8937 { PREFIX_TABLE (PREFIX_VEX_0F3800) },
8938 { PREFIX_TABLE (PREFIX_VEX_0F3801) },
8939 { PREFIX_TABLE (PREFIX_VEX_0F3802) },
8940 { PREFIX_TABLE (PREFIX_VEX_0F3803) },
8941 { PREFIX_TABLE (PREFIX_VEX_0F3804) },
8942 { PREFIX_TABLE (PREFIX_VEX_0F3805) },
8943 { PREFIX_TABLE (PREFIX_VEX_0F3806) },
8944 { PREFIX_TABLE (PREFIX_VEX_0F3807) },
c0f3af97 8945 /* 08 */
592a252b
L
8946 { PREFIX_TABLE (PREFIX_VEX_0F3808) },
8947 { PREFIX_TABLE (PREFIX_VEX_0F3809) },
8948 { PREFIX_TABLE (PREFIX_VEX_0F380A) },
8949 { PREFIX_TABLE (PREFIX_VEX_0F380B) },
8950 { PREFIX_TABLE (PREFIX_VEX_0F380C) },
8951 { PREFIX_TABLE (PREFIX_VEX_0F380D) },
8952 { PREFIX_TABLE (PREFIX_VEX_0F380E) },
8953 { PREFIX_TABLE (PREFIX_VEX_0F380F) },
c0f3af97 8954 /* 10 */
592d1631
L
8955 { Bad_Opcode },
8956 { Bad_Opcode },
8957 { Bad_Opcode },
592a252b 8958 { PREFIX_TABLE (PREFIX_VEX_0F3813) },
592d1631
L
8959 { Bad_Opcode },
8960 { Bad_Opcode },
6c30d220 8961 { PREFIX_TABLE (PREFIX_VEX_0F3816) },
592a252b 8962 { PREFIX_TABLE (PREFIX_VEX_0F3817) },
c0f3af97 8963 /* 18 */
592a252b
L
8964 { PREFIX_TABLE (PREFIX_VEX_0F3818) },
8965 { PREFIX_TABLE (PREFIX_VEX_0F3819) },
8966 { PREFIX_TABLE (PREFIX_VEX_0F381A) },
592d1631 8967 { Bad_Opcode },
592a252b
L
8968 { PREFIX_TABLE (PREFIX_VEX_0F381C) },
8969 { PREFIX_TABLE (PREFIX_VEX_0F381D) },
8970 { PREFIX_TABLE (PREFIX_VEX_0F381E) },
592d1631 8971 { Bad_Opcode },
c0f3af97 8972 /* 20 */
592a252b
L
8973 { PREFIX_TABLE (PREFIX_VEX_0F3820) },
8974 { PREFIX_TABLE (PREFIX_VEX_0F3821) },
8975 { PREFIX_TABLE (PREFIX_VEX_0F3822) },
8976 { PREFIX_TABLE (PREFIX_VEX_0F3823) },
8977 { PREFIX_TABLE (PREFIX_VEX_0F3824) },
8978 { PREFIX_TABLE (PREFIX_VEX_0F3825) },
592d1631
L
8979 { Bad_Opcode },
8980 { Bad_Opcode },
c0f3af97 8981 /* 28 */
592a252b
L
8982 { PREFIX_TABLE (PREFIX_VEX_0F3828) },
8983 { PREFIX_TABLE (PREFIX_VEX_0F3829) },
8984 { PREFIX_TABLE (PREFIX_VEX_0F382A) },
8985 { PREFIX_TABLE (PREFIX_VEX_0F382B) },
8986 { PREFIX_TABLE (PREFIX_VEX_0F382C) },
8987 { PREFIX_TABLE (PREFIX_VEX_0F382D) },
8988 { PREFIX_TABLE (PREFIX_VEX_0F382E) },
8989 { PREFIX_TABLE (PREFIX_VEX_0F382F) },
c0f3af97 8990 /* 30 */
592a252b
L
8991 { PREFIX_TABLE (PREFIX_VEX_0F3830) },
8992 { PREFIX_TABLE (PREFIX_VEX_0F3831) },
8993 { PREFIX_TABLE (PREFIX_VEX_0F3832) },
8994 { PREFIX_TABLE (PREFIX_VEX_0F3833) },
8995 { PREFIX_TABLE (PREFIX_VEX_0F3834) },
8996 { PREFIX_TABLE (PREFIX_VEX_0F3835) },
6c30d220 8997 { PREFIX_TABLE (PREFIX_VEX_0F3836) },
592a252b 8998 { PREFIX_TABLE (PREFIX_VEX_0F3837) },
c0f3af97 8999 /* 38 */
592a252b
L
9000 { PREFIX_TABLE (PREFIX_VEX_0F3838) },
9001 { PREFIX_TABLE (PREFIX_VEX_0F3839) },
9002 { PREFIX_TABLE (PREFIX_VEX_0F383A) },
9003 { PREFIX_TABLE (PREFIX_VEX_0F383B) },
9004 { PREFIX_TABLE (PREFIX_VEX_0F383C) },
9005 { PREFIX_TABLE (PREFIX_VEX_0F383D) },
9006 { PREFIX_TABLE (PREFIX_VEX_0F383E) },
9007 { PREFIX_TABLE (PREFIX_VEX_0F383F) },
c0f3af97 9008 /* 40 */
592a252b
L
9009 { PREFIX_TABLE (PREFIX_VEX_0F3840) },
9010 { PREFIX_TABLE (PREFIX_VEX_0F3841) },
592d1631
L
9011 { Bad_Opcode },
9012 { Bad_Opcode },
9013 { Bad_Opcode },
6c30d220
L
9014 { PREFIX_TABLE (PREFIX_VEX_0F3845) },
9015 { PREFIX_TABLE (PREFIX_VEX_0F3846) },
9016 { PREFIX_TABLE (PREFIX_VEX_0F3847) },
c0f3af97 9017 /* 48 */
592d1631
L
9018 { Bad_Opcode },
9019 { Bad_Opcode },
9020 { Bad_Opcode },
9021 { Bad_Opcode },
9022 { Bad_Opcode },
9023 { Bad_Opcode },
9024 { Bad_Opcode },
9025 { Bad_Opcode },
c0f3af97 9026 /* 50 */
592d1631
L
9027 { Bad_Opcode },
9028 { Bad_Opcode },
9029 { Bad_Opcode },
9030 { Bad_Opcode },
9031 { Bad_Opcode },
9032 { Bad_Opcode },
9033 { Bad_Opcode },
9034 { Bad_Opcode },
c0f3af97 9035 /* 58 */
6c30d220
L
9036 { PREFIX_TABLE (PREFIX_VEX_0F3858) },
9037 { PREFIX_TABLE (PREFIX_VEX_0F3859) },
9038 { PREFIX_TABLE (PREFIX_VEX_0F385A) },
592d1631
L
9039 { Bad_Opcode },
9040 { Bad_Opcode },
9041 { Bad_Opcode },
9042 { Bad_Opcode },
9043 { Bad_Opcode },
c0f3af97 9044 /* 60 */
592d1631
L
9045 { Bad_Opcode },
9046 { Bad_Opcode },
9047 { Bad_Opcode },
9048 { Bad_Opcode },
9049 { Bad_Opcode },
9050 { Bad_Opcode },
9051 { Bad_Opcode },
9052 { Bad_Opcode },
c0f3af97 9053 /* 68 */
592d1631
L
9054 { Bad_Opcode },
9055 { Bad_Opcode },
9056 { Bad_Opcode },
9057 { Bad_Opcode },
9058 { Bad_Opcode },
9059 { Bad_Opcode },
9060 { Bad_Opcode },
9061 { Bad_Opcode },
c0f3af97 9062 /* 70 */
592d1631
L
9063 { Bad_Opcode },
9064 { Bad_Opcode },
9065 { Bad_Opcode },
9066 { Bad_Opcode },
9067 { Bad_Opcode },
9068 { Bad_Opcode },
9069 { Bad_Opcode },
9070 { Bad_Opcode },
c0f3af97 9071 /* 78 */
6c30d220
L
9072 { PREFIX_TABLE (PREFIX_VEX_0F3878) },
9073 { PREFIX_TABLE (PREFIX_VEX_0F3879) },
592d1631
L
9074 { Bad_Opcode },
9075 { Bad_Opcode },
9076 { Bad_Opcode },
9077 { Bad_Opcode },
9078 { Bad_Opcode },
9079 { Bad_Opcode },
c0f3af97 9080 /* 80 */
592d1631
L
9081 { Bad_Opcode },
9082 { Bad_Opcode },
9083 { Bad_Opcode },
9084 { Bad_Opcode },
9085 { Bad_Opcode },
9086 { Bad_Opcode },
9087 { Bad_Opcode },
9088 { Bad_Opcode },
c0f3af97 9089 /* 88 */
592d1631
L
9090 { Bad_Opcode },
9091 { Bad_Opcode },
9092 { Bad_Opcode },
9093 { Bad_Opcode },
6c30d220 9094 { PREFIX_TABLE (PREFIX_VEX_0F388C) },
592d1631 9095 { Bad_Opcode },
6c30d220 9096 { PREFIX_TABLE (PREFIX_VEX_0F388E) },
592d1631 9097 { Bad_Opcode },
c0f3af97 9098 /* 90 */
6c30d220
L
9099 { PREFIX_TABLE (PREFIX_VEX_0F3890) },
9100 { PREFIX_TABLE (PREFIX_VEX_0F3891) },
9101 { PREFIX_TABLE (PREFIX_VEX_0F3892) },
9102 { PREFIX_TABLE (PREFIX_VEX_0F3893) },
592d1631
L
9103 { Bad_Opcode },
9104 { Bad_Opcode },
592a252b
L
9105 { PREFIX_TABLE (PREFIX_VEX_0F3896) },
9106 { PREFIX_TABLE (PREFIX_VEX_0F3897) },
c0f3af97 9107 /* 98 */
592a252b
L
9108 { PREFIX_TABLE (PREFIX_VEX_0F3898) },
9109 { PREFIX_TABLE (PREFIX_VEX_0F3899) },
9110 { PREFIX_TABLE (PREFIX_VEX_0F389A) },
9111 { PREFIX_TABLE (PREFIX_VEX_0F389B) },
9112 { PREFIX_TABLE (PREFIX_VEX_0F389C) },
9113 { PREFIX_TABLE (PREFIX_VEX_0F389D) },
9114 { PREFIX_TABLE (PREFIX_VEX_0F389E) },
9115 { PREFIX_TABLE (PREFIX_VEX_0F389F) },
c0f3af97 9116 /* a0 */
592d1631
L
9117 { Bad_Opcode },
9118 { Bad_Opcode },
9119 { Bad_Opcode },
9120 { Bad_Opcode },
9121 { Bad_Opcode },
9122 { Bad_Opcode },
592a252b
L
9123 { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
9124 { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
c0f3af97 9125 /* a8 */
592a252b
L
9126 { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
9127 { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
9128 { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
9129 { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
9130 { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
9131 { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
9132 { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
9133 { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
c0f3af97 9134 /* b0 */
592d1631
L
9135 { Bad_Opcode },
9136 { Bad_Opcode },
9137 { Bad_Opcode },
9138 { Bad_Opcode },
9139 { Bad_Opcode },
9140 { Bad_Opcode },
592a252b
L
9141 { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
9142 { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
c0f3af97 9143 /* b8 */
592a252b
L
9144 { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
9145 { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
9146 { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
9147 { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
9148 { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
9149 { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
9150 { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
9151 { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
c0f3af97 9152 /* c0 */
592d1631
L
9153 { Bad_Opcode },
9154 { Bad_Opcode },
9155 { Bad_Opcode },
9156 { Bad_Opcode },
9157 { Bad_Opcode },
9158 { Bad_Opcode },
9159 { Bad_Opcode },
9160 { Bad_Opcode },
c0f3af97 9161 /* c8 */
592d1631
L
9162 { Bad_Opcode },
9163 { Bad_Opcode },
9164 { Bad_Opcode },
9165 { Bad_Opcode },
9166 { Bad_Opcode },
9167 { Bad_Opcode },
9168 { Bad_Opcode },
9169 { Bad_Opcode },
c0f3af97 9170 /* d0 */
592d1631
L
9171 { Bad_Opcode },
9172 { Bad_Opcode },
9173 { Bad_Opcode },
9174 { Bad_Opcode },
9175 { Bad_Opcode },
9176 { Bad_Opcode },
9177 { Bad_Opcode },
9178 { Bad_Opcode },
c0f3af97 9179 /* d8 */
592d1631
L
9180 { Bad_Opcode },
9181 { Bad_Opcode },
9182 { Bad_Opcode },
592a252b
L
9183 { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
9184 { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
9185 { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
9186 { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
9187 { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
c0f3af97 9188 /* e0 */
592d1631
L
9189 { Bad_Opcode },
9190 { Bad_Opcode },
9191 { Bad_Opcode },
9192 { Bad_Opcode },
9193 { Bad_Opcode },
9194 { Bad_Opcode },
9195 { Bad_Opcode },
9196 { Bad_Opcode },
c0f3af97 9197 /* e8 */
592d1631
L
9198 { Bad_Opcode },
9199 { Bad_Opcode },
9200 { Bad_Opcode },
9201 { Bad_Opcode },
9202 { Bad_Opcode },
9203 { Bad_Opcode },
9204 { Bad_Opcode },
9205 { Bad_Opcode },
c0f3af97 9206 /* f0 */
592d1631
L
9207 { Bad_Opcode },
9208 { Bad_Opcode },
f12dc422
L
9209 { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
9210 { REG_TABLE (REG_VEX_0F38F3) },
592d1631 9211 { Bad_Opcode },
6c30d220
L
9212 { PREFIX_TABLE (PREFIX_VEX_0F38F5) },
9213 { PREFIX_TABLE (PREFIX_VEX_0F38F6) },
f12dc422 9214 { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
c0f3af97 9215 /* f8 */
592d1631
L
9216 { Bad_Opcode },
9217 { Bad_Opcode },
9218 { Bad_Opcode },
9219 { Bad_Opcode },
9220 { Bad_Opcode },
9221 { Bad_Opcode },
9222 { Bad_Opcode },
9223 { Bad_Opcode },
c0f3af97
L
9224 },
9225 /* VEX_0F3A */
9226 {
9227 /* 00 */
6c30d220
L
9228 { PREFIX_TABLE (PREFIX_VEX_0F3A00) },
9229 { PREFIX_TABLE (PREFIX_VEX_0F3A01) },
9230 { PREFIX_TABLE (PREFIX_VEX_0F3A02) },
592d1631 9231 { Bad_Opcode },
592a252b
L
9232 { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
9233 { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
9234 { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
592d1631 9235 { Bad_Opcode },
c0f3af97 9236 /* 08 */
592a252b
L
9237 { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
9238 { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
9239 { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
9240 { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
9241 { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
9242 { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
9243 { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
9244 { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
c0f3af97 9245 /* 10 */
592d1631
L
9246 { Bad_Opcode },
9247 { Bad_Opcode },
9248 { Bad_Opcode },
9249 { Bad_Opcode },
592a252b
L
9250 { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
9251 { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
9252 { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
9253 { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
c0f3af97 9254 /* 18 */
592a252b
L
9255 { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
9256 { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
592d1631
L
9257 { Bad_Opcode },
9258 { Bad_Opcode },
9259 { Bad_Opcode },
592a252b 9260 { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
592d1631
L
9261 { Bad_Opcode },
9262 { Bad_Opcode },
c0f3af97 9263 /* 20 */
592a252b
L
9264 { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
9265 { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
9266 { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
592d1631
L
9267 { Bad_Opcode },
9268 { Bad_Opcode },
9269 { Bad_Opcode },
9270 { Bad_Opcode },
9271 { Bad_Opcode },
c0f3af97 9272 /* 28 */
592d1631
L
9273 { Bad_Opcode },
9274 { Bad_Opcode },
9275 { Bad_Opcode },
9276 { Bad_Opcode },
9277 { Bad_Opcode },
9278 { Bad_Opcode },
9279 { Bad_Opcode },
9280 { Bad_Opcode },
c0f3af97 9281 /* 30 */
43234a1e 9282 { PREFIX_TABLE (PREFIX_VEX_0F3A30) },
1ba585e8 9283 { PREFIX_TABLE (PREFIX_VEX_0F3A31) },
43234a1e 9284 { PREFIX_TABLE (PREFIX_VEX_0F3A32) },
1ba585e8 9285 { PREFIX_TABLE (PREFIX_VEX_0F3A33) },
592d1631
L
9286 { Bad_Opcode },
9287 { Bad_Opcode },
9288 { Bad_Opcode },
9289 { Bad_Opcode },
c0f3af97 9290 /* 38 */
6c30d220
L
9291 { PREFIX_TABLE (PREFIX_VEX_0F3A38) },
9292 { PREFIX_TABLE (PREFIX_VEX_0F3A39) },
592d1631
L
9293 { Bad_Opcode },
9294 { Bad_Opcode },
9295 { Bad_Opcode },
9296 { Bad_Opcode },
9297 { Bad_Opcode },
9298 { Bad_Opcode },
c0f3af97 9299 /* 40 */
592a252b
L
9300 { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
9301 { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
9302 { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
592d1631 9303 { Bad_Opcode },
592a252b 9304 { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
592d1631 9305 { Bad_Opcode },
6c30d220 9306 { PREFIX_TABLE (PREFIX_VEX_0F3A46) },
592d1631 9307 { Bad_Opcode },
c0f3af97 9308 /* 48 */
592a252b
L
9309 { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
9310 { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
9311 { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
9312 { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
9313 { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
592d1631
L
9314 { Bad_Opcode },
9315 { Bad_Opcode },
9316 { Bad_Opcode },
c0f3af97 9317 /* 50 */
592d1631
L
9318 { Bad_Opcode },
9319 { Bad_Opcode },
9320 { Bad_Opcode },
9321 { Bad_Opcode },
9322 { Bad_Opcode },
9323 { Bad_Opcode },
9324 { Bad_Opcode },
9325 { Bad_Opcode },
c0f3af97 9326 /* 58 */
592d1631
L
9327 { Bad_Opcode },
9328 { Bad_Opcode },
9329 { Bad_Opcode },
9330 { Bad_Opcode },
592a252b
L
9331 { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
9332 { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
9333 { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
9334 { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
c0f3af97 9335 /* 60 */
592a252b
L
9336 { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
9337 { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
9338 { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
9339 { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
592d1631
L
9340 { Bad_Opcode },
9341 { Bad_Opcode },
9342 { Bad_Opcode },
9343 { Bad_Opcode },
c0f3af97 9344 /* 68 */
592a252b
L
9345 { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
9346 { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
9347 { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
9348 { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
9349 { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
9350 { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
9351 { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
9352 { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
c0f3af97 9353 /* 70 */
592d1631
L
9354 { Bad_Opcode },
9355 { Bad_Opcode },
9356 { Bad_Opcode },
9357 { Bad_Opcode },
9358 { Bad_Opcode },
9359 { Bad_Opcode },
9360 { Bad_Opcode },
9361 { Bad_Opcode },
c0f3af97 9362 /* 78 */
592a252b
L
9363 { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
9364 { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
9365 { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
9366 { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
9367 { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
9368 { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
9369 { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
9370 { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
c0f3af97 9371 /* 80 */
592d1631
L
9372 { Bad_Opcode },
9373 { Bad_Opcode },
9374 { Bad_Opcode },
9375 { Bad_Opcode },
9376 { Bad_Opcode },
9377 { Bad_Opcode },
9378 { Bad_Opcode },
9379 { Bad_Opcode },
c0f3af97 9380 /* 88 */
592d1631
L
9381 { Bad_Opcode },
9382 { Bad_Opcode },
9383 { Bad_Opcode },
9384 { Bad_Opcode },
9385 { Bad_Opcode },
9386 { Bad_Opcode },
9387 { Bad_Opcode },
9388 { Bad_Opcode },
c0f3af97 9389 /* 90 */
592d1631
L
9390 { Bad_Opcode },
9391 { Bad_Opcode },
9392 { Bad_Opcode },
9393 { Bad_Opcode },
9394 { Bad_Opcode },
9395 { Bad_Opcode },
9396 { Bad_Opcode },
9397 { Bad_Opcode },
c0f3af97 9398 /* 98 */
592d1631
L
9399 { Bad_Opcode },
9400 { Bad_Opcode },
9401 { Bad_Opcode },
9402 { Bad_Opcode },
9403 { Bad_Opcode },
9404 { Bad_Opcode },
9405 { Bad_Opcode },
9406 { Bad_Opcode },
c0f3af97 9407 /* a0 */
592d1631
L
9408 { Bad_Opcode },
9409 { Bad_Opcode },
9410 { Bad_Opcode },
9411 { Bad_Opcode },
9412 { Bad_Opcode },
9413 { Bad_Opcode },
9414 { Bad_Opcode },
9415 { Bad_Opcode },
c0f3af97 9416 /* a8 */
592d1631
L
9417 { Bad_Opcode },
9418 { Bad_Opcode },
9419 { Bad_Opcode },
9420 { Bad_Opcode },
9421 { Bad_Opcode },
9422 { Bad_Opcode },
9423 { Bad_Opcode },
9424 { Bad_Opcode },
c0f3af97 9425 /* b0 */
592d1631
L
9426 { Bad_Opcode },
9427 { Bad_Opcode },
9428 { Bad_Opcode },
9429 { Bad_Opcode },
9430 { Bad_Opcode },
9431 { Bad_Opcode },
9432 { Bad_Opcode },
9433 { Bad_Opcode },
c0f3af97 9434 /* b8 */
592d1631
L
9435 { Bad_Opcode },
9436 { Bad_Opcode },
9437 { Bad_Opcode },
9438 { Bad_Opcode },
9439 { Bad_Opcode },
9440 { Bad_Opcode },
9441 { Bad_Opcode },
9442 { Bad_Opcode },
c0f3af97 9443 /* c0 */
592d1631
L
9444 { Bad_Opcode },
9445 { Bad_Opcode },
9446 { Bad_Opcode },
9447 { Bad_Opcode },
9448 { Bad_Opcode },
9449 { Bad_Opcode },
9450 { Bad_Opcode },
9451 { Bad_Opcode },
c0f3af97 9452 /* c8 */
592d1631
L
9453 { Bad_Opcode },
9454 { Bad_Opcode },
9455 { Bad_Opcode },
9456 { Bad_Opcode },
9457 { Bad_Opcode },
9458 { Bad_Opcode },
9459 { Bad_Opcode },
9460 { Bad_Opcode },
c0f3af97 9461 /* d0 */
592d1631
L
9462 { Bad_Opcode },
9463 { Bad_Opcode },
9464 { Bad_Opcode },
9465 { Bad_Opcode },
9466 { Bad_Opcode },
9467 { Bad_Opcode },
9468 { Bad_Opcode },
9469 { Bad_Opcode },
c0f3af97 9470 /* d8 */
592d1631
L
9471 { Bad_Opcode },
9472 { Bad_Opcode },
9473 { Bad_Opcode },
9474 { Bad_Opcode },
9475 { Bad_Opcode },
9476 { Bad_Opcode },
9477 { Bad_Opcode },
592a252b 9478 { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
c0f3af97 9479 /* e0 */
592d1631
L
9480 { Bad_Opcode },
9481 { Bad_Opcode },
9482 { Bad_Opcode },
9483 { Bad_Opcode },
9484 { Bad_Opcode },
9485 { Bad_Opcode },
9486 { Bad_Opcode },
9487 { Bad_Opcode },
c0f3af97 9488 /* e8 */
592d1631
L
9489 { Bad_Opcode },
9490 { Bad_Opcode },
9491 { Bad_Opcode },
9492 { Bad_Opcode },
9493 { Bad_Opcode },
9494 { Bad_Opcode },
9495 { Bad_Opcode },
9496 { Bad_Opcode },
c0f3af97 9497 /* f0 */
6c30d220 9498 { PREFIX_TABLE (PREFIX_VEX_0F3AF0) },
592d1631
L
9499 { Bad_Opcode },
9500 { Bad_Opcode },
9501 { Bad_Opcode },
9502 { Bad_Opcode },
9503 { Bad_Opcode },
9504 { Bad_Opcode },
9505 { Bad_Opcode },
c0f3af97 9506 /* f8 */
592d1631
L
9507 { Bad_Opcode },
9508 { Bad_Opcode },
9509 { Bad_Opcode },
9510 { Bad_Opcode },
9511 { Bad_Opcode },
9512 { Bad_Opcode },
9513 { Bad_Opcode },
9514 { Bad_Opcode },
c0f3af97
L
9515 },
9516};
9517
43234a1e
L
9518#define NEED_OPCODE_TABLE
9519#include "i386-dis-evex.h"
9520#undef NEED_OPCODE_TABLE
c0f3af97 9521static const struct dis386 vex_len_table[][2] = {
592a252b 9522 /* VEX_LEN_0F10_P_1 */
c0f3af97 9523 {
592a252b
L
9524 { VEX_W_TABLE (VEX_W_0F10_P_1) },
9525 { VEX_W_TABLE (VEX_W_0F10_P_1) },
c0f3af97
L
9526 },
9527
592a252b 9528 /* VEX_LEN_0F10_P_3 */
c0f3af97 9529 {
592a252b
L
9530 { VEX_W_TABLE (VEX_W_0F10_P_3) },
9531 { VEX_W_TABLE (VEX_W_0F10_P_3) },
c0f3af97
L
9532 },
9533
592a252b 9534 /* VEX_LEN_0F11_P_1 */
c0f3af97 9535 {
592a252b
L
9536 { VEX_W_TABLE (VEX_W_0F11_P_1) },
9537 { VEX_W_TABLE (VEX_W_0F11_P_1) },
c0f3af97
L
9538 },
9539
592a252b 9540 /* VEX_LEN_0F11_P_3 */
c0f3af97 9541 {
592a252b
L
9542 { VEX_W_TABLE (VEX_W_0F11_P_3) },
9543 { VEX_W_TABLE (VEX_W_0F11_P_3) },
c0f3af97
L
9544 },
9545
592a252b 9546 /* VEX_LEN_0F12_P_0_M_0 */
c0f3af97 9547 {
592a252b 9548 { VEX_W_TABLE (VEX_W_0F12_P_0_M_0) },
c0f3af97
L
9549 },
9550
592a252b 9551 /* VEX_LEN_0F12_P_0_M_1 */
c0f3af97 9552 {
592a252b 9553 { VEX_W_TABLE (VEX_W_0F12_P_0_M_1) },
c0f3af97
L
9554 },
9555
592a252b 9556 /* VEX_LEN_0F12_P_2 */
c0f3af97 9557 {
592a252b 9558 { VEX_W_TABLE (VEX_W_0F12_P_2) },
c0f3af97
L
9559 },
9560
592a252b 9561 /* VEX_LEN_0F13_M_0 */
c0f3af97 9562 {
592a252b 9563 { VEX_W_TABLE (VEX_W_0F13_M_0) },
c0f3af97
L
9564 },
9565
592a252b 9566 /* VEX_LEN_0F16_P_0_M_0 */
c0f3af97 9567 {
592a252b 9568 { VEX_W_TABLE (VEX_W_0F16_P_0_M_0) },
c0f3af97
L
9569 },
9570
592a252b 9571 /* VEX_LEN_0F16_P_0_M_1 */
c0f3af97 9572 {
592a252b 9573 { VEX_W_TABLE (VEX_W_0F16_P_0_M_1) },
c0f3af97
L
9574 },
9575
592a252b 9576 /* VEX_LEN_0F16_P_2 */
c0f3af97 9577 {
592a252b 9578 { VEX_W_TABLE (VEX_W_0F16_P_2) },
c0f3af97
L
9579 },
9580
592a252b 9581 /* VEX_LEN_0F17_M_0 */
c0f3af97 9582 {
592a252b 9583 { VEX_W_TABLE (VEX_W_0F17_M_0) },
c0f3af97
L
9584 },
9585
592a252b 9586 /* VEX_LEN_0F2A_P_1 */
c0f3af97 9587 {
bf890a93
IT
9588 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev }, 0 },
9589 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev }, 0 },
c0f3af97
L
9590 },
9591
592a252b 9592 /* VEX_LEN_0F2A_P_3 */
c0f3af97 9593 {
bf890a93
IT
9594 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev }, 0 },
9595 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev }, 0 },
c0f3af97
L
9596 },
9597
592a252b 9598 /* VEX_LEN_0F2C_P_1 */
c0f3af97 9599 {
bf890a93
IT
9600 { "vcvttss2siY", { Gv, EXdScalar }, 0 },
9601 { "vcvttss2siY", { Gv, EXdScalar }, 0 },
c0f3af97
L
9602 },
9603
592a252b 9604 /* VEX_LEN_0F2C_P_3 */
c0f3af97 9605 {
bf890a93
IT
9606 { "vcvttsd2siY", { Gv, EXqScalar }, 0 },
9607 { "vcvttsd2siY", { Gv, EXqScalar }, 0 },
c0f3af97
L
9608 },
9609
592a252b 9610 /* VEX_LEN_0F2D_P_1 */
c0f3af97 9611 {
bf890a93
IT
9612 { "vcvtss2siY", { Gv, EXdScalar }, 0 },
9613 { "vcvtss2siY", { Gv, EXdScalar }, 0 },
c0f3af97
L
9614 },
9615
592a252b 9616 /* VEX_LEN_0F2D_P_3 */
c0f3af97 9617 {
bf890a93
IT
9618 { "vcvtsd2siY", { Gv, EXqScalar }, 0 },
9619 { "vcvtsd2siY", { Gv, EXqScalar }, 0 },
c0f3af97
L
9620 },
9621
592a252b 9622 /* VEX_LEN_0F2E_P_0 */
c0f3af97 9623 {
592a252b
L
9624 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
9625 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
c0f3af97
L
9626 },
9627
592a252b 9628 /* VEX_LEN_0F2E_P_2 */
c0f3af97 9629 {
592a252b
L
9630 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
9631 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
c0f3af97
L
9632 },
9633
592a252b 9634 /* VEX_LEN_0F2F_P_0 */
c0f3af97 9635 {
592a252b
L
9636 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
9637 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
c0f3af97
L
9638 },
9639
592a252b 9640 /* VEX_LEN_0F2F_P_2 */
c0f3af97 9641 {
592a252b
L
9642 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
9643 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
c0f3af97
L
9644 },
9645
43234a1e
L
9646 /* VEX_LEN_0F41_P_0 */
9647 {
9648 { Bad_Opcode },
9649 { VEX_W_TABLE (VEX_W_0F41_P_0_LEN_1) },
9650 },
1ba585e8
IT
9651 /* VEX_LEN_0F41_P_2 */
9652 {
9653 { Bad_Opcode },
9654 { VEX_W_TABLE (VEX_W_0F41_P_2_LEN_1) },
9655 },
43234a1e
L
9656 /* VEX_LEN_0F42_P_0 */
9657 {
9658 { Bad_Opcode },
9659 { VEX_W_TABLE (VEX_W_0F42_P_0_LEN_1) },
9660 },
1ba585e8
IT
9661 /* VEX_LEN_0F42_P_2 */
9662 {
9663 { Bad_Opcode },
9664 { VEX_W_TABLE (VEX_W_0F42_P_2_LEN_1) },
9665 },
43234a1e
L
9666 /* VEX_LEN_0F44_P_0 */
9667 {
9668 { VEX_W_TABLE (VEX_W_0F44_P_0_LEN_0) },
9669 },
1ba585e8
IT
9670 /* VEX_LEN_0F44_P_2 */
9671 {
9672 { VEX_W_TABLE (VEX_W_0F44_P_2_LEN_0) },
9673 },
43234a1e
L
9674 /* VEX_LEN_0F45_P_0 */
9675 {
9676 { Bad_Opcode },
9677 { VEX_W_TABLE (VEX_W_0F45_P_0_LEN_1) },
9678 },
1ba585e8
IT
9679 /* VEX_LEN_0F45_P_2 */
9680 {
9681 { Bad_Opcode },
9682 { VEX_W_TABLE (VEX_W_0F45_P_2_LEN_1) },
9683 },
43234a1e
L
9684 /* VEX_LEN_0F46_P_0 */
9685 {
9686 { Bad_Opcode },
9687 { VEX_W_TABLE (VEX_W_0F46_P_0_LEN_1) },
9688 },
1ba585e8
IT
9689 /* VEX_LEN_0F46_P_2 */
9690 {
9691 { Bad_Opcode },
9692 { VEX_W_TABLE (VEX_W_0F46_P_2_LEN_1) },
9693 },
43234a1e
L
9694 /* VEX_LEN_0F47_P_0 */
9695 {
9696 { Bad_Opcode },
9697 { VEX_W_TABLE (VEX_W_0F47_P_0_LEN_1) },
9698 },
1ba585e8
IT
9699 /* VEX_LEN_0F47_P_2 */
9700 {
9701 { Bad_Opcode },
9702 { VEX_W_TABLE (VEX_W_0F47_P_2_LEN_1) },
9703 },
9704 /* VEX_LEN_0F4A_P_0 */
9705 {
9706 { Bad_Opcode },
9707 { VEX_W_TABLE (VEX_W_0F4A_P_0_LEN_1) },
9708 },
9709 /* VEX_LEN_0F4A_P_2 */
9710 {
9711 { Bad_Opcode },
9712 { VEX_W_TABLE (VEX_W_0F4A_P_2_LEN_1) },
9713 },
9714 /* VEX_LEN_0F4B_P_0 */
9715 {
9716 { Bad_Opcode },
9717 { VEX_W_TABLE (VEX_W_0F4B_P_0_LEN_1) },
9718 },
43234a1e
L
9719 /* VEX_LEN_0F4B_P_2 */
9720 {
9721 { Bad_Opcode },
9722 { VEX_W_TABLE (VEX_W_0F4B_P_2_LEN_1) },
9723 },
9724
592a252b 9725 /* VEX_LEN_0F51_P_1 */
c0f3af97 9726 {
592a252b
L
9727 { VEX_W_TABLE (VEX_W_0F51_P_1) },
9728 { VEX_W_TABLE (VEX_W_0F51_P_1) },
c0f3af97
L
9729 },
9730
592a252b 9731 /* VEX_LEN_0F51_P_3 */
c0f3af97 9732 {
592a252b
L
9733 { VEX_W_TABLE (VEX_W_0F51_P_3) },
9734 { VEX_W_TABLE (VEX_W_0F51_P_3) },
c0f3af97
L
9735 },
9736
592a252b 9737 /* VEX_LEN_0F52_P_1 */
c0f3af97 9738 {
592a252b
L
9739 { VEX_W_TABLE (VEX_W_0F52_P_1) },
9740 { VEX_W_TABLE (VEX_W_0F52_P_1) },
c0f3af97
L
9741 },
9742
592a252b 9743 /* VEX_LEN_0F53_P_1 */
c0f3af97 9744 {
592a252b
L
9745 { VEX_W_TABLE (VEX_W_0F53_P_1) },
9746 { VEX_W_TABLE (VEX_W_0F53_P_1) },
c0f3af97
L
9747 },
9748
592a252b 9749 /* VEX_LEN_0F58_P_1 */
c0f3af97 9750 {
592a252b
L
9751 { VEX_W_TABLE (VEX_W_0F58_P_1) },
9752 { VEX_W_TABLE (VEX_W_0F58_P_1) },
c0f3af97
L
9753 },
9754
592a252b 9755 /* VEX_LEN_0F58_P_3 */
c0f3af97 9756 {
592a252b
L
9757 { VEX_W_TABLE (VEX_W_0F58_P_3) },
9758 { VEX_W_TABLE (VEX_W_0F58_P_3) },
c0f3af97
L
9759 },
9760
592a252b 9761 /* VEX_LEN_0F59_P_1 */
c0f3af97 9762 {
592a252b
L
9763 { VEX_W_TABLE (VEX_W_0F59_P_1) },
9764 { VEX_W_TABLE (VEX_W_0F59_P_1) },
c0f3af97
L
9765 },
9766
592a252b 9767 /* VEX_LEN_0F59_P_3 */
c0f3af97 9768 {
592a252b
L
9769 { VEX_W_TABLE (VEX_W_0F59_P_3) },
9770 { VEX_W_TABLE (VEX_W_0F59_P_3) },
c0f3af97
L
9771 },
9772
592a252b 9773 /* VEX_LEN_0F5A_P_1 */
c0f3af97 9774 {
592a252b
L
9775 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
9776 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
c0f3af97
L
9777 },
9778
592a252b 9779 /* VEX_LEN_0F5A_P_3 */
c0f3af97 9780 {
592a252b
L
9781 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
9782 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
c0f3af97
L
9783 },
9784
592a252b 9785 /* VEX_LEN_0F5C_P_1 */
c0f3af97 9786 {
592a252b
L
9787 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
9788 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
c0f3af97
L
9789 },
9790
592a252b 9791 /* VEX_LEN_0F5C_P_3 */
c0f3af97 9792 {
592a252b
L
9793 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
9794 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
c0f3af97
L
9795 },
9796
592a252b 9797 /* VEX_LEN_0F5D_P_1 */
c0f3af97 9798 {
592a252b
L
9799 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
9800 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
c0f3af97
L
9801 },
9802
592a252b 9803 /* VEX_LEN_0F5D_P_3 */
c0f3af97 9804 {
592a252b
L
9805 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
9806 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
c0f3af97
L
9807 },
9808
592a252b 9809 /* VEX_LEN_0F5E_P_1 */
c0f3af97 9810 {
592a252b
L
9811 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
9812 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
c0f3af97
L
9813 },
9814
592a252b 9815 /* VEX_LEN_0F5E_P_3 */
c0f3af97 9816 {
592a252b
L
9817 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
9818 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
c0f3af97
L
9819 },
9820
592a252b 9821 /* VEX_LEN_0F5F_P_1 */
c0f3af97 9822 {
592a252b
L
9823 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
9824 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
c0f3af97
L
9825 },
9826
592a252b 9827 /* VEX_LEN_0F5F_P_3 */
c0f3af97 9828 {
592a252b
L
9829 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
9830 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
c0f3af97
L
9831 },
9832
592a252b 9833 /* VEX_LEN_0F6E_P_2 */
c0f3af97 9834 {
bf890a93
IT
9835 { "vmovK", { XMScalar, Edq }, 0 },
9836 { "vmovK", { XMScalar, Edq }, 0 },
c0f3af97
L
9837 },
9838
592a252b 9839 /* VEX_LEN_0F7E_P_1 */
c0f3af97 9840 {
592a252b
L
9841 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
9842 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
c0f3af97
L
9843 },
9844
592a252b 9845 /* VEX_LEN_0F7E_P_2 */
c0f3af97 9846 {
bf890a93
IT
9847 { "vmovK", { Edq, XMScalar }, 0 },
9848 { "vmovK", { Edq, XMScalar }, 0 },
c0f3af97
L
9849 },
9850
43234a1e
L
9851 /* VEX_LEN_0F90_P_0 */
9852 {
9853 { VEX_W_TABLE (VEX_W_0F90_P_0_LEN_0) },
9854 },
9855
1ba585e8
IT
9856 /* VEX_LEN_0F90_P_2 */
9857 {
9858 { VEX_W_TABLE (VEX_W_0F90_P_2_LEN_0) },
9859 },
9860
43234a1e
L
9861 /* VEX_LEN_0F91_P_0 */
9862 {
9863 { VEX_W_TABLE (VEX_W_0F91_P_0_LEN_0) },
9864 },
9865
1ba585e8
IT
9866 /* VEX_LEN_0F91_P_2 */
9867 {
9868 { VEX_W_TABLE (VEX_W_0F91_P_2_LEN_0) },
9869 },
9870
43234a1e
L
9871 /* VEX_LEN_0F92_P_0 */
9872 {
9873 { VEX_W_TABLE (VEX_W_0F92_P_0_LEN_0) },
9874 },
9875
90a915bf
IT
9876 /* VEX_LEN_0F92_P_2 */
9877 {
9878 { VEX_W_TABLE (VEX_W_0F92_P_2_LEN_0) },
9879 },
9880
1ba585e8
IT
9881 /* VEX_LEN_0F92_P_3 */
9882 {
9883 { VEX_W_TABLE (VEX_W_0F92_P_3_LEN_0) },
9884 },
9885
43234a1e
L
9886 /* VEX_LEN_0F93_P_0 */
9887 {
9888 { VEX_W_TABLE (VEX_W_0F93_P_0_LEN_0) },
9889 },
9890
90a915bf
IT
9891 /* VEX_LEN_0F93_P_2 */
9892 {
9893 { VEX_W_TABLE (VEX_W_0F93_P_2_LEN_0) },
9894 },
9895
1ba585e8
IT
9896 /* VEX_LEN_0F93_P_3 */
9897 {
9898 { VEX_W_TABLE (VEX_W_0F93_P_3_LEN_0) },
9899 },
9900
43234a1e
L
9901 /* VEX_LEN_0F98_P_0 */
9902 {
9903 { VEX_W_TABLE (VEX_W_0F98_P_0_LEN_0) },
9904 },
9905
1ba585e8
IT
9906 /* VEX_LEN_0F98_P_2 */
9907 {
9908 { VEX_W_TABLE (VEX_W_0F98_P_2_LEN_0) },
9909 },
9910
9911 /* VEX_LEN_0F99_P_0 */
9912 {
9913 { VEX_W_TABLE (VEX_W_0F99_P_0_LEN_0) },
9914 },
9915
9916 /* VEX_LEN_0F99_P_2 */
9917 {
9918 { VEX_W_TABLE (VEX_W_0F99_P_2_LEN_0) },
9919 },
9920
6c30d220 9921 /* VEX_LEN_0FAE_R_2_M_0 */
c0f3af97 9922 {
6c30d220 9923 { VEX_W_TABLE (VEX_W_0FAE_R_2_M_0) },
c0f3af97
L
9924 },
9925
6c30d220 9926 /* VEX_LEN_0FAE_R_3_M_0 */
c0f3af97 9927 {
6c30d220 9928 { VEX_W_TABLE (VEX_W_0FAE_R_3_M_0) },
c0f3af97
L
9929 },
9930
6c30d220 9931 /* VEX_LEN_0FC2_P_1 */
c0f3af97 9932 {
6c30d220
L
9933 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
9934 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
c0f3af97
L
9935 },
9936
6c30d220 9937 /* VEX_LEN_0FC2_P_3 */
c0f3af97 9938 {
6c30d220
L
9939 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
9940 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
c0f3af97
L
9941 },
9942
6c30d220 9943 /* VEX_LEN_0FC4_P_2 */
c0f3af97 9944 {
6c30d220 9945 { VEX_W_TABLE (VEX_W_0FC4_P_2) },
c0f3af97
L
9946 },
9947
6c30d220 9948 /* VEX_LEN_0FC5_P_2 */
c0f3af97 9949 {
6c30d220 9950 { VEX_W_TABLE (VEX_W_0FC5_P_2) },
c0f3af97
L
9951 },
9952
6c30d220 9953 /* VEX_LEN_0FD6_P_2 */
c0f3af97 9954 {
6c30d220
L
9955 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
9956 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
c0f3af97
L
9957 },
9958
6c30d220 9959 /* VEX_LEN_0FF7_P_2 */
c0f3af97 9960 {
6c30d220 9961 { VEX_W_TABLE (VEX_W_0FF7_P_2) },
c0f3af97
L
9962 },
9963
6c30d220 9964 /* VEX_LEN_0F3816_P_2 */
c0f3af97 9965 {
6c30d220
L
9966 { Bad_Opcode },
9967 { VEX_W_TABLE (VEX_W_0F3816_P_2) },
c0f3af97
L
9968 },
9969
6c30d220 9970 /* VEX_LEN_0F3819_P_2 */
c0f3af97 9971 {
6c30d220
L
9972 { Bad_Opcode },
9973 { VEX_W_TABLE (VEX_W_0F3819_P_2) },
c0f3af97
L
9974 },
9975
6c30d220 9976 /* VEX_LEN_0F381A_P_2_M_0 */
c0f3af97 9977 {
6c30d220
L
9978 { Bad_Opcode },
9979 { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
c0f3af97
L
9980 },
9981
6c30d220 9982 /* VEX_LEN_0F3836_P_2 */
c0f3af97 9983 {
6c30d220
L
9984 { Bad_Opcode },
9985 { VEX_W_TABLE (VEX_W_0F3836_P_2) },
c0f3af97
L
9986 },
9987
592a252b 9988 /* VEX_LEN_0F3841_P_2 */
c0f3af97 9989 {
592a252b 9990 { VEX_W_TABLE (VEX_W_0F3841_P_2) },
c0f3af97
L
9991 },
9992
6c30d220
L
9993 /* VEX_LEN_0F385A_P_2_M_0 */
9994 {
9995 { Bad_Opcode },
9996 { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) },
9997 },
9998
592a252b 9999 /* VEX_LEN_0F38DB_P_2 */
a5ff0eb2 10000 {
592a252b 10001 { VEX_W_TABLE (VEX_W_0F38DB_P_2) },
a5ff0eb2
L
10002 },
10003
592a252b 10004 /* VEX_LEN_0F38DC_P_2 */
a5ff0eb2 10005 {
592a252b 10006 { VEX_W_TABLE (VEX_W_0F38DC_P_2) },
a5ff0eb2
L
10007 },
10008
592a252b 10009 /* VEX_LEN_0F38DD_P_2 */
a5ff0eb2 10010 {
592a252b 10011 { VEX_W_TABLE (VEX_W_0F38DD_P_2) },
a5ff0eb2
L
10012 },
10013
592a252b 10014 /* VEX_LEN_0F38DE_P_2 */
a5ff0eb2 10015 {
592a252b 10016 { VEX_W_TABLE (VEX_W_0F38DE_P_2) },
a5ff0eb2
L
10017 },
10018
592a252b 10019 /* VEX_LEN_0F38DF_P_2 */
a5ff0eb2 10020 {
592a252b 10021 { VEX_W_TABLE (VEX_W_0F38DF_P_2) },
a5ff0eb2
L
10022 },
10023
f12dc422
L
10024 /* VEX_LEN_0F38F2_P_0 */
10025 {
bf890a93 10026 { "andnS", { Gdq, VexGdq, Edq }, 0 },
f12dc422
L
10027 },
10028
10029 /* VEX_LEN_0F38F3_R_1_P_0 */
10030 {
bf890a93 10031 { "blsrS", { VexGdq, Edq }, 0 },
f12dc422
L
10032 },
10033
10034 /* VEX_LEN_0F38F3_R_2_P_0 */
10035 {
bf890a93 10036 { "blsmskS", { VexGdq, Edq }, 0 },
f12dc422
L
10037 },
10038
10039 /* VEX_LEN_0F38F3_R_3_P_0 */
10040 {
bf890a93 10041 { "blsiS", { VexGdq, Edq }, 0 },
f12dc422
L
10042 },
10043
6c30d220
L
10044 /* VEX_LEN_0F38F5_P_0 */
10045 {
bf890a93 10046 { "bzhiS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
10047 },
10048
10049 /* VEX_LEN_0F38F5_P_1 */
10050 {
bf890a93 10051 { "pextS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
10052 },
10053
10054 /* VEX_LEN_0F38F5_P_3 */
10055 {
bf890a93 10056 { "pdepS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
10057 },
10058
10059 /* VEX_LEN_0F38F6_P_3 */
10060 {
bf890a93 10061 { "mulxS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
10062 },
10063
f12dc422
L
10064 /* VEX_LEN_0F38F7_P_0 */
10065 {
bf890a93 10066 { "bextrS", { Gdq, Edq, VexGdq }, 0 },
f12dc422
L
10067 },
10068
6c30d220
L
10069 /* VEX_LEN_0F38F7_P_1 */
10070 {
bf890a93 10071 { "sarxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
10072 },
10073
10074 /* VEX_LEN_0F38F7_P_2 */
10075 {
bf890a93 10076 { "shlxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
10077 },
10078
10079 /* VEX_LEN_0F38F7_P_3 */
10080 {
bf890a93 10081 { "shrxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
10082 },
10083
10084 /* VEX_LEN_0F3A00_P_2 */
10085 {
10086 { Bad_Opcode },
10087 { VEX_W_TABLE (VEX_W_0F3A00_P_2) },
10088 },
10089
10090 /* VEX_LEN_0F3A01_P_2 */
10091 {
10092 { Bad_Opcode },
10093 { VEX_W_TABLE (VEX_W_0F3A01_P_2) },
10094 },
10095
592a252b 10096 /* VEX_LEN_0F3A06_P_2 */
c0f3af97 10097 {
592d1631 10098 { Bad_Opcode },
592a252b 10099 { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
c0f3af97
L
10100 },
10101
592a252b 10102 /* VEX_LEN_0F3A0A_P_2 */
c0f3af97 10103 {
592a252b
L
10104 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
10105 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
c0f3af97
L
10106 },
10107
592a252b 10108 /* VEX_LEN_0F3A0B_P_2 */
c0f3af97 10109 {
592a252b
L
10110 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
10111 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
c0f3af97
L
10112 },
10113
592a252b 10114 /* VEX_LEN_0F3A14_P_2 */
c0f3af97 10115 {
592a252b 10116 { VEX_W_TABLE (VEX_W_0F3A14_P_2) },
c0f3af97
L
10117 },
10118
592a252b 10119 /* VEX_LEN_0F3A15_P_2 */
c0f3af97 10120 {
592a252b 10121 { VEX_W_TABLE (VEX_W_0F3A15_P_2) },
c0f3af97
L
10122 },
10123
592a252b 10124 /* VEX_LEN_0F3A16_P_2 */
c0f3af97 10125 {
bf890a93 10126 { "vpextrK", { Edq, XM, Ib }, 0 },
c0f3af97
L
10127 },
10128
592a252b 10129 /* VEX_LEN_0F3A17_P_2 */
c0f3af97 10130 {
bf890a93 10131 { "vextractps", { Edqd, XM, Ib }, 0 },
c0f3af97
L
10132 },
10133
592a252b 10134 /* VEX_LEN_0F3A18_P_2 */
c0f3af97 10135 {
592d1631 10136 { Bad_Opcode },
592a252b 10137 { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
c0f3af97
L
10138 },
10139
592a252b 10140 /* VEX_LEN_0F3A19_P_2 */
c0f3af97 10141 {
592d1631 10142 { Bad_Opcode },
592a252b 10143 { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
c0f3af97
L
10144 },
10145
592a252b 10146 /* VEX_LEN_0F3A20_P_2 */
c0f3af97 10147 {
592a252b 10148 { VEX_W_TABLE (VEX_W_0F3A20_P_2) },
c0f3af97
L
10149 },
10150
592a252b 10151 /* VEX_LEN_0F3A21_P_2 */
c0f3af97 10152 {
592a252b 10153 { VEX_W_TABLE (VEX_W_0F3A21_P_2) },
c0f3af97
L
10154 },
10155
592a252b 10156 /* VEX_LEN_0F3A22_P_2 */
c0f3af97 10157 {
bf890a93 10158 { "vpinsrK", { XM, Vex128, Edq, Ib }, 0 },
c0f3af97
L
10159 },
10160
43234a1e
L
10161 /* VEX_LEN_0F3A30_P_2 */
10162 {
10163 { VEX_W_TABLE (VEX_W_0F3A30_P_2_LEN_0) },
10164 },
10165
1ba585e8
IT
10166 /* VEX_LEN_0F3A31_P_2 */
10167 {
10168 { VEX_W_TABLE (VEX_W_0F3A31_P_2_LEN_0) },
10169 },
10170
43234a1e
L
10171 /* VEX_LEN_0F3A32_P_2 */
10172 {
10173 { VEX_W_TABLE (VEX_W_0F3A32_P_2_LEN_0) },
10174 },
10175
1ba585e8
IT
10176 /* VEX_LEN_0F3A33_P_2 */
10177 {
10178 { VEX_W_TABLE (VEX_W_0F3A33_P_2_LEN_0) },
10179 },
10180
6c30d220 10181 /* VEX_LEN_0F3A38_P_2 */
c0f3af97 10182 {
6c30d220
L
10183 { Bad_Opcode },
10184 { VEX_W_TABLE (VEX_W_0F3A38_P_2) },
c0f3af97
L
10185 },
10186
6c30d220 10187 /* VEX_LEN_0F3A39_P_2 */
c0f3af97 10188 {
6c30d220
L
10189 { Bad_Opcode },
10190 { VEX_W_TABLE (VEX_W_0F3A39_P_2) },
10191 },
10192
10193 /* VEX_LEN_0F3A41_P_2 */
10194 {
10195 { VEX_W_TABLE (VEX_W_0F3A41_P_2) },
c0f3af97
L
10196 },
10197
592a252b 10198 /* VEX_LEN_0F3A44_P_2 */
ce2f5b3c 10199 {
592a252b 10200 { VEX_W_TABLE (VEX_W_0F3A44_P_2) },
ce2f5b3c
L
10201 },
10202
6c30d220 10203 /* VEX_LEN_0F3A46_P_2 */
c0f3af97 10204 {
6c30d220
L
10205 { Bad_Opcode },
10206 { VEX_W_TABLE (VEX_W_0F3A46_P_2) },
c0f3af97
L
10207 },
10208
592a252b 10209 /* VEX_LEN_0F3A60_P_2 */
c0f3af97 10210 {
592a252b 10211 { VEX_W_TABLE (VEX_W_0F3A60_P_2) },
c0f3af97
L
10212 },
10213
592a252b 10214 /* VEX_LEN_0F3A61_P_2 */
c0f3af97 10215 {
592a252b 10216 { VEX_W_TABLE (VEX_W_0F3A61_P_2) },
c0f3af97
L
10217 },
10218
592a252b 10219 /* VEX_LEN_0F3A62_P_2 */
c0f3af97 10220 {
592a252b 10221 { VEX_W_TABLE (VEX_W_0F3A62_P_2) },
c0f3af97
L
10222 },
10223
592a252b 10224 /* VEX_LEN_0F3A63_P_2 */
c0f3af97 10225 {
592a252b 10226 { VEX_W_TABLE (VEX_W_0F3A63_P_2) },
c0f3af97
L
10227 },
10228
592a252b 10229 /* VEX_LEN_0F3A6A_P_2 */
922d8de8 10230 {
bf890a93 10231 { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
922d8de8
DR
10232 },
10233
592a252b 10234 /* VEX_LEN_0F3A6B_P_2 */
922d8de8 10235 {
bf890a93 10236 { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
922d8de8
DR
10237 },
10238
592a252b 10239 /* VEX_LEN_0F3A6E_P_2 */
922d8de8 10240 {
bf890a93 10241 { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
922d8de8
DR
10242 },
10243
592a252b 10244 /* VEX_LEN_0F3A6F_P_2 */
922d8de8 10245 {
bf890a93 10246 { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
922d8de8
DR
10247 },
10248
592a252b 10249 /* VEX_LEN_0F3A7A_P_2 */
922d8de8 10250 {
bf890a93 10251 { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
922d8de8
DR
10252 },
10253
592a252b 10254 /* VEX_LEN_0F3A7B_P_2 */
922d8de8 10255 {
bf890a93 10256 { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
922d8de8
DR
10257 },
10258
592a252b 10259 /* VEX_LEN_0F3A7E_P_2 */
922d8de8 10260 {
bf890a93 10261 { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
922d8de8
DR
10262 },
10263
592a252b 10264 /* VEX_LEN_0F3A7F_P_2 */
922d8de8 10265 {
bf890a93 10266 { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
922d8de8
DR
10267 },
10268
592a252b 10269 /* VEX_LEN_0F3ADF_P_2 */
a5ff0eb2 10270 {
592a252b 10271 { VEX_W_TABLE (VEX_W_0F3ADF_P_2) },
a5ff0eb2 10272 },
4c807e72 10273
6c30d220
L
10274 /* VEX_LEN_0F3AF0_P_3 */
10275 {
bf890a93 10276 { "rorxS", { Gdq, Edq, Ib }, 0 },
6c30d220
L
10277 },
10278
ff688e1f
L
10279 /* VEX_LEN_0FXOP_08_CC */
10280 {
bf890a93 10281 { "vpcomb", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10282 },
10283
10284 /* VEX_LEN_0FXOP_08_CD */
10285 {
bf890a93 10286 { "vpcomw", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10287 },
10288
10289 /* VEX_LEN_0FXOP_08_CE */
10290 {
bf890a93 10291 { "vpcomd", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10292 },
10293
10294 /* VEX_LEN_0FXOP_08_CF */
10295 {
bf890a93 10296 { "vpcomq", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10297 },
10298
10299 /* VEX_LEN_0FXOP_08_EC */
10300 {
bf890a93 10301 { "vpcomub", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10302 },
10303
10304 /* VEX_LEN_0FXOP_08_ED */
10305 {
bf890a93 10306 { "vpcomuw", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10307 },
10308
10309 /* VEX_LEN_0FXOP_08_EE */
10310 {
bf890a93 10311 { "vpcomud", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10312 },
10313
10314 /* VEX_LEN_0FXOP_08_EF */
10315 {
bf890a93 10316 { "vpcomuq", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10317 },
10318
592a252b 10319 /* VEX_LEN_0FXOP_09_80 */
5dd85c99 10320 {
bf890a93
IT
10321 { "vfrczps", { XM, EXxmm }, 0 },
10322 { "vfrczps", { XM, EXymmq }, 0 },
5dd85c99 10323 },
4c807e72 10324
592a252b 10325 /* VEX_LEN_0FXOP_09_81 */
5dd85c99 10326 {
bf890a93
IT
10327 { "vfrczpd", { XM, EXxmm }, 0 },
10328 { "vfrczpd", { XM, EXymmq }, 0 },
5dd85c99 10329 },
331d2d0d
L
10330};
10331
9e30b8e0 10332static const struct dis386 vex_w_table[][2] = {
b844680a 10333 {
592a252b 10334 /* VEX_W_0F10_P_0 */
bf890a93 10335 { "vmovups", { XM, EXx }, 0 },
d8faab4e
L
10336 },
10337 {
592a252b 10338 /* VEX_W_0F10_P_1 */
bf890a93 10339 { "vmovss", { XMVexScalar, VexScalar, EXdScalar }, 0 },
d8faab4e
L
10340 },
10341 {
592a252b 10342 /* VEX_W_0F10_P_2 */
bf890a93 10343 { "vmovupd", { XM, EXx }, 0 },
d8faab4e
L
10344 },
10345 {
592a252b 10346 /* VEX_W_0F10_P_3 */
bf890a93 10347 { "vmovsd", { XMVexScalar, VexScalar, EXqScalar }, 0 },
d8faab4e
L
10348 },
10349 {
592a252b 10350 /* VEX_W_0F11_P_0 */
bf890a93 10351 { "vmovups", { EXxS, XM }, 0 },
d8faab4e
L
10352 },
10353 {
592a252b 10354 /* VEX_W_0F11_P_1 */
bf890a93 10355 { "vmovss", { EXdVexScalarS, VexScalar, XMScalar }, 0 },
b844680a
L
10356 },
10357 {
592a252b 10358 /* VEX_W_0F11_P_2 */
bf890a93 10359 { "vmovupd", { EXxS, XM }, 0 },
b844680a
L
10360 },
10361 {
592a252b 10362 /* VEX_W_0F11_P_3 */
bf890a93 10363 { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar }, 0 },
d8faab4e
L
10364 },
10365 {
592a252b 10366 /* VEX_W_0F12_P_0_M_0 */
bf890a93 10367 { "vmovlps", { XM, Vex128, EXq }, 0 },
b844680a
L
10368 },
10369 {
592a252b 10370 /* VEX_W_0F12_P_0_M_1 */
bf890a93 10371 { "vmovhlps", { XM, Vex128, EXq }, 0 },
b844680a
L
10372 },
10373 {
592a252b 10374 /* VEX_W_0F12_P_1 */
bf890a93 10375 { "vmovsldup", { XM, EXx }, 0 },
b844680a
L
10376 },
10377 {
592a252b 10378 /* VEX_W_0F12_P_2 */
bf890a93 10379 { "vmovlpd", { XM, Vex128, EXq }, 0 },
b844680a
L
10380 },
10381 {
592a252b 10382 /* VEX_W_0F12_P_3 */
bf890a93 10383 { "vmovddup", { XM, EXymmq }, 0 },
b844680a
L
10384 },
10385 {
592a252b 10386 /* VEX_W_0F13_M_0 */
bf890a93 10387 { "vmovlpX", { EXq, XM }, 0 },
b844680a
L
10388 },
10389 {
592a252b 10390 /* VEX_W_0F14 */
bf890a93 10391 { "vunpcklpX", { XM, Vex, EXx }, 0 },
b844680a
L
10392 },
10393 {
592a252b 10394 /* VEX_W_0F15 */
bf890a93 10395 { "vunpckhpX", { XM, Vex, EXx }, 0 },
b844680a
L
10396 },
10397 {
592a252b 10398 /* VEX_W_0F16_P_0_M_0 */
bf890a93 10399 { "vmovhps", { XM, Vex128, EXq }, 0 },
9e30b8e0
L
10400 },
10401 {
592a252b 10402 /* VEX_W_0F16_P_0_M_1 */
bf890a93 10403 { "vmovlhps", { XM, Vex128, EXq }, 0 },
9e30b8e0
L
10404 },
10405 {
592a252b 10406 /* VEX_W_0F16_P_1 */
bf890a93 10407 { "vmovshdup", { XM, EXx }, 0 },
9e30b8e0
L
10408 },
10409 {
592a252b 10410 /* VEX_W_0F16_P_2 */
bf890a93 10411 { "vmovhpd", { XM, Vex128, EXq }, 0 },
9e30b8e0
L
10412 },
10413 {
592a252b 10414 /* VEX_W_0F17_M_0 */
bf890a93 10415 { "vmovhpX", { EXq, XM }, 0 },
9e30b8e0
L
10416 },
10417 {
592a252b 10418 /* VEX_W_0F28 */
bf890a93 10419 { "vmovapX", { XM, EXx }, 0 },
9e30b8e0
L
10420 },
10421 {
592a252b 10422 /* VEX_W_0F29 */
bf890a93 10423 { "vmovapX", { EXxS, XM }, 0 },
9e30b8e0
L
10424 },
10425 {
592a252b 10426 /* VEX_W_0F2B_M_0 */
bf890a93 10427 { "vmovntpX", { Mx, XM }, 0 },
9e30b8e0
L
10428 },
10429 {
592a252b 10430 /* VEX_W_0F2E_P_0 */
bf890a93 10431 { "vucomiss", { XMScalar, EXdScalar }, 0 },
9e30b8e0
L
10432 },
10433 {
592a252b 10434 /* VEX_W_0F2E_P_2 */
bf890a93 10435 { "vucomisd", { XMScalar, EXqScalar }, 0 },
9e30b8e0
L
10436 },
10437 {
592a252b 10438 /* VEX_W_0F2F_P_0 */
bf890a93 10439 { "vcomiss", { XMScalar, EXdScalar }, 0 },
9e30b8e0
L
10440 },
10441 {
592a252b 10442 /* VEX_W_0F2F_P_2 */
bf890a93 10443 { "vcomisd", { XMScalar, EXqScalar }, 0 },
9e30b8e0 10444 },
43234a1e
L
10445 {
10446 /* VEX_W_0F41_P_0_LEN_1 */
bf890a93
IT
10447 { "kandw", { MaskG, MaskVex, MaskR }, 0 },
10448 { "kandq", { MaskG, MaskVex, MaskR }, 0 },
1ba585e8
IT
10449 },
10450 {
10451 /* VEX_W_0F41_P_2_LEN_1 */
bf890a93
IT
10452 { "kandb", { MaskG, MaskVex, MaskR }, 0 },
10453 { "kandd", { MaskG, MaskVex, MaskR }, 0 },
43234a1e
L
10454 },
10455 {
10456 /* VEX_W_0F42_P_0_LEN_1 */
bf890a93
IT
10457 { "kandnw", { MaskG, MaskVex, MaskR }, 0 },
10458 { "kandnq", { MaskG, MaskVex, MaskR }, 0 },
1ba585e8
IT
10459 },
10460 {
10461 /* VEX_W_0F42_P_2_LEN_1 */
bf890a93
IT
10462 { "kandnb", { MaskG, MaskVex, MaskR }, 0 },
10463 { "kandnd", { MaskG, MaskVex, MaskR }, 0 },
43234a1e
L
10464 },
10465 {
10466 /* VEX_W_0F44_P_0_LEN_0 */
bf890a93
IT
10467 { "knotw", { MaskG, MaskR }, 0 },
10468 { "knotq", { MaskG, MaskR }, 0 },
1ba585e8
IT
10469 },
10470 {
10471 /* VEX_W_0F44_P_2_LEN_0 */
bf890a93
IT
10472 { "knotb", { MaskG, MaskR }, 0 },
10473 { "knotd", { MaskG, MaskR }, 0 },
43234a1e
L
10474 },
10475 {
10476 /* VEX_W_0F45_P_0_LEN_1 */
bf890a93
IT
10477 { "korw", { MaskG, MaskVex, MaskR }, 0 },
10478 { "korq", { MaskG, MaskVex, MaskR }, 0 },
1ba585e8
IT
10479 },
10480 {
10481 /* VEX_W_0F45_P_2_LEN_1 */
bf890a93
IT
10482 { "korb", { MaskG, MaskVex, MaskR }, 0 },
10483 { "kord", { MaskG, MaskVex, MaskR }, 0 },
43234a1e
L
10484 },
10485 {
10486 /* VEX_W_0F46_P_0_LEN_1 */
bf890a93
IT
10487 { "kxnorw", { MaskG, MaskVex, MaskR }, 0 },
10488 { "kxnorq", { MaskG, MaskVex, MaskR }, 0 },
1ba585e8
IT
10489 },
10490 {
10491 /* VEX_W_0F46_P_2_LEN_1 */
bf890a93
IT
10492 { "kxnorb", { MaskG, MaskVex, MaskR }, 0 },
10493 { "kxnord", { MaskG, MaskVex, MaskR }, 0 },
43234a1e
L
10494 },
10495 {
10496 /* VEX_W_0F47_P_0_LEN_1 */
bf890a93
IT
10497 { "kxorw", { MaskG, MaskVex, MaskR }, 0 },
10498 { "kxorq", { MaskG, MaskVex, MaskR }, 0 },
1ba585e8
IT
10499 },
10500 {
10501 /* VEX_W_0F47_P_2_LEN_1 */
bf890a93
IT
10502 { "kxorb", { MaskG, MaskVex, MaskR }, 0 },
10503 { "kxord", { MaskG, MaskVex, MaskR }, 0 },
1ba585e8
IT
10504 },
10505 {
10506 /* VEX_W_0F4A_P_0_LEN_1 */
bf890a93
IT
10507 { "kaddw", { MaskG, MaskVex, MaskR }, 0 },
10508 { "kaddq", { MaskG, MaskVex, MaskR }, 0 },
1ba585e8
IT
10509 },
10510 {
10511 /* VEX_W_0F4A_P_2_LEN_1 */
bf890a93
IT
10512 { "kaddb", { MaskG, MaskVex, MaskR }, 0 },
10513 { "kaddd", { MaskG, MaskVex, MaskR }, 0 },
1ba585e8
IT
10514 },
10515 {
10516 /* VEX_W_0F4B_P_0_LEN_1 */
bf890a93
IT
10517 { "kunpckwd", { MaskG, MaskVex, MaskR }, 0 },
10518 { "kunpckdq", { MaskG, MaskVex, MaskR }, 0 },
43234a1e
L
10519 },
10520 {
10521 /* VEX_W_0F4B_P_2_LEN_1 */
bf890a93 10522 { "kunpckbw", { MaskG, MaskVex, MaskR }, 0 },
43234a1e 10523 },
9e30b8e0 10524 {
592a252b 10525 /* VEX_W_0F50_M_0 */
bf890a93 10526 { "vmovmskpX", { Gdq, XS }, 0 },
9e30b8e0
L
10527 },
10528 {
592a252b 10529 /* VEX_W_0F51_P_0 */
bf890a93 10530 { "vsqrtps", { XM, EXx }, 0 },
9e30b8e0
L
10531 },
10532 {
592a252b 10533 /* VEX_W_0F51_P_1 */
bf890a93 10534 { "vsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10535 },
10536 {
592a252b 10537 /* VEX_W_0F51_P_2 */
bf890a93 10538 { "vsqrtpd", { XM, EXx }, 0 },
9e30b8e0
L
10539 },
10540 {
592a252b 10541 /* VEX_W_0F51_P_3 */
bf890a93 10542 { "vsqrtsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10543 },
10544 {
592a252b 10545 /* VEX_W_0F52_P_0 */
bf890a93 10546 { "vrsqrtps", { XM, EXx }, 0 },
9e30b8e0
L
10547 },
10548 {
592a252b 10549 /* VEX_W_0F52_P_1 */
bf890a93 10550 { "vrsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10551 },
10552 {
592a252b 10553 /* VEX_W_0F53_P_0 */
bf890a93 10554 { "vrcpps", { XM, EXx }, 0 },
9e30b8e0
L
10555 },
10556 {
592a252b 10557 /* VEX_W_0F53_P_1 */
bf890a93 10558 { "vrcpss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10559 },
10560 {
592a252b 10561 /* VEX_W_0F58_P_0 */
bf890a93 10562 { "vaddps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10563 },
10564 {
592a252b 10565 /* VEX_W_0F58_P_1 */
bf890a93 10566 { "vaddss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10567 },
10568 {
592a252b 10569 /* VEX_W_0F58_P_2 */
bf890a93 10570 { "vaddpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10571 },
10572 {
592a252b 10573 /* VEX_W_0F58_P_3 */
bf890a93 10574 { "vaddsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10575 },
10576 {
592a252b 10577 /* VEX_W_0F59_P_0 */
bf890a93 10578 { "vmulps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10579 },
10580 {
592a252b 10581 /* VEX_W_0F59_P_1 */
bf890a93 10582 { "vmulss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10583 },
10584 {
592a252b 10585 /* VEX_W_0F59_P_2 */
bf890a93 10586 { "vmulpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10587 },
10588 {
592a252b 10589 /* VEX_W_0F59_P_3 */
bf890a93 10590 { "vmulsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10591 },
10592 {
592a252b 10593 /* VEX_W_0F5A_P_0 */
bf890a93 10594 { "vcvtps2pd", { XM, EXxmmq }, 0 },
9e30b8e0
L
10595 },
10596 {
592a252b 10597 /* VEX_W_0F5A_P_1 */
bf890a93 10598 { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10599 },
10600 {
592a252b 10601 /* VEX_W_0F5A_P_3 */
bf890a93 10602 { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10603 },
10604 {
592a252b 10605 /* VEX_W_0F5B_P_0 */
bf890a93 10606 { "vcvtdq2ps", { XM, EXx }, 0 },
9e30b8e0
L
10607 },
10608 {
592a252b 10609 /* VEX_W_0F5B_P_1 */
bf890a93 10610 { "vcvttps2dq", { XM, EXx }, 0 },
9e30b8e0
L
10611 },
10612 {
592a252b 10613 /* VEX_W_0F5B_P_2 */
bf890a93 10614 { "vcvtps2dq", { XM, EXx }, 0 },
9e30b8e0
L
10615 },
10616 {
592a252b 10617 /* VEX_W_0F5C_P_0 */
bf890a93 10618 { "vsubps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10619 },
10620 {
592a252b 10621 /* VEX_W_0F5C_P_1 */
bf890a93 10622 { "vsubss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10623 },
10624 {
592a252b 10625 /* VEX_W_0F5C_P_2 */
bf890a93 10626 { "vsubpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10627 },
10628 {
592a252b 10629 /* VEX_W_0F5C_P_3 */
bf890a93 10630 { "vsubsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10631 },
10632 {
592a252b 10633 /* VEX_W_0F5D_P_0 */
bf890a93 10634 { "vminps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10635 },
10636 {
592a252b 10637 /* VEX_W_0F5D_P_1 */
bf890a93 10638 { "vminss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10639 },
10640 {
592a252b 10641 /* VEX_W_0F5D_P_2 */
bf890a93 10642 { "vminpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10643 },
10644 {
592a252b 10645 /* VEX_W_0F5D_P_3 */
bf890a93 10646 { "vminsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10647 },
10648 {
592a252b 10649 /* VEX_W_0F5E_P_0 */
bf890a93 10650 { "vdivps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10651 },
10652 {
592a252b 10653 /* VEX_W_0F5E_P_1 */
bf890a93 10654 { "vdivss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10655 },
10656 {
592a252b 10657 /* VEX_W_0F5E_P_2 */
bf890a93 10658 { "vdivpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10659 },
10660 {
592a252b 10661 /* VEX_W_0F5E_P_3 */
bf890a93 10662 { "vdivsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10663 },
10664 {
592a252b 10665 /* VEX_W_0F5F_P_0 */
bf890a93 10666 { "vmaxps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10667 },
10668 {
592a252b 10669 /* VEX_W_0F5F_P_1 */
bf890a93 10670 { "vmaxss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10671 },
10672 {
592a252b 10673 /* VEX_W_0F5F_P_2 */
bf890a93 10674 { "vmaxpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10675 },
10676 {
592a252b 10677 /* VEX_W_0F5F_P_3 */
bf890a93 10678 { "vmaxsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10679 },
10680 {
592a252b 10681 /* VEX_W_0F60_P_2 */
bf890a93 10682 { "vpunpcklbw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10683 },
10684 {
592a252b 10685 /* VEX_W_0F61_P_2 */
bf890a93 10686 { "vpunpcklwd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10687 },
10688 {
592a252b 10689 /* VEX_W_0F62_P_2 */
bf890a93 10690 { "vpunpckldq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10691 },
10692 {
592a252b 10693 /* VEX_W_0F63_P_2 */
bf890a93 10694 { "vpacksswb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10695 },
10696 {
592a252b 10697 /* VEX_W_0F64_P_2 */
bf890a93 10698 { "vpcmpgtb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10699 },
10700 {
592a252b 10701 /* VEX_W_0F65_P_2 */
bf890a93 10702 { "vpcmpgtw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10703 },
10704 {
592a252b 10705 /* VEX_W_0F66_P_2 */
bf890a93 10706 { "vpcmpgtd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10707 },
10708 {
592a252b 10709 /* VEX_W_0F67_P_2 */
bf890a93 10710 { "vpackuswb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10711 },
10712 {
592a252b 10713 /* VEX_W_0F68_P_2 */
bf890a93 10714 { "vpunpckhbw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10715 },
10716 {
592a252b 10717 /* VEX_W_0F69_P_2 */
bf890a93 10718 { "vpunpckhwd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10719 },
10720 {
592a252b 10721 /* VEX_W_0F6A_P_2 */
bf890a93 10722 { "vpunpckhdq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10723 },
10724 {
592a252b 10725 /* VEX_W_0F6B_P_2 */
bf890a93 10726 { "vpackssdw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10727 },
10728 {
592a252b 10729 /* VEX_W_0F6C_P_2 */
bf890a93 10730 { "vpunpcklqdq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10731 },
10732 {
592a252b 10733 /* VEX_W_0F6D_P_2 */
bf890a93 10734 { "vpunpckhqdq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10735 },
10736 {
592a252b 10737 /* VEX_W_0F6F_P_1 */
bf890a93 10738 { "vmovdqu", { XM, EXx }, 0 },
9e30b8e0
L
10739 },
10740 {
592a252b 10741 /* VEX_W_0F6F_P_2 */
bf890a93 10742 { "vmovdqa", { XM, EXx }, 0 },
9e30b8e0
L
10743 },
10744 {
592a252b 10745 /* VEX_W_0F70_P_1 */
bf890a93 10746 { "vpshufhw", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10747 },
10748 {
592a252b 10749 /* VEX_W_0F70_P_2 */
bf890a93 10750 { "vpshufd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10751 },
10752 {
592a252b 10753 /* VEX_W_0F70_P_3 */
bf890a93 10754 { "vpshuflw", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10755 },
10756 {
592a252b 10757 /* VEX_W_0F71_R_2_P_2 */
bf890a93 10758 { "vpsrlw", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10759 },
10760 {
592a252b 10761 /* VEX_W_0F71_R_4_P_2 */
bf890a93 10762 { "vpsraw", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10763 },
10764 {
592a252b 10765 /* VEX_W_0F71_R_6_P_2 */
bf890a93 10766 { "vpsllw", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10767 },
10768 {
592a252b 10769 /* VEX_W_0F72_R_2_P_2 */
bf890a93 10770 { "vpsrld", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10771 },
10772 {
592a252b 10773 /* VEX_W_0F72_R_4_P_2 */
bf890a93 10774 { "vpsrad", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10775 },
10776 {
592a252b 10777 /* VEX_W_0F72_R_6_P_2 */
bf890a93 10778 { "vpslld", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10779 },
10780 {
592a252b 10781 /* VEX_W_0F73_R_2_P_2 */
bf890a93 10782 { "vpsrlq", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10783 },
10784 {
592a252b 10785 /* VEX_W_0F73_R_3_P_2 */
bf890a93 10786 { "vpsrldq", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10787 },
10788 {
592a252b 10789 /* VEX_W_0F73_R_6_P_2 */
bf890a93 10790 { "vpsllq", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10791 },
10792 {
592a252b 10793 /* VEX_W_0F73_R_7_P_2 */
bf890a93 10794 { "vpslldq", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10795 },
10796 {
592a252b 10797 /* VEX_W_0F74_P_2 */
bf890a93 10798 { "vpcmpeqb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10799 },
10800 {
592a252b 10801 /* VEX_W_0F75_P_2 */
bf890a93 10802 { "vpcmpeqw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10803 },
10804 {
592a252b 10805 /* VEX_W_0F76_P_2 */
bf890a93 10806 { "vpcmpeqd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10807 },
10808 {
592a252b 10809 /* VEX_W_0F77_P_0 */
bf890a93 10810 { "", { VZERO }, 0 },
9e30b8e0
L
10811 },
10812 {
592a252b 10813 /* VEX_W_0F7C_P_2 */
bf890a93 10814 { "vhaddpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10815 },
10816 {
592a252b 10817 /* VEX_W_0F7C_P_3 */
bf890a93 10818 { "vhaddps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10819 },
10820 {
592a252b 10821 /* VEX_W_0F7D_P_2 */
bf890a93 10822 { "vhsubpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10823 },
10824 {
592a252b 10825 /* VEX_W_0F7D_P_3 */
bf890a93 10826 { "vhsubps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10827 },
10828 {
592a252b 10829 /* VEX_W_0F7E_P_1 */
bf890a93 10830 { "vmovq", { XMScalar, EXqScalar }, 0 },
9e30b8e0
L
10831 },
10832 {
592a252b 10833 /* VEX_W_0F7F_P_1 */
bf890a93 10834 { "vmovdqu", { EXxS, XM }, 0 },
9e30b8e0
L
10835 },
10836 {
592a252b 10837 /* VEX_W_0F7F_P_2 */
bf890a93 10838 { "vmovdqa", { EXxS, XM }, 0 },
9e30b8e0 10839 },
43234a1e
L
10840 {
10841 /* VEX_W_0F90_P_0_LEN_0 */
bf890a93
IT
10842 { "kmovw", { MaskG, MaskE }, 0 },
10843 { "kmovq", { MaskG, MaskE }, 0 },
1ba585e8
IT
10844 },
10845 {
10846 /* VEX_W_0F90_P_2_LEN_0 */
bf890a93
IT
10847 { "kmovb", { MaskG, MaskBDE }, 0 },
10848 { "kmovd", { MaskG, MaskBDE }, 0 },
43234a1e
L
10849 },
10850 {
10851 /* VEX_W_0F91_P_0_LEN_0 */
bf890a93
IT
10852 { "kmovw", { Ew, MaskG }, 0 },
10853 { "kmovq", { Eq, MaskG }, 0 },
1ba585e8
IT
10854 },
10855 {
10856 /* VEX_W_0F91_P_2_LEN_0 */
bf890a93
IT
10857 { "kmovb", { Eb, MaskG }, 0 },
10858 { "kmovd", { Ed, MaskG }, 0 },
43234a1e
L
10859 },
10860 {
10861 /* VEX_W_0F92_P_0_LEN_0 */
bf890a93 10862 { "kmovw", { MaskG, Rdq }, 0 },
43234a1e 10863 },
90a915bf
IT
10864 {
10865 /* VEX_W_0F92_P_2_LEN_0 */
bf890a93 10866 { "kmovb", { MaskG, Rdq }, 0 },
90a915bf 10867 },
1ba585e8
IT
10868 {
10869 /* VEX_W_0F92_P_3_LEN_0 */
bf890a93
IT
10870 { "kmovd", { MaskG, Rdq }, 0 },
10871 { "kmovq", { MaskG, Rdq }, 0 },
1ba585e8 10872 },
43234a1e
L
10873 {
10874 /* VEX_W_0F93_P_0_LEN_0 */
bf890a93 10875 { "kmovw", { Gdq, MaskR }, 0 },
43234a1e 10876 },
90a915bf
IT
10877 {
10878 /* VEX_W_0F93_P_2_LEN_0 */
bf890a93 10879 { "kmovb", { Gdq, MaskR }, 0 },
90a915bf 10880 },
1ba585e8
IT
10881 {
10882 /* VEX_W_0F93_P_3_LEN_0 */
bf890a93
IT
10883 { "kmovd", { Gdq, MaskR }, 0 },
10884 { "kmovq", { Gdq, MaskR }, 0 },
1ba585e8 10885 },
43234a1e
L
10886 {
10887 /* VEX_W_0F98_P_0_LEN_0 */
bf890a93
IT
10888 { "kortestw", { MaskG, MaskR }, 0 },
10889 { "kortestq", { MaskG, MaskR }, 0 },
1ba585e8
IT
10890 },
10891 {
10892 /* VEX_W_0F98_P_2_LEN_0 */
bf890a93
IT
10893 { "kortestb", { MaskG, MaskR }, 0 },
10894 { "kortestd", { MaskG, MaskR }, 0 },
1ba585e8
IT
10895 },
10896 {
10897 /* VEX_W_0F99_P_0_LEN_0 */
bf890a93
IT
10898 { "ktestw", { MaskG, MaskR }, 0 },
10899 { "ktestq", { MaskG, MaskR }, 0 },
1ba585e8
IT
10900 },
10901 {
10902 /* VEX_W_0F99_P_2_LEN_0 */
bf890a93
IT
10903 { "ktestb", { MaskG, MaskR }, 0 },
10904 { "ktestd", { MaskG, MaskR }, 0 },
43234a1e 10905 },
9e30b8e0 10906 {
592a252b 10907 /* VEX_W_0FAE_R_2_M_0 */
bf890a93 10908 { "vldmxcsr", { Md }, 0 },
9e30b8e0
L
10909 },
10910 {
592a252b 10911 /* VEX_W_0FAE_R_3_M_0 */
bf890a93 10912 { "vstmxcsr", { Md }, 0 },
9e30b8e0
L
10913 },
10914 {
592a252b 10915 /* VEX_W_0FC2_P_0 */
bf890a93 10916 { "vcmpps", { XM, Vex, EXx, VCMP }, 0 },
9e30b8e0
L
10917 },
10918 {
592a252b 10919 /* VEX_W_0FC2_P_1 */
bf890a93 10920 { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP }, 0 },
9e30b8e0
L
10921 },
10922 {
592a252b 10923 /* VEX_W_0FC2_P_2 */
bf890a93 10924 { "vcmppd", { XM, Vex, EXx, VCMP }, 0 },
9e30b8e0
L
10925 },
10926 {
592a252b 10927 /* VEX_W_0FC2_P_3 */
bf890a93 10928 { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP }, 0 },
9e30b8e0
L
10929 },
10930 {
592a252b 10931 /* VEX_W_0FC4_P_2 */
bf890a93 10932 { "vpinsrw", { XM, Vex128, Edqw, Ib }, 0 },
9e30b8e0
L
10933 },
10934 {
592a252b 10935 /* VEX_W_0FC5_P_2 */
bf890a93 10936 { "vpextrw", { Gdq, XS, Ib }, 0 },
9e30b8e0
L
10937 },
10938 {
592a252b 10939 /* VEX_W_0FD0_P_2 */
bf890a93 10940 { "vaddsubpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10941 },
10942 {
592a252b 10943 /* VEX_W_0FD0_P_3 */
bf890a93 10944 { "vaddsubps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10945 },
10946 {
592a252b 10947 /* VEX_W_0FD1_P_2 */
bf890a93 10948 { "vpsrlw", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
10949 },
10950 {
592a252b 10951 /* VEX_W_0FD2_P_2 */
bf890a93 10952 { "vpsrld", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
10953 },
10954 {
592a252b 10955 /* VEX_W_0FD3_P_2 */
bf890a93 10956 { "vpsrlq", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
10957 },
10958 {
592a252b 10959 /* VEX_W_0FD4_P_2 */
bf890a93 10960 { "vpaddq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10961 },
10962 {
592a252b 10963 /* VEX_W_0FD5_P_2 */
bf890a93 10964 { "vpmullw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10965 },
10966 {
592a252b 10967 /* VEX_W_0FD6_P_2 */
bf890a93 10968 { "vmovq", { EXqScalarS, XMScalar }, 0 },
9e30b8e0
L
10969 },
10970 {
592a252b 10971 /* VEX_W_0FD7_P_2_M_1 */
bf890a93 10972 { "vpmovmskb", { Gdq, XS }, 0 },
9e30b8e0
L
10973 },
10974 {
592a252b 10975 /* VEX_W_0FD8_P_2 */
bf890a93 10976 { "vpsubusb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10977 },
10978 {
592a252b 10979 /* VEX_W_0FD9_P_2 */
bf890a93 10980 { "vpsubusw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10981 },
10982 {
592a252b 10983 /* VEX_W_0FDA_P_2 */
bf890a93 10984 { "vpminub", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10985 },
10986 {
592a252b 10987 /* VEX_W_0FDB_P_2 */
bf890a93 10988 { "vpand", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10989 },
10990 {
592a252b 10991 /* VEX_W_0FDC_P_2 */
bf890a93 10992 { "vpaddusb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10993 },
10994 {
592a252b 10995 /* VEX_W_0FDD_P_2 */
bf890a93 10996 { "vpaddusw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10997 },
10998 {
592a252b 10999 /* VEX_W_0FDE_P_2 */
bf890a93 11000 { "vpmaxub", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11001 },
11002 {
592a252b 11003 /* VEX_W_0FDF_P_2 */
bf890a93 11004 { "vpandn", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11005 },
11006 {
592a252b 11007 /* VEX_W_0FE0_P_2 */
bf890a93 11008 { "vpavgb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11009 },
11010 {
592a252b 11011 /* VEX_W_0FE1_P_2 */
bf890a93 11012 { "vpsraw", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
11013 },
11014 {
592a252b 11015 /* VEX_W_0FE2_P_2 */
bf890a93 11016 { "vpsrad", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
11017 },
11018 {
592a252b 11019 /* VEX_W_0FE3_P_2 */
bf890a93 11020 { "vpavgw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11021 },
11022 {
592a252b 11023 /* VEX_W_0FE4_P_2 */
bf890a93 11024 { "vpmulhuw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11025 },
11026 {
592a252b 11027 /* VEX_W_0FE5_P_2 */
bf890a93 11028 { "vpmulhw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11029 },
11030 {
592a252b 11031 /* VEX_W_0FE6_P_1 */
bf890a93 11032 { "vcvtdq2pd", { XM, EXxmmq }, 0 },
9e30b8e0
L
11033 },
11034 {
592a252b 11035 /* VEX_W_0FE6_P_2 */
bf890a93 11036 { "vcvttpd2dq%XY", { XMM, EXx }, 0 },
9e30b8e0
L
11037 },
11038 {
592a252b 11039 /* VEX_W_0FE6_P_3 */
bf890a93 11040 { "vcvtpd2dq%XY", { XMM, EXx }, 0 },
9e30b8e0
L
11041 },
11042 {
592a252b 11043 /* VEX_W_0FE7_P_2_M_0 */
bf890a93 11044 { "vmovntdq", { Mx, XM }, 0 },
9e30b8e0
L
11045 },
11046 {
592a252b 11047 /* VEX_W_0FE8_P_2 */
bf890a93 11048 { "vpsubsb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11049 },
11050 {
592a252b 11051 /* VEX_W_0FE9_P_2 */
bf890a93 11052 { "vpsubsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11053 },
11054 {
592a252b 11055 /* VEX_W_0FEA_P_2 */
bf890a93 11056 { "vpminsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11057 },
11058 {
592a252b 11059 /* VEX_W_0FEB_P_2 */
bf890a93 11060 { "vpor", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11061 },
11062 {
592a252b 11063 /* VEX_W_0FEC_P_2 */
bf890a93 11064 { "vpaddsb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11065 },
11066 {
592a252b 11067 /* VEX_W_0FED_P_2 */
bf890a93 11068 { "vpaddsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11069 },
11070 {
592a252b 11071 /* VEX_W_0FEE_P_2 */
bf890a93 11072 { "vpmaxsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11073 },
11074 {
592a252b 11075 /* VEX_W_0FEF_P_2 */
bf890a93 11076 { "vpxor", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11077 },
11078 {
592a252b 11079 /* VEX_W_0FF0_P_3_M_0 */
bf890a93 11080 { "vlddqu", { XM, M }, 0 },
9e30b8e0
L
11081 },
11082 {
592a252b 11083 /* VEX_W_0FF1_P_2 */
bf890a93 11084 { "vpsllw", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
11085 },
11086 {
592a252b 11087 /* VEX_W_0FF2_P_2 */
bf890a93 11088 { "vpslld", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
11089 },
11090 {
592a252b 11091 /* VEX_W_0FF3_P_2 */
bf890a93 11092 { "vpsllq", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
11093 },
11094 {
592a252b 11095 /* VEX_W_0FF4_P_2 */
bf890a93 11096 { "vpmuludq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11097 },
11098 {
592a252b 11099 /* VEX_W_0FF5_P_2 */
bf890a93 11100 { "vpmaddwd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11101 },
11102 {
592a252b 11103 /* VEX_W_0FF6_P_2 */
bf890a93 11104 { "vpsadbw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11105 },
11106 {
592a252b 11107 /* VEX_W_0FF7_P_2 */
bf890a93 11108 { "vmaskmovdqu", { XM, XS }, 0 },
9e30b8e0
L
11109 },
11110 {
592a252b 11111 /* VEX_W_0FF8_P_2 */
bf890a93 11112 { "vpsubb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11113 },
11114 {
592a252b 11115 /* VEX_W_0FF9_P_2 */
bf890a93 11116 { "vpsubw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11117 },
11118 {
592a252b 11119 /* VEX_W_0FFA_P_2 */
bf890a93 11120 { "vpsubd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11121 },
11122 {
592a252b 11123 /* VEX_W_0FFB_P_2 */
bf890a93 11124 { "vpsubq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11125 },
11126 {
592a252b 11127 /* VEX_W_0FFC_P_2 */
bf890a93 11128 { "vpaddb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11129 },
11130 {
592a252b 11131 /* VEX_W_0FFD_P_2 */
bf890a93 11132 { "vpaddw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11133 },
11134 {
592a252b 11135 /* VEX_W_0FFE_P_2 */
bf890a93 11136 { "vpaddd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11137 },
11138 {
592a252b 11139 /* VEX_W_0F3800_P_2 */
bf890a93 11140 { "vpshufb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11141 },
11142 {
592a252b 11143 /* VEX_W_0F3801_P_2 */
bf890a93 11144 { "vphaddw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11145 },
11146 {
592a252b 11147 /* VEX_W_0F3802_P_2 */
bf890a93 11148 { "vphaddd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11149 },
11150 {
592a252b 11151 /* VEX_W_0F3803_P_2 */
bf890a93 11152 { "vphaddsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11153 },
11154 {
592a252b 11155 /* VEX_W_0F3804_P_2 */
bf890a93 11156 { "vpmaddubsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11157 },
11158 {
592a252b 11159 /* VEX_W_0F3805_P_2 */
bf890a93 11160 { "vphsubw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11161 },
11162 {
592a252b 11163 /* VEX_W_0F3806_P_2 */
bf890a93 11164 { "vphsubd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11165 },
11166 {
592a252b 11167 /* VEX_W_0F3807_P_2 */
bf890a93 11168 { "vphsubsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11169 },
11170 {
592a252b 11171 /* VEX_W_0F3808_P_2 */
bf890a93 11172 { "vpsignb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11173 },
11174 {
592a252b 11175 /* VEX_W_0F3809_P_2 */
bf890a93 11176 { "vpsignw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11177 },
11178 {
592a252b 11179 /* VEX_W_0F380A_P_2 */
bf890a93 11180 { "vpsignd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11181 },
11182 {
592a252b 11183 /* VEX_W_0F380B_P_2 */
bf890a93 11184 { "vpmulhrsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11185 },
11186 {
592a252b 11187 /* VEX_W_0F380C_P_2 */
bf890a93 11188 { "vpermilps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11189 },
11190 {
592a252b 11191 /* VEX_W_0F380D_P_2 */
bf890a93 11192 { "vpermilpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11193 },
11194 {
592a252b 11195 /* VEX_W_0F380E_P_2 */
bf890a93 11196 { "vtestps", { XM, EXx }, 0 },
9e30b8e0
L
11197 },
11198 {
592a252b 11199 /* VEX_W_0F380F_P_2 */
bf890a93 11200 { "vtestpd", { XM, EXx }, 0 },
9e30b8e0 11201 },
6c30d220
L
11202 {
11203 /* VEX_W_0F3816_P_2 */
bf890a93 11204 { "vpermps", { XM, Vex, EXx }, 0 },
6c30d220 11205 },
9e30b8e0 11206 {
592a252b 11207 /* VEX_W_0F3817_P_2 */
bf890a93 11208 { "vptest", { XM, EXx }, 0 },
9e30b8e0 11209 },
bcf2684f 11210 {
6c30d220 11211 /* VEX_W_0F3818_P_2 */
bf890a93 11212 { "vbroadcastss", { XM, EXxmm_md }, 0 },
bcf2684f 11213 },
9e30b8e0 11214 {
6c30d220 11215 /* VEX_W_0F3819_P_2 */
bf890a93 11216 { "vbroadcastsd", { XM, EXxmm_mq }, 0 },
9e30b8e0
L
11217 },
11218 {
592a252b 11219 /* VEX_W_0F381A_P_2_M_0 */
bf890a93 11220 { "vbroadcastf128", { XM, Mxmm }, 0 },
9e30b8e0
L
11221 },
11222 {
592a252b 11223 /* VEX_W_0F381C_P_2 */
bf890a93 11224 { "vpabsb", { XM, EXx }, 0 },
9e30b8e0
L
11225 },
11226 {
592a252b 11227 /* VEX_W_0F381D_P_2 */
bf890a93 11228 { "vpabsw", { XM, EXx }, 0 },
9e30b8e0
L
11229 },
11230 {
592a252b 11231 /* VEX_W_0F381E_P_2 */
bf890a93 11232 { "vpabsd", { XM, EXx }, 0 },
9e30b8e0
L
11233 },
11234 {
592a252b 11235 /* VEX_W_0F3820_P_2 */
bf890a93 11236 { "vpmovsxbw", { XM, EXxmmq }, 0 },
9e30b8e0
L
11237 },
11238 {
592a252b 11239 /* VEX_W_0F3821_P_2 */
bf890a93 11240 { "vpmovsxbd", { XM, EXxmmqd }, 0 },
9e30b8e0
L
11241 },
11242 {
592a252b 11243 /* VEX_W_0F3822_P_2 */
bf890a93 11244 { "vpmovsxbq", { XM, EXxmmdw }, 0 },
9e30b8e0
L
11245 },
11246 {
592a252b 11247 /* VEX_W_0F3823_P_2 */
bf890a93 11248 { "vpmovsxwd", { XM, EXxmmq }, 0 },
9e30b8e0
L
11249 },
11250 {
592a252b 11251 /* VEX_W_0F3824_P_2 */
bf890a93 11252 { "vpmovsxwq", { XM, EXxmmqd }, 0 },
9e30b8e0
L
11253 },
11254 {
592a252b 11255 /* VEX_W_0F3825_P_2 */
bf890a93 11256 { "vpmovsxdq", { XM, EXxmmq }, 0 },
9e30b8e0
L
11257 },
11258 {
592a252b 11259 /* VEX_W_0F3828_P_2 */
bf890a93 11260 { "vpmuldq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11261 },
11262 {
592a252b 11263 /* VEX_W_0F3829_P_2 */
bf890a93 11264 { "vpcmpeqq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11265 },
11266 {
592a252b 11267 /* VEX_W_0F382A_P_2_M_0 */
bf890a93 11268 { "vmovntdqa", { XM, Mx }, 0 },
9e30b8e0
L
11269 },
11270 {
592a252b 11271 /* VEX_W_0F382B_P_2 */
bf890a93 11272 { "vpackusdw", { XM, Vex, EXx }, 0 },
9e30b8e0 11273 },
53aa04a0 11274 {
592a252b 11275 /* VEX_W_0F382C_P_2_M_0 */
bf890a93 11276 { "vmaskmovps", { XM, Vex, Mx }, 0 },
53aa04a0
L
11277 },
11278 {
592a252b 11279 /* VEX_W_0F382D_P_2_M_0 */
bf890a93 11280 { "vmaskmovpd", { XM, Vex, Mx }, 0 },
53aa04a0
L
11281 },
11282 {
592a252b 11283 /* VEX_W_0F382E_P_2_M_0 */
bf890a93 11284 { "vmaskmovps", { Mx, Vex, XM }, 0 },
53aa04a0
L
11285 },
11286 {
592a252b 11287 /* VEX_W_0F382F_P_2_M_0 */
bf890a93 11288 { "vmaskmovpd", { Mx, Vex, XM }, 0 },
53aa04a0 11289 },
9e30b8e0 11290 {
592a252b 11291 /* VEX_W_0F3830_P_2 */
bf890a93 11292 { "vpmovzxbw", { XM, EXxmmq }, 0 },
9e30b8e0
L
11293 },
11294 {
592a252b 11295 /* VEX_W_0F3831_P_2 */
bf890a93 11296 { "vpmovzxbd", { XM, EXxmmqd }, 0 },
9e30b8e0
L
11297 },
11298 {
592a252b 11299 /* VEX_W_0F3832_P_2 */
bf890a93 11300 { "vpmovzxbq", { XM, EXxmmdw }, 0 },
9e30b8e0
L
11301 },
11302 {
592a252b 11303 /* VEX_W_0F3833_P_2 */
bf890a93 11304 { "vpmovzxwd", { XM, EXxmmq }, 0 },
9e30b8e0
L
11305 },
11306 {
592a252b 11307 /* VEX_W_0F3834_P_2 */
bf890a93 11308 { "vpmovzxwq", { XM, EXxmmqd }, 0 },
9e30b8e0
L
11309 },
11310 {
592a252b 11311 /* VEX_W_0F3835_P_2 */
bf890a93 11312 { "vpmovzxdq", { XM, EXxmmq }, 0 },
6c30d220
L
11313 },
11314 {
11315 /* VEX_W_0F3836_P_2 */
bf890a93 11316 { "vpermd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11317 },
11318 {
592a252b 11319 /* VEX_W_0F3837_P_2 */
bf890a93 11320 { "vpcmpgtq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11321 },
11322 {
592a252b 11323 /* VEX_W_0F3838_P_2 */
bf890a93 11324 { "vpminsb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11325 },
11326 {
592a252b 11327 /* VEX_W_0F3839_P_2 */
bf890a93 11328 { "vpminsd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11329 },
11330 {
592a252b 11331 /* VEX_W_0F383A_P_2 */
bf890a93 11332 { "vpminuw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11333 },
11334 {
592a252b 11335 /* VEX_W_0F383B_P_2 */
bf890a93 11336 { "vpminud", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11337 },
11338 {
592a252b 11339 /* VEX_W_0F383C_P_2 */
bf890a93 11340 { "vpmaxsb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11341 },
11342 {
592a252b 11343 /* VEX_W_0F383D_P_2 */
bf890a93 11344 { "vpmaxsd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11345 },
11346 {
592a252b 11347 /* VEX_W_0F383E_P_2 */
bf890a93 11348 { "vpmaxuw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11349 },
11350 {
592a252b 11351 /* VEX_W_0F383F_P_2 */
bf890a93 11352 { "vpmaxud", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11353 },
11354 {
592a252b 11355 /* VEX_W_0F3840_P_2 */
bf890a93 11356 { "vpmulld", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11357 },
11358 {
592a252b 11359 /* VEX_W_0F3841_P_2 */
bf890a93 11360 { "vphminposuw", { XM, EXx }, 0 },
9e30b8e0 11361 },
6c30d220
L
11362 {
11363 /* VEX_W_0F3846_P_2 */
bf890a93 11364 { "vpsravd", { XM, Vex, EXx }, 0 },
6c30d220
L
11365 },
11366 {
11367 /* VEX_W_0F3858_P_2 */
bf890a93 11368 { "vpbroadcastd", { XM, EXxmm_md }, 0 },
6c30d220
L
11369 },
11370 {
11371 /* VEX_W_0F3859_P_2 */
bf890a93 11372 { "vpbroadcastq", { XM, EXxmm_mq }, 0 },
6c30d220
L
11373 },
11374 {
11375 /* VEX_W_0F385A_P_2_M_0 */
bf890a93 11376 { "vbroadcasti128", { XM, Mxmm }, 0 },
6c30d220
L
11377 },
11378 {
11379 /* VEX_W_0F3878_P_2 */
bf890a93 11380 { "vpbroadcastb", { XM, EXxmm_mb }, 0 },
6c30d220
L
11381 },
11382 {
11383 /* VEX_W_0F3879_P_2 */
bf890a93 11384 { "vpbroadcastw", { XM, EXxmm_mw }, 0 },
6c30d220 11385 },
9e30b8e0 11386 {
592a252b 11387 /* VEX_W_0F38DB_P_2 */
bf890a93 11388 { "vaesimc", { XM, EXx }, 0 },
9e30b8e0
L
11389 },
11390 {
592a252b 11391 /* VEX_W_0F38DC_P_2 */
bf890a93 11392 { "vaesenc", { XM, Vex128, EXx }, 0 },
9e30b8e0
L
11393 },
11394 {
592a252b 11395 /* VEX_W_0F38DD_P_2 */
bf890a93 11396 { "vaesenclast", { XM, Vex128, EXx }, 0 },
9e30b8e0
L
11397 },
11398 {
592a252b 11399 /* VEX_W_0F38DE_P_2 */
bf890a93 11400 { "vaesdec", { XM, Vex128, EXx }, 0 },
9e30b8e0
L
11401 },
11402 {
592a252b 11403 /* VEX_W_0F38DF_P_2 */
bf890a93 11404 { "vaesdeclast", { XM, Vex128, EXx }, 0 },
9e30b8e0 11405 },
6c30d220
L
11406 {
11407 /* VEX_W_0F3A00_P_2 */
11408 { Bad_Opcode },
bf890a93 11409 { "vpermq", { XM, EXx, Ib }, 0 },
6c30d220
L
11410 },
11411 {
11412 /* VEX_W_0F3A01_P_2 */
11413 { Bad_Opcode },
bf890a93 11414 { "vpermpd", { XM, EXx, Ib }, 0 },
6c30d220
L
11415 },
11416 {
11417 /* VEX_W_0F3A02_P_2 */
bf890a93 11418 { "vpblendd", { XM, Vex, EXx, Ib }, 0 },
6c30d220 11419 },
9e30b8e0 11420 {
592a252b 11421 /* VEX_W_0F3A04_P_2 */
bf890a93 11422 { "vpermilps", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11423 },
11424 {
592a252b 11425 /* VEX_W_0F3A05_P_2 */
bf890a93 11426 { "vpermilpd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11427 },
11428 {
592a252b 11429 /* VEX_W_0F3A06_P_2 */
bf890a93 11430 { "vperm2f128", { XM, Vex256, EXx, Ib }, 0 },
9e30b8e0
L
11431 },
11432 {
592a252b 11433 /* VEX_W_0F3A08_P_2 */
bf890a93 11434 { "vroundps", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11435 },
11436 {
592a252b 11437 /* VEX_W_0F3A09_P_2 */
bf890a93 11438 { "vroundpd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11439 },
11440 {
592a252b 11441 /* VEX_W_0F3A0A_P_2 */
bf890a93 11442 { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib }, 0 },
9e30b8e0
L
11443 },
11444 {
592a252b 11445 /* VEX_W_0F3A0B_P_2 */
bf890a93 11446 { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib }, 0 },
9e30b8e0
L
11447 },
11448 {
592a252b 11449 /* VEX_W_0F3A0C_P_2 */
bf890a93 11450 { "vblendps", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11451 },
11452 {
592a252b 11453 /* VEX_W_0F3A0D_P_2 */
bf890a93 11454 { "vblendpd", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11455 },
11456 {
592a252b 11457 /* VEX_W_0F3A0E_P_2 */
bf890a93 11458 { "vpblendw", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11459 },
11460 {
592a252b 11461 /* VEX_W_0F3A0F_P_2 */
bf890a93 11462 { "vpalignr", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11463 },
11464 {
592a252b 11465 /* VEX_W_0F3A14_P_2 */
bf890a93 11466 { "vpextrb", { Edqb, XM, Ib }, 0 },
9e30b8e0
L
11467 },
11468 {
592a252b 11469 /* VEX_W_0F3A15_P_2 */
bf890a93 11470 { "vpextrw", { Edqw, XM, Ib }, 0 },
9e30b8e0
L
11471 },
11472 {
592a252b 11473 /* VEX_W_0F3A18_P_2 */
bf890a93 11474 { "vinsertf128", { XM, Vex256, EXxmm, Ib }, 0 },
9e30b8e0
L
11475 },
11476 {
592a252b 11477 /* VEX_W_0F3A19_P_2 */
bf890a93 11478 { "vextractf128", { EXxmm, XM, Ib }, 0 },
9e30b8e0
L
11479 },
11480 {
592a252b 11481 /* VEX_W_0F3A20_P_2 */
bf890a93 11482 { "vpinsrb", { XM, Vex128, Edqb, Ib }, 0 },
9e30b8e0
L
11483 },
11484 {
592a252b 11485 /* VEX_W_0F3A21_P_2 */
bf890a93 11486 { "vinsertps", { XM, Vex128, EXd, Ib }, 0 },
9e30b8e0 11487 },
43234a1e 11488 {
1ba585e8 11489 /* VEX_W_0F3A30_P_2_LEN_0 */
bf890a93
IT
11490 { "kshiftrb", { MaskG, MaskR, Ib }, 0 },
11491 { "kshiftrw", { MaskG, MaskR, Ib }, 0 },
43234a1e
L
11492 },
11493 {
1ba585e8 11494 /* VEX_W_0F3A31_P_2_LEN_0 */
bf890a93
IT
11495 { "kshiftrd", { MaskG, MaskR, Ib }, 0 },
11496 { "kshiftrq", { MaskG, MaskR, Ib }, 0 },
1ba585e8
IT
11497 },
11498 {
11499 /* VEX_W_0F3A32_P_2_LEN_0 */
bf890a93
IT
11500 { "kshiftlb", { MaskG, MaskR, Ib }, 0 },
11501 { "kshiftlw", { MaskG, MaskR, Ib }, 0 },
43234a1e 11502 },
1ba585e8
IT
11503 {
11504 /* VEX_W_0F3A33_P_2_LEN_0 */
bf890a93
IT
11505 { "kshiftld", { MaskG, MaskR, Ib }, 0 },
11506 { "kshiftlq", { MaskG, MaskR, Ib }, 0 },
1ba585e8 11507 },
6c30d220
L
11508 {
11509 /* VEX_W_0F3A38_P_2 */
bf890a93 11510 { "vinserti128", { XM, Vex256, EXxmm, Ib }, 0 },
6c30d220
L
11511 },
11512 {
11513 /* VEX_W_0F3A39_P_2 */
bf890a93 11514 { "vextracti128", { EXxmm, XM, Ib }, 0 },
6c30d220 11515 },
9e30b8e0 11516 {
592a252b 11517 /* VEX_W_0F3A40_P_2 */
bf890a93 11518 { "vdpps", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11519 },
11520 {
592a252b 11521 /* VEX_W_0F3A41_P_2 */
bf890a93 11522 { "vdppd", { XM, Vex128, EXx, Ib }, 0 },
9e30b8e0
L
11523 },
11524 {
592a252b 11525 /* VEX_W_0F3A42_P_2 */
bf890a93 11526 { "vmpsadbw", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11527 },
11528 {
592a252b 11529 /* VEX_W_0F3A44_P_2 */
bf890a93 11530 { "vpclmulqdq", { XM, Vex128, EXx, PCLMUL }, 0 },
9e30b8e0 11531 },
6c30d220
L
11532 {
11533 /* VEX_W_0F3A46_P_2 */
bf890a93 11534 { "vperm2i128", { XM, Vex256, EXx, Ib }, 0 },
6c30d220 11535 },
a683cc34 11536 {
592a252b 11537 /* VEX_W_0F3A48_P_2 */
bf890a93
IT
11538 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
11539 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34
SP
11540 },
11541 {
592a252b 11542 /* VEX_W_0F3A49_P_2 */
bf890a93
IT
11543 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
11544 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34 11545 },
9e30b8e0 11546 {
592a252b 11547 /* VEX_W_0F3A4A_P_2 */
bf890a93 11548 { "vblendvps", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
11549 },
11550 {
592a252b 11551 /* VEX_W_0F3A4B_P_2 */
bf890a93 11552 { "vblendvpd", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
11553 },
11554 {
592a252b 11555 /* VEX_W_0F3A4C_P_2 */
bf890a93 11556 { "vpblendvb", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
11557 },
11558 {
592a252b 11559 /* VEX_W_0F3A60_P_2 */
bf890a93 11560 { "vpcmpestrm", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11561 },
11562 {
592a252b 11563 /* VEX_W_0F3A61_P_2 */
bf890a93 11564 { "vpcmpestri", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11565 },
11566 {
592a252b 11567 /* VEX_W_0F3A62_P_2 */
bf890a93 11568 { "vpcmpistrm", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11569 },
11570 {
592a252b 11571 /* VEX_W_0F3A63_P_2 */
bf890a93 11572 { "vpcmpistri", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11573 },
11574 {
592a252b 11575 /* VEX_W_0F3ADF_P_2 */
bf890a93 11576 { "vaeskeygenassist", { XM, EXx, Ib }, 0 },
9e30b8e0 11577 },
43234a1e
L
11578#define NEED_VEX_W_TABLE
11579#include "i386-dis-evex.h"
11580#undef NEED_VEX_W_TABLE
9e30b8e0
L
11581};
11582
11583static const struct dis386 mod_table[][2] = {
11584 {
11585 /* MOD_8D */
bf890a93 11586 { "leaS", { Gv, M }, 0 },
9e30b8e0 11587 },
42164a71
L
11588 {
11589 /* MOD_C6_REG_7 */
11590 { Bad_Opcode },
11591 { RM_TABLE (RM_C6_REG_7) },
11592 },
11593 {
11594 /* MOD_C7_REG_7 */
11595 { Bad_Opcode },
11596 { RM_TABLE (RM_C7_REG_7) },
11597 },
4a357820
MZ
11598 {
11599 /* MOD_FF_REG_3 */
a72d2af2 11600 { "Jcall^", { indirEp }, 0 },
4a357820
MZ
11601 },
11602 {
11603 /* MOD_FF_REG_5 */
a72d2af2 11604 { "Jjmp^", { indirEp }, 0 },
4a357820 11605 },
9e30b8e0
L
11606 {
11607 /* MOD_0F01_REG_0 */
11608 { X86_64_TABLE (X86_64_0F01_REG_0) },
11609 { RM_TABLE (RM_0F01_REG_0) },
11610 },
11611 {
11612 /* MOD_0F01_REG_1 */
11613 { X86_64_TABLE (X86_64_0F01_REG_1) },
11614 { RM_TABLE (RM_0F01_REG_1) },
11615 },
11616 {
11617 /* MOD_0F01_REG_2 */
11618 { X86_64_TABLE (X86_64_0F01_REG_2) },
11619 { RM_TABLE (RM_0F01_REG_2) },
11620 },
11621 {
11622 /* MOD_0F01_REG_3 */
11623 { X86_64_TABLE (X86_64_0F01_REG_3) },
11624 { RM_TABLE (RM_0F01_REG_3) },
11625 },
11626 {
11627 /* MOD_0F01_REG_7 */
bf890a93 11628 { "invlpg", { Mb }, 0 },
9e30b8e0
L
11629 { RM_TABLE (RM_0F01_REG_7) },
11630 },
11631 {
11632 /* MOD_0F12_PREFIX_0 */
507bd325
L
11633 { "movlps", { XM, EXq }, PREFIX_OPCODE },
11634 { "movhlps", { XM, EXq }, PREFIX_OPCODE },
9e30b8e0
L
11635 },
11636 {
11637 /* MOD_0F13 */
507bd325 11638 { "movlpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
11639 },
11640 {
11641 /* MOD_0F16_PREFIX_0 */
bf890a93
IT
11642 { "movhps", { XM, EXq }, 0 },
11643 { "movlhps", { XM, EXq }, 0 },
9e30b8e0
L
11644 },
11645 {
11646 /* MOD_0F17 */
507bd325 11647 { "movhpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
11648 },
11649 {
11650 /* MOD_0F18_REG_0 */
bf890a93 11651 { "prefetchnta", { Mb }, 0 },
9e30b8e0
L
11652 },
11653 {
11654 /* MOD_0F18_REG_1 */
bf890a93 11655 { "prefetcht0", { Mb }, 0 },
9e30b8e0
L
11656 },
11657 {
11658 /* MOD_0F18_REG_2 */
bf890a93 11659 { "prefetcht1", { Mb }, 0 },
9e30b8e0
L
11660 },
11661 {
11662 /* MOD_0F18_REG_3 */
bf890a93 11663 { "prefetcht2", { Mb }, 0 },
9e30b8e0 11664 },
d7189fa5
RM
11665 {
11666 /* MOD_0F18_REG_4 */
bf890a93 11667 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
11668 },
11669 {
11670 /* MOD_0F18_REG_5 */
bf890a93 11671 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
11672 },
11673 {
11674 /* MOD_0F18_REG_6 */
bf890a93 11675 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
11676 },
11677 {
11678 /* MOD_0F18_REG_7 */
bf890a93 11679 { "nop/reserved", { Mb }, 0 },
d7189fa5 11680 },
7e8b059b
L
11681 {
11682 /* MOD_0F1A_PREFIX_0 */
bf890a93
IT
11683 { "bndldx", { Gbnd, Ev_bnd }, 0 },
11684 { "nopQ", { Ev }, 0 },
7e8b059b
L
11685 },
11686 {
11687 /* MOD_0F1B_PREFIX_0 */
bf890a93
IT
11688 { "bndstx", { Ev_bnd, Gbnd }, 0 },
11689 { "nopQ", { Ev }, 0 },
7e8b059b
L
11690 },
11691 {
11692 /* MOD_0F1B_PREFIX_1 */
bf890a93
IT
11693 { "bndmk", { Gbnd, Ev_bnd }, 0 },
11694 { "nopQ", { Ev }, 0 },
7e8b059b 11695 },
b844680a 11696 {
92fddf8e 11697 /* MOD_0F24 */
7bb15c6f 11698 { Bad_Opcode },
bf890a93 11699 { "movL", { Rd, Td }, 0 },
b844680a
L
11700 },
11701 {
92fddf8e 11702 /* MOD_0F26 */
592d1631 11703 { Bad_Opcode },
bf890a93 11704 { "movL", { Td, Rd }, 0 },
b844680a 11705 },
75c135a8
L
11706 {
11707 /* MOD_0F2B_PREFIX_0 */
507bd325 11708 {"movntps", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
11709 },
11710 {
11711 /* MOD_0F2B_PREFIX_1 */
507bd325 11712 {"movntss", { Md, XM }, PREFIX_OPCODE },
75c135a8
L
11713 },
11714 {
11715 /* MOD_0F2B_PREFIX_2 */
507bd325 11716 {"movntpd", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
11717 },
11718 {
11719 /* MOD_0F2B_PREFIX_3 */
507bd325 11720 {"movntsd", { Mq, XM }, PREFIX_OPCODE },
75c135a8
L
11721 },
11722 {
11723 /* MOD_0F51 */
592d1631 11724 { Bad_Opcode },
507bd325 11725 { "movmskpX", { Gdq, XS }, PREFIX_OPCODE },
75c135a8 11726 },
b844680a 11727 {
1ceb70f8 11728 /* MOD_0F71_REG_2 */
592d1631 11729 { Bad_Opcode },
bf890a93 11730 { "psrlw", { MS, Ib }, 0 },
b844680a
L
11731 },
11732 {
1ceb70f8 11733 /* MOD_0F71_REG_4 */
592d1631 11734 { Bad_Opcode },
bf890a93 11735 { "psraw", { MS, Ib }, 0 },
b844680a
L
11736 },
11737 {
1ceb70f8 11738 /* MOD_0F71_REG_6 */
592d1631 11739 { Bad_Opcode },
bf890a93 11740 { "psllw", { MS, Ib }, 0 },
b844680a
L
11741 },
11742 {
1ceb70f8 11743 /* MOD_0F72_REG_2 */
592d1631 11744 { Bad_Opcode },
bf890a93 11745 { "psrld", { MS, Ib }, 0 },
b844680a
L
11746 },
11747 {
1ceb70f8 11748 /* MOD_0F72_REG_4 */
592d1631 11749 { Bad_Opcode },
bf890a93 11750 { "psrad", { MS, Ib }, 0 },
b844680a
L
11751 },
11752 {
1ceb70f8 11753 /* MOD_0F72_REG_6 */
592d1631 11754 { Bad_Opcode },
bf890a93 11755 { "pslld", { MS, Ib }, 0 },
b844680a
L
11756 },
11757 {
1ceb70f8 11758 /* MOD_0F73_REG_2 */
592d1631 11759 { Bad_Opcode },
bf890a93 11760 { "psrlq", { MS, Ib }, 0 },
b844680a
L
11761 },
11762 {
1ceb70f8 11763 /* MOD_0F73_REG_3 */
592d1631 11764 { Bad_Opcode },
c0f3af97
L
11765 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
11766 },
11767 {
11768 /* MOD_0F73_REG_6 */
592d1631 11769 { Bad_Opcode },
bf890a93 11770 { "psllq", { MS, Ib }, 0 },
c0f3af97
L
11771 },
11772 {
11773 /* MOD_0F73_REG_7 */
592d1631 11774 { Bad_Opcode },
c0f3af97
L
11775 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
11776 },
11777 {
11778 /* MOD_0FAE_REG_0 */
bf890a93 11779 { "fxsave", { FXSAVE }, 0 },
c7b8aa3a 11780 { PREFIX_TABLE (PREFIX_0FAE_REG_0) },
c0f3af97
L
11781 },
11782 {
11783 /* MOD_0FAE_REG_1 */
bf890a93 11784 { "fxrstor", { FXSAVE }, 0 },
c7b8aa3a 11785 { PREFIX_TABLE (PREFIX_0FAE_REG_1) },
c0f3af97
L
11786 },
11787 {
11788 /* MOD_0FAE_REG_2 */
bf890a93 11789 { "ldmxcsr", { Md }, 0 },
c7b8aa3a 11790 { PREFIX_TABLE (PREFIX_0FAE_REG_2) },
c0f3af97
L
11791 },
11792 {
11793 /* MOD_0FAE_REG_3 */
bf890a93 11794 { "stmxcsr", { Md }, 0 },
c7b8aa3a 11795 { PREFIX_TABLE (PREFIX_0FAE_REG_3) },
c0f3af97
L
11796 },
11797 {
11798 /* MOD_0FAE_REG_4 */
bf890a93 11799 { "xsave", { FXSAVE }, 0 },
c0f3af97
L
11800 },
11801 {
11802 /* MOD_0FAE_REG_5 */
bf890a93 11803 { "xrstor", { FXSAVE }, 0 },
c0f3af97
L
11804 { RM_TABLE (RM_0FAE_REG_5) },
11805 },
11806 {
11807 /* MOD_0FAE_REG_6 */
c5e7287a 11808 { PREFIX_TABLE (PREFIX_0FAE_REG_6) },
c0f3af97
L
11809 { RM_TABLE (RM_0FAE_REG_6) },
11810 },
11811 {
11812 /* MOD_0FAE_REG_7 */
963f3586 11813 { PREFIX_TABLE (PREFIX_0FAE_REG_7) },
c0f3af97
L
11814 { RM_TABLE (RM_0FAE_REG_7) },
11815 },
11816 {
11817 /* MOD_0FB2 */
bf890a93 11818 { "lssS", { Gv, Mp }, 0 },
c0f3af97
L
11819 },
11820 {
11821 /* MOD_0FB4 */
bf890a93 11822 { "lfsS", { Gv, Mp }, 0 },
c0f3af97
L
11823 },
11824 {
11825 /* MOD_0FB5 */
bf890a93 11826 { "lgsS", { Gv, Mp }, 0 },
c0f3af97 11827 },
963f3586
IT
11828 {
11829 /* MOD_0FC7_REG_3 */
bf890a93 11830 { "xrstors", { FXSAVE }, 0 },
963f3586
IT
11831 },
11832 {
11833 /* MOD_0FC7_REG_4 */
bf890a93 11834 { "xsavec", { FXSAVE }, 0 },
963f3586
IT
11835 },
11836 {
11837 /* MOD_0FC7_REG_5 */
bf890a93 11838 { "xsaves", { FXSAVE }, 0 },
963f3586 11839 },
c0f3af97
L
11840 {
11841 /* MOD_0FC7_REG_6 */
f24bcbaa
L
11842 { PREFIX_TABLE (PREFIX_MOD_0_0FC7_REG_6) },
11843 { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_6) }
c0f3af97
L
11844 },
11845 {
11846 /* MOD_0FC7_REG_7 */
bf890a93 11847 { "vmptrst", { Mq }, 0 },
f24bcbaa 11848 { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_7) }
c0f3af97
L
11849 },
11850 {
11851 /* MOD_0FD7 */
592d1631 11852 { Bad_Opcode },
bf890a93 11853 { "pmovmskb", { Gdq, MS }, 0 },
c0f3af97
L
11854 },
11855 {
11856 /* MOD_0FE7_PREFIX_2 */
bf890a93 11857 { "movntdq", { Mx, XM }, 0 },
c0f3af97
L
11858 },
11859 {
11860 /* MOD_0FF0_PREFIX_3 */
bf890a93 11861 { "lddqu", { XM, M }, 0 },
c0f3af97
L
11862 },
11863 {
11864 /* MOD_0F382A_PREFIX_2 */
bf890a93 11865 { "movntdqa", { XM, Mx }, 0 },
c0f3af97
L
11866 },
11867 {
11868 /* MOD_62_32BIT */
bf890a93 11869 { "bound{S|}", { Gv, Ma }, 0 },
43234a1e 11870 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
11871 },
11872 {
11873 /* MOD_C4_32BIT */
bf890a93 11874 { "lesS", { Gv, Mp }, 0 },
c0f3af97
L
11875 { VEX_C4_TABLE (VEX_0F) },
11876 },
11877 {
11878 /* MOD_C5_32BIT */
bf890a93 11879 { "ldsS", { Gv, Mp }, 0 },
c0f3af97
L
11880 { VEX_C5_TABLE (VEX_0F) },
11881 },
11882 {
592a252b
L
11883 /* MOD_VEX_0F12_PREFIX_0 */
11884 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
11885 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
c0f3af97
L
11886 },
11887 {
592a252b
L
11888 /* MOD_VEX_0F13 */
11889 { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
c0f3af97
L
11890 },
11891 {
592a252b
L
11892 /* MOD_VEX_0F16_PREFIX_0 */
11893 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
11894 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
c0f3af97
L
11895 },
11896 {
592a252b
L
11897 /* MOD_VEX_0F17 */
11898 { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
c0f3af97
L
11899 },
11900 {
592a252b
L
11901 /* MOD_VEX_0F2B */
11902 { VEX_W_TABLE (VEX_W_0F2B_M_0) },
c0f3af97
L
11903 },
11904 {
592a252b 11905 /* MOD_VEX_0F50 */
592d1631 11906 { Bad_Opcode },
592a252b 11907 { VEX_W_TABLE (VEX_W_0F50_M_0) },
c0f3af97
L
11908 },
11909 {
592a252b 11910 /* MOD_VEX_0F71_REG_2 */
592d1631 11911 { Bad_Opcode },
592a252b 11912 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
b844680a
L
11913 },
11914 {
592a252b 11915 /* MOD_VEX_0F71_REG_4 */
592d1631 11916 { Bad_Opcode },
592a252b 11917 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
b844680a
L
11918 },
11919 {
592a252b 11920 /* MOD_VEX_0F71_REG_6 */
592d1631 11921 { Bad_Opcode },
592a252b 11922 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
b844680a
L
11923 },
11924 {
592a252b 11925 /* MOD_VEX_0F72_REG_2 */
592d1631 11926 { Bad_Opcode },
592a252b 11927 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
b844680a 11928 },
d8faab4e 11929 {
592a252b 11930 /* MOD_VEX_0F72_REG_4 */
592d1631 11931 { Bad_Opcode },
592a252b 11932 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
d8faab4e
L
11933 },
11934 {
592a252b 11935 /* MOD_VEX_0F72_REG_6 */
592d1631 11936 { Bad_Opcode },
592a252b 11937 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
d8faab4e 11938 },
876d4bfa 11939 {
592a252b 11940 /* MOD_VEX_0F73_REG_2 */
592d1631 11941 { Bad_Opcode },
592a252b 11942 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
876d4bfa
L
11943 },
11944 {
592a252b 11945 /* MOD_VEX_0F73_REG_3 */
592d1631 11946 { Bad_Opcode },
592a252b 11947 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
475a2301
L
11948 },
11949 {
592a252b 11950 /* MOD_VEX_0F73_REG_6 */
592d1631 11951 { Bad_Opcode },
592a252b 11952 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
876d4bfa
L
11953 },
11954 {
592a252b 11955 /* MOD_VEX_0F73_REG_7 */
592d1631 11956 { Bad_Opcode },
592a252b 11957 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
876d4bfa
L
11958 },
11959 {
592a252b
L
11960 /* MOD_VEX_0FAE_REG_2 */
11961 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
876d4bfa 11962 },
bbedc832 11963 {
592a252b
L
11964 /* MOD_VEX_0FAE_REG_3 */
11965 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
bbedc832 11966 },
144c41d9 11967 {
592a252b 11968 /* MOD_VEX_0FD7_PREFIX_2 */
592d1631 11969 { Bad_Opcode },
6c30d220 11970 { VEX_W_TABLE (VEX_W_0FD7_P_2_M_1) },
144c41d9 11971 },
1afd85e3 11972 {
592a252b
L
11973 /* MOD_VEX_0FE7_PREFIX_2 */
11974 { VEX_W_TABLE (VEX_W_0FE7_P_2_M_0) },
1afd85e3
L
11975 },
11976 {
592a252b
L
11977 /* MOD_VEX_0FF0_PREFIX_3 */
11978 { VEX_W_TABLE (VEX_W_0FF0_P_3_M_0) },
92fddf8e 11979 },
75c135a8 11980 {
592a252b
L
11981 /* MOD_VEX_0F381A_PREFIX_2 */
11982 { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
75c135a8 11983 },
1afd85e3 11984 {
592a252b 11985 /* MOD_VEX_0F382A_PREFIX_2 */
6c30d220 11986 { VEX_W_TABLE (VEX_W_0F382A_P_2_M_0) },
1afd85e3 11987 },
75c135a8 11988 {
592a252b
L
11989 /* MOD_VEX_0F382C_PREFIX_2 */
11990 { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
75c135a8 11991 },
1afd85e3 11992 {
592a252b
L
11993 /* MOD_VEX_0F382D_PREFIX_2 */
11994 { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
1afd85e3
L
11995 },
11996 {
592a252b
L
11997 /* MOD_VEX_0F382E_PREFIX_2 */
11998 { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
1afd85e3
L
11999 },
12000 {
592a252b
L
12001 /* MOD_VEX_0F382F_PREFIX_2 */
12002 { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
1afd85e3 12003 },
6c30d220
L
12004 {
12005 /* MOD_VEX_0F385A_PREFIX_2 */
12006 { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) },
12007 },
12008 {
12009 /* MOD_VEX_0F388C_PREFIX_2 */
bf890a93 12010 { "vpmaskmov%LW", { XM, Vex, Mx }, 0 },
6c30d220
L
12011 },
12012 {
12013 /* MOD_VEX_0F388E_PREFIX_2 */
bf890a93 12014 { "vpmaskmov%LW", { Mx, Vex, XM }, 0 },
6c30d220 12015 },
43234a1e
L
12016#define NEED_MOD_TABLE
12017#include "i386-dis-evex.h"
12018#undef NEED_MOD_TABLE
b844680a
L
12019};
12020
1ceb70f8 12021static const struct dis386 rm_table[][8] = {
42164a71
L
12022 {
12023 /* RM_C6_REG_7 */
bf890a93 12024 { "xabort", { Skip_MODRM, Ib }, 0 },
42164a71
L
12025 },
12026 {
12027 /* RM_C7_REG_7 */
bf890a93 12028 { "xbeginT", { Skip_MODRM, Jv }, 0 },
42164a71 12029 },
b844680a 12030 {
1ceb70f8 12031 /* RM_0F01_REG_0 */
592d1631 12032 { Bad_Opcode },
bf890a93
IT
12033 { "vmcall", { Skip_MODRM }, 0 },
12034 { "vmlaunch", { Skip_MODRM }, 0 },
12035 { "vmresume", { Skip_MODRM }, 0 },
12036 { "vmxoff", { Skip_MODRM }, 0 },
b844680a
L
12037 },
12038 {
1ceb70f8 12039 /* RM_0F01_REG_1 */
bf890a93
IT
12040 { "monitor", { { OP_Monitor, 0 } }, 0 },
12041 { "mwait", { { OP_Mwait, 0 } }, 0 },
12042 { "clac", { Skip_MODRM }, 0 },
12043 { "stac", { Skip_MODRM }, 0 },
2cf200a4
IT
12044 { Bad_Opcode },
12045 { Bad_Opcode },
12046 { Bad_Opcode },
bf890a93 12047 { "encls", { Skip_MODRM }, 0 },
b844680a 12048 },
475a2301
L
12049 {
12050 /* RM_0F01_REG_2 */
bf890a93
IT
12051 { "xgetbv", { Skip_MODRM }, 0 },
12052 { "xsetbv", { Skip_MODRM }, 0 },
8729a6f6
L
12053 { Bad_Opcode },
12054 { Bad_Opcode },
bf890a93
IT
12055 { "vmfunc", { Skip_MODRM }, 0 },
12056 { "xend", { Skip_MODRM }, 0 },
12057 { "xtest", { Skip_MODRM }, 0 },
12058 { "enclu", { Skip_MODRM }, 0 },
475a2301 12059 },
b844680a 12060 {
1ceb70f8 12061 /* RM_0F01_REG_3 */
bf890a93
IT
12062 { "vmrun", { Skip_MODRM }, 0 },
12063 { "vmmcall", { Skip_MODRM }, 0 },
12064 { "vmload", { Skip_MODRM }, 0 },
12065 { "vmsave", { Skip_MODRM }, 0 },
12066 { "stgi", { Skip_MODRM }, 0 },
12067 { "clgi", { Skip_MODRM }, 0 },
12068 { "skinit", { Skip_MODRM }, 0 },
12069 { "invlpga", { Skip_MODRM }, 0 },
4e7d34a6
L
12070 },
12071 {
1ceb70f8 12072 /* RM_0F01_REG_7 */
bf890a93
IT
12073 { "swapgs", { Skip_MODRM }, 0 },
12074 { "rdtscp", { Skip_MODRM }, 0 },
029f3522
GG
12075 { Bad_Opcode },
12076 { Bad_Opcode },
bf890a93 12077 { "clzero", { Skip_MODRM }, 0 },
b844680a
L
12078 },
12079 {
1ceb70f8 12080 /* RM_0FAE_REG_5 */
bf890a93 12081 { "lfence", { Skip_MODRM }, 0 },
b844680a
L
12082 },
12083 {
1ceb70f8 12084 /* RM_0FAE_REG_6 */
bf890a93 12085 { "mfence", { Skip_MODRM }, 0 },
b844680a 12086 },
bbedc832 12087 {
1ceb70f8 12088 /* RM_0FAE_REG_7 */
9d8596f0 12089 { PREFIX_TABLE (PREFIX_RM_0_0FAE_REG_7) },
144c41d9 12090 },
b844680a
L
12091};
12092
c608c12e
AM
12093#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
12094
f16cd0d5
L
12095/* We use the high bit to indicate different name for the same
12096 prefix. */
f16cd0d5 12097#define REP_PREFIX (0xf3 | 0x100)
42164a71
L
12098#define XACQUIRE_PREFIX (0xf2 | 0x200)
12099#define XRELEASE_PREFIX (0xf3 | 0x400)
7e8b059b 12100#define BND_PREFIX (0xf2 | 0x400)
f16cd0d5
L
12101
12102static int
26ca5450 12103ckprefix (void)
252b5132 12104{
f16cd0d5 12105 int newrex, i, length;
52b15da3 12106 rex = 0;
c0f3af97 12107 rex_ignored = 0;
252b5132 12108 prefixes = 0;
7d421014 12109 used_prefixes = 0;
52b15da3 12110 rex_used = 0;
f16cd0d5
L
12111 last_lock_prefix = -1;
12112 last_repz_prefix = -1;
12113 last_repnz_prefix = -1;
12114 last_data_prefix = -1;
12115 last_addr_prefix = -1;
12116 last_rex_prefix = -1;
12117 last_seg_prefix = -1;
d9949a36 12118 fwait_prefix = -1;
285ca992 12119 active_seg_prefix = 0;
f310f33d
L
12120 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
12121 all_prefixes[i] = 0;
12122 i = 0;
f16cd0d5
L
12123 length = 0;
12124 /* The maximum instruction length is 15bytes. */
12125 while (length < MAX_CODE_LENGTH - 1)
252b5132
RH
12126 {
12127 FETCH_DATA (the_info, codep + 1);
52b15da3 12128 newrex = 0;
252b5132
RH
12129 switch (*codep)
12130 {
52b15da3
JH
12131 /* REX prefixes family. */
12132 case 0x40:
12133 case 0x41:
12134 case 0x42:
12135 case 0x43:
12136 case 0x44:
12137 case 0x45:
12138 case 0x46:
12139 case 0x47:
12140 case 0x48:
12141 case 0x49:
12142 case 0x4a:
12143 case 0x4b:
12144 case 0x4c:
12145 case 0x4d:
12146 case 0x4e:
12147 case 0x4f:
f16cd0d5
L
12148 if (address_mode == mode_64bit)
12149 newrex = *codep;
12150 else
12151 return 1;
12152 last_rex_prefix = i;
52b15da3 12153 break;
252b5132
RH
12154 case 0xf3:
12155 prefixes |= PREFIX_REPZ;
f16cd0d5 12156 last_repz_prefix = i;
252b5132
RH
12157 break;
12158 case 0xf2:
12159 prefixes |= PREFIX_REPNZ;
f16cd0d5 12160 last_repnz_prefix = i;
252b5132
RH
12161 break;
12162 case 0xf0:
12163 prefixes |= PREFIX_LOCK;
f16cd0d5 12164 last_lock_prefix = i;
252b5132
RH
12165 break;
12166 case 0x2e:
12167 prefixes |= PREFIX_CS;
f16cd0d5 12168 last_seg_prefix = i;
285ca992 12169 active_seg_prefix = PREFIX_CS;
252b5132
RH
12170 break;
12171 case 0x36:
12172 prefixes |= PREFIX_SS;
f16cd0d5 12173 last_seg_prefix = i;
285ca992 12174 active_seg_prefix = PREFIX_SS;
252b5132
RH
12175 break;
12176 case 0x3e:
12177 prefixes |= PREFIX_DS;
f16cd0d5 12178 last_seg_prefix = i;
285ca992 12179 active_seg_prefix = PREFIX_DS;
252b5132
RH
12180 break;
12181 case 0x26:
12182 prefixes |= PREFIX_ES;
f16cd0d5 12183 last_seg_prefix = i;
285ca992 12184 active_seg_prefix = PREFIX_ES;
252b5132
RH
12185 break;
12186 case 0x64:
12187 prefixes |= PREFIX_FS;
f16cd0d5 12188 last_seg_prefix = i;
285ca992 12189 active_seg_prefix = PREFIX_FS;
252b5132
RH
12190 break;
12191 case 0x65:
12192 prefixes |= PREFIX_GS;
f16cd0d5 12193 last_seg_prefix = i;
285ca992 12194 active_seg_prefix = PREFIX_GS;
252b5132
RH
12195 break;
12196 case 0x66:
12197 prefixes |= PREFIX_DATA;
f16cd0d5 12198 last_data_prefix = i;
252b5132
RH
12199 break;
12200 case 0x67:
12201 prefixes |= PREFIX_ADDR;
f16cd0d5 12202 last_addr_prefix = i;
252b5132 12203 break;
5076851f 12204 case FWAIT_OPCODE:
252b5132
RH
12205 /* fwait is really an instruction. If there are prefixes
12206 before the fwait, they belong to the fwait, *not* to the
12207 following instruction. */
d9949a36 12208 fwait_prefix = i;
3e7d61b2 12209 if (prefixes || rex)
252b5132
RH
12210 {
12211 prefixes |= PREFIX_FWAIT;
12212 codep++;
6c067bbb
RM
12213 /* This ensures that the previous REX prefixes are noticed
12214 as unused prefixes, as in the return case below. */
12215 rex_used = rex;
f16cd0d5 12216 return 1;
252b5132
RH
12217 }
12218 prefixes = PREFIX_FWAIT;
12219 break;
12220 default:
f16cd0d5 12221 return 1;
252b5132 12222 }
52b15da3
JH
12223 /* Rex is ignored when followed by another prefix. */
12224 if (rex)
12225 {
3e7d61b2 12226 rex_used = rex;
f16cd0d5 12227 return 1;
52b15da3 12228 }
f16cd0d5
L
12229 if (*codep != FWAIT_OPCODE)
12230 all_prefixes[i++] = *codep;
52b15da3 12231 rex = newrex;
252b5132 12232 codep++;
f16cd0d5
L
12233 length++;
12234 }
12235 return 0;
12236}
12237
7d421014
ILT
12238/* Return the name of the prefix byte PREF, or NULL if PREF is not a
12239 prefix byte. */
12240
12241static const char *
26ca5450 12242prefix_name (int pref, int sizeflag)
7d421014 12243{
0003779b
L
12244 static const char *rexes [16] =
12245 {
12246 "rex", /* 0x40 */
12247 "rex.B", /* 0x41 */
12248 "rex.X", /* 0x42 */
12249 "rex.XB", /* 0x43 */
12250 "rex.R", /* 0x44 */
12251 "rex.RB", /* 0x45 */
12252 "rex.RX", /* 0x46 */
12253 "rex.RXB", /* 0x47 */
12254 "rex.W", /* 0x48 */
12255 "rex.WB", /* 0x49 */
12256 "rex.WX", /* 0x4a */
12257 "rex.WXB", /* 0x4b */
12258 "rex.WR", /* 0x4c */
12259 "rex.WRB", /* 0x4d */
12260 "rex.WRX", /* 0x4e */
12261 "rex.WRXB", /* 0x4f */
12262 };
12263
7d421014
ILT
12264 switch (pref)
12265 {
52b15da3
JH
12266 /* REX prefixes family. */
12267 case 0x40:
52b15da3 12268 case 0x41:
52b15da3 12269 case 0x42:
52b15da3 12270 case 0x43:
52b15da3 12271 case 0x44:
52b15da3 12272 case 0x45:
52b15da3 12273 case 0x46:
52b15da3 12274 case 0x47:
52b15da3 12275 case 0x48:
52b15da3 12276 case 0x49:
52b15da3 12277 case 0x4a:
52b15da3 12278 case 0x4b:
52b15da3 12279 case 0x4c:
52b15da3 12280 case 0x4d:
52b15da3 12281 case 0x4e:
52b15da3 12282 case 0x4f:
0003779b 12283 return rexes [pref - 0x40];
7d421014
ILT
12284 case 0xf3:
12285 return "repz";
12286 case 0xf2:
12287 return "repnz";
12288 case 0xf0:
12289 return "lock";
12290 case 0x2e:
12291 return "cs";
12292 case 0x36:
12293 return "ss";
12294 case 0x3e:
12295 return "ds";
12296 case 0x26:
12297 return "es";
12298 case 0x64:
12299 return "fs";
12300 case 0x65:
12301 return "gs";
12302 case 0x66:
12303 return (sizeflag & DFLAG) ? "data16" : "data32";
12304 case 0x67:
cb712a9e 12305 if (address_mode == mode_64bit)
db6eb5be 12306 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 12307 else
2888cb7a 12308 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
12309 case FWAIT_OPCODE:
12310 return "fwait";
f16cd0d5
L
12311 case REP_PREFIX:
12312 return "rep";
42164a71
L
12313 case XACQUIRE_PREFIX:
12314 return "xacquire";
12315 case XRELEASE_PREFIX:
12316 return "xrelease";
7e8b059b
L
12317 case BND_PREFIX:
12318 return "bnd";
7d421014
ILT
12319 default:
12320 return NULL;
12321 }
12322}
12323
ce518a5f
L
12324static char op_out[MAX_OPERANDS][100];
12325static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 12326static int two_source_ops;
ce518a5f
L
12327static bfd_vma op_address[MAX_OPERANDS];
12328static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 12329static bfd_vma start_pc;
ce518a5f 12330
252b5132
RH
12331/*
12332 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
12333 * (see topic "Redundant prefixes" in the "Differences from 8086"
12334 * section of the "Virtual 8086 Mode" chapter.)
12335 * 'pc' should be the address of this instruction, it will
12336 * be used to print the target address if this is a relative jump or call
12337 * The function returns the length of this instruction in bytes.
12338 */
12339
252b5132 12340static char intel_syntax;
9d141669 12341static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
12342static char open_char;
12343static char close_char;
12344static char separator_char;
12345static char scale_char;
12346
5db04b09
L
12347enum x86_64_isa
12348{
12349 amd64 = 0,
12350 intel64
12351};
12352
12353static enum x86_64_isa isa64;
12354
e396998b
AM
12355/* Here for backwards compatibility. When gdb stops using
12356 print_insn_i386_att and print_insn_i386_intel these functions can
12357 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 12358int
26ca5450 12359print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
12360{
12361 intel_syntax = 0;
e396998b
AM
12362
12363 return print_insn (pc, info);
252b5132
RH
12364}
12365
12366int
26ca5450 12367print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
12368{
12369 intel_syntax = 1;
e396998b
AM
12370
12371 return print_insn (pc, info);
252b5132
RH
12372}
12373
e396998b 12374int
26ca5450 12375print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
12376{
12377 intel_syntax = -1;
12378
12379 return print_insn (pc, info);
12380}
12381
f59a29b9
L
12382void
12383print_i386_disassembler_options (FILE *stream)
12384{
12385 fprintf (stream, _("\n\
12386The following i386/x86-64 specific disassembler options are supported for use\n\
12387with the -M switch (multiple options should be separated by commas):\n"));
12388
12389 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
12390 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
12391 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
12392 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
12393 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
12394 fprintf (stream, _(" att-mnemonic\n"
12395 " Display instruction in AT&T mnemonic\n"));
12396 fprintf (stream, _(" intel-mnemonic\n"
12397 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
12398 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
12399 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
12400 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
12401 fprintf (stream, _(" data32 Assume 32bit data size\n"));
12402 fprintf (stream, _(" data16 Assume 16bit data size\n"));
12403 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
5db04b09
L
12404 fprintf (stream, _(" amd64 Display instruction in AMD64 ISA\n"));
12405 fprintf (stream, _(" intel64 Display instruction in Intel64 ISA\n"));
f59a29b9
L
12406}
12407
592d1631 12408/* Bad opcode. */
bf890a93 12409static const struct dis386 bad_opcode = { "(bad)", { XX }, 0 };
592d1631 12410
b844680a
L
12411/* Get a pointer to struct dis386 with a valid name. */
12412
12413static const struct dis386 *
8bb15339 12414get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 12415{
91d6fa6a 12416 int vindex, vex_table_index;
b844680a
L
12417
12418 if (dp->name != NULL)
12419 return dp;
12420
12421 switch (dp->op[0].bytemode)
12422 {
1ceb70f8
L
12423 case USE_REG_TABLE:
12424 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
12425 break;
12426
12427 case USE_MOD_TABLE:
91d6fa6a
NC
12428 vindex = modrm.mod == 0x3 ? 1 : 0;
12429 dp = &mod_table[dp->op[1].bytemode][vindex];
1ceb70f8
L
12430 break;
12431
12432 case USE_RM_TABLE:
12433 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
12434 break;
12435
4e7d34a6 12436 case USE_PREFIX_TABLE:
c0f3af97 12437 if (need_vex)
b844680a 12438 {
c0f3af97
L
12439 /* The prefix in VEX is implicit. */
12440 switch (vex.prefix)
12441 {
12442 case 0:
91d6fa6a 12443 vindex = 0;
c0f3af97
L
12444 break;
12445 case REPE_PREFIX_OPCODE:
91d6fa6a 12446 vindex = 1;
c0f3af97
L
12447 break;
12448 case DATA_PREFIX_OPCODE:
91d6fa6a 12449 vindex = 2;
c0f3af97
L
12450 break;
12451 case REPNE_PREFIX_OPCODE:
91d6fa6a 12452 vindex = 3;
c0f3af97
L
12453 break;
12454 default:
12455 abort ();
12456 break;
12457 }
b844680a 12458 }
7bb15c6f 12459 else
b844680a 12460 {
285ca992
L
12461 int last_prefix = -1;
12462 int prefix = 0;
91d6fa6a 12463 vindex = 0;
285ca992
L
12464 /* We check PREFIX_REPNZ and PREFIX_REPZ before PREFIX_DATA.
12465 When there are multiple PREFIX_REPNZ and PREFIX_REPZ, the
12466 last one wins. */
12467 if ((prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) != 0)
b844680a 12468 {
285ca992 12469 if (last_repz_prefix > last_repnz_prefix)
c0f3af97 12470 {
285ca992
L
12471 vindex = 1;
12472 prefix = PREFIX_REPZ;
12473 last_prefix = last_repz_prefix;
c0f3af97
L
12474 }
12475 else
b844680a 12476 {
285ca992
L
12477 vindex = 3;
12478 prefix = PREFIX_REPNZ;
12479 last_prefix = last_repnz_prefix;
b844680a 12480 }
285ca992 12481
507bd325
L
12482 /* Check if prefix should be ignored. */
12483 if ((((prefix_table[dp->op[1].bytemode][vindex].prefix_requirement
12484 & PREFIX_IGNORED) >> PREFIX_IGNORED_SHIFT)
12485 & prefix) != 0)
285ca992
L
12486 vindex = 0;
12487 }
12488
12489 if (vindex == 0 && (prefixes & PREFIX_DATA) != 0)
12490 {
12491 vindex = 2;
12492 prefix = PREFIX_DATA;
12493 last_prefix = last_data_prefix;
12494 }
12495
12496 if (vindex != 0)
12497 {
12498 used_prefixes |= prefix;
12499 all_prefixes[last_prefix] = 0;
b844680a
L
12500 }
12501 }
91d6fa6a 12502 dp = &prefix_table[dp->op[1].bytemode][vindex];
b844680a
L
12503 break;
12504
4e7d34a6 12505 case USE_X86_64_TABLE:
91d6fa6a
NC
12506 vindex = address_mode == mode_64bit ? 1 : 0;
12507 dp = &x86_64_table[dp->op[1].bytemode][vindex];
b844680a
L
12508 break;
12509
4e7d34a6 12510 case USE_3BYTE_TABLE:
8bb15339 12511 FETCH_DATA (info, codep + 2);
91d6fa6a
NC
12512 vindex = *codep++;
12513 dp = &three_byte_table[dp->op[1].bytemode][vindex];
285ca992 12514 end_codep = codep;
8bb15339
L
12515 modrm.mod = (*codep >> 6) & 3;
12516 modrm.reg = (*codep >> 3) & 7;
12517 modrm.rm = *codep & 7;
12518 break;
12519
c0f3af97
L
12520 case USE_VEX_LEN_TABLE:
12521 if (!need_vex)
12522 abort ();
12523
12524 switch (vex.length)
12525 {
12526 case 128:
91d6fa6a 12527 vindex = 0;
c0f3af97
L
12528 break;
12529 case 256:
91d6fa6a 12530 vindex = 1;
c0f3af97
L
12531 break;
12532 default:
12533 abort ();
12534 break;
12535 }
12536
91d6fa6a 12537 dp = &vex_len_table[dp->op[1].bytemode][vindex];
c0f3af97
L
12538 break;
12539
f88c9eb0
SP
12540 case USE_XOP_8F_TABLE:
12541 FETCH_DATA (info, codep + 3);
12542 /* All bits in the REX prefix are ignored. */
12543 rex_ignored = rex;
12544 rex = ~(*codep >> 5) & 0x7;
12545
12546 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
12547 switch ((*codep & 0x1f))
12548 {
12549 default:
f07af43e
L
12550 dp = &bad_opcode;
12551 return dp;
5dd85c99
SP
12552 case 0x8:
12553 vex_table_index = XOP_08;
12554 break;
f88c9eb0
SP
12555 case 0x9:
12556 vex_table_index = XOP_09;
12557 break;
12558 case 0xa:
12559 vex_table_index = XOP_0A;
12560 break;
12561 }
12562 codep++;
12563 vex.w = *codep & 0x80;
12564 if (vex.w && address_mode == mode_64bit)
12565 rex |= REX_W;
12566
12567 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12568 if (address_mode != mode_64bit
12569 && vex.register_specifier > 0x7)
f07af43e
L
12570 {
12571 dp = &bad_opcode;
12572 return dp;
12573 }
f88c9eb0
SP
12574
12575 vex.length = (*codep & 0x4) ? 256 : 128;
12576 switch ((*codep & 0x3))
12577 {
12578 case 0:
12579 vex.prefix = 0;
12580 break;
12581 case 1:
12582 vex.prefix = DATA_PREFIX_OPCODE;
12583 break;
12584 case 2:
12585 vex.prefix = REPE_PREFIX_OPCODE;
12586 break;
12587 case 3:
12588 vex.prefix = REPNE_PREFIX_OPCODE;
12589 break;
12590 }
12591 need_vex = 1;
12592 need_vex_reg = 1;
12593 codep++;
91d6fa6a
NC
12594 vindex = *codep++;
12595 dp = &xop_table[vex_table_index][vindex];
c48244a5 12596
285ca992 12597 end_codep = codep;
c48244a5
SP
12598 FETCH_DATA (info, codep + 1);
12599 modrm.mod = (*codep >> 6) & 3;
12600 modrm.reg = (*codep >> 3) & 7;
12601 modrm.rm = *codep & 7;
f88c9eb0
SP
12602 break;
12603
c0f3af97 12604 case USE_VEX_C4_TABLE:
43234a1e 12605 /* VEX prefix. */
c0f3af97
L
12606 FETCH_DATA (info, codep + 3);
12607 /* All bits in the REX prefix are ignored. */
12608 rex_ignored = rex;
12609 rex = ~(*codep >> 5) & 0x7;
12610 switch ((*codep & 0x1f))
12611 {
12612 default:
f07af43e
L
12613 dp = &bad_opcode;
12614 return dp;
c0f3af97 12615 case 0x1:
f88c9eb0 12616 vex_table_index = VEX_0F;
c0f3af97
L
12617 break;
12618 case 0x2:
f88c9eb0 12619 vex_table_index = VEX_0F38;
c0f3af97
L
12620 break;
12621 case 0x3:
f88c9eb0 12622 vex_table_index = VEX_0F3A;
c0f3af97
L
12623 break;
12624 }
12625 codep++;
12626 vex.w = *codep & 0x80;
12627 if (vex.w && address_mode == mode_64bit)
12628 rex |= REX_W;
12629
12630 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12631 if (address_mode != mode_64bit
12632 && vex.register_specifier > 0x7)
f07af43e
L
12633 {
12634 dp = &bad_opcode;
12635 return dp;
12636 }
c0f3af97
L
12637
12638 vex.length = (*codep & 0x4) ? 256 : 128;
12639 switch ((*codep & 0x3))
12640 {
12641 case 0:
12642 vex.prefix = 0;
12643 break;
12644 case 1:
12645 vex.prefix = DATA_PREFIX_OPCODE;
12646 break;
12647 case 2:
12648 vex.prefix = REPE_PREFIX_OPCODE;
12649 break;
12650 case 3:
12651 vex.prefix = REPNE_PREFIX_OPCODE;
12652 break;
12653 }
12654 need_vex = 1;
12655 need_vex_reg = 1;
12656 codep++;
91d6fa6a
NC
12657 vindex = *codep++;
12658 dp = &vex_table[vex_table_index][vindex];
285ca992 12659 end_codep = codep;
c0f3af97 12660 /* There is no MODRM byte for VEX [82|77]. */
91d6fa6a 12661 if (vindex != 0x77 && vindex != 0x82)
c0f3af97
L
12662 {
12663 FETCH_DATA (info, codep + 1);
12664 modrm.mod = (*codep >> 6) & 3;
12665 modrm.reg = (*codep >> 3) & 7;
12666 modrm.rm = *codep & 7;
12667 }
12668 break;
12669
12670 case USE_VEX_C5_TABLE:
43234a1e 12671 /* VEX prefix. */
c0f3af97
L
12672 FETCH_DATA (info, codep + 2);
12673 /* All bits in the REX prefix are ignored. */
12674 rex_ignored = rex;
12675 rex = (*codep & 0x80) ? 0 : REX_R;
12676
12677 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12678 if (address_mode != mode_64bit
12679 && vex.register_specifier > 0x7)
f07af43e
L
12680 {
12681 dp = &bad_opcode;
12682 return dp;
12683 }
c0f3af97 12684
759a05ce
L
12685 vex.w = 0;
12686
c0f3af97
L
12687 vex.length = (*codep & 0x4) ? 256 : 128;
12688 switch ((*codep & 0x3))
12689 {
12690 case 0:
12691 vex.prefix = 0;
12692 break;
12693 case 1:
12694 vex.prefix = DATA_PREFIX_OPCODE;
12695 break;
12696 case 2:
12697 vex.prefix = REPE_PREFIX_OPCODE;
12698 break;
12699 case 3:
12700 vex.prefix = REPNE_PREFIX_OPCODE;
12701 break;
12702 }
12703 need_vex = 1;
12704 need_vex_reg = 1;
12705 codep++;
91d6fa6a
NC
12706 vindex = *codep++;
12707 dp = &vex_table[dp->op[1].bytemode][vindex];
285ca992 12708 end_codep = codep;
c0f3af97 12709 /* There is no MODRM byte for VEX [82|77]. */
91d6fa6a 12710 if (vindex != 0x77 && vindex != 0x82)
c0f3af97
L
12711 {
12712 FETCH_DATA (info, codep + 1);
12713 modrm.mod = (*codep >> 6) & 3;
12714 modrm.reg = (*codep >> 3) & 7;
12715 modrm.rm = *codep & 7;
12716 }
12717 break;
12718
9e30b8e0
L
12719 case USE_VEX_W_TABLE:
12720 if (!need_vex)
12721 abort ();
12722
12723 dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
12724 break;
12725
43234a1e
L
12726 case USE_EVEX_TABLE:
12727 two_source_ops = 0;
12728 /* EVEX prefix. */
12729 vex.evex = 1;
12730 FETCH_DATA (info, codep + 4);
12731 /* All bits in the REX prefix are ignored. */
12732 rex_ignored = rex;
12733 /* The first byte after 0x62. */
12734 rex = ~(*codep >> 5) & 0x7;
12735 vex.r = *codep & 0x10;
12736 switch ((*codep & 0xf))
12737 {
12738 default:
12739 return &bad_opcode;
12740 case 0x1:
12741 vex_table_index = EVEX_0F;
12742 break;
12743 case 0x2:
12744 vex_table_index = EVEX_0F38;
12745 break;
12746 case 0x3:
12747 vex_table_index = EVEX_0F3A;
12748 break;
12749 }
12750
12751 /* The second byte after 0x62. */
12752 codep++;
12753 vex.w = *codep & 0x80;
12754 if (vex.w && address_mode == mode_64bit)
12755 rex |= REX_W;
12756
12757 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12758 if (address_mode != mode_64bit)
12759 {
12760 /* In 16/32-bit mode silently ignore following bits. */
12761 rex &= ~REX_B;
12762 vex.r = 1;
12763 vex.v = 1;
12764 vex.register_specifier &= 0x7;
12765 }
12766
12767 /* The U bit. */
12768 if (!(*codep & 0x4))
12769 return &bad_opcode;
12770
12771 switch ((*codep & 0x3))
12772 {
12773 case 0:
12774 vex.prefix = 0;
12775 break;
12776 case 1:
12777 vex.prefix = DATA_PREFIX_OPCODE;
12778 break;
12779 case 2:
12780 vex.prefix = REPE_PREFIX_OPCODE;
12781 break;
12782 case 3:
12783 vex.prefix = REPNE_PREFIX_OPCODE;
12784 break;
12785 }
12786
12787 /* The third byte after 0x62. */
12788 codep++;
12789
12790 /* Remember the static rounding bits. */
12791 vex.ll = (*codep >> 5) & 3;
12792 vex.b = (*codep & 0x10) != 0;
12793
12794 vex.v = *codep & 0x8;
12795 vex.mask_register_specifier = *codep & 0x7;
12796 vex.zeroing = *codep & 0x80;
12797
12798 need_vex = 1;
12799 need_vex_reg = 1;
12800 codep++;
12801 vindex = *codep++;
12802 dp = &evex_table[vex_table_index][vindex];
285ca992 12803 end_codep = codep;
43234a1e
L
12804 FETCH_DATA (info, codep + 1);
12805 modrm.mod = (*codep >> 6) & 3;
12806 modrm.reg = (*codep >> 3) & 7;
12807 modrm.rm = *codep & 7;
12808
12809 /* Set vector length. */
12810 if (modrm.mod == 3 && vex.b)
12811 vex.length = 512;
12812 else
12813 {
12814 switch (vex.ll)
12815 {
12816 case 0x0:
12817 vex.length = 128;
12818 break;
12819 case 0x1:
12820 vex.length = 256;
12821 break;
12822 case 0x2:
12823 vex.length = 512;
12824 break;
12825 default:
12826 return &bad_opcode;
12827 }
12828 }
12829 break;
12830
592d1631
L
12831 case 0:
12832 dp = &bad_opcode;
12833 break;
12834
b844680a 12835 default:
d34b5006 12836 abort ();
b844680a
L
12837 }
12838
12839 if (dp->name != NULL)
12840 return dp;
12841 else
8bb15339 12842 return get_valid_dis386 (dp, info);
b844680a
L
12843}
12844
dfc8cf43 12845static void
55cf16e1 12846get_sib (disassemble_info *info, int sizeflag)
dfc8cf43
L
12847{
12848 /* If modrm.mod == 3, operand must be register. */
12849 if (need_modrm
55cf16e1 12850 && ((sizeflag & AFLAG) || address_mode == mode_64bit)
dfc8cf43
L
12851 && modrm.mod != 3
12852 && modrm.rm == 4)
12853 {
12854 FETCH_DATA (info, codep + 2);
12855 sib.index = (codep [1] >> 3) & 7;
12856 sib.scale = (codep [1] >> 6) & 3;
12857 sib.base = codep [1] & 7;
12858 }
12859}
12860
e396998b 12861static int
26ca5450 12862print_insn (bfd_vma pc, disassemble_info *info)
252b5132 12863{
2da11e11 12864 const struct dis386 *dp;
252b5132 12865 int i;
ce518a5f 12866 char *op_txt[MAX_OPERANDS];
252b5132 12867 int needcomma;
df18fdba 12868 int sizeflag, orig_sizeflag;
e396998b 12869 const char *p;
252b5132 12870 struct dis_private priv;
f16cd0d5 12871 int prefix_length;
252b5132 12872
d7921315
L
12873 priv.orig_sizeflag = AFLAG | DFLAG;
12874 if ((info->mach & bfd_mach_i386_i386) != 0)
cb712a9e 12875 address_mode = mode_32bit;
2da11e11 12876 else if (info->mach == bfd_mach_i386_i8086)
d7921315
L
12877 {
12878 address_mode = mode_16bit;
12879 priv.orig_sizeflag = 0;
12880 }
2da11e11 12881 else
d7921315
L
12882 address_mode = mode_64bit;
12883
12884 if (intel_syntax == (char) -1)
12885 intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
e396998b
AM
12886
12887 for (p = info->disassembler_options; p != NULL; )
12888 {
5db04b09
L
12889 if (CONST_STRNEQ (p, "amd64"))
12890 isa64 = amd64;
12891 else if (CONST_STRNEQ (p, "intel64"))
12892 isa64 = intel64;
12893 else if (CONST_STRNEQ (p, "x86-64"))
e396998b 12894 {
cb712a9e 12895 address_mode = mode_64bit;
e396998b
AM
12896 priv.orig_sizeflag = AFLAG | DFLAG;
12897 }
0112cd26 12898 else if (CONST_STRNEQ (p, "i386"))
e396998b 12899 {
cb712a9e 12900 address_mode = mode_32bit;
e396998b
AM
12901 priv.orig_sizeflag = AFLAG | DFLAG;
12902 }
0112cd26 12903 else if (CONST_STRNEQ (p, "i8086"))
e396998b 12904 {
cb712a9e 12905 address_mode = mode_16bit;
e396998b
AM
12906 priv.orig_sizeflag = 0;
12907 }
0112cd26 12908 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
12909 {
12910 intel_syntax = 1;
9d141669
L
12911 if (CONST_STRNEQ (p + 5, "-mnemonic"))
12912 intel_mnemonic = 1;
e396998b 12913 }
0112cd26 12914 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
12915 {
12916 intel_syntax = 0;
9d141669
L
12917 if (CONST_STRNEQ (p + 3, "-mnemonic"))
12918 intel_mnemonic = 0;
e396998b 12919 }
0112cd26 12920 else if (CONST_STRNEQ (p, "addr"))
e396998b 12921 {
f59a29b9
L
12922 if (address_mode == mode_64bit)
12923 {
12924 if (p[4] == '3' && p[5] == '2')
12925 priv.orig_sizeflag &= ~AFLAG;
12926 else if (p[4] == '6' && p[5] == '4')
12927 priv.orig_sizeflag |= AFLAG;
12928 }
12929 else
12930 {
12931 if (p[4] == '1' && p[5] == '6')
12932 priv.orig_sizeflag &= ~AFLAG;
12933 else if (p[4] == '3' && p[5] == '2')
12934 priv.orig_sizeflag |= AFLAG;
12935 }
e396998b 12936 }
0112cd26 12937 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
12938 {
12939 if (p[4] == '1' && p[5] == '6')
12940 priv.orig_sizeflag &= ~DFLAG;
12941 else if (p[4] == '3' && p[5] == '2')
12942 priv.orig_sizeflag |= DFLAG;
12943 }
0112cd26 12944 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
12945 priv.orig_sizeflag |= SUFFIX_ALWAYS;
12946
12947 p = strchr (p, ',');
12948 if (p != NULL)
12949 p++;
12950 }
12951
12952 if (intel_syntax)
12953 {
12954 names64 = intel_names64;
12955 names32 = intel_names32;
12956 names16 = intel_names16;
12957 names8 = intel_names8;
12958 names8rex = intel_names8rex;
12959 names_seg = intel_names_seg;
b9733481 12960 names_mm = intel_names_mm;
7e8b059b 12961 names_bnd = intel_names_bnd;
b9733481
L
12962 names_xmm = intel_names_xmm;
12963 names_ymm = intel_names_ymm;
43234a1e 12964 names_zmm = intel_names_zmm;
db51cc60
L
12965 index64 = intel_index64;
12966 index32 = intel_index32;
43234a1e 12967 names_mask = intel_names_mask;
e396998b
AM
12968 index16 = intel_index16;
12969 open_char = '[';
12970 close_char = ']';
12971 separator_char = '+';
12972 scale_char = '*';
12973 }
12974 else
12975 {
12976 names64 = att_names64;
12977 names32 = att_names32;
12978 names16 = att_names16;
12979 names8 = att_names8;
12980 names8rex = att_names8rex;
12981 names_seg = att_names_seg;
b9733481 12982 names_mm = att_names_mm;
7e8b059b 12983 names_bnd = att_names_bnd;
b9733481
L
12984 names_xmm = att_names_xmm;
12985 names_ymm = att_names_ymm;
43234a1e 12986 names_zmm = att_names_zmm;
db51cc60
L
12987 index64 = att_index64;
12988 index32 = att_index32;
43234a1e 12989 names_mask = att_names_mask;
e396998b
AM
12990 index16 = att_index16;
12991 open_char = '(';
12992 close_char = ')';
12993 separator_char = ',';
12994 scale_char = ',';
12995 }
2da11e11 12996
4fe53c98 12997 /* The output looks better if we put 7 bytes on a line, since that
8a9036a4
L
12998 puts most long word instructions on a single line. Use 8 bytes
12999 for Intel L1OM. */
d7921315 13000 if ((info->mach & bfd_mach_l1om) != 0)
8a9036a4
L
13001 info->bytes_per_line = 8;
13002 else
13003 info->bytes_per_line = 7;
252b5132 13004
26ca5450 13005 info->private_data = &priv;
252b5132
RH
13006 priv.max_fetched = priv.the_buffer;
13007 priv.insn_start = pc;
252b5132
RH
13008
13009 obuf[0] = 0;
ce518a5f
L
13010 for (i = 0; i < MAX_OPERANDS; ++i)
13011 {
13012 op_out[i][0] = 0;
13013 op_index[i] = -1;
13014 }
252b5132
RH
13015
13016 the_info = info;
13017 start_pc = pc;
e396998b
AM
13018 start_codep = priv.the_buffer;
13019 codep = priv.the_buffer;
252b5132 13020
8df14d78 13021 if (OPCODES_SIGSETJMP (priv.bailout) != 0)
5076851f 13022 {
7d421014
ILT
13023 const char *name;
13024
5076851f 13025 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
13026 means we have an incomplete instruction of some sort. Just
13027 print the first byte as a prefix or a .byte pseudo-op. */
13028 if (codep > priv.the_buffer)
5076851f 13029 {
e396998b 13030 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
13031 if (name != NULL)
13032 (*info->fprintf_func) (info->stream, "%s", name);
13033 else
5076851f 13034 {
7d421014
ILT
13035 /* Just print the first byte as a .byte instruction. */
13036 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 13037 (unsigned int) priv.the_buffer[0]);
5076851f 13038 }
5076851f 13039
7d421014 13040 return 1;
5076851f
ILT
13041 }
13042
13043 return -1;
13044 }
13045
52b15da3 13046 obufp = obuf;
f16cd0d5
L
13047 sizeflag = priv.orig_sizeflag;
13048
13049 if (!ckprefix () || rex_used)
13050 {
13051 /* Too many prefixes or unused REX prefixes. */
13052 for (i = 0;
f6dd4781 13053 i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
f16cd0d5 13054 i++)
de882298 13055 (*info->fprintf_func) (info->stream, "%s%s",
6c067bbb 13056 i == 0 ? "" : " ",
f16cd0d5 13057 prefix_name (all_prefixes[i], sizeflag));
de882298 13058 return i;
f16cd0d5 13059 }
252b5132
RH
13060
13061 insn_codep = codep;
13062
13063 FETCH_DATA (info, codep + 1);
13064 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
13065
3e7d61b2 13066 if (((prefixes & PREFIX_FWAIT)
f16cd0d5 13067 && ((*codep < 0xd8) || (*codep > 0xdf))))
252b5132 13068 {
86a80a50 13069 /* Handle prefixes before fwait. */
d9949a36 13070 for (i = 0; i < fwait_prefix && all_prefixes[i];
86a80a50
L
13071 i++)
13072 (*info->fprintf_func) (info->stream, "%s ",
13073 prefix_name (all_prefixes[i], sizeflag));
f16cd0d5 13074 (*info->fprintf_func) (info->stream, "fwait");
86a80a50 13075 return i + 1;
252b5132
RH
13076 }
13077
252b5132
RH
13078 if (*codep == 0x0f)
13079 {
eec0f4ca 13080 unsigned char threebyte;
252b5132 13081 FETCH_DATA (info, codep + 2);
eec0f4ca
L
13082 threebyte = *++codep;
13083 dp = &dis386_twobyte[threebyte];
252b5132 13084 need_modrm = twobyte_has_modrm[*codep];
eec0f4ca 13085 codep++;
252b5132
RH
13086 }
13087 else
13088 {
6439fc28 13089 dp = &dis386[*codep];
252b5132 13090 need_modrm = onebyte_has_modrm[*codep];
eec0f4ca 13091 codep++;
252b5132 13092 }
246c51aa 13093
df18fdba
L
13094 /* Save sizeflag for printing the extra prefixes later before updating
13095 it for mnemonic and operand processing. The prefix names depend
13096 only on the address mode. */
13097 orig_sizeflag = sizeflag;
c608c12e 13098 if (prefixes & PREFIX_ADDR)
df18fdba 13099 sizeflag ^= AFLAG;
b844680a 13100 if ((prefixes & PREFIX_DATA))
df18fdba 13101 sizeflag ^= DFLAG;
3ffd33cf 13102
285ca992 13103 end_codep = codep;
8bb15339 13104 if (need_modrm)
252b5132
RH
13105 {
13106 FETCH_DATA (info, codep + 1);
7967e09e
L
13107 modrm.mod = (*codep >> 6) & 3;
13108 modrm.reg = (*codep >> 3) & 7;
13109 modrm.rm = *codep & 7;
252b5132
RH
13110 }
13111
42d5f9c6
MS
13112 need_vex = 0;
13113 need_vex_reg = 0;
13114 vex_w_done = 0;
43234a1e 13115 vex.evex = 0;
55b126d4 13116
ce518a5f 13117 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132 13118 {
55cf16e1 13119 get_sib (info, sizeflag);
252b5132
RH
13120 dofloat (sizeflag);
13121 }
13122 else
13123 {
8bb15339 13124 dp = get_valid_dis386 (dp, info);
b844680a 13125 if (dp != NULL && putop (dp->name, sizeflag) == 0)
6c067bbb 13126 {
55cf16e1 13127 get_sib (info, sizeflag);
ce518a5f
L
13128 for (i = 0; i < MAX_OPERANDS; ++i)
13129 {
246c51aa 13130 obufp = op_out[i];
ce518a5f
L
13131 op_ad = MAX_OPERANDS - 1 - i;
13132 if (dp->op[i].rtn)
13133 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
43234a1e
L
13134 /* For EVEX instruction after the last operand masking
13135 should be printed. */
13136 if (i == 0 && vex.evex)
13137 {
13138 /* Don't print {%k0}. */
13139 if (vex.mask_register_specifier)
13140 {
13141 oappend ("{");
13142 oappend (names_mask[vex.mask_register_specifier]);
13143 oappend ("}");
13144 }
13145 if (vex.zeroing)
13146 oappend ("{z}");
13147 }
ce518a5f 13148 }
6439fc28 13149 }
252b5132
RH
13150 }
13151
d869730d 13152 /* Check if the REX prefix is used. */
e2e6193d 13153 if (rex_ignored == 0 && (rex ^ rex_used) == 0 && last_rex_prefix >= 0)
f16cd0d5
L
13154 all_prefixes[last_rex_prefix] = 0;
13155
5e6718e4 13156 /* Check if the SEG prefix is used. */
f16cd0d5
L
13157 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
13158 | PREFIX_FS | PREFIX_GS)) != 0
285ca992 13159 && (used_prefixes & active_seg_prefix) != 0)
f16cd0d5
L
13160 all_prefixes[last_seg_prefix] = 0;
13161
5e6718e4 13162 /* Check if the ADDR prefix is used. */
f16cd0d5
L
13163 if ((prefixes & PREFIX_ADDR) != 0
13164 && (used_prefixes & PREFIX_ADDR) != 0)
13165 all_prefixes[last_addr_prefix] = 0;
13166
df18fdba
L
13167 /* Check if the DATA prefix is used. */
13168 if ((prefixes & PREFIX_DATA) != 0
13169 && (used_prefixes & PREFIX_DATA) != 0)
13170 all_prefixes[last_data_prefix] = 0;
f16cd0d5 13171
df18fdba 13172 /* Print the extra prefixes. */
f16cd0d5 13173 prefix_length = 0;
f310f33d 13174 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
f16cd0d5
L
13175 if (all_prefixes[i])
13176 {
13177 const char *name;
df18fdba 13178 name = prefix_name (all_prefixes[i], orig_sizeflag);
f16cd0d5
L
13179 if (name == NULL)
13180 abort ();
13181 prefix_length += strlen (name) + 1;
13182 (*info->fprintf_func) (info->stream, "%s ", name);
13183 }
b844680a 13184
285ca992
L
13185 /* If the mandatory PREFIX_REPZ/PREFIX_REPNZ/PREFIX_DATA prefix is
13186 unused, opcode is invalid. Since the PREFIX_DATA prefix may be
13187 used by putop and MMX/SSE operand and may be overriden by the
13188 PREFIX_REPZ/PREFIX_REPNZ fix, we check the PREFIX_DATA prefix
13189 separately. */
3888916d 13190 if (dp->prefix_requirement == PREFIX_OPCODE
285ca992
L
13191 && dp != &bad_opcode
13192 && (((prefixes
13193 & (PREFIX_REPZ | PREFIX_REPNZ)) != 0
13194 && (used_prefixes
13195 & (PREFIX_REPZ | PREFIX_REPNZ)) == 0)
13196 || ((((prefixes
13197 & (PREFIX_REPZ | PREFIX_REPNZ | PREFIX_DATA))
13198 == PREFIX_DATA)
13199 && (used_prefixes & PREFIX_DATA) == 0))))
13200 {
13201 (*info->fprintf_func) (info->stream, "(bad)");
13202 return end_codep - priv.the_buffer;
13203 }
13204
f16cd0d5
L
13205 /* Check maximum code length. */
13206 if ((codep - start_codep) > MAX_CODE_LENGTH)
13207 {
13208 (*info->fprintf_func) (info->stream, "(bad)");
13209 return MAX_CODE_LENGTH;
13210 }
b844680a 13211
ea397f5b 13212 obufp = mnemonicendp;
f16cd0d5 13213 for (i = strlen (obuf) + prefix_length; i < 6; i++)
252b5132
RH
13214 oappend (" ");
13215 oappend (" ");
13216 (*info->fprintf_func) (info->stream, "%s", obuf);
13217
13218 /* The enter and bound instructions are printed with operands in the same
13219 order as the intel book; everything else is printed in reverse order. */
2da11e11 13220 if (intel_syntax || two_source_ops)
252b5132 13221 {
185b1163
L
13222 bfd_vma riprel;
13223
ce518a5f 13224 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 13225 op_txt[i] = op_out[i];
246c51aa 13226
ce518a5f
L
13227 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
13228 {
6c067bbb
RM
13229 op_ad = op_index[i];
13230 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
13231 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
13232 riprel = op_riprel[i];
13233 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
13234 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 13235 }
252b5132
RH
13236 }
13237 else
13238 {
ce518a5f 13239 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 13240 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
13241 }
13242
ce518a5f
L
13243 needcomma = 0;
13244 for (i = 0; i < MAX_OPERANDS; ++i)
13245 if (*op_txt[i])
13246 {
13247 if (needcomma)
13248 (*info->fprintf_func) (info->stream, ",");
13249 if (op_index[i] != -1 && !op_riprel[i])
13250 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
13251 else
13252 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
13253 needcomma = 1;
13254 }
050dfa73 13255
ce518a5f 13256 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
13257 if (op_index[i] != -1 && op_riprel[i])
13258 {
13259 (*info->fprintf_func) (info->stream, " # ");
13260 (*info->print_address_func) ((bfd_vma) (start_pc + codep - start_codep
13261 + op_address[op_index[i]]), info);
185b1163 13262 break;
52b15da3 13263 }
e396998b 13264 return codep - priv.the_buffer;
252b5132
RH
13265}
13266
6439fc28 13267static const char *float_mem[] = {
252b5132 13268 /* d8 */
7c52e0e8
L
13269 "fadd{s|}",
13270 "fmul{s|}",
13271 "fcom{s|}",
13272 "fcomp{s|}",
13273 "fsub{s|}",
13274 "fsubr{s|}",
13275 "fdiv{s|}",
13276 "fdivr{s|}",
db6eb5be 13277 /* d9 */
7c52e0e8 13278 "fld{s|}",
252b5132 13279 "(bad)",
7c52e0e8
L
13280 "fst{s|}",
13281 "fstp{s|}",
9306ca4a 13282 "fldenvIC",
252b5132 13283 "fldcw",
9306ca4a 13284 "fNstenvIC",
252b5132
RH
13285 "fNstcw",
13286 /* da */
7c52e0e8
L
13287 "fiadd{l|}",
13288 "fimul{l|}",
13289 "ficom{l|}",
13290 "ficomp{l|}",
13291 "fisub{l|}",
13292 "fisubr{l|}",
13293 "fidiv{l|}",
13294 "fidivr{l|}",
252b5132 13295 /* db */
7c52e0e8
L
13296 "fild{l|}",
13297 "fisttp{l|}",
13298 "fist{l|}",
13299 "fistp{l|}",
252b5132 13300 "(bad)",
6439fc28 13301 "fld{t||t|}",
252b5132 13302 "(bad)",
6439fc28 13303 "fstp{t||t|}",
252b5132 13304 /* dc */
7c52e0e8
L
13305 "fadd{l|}",
13306 "fmul{l|}",
13307 "fcom{l|}",
13308 "fcomp{l|}",
13309 "fsub{l|}",
13310 "fsubr{l|}",
13311 "fdiv{l|}",
13312 "fdivr{l|}",
252b5132 13313 /* dd */
7c52e0e8
L
13314 "fld{l|}",
13315 "fisttp{ll|}",
13316 "fst{l||}",
13317 "fstp{l|}",
9306ca4a 13318 "frstorIC",
252b5132 13319 "(bad)",
9306ca4a 13320 "fNsaveIC",
252b5132
RH
13321 "fNstsw",
13322 /* de */
13323 "fiadd",
13324 "fimul",
13325 "ficom",
13326 "ficomp",
13327 "fisub",
13328 "fisubr",
13329 "fidiv",
13330 "fidivr",
13331 /* df */
13332 "fild",
ca164297 13333 "fisttp",
252b5132
RH
13334 "fist",
13335 "fistp",
13336 "fbld",
7c52e0e8 13337 "fild{ll|}",
252b5132 13338 "fbstp",
7c52e0e8 13339 "fistp{ll|}",
1d9f512f
AM
13340};
13341
13342static const unsigned char float_mem_mode[] = {
13343 /* d8 */
13344 d_mode,
13345 d_mode,
13346 d_mode,
13347 d_mode,
13348 d_mode,
13349 d_mode,
13350 d_mode,
13351 d_mode,
13352 /* d9 */
13353 d_mode,
13354 0,
13355 d_mode,
13356 d_mode,
13357 0,
13358 w_mode,
13359 0,
13360 w_mode,
13361 /* da */
13362 d_mode,
13363 d_mode,
13364 d_mode,
13365 d_mode,
13366 d_mode,
13367 d_mode,
13368 d_mode,
13369 d_mode,
13370 /* db */
13371 d_mode,
13372 d_mode,
13373 d_mode,
13374 d_mode,
13375 0,
9306ca4a 13376 t_mode,
1d9f512f 13377 0,
9306ca4a 13378 t_mode,
1d9f512f
AM
13379 /* dc */
13380 q_mode,
13381 q_mode,
13382 q_mode,
13383 q_mode,
13384 q_mode,
13385 q_mode,
13386 q_mode,
13387 q_mode,
13388 /* dd */
13389 q_mode,
13390 q_mode,
13391 q_mode,
13392 q_mode,
13393 0,
13394 0,
13395 0,
13396 w_mode,
13397 /* de */
13398 w_mode,
13399 w_mode,
13400 w_mode,
13401 w_mode,
13402 w_mode,
13403 w_mode,
13404 w_mode,
13405 w_mode,
13406 /* df */
13407 w_mode,
13408 w_mode,
13409 w_mode,
13410 w_mode,
9306ca4a 13411 t_mode,
1d9f512f 13412 q_mode,
9306ca4a 13413 t_mode,
1d9f512f 13414 q_mode
252b5132
RH
13415};
13416
ce518a5f
L
13417#define ST { OP_ST, 0 }
13418#define STi { OP_STi, 0 }
252b5132 13419
bf890a93
IT
13420#define FGRPd9_2 NULL, { { NULL, 0 } }, 0
13421#define FGRPd9_4 NULL, { { NULL, 1 } }, 0
13422#define FGRPd9_5 NULL, { { NULL, 2 } }, 0
13423#define FGRPd9_6 NULL, { { NULL, 3 } }, 0
13424#define FGRPd9_7 NULL, { { NULL, 4 } }, 0
13425#define FGRPda_5 NULL, { { NULL, 5 } }, 0
13426#define FGRPdb_4 NULL, { { NULL, 6 } }, 0
13427#define FGRPde_3 NULL, { { NULL, 7 } }, 0
13428#define FGRPdf_4 NULL, { { NULL, 8 } }, 0
252b5132 13429
2da11e11 13430static const struct dis386 float_reg[][8] = {
252b5132
RH
13431 /* d8 */
13432 {
bf890a93
IT
13433 { "fadd", { ST, STi }, 0 },
13434 { "fmul", { ST, STi }, 0 },
13435 { "fcom", { STi }, 0 },
13436 { "fcomp", { STi }, 0 },
13437 { "fsub", { ST, STi }, 0 },
13438 { "fsubr", { ST, STi }, 0 },
13439 { "fdiv", { ST, STi }, 0 },
13440 { "fdivr", { ST, STi }, 0 },
252b5132
RH
13441 },
13442 /* d9 */
13443 {
bf890a93
IT
13444 { "fld", { STi }, 0 },
13445 { "fxch", { STi }, 0 },
252b5132 13446 { FGRPd9_2 },
592d1631 13447 { Bad_Opcode },
252b5132
RH
13448 { FGRPd9_4 },
13449 { FGRPd9_5 },
13450 { FGRPd9_6 },
13451 { FGRPd9_7 },
13452 },
13453 /* da */
13454 {
bf890a93
IT
13455 { "fcmovb", { ST, STi }, 0 },
13456 { "fcmove", { ST, STi }, 0 },
13457 { "fcmovbe",{ ST, STi }, 0 },
13458 { "fcmovu", { ST, STi }, 0 },
592d1631 13459 { Bad_Opcode },
252b5132 13460 { FGRPda_5 },
592d1631
L
13461 { Bad_Opcode },
13462 { Bad_Opcode },
252b5132
RH
13463 },
13464 /* db */
13465 {
bf890a93
IT
13466 { "fcmovnb",{ ST, STi }, 0 },
13467 { "fcmovne",{ ST, STi }, 0 },
13468 { "fcmovnbe",{ ST, STi }, 0 },
13469 { "fcmovnu",{ ST, STi }, 0 },
252b5132 13470 { FGRPdb_4 },
bf890a93
IT
13471 { "fucomi", { ST, STi }, 0 },
13472 { "fcomi", { ST, STi }, 0 },
592d1631 13473 { Bad_Opcode },
252b5132
RH
13474 },
13475 /* dc */
13476 {
bf890a93
IT
13477 { "fadd", { STi, ST }, 0 },
13478 { "fmul", { STi, ST }, 0 },
592d1631
L
13479 { Bad_Opcode },
13480 { Bad_Opcode },
bf890a93
IT
13481 { "fsub!M", { STi, ST }, 0 },
13482 { "fsubM", { STi, ST }, 0 },
13483 { "fdiv!M", { STi, ST }, 0 },
13484 { "fdivM", { STi, ST }, 0 },
252b5132
RH
13485 },
13486 /* dd */
13487 {
bf890a93 13488 { "ffree", { STi }, 0 },
592d1631 13489 { Bad_Opcode },
bf890a93
IT
13490 { "fst", { STi }, 0 },
13491 { "fstp", { STi }, 0 },
13492 { "fucom", { STi }, 0 },
13493 { "fucomp", { STi }, 0 },
592d1631
L
13494 { Bad_Opcode },
13495 { Bad_Opcode },
252b5132
RH
13496 },
13497 /* de */
13498 {
bf890a93
IT
13499 { "faddp", { STi, ST }, 0 },
13500 { "fmulp", { STi, ST }, 0 },
592d1631 13501 { Bad_Opcode },
252b5132 13502 { FGRPde_3 },
bf890a93
IT
13503 { "fsub!Mp", { STi, ST }, 0 },
13504 { "fsubMp", { STi, ST }, 0 },
13505 { "fdiv!Mp", { STi, ST }, 0 },
13506 { "fdivMp", { STi, ST }, 0 },
252b5132
RH
13507 },
13508 /* df */
13509 {
bf890a93 13510 { "ffreep", { STi }, 0 },
592d1631
L
13511 { Bad_Opcode },
13512 { Bad_Opcode },
13513 { Bad_Opcode },
252b5132 13514 { FGRPdf_4 },
bf890a93
IT
13515 { "fucomip", { ST, STi }, 0 },
13516 { "fcomip", { ST, STi }, 0 },
592d1631 13517 { Bad_Opcode },
252b5132
RH
13518 },
13519};
13520
252b5132
RH
13521static char *fgrps[][8] = {
13522 /* d9_2 0 */
13523 {
13524 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13525 },
13526
13527 /* d9_4 1 */
13528 {
13529 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
13530 },
13531
13532 /* d9_5 2 */
13533 {
13534 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
13535 },
13536
13537 /* d9_6 3 */
13538 {
13539 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
13540 },
13541
13542 /* d9_7 4 */
13543 {
13544 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
13545 },
13546
13547 /* da_5 5 */
13548 {
13549 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13550 },
13551
13552 /* db_4 6 */
13553 {
309d3373
JB
13554 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
13555 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
252b5132
RH
13556 },
13557
13558 /* de_3 7 */
13559 {
13560 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13561 },
13562
13563 /* df_4 8 */
13564 {
13565 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13566 },
13567};
13568
b6169b20
L
13569static void
13570swap_operand (void)
13571{
13572 mnemonicendp[0] = '.';
13573 mnemonicendp[1] = 's';
13574 mnemonicendp += 2;
13575}
13576
b844680a
L
13577static void
13578OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
13579 int sizeflag ATTRIBUTE_UNUSED)
13580{
13581 /* Skip mod/rm byte. */
13582 MODRM_CHECK;
13583 codep++;
13584}
13585
252b5132 13586static void
26ca5450 13587dofloat (int sizeflag)
252b5132 13588{
2da11e11 13589 const struct dis386 *dp;
252b5132
RH
13590 unsigned char floatop;
13591
13592 floatop = codep[-1];
13593
7967e09e 13594 if (modrm.mod != 3)
252b5132 13595 {
7967e09e 13596 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
13597
13598 putop (float_mem[fp_indx], sizeflag);
ce518a5f 13599 obufp = op_out[0];
6e50d963 13600 op_ad = 2;
1d9f512f 13601 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
13602 return;
13603 }
6608db57 13604 /* Skip mod/rm byte. */
4bba6815 13605 MODRM_CHECK;
252b5132
RH
13606 codep++;
13607
7967e09e 13608 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
13609 if (dp->name == NULL)
13610 {
7967e09e 13611 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 13612
6608db57 13613 /* Instruction fnstsw is only one with strange arg. */
252b5132 13614 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 13615 strcpy (op_out[0], names16[0]);
252b5132
RH
13616 }
13617 else
13618 {
13619 putop (dp->name, sizeflag);
13620
ce518a5f 13621 obufp = op_out[0];
6e50d963 13622 op_ad = 2;
ce518a5f
L
13623 if (dp->op[0].rtn)
13624 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 13625
ce518a5f 13626 obufp = op_out[1];
6e50d963 13627 op_ad = 1;
ce518a5f
L
13628 if (dp->op[1].rtn)
13629 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
13630 }
13631}
13632
9ce09ba2
RM
13633/* Like oappend (below), but S is a string starting with '%'.
13634 In Intel syntax, the '%' is elided. */
13635static void
13636oappend_maybe_intel (const char *s)
13637{
13638 oappend (s + intel_syntax);
13639}
13640
252b5132 13641static void
26ca5450 13642OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13643{
9ce09ba2 13644 oappend_maybe_intel ("%st");
252b5132
RH
13645}
13646
252b5132 13647static void
26ca5450 13648OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13649{
7967e09e 13650 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
9ce09ba2 13651 oappend_maybe_intel (scratchbuf);
252b5132
RH
13652}
13653
6608db57 13654/* Capital letters in template are macros. */
6439fc28 13655static int
d3ce72d0 13656putop (const char *in_template, int sizeflag)
252b5132 13657{
2da11e11 13658 const char *p;
9306ca4a 13659 int alt = 0;
9d141669 13660 int cond = 1;
98b528ac
L
13661 unsigned int l = 0, len = 1;
13662 char last[4];
13663
13664#define SAVE_LAST(c) \
13665 if (l < len && l < sizeof (last)) \
13666 last[l++] = c; \
13667 else \
13668 abort ();
252b5132 13669
d3ce72d0 13670 for (p = in_template; *p; p++)
252b5132
RH
13671 {
13672 switch (*p)
13673 {
13674 default:
13675 *obufp++ = *p;
13676 break;
98b528ac
L
13677 case '%':
13678 len++;
13679 break;
9d141669
L
13680 case '!':
13681 cond = 0;
13682 break;
6439fc28
AM
13683 case '{':
13684 alt = 0;
13685 if (intel_syntax)
6439fc28
AM
13686 {
13687 while (*++p != '|')
7c52e0e8
L
13688 if (*p == '}' || *p == '\0')
13689 abort ();
6439fc28 13690 }
9306ca4a
JB
13691 /* Fall through. */
13692 case 'I':
13693 alt = 1;
13694 continue;
6439fc28
AM
13695 case '|':
13696 while (*++p != '}')
13697 {
13698 if (*p == '\0')
13699 abort ();
13700 }
13701 break;
13702 case '}':
13703 break;
252b5132 13704 case 'A':
db6eb5be
AM
13705 if (intel_syntax)
13706 break;
7967e09e 13707 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
13708 *obufp++ = 'b';
13709 break;
13710 case 'B':
4b06377f
L
13711 if (l == 0 && len == 1)
13712 {
13713case_B:
13714 if (intel_syntax)
13715 break;
13716 if (sizeflag & SUFFIX_ALWAYS)
13717 *obufp++ = 'b';
13718 }
13719 else
13720 {
13721 if (l != 1
13722 || len != 2
13723 || last[0] != 'L')
13724 {
13725 SAVE_LAST (*p);
13726 break;
13727 }
13728
13729 if (address_mode == mode_64bit
13730 && !(prefixes & PREFIX_ADDR))
13731 {
13732 *obufp++ = 'a';
13733 *obufp++ = 'b';
13734 *obufp++ = 's';
13735 }
13736
13737 goto case_B;
13738 }
252b5132 13739 break;
9306ca4a
JB
13740 case 'C':
13741 if (intel_syntax && !alt)
13742 break;
13743 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
13744 {
13745 if (sizeflag & DFLAG)
13746 *obufp++ = intel_syntax ? 'd' : 'l';
13747 else
13748 *obufp++ = intel_syntax ? 'w' : 's';
13749 used_prefixes |= (prefixes & PREFIX_DATA);
13750 }
13751 break;
ed7841b3
JB
13752 case 'D':
13753 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
13754 break;
161a04f6 13755 USED_REX (REX_W);
7967e09e 13756 if (modrm.mod == 3)
ed7841b3 13757 {
161a04f6 13758 if (rex & REX_W)
ed7841b3 13759 *obufp++ = 'q';
ed7841b3 13760 else
f16cd0d5
L
13761 {
13762 if (sizeflag & DFLAG)
13763 *obufp++ = intel_syntax ? 'd' : 'l';
13764 else
13765 *obufp++ = 'w';
13766 used_prefixes |= (prefixes & PREFIX_DATA);
13767 }
ed7841b3
JB
13768 }
13769 else
13770 *obufp++ = 'w';
13771 break;
252b5132 13772 case 'E': /* For jcxz/jecxz */
cb712a9e 13773 if (address_mode == mode_64bit)
c1a64871
JH
13774 {
13775 if (sizeflag & AFLAG)
13776 *obufp++ = 'r';
13777 else
13778 *obufp++ = 'e';
13779 }
13780 else
13781 if (sizeflag & AFLAG)
13782 *obufp++ = 'e';
3ffd33cf
AM
13783 used_prefixes |= (prefixes & PREFIX_ADDR);
13784 break;
13785 case 'F':
db6eb5be
AM
13786 if (intel_syntax)
13787 break;
e396998b 13788 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
13789 {
13790 if (sizeflag & AFLAG)
cb712a9e 13791 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 13792 else
cb712a9e 13793 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
13794 used_prefixes |= (prefixes & PREFIX_ADDR);
13795 }
252b5132 13796 break;
52fd6d94
JB
13797 case 'G':
13798 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
13799 break;
161a04f6 13800 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
13801 *obufp++ = 'l';
13802 else
13803 *obufp++ = 'w';
161a04f6 13804 if (!(rex & REX_W))
52fd6d94
JB
13805 used_prefixes |= (prefixes & PREFIX_DATA);
13806 break;
5dd0794d 13807 case 'H':
db6eb5be
AM
13808 if (intel_syntax)
13809 break;
5dd0794d
AM
13810 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
13811 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
13812 {
13813 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
13814 *obufp++ = ',';
13815 *obufp++ = 'p';
13816 if (prefixes & PREFIX_DS)
13817 *obufp++ = 't';
13818 else
13819 *obufp++ = 'n';
13820 }
13821 break;
9306ca4a
JB
13822 case 'J':
13823 if (intel_syntax)
13824 break;
13825 *obufp++ = 'l';
13826 break;
42903f7f
L
13827 case 'K':
13828 USED_REX (REX_W);
13829 if (rex & REX_W)
13830 *obufp++ = 'q';
13831 else
13832 *obufp++ = 'd';
13833 break;
6dd5059a 13834 case 'Z':
04d824a4
JB
13835 if (l != 0 || len != 1)
13836 {
13837 if (l != 1 || len != 2 || last[0] != 'X')
13838 {
13839 SAVE_LAST (*p);
13840 break;
13841 }
13842 if (!need_vex || !vex.evex)
13843 abort ();
13844 if (intel_syntax
13845 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
13846 break;
13847 switch (vex.length)
13848 {
13849 case 128:
13850 *obufp++ = 'x';
13851 break;
13852 case 256:
13853 *obufp++ = 'y';
13854 break;
13855 case 512:
13856 *obufp++ = 'z';
13857 break;
13858 default:
13859 abort ();
13860 }
13861 break;
13862 }
6dd5059a
L
13863 if (intel_syntax)
13864 break;
13865 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
13866 {
13867 *obufp++ = 'q';
13868 break;
13869 }
13870 /* Fall through. */
98b528ac 13871 goto case_L;
252b5132 13872 case 'L':
98b528ac
L
13873 if (l != 0 || len != 1)
13874 {
13875 SAVE_LAST (*p);
13876 break;
13877 }
13878case_L:
db6eb5be
AM
13879 if (intel_syntax)
13880 break;
252b5132
RH
13881 if (sizeflag & SUFFIX_ALWAYS)
13882 *obufp++ = 'l';
252b5132 13883 break;
9d141669
L
13884 case 'M':
13885 if (intel_mnemonic != cond)
13886 *obufp++ = 'r';
13887 break;
252b5132
RH
13888 case 'N':
13889 if ((prefixes & PREFIX_FWAIT) == 0)
13890 *obufp++ = 'n';
7d421014
ILT
13891 else
13892 used_prefixes |= PREFIX_FWAIT;
252b5132 13893 break;
52b15da3 13894 case 'O':
161a04f6
L
13895 USED_REX (REX_W);
13896 if (rex & REX_W)
6439fc28 13897 *obufp++ = 'o';
a35ca55a
JB
13898 else if (intel_syntax && (sizeflag & DFLAG))
13899 *obufp++ = 'q';
52b15da3
JH
13900 else
13901 *obufp++ = 'd';
161a04f6 13902 if (!(rex & REX_W))
a35ca55a 13903 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 13904 break;
6439fc28 13905 case 'T':
d9e3625e
L
13906 if (!intel_syntax
13907 && address_mode == mode_64bit
7bb15c6f 13908 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
13909 {
13910 *obufp++ = 'q';
13911 break;
13912 }
6608db57 13913 /* Fall through. */
4b4c407a 13914 goto case_P;
252b5132 13915 case 'P':
4b4c407a 13916 if (l == 0 && len == 1)
d9e3625e 13917 {
4b4c407a
L
13918case_P:
13919 if (intel_syntax)
d9e3625e 13920 {
4b4c407a
L
13921 if ((rex & REX_W) == 0
13922 && (prefixes & PREFIX_DATA))
13923 {
13924 if ((sizeflag & DFLAG) == 0)
13925 *obufp++ = 'w';
13926 used_prefixes |= (prefixes & PREFIX_DATA);
13927 }
13928 break;
13929 }
13930 if ((prefixes & PREFIX_DATA)
13931 || (rex & REX_W)
13932 || (sizeflag & SUFFIX_ALWAYS))
13933 {
13934 USED_REX (REX_W);
13935 if (rex & REX_W)
13936 *obufp++ = 'q';
13937 else
13938 {
13939 if (sizeflag & DFLAG)
13940 *obufp++ = 'l';
13941 else
13942 *obufp++ = 'w';
13943 used_prefixes |= (prefixes & PREFIX_DATA);
13944 }
d9e3625e 13945 }
d9e3625e 13946 }
4b4c407a 13947 else
252b5132 13948 {
4b4c407a
L
13949 if (l != 1 || len != 2 || last[0] != 'L')
13950 {
13951 SAVE_LAST (*p);
13952 break;
13953 }
13954
13955 if ((prefixes & PREFIX_DATA)
13956 || (rex & REX_W)
13957 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 13958 {
4b4c407a
L
13959 USED_REX (REX_W);
13960 if (rex & REX_W)
13961 *obufp++ = 'q';
13962 else
13963 {
13964 if (sizeflag & DFLAG)
13965 *obufp++ = intel_syntax ? 'd' : 'l';
13966 else
13967 *obufp++ = 'w';
13968 used_prefixes |= (prefixes & PREFIX_DATA);
13969 }
52b15da3 13970 }
252b5132
RH
13971 }
13972 break;
6439fc28 13973 case 'U':
db6eb5be
AM
13974 if (intel_syntax)
13975 break;
7bb15c6f 13976 if (address_mode == mode_64bit
6c067bbb 13977 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28 13978 {
7967e09e 13979 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 13980 *obufp++ = 'q';
6439fc28
AM
13981 break;
13982 }
6608db57 13983 /* Fall through. */
98b528ac 13984 goto case_Q;
252b5132 13985 case 'Q':
98b528ac 13986 if (l == 0 && len == 1)
252b5132 13987 {
98b528ac
L
13988case_Q:
13989 if (intel_syntax && !alt)
13990 break;
13991 USED_REX (REX_W);
13992 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 13993 {
98b528ac
L
13994 if (rex & REX_W)
13995 *obufp++ = 'q';
52b15da3 13996 else
98b528ac
L
13997 {
13998 if (sizeflag & DFLAG)
13999 *obufp++ = intel_syntax ? 'd' : 'l';
14000 else
14001 *obufp++ = 'w';
f16cd0d5 14002 used_prefixes |= (prefixes & PREFIX_DATA);
98b528ac 14003 }
52b15da3 14004 }
98b528ac
L
14005 }
14006 else
14007 {
14008 if (l != 1 || len != 2 || last[0] != 'L')
14009 {
14010 SAVE_LAST (*p);
14011 break;
14012 }
14013 if (intel_syntax
14014 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
14015 break;
14016 if ((rex & REX_W))
14017 {
14018 USED_REX (REX_W);
14019 *obufp++ = 'q';
14020 }
14021 else
14022 *obufp++ = 'l';
252b5132
RH
14023 }
14024 break;
14025 case 'R':
161a04f6
L
14026 USED_REX (REX_W);
14027 if (rex & REX_W)
a35ca55a
JB
14028 *obufp++ = 'q';
14029 else if (sizeflag & DFLAG)
c608c12e 14030 {
a35ca55a 14031 if (intel_syntax)
c608c12e 14032 *obufp++ = 'd';
c608c12e 14033 else
a35ca55a 14034 *obufp++ = 'l';
c608c12e 14035 }
252b5132 14036 else
a35ca55a
JB
14037 *obufp++ = 'w';
14038 if (intel_syntax && !p[1]
161a04f6 14039 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 14040 *obufp++ = 'e';
161a04f6 14041 if (!(rex & REX_W))
52b15da3 14042 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 14043 break;
1a114b12 14044 case 'V':
4b06377f 14045 if (l == 0 && len == 1)
1a114b12 14046 {
4b06377f
L
14047 if (intel_syntax)
14048 break;
7bb15c6f 14049 if (address_mode == mode_64bit
6c067bbb 14050 && ((sizeflag & DFLAG) || (rex & REX_W)))
4b06377f
L
14051 {
14052 if (sizeflag & SUFFIX_ALWAYS)
14053 *obufp++ = 'q';
14054 break;
14055 }
14056 }
14057 else
14058 {
14059 if (l != 1
14060 || len != 2
14061 || last[0] != 'L')
14062 {
14063 SAVE_LAST (*p);
14064 break;
14065 }
14066
14067 if (rex & REX_W)
14068 {
14069 *obufp++ = 'a';
14070 *obufp++ = 'b';
14071 *obufp++ = 's';
14072 }
1a114b12
JB
14073 }
14074 /* Fall through. */
4b06377f 14075 goto case_S;
252b5132 14076 case 'S':
4b06377f 14077 if (l == 0 && len == 1)
252b5132 14078 {
4b06377f
L
14079case_S:
14080 if (intel_syntax)
14081 break;
14082 if (sizeflag & SUFFIX_ALWAYS)
52b15da3 14083 {
4b06377f
L
14084 if (rex & REX_W)
14085 *obufp++ = 'q';
52b15da3 14086 else
4b06377f
L
14087 {
14088 if (sizeflag & DFLAG)
14089 *obufp++ = 'l';
14090 else
14091 *obufp++ = 'w';
14092 used_prefixes |= (prefixes & PREFIX_DATA);
14093 }
14094 }
14095 }
14096 else
14097 {
14098 if (l != 1
14099 || len != 2
14100 || last[0] != 'L')
14101 {
14102 SAVE_LAST (*p);
14103 break;
52b15da3 14104 }
4b06377f
L
14105
14106 if (address_mode == mode_64bit
14107 && !(prefixes & PREFIX_ADDR))
14108 {
14109 *obufp++ = 'a';
14110 *obufp++ = 'b';
14111 *obufp++ = 's';
14112 }
14113
14114 goto case_S;
252b5132 14115 }
252b5132 14116 break;
041bd2e0 14117 case 'X':
c0f3af97
L
14118 if (l != 0 || len != 1)
14119 {
14120 SAVE_LAST (*p);
14121 break;
14122 }
14123 if (need_vex && vex.prefix)
14124 {
14125 if (vex.prefix == DATA_PREFIX_OPCODE)
14126 *obufp++ = 'd';
14127 else
14128 *obufp++ = 's';
14129 }
041bd2e0 14130 else
f16cd0d5
L
14131 {
14132 if (prefixes & PREFIX_DATA)
14133 *obufp++ = 'd';
14134 else
14135 *obufp++ = 's';
14136 used_prefixes |= (prefixes & PREFIX_DATA);
14137 }
041bd2e0 14138 break;
76f227a5 14139 case 'Y':
c0f3af97 14140 if (l == 0 && len == 1)
76f227a5 14141 {
c0f3af97
L
14142 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
14143 break;
14144 if (rex & REX_W)
14145 {
14146 USED_REX (REX_W);
14147 *obufp++ = 'q';
14148 }
14149 break;
14150 }
14151 else
14152 {
14153 if (l != 1 || len != 2 || last[0] != 'X')
14154 {
14155 SAVE_LAST (*p);
14156 break;
14157 }
14158 if (!need_vex)
14159 abort ();
14160 if (intel_syntax
04d824a4 14161 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
c0f3af97
L
14162 break;
14163 switch (vex.length)
14164 {
14165 case 128:
14166 *obufp++ = 'x';
14167 break;
14168 case 256:
14169 *obufp++ = 'y';
14170 break;
04d824a4
JB
14171 case 512:
14172 if (!vex.evex)
c0f3af97 14173 default:
04d824a4 14174 abort ();
c0f3af97 14175 }
76f227a5
JH
14176 }
14177 break;
252b5132 14178 case 'W':
0bfee649 14179 if (l == 0 && len == 1)
a35ca55a 14180 {
0bfee649
L
14181 /* operand size flag for cwtl, cbtw */
14182 USED_REX (REX_W);
14183 if (rex & REX_W)
14184 {
14185 if (intel_syntax)
14186 *obufp++ = 'd';
14187 else
14188 *obufp++ = 'l';
14189 }
14190 else if (sizeflag & DFLAG)
14191 *obufp++ = 'w';
a35ca55a 14192 else
0bfee649
L
14193 *obufp++ = 'b';
14194 if (!(rex & REX_W))
14195 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 14196 }
252b5132 14197 else
0bfee649 14198 {
6c30d220
L
14199 if (l != 1
14200 || len != 2
14201 || (last[0] != 'X'
14202 && last[0] != 'L'))
0bfee649
L
14203 {
14204 SAVE_LAST (*p);
14205 break;
14206 }
14207 if (!need_vex)
14208 abort ();
6c30d220
L
14209 if (last[0] == 'X')
14210 *obufp++ = vex.w ? 'd': 's';
14211 else
14212 *obufp++ = vex.w ? 'q': 'd';
0bfee649 14213 }
252b5132 14214 break;
a72d2af2
L
14215 case '^':
14216 if (intel_syntax)
14217 break;
14218 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
14219 {
14220 if (sizeflag & DFLAG)
14221 *obufp++ = 'l';
14222 else
14223 *obufp++ = 'w';
14224 used_prefixes |= (prefixes & PREFIX_DATA);
14225 }
14226 break;
5db04b09
L
14227 case '@':
14228 if (intel_syntax)
14229 break;
14230 if (address_mode == mode_64bit
14231 && (isa64 == intel64
14232 || ((sizeflag & DFLAG) || (rex & REX_W))))
14233 *obufp++ = 'q';
14234 else if ((prefixes & PREFIX_DATA))
14235 {
14236 if (!(sizeflag & DFLAG))
14237 *obufp++ = 'w';
14238 used_prefixes |= (prefixes & PREFIX_DATA);
14239 }
14240 break;
252b5132 14241 }
9306ca4a 14242 alt = 0;
252b5132
RH
14243 }
14244 *obufp = 0;
ea397f5b 14245 mnemonicendp = obufp;
6439fc28 14246 return 0;
252b5132
RH
14247}
14248
14249static void
26ca5450 14250oappend (const char *s)
252b5132 14251{
ea397f5b 14252 obufp = stpcpy (obufp, s);
252b5132
RH
14253}
14254
14255static void
26ca5450 14256append_seg (void)
252b5132 14257{
285ca992
L
14258 /* Only print the active segment register. */
14259 if (!active_seg_prefix)
14260 return;
14261
14262 used_prefixes |= active_seg_prefix;
14263 switch (active_seg_prefix)
7d421014 14264 {
285ca992 14265 case PREFIX_CS:
9ce09ba2 14266 oappend_maybe_intel ("%cs:");
285ca992
L
14267 break;
14268 case PREFIX_DS:
9ce09ba2 14269 oappend_maybe_intel ("%ds:");
285ca992
L
14270 break;
14271 case PREFIX_SS:
9ce09ba2 14272 oappend_maybe_intel ("%ss:");
285ca992
L
14273 break;
14274 case PREFIX_ES:
9ce09ba2 14275 oappend_maybe_intel ("%es:");
285ca992
L
14276 break;
14277 case PREFIX_FS:
9ce09ba2 14278 oappend_maybe_intel ("%fs:");
285ca992
L
14279 break;
14280 case PREFIX_GS:
9ce09ba2 14281 oappend_maybe_intel ("%gs:");
285ca992
L
14282 break;
14283 default:
14284 break;
7d421014 14285 }
252b5132
RH
14286}
14287
14288static void
26ca5450 14289OP_indirE (int bytemode, int sizeflag)
252b5132
RH
14290{
14291 if (!intel_syntax)
14292 oappend ("*");
14293 OP_E (bytemode, sizeflag);
14294}
14295
52b15da3 14296static void
26ca5450 14297print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 14298{
cb712a9e 14299 if (address_mode == mode_64bit)
52b15da3
JH
14300 {
14301 if (hex)
14302 {
14303 char tmp[30];
14304 int i;
14305 buf[0] = '0';
14306 buf[1] = 'x';
14307 sprintf_vma (tmp, disp);
6608db57 14308 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
14309 strcpy (buf + 2, tmp + i);
14310 }
14311 else
14312 {
14313 bfd_signed_vma v = disp;
14314 char tmp[30];
14315 int i;
14316 if (v < 0)
14317 {
14318 *(buf++) = '-';
14319 v = -disp;
6608db57 14320 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
14321 if (v < 0)
14322 {
14323 strcpy (buf, "9223372036854775808");
14324 return;
14325 }
14326 }
14327 if (!v)
14328 {
14329 strcpy (buf, "0");
14330 return;
14331 }
14332
14333 i = 0;
14334 tmp[29] = 0;
14335 while (v)
14336 {
6608db57 14337 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
14338 v /= 10;
14339 i++;
14340 }
14341 strcpy (buf, tmp + 29 - i);
14342 }
14343 }
14344 else
14345 {
14346 if (hex)
14347 sprintf (buf, "0x%x", (unsigned int) disp);
14348 else
14349 sprintf (buf, "%d", (int) disp);
14350 }
14351}
14352
5d669648
L
14353/* Put DISP in BUF as signed hex number. */
14354
14355static void
14356print_displacement (char *buf, bfd_vma disp)
14357{
14358 bfd_signed_vma val = disp;
14359 char tmp[30];
14360 int i, j = 0;
14361
14362 if (val < 0)
14363 {
14364 buf[j++] = '-';
14365 val = -disp;
14366
14367 /* Check for possible overflow. */
14368 if (val < 0)
14369 {
14370 switch (address_mode)
14371 {
14372 case mode_64bit:
14373 strcpy (buf + j, "0x8000000000000000");
14374 break;
14375 case mode_32bit:
14376 strcpy (buf + j, "0x80000000");
14377 break;
14378 case mode_16bit:
14379 strcpy (buf + j, "0x8000");
14380 break;
14381 }
14382 return;
14383 }
14384 }
14385
14386 buf[j++] = '0';
14387 buf[j++] = 'x';
14388
0af1713e 14389 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
14390 for (i = 0; tmp[i] == '0'; i++)
14391 continue;
14392 if (tmp[i] == '\0')
14393 i--;
14394 strcpy (buf + j, tmp + i);
14395}
14396
3f31e633
JB
14397static void
14398intel_operand_size (int bytemode, int sizeflag)
14399{
43234a1e
L
14400 if (vex.evex
14401 && vex.b
14402 && (bytemode == x_mode
14403 || bytemode == evex_half_bcst_xmmq_mode))
14404 {
14405 if (vex.w)
14406 oappend ("QWORD PTR ");
14407 else
14408 oappend ("DWORD PTR ");
14409 return;
14410 }
3f31e633
JB
14411 switch (bytemode)
14412 {
14413 case b_mode:
b6169b20 14414 case b_swap_mode:
42903f7f 14415 case dqb_mode:
1ba585e8 14416 case db_mode:
3f31e633
JB
14417 oappend ("BYTE PTR ");
14418 break;
14419 case w_mode:
1ba585e8 14420 case dw_mode:
3f31e633 14421 case dqw_mode:
1ba585e8 14422 case dqw_swap_mode:
3f31e633
JB
14423 oappend ("WORD PTR ");
14424 break;
1a114b12 14425 case stack_v_mode:
7bb15c6f 14426 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
3f31e633
JB
14427 {
14428 oappend ("QWORD PTR ");
3f31e633
JB
14429 break;
14430 }
14431 /* FALLTHRU */
14432 case v_mode:
b6169b20 14433 case v_swap_mode:
3f31e633 14434 case dq_mode:
161a04f6
L
14435 USED_REX (REX_W);
14436 if (rex & REX_W)
3f31e633 14437 oappend ("QWORD PTR ");
3f31e633 14438 else
f16cd0d5
L
14439 {
14440 if ((sizeflag & DFLAG) || bytemode == dq_mode)
14441 oappend ("DWORD PTR ");
14442 else
14443 oappend ("WORD PTR ");
14444 used_prefixes |= (prefixes & PREFIX_DATA);
14445 }
3f31e633 14446 break;
52fd6d94 14447 case z_mode:
161a04f6 14448 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
14449 *obufp++ = 'D';
14450 oappend ("WORD PTR ");
161a04f6 14451 if (!(rex & REX_W))
52fd6d94
JB
14452 used_prefixes |= (prefixes & PREFIX_DATA);
14453 break;
34b772a6
JB
14454 case a_mode:
14455 if (sizeflag & DFLAG)
14456 oappend ("QWORD PTR ");
14457 else
14458 oappend ("DWORD PTR ");
14459 used_prefixes |= (prefixes & PREFIX_DATA);
14460 break;
3f31e633 14461 case d_mode:
539f890d
L
14462 case d_scalar_mode:
14463 case d_scalar_swap_mode:
fa99fab2 14464 case d_swap_mode:
42903f7f 14465 case dqd_mode:
3f31e633
JB
14466 oappend ("DWORD PTR ");
14467 break;
14468 case q_mode:
539f890d
L
14469 case q_scalar_mode:
14470 case q_scalar_swap_mode:
b6169b20 14471 case q_swap_mode:
3f31e633
JB
14472 oappend ("QWORD PTR ");
14473 break;
14474 case m_mode:
cb712a9e 14475 if (address_mode == mode_64bit)
3f31e633
JB
14476 oappend ("QWORD PTR ");
14477 else
14478 oappend ("DWORD PTR ");
14479 break;
14480 case f_mode:
14481 if (sizeflag & DFLAG)
14482 oappend ("FWORD PTR ");
14483 else
14484 oappend ("DWORD PTR ");
14485 used_prefixes |= (prefixes & PREFIX_DATA);
14486 break;
14487 case t_mode:
14488 oappend ("TBYTE PTR ");
14489 break;
14490 case x_mode:
b6169b20 14491 case x_swap_mode:
43234a1e
L
14492 case evex_x_gscat_mode:
14493 case evex_x_nobcst_mode:
c0f3af97
L
14494 if (need_vex)
14495 {
14496 switch (vex.length)
14497 {
14498 case 128:
14499 oappend ("XMMWORD PTR ");
14500 break;
14501 case 256:
14502 oappend ("YMMWORD PTR ");
14503 break;
43234a1e
L
14504 case 512:
14505 oappend ("ZMMWORD PTR ");
14506 break;
c0f3af97
L
14507 default:
14508 abort ();
14509 }
14510 }
14511 else
14512 oappend ("XMMWORD PTR ");
14513 break;
14514 case xmm_mode:
3f31e633
JB
14515 oappend ("XMMWORD PTR ");
14516 break;
43234a1e
L
14517 case ymm_mode:
14518 oappend ("YMMWORD PTR ");
14519 break;
c0f3af97 14520 case xmmq_mode:
43234a1e 14521 case evex_half_bcst_xmmq_mode:
c0f3af97
L
14522 if (!need_vex)
14523 abort ();
14524
14525 switch (vex.length)
14526 {
14527 case 128:
14528 oappend ("QWORD PTR ");
14529 break;
14530 case 256:
14531 oappend ("XMMWORD PTR ");
14532 break;
43234a1e
L
14533 case 512:
14534 oappend ("YMMWORD PTR ");
14535 break;
c0f3af97
L
14536 default:
14537 abort ();
14538 }
14539 break;
6c30d220
L
14540 case xmm_mb_mode:
14541 if (!need_vex)
14542 abort ();
14543
14544 switch (vex.length)
14545 {
14546 case 128:
14547 case 256:
43234a1e 14548 case 512:
6c30d220
L
14549 oappend ("BYTE PTR ");
14550 break;
14551 default:
14552 abort ();
14553 }
14554 break;
14555 case xmm_mw_mode:
14556 if (!need_vex)
14557 abort ();
14558
14559 switch (vex.length)
14560 {
14561 case 128:
14562 case 256:
43234a1e 14563 case 512:
6c30d220
L
14564 oappend ("WORD PTR ");
14565 break;
14566 default:
14567 abort ();
14568 }
14569 break;
14570 case xmm_md_mode:
14571 if (!need_vex)
14572 abort ();
14573
14574 switch (vex.length)
14575 {
14576 case 128:
14577 case 256:
43234a1e 14578 case 512:
6c30d220
L
14579 oappend ("DWORD PTR ");
14580 break;
14581 default:
14582 abort ();
14583 }
14584 break;
14585 case xmm_mq_mode:
14586 if (!need_vex)
14587 abort ();
14588
14589 switch (vex.length)
14590 {
14591 case 128:
14592 case 256:
43234a1e 14593 case 512:
6c30d220
L
14594 oappend ("QWORD PTR ");
14595 break;
14596 default:
14597 abort ();
14598 }
14599 break;
14600 case xmmdw_mode:
14601 if (!need_vex)
14602 abort ();
14603
14604 switch (vex.length)
14605 {
14606 case 128:
14607 oappend ("WORD PTR ");
14608 break;
14609 case 256:
14610 oappend ("DWORD PTR ");
14611 break;
43234a1e
L
14612 case 512:
14613 oappend ("QWORD PTR ");
14614 break;
6c30d220
L
14615 default:
14616 abort ();
14617 }
14618 break;
14619 case xmmqd_mode:
14620 if (!need_vex)
14621 abort ();
14622
14623 switch (vex.length)
14624 {
14625 case 128:
14626 oappend ("DWORD PTR ");
14627 break;
14628 case 256:
14629 oappend ("QWORD PTR ");
14630 break;
43234a1e
L
14631 case 512:
14632 oappend ("XMMWORD PTR ");
14633 break;
6c30d220
L
14634 default:
14635 abort ();
14636 }
14637 break;
c0f3af97
L
14638 case ymmq_mode:
14639 if (!need_vex)
14640 abort ();
14641
14642 switch (vex.length)
14643 {
14644 case 128:
14645 oappend ("QWORD PTR ");
14646 break;
14647 case 256:
14648 oappend ("YMMWORD PTR ");
14649 break;
43234a1e
L
14650 case 512:
14651 oappend ("ZMMWORD PTR ");
14652 break;
c0f3af97
L
14653 default:
14654 abort ();
14655 }
14656 break;
6c30d220
L
14657 case ymmxmm_mode:
14658 if (!need_vex)
14659 abort ();
14660
14661 switch (vex.length)
14662 {
14663 case 128:
14664 case 256:
14665 oappend ("XMMWORD PTR ");
14666 break;
14667 default:
14668 abort ();
14669 }
14670 break;
fb9c77c7
L
14671 case o_mode:
14672 oappend ("OWORD PTR ");
14673 break;
43234a1e 14674 case xmm_mdq_mode:
0bfee649 14675 case vex_w_dq_mode:
1c480963 14676 case vex_scalar_w_dq_mode:
0bfee649
L
14677 if (!need_vex)
14678 abort ();
14679
14680 if (vex.w)
14681 oappend ("QWORD PTR ");
14682 else
14683 oappend ("DWORD PTR ");
14684 break;
43234a1e
L
14685 case vex_vsib_d_w_dq_mode:
14686 case vex_vsib_q_w_dq_mode:
14687 if (!need_vex)
14688 abort ();
14689
14690 if (!vex.evex)
14691 {
14692 if (vex.w)
14693 oappend ("QWORD PTR ");
14694 else
14695 oappend ("DWORD PTR ");
14696 }
14697 else
14698 {
b28d1bda
IT
14699 switch (vex.length)
14700 {
14701 case 128:
14702 oappend ("XMMWORD PTR ");
14703 break;
14704 case 256:
14705 oappend ("YMMWORD PTR ");
14706 break;
14707 case 512:
14708 oappend ("ZMMWORD PTR ");
14709 break;
14710 default:
14711 abort ();
14712 }
43234a1e
L
14713 }
14714 break;
5fc35d96
IT
14715 case vex_vsib_q_w_d_mode:
14716 case vex_vsib_d_w_d_mode:
b28d1bda 14717 if (!need_vex || !vex.evex)
5fc35d96
IT
14718 abort ();
14719
b28d1bda
IT
14720 switch (vex.length)
14721 {
14722 case 128:
14723 oappend ("QWORD PTR ");
14724 break;
14725 case 256:
14726 oappend ("XMMWORD PTR ");
14727 break;
14728 case 512:
14729 oappend ("YMMWORD PTR ");
14730 break;
14731 default:
14732 abort ();
14733 }
5fc35d96
IT
14734
14735 break;
1ba585e8
IT
14736 case mask_bd_mode:
14737 if (!need_vex || vex.length != 128)
14738 abort ();
14739 if (vex.w)
14740 oappend ("DWORD PTR ");
14741 else
14742 oappend ("BYTE PTR ");
14743 break;
43234a1e
L
14744 case mask_mode:
14745 if (!need_vex)
14746 abort ();
1ba585e8
IT
14747 if (vex.w)
14748 oappend ("QWORD PTR ");
14749 else
14750 oappend ("WORD PTR ");
43234a1e 14751 break;
6c75cc62 14752 case v_bnd_mode:
3f31e633
JB
14753 default:
14754 break;
14755 }
14756}
14757
252b5132 14758static void
c0f3af97 14759OP_E_register (int bytemode, int sizeflag)
252b5132 14760{
c0f3af97
L
14761 int reg = modrm.rm;
14762 const char **names;
252b5132 14763
c0f3af97
L
14764 USED_REX (REX_B);
14765 if ((rex & REX_B))
14766 reg += 8;
252b5132 14767
b6169b20 14768 if ((sizeflag & SUFFIX_ALWAYS)
1ba585e8
IT
14769 && (bytemode == b_swap_mode
14770 || bytemode == v_swap_mode
14771 || bytemode == dqw_swap_mode))
b6169b20
L
14772 swap_operand ();
14773
c0f3af97 14774 switch (bytemode)
252b5132 14775 {
c0f3af97 14776 case b_mode:
b6169b20 14777 case b_swap_mode:
c0f3af97
L
14778 USED_REX (0);
14779 if (rex)
14780 names = names8rex;
14781 else
14782 names = names8;
14783 break;
14784 case w_mode:
14785 names = names16;
14786 break;
14787 case d_mode:
1ba585e8
IT
14788 case dw_mode:
14789 case db_mode:
c0f3af97
L
14790 names = names32;
14791 break;
14792 case q_mode:
14793 names = names64;
14794 break;
14795 case m_mode:
6c75cc62 14796 case v_bnd_mode:
c0f3af97
L
14797 names = address_mode == mode_64bit ? names64 : names32;
14798 break;
7e8b059b
L
14799 case bnd_mode:
14800 names = names_bnd;
14801 break;
c0f3af97 14802 case stack_v_mode:
7bb15c6f 14803 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
252b5132 14804 {
c0f3af97 14805 names = names64;
252b5132 14806 break;
252b5132 14807 }
c0f3af97
L
14808 bytemode = v_mode;
14809 /* FALLTHRU */
14810 case v_mode:
b6169b20 14811 case v_swap_mode:
c0f3af97
L
14812 case dq_mode:
14813 case dqb_mode:
14814 case dqd_mode:
14815 case dqw_mode:
1ba585e8 14816 case dqw_swap_mode:
c0f3af97
L
14817 USED_REX (REX_W);
14818 if (rex & REX_W)
14819 names = names64;
c0f3af97 14820 else
f16cd0d5 14821 {
7bb15c6f 14822 if ((sizeflag & DFLAG)
f16cd0d5
L
14823 || (bytemode != v_mode
14824 && bytemode != v_swap_mode))
14825 names = names32;
14826 else
14827 names = names16;
14828 used_prefixes |= (prefixes & PREFIX_DATA);
14829 }
c0f3af97 14830 break;
1ba585e8 14831 case mask_bd_mode:
43234a1e
L
14832 case mask_mode:
14833 names = names_mask;
14834 break;
c0f3af97
L
14835 case 0:
14836 return;
14837 default:
14838 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
14839 return;
14840 }
c0f3af97
L
14841 oappend (names[reg]);
14842}
14843
14844static void
c1e679ec 14845OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
14846{
14847 bfd_vma disp = 0;
14848 int add = (rex & REX_B) ? 8 : 0;
14849 int riprel = 0;
43234a1e
L
14850 int shift;
14851
14852 if (vex.evex)
14853 {
14854 /* In EVEX, if operand doesn't allow broadcast, vex.b should be 0. */
14855 if (vex.b
14856 && bytemode != x_mode
90a915bf 14857 && bytemode != xmmq_mode
43234a1e
L
14858 && bytemode != evex_half_bcst_xmmq_mode)
14859 {
14860 BadOp ();
14861 return;
14862 }
14863 switch (bytemode)
14864 {
1ba585e8
IT
14865 case dqw_mode:
14866 case dw_mode:
14867 case dqw_swap_mode:
14868 shift = 1;
14869 break;
14870 case dqb_mode:
14871 case db_mode:
14872 shift = 0;
14873 break;
43234a1e 14874 case vex_vsib_d_w_dq_mode:
5fc35d96 14875 case vex_vsib_d_w_d_mode:
eaa9d1ad 14876 case vex_vsib_q_w_dq_mode:
5fc35d96 14877 case vex_vsib_q_w_d_mode:
43234a1e
L
14878 case evex_x_gscat_mode:
14879 case xmm_mdq_mode:
14880 shift = vex.w ? 3 : 2;
14881 break;
43234a1e
L
14882 case x_mode:
14883 case evex_half_bcst_xmmq_mode:
90a915bf 14884 case xmmq_mode:
43234a1e
L
14885 if (vex.b)
14886 {
14887 shift = vex.w ? 3 : 2;
14888 break;
14889 }
14890 /* Fall through if vex.b == 0. */
14891 case xmmqd_mode:
14892 case xmmdw_mode:
43234a1e
L
14893 case ymmq_mode:
14894 case evex_x_nobcst_mode:
14895 case x_swap_mode:
14896 switch (vex.length)
14897 {
14898 case 128:
14899 shift = 4;
14900 break;
14901 case 256:
14902 shift = 5;
14903 break;
14904 case 512:
14905 shift = 6;
14906 break;
14907 default:
14908 abort ();
14909 }
14910 break;
14911 case ymm_mode:
14912 shift = 5;
14913 break;
14914 case xmm_mode:
14915 shift = 4;
14916 break;
14917 case xmm_mq_mode:
14918 case q_mode:
14919 case q_scalar_mode:
14920 case q_swap_mode:
14921 case q_scalar_swap_mode:
14922 shift = 3;
14923 break;
14924 case dqd_mode:
14925 case xmm_md_mode:
14926 case d_mode:
14927 case d_scalar_mode:
14928 case d_swap_mode:
14929 case d_scalar_swap_mode:
14930 shift = 2;
14931 break;
14932 case xmm_mw_mode:
14933 shift = 1;
14934 break;
14935 case xmm_mb_mode:
14936 shift = 0;
14937 break;
14938 default:
14939 abort ();
14940 }
14941 /* Make necessary corrections to shift for modes that need it.
14942 For these modes we currently have shift 4, 5 or 6 depending on
14943 vex.length (it corresponds to xmmword, ymmword or zmmword
14944 operand). We might want to make it 3, 4 or 5 (e.g. for
14945 xmmq_mode). In case of broadcast enabled the corrections
14946 aren't needed, as element size is always 32 or 64 bits. */
90a915bf
IT
14947 if (!vex.b
14948 && (bytemode == xmmq_mode
14949 || bytemode == evex_half_bcst_xmmq_mode))
43234a1e
L
14950 shift -= 1;
14951 else if (bytemode == xmmqd_mode)
14952 shift -= 2;
14953 else if (bytemode == xmmdw_mode)
14954 shift -= 3;
b28d1bda
IT
14955 else if (bytemode == ymmq_mode && vex.length == 128)
14956 shift -= 1;
43234a1e
L
14957 }
14958 else
14959 shift = 0;
252b5132 14960
c0f3af97 14961 USED_REX (REX_B);
3f31e633
JB
14962 if (intel_syntax)
14963 intel_operand_size (bytemode, sizeflag);
252b5132
RH
14964 append_seg ();
14965
5d669648 14966 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 14967 {
5d669648
L
14968 /* 32/64 bit address mode */
14969 int havedisp;
252b5132
RH
14970 int havesib;
14971 int havebase;
0f7da397 14972 int haveindex;
20afcfb7 14973 int needindex;
82c18208 14974 int base, rbase;
91d6fa6a 14975 int vindex = 0;
252b5132 14976 int scale = 0;
7e8b059b
L
14977 int addr32flag = !((sizeflag & AFLAG)
14978 || bytemode == v_bnd_mode
14979 || bytemode == bnd_mode);
6c30d220
L
14980 const char **indexes64 = names64;
14981 const char **indexes32 = names32;
252b5132
RH
14982
14983 havesib = 0;
14984 havebase = 1;
0f7da397 14985 haveindex = 0;
7967e09e 14986 base = modrm.rm;
252b5132
RH
14987
14988 if (base == 4)
14989 {
14990 havesib = 1;
dfc8cf43 14991 vindex = sib.index;
161a04f6
L
14992 USED_REX (REX_X);
14993 if (rex & REX_X)
91d6fa6a 14994 vindex += 8;
6c30d220
L
14995 switch (bytemode)
14996 {
14997 case vex_vsib_d_w_dq_mode:
5fc35d96 14998 case vex_vsib_d_w_d_mode:
6c30d220 14999 case vex_vsib_q_w_dq_mode:
5fc35d96 15000 case vex_vsib_q_w_d_mode:
6c30d220
L
15001 if (!need_vex)
15002 abort ();
43234a1e
L
15003 if (vex.evex)
15004 {
15005 if (!vex.v)
15006 vindex += 16;
15007 }
6c30d220
L
15008
15009 haveindex = 1;
15010 switch (vex.length)
15011 {
15012 case 128:
7bb15c6f 15013 indexes64 = indexes32 = names_xmm;
6c30d220
L
15014 break;
15015 case 256:
5fc35d96
IT
15016 if (!vex.w
15017 || bytemode == vex_vsib_q_w_dq_mode
15018 || bytemode == vex_vsib_q_w_d_mode)
7bb15c6f 15019 indexes64 = indexes32 = names_ymm;
6c30d220 15020 else
7bb15c6f 15021 indexes64 = indexes32 = names_xmm;
6c30d220 15022 break;
43234a1e 15023 case 512:
5fc35d96
IT
15024 if (!vex.w
15025 || bytemode == vex_vsib_q_w_dq_mode
15026 || bytemode == vex_vsib_q_w_d_mode)
43234a1e
L
15027 indexes64 = indexes32 = names_zmm;
15028 else
15029 indexes64 = indexes32 = names_ymm;
15030 break;
6c30d220
L
15031 default:
15032 abort ();
15033 }
15034 break;
15035 default:
15036 haveindex = vindex != 4;
15037 break;
15038 }
15039 scale = sib.scale;
15040 base = sib.base;
252b5132
RH
15041 codep++;
15042 }
82c18208 15043 rbase = base + add;
252b5132 15044
7967e09e 15045 switch (modrm.mod)
252b5132
RH
15046 {
15047 case 0:
82c18208 15048 if (base == 5)
252b5132
RH
15049 {
15050 havebase = 0;
cb712a9e 15051 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
15052 riprel = 1;
15053 disp = get32s ();
252b5132
RH
15054 }
15055 break;
15056 case 1:
15057 FETCH_DATA (the_info, codep + 1);
15058 disp = *codep++;
15059 if ((disp & 0x80) != 0)
15060 disp -= 0x100;
43234a1e
L
15061 if (vex.evex && shift > 0)
15062 disp <<= shift;
252b5132
RH
15063 break;
15064 case 2:
52b15da3 15065 disp = get32s ();
252b5132
RH
15066 break;
15067 }
15068
20afcfb7
L
15069 /* In 32bit mode, we need index register to tell [offset] from
15070 [eiz*1 + offset]. */
15071 needindex = (havesib
15072 && !havebase
15073 && !haveindex
15074 && address_mode == mode_32bit);
15075 havedisp = (havebase
15076 || needindex
15077 || (havesib && (haveindex || scale != 0)));
5d669648 15078
252b5132 15079 if (!intel_syntax)
82c18208 15080 if (modrm.mod != 0 || base == 5)
db6eb5be 15081 {
5d669648
L
15082 if (havedisp || riprel)
15083 print_displacement (scratchbuf, disp);
15084 else
15085 print_operand_value (scratchbuf, 1, disp);
db6eb5be 15086 oappend (scratchbuf);
52b15da3
JH
15087 if (riprel)
15088 {
15089 set_op (disp, 1);
87767711 15090 oappend (sizeflag & AFLAG ? "(%rip)" : "(%eip)");
52b15da3 15091 }
db6eb5be 15092 }
2da11e11 15093
7e8b059b
L
15094 if ((havebase || haveindex || riprel)
15095 && (bytemode != v_bnd_mode)
15096 && (bytemode != bnd_mode))
87767711
JB
15097 used_prefixes |= PREFIX_ADDR;
15098
5d669648 15099 if (havedisp || (intel_syntax && riprel))
252b5132 15100 {
252b5132 15101 *obufp++ = open_char;
52b15da3 15102 if (intel_syntax && riprel)
185b1163
L
15103 {
15104 set_op (disp, 1);
87767711 15105 oappend (sizeflag & AFLAG ? "rip" : "eip");
185b1163 15106 }
db6eb5be 15107 *obufp = '\0';
252b5132 15108 if (havebase)
7e8b059b 15109 oappend (address_mode == mode_64bit && !addr32flag
82c18208 15110 ? names64[rbase] : names32[rbase]);
252b5132
RH
15111 if (havesib)
15112 {
db51cc60
L
15113 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
15114 print index to tell base + index from base. */
15115 if (scale != 0
20afcfb7 15116 || needindex
db51cc60
L
15117 || haveindex
15118 || (havebase && base != ESP_REG_NUM))
252b5132 15119 {
9306ca4a 15120 if (!intel_syntax || havebase)
db6eb5be 15121 {
9306ca4a
JB
15122 *obufp++ = separator_char;
15123 *obufp = '\0';
db6eb5be 15124 }
db51cc60 15125 if (haveindex)
7e8b059b 15126 oappend (address_mode == mode_64bit && !addr32flag
6c30d220 15127 ? indexes64[vindex] : indexes32[vindex]);
db51cc60 15128 else
7e8b059b 15129 oappend (address_mode == mode_64bit && !addr32flag
db51cc60
L
15130 ? index64 : index32);
15131
db6eb5be
AM
15132 *obufp++ = scale_char;
15133 *obufp = '\0';
15134 sprintf (scratchbuf, "%d", 1 << scale);
15135 oappend (scratchbuf);
15136 }
252b5132 15137 }
185b1163 15138 if (intel_syntax
82c18208 15139 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 15140 {
db51cc60 15141 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
15142 {
15143 *obufp++ = '+';
15144 *obufp = '\0';
15145 }
05203043 15146 else if (modrm.mod != 1 && disp != -disp)
3d456fa1
JB
15147 {
15148 *obufp++ = '-';
15149 *obufp = '\0';
15150 disp = - (bfd_signed_vma) disp;
15151 }
15152
db51cc60
L
15153 if (havedisp)
15154 print_displacement (scratchbuf, disp);
15155 else
15156 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
15157 oappend (scratchbuf);
15158 }
252b5132
RH
15159
15160 *obufp++ = close_char;
db6eb5be 15161 *obufp = '\0';
252b5132
RH
15162 }
15163 else if (intel_syntax)
db6eb5be 15164 {
82c18208 15165 if (modrm.mod != 0 || base == 5)
db6eb5be 15166 {
285ca992 15167 if (!active_seg_prefix)
252b5132 15168 {
d708bcba 15169 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
15170 oappend (":");
15171 }
52b15da3 15172 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
15173 oappend (scratchbuf);
15174 }
15175 }
252b5132
RH
15176 }
15177 else
f16cd0d5
L
15178 {
15179 /* 16 bit address mode */
15180 used_prefixes |= prefixes & PREFIX_ADDR;
7967e09e 15181 switch (modrm.mod)
252b5132
RH
15182 {
15183 case 0:
7967e09e 15184 if (modrm.rm == 6)
252b5132
RH
15185 {
15186 disp = get16 ();
15187 if ((disp & 0x8000) != 0)
15188 disp -= 0x10000;
15189 }
15190 break;
15191 case 1:
15192 FETCH_DATA (the_info, codep + 1);
15193 disp = *codep++;
15194 if ((disp & 0x80) != 0)
15195 disp -= 0x100;
15196 break;
15197 case 2:
15198 disp = get16 ();
15199 if ((disp & 0x8000) != 0)
15200 disp -= 0x10000;
15201 break;
15202 }
15203
15204 if (!intel_syntax)
7967e09e 15205 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 15206 {
5d669648 15207 print_displacement (scratchbuf, disp);
db6eb5be
AM
15208 oappend (scratchbuf);
15209 }
252b5132 15210
7967e09e 15211 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
15212 {
15213 *obufp++ = open_char;
db6eb5be 15214 *obufp = '\0';
7967e09e 15215 oappend (index16[modrm.rm]);
5d669648
L
15216 if (intel_syntax
15217 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 15218 {
5d669648 15219 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
15220 {
15221 *obufp++ = '+';
15222 *obufp = '\0';
15223 }
7967e09e 15224 else if (modrm.mod != 1)
3d456fa1
JB
15225 {
15226 *obufp++ = '-';
15227 *obufp = '\0';
15228 disp = - (bfd_signed_vma) disp;
15229 }
15230
5d669648 15231 print_displacement (scratchbuf, disp);
3d456fa1
JB
15232 oappend (scratchbuf);
15233 }
15234
db6eb5be
AM
15235 *obufp++ = close_char;
15236 *obufp = '\0';
252b5132 15237 }
3d456fa1
JB
15238 else if (intel_syntax)
15239 {
285ca992 15240 if (!active_seg_prefix)
3d456fa1
JB
15241 {
15242 oappend (names_seg[ds_reg - es_reg]);
15243 oappend (":");
15244 }
15245 print_operand_value (scratchbuf, 1, disp & 0xffff);
15246 oappend (scratchbuf);
15247 }
252b5132 15248 }
43234a1e
L
15249 if (vex.evex && vex.b
15250 && (bytemode == x_mode
90a915bf 15251 || bytemode == xmmq_mode
43234a1e
L
15252 || bytemode == evex_half_bcst_xmmq_mode))
15253 {
90a915bf
IT
15254 if (vex.w
15255 || bytemode == xmmq_mode
15256 || bytemode == evex_half_bcst_xmmq_mode)
b28d1bda
IT
15257 {
15258 switch (vex.length)
15259 {
15260 case 128:
15261 oappend ("{1to2}");
15262 break;
15263 case 256:
15264 oappend ("{1to4}");
15265 break;
15266 case 512:
15267 oappend ("{1to8}");
15268 break;
15269 default:
15270 abort ();
15271 }
15272 }
43234a1e 15273 else
b28d1bda
IT
15274 {
15275 switch (vex.length)
15276 {
15277 case 128:
15278 oappend ("{1to4}");
15279 break;
15280 case 256:
15281 oappend ("{1to8}");
15282 break;
15283 case 512:
15284 oappend ("{1to16}");
15285 break;
15286 default:
15287 abort ();
15288 }
15289 }
43234a1e 15290 }
252b5132
RH
15291}
15292
c0f3af97 15293static void
8b3f93e7 15294OP_E (int bytemode, int sizeflag)
c0f3af97
L
15295{
15296 /* Skip mod/rm byte. */
15297 MODRM_CHECK;
15298 codep++;
15299
15300 if (modrm.mod == 3)
15301 OP_E_register (bytemode, sizeflag);
15302 else
c1e679ec 15303 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
15304}
15305
252b5132 15306static void
26ca5450 15307OP_G (int bytemode, int sizeflag)
252b5132 15308{
52b15da3 15309 int add = 0;
161a04f6
L
15310 USED_REX (REX_R);
15311 if (rex & REX_R)
52b15da3 15312 add += 8;
252b5132
RH
15313 switch (bytemode)
15314 {
15315 case b_mode:
52b15da3
JH
15316 USED_REX (0);
15317 if (rex)
7967e09e 15318 oappend (names8rex[modrm.reg + add]);
52b15da3 15319 else
7967e09e 15320 oappend (names8[modrm.reg + add]);
252b5132
RH
15321 break;
15322 case w_mode:
7967e09e 15323 oappend (names16[modrm.reg + add]);
252b5132
RH
15324 break;
15325 case d_mode:
1ba585e8
IT
15326 case db_mode:
15327 case dw_mode:
7967e09e 15328 oappend (names32[modrm.reg + add]);
52b15da3
JH
15329 break;
15330 case q_mode:
7967e09e 15331 oappend (names64[modrm.reg + add]);
252b5132 15332 break;
7e8b059b
L
15333 case bnd_mode:
15334 oappend (names_bnd[modrm.reg]);
15335 break;
252b5132 15336 case v_mode:
9306ca4a 15337 case dq_mode:
42903f7f
L
15338 case dqb_mode:
15339 case dqd_mode:
9306ca4a 15340 case dqw_mode:
1ba585e8 15341 case dqw_swap_mode:
161a04f6
L
15342 USED_REX (REX_W);
15343 if (rex & REX_W)
7967e09e 15344 oappend (names64[modrm.reg + add]);
252b5132 15345 else
f16cd0d5
L
15346 {
15347 if ((sizeflag & DFLAG) || bytemode != v_mode)
15348 oappend (names32[modrm.reg + add]);
15349 else
15350 oappend (names16[modrm.reg + add]);
15351 used_prefixes |= (prefixes & PREFIX_DATA);
15352 }
252b5132 15353 break;
90700ea2 15354 case m_mode:
cb712a9e 15355 if (address_mode == mode_64bit)
7967e09e 15356 oappend (names64[modrm.reg + add]);
90700ea2 15357 else
7967e09e 15358 oappend (names32[modrm.reg + add]);
90700ea2 15359 break;
1ba585e8 15360 case mask_bd_mode:
43234a1e
L
15361 case mask_mode:
15362 oappend (names_mask[modrm.reg + add]);
15363 break;
252b5132
RH
15364 default:
15365 oappend (INTERNAL_DISASSEMBLER_ERROR);
15366 break;
15367 }
15368}
15369
52b15da3 15370static bfd_vma
26ca5450 15371get64 (void)
52b15da3 15372{
5dd0794d 15373 bfd_vma x;
52b15da3 15374#ifdef BFD64
5dd0794d
AM
15375 unsigned int a;
15376 unsigned int b;
15377
52b15da3
JH
15378 FETCH_DATA (the_info, codep + 8);
15379 a = *codep++ & 0xff;
15380 a |= (*codep++ & 0xff) << 8;
15381 a |= (*codep++ & 0xff) << 16;
15382 a |= (*codep++ & 0xff) << 24;
5dd0794d 15383 b = *codep++ & 0xff;
52b15da3
JH
15384 b |= (*codep++ & 0xff) << 8;
15385 b |= (*codep++ & 0xff) << 16;
15386 b |= (*codep++ & 0xff) << 24;
15387 x = a + ((bfd_vma) b << 32);
15388#else
6608db57 15389 abort ();
5dd0794d 15390 x = 0;
52b15da3
JH
15391#endif
15392 return x;
15393}
15394
15395static bfd_signed_vma
26ca5450 15396get32 (void)
252b5132 15397{
52b15da3 15398 bfd_signed_vma x = 0;
252b5132
RH
15399
15400 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
15401 x = *codep++ & (bfd_signed_vma) 0xff;
15402 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
15403 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
15404 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
15405 return x;
15406}
15407
15408static bfd_signed_vma
26ca5450 15409get32s (void)
52b15da3
JH
15410{
15411 bfd_signed_vma x = 0;
15412
15413 FETCH_DATA (the_info, codep + 4);
15414 x = *codep++ & (bfd_signed_vma) 0xff;
15415 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
15416 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
15417 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
15418
15419 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
15420
252b5132
RH
15421 return x;
15422}
15423
15424static int
26ca5450 15425get16 (void)
252b5132
RH
15426{
15427 int x = 0;
15428
15429 FETCH_DATA (the_info, codep + 2);
15430 x = *codep++ & 0xff;
15431 x |= (*codep++ & 0xff) << 8;
15432 return x;
15433}
15434
15435static void
26ca5450 15436set_op (bfd_vma op, int riprel)
252b5132
RH
15437{
15438 op_index[op_ad] = op_ad;
cb712a9e 15439 if (address_mode == mode_64bit)
7081ff04
AJ
15440 {
15441 op_address[op_ad] = op;
15442 op_riprel[op_ad] = riprel;
15443 }
15444 else
15445 {
15446 /* Mask to get a 32-bit address. */
15447 op_address[op_ad] = op & 0xffffffff;
15448 op_riprel[op_ad] = riprel & 0xffffffff;
15449 }
252b5132
RH
15450}
15451
15452static void
26ca5450 15453OP_REG (int code, int sizeflag)
252b5132 15454{
2da11e11 15455 const char *s;
9b60702d 15456 int add;
de882298
RM
15457
15458 switch (code)
15459 {
15460 case es_reg: case ss_reg: case cs_reg:
15461 case ds_reg: case fs_reg: case gs_reg:
15462 oappend (names_seg[code - es_reg]);
15463 return;
15464 }
15465
161a04f6
L
15466 USED_REX (REX_B);
15467 if (rex & REX_B)
52b15da3 15468 add = 8;
9b60702d
L
15469 else
15470 add = 0;
52b15da3
JH
15471
15472 switch (code)
15473 {
52b15da3
JH
15474 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
15475 case sp_reg: case bp_reg: case si_reg: case di_reg:
15476 s = names16[code - ax_reg + add];
15477 break;
52b15da3
JH
15478 case al_reg: case ah_reg: case cl_reg: case ch_reg:
15479 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
15480 USED_REX (0);
15481 if (rex)
15482 s = names8rex[code - al_reg + add];
15483 else
15484 s = names8[code - al_reg];
15485 break;
6439fc28
AM
15486 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
15487 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
7bb15c6f 15488 if (address_mode == mode_64bit
6c067bbb 15489 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
15490 {
15491 s = names64[code - rAX_reg + add];
15492 break;
15493 }
15494 code += eAX_reg - rAX_reg;
6608db57 15495 /* Fall through. */
52b15da3
JH
15496 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
15497 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
15498 USED_REX (REX_W);
15499 if (rex & REX_W)
52b15da3 15500 s = names64[code - eAX_reg + add];
52b15da3 15501 else
f16cd0d5
L
15502 {
15503 if (sizeflag & DFLAG)
15504 s = names32[code - eAX_reg + add];
15505 else
15506 s = names16[code - eAX_reg + add];
15507 used_prefixes |= (prefixes & PREFIX_DATA);
15508 }
52b15da3 15509 break;
52b15da3
JH
15510 default:
15511 s = INTERNAL_DISASSEMBLER_ERROR;
15512 break;
15513 }
15514 oappend (s);
15515}
15516
15517static void
26ca5450 15518OP_IMREG (int code, int sizeflag)
52b15da3
JH
15519{
15520 const char *s;
252b5132
RH
15521
15522 switch (code)
15523 {
15524 case indir_dx_reg:
d708bcba 15525 if (intel_syntax)
52fd6d94 15526 s = "dx";
d708bcba 15527 else
db6eb5be 15528 s = "(%dx)";
252b5132
RH
15529 break;
15530 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
15531 case sp_reg: case bp_reg: case si_reg: case di_reg:
15532 s = names16[code - ax_reg];
15533 break;
15534 case es_reg: case ss_reg: case cs_reg:
15535 case ds_reg: case fs_reg: case gs_reg:
15536 s = names_seg[code - es_reg];
15537 break;
15538 case al_reg: case ah_reg: case cl_reg: case ch_reg:
15539 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
52b15da3
JH
15540 USED_REX (0);
15541 if (rex)
15542 s = names8rex[code - al_reg];
15543 else
15544 s = names8[code - al_reg];
252b5132
RH
15545 break;
15546 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
15547 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
15548 USED_REX (REX_W);
15549 if (rex & REX_W)
52b15da3 15550 s = names64[code - eAX_reg];
252b5132 15551 else
f16cd0d5
L
15552 {
15553 if (sizeflag & DFLAG)
15554 s = names32[code - eAX_reg];
15555 else
15556 s = names16[code - eAX_reg];
15557 used_prefixes |= (prefixes & PREFIX_DATA);
15558 }
252b5132 15559 break;
52fd6d94 15560 case z_mode_ax_reg:
161a04f6 15561 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
15562 s = *names32;
15563 else
15564 s = *names16;
161a04f6 15565 if (!(rex & REX_W))
52fd6d94
JB
15566 used_prefixes |= (prefixes & PREFIX_DATA);
15567 break;
252b5132
RH
15568 default:
15569 s = INTERNAL_DISASSEMBLER_ERROR;
15570 break;
15571 }
15572 oappend (s);
15573}
15574
15575static void
26ca5450 15576OP_I (int bytemode, int sizeflag)
252b5132 15577{
52b15da3
JH
15578 bfd_signed_vma op;
15579 bfd_signed_vma mask = -1;
252b5132
RH
15580
15581 switch (bytemode)
15582 {
15583 case b_mode:
15584 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
15585 op = *codep++;
15586 mask = 0xff;
15587 break;
15588 case q_mode:
cb712a9e 15589 if (address_mode == mode_64bit)
6439fc28
AM
15590 {
15591 op = get32s ();
15592 break;
15593 }
6608db57 15594 /* Fall through. */
252b5132 15595 case v_mode:
161a04f6
L
15596 USED_REX (REX_W);
15597 if (rex & REX_W)
52b15da3 15598 op = get32s ();
252b5132 15599 else
52b15da3 15600 {
f16cd0d5
L
15601 if (sizeflag & DFLAG)
15602 {
15603 op = get32 ();
15604 mask = 0xffffffff;
15605 }
15606 else
15607 {
15608 op = get16 ();
15609 mask = 0xfffff;
15610 }
15611 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 15612 }
252b5132
RH
15613 break;
15614 case w_mode:
52b15da3 15615 mask = 0xfffff;
252b5132
RH
15616 op = get16 ();
15617 break;
9306ca4a
JB
15618 case const_1_mode:
15619 if (intel_syntax)
6c067bbb 15620 oappend ("1");
9306ca4a 15621 return;
252b5132
RH
15622 default:
15623 oappend (INTERNAL_DISASSEMBLER_ERROR);
15624 return;
15625 }
15626
52b15da3
JH
15627 op &= mask;
15628 scratchbuf[0] = '$';
d708bcba 15629 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 15630 oappend_maybe_intel (scratchbuf);
52b15da3
JH
15631 scratchbuf[0] = '\0';
15632}
15633
15634static void
26ca5450 15635OP_I64 (int bytemode, int sizeflag)
52b15da3
JH
15636{
15637 bfd_signed_vma op;
15638 bfd_signed_vma mask = -1;
15639
cb712a9e 15640 if (address_mode != mode_64bit)
6439fc28
AM
15641 {
15642 OP_I (bytemode, sizeflag);
15643 return;
15644 }
15645
52b15da3
JH
15646 switch (bytemode)
15647 {
15648 case b_mode:
15649 FETCH_DATA (the_info, codep + 1);
15650 op = *codep++;
15651 mask = 0xff;
15652 break;
15653 case v_mode:
161a04f6
L
15654 USED_REX (REX_W);
15655 if (rex & REX_W)
52b15da3 15656 op = get64 ();
52b15da3
JH
15657 else
15658 {
f16cd0d5
L
15659 if (sizeflag & DFLAG)
15660 {
15661 op = get32 ();
15662 mask = 0xffffffff;
15663 }
15664 else
15665 {
15666 op = get16 ();
15667 mask = 0xfffff;
15668 }
15669 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 15670 }
52b15da3
JH
15671 break;
15672 case w_mode:
15673 mask = 0xfffff;
15674 op = get16 ();
15675 break;
15676 default:
15677 oappend (INTERNAL_DISASSEMBLER_ERROR);
15678 return;
15679 }
15680
15681 op &= mask;
15682 scratchbuf[0] = '$';
d708bcba 15683 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 15684 oappend_maybe_intel (scratchbuf);
252b5132
RH
15685 scratchbuf[0] = '\0';
15686}
15687
15688static void
26ca5450 15689OP_sI (int bytemode, int sizeflag)
252b5132 15690{
52b15da3 15691 bfd_signed_vma op;
252b5132
RH
15692
15693 switch (bytemode)
15694 {
15695 case b_mode:
e3949f17 15696 case b_T_mode:
252b5132
RH
15697 FETCH_DATA (the_info, codep + 1);
15698 op = *codep++;
15699 if ((op & 0x80) != 0)
15700 op -= 0x100;
e3949f17
L
15701 if (bytemode == b_T_mode)
15702 {
15703 if (address_mode != mode_64bit
7bb15c6f 15704 || !((sizeflag & DFLAG) || (rex & REX_W)))
e3949f17 15705 {
6c067bbb
RM
15706 /* The operand-size prefix is overridden by a REX prefix. */
15707 if ((sizeflag & DFLAG) || (rex & REX_W))
e3949f17
L
15708 op &= 0xffffffff;
15709 else
15710 op &= 0xffff;
15711 }
15712 }
15713 else
15714 {
15715 if (!(rex & REX_W))
15716 {
15717 if (sizeflag & DFLAG)
15718 op &= 0xffffffff;
15719 else
15720 op &= 0xffff;
15721 }
15722 }
252b5132
RH
15723 break;
15724 case v_mode:
7bb15c6f
RM
15725 /* The operand-size prefix is overridden by a REX prefix. */
15726 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 15727 op = get32s ();
252b5132 15728 else
d9e3625e 15729 op = get16 ();
252b5132
RH
15730 break;
15731 default:
15732 oappend (INTERNAL_DISASSEMBLER_ERROR);
15733 return;
15734 }
52b15da3
JH
15735
15736 scratchbuf[0] = '$';
15737 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 15738 oappend_maybe_intel (scratchbuf);
252b5132
RH
15739}
15740
15741static void
26ca5450 15742OP_J (int bytemode, int sizeflag)
252b5132 15743{
52b15da3 15744 bfd_vma disp;
7081ff04 15745 bfd_vma mask = -1;
65ca155d 15746 bfd_vma segment = 0;
252b5132
RH
15747
15748 switch (bytemode)
15749 {
15750 case b_mode:
15751 FETCH_DATA (the_info, codep + 1);
15752 disp = *codep++;
15753 if ((disp & 0x80) != 0)
15754 disp -= 0x100;
15755 break;
15756 case v_mode:
5db04b09
L
15757 if (isa64 == amd64)
15758 USED_REX (REX_W);
15759 if ((sizeflag & DFLAG)
15760 || (address_mode == mode_64bit
15761 && (isa64 != amd64 || (rex & REX_W))))
52b15da3 15762 disp = get32s ();
252b5132
RH
15763 else
15764 {
15765 disp = get16 ();
206717e8
L
15766 if ((disp & 0x8000) != 0)
15767 disp -= 0x10000;
65ca155d
L
15768 /* In 16bit mode, address is wrapped around at 64k within
15769 the same segment. Otherwise, a data16 prefix on a jump
15770 instruction means that the pc is masked to 16 bits after
15771 the displacement is added! */
15772 mask = 0xffff;
15773 if ((prefixes & PREFIX_DATA) == 0)
15774 segment = ((start_pc + codep - start_codep)
15775 & ~((bfd_vma) 0xffff));
252b5132 15776 }
5db04b09
L
15777 if (address_mode != mode_64bit
15778 || (isa64 == amd64 && !(rex & REX_W)))
f16cd0d5 15779 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
15780 break;
15781 default:
15782 oappend (INTERNAL_DISASSEMBLER_ERROR);
15783 return;
15784 }
42d5f9c6 15785 disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
52b15da3
JH
15786 set_op (disp, 0);
15787 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
15788 oappend (scratchbuf);
15789}
15790
252b5132 15791static void
ed7841b3 15792OP_SEG (int bytemode, int sizeflag)
252b5132 15793{
ed7841b3 15794 if (bytemode == w_mode)
7967e09e 15795 oappend (names_seg[modrm.reg]);
ed7841b3 15796 else
7967e09e 15797 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
15798}
15799
15800static void
26ca5450 15801OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
15802{
15803 int seg, offset;
15804
c608c12e 15805 if (sizeflag & DFLAG)
252b5132 15806 {
c608c12e
AM
15807 offset = get32 ();
15808 seg = get16 ();
252b5132 15809 }
c608c12e
AM
15810 else
15811 {
15812 offset = get16 ();
15813 seg = get16 ();
15814 }
7d421014 15815 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 15816 if (intel_syntax)
3f31e633 15817 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
15818 else
15819 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 15820 oappend (scratchbuf);
252b5132
RH
15821}
15822
252b5132 15823static void
3f31e633 15824OP_OFF (int bytemode, int sizeflag)
252b5132 15825{
52b15da3 15826 bfd_vma off;
252b5132 15827
3f31e633
JB
15828 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
15829 intel_operand_size (bytemode, sizeflag);
252b5132
RH
15830 append_seg ();
15831
cb712a9e 15832 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
15833 off = get32 ();
15834 else
15835 off = get16 ();
15836
15837 if (intel_syntax)
15838 {
285ca992 15839 if (!active_seg_prefix)
252b5132 15840 {
d708bcba 15841 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
15842 oappend (":");
15843 }
15844 }
52b15da3
JH
15845 print_operand_value (scratchbuf, 1, off);
15846 oappend (scratchbuf);
15847}
6439fc28 15848
52b15da3 15849static void
3f31e633 15850OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
15851{
15852 bfd_vma off;
15853
539e75ad
L
15854 if (address_mode != mode_64bit
15855 || (prefixes & PREFIX_ADDR))
6439fc28
AM
15856 {
15857 OP_OFF (bytemode, sizeflag);
15858 return;
15859 }
15860
3f31e633
JB
15861 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
15862 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
15863 append_seg ();
15864
6608db57 15865 off = get64 ();
52b15da3
JH
15866
15867 if (intel_syntax)
15868 {
285ca992 15869 if (!active_seg_prefix)
52b15da3 15870 {
d708bcba 15871 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
15872 oappend (":");
15873 }
15874 }
15875 print_operand_value (scratchbuf, 1, off);
252b5132
RH
15876 oappend (scratchbuf);
15877}
15878
15879static void
26ca5450 15880ptr_reg (int code, int sizeflag)
252b5132 15881{
2da11e11 15882 const char *s;
d708bcba 15883
1d9f512f 15884 *obufp++ = open_char;
20f0a1fc 15885 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 15886 if (address_mode == mode_64bit)
c1a64871
JH
15887 {
15888 if (!(sizeflag & AFLAG))
db6eb5be 15889 s = names32[code - eAX_reg];
c1a64871 15890 else
db6eb5be 15891 s = names64[code - eAX_reg];
c1a64871 15892 }
52b15da3 15893 else if (sizeflag & AFLAG)
252b5132
RH
15894 s = names32[code - eAX_reg];
15895 else
15896 s = names16[code - eAX_reg];
15897 oappend (s);
1d9f512f
AM
15898 *obufp++ = close_char;
15899 *obufp = 0;
252b5132
RH
15900}
15901
15902static void
26ca5450 15903OP_ESreg (int code, int sizeflag)
252b5132 15904{
9306ca4a 15905 if (intel_syntax)
52fd6d94
JB
15906 {
15907 switch (codep[-1])
15908 {
15909 case 0x6d: /* insw/insl */
15910 intel_operand_size (z_mode, sizeflag);
15911 break;
15912 case 0xa5: /* movsw/movsl/movsq */
15913 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15914 case 0xab: /* stosw/stosl */
15915 case 0xaf: /* scasw/scasl */
15916 intel_operand_size (v_mode, sizeflag);
15917 break;
15918 default:
15919 intel_operand_size (b_mode, sizeflag);
15920 }
15921 }
9ce09ba2 15922 oappend_maybe_intel ("%es:");
252b5132
RH
15923 ptr_reg (code, sizeflag);
15924}
15925
15926static void
26ca5450 15927OP_DSreg (int code, int sizeflag)
252b5132 15928{
9306ca4a 15929 if (intel_syntax)
52fd6d94
JB
15930 {
15931 switch (codep[-1])
15932 {
15933 case 0x6f: /* outsw/outsl */
15934 intel_operand_size (z_mode, sizeflag);
15935 break;
15936 case 0xa5: /* movsw/movsl/movsq */
15937 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15938 case 0xad: /* lodsw/lodsl/lodsq */
15939 intel_operand_size (v_mode, sizeflag);
15940 break;
15941 default:
15942 intel_operand_size (b_mode, sizeflag);
15943 }
15944 }
285ca992
L
15945 /* Set active_seg_prefix to PREFIX_DS if it is unset so that the
15946 default segment register DS is printed. */
15947 if (!active_seg_prefix)
15948 active_seg_prefix = PREFIX_DS;
6608db57 15949 append_seg ();
252b5132
RH
15950 ptr_reg (code, sizeflag);
15951}
15952
252b5132 15953static void
26ca5450 15954OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15955{
9b60702d 15956 int add;
161a04f6 15957 if (rex & REX_R)
c4a530c5 15958 {
161a04f6 15959 USED_REX (REX_R);
c4a530c5
JB
15960 add = 8;
15961 }
cb712a9e 15962 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 15963 {
f16cd0d5 15964 all_prefixes[last_lock_prefix] = 0;
c4a530c5
JB
15965 used_prefixes |= PREFIX_LOCK;
15966 add = 8;
15967 }
9b60702d
L
15968 else
15969 add = 0;
7967e09e 15970 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
9ce09ba2 15971 oappend_maybe_intel (scratchbuf);
252b5132
RH
15972}
15973
252b5132 15974static void
26ca5450 15975OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15976{
9b60702d 15977 int add;
161a04f6
L
15978 USED_REX (REX_R);
15979 if (rex & REX_R)
52b15da3 15980 add = 8;
9b60702d
L
15981 else
15982 add = 0;
d708bcba 15983 if (intel_syntax)
7967e09e 15984 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 15985 else
7967e09e 15986 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
15987 oappend (scratchbuf);
15988}
15989
252b5132 15990static void
26ca5450 15991OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15992{
7967e09e 15993 sprintf (scratchbuf, "%%tr%d", modrm.reg);
9ce09ba2 15994 oappend_maybe_intel (scratchbuf);
252b5132
RH
15995}
15996
15997static void
6f74c397 15998OP_R (int bytemode, int sizeflag)
252b5132 15999{
68f34464
L
16000 /* Skip mod/rm byte. */
16001 MODRM_CHECK;
16002 codep++;
16003 OP_E_register (bytemode, sizeflag);
252b5132
RH
16004}
16005
16006static void
26ca5450 16007OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 16008{
b9733481
L
16009 int reg = modrm.reg;
16010 const char **names;
16011
041bd2e0
JH
16012 used_prefixes |= (prefixes & PREFIX_DATA);
16013 if (prefixes & PREFIX_DATA)
20f0a1fc 16014 {
b9733481 16015 names = names_xmm;
161a04f6
L
16016 USED_REX (REX_R);
16017 if (rex & REX_R)
b9733481 16018 reg += 8;
20f0a1fc 16019 }
041bd2e0 16020 else
b9733481
L
16021 names = names_mm;
16022 oappend (names[reg]);
252b5132
RH
16023}
16024
c608c12e 16025static void
c0f3af97 16026OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 16027{
b9733481
L
16028 int reg = modrm.reg;
16029 const char **names;
16030
161a04f6
L
16031 USED_REX (REX_R);
16032 if (rex & REX_R)
b9733481 16033 reg += 8;
43234a1e
L
16034 if (vex.evex)
16035 {
16036 if (!vex.r)
16037 reg += 16;
16038 }
16039
539f890d
L
16040 if (need_vex
16041 && bytemode != xmm_mode
43234a1e
L
16042 && bytemode != xmmq_mode
16043 && bytemode != evex_half_bcst_xmmq_mode
16044 && bytemode != ymm_mode
539f890d 16045 && bytemode != scalar_mode)
c0f3af97
L
16046 {
16047 switch (vex.length)
16048 {
16049 case 128:
b9733481 16050 names = names_xmm;
c0f3af97
L
16051 break;
16052 case 256:
5fc35d96
IT
16053 if (vex.w
16054 || (bytemode != vex_vsib_q_w_dq_mode
16055 && bytemode != vex_vsib_q_w_d_mode))
6c30d220
L
16056 names = names_ymm;
16057 else
16058 names = names_xmm;
c0f3af97 16059 break;
43234a1e
L
16060 case 512:
16061 names = names_zmm;
16062 break;
c0f3af97
L
16063 default:
16064 abort ();
16065 }
16066 }
43234a1e
L
16067 else if (bytemode == xmmq_mode
16068 || bytemode == evex_half_bcst_xmmq_mode)
16069 {
16070 switch (vex.length)
16071 {
16072 case 128:
16073 case 256:
16074 names = names_xmm;
16075 break;
16076 case 512:
16077 names = names_ymm;
16078 break;
16079 default:
16080 abort ();
16081 }
16082 }
16083 else if (bytemode == ymm_mode)
16084 names = names_ymm;
c0f3af97 16085 else
b9733481
L
16086 names = names_xmm;
16087 oappend (names[reg]);
c608c12e
AM
16088}
16089
252b5132 16090static void
26ca5450 16091OP_EM (int bytemode, int sizeflag)
252b5132 16092{
b9733481
L
16093 int reg;
16094 const char **names;
16095
7967e09e 16096 if (modrm.mod != 3)
252b5132 16097 {
b6169b20
L
16098 if (intel_syntax
16099 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
16100 {
16101 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16102 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 16103 }
252b5132
RH
16104 OP_E (bytemode, sizeflag);
16105 return;
16106 }
16107
b6169b20
L
16108 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
16109 swap_operand ();
16110
6608db57 16111 /* Skip mod/rm byte. */
4bba6815 16112 MODRM_CHECK;
252b5132 16113 codep++;
041bd2e0 16114 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 16115 reg = modrm.rm;
041bd2e0 16116 if (prefixes & PREFIX_DATA)
20f0a1fc 16117 {
b9733481 16118 names = names_xmm;
161a04f6
L
16119 USED_REX (REX_B);
16120 if (rex & REX_B)
b9733481 16121 reg += 8;
20f0a1fc 16122 }
041bd2e0 16123 else
b9733481
L
16124 names = names_mm;
16125 oappend (names[reg]);
252b5132
RH
16126}
16127
246c51aa
L
16128/* cvt* are the only instructions in sse2 which have
16129 both SSE and MMX operands and also have 0x66 prefix
16130 in their opcode. 0x66 was originally used to differentiate
16131 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
16132 cvt* separately using OP_EMC and OP_MXC */
16133static void
16134OP_EMC (int bytemode, int sizeflag)
16135{
7967e09e 16136 if (modrm.mod != 3)
4d9567e0
MM
16137 {
16138 if (intel_syntax && bytemode == v_mode)
16139 {
16140 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16141 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 16142 }
4d9567e0
MM
16143 OP_E (bytemode, sizeflag);
16144 return;
16145 }
246c51aa 16146
4d9567e0
MM
16147 /* Skip mod/rm byte. */
16148 MODRM_CHECK;
16149 codep++;
16150 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 16151 oappend (names_mm[modrm.rm]);
4d9567e0
MM
16152}
16153
16154static void
16155OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16156{
16157 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 16158 oappend (names_mm[modrm.reg]);
4d9567e0
MM
16159}
16160
c608c12e 16161static void
26ca5450 16162OP_EX (int bytemode, int sizeflag)
c608c12e 16163{
b9733481
L
16164 int reg;
16165 const char **names;
d6f574e0
L
16166
16167 /* Skip mod/rm byte. */
16168 MODRM_CHECK;
16169 codep++;
16170
7967e09e 16171 if (modrm.mod != 3)
c608c12e 16172 {
c1e679ec 16173 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
16174 return;
16175 }
d6f574e0 16176
b9733481 16177 reg = modrm.rm;
161a04f6
L
16178 USED_REX (REX_B);
16179 if (rex & REX_B)
b9733481 16180 reg += 8;
43234a1e
L
16181 if (vex.evex)
16182 {
16183 USED_REX (REX_X);
16184 if ((rex & REX_X))
16185 reg += 16;
16186 }
c608c12e 16187
b6169b20 16188 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
16189 && (bytemode == x_swap_mode
16190 || bytemode == d_swap_mode
1ba585e8 16191 || bytemode == dqw_swap_mode
7bb15c6f 16192 || bytemode == d_scalar_swap_mode
539f890d
L
16193 || bytemode == q_swap_mode
16194 || bytemode == q_scalar_swap_mode))
b6169b20
L
16195 swap_operand ();
16196
c0f3af97
L
16197 if (need_vex
16198 && bytemode != xmm_mode
6c30d220
L
16199 && bytemode != xmmdw_mode
16200 && bytemode != xmmqd_mode
16201 && bytemode != xmm_mb_mode
16202 && bytemode != xmm_mw_mode
16203 && bytemode != xmm_md_mode
16204 && bytemode != xmm_mq_mode
43234a1e 16205 && bytemode != xmm_mdq_mode
539f890d 16206 && bytemode != xmmq_mode
43234a1e
L
16207 && bytemode != evex_half_bcst_xmmq_mode
16208 && bytemode != ymm_mode
539f890d 16209 && bytemode != d_scalar_mode
7bb15c6f 16210 && bytemode != d_scalar_swap_mode
539f890d 16211 && bytemode != q_scalar_mode
1c480963
L
16212 && bytemode != q_scalar_swap_mode
16213 && bytemode != vex_scalar_w_dq_mode)
c0f3af97
L
16214 {
16215 switch (vex.length)
16216 {
16217 case 128:
b9733481 16218 names = names_xmm;
c0f3af97
L
16219 break;
16220 case 256:
b9733481 16221 names = names_ymm;
c0f3af97 16222 break;
43234a1e
L
16223 case 512:
16224 names = names_zmm;
16225 break;
c0f3af97
L
16226 default:
16227 abort ();
16228 }
16229 }
43234a1e
L
16230 else if (bytemode == xmmq_mode
16231 || bytemode == evex_half_bcst_xmmq_mode)
16232 {
16233 switch (vex.length)
16234 {
16235 case 128:
16236 case 256:
16237 names = names_xmm;
16238 break;
16239 case 512:
16240 names = names_ymm;
16241 break;
16242 default:
16243 abort ();
16244 }
16245 }
16246 else if (bytemode == ymm_mode)
16247 names = names_ymm;
c0f3af97 16248 else
b9733481
L
16249 names = names_xmm;
16250 oappend (names[reg]);
c608c12e
AM
16251}
16252
252b5132 16253static void
26ca5450 16254OP_MS (int bytemode, int sizeflag)
252b5132 16255{
7967e09e 16256 if (modrm.mod == 3)
2da11e11
AM
16257 OP_EM (bytemode, sizeflag);
16258 else
6608db57 16259 BadOp ();
252b5132
RH
16260}
16261
992aaec9 16262static void
26ca5450 16263OP_XS (int bytemode, int sizeflag)
992aaec9 16264{
7967e09e 16265 if (modrm.mod == 3)
992aaec9
AM
16266 OP_EX (bytemode, sizeflag);
16267 else
6608db57 16268 BadOp ();
992aaec9
AM
16269}
16270
cc0ec051
AM
16271static void
16272OP_M (int bytemode, int sizeflag)
16273{
7967e09e 16274 if (modrm.mod == 3)
75413a22
L
16275 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
16276 BadOp ();
cc0ec051
AM
16277 else
16278 OP_E (bytemode, sizeflag);
16279}
16280
16281static void
16282OP_0f07 (int bytemode, int sizeflag)
16283{
7967e09e 16284 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
16285 BadOp ();
16286 else
16287 OP_E (bytemode, sizeflag);
16288}
16289
46e883c5 16290/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 16291 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 16292
cc0ec051 16293static void
46e883c5 16294NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 16295{
8b38ad71
L
16296 if ((prefixes & PREFIX_DATA) != 0
16297 || (rex != 0
16298 && rex != 0x48
16299 && address_mode == mode_64bit))
46e883c5
L
16300 OP_REG (bytemode, sizeflag);
16301 else
16302 strcpy (obuf, "nop");
16303}
16304
16305static void
16306NOP_Fixup2 (int bytemode, int sizeflag)
16307{
8b38ad71
L
16308 if ((prefixes & PREFIX_DATA) != 0
16309 || (rex != 0
16310 && rex != 0x48
16311 && address_mode == mode_64bit))
46e883c5 16312 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
16313}
16314
84037f8c 16315static const char *const Suffix3DNow[] = {
252b5132
RH
16316/* 00 */ NULL, NULL, NULL, NULL,
16317/* 04 */ NULL, NULL, NULL, NULL,
16318/* 08 */ NULL, NULL, NULL, NULL,
9e525108 16319/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
16320/* 10 */ NULL, NULL, NULL, NULL,
16321/* 14 */ NULL, NULL, NULL, NULL,
16322/* 18 */ NULL, NULL, NULL, NULL,
9e525108 16323/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
16324/* 20 */ NULL, NULL, NULL, NULL,
16325/* 24 */ NULL, NULL, NULL, NULL,
16326/* 28 */ NULL, NULL, NULL, NULL,
16327/* 2C */ NULL, NULL, NULL, NULL,
16328/* 30 */ NULL, NULL, NULL, NULL,
16329/* 34 */ NULL, NULL, NULL, NULL,
16330/* 38 */ NULL, NULL, NULL, NULL,
16331/* 3C */ NULL, NULL, NULL, NULL,
16332/* 40 */ NULL, NULL, NULL, NULL,
16333/* 44 */ NULL, NULL, NULL, NULL,
16334/* 48 */ NULL, NULL, NULL, NULL,
16335/* 4C */ NULL, NULL, NULL, NULL,
16336/* 50 */ NULL, NULL, NULL, NULL,
16337/* 54 */ NULL, NULL, NULL, NULL,
16338/* 58 */ NULL, NULL, NULL, NULL,
16339/* 5C */ NULL, NULL, NULL, NULL,
16340/* 60 */ NULL, NULL, NULL, NULL,
16341/* 64 */ NULL, NULL, NULL, NULL,
16342/* 68 */ NULL, NULL, NULL, NULL,
16343/* 6C */ NULL, NULL, NULL, NULL,
16344/* 70 */ NULL, NULL, NULL, NULL,
16345/* 74 */ NULL, NULL, NULL, NULL,
16346/* 78 */ NULL, NULL, NULL, NULL,
16347/* 7C */ NULL, NULL, NULL, NULL,
16348/* 80 */ NULL, NULL, NULL, NULL,
16349/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
16350/* 88 */ NULL, NULL, "pfnacc", NULL,
16351/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
16352/* 90 */ "pfcmpge", NULL, NULL, NULL,
16353/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
16354/* 98 */ NULL, NULL, "pfsub", NULL,
16355/* 9C */ NULL, NULL, "pfadd", NULL,
16356/* A0 */ "pfcmpgt", NULL, NULL, NULL,
16357/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
16358/* A8 */ NULL, NULL, "pfsubr", NULL,
16359/* AC */ NULL, NULL, "pfacc", NULL,
16360/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 16361/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 16362/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
16363/* BC */ NULL, NULL, NULL, "pavgusb",
16364/* C0 */ NULL, NULL, NULL, NULL,
16365/* C4 */ NULL, NULL, NULL, NULL,
16366/* C8 */ NULL, NULL, NULL, NULL,
16367/* CC */ NULL, NULL, NULL, NULL,
16368/* D0 */ NULL, NULL, NULL, NULL,
16369/* D4 */ NULL, NULL, NULL, NULL,
16370/* D8 */ NULL, NULL, NULL, NULL,
16371/* DC */ NULL, NULL, NULL, NULL,
16372/* E0 */ NULL, NULL, NULL, NULL,
16373/* E4 */ NULL, NULL, NULL, NULL,
16374/* E8 */ NULL, NULL, NULL, NULL,
16375/* EC */ NULL, NULL, NULL, NULL,
16376/* F0 */ NULL, NULL, NULL, NULL,
16377/* F4 */ NULL, NULL, NULL, NULL,
16378/* F8 */ NULL, NULL, NULL, NULL,
16379/* FC */ NULL, NULL, NULL, NULL,
16380};
16381
16382static void
26ca5450 16383OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
16384{
16385 const char *mnemonic;
16386
16387 FETCH_DATA (the_info, codep + 1);
16388 /* AMD 3DNow! instructions are specified by an opcode suffix in the
16389 place where an 8-bit immediate would normally go. ie. the last
16390 byte of the instruction. */
ea397f5b 16391 obufp = mnemonicendp;
c608c12e 16392 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 16393 if (mnemonic)
2da11e11 16394 oappend (mnemonic);
252b5132
RH
16395 else
16396 {
16397 /* Since a variable sized modrm/sib chunk is between the start
16398 of the opcode (0x0f0f) and the opcode suffix, we need to do
16399 all the modrm processing first, and don't know until now that
16400 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
16401 op_out[0][0] = '\0';
16402 op_out[1][0] = '\0';
6608db57 16403 BadOp ();
252b5132 16404 }
ea397f5b 16405 mnemonicendp = obufp;
252b5132 16406}
c608c12e 16407
ea397f5b
L
16408static struct op simd_cmp_op[] =
16409{
16410 { STRING_COMMA_LEN ("eq") },
16411 { STRING_COMMA_LEN ("lt") },
16412 { STRING_COMMA_LEN ("le") },
16413 { STRING_COMMA_LEN ("unord") },
16414 { STRING_COMMA_LEN ("neq") },
16415 { STRING_COMMA_LEN ("nlt") },
16416 { STRING_COMMA_LEN ("nle") },
16417 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
16418};
16419
16420static void
ad19981d 16421CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
16422{
16423 unsigned int cmp_type;
16424
16425 FETCH_DATA (the_info, codep + 1);
16426 cmp_type = *codep++ & 0xff;
c0f3af97 16427 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 16428 {
ad19981d 16429 char suffix [3];
ea397f5b 16430 char *p = mnemonicendp - 2;
ad19981d
L
16431 suffix[0] = p[0];
16432 suffix[1] = p[1];
16433 suffix[2] = '\0';
ea397f5b
L
16434 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
16435 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
16436 }
16437 else
16438 {
ad19981d
L
16439 /* We have a reserved extension byte. Output it directly. */
16440 scratchbuf[0] = '$';
16441 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16442 oappend_maybe_intel (scratchbuf);
ad19981d 16443 scratchbuf[0] = '\0';
c608c12e
AM
16444 }
16445}
16446
ca164297 16447static void
b844680a
L
16448OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
16449 int sizeflag ATTRIBUTE_UNUSED)
16450{
16451 /* mwait %eax,%ecx */
16452 if (!intel_syntax)
16453 {
16454 const char **names = (address_mode == mode_64bit
16455 ? names64 : names32);
16456 strcpy (op_out[0], names[0]);
16457 strcpy (op_out[1], names[1]);
16458 two_source_ops = 1;
16459 }
16460 /* Skip mod/rm byte. */
16461 MODRM_CHECK;
16462 codep++;
16463}
16464
16465static void
16466OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
16467 int sizeflag ATTRIBUTE_UNUSED)
ca164297 16468{
b844680a
L
16469 /* monitor %eax,%ecx,%edx" */
16470 if (!intel_syntax)
ca164297 16471 {
b844680a 16472 const char **op1_names;
cb712a9e
L
16473 const char **names = (address_mode == mode_64bit
16474 ? names64 : names32);
1d9f512f 16475
b844680a
L
16476 if (!(prefixes & PREFIX_ADDR))
16477 op1_names = (address_mode == mode_16bit
16478 ? names16 : names);
ca164297
L
16479 else
16480 {
b844680a 16481 /* Remove "addr16/addr32". */
f16cd0d5 16482 all_prefixes[last_addr_prefix] = 0;
b844680a
L
16483 op1_names = (address_mode != mode_32bit
16484 ? names32 : names16);
16485 used_prefixes |= PREFIX_ADDR;
ca164297 16486 }
b844680a
L
16487 strcpy (op_out[0], op1_names[0]);
16488 strcpy (op_out[1], names[1]);
16489 strcpy (op_out[2], names[2]);
16490 two_source_ops = 1;
ca164297 16491 }
b844680a
L
16492 /* Skip mod/rm byte. */
16493 MODRM_CHECK;
16494 codep++;
30123838
JB
16495}
16496
6608db57
KH
16497static void
16498BadOp (void)
2da11e11 16499{
6608db57
KH
16500 /* Throw away prefixes and 1st. opcode byte. */
16501 codep = insn_codep + 1;
2da11e11
AM
16502 oappend ("(bad)");
16503}
4cc91dba 16504
35c52694
L
16505static void
16506REP_Fixup (int bytemode, int sizeflag)
16507{
16508 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
16509 lods and stos. */
35c52694 16510 if (prefixes & PREFIX_REPZ)
f16cd0d5 16511 all_prefixes[last_repz_prefix] = REP_PREFIX;
35c52694
L
16512
16513 switch (bytemode)
16514 {
16515 case al_reg:
16516 case eAX_reg:
16517 case indir_dx_reg:
16518 OP_IMREG (bytemode, sizeflag);
16519 break;
16520 case eDI_reg:
16521 OP_ESreg (bytemode, sizeflag);
16522 break;
16523 case eSI_reg:
16524 OP_DSreg (bytemode, sizeflag);
16525 break;
16526 default:
16527 abort ();
16528 break;
16529 }
16530}
f5804c90 16531
7e8b059b
L
16532/* For BND-prefixed instructions 0xF2 prefix should be displayed as
16533 "bnd". */
16534
16535static void
16536BND_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16537{
16538 if (prefixes & PREFIX_REPNZ)
16539 all_prefixes[last_repnz_prefix] = BND_PREFIX;
16540}
16541
42164a71
L
16542/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
16543 "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
16544 */
16545
16546static void
16547HLE_Fixup1 (int bytemode, int sizeflag)
16548{
16549 if (modrm.mod != 3
16550 && (prefixes & PREFIX_LOCK) != 0)
16551 {
16552 if (prefixes & PREFIX_REPZ)
16553 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16554 if (prefixes & PREFIX_REPNZ)
16555 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
16556 }
16557
16558 OP_E (bytemode, sizeflag);
16559}
16560
16561/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
16562 "xacquire"/"xrelease" for memory operand. No check for LOCK prefix.
16563 */
16564
16565static void
16566HLE_Fixup2 (int bytemode, int sizeflag)
16567{
16568 if (modrm.mod != 3)
16569 {
16570 if (prefixes & PREFIX_REPZ)
16571 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16572 if (prefixes & PREFIX_REPNZ)
16573 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
16574 }
16575
16576 OP_E (bytemode, sizeflag);
16577}
16578
16579/* Similar to OP_E. But the 0xf3 prefixes should be displayed as
16580 "xrelease" for memory operand. No check for LOCK prefix. */
16581
16582static void
16583HLE_Fixup3 (int bytemode, int sizeflag)
16584{
16585 if (modrm.mod != 3
16586 && last_repz_prefix > last_repnz_prefix
16587 && (prefixes & PREFIX_REPZ) != 0)
16588 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16589
16590 OP_E (bytemode, sizeflag);
16591}
16592
f5804c90
L
16593static void
16594CMPXCHG8B_Fixup (int bytemode, int sizeflag)
16595{
161a04f6
L
16596 USED_REX (REX_W);
16597 if (rex & REX_W)
f5804c90
L
16598 {
16599 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
16600 char *p = mnemonicendp - 2;
16601 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 16602 bytemode = o_mode;
f5804c90 16603 }
42164a71
L
16604 else if ((prefixes & PREFIX_LOCK) != 0)
16605 {
16606 if (prefixes & PREFIX_REPZ)
16607 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16608 if (prefixes & PREFIX_REPNZ)
16609 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
16610 }
16611
f5804c90
L
16612 OP_M (bytemode, sizeflag);
16613}
42903f7f
L
16614
16615static void
16616XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
16617{
b9733481
L
16618 const char **names;
16619
c0f3af97
L
16620 if (need_vex)
16621 {
16622 switch (vex.length)
16623 {
16624 case 128:
b9733481 16625 names = names_xmm;
c0f3af97
L
16626 break;
16627 case 256:
b9733481 16628 names = names_ymm;
c0f3af97
L
16629 break;
16630 default:
16631 abort ();
16632 }
16633 }
16634 else
b9733481
L
16635 names = names_xmm;
16636 oappend (names[reg]);
42903f7f 16637}
381d071f
L
16638
16639static void
16640CRC32_Fixup (int bytemode, int sizeflag)
16641{
16642 /* Add proper suffix to "crc32". */
ea397f5b 16643 char *p = mnemonicendp;
381d071f
L
16644
16645 switch (bytemode)
16646 {
16647 case b_mode:
20592a94 16648 if (intel_syntax)
ea397f5b 16649 goto skip;
20592a94 16650
381d071f
L
16651 *p++ = 'b';
16652 break;
16653 case v_mode:
20592a94 16654 if (intel_syntax)
ea397f5b 16655 goto skip;
20592a94 16656
381d071f
L
16657 USED_REX (REX_W);
16658 if (rex & REX_W)
16659 *p++ = 'q';
7bb15c6f 16660 else
f16cd0d5
L
16661 {
16662 if (sizeflag & DFLAG)
16663 *p++ = 'l';
16664 else
16665 *p++ = 'w';
16666 used_prefixes |= (prefixes & PREFIX_DATA);
16667 }
381d071f
L
16668 break;
16669 default:
16670 oappend (INTERNAL_DISASSEMBLER_ERROR);
16671 break;
16672 }
ea397f5b 16673 mnemonicendp = p;
381d071f
L
16674 *p = '\0';
16675
ea397f5b 16676skip:
381d071f
L
16677 if (modrm.mod == 3)
16678 {
16679 int add;
16680
16681 /* Skip mod/rm byte. */
16682 MODRM_CHECK;
16683 codep++;
16684
16685 USED_REX (REX_B);
16686 add = (rex & REX_B) ? 8 : 0;
16687 if (bytemode == b_mode)
16688 {
16689 USED_REX (0);
16690 if (rex)
16691 oappend (names8rex[modrm.rm + add]);
16692 else
16693 oappend (names8[modrm.rm + add]);
16694 }
16695 else
16696 {
16697 USED_REX (REX_W);
16698 if (rex & REX_W)
16699 oappend (names64[modrm.rm + add]);
16700 else if ((prefixes & PREFIX_DATA))
16701 oappend (names16[modrm.rm + add]);
16702 else
16703 oappend (names32[modrm.rm + add]);
16704 }
16705 }
16706 else
9344ff29 16707 OP_E (bytemode, sizeflag);
381d071f 16708}
85f10a01 16709
eacc9c89
L
16710static void
16711FXSAVE_Fixup (int bytemode, int sizeflag)
16712{
16713 /* Add proper suffix to "fxsave" and "fxrstor". */
16714 USED_REX (REX_W);
16715 if (rex & REX_W)
16716 {
16717 char *p = mnemonicendp;
16718 *p++ = '6';
16719 *p++ = '4';
16720 *p = '\0';
16721 mnemonicendp = p;
16722 }
16723 OP_M (bytemode, sizeflag);
16724}
16725
c0f3af97
L
16726/* Display the destination register operand for instructions with
16727 VEX. */
16728
16729static void
16730OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16731{
539f890d 16732 int reg;
b9733481
L
16733 const char **names;
16734
c0f3af97
L
16735 if (!need_vex)
16736 abort ();
16737
16738 if (!need_vex_reg)
16739 return;
16740
539f890d 16741 reg = vex.register_specifier;
43234a1e
L
16742 if (vex.evex)
16743 {
16744 if (!vex.v)
16745 reg += 16;
16746 }
16747
539f890d
L
16748 if (bytemode == vex_scalar_mode)
16749 {
16750 oappend (names_xmm[reg]);
16751 return;
16752 }
16753
c0f3af97
L
16754 switch (vex.length)
16755 {
16756 case 128:
16757 switch (bytemode)
16758 {
16759 case vex_mode:
16760 case vex128_mode:
6c30d220 16761 case vex_vsib_q_w_dq_mode:
5fc35d96 16762 case vex_vsib_q_w_d_mode:
cb21baef
L
16763 names = names_xmm;
16764 break;
16765 case dq_mode:
16766 if (vex.w)
16767 names = names64;
16768 else
16769 names = names32;
c0f3af97 16770 break;
1ba585e8 16771 case mask_bd_mode:
43234a1e
L
16772 case mask_mode:
16773 names = names_mask;
16774 break;
c0f3af97
L
16775 default:
16776 abort ();
16777 return;
16778 }
c0f3af97
L
16779 break;
16780 case 256:
16781 switch (bytemode)
16782 {
16783 case vex_mode:
16784 case vex256_mode:
6c30d220
L
16785 names = names_ymm;
16786 break;
16787 case vex_vsib_q_w_dq_mode:
5fc35d96 16788 case vex_vsib_q_w_d_mode:
6c30d220 16789 names = vex.w ? names_ymm : names_xmm;
c0f3af97 16790 break;
1ba585e8 16791 case mask_bd_mode:
43234a1e
L
16792 case mask_mode:
16793 names = names_mask;
16794 break;
c0f3af97
L
16795 default:
16796 abort ();
16797 return;
16798 }
c0f3af97 16799 break;
43234a1e
L
16800 case 512:
16801 names = names_zmm;
16802 break;
c0f3af97
L
16803 default:
16804 abort ();
16805 break;
16806 }
539f890d 16807 oappend (names[reg]);
c0f3af97
L
16808}
16809
922d8de8
DR
16810/* Get the VEX immediate byte without moving codep. */
16811
16812static unsigned char
ccc5981b 16813get_vex_imm8 (int sizeflag, int opnum)
922d8de8
DR
16814{
16815 int bytes_before_imm = 0;
16816
922d8de8
DR
16817 if (modrm.mod != 3)
16818 {
16819 /* There are SIB/displacement bytes. */
16820 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
6c067bbb 16821 {
922d8de8 16822 /* 32/64 bit address mode */
6c067bbb 16823 int base = modrm.rm;
922d8de8
DR
16824
16825 /* Check SIB byte. */
6c067bbb
RM
16826 if (base == 4)
16827 {
16828 FETCH_DATA (the_info, codep + 1);
16829 base = *codep & 7;
16830 /* When decoding the third source, don't increase
16831 bytes_before_imm as this has already been incremented
16832 by one in OP_E_memory while decoding the second
16833 source operand. */
16834 if (opnum == 0)
16835 bytes_before_imm++;
16836 }
16837
16838 /* Don't increase bytes_before_imm when decoding the third source,
16839 it has already been incremented by OP_E_memory while decoding
16840 the second source operand. */
16841 if (opnum == 0)
16842 {
16843 switch (modrm.mod)
16844 {
16845 case 0:
16846 /* When modrm.rm == 5 or modrm.rm == 4 and base in
16847 SIB == 5, there is a 4 byte displacement. */
16848 if (base != 5)
16849 /* No displacement. */
16850 break;
16851 case 2:
16852 /* 4 byte displacement. */
16853 bytes_before_imm += 4;
16854 break;
16855 case 1:
16856 /* 1 byte displacement. */
16857 bytes_before_imm++;
16858 break;
16859 }
16860 }
16861 }
922d8de8 16862 else
02e647f9
SP
16863 {
16864 /* 16 bit address mode */
6c067bbb
RM
16865 /* Don't increase bytes_before_imm when decoding the third source,
16866 it has already been incremented by OP_E_memory while decoding
16867 the second source operand. */
16868 if (opnum == 0)
16869 {
02e647f9
SP
16870 switch (modrm.mod)
16871 {
16872 case 0:
16873 /* When modrm.rm == 6, there is a 2 byte displacement. */
16874 if (modrm.rm != 6)
16875 /* No displacement. */
16876 break;
16877 case 2:
16878 /* 2 byte displacement. */
16879 bytes_before_imm += 2;
16880 break;
16881 case 1:
16882 /* 1 byte displacement: when decoding the third source,
16883 don't increase bytes_before_imm as this has already
16884 been incremented by one in OP_E_memory while decoding
16885 the second source operand. */
16886 if (opnum == 0)
16887 bytes_before_imm++;
ccc5981b 16888
02e647f9
SP
16889 break;
16890 }
922d8de8
DR
16891 }
16892 }
16893 }
16894
16895 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
16896 return codep [bytes_before_imm];
16897}
16898
16899static void
16900OP_EX_VexReg (int bytemode, int sizeflag, int reg)
16901{
b9733481
L
16902 const char **names;
16903
922d8de8
DR
16904 if (reg == -1 && modrm.mod != 3)
16905 {
16906 OP_E_memory (bytemode, sizeflag);
16907 return;
16908 }
16909 else
16910 {
16911 if (reg == -1)
16912 {
16913 reg = modrm.rm;
16914 USED_REX (REX_B);
16915 if (rex & REX_B)
16916 reg += 8;
16917 }
16918 else if (reg > 7 && address_mode != mode_64bit)
16919 BadOp ();
16920 }
16921
16922 switch (vex.length)
16923 {
16924 case 128:
b9733481 16925 names = names_xmm;
922d8de8
DR
16926 break;
16927 case 256:
b9733481 16928 names = names_ymm;
922d8de8
DR
16929 break;
16930 default:
16931 abort ();
16932 }
b9733481 16933 oappend (names[reg]);
922d8de8
DR
16934}
16935
a683cc34
SP
16936static void
16937OP_EX_VexImmW (int bytemode, int sizeflag)
16938{
16939 int reg = -1;
16940 static unsigned char vex_imm8;
16941
16942 if (vex_w_done == 0)
16943 {
16944 vex_w_done = 1;
16945
16946 /* Skip mod/rm byte. */
16947 MODRM_CHECK;
16948 codep++;
16949
16950 vex_imm8 = get_vex_imm8 (sizeflag, 0);
16951
16952 if (vex.w)
16953 reg = vex_imm8 >> 4;
16954
16955 OP_EX_VexReg (bytemode, sizeflag, reg);
16956 }
16957 else if (vex_w_done == 1)
16958 {
16959 vex_w_done = 2;
16960
16961 if (!vex.w)
16962 reg = vex_imm8 >> 4;
16963
16964 OP_EX_VexReg (bytemode, sizeflag, reg);
16965 }
16966 else
16967 {
16968 /* Output the imm8 directly. */
16969 scratchbuf[0] = '$';
16970 print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
9ce09ba2 16971 oappend_maybe_intel (scratchbuf);
a683cc34
SP
16972 scratchbuf[0] = '\0';
16973 codep++;
16974 }
16975}
16976
5dd85c99
SP
16977static void
16978OP_Vex_2src (int bytemode, int sizeflag)
16979{
16980 if (modrm.mod == 3)
16981 {
b9733481 16982 int reg = modrm.rm;
5dd85c99 16983 USED_REX (REX_B);
b9733481
L
16984 if (rex & REX_B)
16985 reg += 8;
16986 oappend (names_xmm[reg]);
5dd85c99
SP
16987 }
16988 else
16989 {
16990 if (intel_syntax
16991 && (bytemode == v_mode || bytemode == v_swap_mode))
16992 {
16993 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16994 used_prefixes |= (prefixes & PREFIX_DATA);
16995 }
16996 OP_E (bytemode, sizeflag);
16997 }
16998}
16999
17000static void
17001OP_Vex_2src_1 (int bytemode, int sizeflag)
17002{
17003 if (modrm.mod == 3)
17004 {
17005 /* Skip mod/rm byte. */
17006 MODRM_CHECK;
17007 codep++;
17008 }
17009
17010 if (vex.w)
b9733481 17011 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
17012 else
17013 OP_Vex_2src (bytemode, sizeflag);
17014}
17015
17016static void
17017OP_Vex_2src_2 (int bytemode, int sizeflag)
17018{
17019 if (vex.w)
17020 OP_Vex_2src (bytemode, sizeflag);
17021 else
b9733481 17022 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
17023}
17024
922d8de8
DR
17025static void
17026OP_EX_VexW (int bytemode, int sizeflag)
17027{
17028 int reg = -1;
17029
17030 if (!vex_w_done)
17031 {
17032 vex_w_done = 1;
41effecb
SP
17033
17034 /* Skip mod/rm byte. */
17035 MODRM_CHECK;
17036 codep++;
17037
922d8de8 17038 if (vex.w)
ccc5981b 17039 reg = get_vex_imm8 (sizeflag, 0) >> 4;
922d8de8
DR
17040 }
17041 else
17042 {
17043 if (!vex.w)
ccc5981b 17044 reg = get_vex_imm8 (sizeflag, 1) >> 4;
922d8de8
DR
17045 }
17046
17047 OP_EX_VexReg (bytemode, sizeflag, reg);
17048}
17049
922d8de8
DR
17050static void
17051VEXI4_Fixup (int bytemode ATTRIBUTE_UNUSED,
17052 int sizeflag ATTRIBUTE_UNUSED)
17053{
17054 /* Skip the immediate byte and check for invalid bits. */
17055 FETCH_DATA (the_info, codep + 1);
17056 if (*codep++ & 0xf)
17057 BadOp ();
17058}
17059
c0f3af97
L
17060static void
17061OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17062{
17063 int reg;
b9733481
L
17064 const char **names;
17065
c0f3af97
L
17066 FETCH_DATA (the_info, codep + 1);
17067 reg = *codep++;
17068
17069 if (bytemode != x_mode)
17070 abort ();
17071
17072 if (reg & 0xf)
17073 BadOp ();
17074
17075 reg >>= 4;
dae39acc
L
17076 if (reg > 7 && address_mode != mode_64bit)
17077 BadOp ();
17078
c0f3af97
L
17079 switch (vex.length)
17080 {
17081 case 128:
b9733481 17082 names = names_xmm;
c0f3af97
L
17083 break;
17084 case 256:
b9733481 17085 names = names_ymm;
c0f3af97
L
17086 break;
17087 default:
17088 abort ();
17089 }
b9733481 17090 oappend (names[reg]);
c0f3af97
L
17091}
17092
922d8de8
DR
17093static void
17094OP_XMM_VexW (int bytemode, int sizeflag)
17095{
17096 /* Turn off the REX.W bit since it is used for swapping operands
17097 now. */
17098 rex &= ~REX_W;
17099 OP_XMM (bytemode, sizeflag);
17100}
17101
c0f3af97
L
17102static void
17103OP_EX_Vex (int bytemode, int sizeflag)
17104{
17105 if (modrm.mod != 3)
17106 {
17107 if (vex.register_specifier != 0)
17108 BadOp ();
17109 need_vex_reg = 0;
17110 }
17111 OP_EX (bytemode, sizeflag);
17112}
17113
17114static void
17115OP_XMM_Vex (int bytemode, int sizeflag)
17116{
17117 if (modrm.mod != 3)
17118 {
17119 if (vex.register_specifier != 0)
17120 BadOp ();
17121 need_vex_reg = 0;
17122 }
17123 OP_XMM (bytemode, sizeflag);
17124}
17125
17126static void
17127VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17128{
17129 switch (vex.length)
17130 {
17131 case 128:
ea397f5b 17132 mnemonicendp = stpcpy (obuf, "vzeroupper");
c0f3af97
L
17133 break;
17134 case 256:
ea397f5b 17135 mnemonicendp = stpcpy (obuf, "vzeroall");
c0f3af97
L
17136 break;
17137 default:
17138 abort ();
17139 }
17140}
17141
ea397f5b
L
17142static struct op vex_cmp_op[] =
17143{
17144 { STRING_COMMA_LEN ("eq") },
17145 { STRING_COMMA_LEN ("lt") },
17146 { STRING_COMMA_LEN ("le") },
17147 { STRING_COMMA_LEN ("unord") },
17148 { STRING_COMMA_LEN ("neq") },
17149 { STRING_COMMA_LEN ("nlt") },
17150 { STRING_COMMA_LEN ("nle") },
17151 { STRING_COMMA_LEN ("ord") },
17152 { STRING_COMMA_LEN ("eq_uq") },
17153 { STRING_COMMA_LEN ("nge") },
17154 { STRING_COMMA_LEN ("ngt") },
17155 { STRING_COMMA_LEN ("false") },
17156 { STRING_COMMA_LEN ("neq_oq") },
17157 { STRING_COMMA_LEN ("ge") },
17158 { STRING_COMMA_LEN ("gt") },
17159 { STRING_COMMA_LEN ("true") },
17160 { STRING_COMMA_LEN ("eq_os") },
17161 { STRING_COMMA_LEN ("lt_oq") },
17162 { STRING_COMMA_LEN ("le_oq") },
17163 { STRING_COMMA_LEN ("unord_s") },
17164 { STRING_COMMA_LEN ("neq_us") },
17165 { STRING_COMMA_LEN ("nlt_uq") },
17166 { STRING_COMMA_LEN ("nle_uq") },
17167 { STRING_COMMA_LEN ("ord_s") },
17168 { STRING_COMMA_LEN ("eq_us") },
17169 { STRING_COMMA_LEN ("nge_uq") },
17170 { STRING_COMMA_LEN ("ngt_uq") },
17171 { STRING_COMMA_LEN ("false_os") },
17172 { STRING_COMMA_LEN ("neq_os") },
17173 { STRING_COMMA_LEN ("ge_oq") },
17174 { STRING_COMMA_LEN ("gt_oq") },
17175 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
17176};
17177
17178static void
17179VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17180{
17181 unsigned int cmp_type;
17182
17183 FETCH_DATA (the_info, codep + 1);
17184 cmp_type = *codep++ & 0xff;
17185 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
17186 {
17187 char suffix [3];
ea397f5b 17188 char *p = mnemonicendp - 2;
c0f3af97
L
17189 suffix[0] = p[0];
17190 suffix[1] = p[1];
17191 suffix[2] = '\0';
ea397f5b
L
17192 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
17193 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
17194 }
17195 else
17196 {
17197 /* We have a reserved extension byte. Output it directly. */
17198 scratchbuf[0] = '$';
17199 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 17200 oappend_maybe_intel (scratchbuf);
c0f3af97
L
17201 scratchbuf[0] = '\0';
17202 }
17203}
17204
43234a1e
L
17205static void
17206VPCMP_Fixup (int bytemode ATTRIBUTE_UNUSED,
17207 int sizeflag ATTRIBUTE_UNUSED)
17208{
17209 unsigned int cmp_type;
17210
17211 if (!vex.evex)
17212 abort ();
17213
17214 FETCH_DATA (the_info, codep + 1);
17215 cmp_type = *codep++ & 0xff;
17216 /* There are aliases for immediates 0, 1, 2, 4, 5, 6.
17217 If it's the case, print suffix, otherwise - print the immediate. */
17218 if (cmp_type < ARRAY_SIZE (simd_cmp_op)
17219 && cmp_type != 3
17220 && cmp_type != 7)
17221 {
17222 char suffix [3];
17223 char *p = mnemonicendp - 2;
17224
17225 /* vpcmp* can have both one- and two-lettered suffix. */
17226 if (p[0] == 'p')
17227 {
17228 p++;
17229 suffix[0] = p[0];
17230 suffix[1] = '\0';
17231 }
17232 else
17233 {
17234 suffix[0] = p[0];
17235 suffix[1] = p[1];
17236 suffix[2] = '\0';
17237 }
17238
17239 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
17240 mnemonicendp += simd_cmp_op[cmp_type].len;
17241 }
17242 else
17243 {
17244 /* We have a reserved extension byte. Output it directly. */
17245 scratchbuf[0] = '$';
17246 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 17247 oappend_maybe_intel (scratchbuf);
43234a1e
L
17248 scratchbuf[0] = '\0';
17249 }
17250}
17251
ea397f5b
L
17252static const struct op pclmul_op[] =
17253{
17254 { STRING_COMMA_LEN ("lql") },
17255 { STRING_COMMA_LEN ("hql") },
17256 { STRING_COMMA_LEN ("lqh") },
17257 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
17258};
17259
17260static void
17261PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
17262 int sizeflag ATTRIBUTE_UNUSED)
17263{
17264 unsigned int pclmul_type;
17265
17266 FETCH_DATA (the_info, codep + 1);
17267 pclmul_type = *codep++ & 0xff;
17268 switch (pclmul_type)
17269 {
17270 case 0x10:
17271 pclmul_type = 2;
17272 break;
17273 case 0x11:
17274 pclmul_type = 3;
17275 break;
17276 default:
17277 break;
7bb15c6f 17278 }
c0f3af97
L
17279 if (pclmul_type < ARRAY_SIZE (pclmul_op))
17280 {
17281 char suffix [4];
ea397f5b 17282 char *p = mnemonicendp - 3;
c0f3af97
L
17283 suffix[0] = p[0];
17284 suffix[1] = p[1];
17285 suffix[2] = p[2];
17286 suffix[3] = '\0';
ea397f5b
L
17287 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
17288 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
17289 }
17290 else
17291 {
17292 /* We have a reserved extension byte. Output it directly. */
17293 scratchbuf[0] = '$';
17294 print_operand_value (scratchbuf + 1, 1, pclmul_type);
9ce09ba2 17295 oappend_maybe_intel (scratchbuf);
c0f3af97
L
17296 scratchbuf[0] = '\0';
17297 }
17298}
17299
f1f8f695
L
17300static void
17301MOVBE_Fixup (int bytemode, int sizeflag)
17302{
17303 /* Add proper suffix to "movbe". */
ea397f5b 17304 char *p = mnemonicendp;
f1f8f695
L
17305
17306 switch (bytemode)
17307 {
17308 case v_mode:
17309 if (intel_syntax)
ea397f5b 17310 goto skip;
f1f8f695
L
17311
17312 USED_REX (REX_W);
17313 if (sizeflag & SUFFIX_ALWAYS)
17314 {
17315 if (rex & REX_W)
17316 *p++ = 'q';
f1f8f695 17317 else
f16cd0d5
L
17318 {
17319 if (sizeflag & DFLAG)
17320 *p++ = 'l';
17321 else
17322 *p++ = 'w';
17323 used_prefixes |= (prefixes & PREFIX_DATA);
17324 }
f1f8f695 17325 }
f1f8f695
L
17326 break;
17327 default:
17328 oappend (INTERNAL_DISASSEMBLER_ERROR);
17329 break;
17330 }
ea397f5b 17331 mnemonicendp = p;
f1f8f695
L
17332 *p = '\0';
17333
ea397f5b 17334skip:
f1f8f695
L
17335 OP_M (bytemode, sizeflag);
17336}
f88c9eb0
SP
17337
17338static void
17339OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17340{
17341 int reg;
17342 const char **names;
17343
17344 /* Skip mod/rm byte. */
17345 MODRM_CHECK;
17346 codep++;
17347
17348 if (vex.w)
17349 names = names64;
f88c9eb0 17350 else
ce7d077e 17351 names = names32;
f88c9eb0
SP
17352
17353 reg = modrm.rm;
17354 USED_REX (REX_B);
17355 if (rex & REX_B)
17356 reg += 8;
17357
17358 oappend (names[reg]);
17359}
17360
17361static void
17362OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17363{
17364 const char **names;
17365
17366 if (vex.w)
17367 names = names64;
f88c9eb0 17368 else
ce7d077e 17369 names = names32;
f88c9eb0
SP
17370
17371 oappend (names[vex.register_specifier]);
17372}
43234a1e
L
17373
17374static void
17375OP_Mask (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17376{
17377 if (!vex.evex
1ba585e8 17378 || (bytemode != mask_mode && bytemode != mask_bd_mode))
43234a1e
L
17379 abort ();
17380
17381 USED_REX (REX_R);
17382 if ((rex & REX_R) != 0 || !vex.r)
17383 {
17384 BadOp ();
17385 return;
17386 }
17387
17388 oappend (names_mask [modrm.reg]);
17389}
17390
17391static void
17392OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17393{
17394 if (!vex.evex
17395 || (bytemode != evex_rounding_mode
17396 && bytemode != evex_sae_mode))
17397 abort ();
17398 if (modrm.mod == 3 && vex.b)
17399 switch (bytemode)
17400 {
17401 case evex_rounding_mode:
17402 oappend (names_rounding[vex.ll]);
17403 break;
17404 case evex_sae_mode:
17405 oappend ("{sae}");
17406 break;
17407 default:
17408 break;
17409 }
17410}
This page took 1.95122 seconds and 4 git commands to generate.