x86: don't require operand size specification for AVX512 broadcasts
[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,
1635 X86_64_EA,
1636 X86_64_0F01_REG_0,
1637 X86_64_0F01_REG_1,
1638 X86_64_0F01_REG_2,
1639 X86_64_0F01_REG_3
51e7da1b 1640};
4e7d34a6 1641
51e7da1b
L
1642enum
1643{
1644 THREE_BYTE_0F38 = 0,
3873ba12
L
1645 THREE_BYTE_0F3A,
1646 THREE_BYTE_0F7A
51e7da1b 1647};
4e7d34a6 1648
f88c9eb0
SP
1649enum
1650{
5dd85c99
SP
1651 XOP_08 = 0,
1652 XOP_09,
f88c9eb0
SP
1653 XOP_0A
1654};
1655
51e7da1b
L
1656enum
1657{
1658 VEX_0F = 0,
3873ba12
L
1659 VEX_0F38,
1660 VEX_0F3A
51e7da1b 1661};
c0f3af97 1662
43234a1e
L
1663enum
1664{
1665 EVEX_0F = 0,
1666 EVEX_0F38,
1667 EVEX_0F3A
1668};
1669
51e7da1b
L
1670enum
1671{
592a252b
L
1672 VEX_LEN_0F10_P_1 = 0,
1673 VEX_LEN_0F10_P_3,
1674 VEX_LEN_0F11_P_1,
1675 VEX_LEN_0F11_P_3,
1676 VEX_LEN_0F12_P_0_M_0,
1677 VEX_LEN_0F12_P_0_M_1,
1678 VEX_LEN_0F12_P_2,
1679 VEX_LEN_0F13_M_0,
1680 VEX_LEN_0F16_P_0_M_0,
1681 VEX_LEN_0F16_P_0_M_1,
1682 VEX_LEN_0F16_P_2,
1683 VEX_LEN_0F17_M_0,
1684 VEX_LEN_0F2A_P_1,
1685 VEX_LEN_0F2A_P_3,
1686 VEX_LEN_0F2C_P_1,
1687 VEX_LEN_0F2C_P_3,
1688 VEX_LEN_0F2D_P_1,
1689 VEX_LEN_0F2D_P_3,
1690 VEX_LEN_0F2E_P_0,
1691 VEX_LEN_0F2E_P_2,
1692 VEX_LEN_0F2F_P_0,
1693 VEX_LEN_0F2F_P_2,
43234a1e 1694 VEX_LEN_0F41_P_0,
1ba585e8 1695 VEX_LEN_0F41_P_2,
43234a1e 1696 VEX_LEN_0F42_P_0,
1ba585e8 1697 VEX_LEN_0F42_P_2,
43234a1e 1698 VEX_LEN_0F44_P_0,
1ba585e8 1699 VEX_LEN_0F44_P_2,
43234a1e 1700 VEX_LEN_0F45_P_0,
1ba585e8 1701 VEX_LEN_0F45_P_2,
43234a1e 1702 VEX_LEN_0F46_P_0,
1ba585e8 1703 VEX_LEN_0F46_P_2,
43234a1e 1704 VEX_LEN_0F47_P_0,
1ba585e8
IT
1705 VEX_LEN_0F47_P_2,
1706 VEX_LEN_0F4A_P_0,
1707 VEX_LEN_0F4A_P_2,
1708 VEX_LEN_0F4B_P_0,
43234a1e 1709 VEX_LEN_0F4B_P_2,
592a252b
L
1710 VEX_LEN_0F51_P_1,
1711 VEX_LEN_0F51_P_3,
1712 VEX_LEN_0F52_P_1,
1713 VEX_LEN_0F53_P_1,
1714 VEX_LEN_0F58_P_1,
1715 VEX_LEN_0F58_P_3,
1716 VEX_LEN_0F59_P_1,
1717 VEX_LEN_0F59_P_3,
1718 VEX_LEN_0F5A_P_1,
1719 VEX_LEN_0F5A_P_3,
1720 VEX_LEN_0F5C_P_1,
1721 VEX_LEN_0F5C_P_3,
1722 VEX_LEN_0F5D_P_1,
1723 VEX_LEN_0F5D_P_3,
1724 VEX_LEN_0F5E_P_1,
1725 VEX_LEN_0F5E_P_3,
1726 VEX_LEN_0F5F_P_1,
1727 VEX_LEN_0F5F_P_3,
592a252b 1728 VEX_LEN_0F6E_P_2,
592a252b
L
1729 VEX_LEN_0F7E_P_1,
1730 VEX_LEN_0F7E_P_2,
43234a1e 1731 VEX_LEN_0F90_P_0,
1ba585e8 1732 VEX_LEN_0F90_P_2,
43234a1e 1733 VEX_LEN_0F91_P_0,
1ba585e8 1734 VEX_LEN_0F91_P_2,
43234a1e 1735 VEX_LEN_0F92_P_0,
90a915bf 1736 VEX_LEN_0F92_P_2,
1ba585e8 1737 VEX_LEN_0F92_P_3,
43234a1e 1738 VEX_LEN_0F93_P_0,
90a915bf 1739 VEX_LEN_0F93_P_2,
1ba585e8 1740 VEX_LEN_0F93_P_3,
43234a1e 1741 VEX_LEN_0F98_P_0,
1ba585e8
IT
1742 VEX_LEN_0F98_P_2,
1743 VEX_LEN_0F99_P_0,
1744 VEX_LEN_0F99_P_2,
592a252b
L
1745 VEX_LEN_0FAE_R_2_M_0,
1746 VEX_LEN_0FAE_R_3_M_0,
1747 VEX_LEN_0FC2_P_1,
1748 VEX_LEN_0FC2_P_3,
1749 VEX_LEN_0FC4_P_2,
1750 VEX_LEN_0FC5_P_2,
592a252b 1751 VEX_LEN_0FD6_P_2,
592a252b 1752 VEX_LEN_0FF7_P_2,
6c30d220
L
1753 VEX_LEN_0F3816_P_2,
1754 VEX_LEN_0F3819_P_2,
592a252b 1755 VEX_LEN_0F381A_P_2_M_0,
6c30d220 1756 VEX_LEN_0F3836_P_2,
592a252b 1757 VEX_LEN_0F3841_P_2,
6c30d220 1758 VEX_LEN_0F385A_P_2_M_0,
592a252b
L
1759 VEX_LEN_0F38DB_P_2,
1760 VEX_LEN_0F38DC_P_2,
1761 VEX_LEN_0F38DD_P_2,
1762 VEX_LEN_0F38DE_P_2,
1763 VEX_LEN_0F38DF_P_2,
f12dc422
L
1764 VEX_LEN_0F38F2_P_0,
1765 VEX_LEN_0F38F3_R_1_P_0,
1766 VEX_LEN_0F38F3_R_2_P_0,
1767 VEX_LEN_0F38F3_R_3_P_0,
6c30d220
L
1768 VEX_LEN_0F38F5_P_0,
1769 VEX_LEN_0F38F5_P_1,
1770 VEX_LEN_0F38F5_P_3,
1771 VEX_LEN_0F38F6_P_3,
f12dc422 1772 VEX_LEN_0F38F7_P_0,
6c30d220
L
1773 VEX_LEN_0F38F7_P_1,
1774 VEX_LEN_0F38F7_P_2,
1775 VEX_LEN_0F38F7_P_3,
1776 VEX_LEN_0F3A00_P_2,
1777 VEX_LEN_0F3A01_P_2,
592a252b
L
1778 VEX_LEN_0F3A06_P_2,
1779 VEX_LEN_0F3A0A_P_2,
1780 VEX_LEN_0F3A0B_P_2,
592a252b
L
1781 VEX_LEN_0F3A14_P_2,
1782 VEX_LEN_0F3A15_P_2,
1783 VEX_LEN_0F3A16_P_2,
1784 VEX_LEN_0F3A17_P_2,
1785 VEX_LEN_0F3A18_P_2,
1786 VEX_LEN_0F3A19_P_2,
1787 VEX_LEN_0F3A20_P_2,
1788 VEX_LEN_0F3A21_P_2,
1789 VEX_LEN_0F3A22_P_2,
43234a1e 1790 VEX_LEN_0F3A30_P_2,
1ba585e8 1791 VEX_LEN_0F3A31_P_2,
43234a1e 1792 VEX_LEN_0F3A32_P_2,
1ba585e8 1793 VEX_LEN_0F3A33_P_2,
6c30d220
L
1794 VEX_LEN_0F3A38_P_2,
1795 VEX_LEN_0F3A39_P_2,
592a252b 1796 VEX_LEN_0F3A41_P_2,
592a252b 1797 VEX_LEN_0F3A44_P_2,
6c30d220 1798 VEX_LEN_0F3A46_P_2,
592a252b
L
1799 VEX_LEN_0F3A60_P_2,
1800 VEX_LEN_0F3A61_P_2,
1801 VEX_LEN_0F3A62_P_2,
1802 VEX_LEN_0F3A63_P_2,
1803 VEX_LEN_0F3A6A_P_2,
1804 VEX_LEN_0F3A6B_P_2,
1805 VEX_LEN_0F3A6E_P_2,
1806 VEX_LEN_0F3A6F_P_2,
1807 VEX_LEN_0F3A7A_P_2,
1808 VEX_LEN_0F3A7B_P_2,
1809 VEX_LEN_0F3A7E_P_2,
1810 VEX_LEN_0F3A7F_P_2,
1811 VEX_LEN_0F3ADF_P_2,
6c30d220 1812 VEX_LEN_0F3AF0_P_3,
ff688e1f
L
1813 VEX_LEN_0FXOP_08_CC,
1814 VEX_LEN_0FXOP_08_CD,
1815 VEX_LEN_0FXOP_08_CE,
1816 VEX_LEN_0FXOP_08_CF,
1817 VEX_LEN_0FXOP_08_EC,
1818 VEX_LEN_0FXOP_08_ED,
1819 VEX_LEN_0FXOP_08_EE,
1820 VEX_LEN_0FXOP_08_EF,
592a252b
L
1821 VEX_LEN_0FXOP_09_80,
1822 VEX_LEN_0FXOP_09_81
51e7da1b 1823};
c0f3af97 1824
9e30b8e0
L
1825enum
1826{
592a252b
L
1827 VEX_W_0F10_P_0 = 0,
1828 VEX_W_0F10_P_1,
1829 VEX_W_0F10_P_2,
1830 VEX_W_0F10_P_3,
1831 VEX_W_0F11_P_0,
1832 VEX_W_0F11_P_1,
1833 VEX_W_0F11_P_2,
1834 VEX_W_0F11_P_3,
1835 VEX_W_0F12_P_0_M_0,
1836 VEX_W_0F12_P_0_M_1,
1837 VEX_W_0F12_P_1,
1838 VEX_W_0F12_P_2,
1839 VEX_W_0F12_P_3,
1840 VEX_W_0F13_M_0,
1841 VEX_W_0F14,
1842 VEX_W_0F15,
1843 VEX_W_0F16_P_0_M_0,
1844 VEX_W_0F16_P_0_M_1,
1845 VEX_W_0F16_P_1,
1846 VEX_W_0F16_P_2,
1847 VEX_W_0F17_M_0,
1848 VEX_W_0F28,
1849 VEX_W_0F29,
1850 VEX_W_0F2B_M_0,
1851 VEX_W_0F2E_P_0,
1852 VEX_W_0F2E_P_2,
1853 VEX_W_0F2F_P_0,
1854 VEX_W_0F2F_P_2,
43234a1e 1855 VEX_W_0F41_P_0_LEN_1,
1ba585e8 1856 VEX_W_0F41_P_2_LEN_1,
43234a1e 1857 VEX_W_0F42_P_0_LEN_1,
1ba585e8 1858 VEX_W_0F42_P_2_LEN_1,
43234a1e 1859 VEX_W_0F44_P_0_LEN_0,
1ba585e8 1860 VEX_W_0F44_P_2_LEN_0,
43234a1e 1861 VEX_W_0F45_P_0_LEN_1,
1ba585e8 1862 VEX_W_0F45_P_2_LEN_1,
43234a1e 1863 VEX_W_0F46_P_0_LEN_1,
1ba585e8 1864 VEX_W_0F46_P_2_LEN_1,
43234a1e 1865 VEX_W_0F47_P_0_LEN_1,
1ba585e8
IT
1866 VEX_W_0F47_P_2_LEN_1,
1867 VEX_W_0F4A_P_0_LEN_1,
1868 VEX_W_0F4A_P_2_LEN_1,
1869 VEX_W_0F4B_P_0_LEN_1,
43234a1e 1870 VEX_W_0F4B_P_2_LEN_1,
592a252b
L
1871 VEX_W_0F50_M_0,
1872 VEX_W_0F51_P_0,
1873 VEX_W_0F51_P_1,
1874 VEX_W_0F51_P_2,
1875 VEX_W_0F51_P_3,
1876 VEX_W_0F52_P_0,
1877 VEX_W_0F52_P_1,
1878 VEX_W_0F53_P_0,
1879 VEX_W_0F53_P_1,
1880 VEX_W_0F58_P_0,
1881 VEX_W_0F58_P_1,
1882 VEX_W_0F58_P_2,
1883 VEX_W_0F58_P_3,
1884 VEX_W_0F59_P_0,
1885 VEX_W_0F59_P_1,
1886 VEX_W_0F59_P_2,
1887 VEX_W_0F59_P_3,
1888 VEX_W_0F5A_P_0,
1889 VEX_W_0F5A_P_1,
1890 VEX_W_0F5A_P_3,
1891 VEX_W_0F5B_P_0,
1892 VEX_W_0F5B_P_1,
1893 VEX_W_0F5B_P_2,
1894 VEX_W_0F5C_P_0,
1895 VEX_W_0F5C_P_1,
1896 VEX_W_0F5C_P_2,
1897 VEX_W_0F5C_P_3,
1898 VEX_W_0F5D_P_0,
1899 VEX_W_0F5D_P_1,
1900 VEX_W_0F5D_P_2,
1901 VEX_W_0F5D_P_3,
1902 VEX_W_0F5E_P_0,
1903 VEX_W_0F5E_P_1,
1904 VEX_W_0F5E_P_2,
1905 VEX_W_0F5E_P_3,
1906 VEX_W_0F5F_P_0,
1907 VEX_W_0F5F_P_1,
1908 VEX_W_0F5F_P_2,
1909 VEX_W_0F5F_P_3,
1910 VEX_W_0F60_P_2,
1911 VEX_W_0F61_P_2,
1912 VEX_W_0F62_P_2,
1913 VEX_W_0F63_P_2,
1914 VEX_W_0F64_P_2,
1915 VEX_W_0F65_P_2,
1916 VEX_W_0F66_P_2,
1917 VEX_W_0F67_P_2,
1918 VEX_W_0F68_P_2,
1919 VEX_W_0F69_P_2,
1920 VEX_W_0F6A_P_2,
1921 VEX_W_0F6B_P_2,
1922 VEX_W_0F6C_P_2,
1923 VEX_W_0F6D_P_2,
1924 VEX_W_0F6F_P_1,
1925 VEX_W_0F6F_P_2,
1926 VEX_W_0F70_P_1,
1927 VEX_W_0F70_P_2,
1928 VEX_W_0F70_P_3,
1929 VEX_W_0F71_R_2_P_2,
1930 VEX_W_0F71_R_4_P_2,
1931 VEX_W_0F71_R_6_P_2,
1932 VEX_W_0F72_R_2_P_2,
1933 VEX_W_0F72_R_4_P_2,
1934 VEX_W_0F72_R_6_P_2,
1935 VEX_W_0F73_R_2_P_2,
1936 VEX_W_0F73_R_3_P_2,
1937 VEX_W_0F73_R_6_P_2,
1938 VEX_W_0F73_R_7_P_2,
1939 VEX_W_0F74_P_2,
1940 VEX_W_0F75_P_2,
1941 VEX_W_0F76_P_2,
1942 VEX_W_0F77_P_0,
1943 VEX_W_0F7C_P_2,
1944 VEX_W_0F7C_P_3,
1945 VEX_W_0F7D_P_2,
1946 VEX_W_0F7D_P_3,
1947 VEX_W_0F7E_P_1,
1948 VEX_W_0F7F_P_1,
1949 VEX_W_0F7F_P_2,
43234a1e 1950 VEX_W_0F90_P_0_LEN_0,
1ba585e8 1951 VEX_W_0F90_P_2_LEN_0,
43234a1e 1952 VEX_W_0F91_P_0_LEN_0,
1ba585e8 1953 VEX_W_0F91_P_2_LEN_0,
43234a1e 1954 VEX_W_0F92_P_0_LEN_0,
90a915bf 1955 VEX_W_0F92_P_2_LEN_0,
1ba585e8 1956 VEX_W_0F92_P_3_LEN_0,
43234a1e 1957 VEX_W_0F93_P_0_LEN_0,
90a915bf 1958 VEX_W_0F93_P_2_LEN_0,
1ba585e8 1959 VEX_W_0F93_P_3_LEN_0,
43234a1e 1960 VEX_W_0F98_P_0_LEN_0,
1ba585e8
IT
1961 VEX_W_0F98_P_2_LEN_0,
1962 VEX_W_0F99_P_0_LEN_0,
1963 VEX_W_0F99_P_2_LEN_0,
592a252b
L
1964 VEX_W_0FAE_R_2_M_0,
1965 VEX_W_0FAE_R_3_M_0,
1966 VEX_W_0FC2_P_0,
1967 VEX_W_0FC2_P_1,
1968 VEX_W_0FC2_P_2,
1969 VEX_W_0FC2_P_3,
1970 VEX_W_0FC4_P_2,
1971 VEX_W_0FC5_P_2,
1972 VEX_W_0FD0_P_2,
1973 VEX_W_0FD0_P_3,
1974 VEX_W_0FD1_P_2,
1975 VEX_W_0FD2_P_2,
1976 VEX_W_0FD3_P_2,
1977 VEX_W_0FD4_P_2,
1978 VEX_W_0FD5_P_2,
1979 VEX_W_0FD6_P_2,
1980 VEX_W_0FD7_P_2_M_1,
1981 VEX_W_0FD8_P_2,
1982 VEX_W_0FD9_P_2,
1983 VEX_W_0FDA_P_2,
1984 VEX_W_0FDB_P_2,
1985 VEX_W_0FDC_P_2,
1986 VEX_W_0FDD_P_2,
1987 VEX_W_0FDE_P_2,
1988 VEX_W_0FDF_P_2,
1989 VEX_W_0FE0_P_2,
1990 VEX_W_0FE1_P_2,
1991 VEX_W_0FE2_P_2,
1992 VEX_W_0FE3_P_2,
1993 VEX_W_0FE4_P_2,
1994 VEX_W_0FE5_P_2,
1995 VEX_W_0FE6_P_1,
1996 VEX_W_0FE6_P_2,
1997 VEX_W_0FE6_P_3,
1998 VEX_W_0FE7_P_2_M_0,
1999 VEX_W_0FE8_P_2,
2000 VEX_W_0FE9_P_2,
2001 VEX_W_0FEA_P_2,
2002 VEX_W_0FEB_P_2,
2003 VEX_W_0FEC_P_2,
2004 VEX_W_0FED_P_2,
2005 VEX_W_0FEE_P_2,
2006 VEX_W_0FEF_P_2,
2007 VEX_W_0FF0_P_3_M_0,
2008 VEX_W_0FF1_P_2,
2009 VEX_W_0FF2_P_2,
2010 VEX_W_0FF3_P_2,
2011 VEX_W_0FF4_P_2,
2012 VEX_W_0FF5_P_2,
2013 VEX_W_0FF6_P_2,
2014 VEX_W_0FF7_P_2,
2015 VEX_W_0FF8_P_2,
2016 VEX_W_0FF9_P_2,
2017 VEX_W_0FFA_P_2,
2018 VEX_W_0FFB_P_2,
2019 VEX_W_0FFC_P_2,
2020 VEX_W_0FFD_P_2,
2021 VEX_W_0FFE_P_2,
2022 VEX_W_0F3800_P_2,
2023 VEX_W_0F3801_P_2,
2024 VEX_W_0F3802_P_2,
2025 VEX_W_0F3803_P_2,
2026 VEX_W_0F3804_P_2,
2027 VEX_W_0F3805_P_2,
2028 VEX_W_0F3806_P_2,
2029 VEX_W_0F3807_P_2,
2030 VEX_W_0F3808_P_2,
2031 VEX_W_0F3809_P_2,
2032 VEX_W_0F380A_P_2,
2033 VEX_W_0F380B_P_2,
2034 VEX_W_0F380C_P_2,
2035 VEX_W_0F380D_P_2,
2036 VEX_W_0F380E_P_2,
2037 VEX_W_0F380F_P_2,
6c30d220 2038 VEX_W_0F3816_P_2,
592a252b 2039 VEX_W_0F3817_P_2,
6c30d220
L
2040 VEX_W_0F3818_P_2,
2041 VEX_W_0F3819_P_2,
592a252b
L
2042 VEX_W_0F381A_P_2_M_0,
2043 VEX_W_0F381C_P_2,
2044 VEX_W_0F381D_P_2,
2045 VEX_W_0F381E_P_2,
2046 VEX_W_0F3820_P_2,
2047 VEX_W_0F3821_P_2,
2048 VEX_W_0F3822_P_2,
2049 VEX_W_0F3823_P_2,
2050 VEX_W_0F3824_P_2,
2051 VEX_W_0F3825_P_2,
2052 VEX_W_0F3828_P_2,
2053 VEX_W_0F3829_P_2,
2054 VEX_W_0F382A_P_2_M_0,
2055 VEX_W_0F382B_P_2,
2056 VEX_W_0F382C_P_2_M_0,
2057 VEX_W_0F382D_P_2_M_0,
2058 VEX_W_0F382E_P_2_M_0,
2059 VEX_W_0F382F_P_2_M_0,
2060 VEX_W_0F3830_P_2,
2061 VEX_W_0F3831_P_2,
2062 VEX_W_0F3832_P_2,
2063 VEX_W_0F3833_P_2,
2064 VEX_W_0F3834_P_2,
2065 VEX_W_0F3835_P_2,
6c30d220 2066 VEX_W_0F3836_P_2,
592a252b
L
2067 VEX_W_0F3837_P_2,
2068 VEX_W_0F3838_P_2,
2069 VEX_W_0F3839_P_2,
2070 VEX_W_0F383A_P_2,
2071 VEX_W_0F383B_P_2,
2072 VEX_W_0F383C_P_2,
2073 VEX_W_0F383D_P_2,
2074 VEX_W_0F383E_P_2,
2075 VEX_W_0F383F_P_2,
2076 VEX_W_0F3840_P_2,
2077 VEX_W_0F3841_P_2,
6c30d220
L
2078 VEX_W_0F3846_P_2,
2079 VEX_W_0F3858_P_2,
2080 VEX_W_0F3859_P_2,
2081 VEX_W_0F385A_P_2_M_0,
2082 VEX_W_0F3878_P_2,
2083 VEX_W_0F3879_P_2,
592a252b
L
2084 VEX_W_0F38DB_P_2,
2085 VEX_W_0F38DC_P_2,
2086 VEX_W_0F38DD_P_2,
2087 VEX_W_0F38DE_P_2,
2088 VEX_W_0F38DF_P_2,
6c30d220
L
2089 VEX_W_0F3A00_P_2,
2090 VEX_W_0F3A01_P_2,
2091 VEX_W_0F3A02_P_2,
592a252b
L
2092 VEX_W_0F3A04_P_2,
2093 VEX_W_0F3A05_P_2,
2094 VEX_W_0F3A06_P_2,
2095 VEX_W_0F3A08_P_2,
2096 VEX_W_0F3A09_P_2,
2097 VEX_W_0F3A0A_P_2,
2098 VEX_W_0F3A0B_P_2,
2099 VEX_W_0F3A0C_P_2,
2100 VEX_W_0F3A0D_P_2,
2101 VEX_W_0F3A0E_P_2,
2102 VEX_W_0F3A0F_P_2,
2103 VEX_W_0F3A14_P_2,
2104 VEX_W_0F3A15_P_2,
2105 VEX_W_0F3A18_P_2,
2106 VEX_W_0F3A19_P_2,
2107 VEX_W_0F3A20_P_2,
2108 VEX_W_0F3A21_P_2,
43234a1e 2109 VEX_W_0F3A30_P_2_LEN_0,
1ba585e8 2110 VEX_W_0F3A31_P_2_LEN_0,
43234a1e 2111 VEX_W_0F3A32_P_2_LEN_0,
1ba585e8 2112 VEX_W_0F3A33_P_2_LEN_0,
6c30d220
L
2113 VEX_W_0F3A38_P_2,
2114 VEX_W_0F3A39_P_2,
592a252b
L
2115 VEX_W_0F3A40_P_2,
2116 VEX_W_0F3A41_P_2,
2117 VEX_W_0F3A42_P_2,
2118 VEX_W_0F3A44_P_2,
6c30d220 2119 VEX_W_0F3A46_P_2,
592a252b
L
2120 VEX_W_0F3A48_P_2,
2121 VEX_W_0F3A49_P_2,
2122 VEX_W_0F3A4A_P_2,
2123 VEX_W_0F3A4B_P_2,
2124 VEX_W_0F3A4C_P_2,
2125 VEX_W_0F3A60_P_2,
2126 VEX_W_0F3A61_P_2,
2127 VEX_W_0F3A62_P_2,
2128 VEX_W_0F3A63_P_2,
43234a1e
L
2129 VEX_W_0F3ADF_P_2,
2130
2131 EVEX_W_0F10_P_0,
2132 EVEX_W_0F10_P_1_M_0,
2133 EVEX_W_0F10_P_1_M_1,
2134 EVEX_W_0F10_P_2,
2135 EVEX_W_0F10_P_3_M_0,
2136 EVEX_W_0F10_P_3_M_1,
2137 EVEX_W_0F11_P_0,
2138 EVEX_W_0F11_P_1_M_0,
2139 EVEX_W_0F11_P_1_M_1,
2140 EVEX_W_0F11_P_2,
2141 EVEX_W_0F11_P_3_M_0,
2142 EVEX_W_0F11_P_3_M_1,
2143 EVEX_W_0F12_P_0_M_0,
2144 EVEX_W_0F12_P_0_M_1,
2145 EVEX_W_0F12_P_1,
2146 EVEX_W_0F12_P_2,
2147 EVEX_W_0F12_P_3,
2148 EVEX_W_0F13_P_0,
2149 EVEX_W_0F13_P_2,
2150 EVEX_W_0F14_P_0,
2151 EVEX_W_0F14_P_2,
2152 EVEX_W_0F15_P_0,
2153 EVEX_W_0F15_P_2,
2154 EVEX_W_0F16_P_0_M_0,
2155 EVEX_W_0F16_P_0_M_1,
2156 EVEX_W_0F16_P_1,
2157 EVEX_W_0F16_P_2,
2158 EVEX_W_0F17_P_0,
2159 EVEX_W_0F17_P_2,
2160 EVEX_W_0F28_P_0,
2161 EVEX_W_0F28_P_2,
2162 EVEX_W_0F29_P_0,
2163 EVEX_W_0F29_P_2,
2164 EVEX_W_0F2A_P_1,
2165 EVEX_W_0F2A_P_3,
2166 EVEX_W_0F2B_P_0,
2167 EVEX_W_0F2B_P_2,
2168 EVEX_W_0F2E_P_0,
2169 EVEX_W_0F2E_P_2,
2170 EVEX_W_0F2F_P_0,
2171 EVEX_W_0F2F_P_2,
2172 EVEX_W_0F51_P_0,
2173 EVEX_W_0F51_P_1,
2174 EVEX_W_0F51_P_2,
2175 EVEX_W_0F51_P_3,
90a915bf
IT
2176 EVEX_W_0F54_P_0,
2177 EVEX_W_0F54_P_2,
2178 EVEX_W_0F55_P_0,
2179 EVEX_W_0F55_P_2,
2180 EVEX_W_0F56_P_0,
2181 EVEX_W_0F56_P_2,
2182 EVEX_W_0F57_P_0,
2183 EVEX_W_0F57_P_2,
43234a1e
L
2184 EVEX_W_0F58_P_0,
2185 EVEX_W_0F58_P_1,
2186 EVEX_W_0F58_P_2,
2187 EVEX_W_0F58_P_3,
2188 EVEX_W_0F59_P_0,
2189 EVEX_W_0F59_P_1,
2190 EVEX_W_0F59_P_2,
2191 EVEX_W_0F59_P_3,
2192 EVEX_W_0F5A_P_0,
2193 EVEX_W_0F5A_P_1,
2194 EVEX_W_0F5A_P_2,
2195 EVEX_W_0F5A_P_3,
2196 EVEX_W_0F5B_P_0,
2197 EVEX_W_0F5B_P_1,
2198 EVEX_W_0F5B_P_2,
2199 EVEX_W_0F5C_P_0,
2200 EVEX_W_0F5C_P_1,
2201 EVEX_W_0F5C_P_2,
2202 EVEX_W_0F5C_P_3,
2203 EVEX_W_0F5D_P_0,
2204 EVEX_W_0F5D_P_1,
2205 EVEX_W_0F5D_P_2,
2206 EVEX_W_0F5D_P_3,
2207 EVEX_W_0F5E_P_0,
2208 EVEX_W_0F5E_P_1,
2209 EVEX_W_0F5E_P_2,
2210 EVEX_W_0F5E_P_3,
2211 EVEX_W_0F5F_P_0,
2212 EVEX_W_0F5F_P_1,
2213 EVEX_W_0F5F_P_2,
2214 EVEX_W_0F5F_P_3,
2215 EVEX_W_0F62_P_2,
2216 EVEX_W_0F66_P_2,
2217 EVEX_W_0F6A_P_2,
1ba585e8 2218 EVEX_W_0F6B_P_2,
43234a1e
L
2219 EVEX_W_0F6C_P_2,
2220 EVEX_W_0F6D_P_2,
2221 EVEX_W_0F6E_P_2,
2222 EVEX_W_0F6F_P_1,
2223 EVEX_W_0F6F_P_2,
1ba585e8 2224 EVEX_W_0F6F_P_3,
43234a1e
L
2225 EVEX_W_0F70_P_2,
2226 EVEX_W_0F72_R_2_P_2,
2227 EVEX_W_0F72_R_6_P_2,
2228 EVEX_W_0F73_R_2_P_2,
2229 EVEX_W_0F73_R_6_P_2,
2230 EVEX_W_0F76_P_2,
2231 EVEX_W_0F78_P_0,
90a915bf 2232 EVEX_W_0F78_P_2,
43234a1e 2233 EVEX_W_0F79_P_0,
90a915bf 2234 EVEX_W_0F79_P_2,
43234a1e 2235 EVEX_W_0F7A_P_1,
90a915bf 2236 EVEX_W_0F7A_P_2,
43234a1e
L
2237 EVEX_W_0F7A_P_3,
2238 EVEX_W_0F7B_P_1,
90a915bf 2239 EVEX_W_0F7B_P_2,
43234a1e
L
2240 EVEX_W_0F7B_P_3,
2241 EVEX_W_0F7E_P_1,
2242 EVEX_W_0F7E_P_2,
2243 EVEX_W_0F7F_P_1,
2244 EVEX_W_0F7F_P_2,
1ba585e8 2245 EVEX_W_0F7F_P_3,
43234a1e
L
2246 EVEX_W_0FC2_P_0,
2247 EVEX_W_0FC2_P_1,
2248 EVEX_W_0FC2_P_2,
2249 EVEX_W_0FC2_P_3,
2250 EVEX_W_0FC6_P_0,
2251 EVEX_W_0FC6_P_2,
2252 EVEX_W_0FD2_P_2,
2253 EVEX_W_0FD3_P_2,
2254 EVEX_W_0FD4_P_2,
2255 EVEX_W_0FD6_P_2,
2256 EVEX_W_0FE6_P_1,
2257 EVEX_W_0FE6_P_2,
2258 EVEX_W_0FE6_P_3,
2259 EVEX_W_0FE7_P_2,
2260 EVEX_W_0FF2_P_2,
2261 EVEX_W_0FF3_P_2,
2262 EVEX_W_0FF4_P_2,
2263 EVEX_W_0FFA_P_2,
2264 EVEX_W_0FFB_P_2,
2265 EVEX_W_0FFE_P_2,
2266 EVEX_W_0F380C_P_2,
2267 EVEX_W_0F380D_P_2,
1ba585e8
IT
2268 EVEX_W_0F3810_P_1,
2269 EVEX_W_0F3810_P_2,
43234a1e 2270 EVEX_W_0F3811_P_1,
1ba585e8 2271 EVEX_W_0F3811_P_2,
43234a1e 2272 EVEX_W_0F3812_P_1,
1ba585e8 2273 EVEX_W_0F3812_P_2,
43234a1e
L
2274 EVEX_W_0F3813_P_1,
2275 EVEX_W_0F3813_P_2,
2276 EVEX_W_0F3814_P_1,
2277 EVEX_W_0F3815_P_1,
2278 EVEX_W_0F3818_P_2,
2279 EVEX_W_0F3819_P_2,
2280 EVEX_W_0F381A_P_2,
2281 EVEX_W_0F381B_P_2,
2282 EVEX_W_0F381E_P_2,
2283 EVEX_W_0F381F_P_2,
1ba585e8 2284 EVEX_W_0F3820_P_1,
43234a1e
L
2285 EVEX_W_0F3821_P_1,
2286 EVEX_W_0F3822_P_1,
2287 EVEX_W_0F3823_P_1,
2288 EVEX_W_0F3824_P_1,
2289 EVEX_W_0F3825_P_1,
2290 EVEX_W_0F3825_P_2,
1ba585e8
IT
2291 EVEX_W_0F3826_P_1,
2292 EVEX_W_0F3826_P_2,
2293 EVEX_W_0F3828_P_1,
43234a1e 2294 EVEX_W_0F3828_P_2,
1ba585e8 2295 EVEX_W_0F3829_P_1,
43234a1e
L
2296 EVEX_W_0F3829_P_2,
2297 EVEX_W_0F382A_P_1,
2298 EVEX_W_0F382A_P_2,
1ba585e8
IT
2299 EVEX_W_0F382B_P_2,
2300 EVEX_W_0F3830_P_1,
43234a1e
L
2301 EVEX_W_0F3831_P_1,
2302 EVEX_W_0F3832_P_1,
2303 EVEX_W_0F3833_P_1,
2304 EVEX_W_0F3834_P_1,
2305 EVEX_W_0F3835_P_1,
2306 EVEX_W_0F3835_P_2,
2307 EVEX_W_0F3837_P_2,
90a915bf
IT
2308 EVEX_W_0F3838_P_1,
2309 EVEX_W_0F3839_P_1,
43234a1e
L
2310 EVEX_W_0F383A_P_1,
2311 EVEX_W_0F3840_P_2,
2312 EVEX_W_0F3858_P_2,
2313 EVEX_W_0F3859_P_2,
2314 EVEX_W_0F385A_P_2,
2315 EVEX_W_0F385B_P_2,
1ba585e8
IT
2316 EVEX_W_0F3866_P_2,
2317 EVEX_W_0F3875_P_2,
2318 EVEX_W_0F3878_P_2,
2319 EVEX_W_0F3879_P_2,
2320 EVEX_W_0F387A_P_2,
2321 EVEX_W_0F387B_P_2,
2322 EVEX_W_0F387D_P_2,
14f195c9 2323 EVEX_W_0F3883_P_2,
1ba585e8 2324 EVEX_W_0F388D_P_2,
43234a1e
L
2325 EVEX_W_0F3891_P_2,
2326 EVEX_W_0F3893_P_2,
2327 EVEX_W_0F38A1_P_2,
2328 EVEX_W_0F38A3_P_2,
2329 EVEX_W_0F38C7_R_1_P_2,
2330 EVEX_W_0F38C7_R_2_P_2,
2331 EVEX_W_0F38C7_R_5_P_2,
2332 EVEX_W_0F38C7_R_6_P_2,
2333
2334 EVEX_W_0F3A00_P_2,
2335 EVEX_W_0F3A01_P_2,
2336 EVEX_W_0F3A04_P_2,
2337 EVEX_W_0F3A05_P_2,
2338 EVEX_W_0F3A08_P_2,
2339 EVEX_W_0F3A09_P_2,
2340 EVEX_W_0F3A0A_P_2,
2341 EVEX_W_0F3A0B_P_2,
90a915bf 2342 EVEX_W_0F3A16_P_2,
43234a1e
L
2343 EVEX_W_0F3A18_P_2,
2344 EVEX_W_0F3A19_P_2,
2345 EVEX_W_0F3A1A_P_2,
2346 EVEX_W_0F3A1B_P_2,
2347 EVEX_W_0F3A1D_P_2,
2348 EVEX_W_0F3A21_P_2,
90a915bf 2349 EVEX_W_0F3A22_P_2,
43234a1e
L
2350 EVEX_W_0F3A23_P_2,
2351 EVEX_W_0F3A38_P_2,
2352 EVEX_W_0F3A39_P_2,
2353 EVEX_W_0F3A3A_P_2,
2354 EVEX_W_0F3A3B_P_2,
1ba585e8
IT
2355 EVEX_W_0F3A3E_P_2,
2356 EVEX_W_0F3A3F_P_2,
2357 EVEX_W_0F3A42_P_2,
90a915bf
IT
2358 EVEX_W_0F3A43_P_2,
2359 EVEX_W_0F3A50_P_2,
2360 EVEX_W_0F3A51_P_2,
2361 EVEX_W_0F3A56_P_2,
2362 EVEX_W_0F3A57_P_2,
2363 EVEX_W_0F3A66_P_2,
2364 EVEX_W_0F3A67_P_2
9e30b8e0
L
2365};
2366
26ca5450 2367typedef void (*op_rtn) (int bytemode, int sizeflag);
252b5132
RH
2368
2369struct dis386 {
2da11e11 2370 const char *name;
ce518a5f
L
2371 struct
2372 {
2373 op_rtn rtn;
2374 int bytemode;
2375 } op[MAX_OPERANDS];
bf890a93 2376 unsigned int prefix_requirement;
252b5132
RH
2377};
2378
2379/* Upper case letters in the instruction names here are macros.
2380 'A' => print 'b' if no register operands or suffix_always is true
2381 'B' => print 'b' if suffix_always is true
9306ca4a 2382 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
98b528ac 2383 size prefix
ed7841b3 2384 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
98b528ac 2385 suffix_always is true
252b5132 2386 'E' => print 'e' if 32-bit form of jcxz
3ffd33cf 2387 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
52fd6d94 2388 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
5dd0794d 2389 'H' => print ",pt" or ",pn" branch hint
9306ca4a 2390 'I' => honor following macro letter even in Intel mode (implemented only
98b528ac 2391 for some of the macro letters)
9306ca4a 2392 'J' => print 'l'
42903f7f 2393 'K' => print 'd' or 'q' if rex prefix is present.
252b5132 2394 'L' => print 'l' if suffix_always is true
9d141669 2395 'M' => print 'r' if intel_mnemonic is false.
252b5132 2396 'N' => print 'n' if instruction has no wait "prefix"
a35ca55a 2397 'O' => print 'd' or 'o' (or 'q' in Intel mode)
52b15da3 2398 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
98b528ac
L
2399 or suffix_always is true. print 'q' if rex prefix is present.
2400 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
2401 is true
a35ca55a 2402 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
52b15da3 2403 'S' => print 'w', 'l' or 'q' if suffix_always is true
6439fc28
AM
2404 'T' => print 'q' in 64bit mode and behave as 'P' otherwise
2405 'U' => print 'q' in 64bit mode and behave as 'Q' otherwise
1a114b12 2406 'V' => print 'q' in 64bit mode and behave as 'S' otherwise
a35ca55a 2407 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
9306ca4a 2408 'X' => print 's', 'd' depending on data16 prefix (for XMM)
8a72226a
L
2409 'Y' => 'q' if instruction has an REX 64bit overwrite prefix and
2410 suffix_always is true.
6dd5059a 2411 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
9d141669 2412 '!' => change condition from true to false or from false to true.
98b528ac
L
2413 '%' => add 1 upper case letter to the macro.
2414
2415 2 upper case letter macros:
c0f3af97
L
2416 "XY" => print 'x' or 'y' if no register operands or suffix_always
2417 is true.
4b06377f
L
2418 "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
2419 "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
98b528ac 2420 or suffix_always is true
4b06377f
L
2421 "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
2422 "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
2423 "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
6c30d220 2424 "LW" => print 'd', 'q' depending on the VEX.W bit
4b4c407a
L
2425 "LP" => print 'w' or 'l' ('d' in Intel mode) if instruction has
2426 an operand size prefix, or suffix_always is true. print
2427 'q' if rex prefix is present.
52b15da3 2428
6439fc28
AM
2429 Many of the above letters print nothing in Intel mode. See "putop"
2430 for the details.
52b15da3 2431
6439fc28 2432 Braces '{' and '}', and vertical bars '|', indicate alternative
7c52e0e8 2433 mnemonic strings for AT&T and Intel. */
252b5132 2434
6439fc28 2435static const struct dis386 dis386[] = {
252b5132 2436 /* 00 */
bf890a93
IT
2437 { "addB", { Ebh1, Gb }, 0 },
2438 { "addS", { Evh1, Gv }, 0 },
2439 { "addB", { Gb, EbS }, 0 },
2440 { "addS", { Gv, EvS }, 0 },
2441 { "addB", { AL, Ib }, 0 },
2442 { "addS", { eAX, Iv }, 0 },
4e7d34a6
L
2443 { X86_64_TABLE (X86_64_06) },
2444 { X86_64_TABLE (X86_64_07) },
252b5132 2445 /* 08 */
bf890a93
IT
2446 { "orB", { Ebh1, Gb }, 0 },
2447 { "orS", { Evh1, Gv }, 0 },
2448 { "orB", { Gb, EbS }, 0 },
2449 { "orS", { Gv, EvS }, 0 },
2450 { "orB", { AL, Ib }, 0 },
2451 { "orS", { eAX, Iv }, 0 },
4e7d34a6 2452 { X86_64_TABLE (X86_64_0D) },
592d1631 2453 { Bad_Opcode }, /* 0x0f extended opcode escape */
252b5132 2454 /* 10 */
bf890a93
IT
2455 { "adcB", { Ebh1, Gb }, 0 },
2456 { "adcS", { Evh1, Gv }, 0 },
2457 { "adcB", { Gb, EbS }, 0 },
2458 { "adcS", { Gv, EvS }, 0 },
2459 { "adcB", { AL, Ib }, 0 },
2460 { "adcS", { eAX, Iv }, 0 },
4e7d34a6
L
2461 { X86_64_TABLE (X86_64_16) },
2462 { X86_64_TABLE (X86_64_17) },
252b5132 2463 /* 18 */
bf890a93
IT
2464 { "sbbB", { Ebh1, Gb }, 0 },
2465 { "sbbS", { Evh1, Gv }, 0 },
2466 { "sbbB", { Gb, EbS }, 0 },
2467 { "sbbS", { Gv, EvS }, 0 },
2468 { "sbbB", { AL, Ib }, 0 },
2469 { "sbbS", { eAX, Iv }, 0 },
4e7d34a6
L
2470 { X86_64_TABLE (X86_64_1E) },
2471 { X86_64_TABLE (X86_64_1F) },
252b5132 2472 /* 20 */
bf890a93
IT
2473 { "andB", { Ebh1, Gb }, 0 },
2474 { "andS", { Evh1, Gv }, 0 },
2475 { "andB", { Gb, EbS }, 0 },
2476 { "andS", { Gv, EvS }, 0 },
2477 { "andB", { AL, Ib }, 0 },
2478 { "andS", { eAX, Iv }, 0 },
592d1631 2479 { Bad_Opcode }, /* SEG ES prefix */
4e7d34a6 2480 { X86_64_TABLE (X86_64_27) },
252b5132 2481 /* 28 */
bf890a93
IT
2482 { "subB", { Ebh1, Gb }, 0 },
2483 { "subS", { Evh1, Gv }, 0 },
2484 { "subB", { Gb, EbS }, 0 },
2485 { "subS", { Gv, EvS }, 0 },
2486 { "subB", { AL, Ib }, 0 },
2487 { "subS", { eAX, Iv }, 0 },
592d1631 2488 { Bad_Opcode }, /* SEG CS prefix */
4e7d34a6 2489 { X86_64_TABLE (X86_64_2F) },
252b5132 2490 /* 30 */
bf890a93
IT
2491 { "xorB", { Ebh1, Gb }, 0 },
2492 { "xorS", { Evh1, Gv }, 0 },
2493 { "xorB", { Gb, EbS }, 0 },
2494 { "xorS", { Gv, EvS }, 0 },
2495 { "xorB", { AL, Ib }, 0 },
2496 { "xorS", { eAX, Iv }, 0 },
592d1631 2497 { Bad_Opcode }, /* SEG SS prefix */
4e7d34a6 2498 { X86_64_TABLE (X86_64_37) },
252b5132 2499 /* 38 */
bf890a93
IT
2500 { "cmpB", { Eb, Gb }, 0 },
2501 { "cmpS", { Ev, Gv }, 0 },
2502 { "cmpB", { Gb, EbS }, 0 },
2503 { "cmpS", { Gv, EvS }, 0 },
2504 { "cmpB", { AL, Ib }, 0 },
2505 { "cmpS", { eAX, Iv }, 0 },
592d1631 2506 { Bad_Opcode }, /* SEG DS prefix */
4e7d34a6 2507 { X86_64_TABLE (X86_64_3F) },
252b5132 2508 /* 40 */
bf890a93
IT
2509 { "inc{S|}", { RMeAX }, 0 },
2510 { "inc{S|}", { RMeCX }, 0 },
2511 { "inc{S|}", { RMeDX }, 0 },
2512 { "inc{S|}", { RMeBX }, 0 },
2513 { "inc{S|}", { RMeSP }, 0 },
2514 { "inc{S|}", { RMeBP }, 0 },
2515 { "inc{S|}", { RMeSI }, 0 },
2516 { "inc{S|}", { RMeDI }, 0 },
252b5132 2517 /* 48 */
bf890a93
IT
2518 { "dec{S|}", { RMeAX }, 0 },
2519 { "dec{S|}", { RMeCX }, 0 },
2520 { "dec{S|}", { RMeDX }, 0 },
2521 { "dec{S|}", { RMeBX }, 0 },
2522 { "dec{S|}", { RMeSP }, 0 },
2523 { "dec{S|}", { RMeBP }, 0 },
2524 { "dec{S|}", { RMeSI }, 0 },
2525 { "dec{S|}", { RMeDI }, 0 },
252b5132 2526 /* 50 */
bf890a93
IT
2527 { "pushV", { RMrAX }, 0 },
2528 { "pushV", { RMrCX }, 0 },
2529 { "pushV", { RMrDX }, 0 },
2530 { "pushV", { RMrBX }, 0 },
2531 { "pushV", { RMrSP }, 0 },
2532 { "pushV", { RMrBP }, 0 },
2533 { "pushV", { RMrSI }, 0 },
2534 { "pushV", { RMrDI }, 0 },
252b5132 2535 /* 58 */
bf890a93
IT
2536 { "popV", { RMrAX }, 0 },
2537 { "popV", { RMrCX }, 0 },
2538 { "popV", { RMrDX }, 0 },
2539 { "popV", { RMrBX }, 0 },
2540 { "popV", { RMrSP }, 0 },
2541 { "popV", { RMrBP }, 0 },
2542 { "popV", { RMrSI }, 0 },
2543 { "popV", { RMrDI }, 0 },
252b5132 2544 /* 60 */
4e7d34a6
L
2545 { X86_64_TABLE (X86_64_60) },
2546 { X86_64_TABLE (X86_64_61) },
2547 { X86_64_TABLE (X86_64_62) },
2548 { X86_64_TABLE (X86_64_63) },
592d1631
L
2549 { Bad_Opcode }, /* seg fs */
2550 { Bad_Opcode }, /* seg gs */
2551 { Bad_Opcode }, /* op size prefix */
2552 { Bad_Opcode }, /* adr size prefix */
252b5132 2553 /* 68 */
bf890a93
IT
2554 { "pushT", { sIv }, 0 },
2555 { "imulS", { Gv, Ev, Iv }, 0 },
2556 { "pushT", { sIbT }, 0 },
2557 { "imulS", { Gv, Ev, sIb }, 0 },
2558 { "ins{b|}", { Ybr, indirDX }, 0 },
4e7d34a6 2559 { X86_64_TABLE (X86_64_6D) },
bf890a93 2560 { "outs{b|}", { indirDXr, Xb }, 0 },
4e7d34a6 2561 { X86_64_TABLE (X86_64_6F) },
252b5132 2562 /* 70 */
bf890a93
IT
2563 { "joH", { Jb, BND, cond_jump_flag }, 0 },
2564 { "jnoH", { Jb, BND, cond_jump_flag }, 0 },
2565 { "jbH", { Jb, BND, cond_jump_flag }, 0 },
2566 { "jaeH", { Jb, BND, cond_jump_flag }, 0 },
2567 { "jeH", { Jb, BND, cond_jump_flag }, 0 },
2568 { "jneH", { Jb, BND, cond_jump_flag }, 0 },
2569 { "jbeH", { Jb, BND, cond_jump_flag }, 0 },
2570 { "jaH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2571 /* 78 */
bf890a93
IT
2572 { "jsH", { Jb, BND, cond_jump_flag }, 0 },
2573 { "jnsH", { Jb, BND, cond_jump_flag }, 0 },
2574 { "jpH", { Jb, BND, cond_jump_flag }, 0 },
2575 { "jnpH", { Jb, BND, cond_jump_flag }, 0 },
2576 { "jlH", { Jb, BND, cond_jump_flag }, 0 },
2577 { "jgeH", { Jb, BND, cond_jump_flag }, 0 },
2578 { "jleH", { Jb, BND, cond_jump_flag }, 0 },
2579 { "jgH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2580 /* 80 */
1ceb70f8
L
2581 { REG_TABLE (REG_80) },
2582 { REG_TABLE (REG_81) },
592d1631 2583 { Bad_Opcode },
1ceb70f8 2584 { REG_TABLE (REG_82) },
bf890a93
IT
2585 { "testB", { Eb, Gb }, 0 },
2586 { "testS", { Ev, Gv }, 0 },
2587 { "xchgB", { Ebh2, Gb }, 0 },
2588 { "xchgS", { Evh2, Gv }, 0 },
252b5132 2589 /* 88 */
bf890a93
IT
2590 { "movB", { Ebh3, Gb }, 0 },
2591 { "movS", { Evh3, Gv }, 0 },
2592 { "movB", { Gb, EbS }, 0 },
2593 { "movS", { Gv, EvS }, 0 },
2594 { "movD", { Sv, Sw }, 0 },
1ceb70f8 2595 { MOD_TABLE (MOD_8D) },
bf890a93 2596 { "movD", { Sw, Sv }, 0 },
1ceb70f8 2597 { REG_TABLE (REG_8F) },
252b5132 2598 /* 90 */
1ceb70f8 2599 { PREFIX_TABLE (PREFIX_90) },
bf890a93
IT
2600 { "xchgS", { RMeCX, eAX }, 0 },
2601 { "xchgS", { RMeDX, eAX }, 0 },
2602 { "xchgS", { RMeBX, eAX }, 0 },
2603 { "xchgS", { RMeSP, eAX }, 0 },
2604 { "xchgS", { RMeBP, eAX }, 0 },
2605 { "xchgS", { RMeSI, eAX }, 0 },
2606 { "xchgS", { RMeDI, eAX }, 0 },
252b5132 2607 /* 98 */
bf890a93
IT
2608 { "cW{t|}R", { XX }, 0 },
2609 { "cR{t|}O", { XX }, 0 },
4e7d34a6 2610 { X86_64_TABLE (X86_64_9A) },
592d1631 2611 { Bad_Opcode }, /* fwait */
bf890a93
IT
2612 { "pushfT", { XX }, 0 },
2613 { "popfT", { XX }, 0 },
2614 { "sahf", { XX }, 0 },
2615 { "lahf", { XX }, 0 },
252b5132 2616 /* a0 */
bf890a93
IT
2617 { "mov%LB", { AL, Ob }, 0 },
2618 { "mov%LS", { eAX, Ov }, 0 },
2619 { "mov%LB", { Ob, AL }, 0 },
2620 { "mov%LS", { Ov, eAX }, 0 },
2621 { "movs{b|}", { Ybr, Xb }, 0 },
2622 { "movs{R|}", { Yvr, Xv }, 0 },
2623 { "cmps{b|}", { Xb, Yb }, 0 },
2624 { "cmps{R|}", { Xv, Yv }, 0 },
252b5132 2625 /* a8 */
bf890a93
IT
2626 { "testB", { AL, Ib }, 0 },
2627 { "testS", { eAX, Iv }, 0 },
2628 { "stosB", { Ybr, AL }, 0 },
2629 { "stosS", { Yvr, eAX }, 0 },
2630 { "lodsB", { ALr, Xb }, 0 },
2631 { "lodsS", { eAXr, Xv }, 0 },
2632 { "scasB", { AL, Yb }, 0 },
2633 { "scasS", { eAX, Yv }, 0 },
252b5132 2634 /* b0 */
bf890a93
IT
2635 { "movB", { RMAL, Ib }, 0 },
2636 { "movB", { RMCL, Ib }, 0 },
2637 { "movB", { RMDL, Ib }, 0 },
2638 { "movB", { RMBL, Ib }, 0 },
2639 { "movB", { RMAH, Ib }, 0 },
2640 { "movB", { RMCH, Ib }, 0 },
2641 { "movB", { RMDH, Ib }, 0 },
2642 { "movB", { RMBH, Ib }, 0 },
252b5132 2643 /* b8 */
bf890a93
IT
2644 { "mov%LV", { RMeAX, Iv64 }, 0 },
2645 { "mov%LV", { RMeCX, Iv64 }, 0 },
2646 { "mov%LV", { RMeDX, Iv64 }, 0 },
2647 { "mov%LV", { RMeBX, Iv64 }, 0 },
2648 { "mov%LV", { RMeSP, Iv64 }, 0 },
2649 { "mov%LV", { RMeBP, Iv64 }, 0 },
2650 { "mov%LV", { RMeSI, Iv64 }, 0 },
2651 { "mov%LV", { RMeDI, Iv64 }, 0 },
252b5132 2652 /* c0 */
1ceb70f8
L
2653 { REG_TABLE (REG_C0) },
2654 { REG_TABLE (REG_C1) },
bf890a93
IT
2655 { "retT", { Iw, BND }, 0 },
2656 { "retT", { BND }, 0 },
4e7d34a6
L
2657 { X86_64_TABLE (X86_64_C4) },
2658 { X86_64_TABLE (X86_64_C5) },
1ceb70f8
L
2659 { REG_TABLE (REG_C6) },
2660 { REG_TABLE (REG_C7) },
252b5132 2661 /* c8 */
bf890a93
IT
2662 { "enterT", { Iw, Ib }, 0 },
2663 { "leaveT", { XX }, 0 },
2664 { "Jret{|f}P", { Iw }, 0 },
2665 { "Jret{|f}P", { XX }, 0 },
2666 { "int3", { XX }, 0 },
2667 { "int", { Ib }, 0 },
4e7d34a6 2668 { X86_64_TABLE (X86_64_CE) },
bf890a93 2669 { "iret%LP", { XX }, 0 },
252b5132 2670 /* d0 */
1ceb70f8
L
2671 { REG_TABLE (REG_D0) },
2672 { REG_TABLE (REG_D1) },
2673 { REG_TABLE (REG_D2) },
2674 { REG_TABLE (REG_D3) },
4e7d34a6
L
2675 { X86_64_TABLE (X86_64_D4) },
2676 { X86_64_TABLE (X86_64_D5) },
592d1631 2677 { Bad_Opcode },
bf890a93 2678 { "xlat", { DSBX }, 0 },
252b5132
RH
2679 /* d8 */
2680 { FLOAT },
2681 { FLOAT },
2682 { FLOAT },
2683 { FLOAT },
2684 { FLOAT },
2685 { FLOAT },
2686 { FLOAT },
2687 { FLOAT },
2688 /* e0 */
bf890a93
IT
2689 { "loopneFH", { Jb, XX, loop_jcxz_flag }, 0 },
2690 { "loopeFH", { Jb, XX, loop_jcxz_flag }, 0 },
2691 { "loopFH", { Jb, XX, loop_jcxz_flag }, 0 },
2692 { "jEcxzH", { Jb, XX, loop_jcxz_flag }, 0 },
2693 { "inB", { AL, Ib }, 0 },
2694 { "inG", { zAX, Ib }, 0 },
2695 { "outB", { Ib, AL }, 0 },
2696 { "outG", { Ib, zAX }, 0 },
252b5132 2697 /* e8 */
bf890a93
IT
2698 { "callT", { Jv, BND }, 0 },
2699 { "jmpT", { Jv, BND }, 0 },
4e7d34a6 2700 { X86_64_TABLE (X86_64_EA) },
bf890a93
IT
2701 { "jmp", { Jb, BND }, 0 },
2702 { "inB", { AL, indirDX }, 0 },
2703 { "inG", { zAX, indirDX }, 0 },
2704 { "outB", { indirDX, AL }, 0 },
2705 { "outG", { indirDX, zAX }, 0 },
252b5132 2706 /* f0 */
592d1631 2707 { Bad_Opcode }, /* lock prefix */
bf890a93 2708 { "icebp", { XX }, 0 },
592d1631
L
2709 { Bad_Opcode }, /* repne */
2710 { Bad_Opcode }, /* repz */
bf890a93
IT
2711 { "hlt", { XX }, 0 },
2712 { "cmc", { XX }, 0 },
1ceb70f8
L
2713 { REG_TABLE (REG_F6) },
2714 { REG_TABLE (REG_F7) },
252b5132 2715 /* f8 */
bf890a93
IT
2716 { "clc", { XX }, 0 },
2717 { "stc", { XX }, 0 },
2718 { "cli", { XX }, 0 },
2719 { "sti", { XX }, 0 },
2720 { "cld", { XX }, 0 },
2721 { "std", { XX }, 0 },
1ceb70f8
L
2722 { REG_TABLE (REG_FE) },
2723 { REG_TABLE (REG_FF) },
252b5132
RH
2724};
2725
6439fc28 2726static const struct dis386 dis386_twobyte[] = {
252b5132 2727 /* 00 */
1ceb70f8
L
2728 { REG_TABLE (REG_0F00 ) },
2729 { REG_TABLE (REG_0F01 ) },
bf890a93
IT
2730 { "larS", { Gv, Ew }, 0 },
2731 { "lslS", { Gv, Ew }, 0 },
592d1631 2732 { Bad_Opcode },
bf890a93
IT
2733 { "syscall", { XX }, 0 },
2734 { "clts", { XX }, 0 },
2735 { "sysret%LP", { XX }, 0 },
252b5132 2736 /* 08 */
bf890a93
IT
2737 { "invd", { XX }, 0 },
2738 { "wbinvd", { XX }, 0 },
592d1631 2739 { Bad_Opcode },
bf890a93 2740 { "ud2", { XX }, 0 },
592d1631 2741 { Bad_Opcode },
b5b1fc4f 2742 { REG_TABLE (REG_0F0D) },
bf890a93
IT
2743 { "femms", { XX }, 0 },
2744 { "", { MX, EM, OPSUF }, 0 }, /* See OP_3DNowSuffix. */
252b5132 2745 /* 10 */
1ceb70f8
L
2746 { PREFIX_TABLE (PREFIX_0F10) },
2747 { PREFIX_TABLE (PREFIX_0F11) },
2748 { PREFIX_TABLE (PREFIX_0F12) },
2749 { MOD_TABLE (MOD_0F13) },
507bd325
L
2750 { "unpcklpX", { XM, EXx }, PREFIX_OPCODE },
2751 { "unpckhpX", { XM, EXx }, PREFIX_OPCODE },
1ceb70f8
L
2752 { PREFIX_TABLE (PREFIX_0F16) },
2753 { MOD_TABLE (MOD_0F17) },
252b5132 2754 /* 18 */
1ceb70f8 2755 { REG_TABLE (REG_0F18) },
bf890a93 2756 { "nopQ", { Ev }, 0 },
7e8b059b
L
2757 { PREFIX_TABLE (PREFIX_0F1A) },
2758 { PREFIX_TABLE (PREFIX_0F1B) },
bf890a93
IT
2759 { "nopQ", { Ev }, 0 },
2760 { "nopQ", { Ev }, 0 },
2761 { "nopQ", { Ev }, 0 },
2762 { "nopQ", { Ev }, 0 },
252b5132 2763 /* 20 */
bf890a93
IT
2764 { "movZ", { Rm, Cm }, 0 },
2765 { "movZ", { Rm, Dm }, 0 },
2766 { "movZ", { Cm, Rm }, 0 },
2767 { "movZ", { Dm, Rm }, 0 },
1ceb70f8 2768 { MOD_TABLE (MOD_0F24) },
592d1631 2769 { Bad_Opcode },
1ceb70f8 2770 { MOD_TABLE (MOD_0F26) },
592d1631 2771 { Bad_Opcode },
252b5132 2772 /* 28 */
507bd325
L
2773 { "movapX", { XM, EXx }, PREFIX_OPCODE },
2774 { "movapX", { EXxS, XM }, PREFIX_OPCODE },
1ceb70f8
L
2775 { PREFIX_TABLE (PREFIX_0F2A) },
2776 { PREFIX_TABLE (PREFIX_0F2B) },
2777 { PREFIX_TABLE (PREFIX_0F2C) },
2778 { PREFIX_TABLE (PREFIX_0F2D) },
2779 { PREFIX_TABLE (PREFIX_0F2E) },
2780 { PREFIX_TABLE (PREFIX_0F2F) },
252b5132 2781 /* 30 */
bf890a93
IT
2782 { "wrmsr", { XX }, 0 },
2783 { "rdtsc", { XX }, 0 },
2784 { "rdmsr", { XX }, 0 },
2785 { "rdpmc", { XX }, 0 },
2786 { "sysenter", { XX }, 0 },
2787 { "sysexit", { XX }, 0 },
592d1631 2788 { Bad_Opcode },
bf890a93 2789 { "getsec", { XX }, 0 },
252b5132 2790 /* 38 */
507bd325 2791 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F38, PREFIX_OPCODE) },
592d1631 2792 { Bad_Opcode },
507bd325 2793 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F3A, PREFIX_OPCODE) },
592d1631
L
2794 { Bad_Opcode },
2795 { Bad_Opcode },
2796 { Bad_Opcode },
2797 { Bad_Opcode },
2798 { Bad_Opcode },
252b5132 2799 /* 40 */
bf890a93
IT
2800 { "cmovoS", { Gv, Ev }, 0 },
2801 { "cmovnoS", { Gv, Ev }, 0 },
2802 { "cmovbS", { Gv, Ev }, 0 },
2803 { "cmovaeS", { Gv, Ev }, 0 },
2804 { "cmoveS", { Gv, Ev }, 0 },
2805 { "cmovneS", { Gv, Ev }, 0 },
2806 { "cmovbeS", { Gv, Ev }, 0 },
2807 { "cmovaS", { Gv, Ev }, 0 },
252b5132 2808 /* 48 */
bf890a93
IT
2809 { "cmovsS", { Gv, Ev }, 0 },
2810 { "cmovnsS", { Gv, Ev }, 0 },
2811 { "cmovpS", { Gv, Ev }, 0 },
2812 { "cmovnpS", { Gv, Ev }, 0 },
2813 { "cmovlS", { Gv, Ev }, 0 },
2814 { "cmovgeS", { Gv, Ev }, 0 },
2815 { "cmovleS", { Gv, Ev }, 0 },
2816 { "cmovgS", { Gv, Ev }, 0 },
252b5132 2817 /* 50 */
75c135a8 2818 { MOD_TABLE (MOD_0F51) },
1ceb70f8
L
2819 { PREFIX_TABLE (PREFIX_0F51) },
2820 { PREFIX_TABLE (PREFIX_0F52) },
2821 { PREFIX_TABLE (PREFIX_0F53) },
507bd325
L
2822 { "andpX", { XM, EXx }, PREFIX_OPCODE },
2823 { "andnpX", { XM, EXx }, PREFIX_OPCODE },
2824 { "orpX", { XM, EXx }, PREFIX_OPCODE },
2825 { "xorpX", { XM, EXx }, PREFIX_OPCODE },
252b5132 2826 /* 58 */
1ceb70f8
L
2827 { PREFIX_TABLE (PREFIX_0F58) },
2828 { PREFIX_TABLE (PREFIX_0F59) },
2829 { PREFIX_TABLE (PREFIX_0F5A) },
2830 { PREFIX_TABLE (PREFIX_0F5B) },
2831 { PREFIX_TABLE (PREFIX_0F5C) },
2832 { PREFIX_TABLE (PREFIX_0F5D) },
2833 { PREFIX_TABLE (PREFIX_0F5E) },
2834 { PREFIX_TABLE (PREFIX_0F5F) },
252b5132 2835 /* 60 */
1ceb70f8
L
2836 { PREFIX_TABLE (PREFIX_0F60) },
2837 { PREFIX_TABLE (PREFIX_0F61) },
2838 { PREFIX_TABLE (PREFIX_0F62) },
507bd325
L
2839 { "packsswb", { MX, EM }, PREFIX_OPCODE },
2840 { "pcmpgtb", { MX, EM }, PREFIX_OPCODE },
2841 { "pcmpgtw", { MX, EM }, PREFIX_OPCODE },
2842 { "pcmpgtd", { MX, EM }, PREFIX_OPCODE },
2843 { "packuswb", { MX, EM }, PREFIX_OPCODE },
252b5132 2844 /* 68 */
507bd325
L
2845 { "punpckhbw", { MX, EM }, PREFIX_OPCODE },
2846 { "punpckhwd", { MX, EM }, PREFIX_OPCODE },
2847 { "punpckhdq", { MX, EM }, PREFIX_OPCODE },
2848 { "packssdw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
2849 { PREFIX_TABLE (PREFIX_0F6C) },
2850 { PREFIX_TABLE (PREFIX_0F6D) },
507bd325 2851 { "movK", { MX, Edq }, PREFIX_OPCODE },
1ceb70f8 2852 { PREFIX_TABLE (PREFIX_0F6F) },
252b5132 2853 /* 70 */
1ceb70f8
L
2854 { PREFIX_TABLE (PREFIX_0F70) },
2855 { REG_TABLE (REG_0F71) },
2856 { REG_TABLE (REG_0F72) },
2857 { REG_TABLE (REG_0F73) },
507bd325
L
2858 { "pcmpeqb", { MX, EM }, PREFIX_OPCODE },
2859 { "pcmpeqw", { MX, EM }, PREFIX_OPCODE },
2860 { "pcmpeqd", { MX, EM }, PREFIX_OPCODE },
2861 { "emms", { XX }, PREFIX_OPCODE },
252b5132 2862 /* 78 */
1ceb70f8
L
2863 { PREFIX_TABLE (PREFIX_0F78) },
2864 { PREFIX_TABLE (PREFIX_0F79) },
4e7d34a6 2865 { THREE_BYTE_TABLE (THREE_BYTE_0F7A) },
592d1631 2866 { Bad_Opcode },
1ceb70f8
L
2867 { PREFIX_TABLE (PREFIX_0F7C) },
2868 { PREFIX_TABLE (PREFIX_0F7D) },
2869 { PREFIX_TABLE (PREFIX_0F7E) },
2870 { PREFIX_TABLE (PREFIX_0F7F) },
252b5132 2871 /* 80 */
bf890a93
IT
2872 { "joH", { Jv, BND, cond_jump_flag }, 0 },
2873 { "jnoH", { Jv, BND, cond_jump_flag }, 0 },
2874 { "jbH", { Jv, BND, cond_jump_flag }, 0 },
2875 { "jaeH", { Jv, BND, cond_jump_flag }, 0 },
2876 { "jeH", { Jv, BND, cond_jump_flag }, 0 },
2877 { "jneH", { Jv, BND, cond_jump_flag }, 0 },
2878 { "jbeH", { Jv, BND, cond_jump_flag }, 0 },
2879 { "jaH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 2880 /* 88 */
bf890a93
IT
2881 { "jsH", { Jv, BND, cond_jump_flag }, 0 },
2882 { "jnsH", { Jv, BND, cond_jump_flag }, 0 },
2883 { "jpH", { Jv, BND, cond_jump_flag }, 0 },
2884 { "jnpH", { Jv, BND, cond_jump_flag }, 0 },
2885 { "jlH", { Jv, BND, cond_jump_flag }, 0 },
2886 { "jgeH", { Jv, BND, cond_jump_flag }, 0 },
2887 { "jleH", { Jv, BND, cond_jump_flag }, 0 },
2888 { "jgH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 2889 /* 90 */
bf890a93
IT
2890 { "seto", { Eb }, 0 },
2891 { "setno", { Eb }, 0 },
2892 { "setb", { Eb }, 0 },
2893 { "setae", { Eb }, 0 },
2894 { "sete", { Eb }, 0 },
2895 { "setne", { Eb }, 0 },
2896 { "setbe", { Eb }, 0 },
2897 { "seta", { Eb }, 0 },
252b5132 2898 /* 98 */
bf890a93
IT
2899 { "sets", { Eb }, 0 },
2900 { "setns", { Eb }, 0 },
2901 { "setp", { Eb }, 0 },
2902 { "setnp", { Eb }, 0 },
2903 { "setl", { Eb }, 0 },
2904 { "setge", { Eb }, 0 },
2905 { "setle", { Eb }, 0 },
2906 { "setg", { Eb }, 0 },
252b5132 2907 /* a0 */
bf890a93
IT
2908 { "pushT", { fs }, 0 },
2909 { "popT", { fs }, 0 },
2910 { "cpuid", { XX }, 0 },
2911 { "btS", { Ev, Gv }, 0 },
2912 { "shldS", { Ev, Gv, Ib }, 0 },
2913 { "shldS", { Ev, Gv, CL }, 0 },
1ceb70f8
L
2914 { REG_TABLE (REG_0FA6) },
2915 { REG_TABLE (REG_0FA7) },
252b5132 2916 /* a8 */
bf890a93
IT
2917 { "pushT", { gs }, 0 },
2918 { "popT", { gs }, 0 },
2919 { "rsm", { XX }, 0 },
2920 { "btsS", { Evh1, Gv }, 0 },
2921 { "shrdS", { Ev, Gv, Ib }, 0 },
2922 { "shrdS", { Ev, Gv, CL }, 0 },
1ceb70f8 2923 { REG_TABLE (REG_0FAE) },
bf890a93 2924 { "imulS", { Gv, Ev }, 0 },
252b5132 2925 /* b0 */
bf890a93
IT
2926 { "cmpxchgB", { Ebh1, Gb }, 0 },
2927 { "cmpxchgS", { Evh1, Gv }, 0 },
1ceb70f8 2928 { MOD_TABLE (MOD_0FB2) },
bf890a93 2929 { "btrS", { Evh1, Gv }, 0 },
1ceb70f8
L
2930 { MOD_TABLE (MOD_0FB4) },
2931 { MOD_TABLE (MOD_0FB5) },
bf890a93
IT
2932 { "movz{bR|x}", { Gv, Eb }, 0 },
2933 { "movz{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movzww ! */
252b5132 2934 /* b8 */
1ceb70f8 2935 { PREFIX_TABLE (PREFIX_0FB8) },
bf890a93 2936 { "ud1", { XX }, 0 },
1ceb70f8 2937 { REG_TABLE (REG_0FBA) },
bf890a93 2938 { "btcS", { Evh1, Gv }, 0 },
f12dc422 2939 { PREFIX_TABLE (PREFIX_0FBC) },
1ceb70f8 2940 { PREFIX_TABLE (PREFIX_0FBD) },
bf890a93
IT
2941 { "movs{bR|x}", { Gv, Eb }, 0 },
2942 { "movs{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movsww ! */
252b5132 2943 /* c0 */
bf890a93
IT
2944 { "xaddB", { Ebh1, Gb }, 0 },
2945 { "xaddS", { Evh1, Gv }, 0 },
1ceb70f8 2946 { PREFIX_TABLE (PREFIX_0FC2) },
4ee52178 2947 { PREFIX_TABLE (PREFIX_0FC3) },
507bd325
L
2948 { "pinsrw", { MX, Edqw, Ib }, PREFIX_OPCODE },
2949 { "pextrw", { Gdq, MS, Ib }, PREFIX_OPCODE },
2950 { "shufpX", { XM, EXx, Ib }, PREFIX_OPCODE },
1ceb70f8 2951 { REG_TABLE (REG_0FC7) },
252b5132 2952 /* c8 */
bf890a93
IT
2953 { "bswap", { RMeAX }, 0 },
2954 { "bswap", { RMeCX }, 0 },
2955 { "bswap", { RMeDX }, 0 },
2956 { "bswap", { RMeBX }, 0 },
2957 { "bswap", { RMeSP }, 0 },
2958 { "bswap", { RMeBP }, 0 },
2959 { "bswap", { RMeSI }, 0 },
2960 { "bswap", { RMeDI }, 0 },
252b5132 2961 /* d0 */
1ceb70f8 2962 { PREFIX_TABLE (PREFIX_0FD0) },
507bd325
L
2963 { "psrlw", { MX, EM }, PREFIX_OPCODE },
2964 { "psrld", { MX, EM }, PREFIX_OPCODE },
2965 { "psrlq", { MX, EM }, PREFIX_OPCODE },
2966 { "paddq", { MX, EM }, PREFIX_OPCODE },
2967 { "pmullw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 2968 { PREFIX_TABLE (PREFIX_0FD6) },
75c135a8 2969 { MOD_TABLE (MOD_0FD7) },
252b5132 2970 /* d8 */
507bd325
L
2971 { "psubusb", { MX, EM }, PREFIX_OPCODE },
2972 { "psubusw", { MX, EM }, PREFIX_OPCODE },
2973 { "pminub", { MX, EM }, PREFIX_OPCODE },
2974 { "pand", { MX, EM }, PREFIX_OPCODE },
2975 { "paddusb", { MX, EM }, PREFIX_OPCODE },
2976 { "paddusw", { MX, EM }, PREFIX_OPCODE },
2977 { "pmaxub", { MX, EM }, PREFIX_OPCODE },
2978 { "pandn", { MX, EM }, PREFIX_OPCODE },
252b5132 2979 /* e0 */
507bd325
L
2980 { "pavgb", { MX, EM }, PREFIX_OPCODE },
2981 { "psraw", { MX, EM }, PREFIX_OPCODE },
2982 { "psrad", { MX, EM }, PREFIX_OPCODE },
2983 { "pavgw", { MX, EM }, PREFIX_OPCODE },
2984 { "pmulhuw", { MX, EM }, PREFIX_OPCODE },
2985 { "pmulhw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
2986 { PREFIX_TABLE (PREFIX_0FE6) },
2987 { PREFIX_TABLE (PREFIX_0FE7) },
252b5132 2988 /* e8 */
507bd325
L
2989 { "psubsb", { MX, EM }, PREFIX_OPCODE },
2990 { "psubsw", { MX, EM }, PREFIX_OPCODE },
2991 { "pminsw", { MX, EM }, PREFIX_OPCODE },
2992 { "por", { MX, EM }, PREFIX_OPCODE },
2993 { "paddsb", { MX, EM }, PREFIX_OPCODE },
2994 { "paddsw", { MX, EM }, PREFIX_OPCODE },
2995 { "pmaxsw", { MX, EM }, PREFIX_OPCODE },
2996 { "pxor", { MX, EM }, PREFIX_OPCODE },
252b5132 2997 /* f0 */
1ceb70f8 2998 { PREFIX_TABLE (PREFIX_0FF0) },
507bd325
L
2999 { "psllw", { MX, EM }, PREFIX_OPCODE },
3000 { "pslld", { MX, EM }, PREFIX_OPCODE },
3001 { "psllq", { MX, EM }, PREFIX_OPCODE },
3002 { "pmuludq", { MX, EM }, PREFIX_OPCODE },
3003 { "pmaddwd", { MX, EM }, PREFIX_OPCODE },
3004 { "psadbw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 3005 { PREFIX_TABLE (PREFIX_0FF7) },
252b5132 3006 /* f8 */
507bd325
L
3007 { "psubb", { MX, EM }, PREFIX_OPCODE },
3008 { "psubw", { MX, EM }, PREFIX_OPCODE },
3009 { "psubd", { MX, EM }, PREFIX_OPCODE },
3010 { "psubq", { MX, EM }, PREFIX_OPCODE },
3011 { "paddb", { MX, EM }, PREFIX_OPCODE },
3012 { "paddw", { MX, EM }, PREFIX_OPCODE },
3013 { "paddd", { MX, EM }, PREFIX_OPCODE },
592d1631 3014 { Bad_Opcode },
252b5132
RH
3015};
3016
3017static const unsigned char onebyte_has_modrm[256] = {
c608c12e
AM
3018 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3019 /* ------------------------------- */
3020 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
3021 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
3022 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
3023 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
3024 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
3025 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
3026 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
3027 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
3028 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
3029 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
3030 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
3031 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
3032 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
3033 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
3034 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
3035 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
3036 /* ------------------------------- */
3037 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
252b5132
RH
3038};
3039
3040static const unsigned char twobyte_has_modrm[256] = {
c608c12e
AM
3041 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3042 /* ------------------------------- */
252b5132 3043 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
b5b1fc4f 3044 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
85f10a01 3045 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
331d2d0d 3046 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
252b5132 3047 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
4bba6815
AM
3048 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
3049 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
85f10a01 3050 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
252b5132
RH
3051 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
3052 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
30d1c836 3053 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
050dfa73 3054 /* b0 */ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* bf */
252b5132 3055 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
ca164297 3056 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
4bba6815 3057 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
ca164297 3058 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* ff */
c608c12e
AM
3059 /* ------------------------------- */
3060 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3061};
3062
252b5132
RH
3063static char obuf[100];
3064static char *obufp;
ea397f5b 3065static char *mnemonicendp;
252b5132
RH
3066static char scratchbuf[100];
3067static unsigned char *start_codep;
3068static unsigned char *insn_codep;
3069static unsigned char *codep;
285ca992 3070static unsigned char *end_codep;
f16cd0d5
L
3071static int last_lock_prefix;
3072static int last_repz_prefix;
3073static int last_repnz_prefix;
3074static int last_data_prefix;
3075static int last_addr_prefix;
3076static int last_rex_prefix;
3077static int last_seg_prefix;
d9949a36 3078static int fwait_prefix;
285ca992
L
3079/* The active segment register prefix. */
3080static int active_seg_prefix;
f16cd0d5
L
3081#define MAX_CODE_LENGTH 15
3082/* We can up to 14 prefixes since the maximum instruction length is
3083 15bytes. */
3084static int all_prefixes[MAX_CODE_LENGTH - 1];
252b5132 3085static disassemble_info *the_info;
7967e09e
L
3086static struct
3087 {
3088 int mod;
7967e09e 3089 int reg;
484c222e 3090 int rm;
7967e09e
L
3091 }
3092modrm;
4bba6815 3093static unsigned char need_modrm;
dfc8cf43
L
3094static struct
3095 {
3096 int scale;
3097 int index;
3098 int base;
3099 }
3100sib;
c0f3af97
L
3101static struct
3102 {
3103 int register_specifier;
3104 int length;
3105 int prefix;
3106 int w;
43234a1e
L
3107 int evex;
3108 int r;
3109 int v;
3110 int mask_register_specifier;
3111 int zeroing;
3112 int ll;
3113 int b;
c0f3af97
L
3114 }
3115vex;
3116static unsigned char need_vex;
3117static unsigned char need_vex_reg;
dae39acc 3118static unsigned char vex_w_done;
252b5132 3119
ea397f5b
L
3120struct op
3121 {
3122 const char *name;
3123 unsigned int len;
3124 };
3125
4bba6815
AM
3126/* If we are accessing mod/rm/reg without need_modrm set, then the
3127 values are stale. Hitting this abort likely indicates that you
3128 need to update onebyte_has_modrm or twobyte_has_modrm. */
3129#define MODRM_CHECK if (!need_modrm) abort ()
3130
d708bcba
AM
3131static const char **names64;
3132static const char **names32;
3133static const char **names16;
3134static const char **names8;
3135static const char **names8rex;
3136static const char **names_seg;
db51cc60
L
3137static const char *index64;
3138static const char *index32;
d708bcba 3139static const char **index16;
7e8b059b 3140static const char **names_bnd;
d708bcba
AM
3141
3142static const char *intel_names64[] = {
3143 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
3144 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
3145};
3146static const char *intel_names32[] = {
3147 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
3148 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
3149};
3150static const char *intel_names16[] = {
3151 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
3152 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
3153};
3154static const char *intel_names8[] = {
3155 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
3156};
3157static const char *intel_names8rex[] = {
3158 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
3159 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
3160};
3161static const char *intel_names_seg[] = {
3162 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
3163};
db51cc60
L
3164static const char *intel_index64 = "riz";
3165static const char *intel_index32 = "eiz";
d708bcba
AM
3166static const char *intel_index16[] = {
3167 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
3168};
3169
3170static const char *att_names64[] = {
3171 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
52b15da3
JH
3172 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
3173};
d708bcba
AM
3174static const char *att_names32[] = {
3175 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
52b15da3 3176 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
252b5132 3177};
d708bcba
AM
3178static const char *att_names16[] = {
3179 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
52b15da3 3180 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
252b5132 3181};
d708bcba
AM
3182static const char *att_names8[] = {
3183 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
252b5132 3184};
d708bcba
AM
3185static const char *att_names8rex[] = {
3186 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
52b15da3
JH
3187 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
3188};
d708bcba
AM
3189static const char *att_names_seg[] = {
3190 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
252b5132 3191};
db51cc60
L
3192static const char *att_index64 = "%riz";
3193static const char *att_index32 = "%eiz";
d708bcba
AM
3194static const char *att_index16[] = {
3195 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
252b5132
RH
3196};
3197
b9733481
L
3198static const char **names_mm;
3199static const char *intel_names_mm[] = {
3200 "mm0", "mm1", "mm2", "mm3",
3201 "mm4", "mm5", "mm6", "mm7"
3202};
3203static const char *att_names_mm[] = {
3204 "%mm0", "%mm1", "%mm2", "%mm3",
3205 "%mm4", "%mm5", "%mm6", "%mm7"
3206};
3207
7e8b059b
L
3208static const char *intel_names_bnd[] = {
3209 "bnd0", "bnd1", "bnd2", "bnd3"
3210};
3211
3212static const char *att_names_bnd[] = {
3213 "%bnd0", "%bnd1", "%bnd2", "%bnd3"
3214};
3215
b9733481
L
3216static const char **names_xmm;
3217static const char *intel_names_xmm[] = {
3218 "xmm0", "xmm1", "xmm2", "xmm3",
3219 "xmm4", "xmm5", "xmm6", "xmm7",
3220 "xmm8", "xmm9", "xmm10", "xmm11",
43234a1e
L
3221 "xmm12", "xmm13", "xmm14", "xmm15",
3222 "xmm16", "xmm17", "xmm18", "xmm19",
3223 "xmm20", "xmm21", "xmm22", "xmm23",
3224 "xmm24", "xmm25", "xmm26", "xmm27",
3225 "xmm28", "xmm29", "xmm30", "xmm31"
b9733481
L
3226};
3227static const char *att_names_xmm[] = {
3228 "%xmm0", "%xmm1", "%xmm2", "%xmm3",
3229 "%xmm4", "%xmm5", "%xmm6", "%xmm7",
3230 "%xmm8", "%xmm9", "%xmm10", "%xmm11",
43234a1e
L
3231 "%xmm12", "%xmm13", "%xmm14", "%xmm15",
3232 "%xmm16", "%xmm17", "%xmm18", "%xmm19",
3233 "%xmm20", "%xmm21", "%xmm22", "%xmm23",
3234 "%xmm24", "%xmm25", "%xmm26", "%xmm27",
3235 "%xmm28", "%xmm29", "%xmm30", "%xmm31"
b9733481
L
3236};
3237
3238static const char **names_ymm;
3239static const char *intel_names_ymm[] = {
3240 "ymm0", "ymm1", "ymm2", "ymm3",
3241 "ymm4", "ymm5", "ymm6", "ymm7",
3242 "ymm8", "ymm9", "ymm10", "ymm11",
43234a1e
L
3243 "ymm12", "ymm13", "ymm14", "ymm15",
3244 "ymm16", "ymm17", "ymm18", "ymm19",
3245 "ymm20", "ymm21", "ymm22", "ymm23",
3246 "ymm24", "ymm25", "ymm26", "ymm27",
3247 "ymm28", "ymm29", "ymm30", "ymm31"
b9733481
L
3248};
3249static const char *att_names_ymm[] = {
3250 "%ymm0", "%ymm1", "%ymm2", "%ymm3",
3251 "%ymm4", "%ymm5", "%ymm6", "%ymm7",
3252 "%ymm8", "%ymm9", "%ymm10", "%ymm11",
43234a1e
L
3253 "%ymm12", "%ymm13", "%ymm14", "%ymm15",
3254 "%ymm16", "%ymm17", "%ymm18", "%ymm19",
3255 "%ymm20", "%ymm21", "%ymm22", "%ymm23",
3256 "%ymm24", "%ymm25", "%ymm26", "%ymm27",
3257 "%ymm28", "%ymm29", "%ymm30", "%ymm31"
3258};
3259
3260static const char **names_zmm;
3261static const char *intel_names_zmm[] = {
3262 "zmm0", "zmm1", "zmm2", "zmm3",
3263 "zmm4", "zmm5", "zmm6", "zmm7",
3264 "zmm8", "zmm9", "zmm10", "zmm11",
3265 "zmm12", "zmm13", "zmm14", "zmm15",
3266 "zmm16", "zmm17", "zmm18", "zmm19",
3267 "zmm20", "zmm21", "zmm22", "zmm23",
3268 "zmm24", "zmm25", "zmm26", "zmm27",
3269 "zmm28", "zmm29", "zmm30", "zmm31"
3270};
3271static const char *att_names_zmm[] = {
3272 "%zmm0", "%zmm1", "%zmm2", "%zmm3",
3273 "%zmm4", "%zmm5", "%zmm6", "%zmm7",
3274 "%zmm8", "%zmm9", "%zmm10", "%zmm11",
3275 "%zmm12", "%zmm13", "%zmm14", "%zmm15",
3276 "%zmm16", "%zmm17", "%zmm18", "%zmm19",
3277 "%zmm20", "%zmm21", "%zmm22", "%zmm23",
3278 "%zmm24", "%zmm25", "%zmm26", "%zmm27",
3279 "%zmm28", "%zmm29", "%zmm30", "%zmm31"
3280};
3281
3282static const char **names_mask;
3283static const char *intel_names_mask[] = {
3284 "k0", "k1", "k2", "k3", "k4", "k5", "k6", "k7"
3285};
3286static const char *att_names_mask[] = {
3287 "%k0", "%k1", "%k2", "%k3", "%k4", "%k5", "%k6", "%k7"
3288};
3289
3290static const char *names_rounding[] =
3291{
3292 "{rn-sae}",
3293 "{rd-sae}",
3294 "{ru-sae}",
3295 "{rz-sae}"
b9733481
L
3296};
3297
1ceb70f8
L
3298static const struct dis386 reg_table[][8] = {
3299 /* REG_80 */
252b5132 3300 {
bf890a93
IT
3301 { "addA", { Ebh1, Ib }, 0 },
3302 { "orA", { Ebh1, Ib }, 0 },
3303 { "adcA", { Ebh1, Ib }, 0 },
3304 { "sbbA", { Ebh1, Ib }, 0 },
3305 { "andA", { Ebh1, Ib }, 0 },
3306 { "subA", { Ebh1, Ib }, 0 },
3307 { "xorA", { Ebh1, Ib }, 0 },
3308 { "cmpA", { Eb, Ib }, 0 },
252b5132 3309 },
1ceb70f8 3310 /* REG_81 */
252b5132 3311 {
bf890a93
IT
3312 { "addQ", { Evh1, Iv }, 0 },
3313 { "orQ", { Evh1, Iv }, 0 },
3314 { "adcQ", { Evh1, Iv }, 0 },
3315 { "sbbQ", { Evh1, Iv }, 0 },
3316 { "andQ", { Evh1, Iv }, 0 },
3317 { "subQ", { Evh1, Iv }, 0 },
3318 { "xorQ", { Evh1, Iv }, 0 },
3319 { "cmpQ", { Ev, Iv }, 0 },
252b5132 3320 },
1ceb70f8 3321 /* REG_82 */
252b5132 3322 {
bf890a93
IT
3323 { "addQ", { Evh1, sIb }, 0 },
3324 { "orQ", { Evh1, sIb }, 0 },
3325 { "adcQ", { Evh1, sIb }, 0 },
3326 { "sbbQ", { Evh1, sIb }, 0 },
3327 { "andQ", { Evh1, sIb }, 0 },
3328 { "subQ", { Evh1, sIb }, 0 },
3329 { "xorQ", { Evh1, sIb }, 0 },
3330 { "cmpQ", { Ev, sIb }, 0 },
252b5132 3331 },
1ceb70f8 3332 /* REG_8F */
4e7d34a6 3333 {
bf890a93 3334 { "popU", { stackEv }, 0 },
c48244a5 3335 { XOP_8F_TABLE (XOP_09) },
592d1631
L
3336 { Bad_Opcode },
3337 { Bad_Opcode },
3338 { Bad_Opcode },
f88c9eb0 3339 { XOP_8F_TABLE (XOP_09) },
4e7d34a6 3340 },
1ceb70f8 3341 /* REG_C0 */
252b5132 3342 {
bf890a93
IT
3343 { "rolA", { Eb, Ib }, 0 },
3344 { "rorA", { Eb, Ib }, 0 },
3345 { "rclA", { Eb, Ib }, 0 },
3346 { "rcrA", { Eb, Ib }, 0 },
3347 { "shlA", { Eb, Ib }, 0 },
3348 { "shrA", { Eb, Ib }, 0 },
592d1631 3349 { Bad_Opcode },
bf890a93 3350 { "sarA", { Eb, Ib }, 0 },
252b5132 3351 },
1ceb70f8 3352 /* REG_C1 */
252b5132 3353 {
bf890a93
IT
3354 { "rolQ", { Ev, Ib }, 0 },
3355 { "rorQ", { Ev, Ib }, 0 },
3356 { "rclQ", { Ev, Ib }, 0 },
3357 { "rcrQ", { Ev, Ib }, 0 },
3358 { "shlQ", { Ev, Ib }, 0 },
3359 { "shrQ", { Ev, Ib }, 0 },
592d1631 3360 { Bad_Opcode },
bf890a93 3361 { "sarQ", { Ev, Ib }, 0 },
252b5132 3362 },
1ceb70f8 3363 /* REG_C6 */
4e7d34a6 3364 {
bf890a93 3365 { "movA", { Ebh3, Ib }, 0 },
42164a71
L
3366 { Bad_Opcode },
3367 { Bad_Opcode },
3368 { Bad_Opcode },
3369 { Bad_Opcode },
3370 { Bad_Opcode },
3371 { Bad_Opcode },
3372 { MOD_TABLE (MOD_C6_REG_7) },
4e7d34a6 3373 },
1ceb70f8 3374 /* REG_C7 */
4e7d34a6 3375 {
bf890a93 3376 { "movQ", { Evh3, Iv }, 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_C7_REG_7) },
4e7d34a6 3384 },
1ceb70f8 3385 /* REG_D0 */
252b5132 3386 {
bf890a93
IT
3387 { "rolA", { Eb, I1 }, 0 },
3388 { "rorA", { Eb, I1 }, 0 },
3389 { "rclA", { Eb, I1 }, 0 },
3390 { "rcrA", { Eb, I1 }, 0 },
3391 { "shlA", { Eb, I1 }, 0 },
3392 { "shrA", { Eb, I1 }, 0 },
592d1631 3393 { Bad_Opcode },
bf890a93 3394 { "sarA", { Eb, I1 }, 0 },
252b5132 3395 },
1ceb70f8 3396 /* REG_D1 */
252b5132 3397 {
bf890a93
IT
3398 { "rolQ", { Ev, I1 }, 0 },
3399 { "rorQ", { Ev, I1 }, 0 },
3400 { "rclQ", { Ev, I1 }, 0 },
3401 { "rcrQ", { Ev, I1 }, 0 },
3402 { "shlQ", { Ev, I1 }, 0 },
3403 { "shrQ", { Ev, I1 }, 0 },
592d1631 3404 { Bad_Opcode },
bf890a93 3405 { "sarQ", { Ev, I1 }, 0 },
252b5132 3406 },
1ceb70f8 3407 /* REG_D2 */
252b5132 3408 {
bf890a93
IT
3409 { "rolA", { Eb, CL }, 0 },
3410 { "rorA", { Eb, CL }, 0 },
3411 { "rclA", { Eb, CL }, 0 },
3412 { "rcrA", { Eb, CL }, 0 },
3413 { "shlA", { Eb, CL }, 0 },
3414 { "shrA", { Eb, CL }, 0 },
592d1631 3415 { Bad_Opcode },
bf890a93 3416 { "sarA", { Eb, CL }, 0 },
252b5132 3417 },
1ceb70f8 3418 /* REG_D3 */
252b5132 3419 {
bf890a93
IT
3420 { "rolQ", { Ev, CL }, 0 },
3421 { "rorQ", { Ev, CL }, 0 },
3422 { "rclQ", { Ev, CL }, 0 },
3423 { "rcrQ", { Ev, CL }, 0 },
3424 { "shlQ", { Ev, CL }, 0 },
3425 { "shrQ", { Ev, CL }, 0 },
592d1631 3426 { Bad_Opcode },
bf890a93 3427 { "sarQ", { Ev, CL }, 0 },
252b5132 3428 },
1ceb70f8 3429 /* REG_F6 */
252b5132 3430 {
bf890a93 3431 { "testA", { Eb, Ib }, 0 },
592d1631 3432 { Bad_Opcode },
bf890a93
IT
3433 { "notA", { Ebh1 }, 0 },
3434 { "negA", { Ebh1 }, 0 },
3435 { "mulA", { Eb }, 0 }, /* Don't print the implicit %al register, */
3436 { "imulA", { Eb }, 0 }, /* to distinguish these opcodes from other */
3437 { "divA", { Eb }, 0 }, /* mul/imul opcodes. Do the same for div */
3438 { "idivA", { Eb }, 0 }, /* and idiv for consistency. */
252b5132 3439 },
1ceb70f8 3440 /* REG_F7 */
252b5132 3441 {
bf890a93 3442 { "testQ", { Ev, Iv }, 0 },
592d1631 3443 { Bad_Opcode },
bf890a93
IT
3444 { "notQ", { Evh1 }, 0 },
3445 { "negQ", { Evh1 }, 0 },
3446 { "mulQ", { Ev }, 0 }, /* Don't print the implicit register. */
3447 { "imulQ", { Ev }, 0 },
3448 { "divQ", { Ev }, 0 },
3449 { "idivQ", { Ev }, 0 },
252b5132 3450 },
1ceb70f8 3451 /* REG_FE */
252b5132 3452 {
bf890a93
IT
3453 { "incA", { Ebh1 }, 0 },
3454 { "decA", { Ebh1 }, 0 },
252b5132 3455 },
1ceb70f8 3456 /* REG_FF */
252b5132 3457 {
bf890a93
IT
3458 { "incQ", { Evh1 }, 0 },
3459 { "decQ", { Evh1 }, 0 },
3460 { "call{T|}", { indirEv, BND }, 0 },
4a357820 3461 { MOD_TABLE (MOD_FF_REG_3) },
bf890a93 3462 { "jmp{T|}", { indirEv, BND }, 0 },
4a357820 3463 { MOD_TABLE (MOD_FF_REG_5) },
bf890a93 3464 { "pushU", { stackEv }, 0 },
592d1631 3465 { Bad_Opcode },
252b5132 3466 },
1ceb70f8 3467 /* REG_0F00 */
252b5132 3468 {
bf890a93
IT
3469 { "sldtD", { Sv }, 0 },
3470 { "strD", { Sv }, 0 },
3471 { "lldt", { Ew }, 0 },
3472 { "ltr", { Ew }, 0 },
3473 { "verr", { Ew }, 0 },
3474 { "verw", { Ew }, 0 },
592d1631
L
3475 { Bad_Opcode },
3476 { Bad_Opcode },
252b5132 3477 },
1ceb70f8 3478 /* REG_0F01 */
252b5132 3479 {
1ceb70f8
L
3480 { MOD_TABLE (MOD_0F01_REG_0) },
3481 { MOD_TABLE (MOD_0F01_REG_1) },
3482 { MOD_TABLE (MOD_0F01_REG_2) },
3483 { MOD_TABLE (MOD_0F01_REG_3) },
bf890a93 3484 { "smswD", { Sv }, 0 },
592d1631 3485 { Bad_Opcode },
bf890a93 3486 { "lmsw", { Ew }, 0 },
1ceb70f8 3487 { MOD_TABLE (MOD_0F01_REG_7) },
252b5132 3488 },
b5b1fc4f 3489 /* REG_0F0D */
252b5132 3490 {
bf890a93
IT
3491 { "prefetch", { Mb }, 0 },
3492 { "prefetchw", { Mb }, 0 },
3493 { "prefetchwt1", { Mb }, 0 },
3494 { "prefetch", { Mb }, 0 },
3495 { "prefetch", { Mb }, 0 },
3496 { "prefetch", { Mb }, 0 },
3497 { "prefetch", { Mb }, 0 },
3498 { "prefetch", { Mb }, 0 },
252b5132 3499 },
1ceb70f8 3500 /* REG_0F18 */
252b5132 3501 {
1ceb70f8
L
3502 { MOD_TABLE (MOD_0F18_REG_0) },
3503 { MOD_TABLE (MOD_0F18_REG_1) },
3504 { MOD_TABLE (MOD_0F18_REG_2) },
3505 { MOD_TABLE (MOD_0F18_REG_3) },
d7189fa5
RM
3506 { MOD_TABLE (MOD_0F18_REG_4) },
3507 { MOD_TABLE (MOD_0F18_REG_5) },
3508 { MOD_TABLE (MOD_0F18_REG_6) },
3509 { MOD_TABLE (MOD_0F18_REG_7) },
252b5132 3510 },
1ceb70f8 3511 /* REG_0F71 */
a6bd098c 3512 {
592d1631
L
3513 { Bad_Opcode },
3514 { Bad_Opcode },
1ceb70f8 3515 { MOD_TABLE (MOD_0F71_REG_2) },
592d1631 3516 { Bad_Opcode },
1ceb70f8 3517 { MOD_TABLE (MOD_0F71_REG_4) },
592d1631 3518 { Bad_Opcode },
1ceb70f8 3519 { MOD_TABLE (MOD_0F71_REG_6) },
a6bd098c 3520 },
1ceb70f8 3521 /* REG_0F72 */
a6bd098c 3522 {
592d1631
L
3523 { Bad_Opcode },
3524 { Bad_Opcode },
1ceb70f8 3525 { MOD_TABLE (MOD_0F72_REG_2) },
592d1631 3526 { Bad_Opcode },
1ceb70f8 3527 { MOD_TABLE (MOD_0F72_REG_4) },
592d1631 3528 { Bad_Opcode },
1ceb70f8 3529 { MOD_TABLE (MOD_0F72_REG_6) },
a6bd098c 3530 },
1ceb70f8 3531 /* REG_0F73 */
252b5132 3532 {
592d1631
L
3533 { Bad_Opcode },
3534 { Bad_Opcode },
1ceb70f8
L
3535 { MOD_TABLE (MOD_0F73_REG_2) },
3536 { MOD_TABLE (MOD_0F73_REG_3) },
592d1631
L
3537 { Bad_Opcode },
3538 { Bad_Opcode },
1ceb70f8
L
3539 { MOD_TABLE (MOD_0F73_REG_6) },
3540 { MOD_TABLE (MOD_0F73_REG_7) },
252b5132 3541 },
1ceb70f8 3542 /* REG_0FA6 */
252b5132 3543 {
bf890a93
IT
3544 { "montmul", { { OP_0f07, 0 } }, 0 },
3545 { "xsha1", { { OP_0f07, 0 } }, 0 },
3546 { "xsha256", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3547 },
1ceb70f8 3548 /* REG_0FA7 */
4e7d34a6 3549 {
bf890a93
IT
3550 { "xstore-rng", { { OP_0f07, 0 } }, 0 },
3551 { "xcrypt-ecb", { { OP_0f07, 0 } }, 0 },
3552 { "xcrypt-cbc", { { OP_0f07, 0 } }, 0 },
3553 { "xcrypt-ctr", { { OP_0f07, 0 } }, 0 },
3554 { "xcrypt-cfb", { { OP_0f07, 0 } }, 0 },
3555 { "xcrypt-ofb", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3556 },
1ceb70f8 3557 /* REG_0FAE */
4e7d34a6 3558 {
1ceb70f8
L
3559 { MOD_TABLE (MOD_0FAE_REG_0) },
3560 { MOD_TABLE (MOD_0FAE_REG_1) },
3561 { MOD_TABLE (MOD_0FAE_REG_2) },
3562 { MOD_TABLE (MOD_0FAE_REG_3) },
475a2301 3563 { MOD_TABLE (MOD_0FAE_REG_4) },
1ceb70f8
L
3564 { MOD_TABLE (MOD_0FAE_REG_5) },
3565 { MOD_TABLE (MOD_0FAE_REG_6) },
3566 { MOD_TABLE (MOD_0FAE_REG_7) },
252b5132 3567 },
1ceb70f8 3568 /* REG_0FBA */
252b5132 3569 {
592d1631
L
3570 { Bad_Opcode },
3571 { Bad_Opcode },
3572 { Bad_Opcode },
3573 { Bad_Opcode },
bf890a93
IT
3574 { "btQ", { Ev, Ib }, 0 },
3575 { "btsQ", { Evh1, Ib }, 0 },
3576 { "btrQ", { Evh1, Ib }, 0 },
3577 { "btcQ", { Evh1, Ib }, 0 },
c608c12e 3578 },
1ceb70f8 3579 /* REG_0FC7 */
c608c12e 3580 {
592d1631 3581 { Bad_Opcode },
bf890a93 3582 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } }, 0 },
592d1631 3583 { Bad_Opcode },
963f3586
IT
3584 { MOD_TABLE (MOD_0FC7_REG_3) },
3585 { MOD_TABLE (MOD_0FC7_REG_4) },
3586 { MOD_TABLE (MOD_0FC7_REG_5) },
1ceb70f8
L
3587 { MOD_TABLE (MOD_0FC7_REG_6) },
3588 { MOD_TABLE (MOD_0FC7_REG_7) },
252b5132 3589 },
592a252b 3590 /* REG_VEX_0F71 */
c0f3af97 3591 {
592d1631
L
3592 { Bad_Opcode },
3593 { Bad_Opcode },
592a252b 3594 { MOD_TABLE (MOD_VEX_0F71_REG_2) },
592d1631 3595 { Bad_Opcode },
592a252b 3596 { MOD_TABLE (MOD_VEX_0F71_REG_4) },
592d1631 3597 { Bad_Opcode },
592a252b 3598 { MOD_TABLE (MOD_VEX_0F71_REG_6) },
c0f3af97 3599 },
592a252b 3600 /* REG_VEX_0F72 */
c0f3af97 3601 {
592d1631
L
3602 { Bad_Opcode },
3603 { Bad_Opcode },
592a252b 3604 { MOD_TABLE (MOD_VEX_0F72_REG_2) },
592d1631 3605 { Bad_Opcode },
592a252b 3606 { MOD_TABLE (MOD_VEX_0F72_REG_4) },
592d1631 3607 { Bad_Opcode },
592a252b 3608 { MOD_TABLE (MOD_VEX_0F72_REG_6) },
c0f3af97 3609 },
592a252b 3610 /* REG_VEX_0F73 */
c0f3af97 3611 {
592d1631
L
3612 { Bad_Opcode },
3613 { Bad_Opcode },
592a252b
L
3614 { MOD_TABLE (MOD_VEX_0F73_REG_2) },
3615 { MOD_TABLE (MOD_VEX_0F73_REG_3) },
592d1631
L
3616 { Bad_Opcode },
3617 { Bad_Opcode },
592a252b
L
3618 { MOD_TABLE (MOD_VEX_0F73_REG_6) },
3619 { MOD_TABLE (MOD_VEX_0F73_REG_7) },
c0f3af97 3620 },
592a252b 3621 /* REG_VEX_0FAE */
c0f3af97 3622 {
592d1631
L
3623 { Bad_Opcode },
3624 { Bad_Opcode },
592a252b
L
3625 { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
3626 { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
c0f3af97 3627 },
f12dc422
L
3628 /* REG_VEX_0F38F3 */
3629 {
3630 { Bad_Opcode },
3631 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
3632 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
3633 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
3634 },
f88c9eb0
SP
3635 /* REG_XOP_LWPCB */
3636 {
bf890a93
IT
3637 { "llwpcb", { { OP_LWPCB_E, 0 } }, 0 },
3638 { "slwpcb", { { OP_LWPCB_E, 0 } }, 0 },
f88c9eb0
SP
3639 },
3640 /* REG_XOP_LWP */
3641 {
bf890a93
IT
3642 { "lwpins", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
3643 { "lwpval", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
f88c9eb0 3644 },
2a2a0f38
QN
3645 /* REG_XOP_TBM_01 */
3646 {
3647 { Bad_Opcode },
bf890a93
IT
3648 { "blcfill", { { OP_LWP_E, 0 }, Ev }, 0 },
3649 { "blsfill", { { OP_LWP_E, 0 }, Ev }, 0 },
3650 { "blcs", { { OP_LWP_E, 0 }, Ev }, 0 },
3651 { "tzmsk", { { OP_LWP_E, 0 }, Ev }, 0 },
3652 { "blcic", { { OP_LWP_E, 0 }, Ev }, 0 },
3653 { "blsic", { { OP_LWP_E, 0 }, Ev }, 0 },
3654 { "t1mskc", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38
QN
3655 },
3656 /* REG_XOP_TBM_02 */
3657 {
3658 { Bad_Opcode },
bf890a93 3659 { "blcmsk", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38
QN
3660 { Bad_Opcode },
3661 { Bad_Opcode },
3662 { Bad_Opcode },
3663 { Bad_Opcode },
bf890a93 3664 { "blci", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38 3665 },
43234a1e
L
3666#define NEED_REG_TABLE
3667#include "i386-dis-evex.h"
3668#undef NEED_REG_TABLE
4e7d34a6
L
3669};
3670
1ceb70f8
L
3671static const struct dis386 prefix_table[][4] = {
3672 /* PREFIX_90 */
252b5132 3673 {
bf890a93
IT
3674 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
3675 { "pause", { XX }, 0 },
3676 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
507bd325 3677 { NULL, { { NULL, 0 } }, PREFIX_IGNORED }
0f10071e 3678 },
4e7d34a6 3679
1ceb70f8 3680 /* PREFIX_0F10 */
cc0ec051 3681 {
507bd325
L
3682 { "movups", { XM, EXx }, PREFIX_OPCODE },
3683 { "movss", { XM, EXd }, PREFIX_OPCODE },
3684 { "movupd", { XM, EXx }, PREFIX_OPCODE },
3685 { "movsd", { XM, EXq }, PREFIX_OPCODE },
30d1c836 3686 },
4e7d34a6 3687
1ceb70f8 3688 /* PREFIX_0F11 */
30d1c836 3689 {
507bd325
L
3690 { "movups", { EXxS, XM }, PREFIX_OPCODE },
3691 { "movss", { EXdS, XM }, PREFIX_OPCODE },
3692 { "movupd", { EXxS, XM }, PREFIX_OPCODE },
3693 { "movsd", { EXqS, XM }, PREFIX_OPCODE },
4e7d34a6 3694 },
252b5132 3695
1ceb70f8 3696 /* PREFIX_0F12 */
c608c12e 3697 {
1ceb70f8 3698 { MOD_TABLE (MOD_0F12_PREFIX_0) },
507bd325
L
3699 { "movsldup", { XM, EXx }, PREFIX_OPCODE },
3700 { "movlpd", { XM, EXq }, PREFIX_OPCODE },
3701 { "movddup", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3702 },
4e7d34a6 3703
1ceb70f8 3704 /* PREFIX_0F16 */
c608c12e 3705 {
1ceb70f8 3706 { MOD_TABLE (MOD_0F16_PREFIX_0) },
507bd325
L
3707 { "movshdup", { XM, EXx }, PREFIX_OPCODE },
3708 { "movhpd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3709 },
4e7d34a6 3710
7e8b059b
L
3711 /* PREFIX_0F1A */
3712 {
3713 { MOD_TABLE (MOD_0F1A_PREFIX_0) },
bf890a93
IT
3714 { "bndcl", { Gbnd, Ev_bnd }, 0 },
3715 { "bndmov", { Gbnd, Ebnd }, 0 },
3716 { "bndcu", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3717 },
3718
3719 /* PREFIX_0F1B */
3720 {
3721 { MOD_TABLE (MOD_0F1B_PREFIX_0) },
3722 { MOD_TABLE (MOD_0F1B_PREFIX_1) },
bf890a93
IT
3723 { "bndmov", { Ebnd, Gbnd }, 0 },
3724 { "bndcn", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3725 },
3726
1ceb70f8 3727 /* PREFIX_0F2A */
c608c12e 3728 {
507bd325
L
3729 { "cvtpi2ps", { XM, EMCq }, PREFIX_OPCODE },
3730 { "cvtsi2ss%LQ", { XM, Ev }, PREFIX_OPCODE },
3731 { "cvtpi2pd", { XM, EMCq }, PREFIX_OPCODE },
bf890a93 3732 { "cvtsi2sd%LQ", { XM, Ev }, 0 },
c608c12e 3733 },
4e7d34a6 3734
1ceb70f8 3735 /* PREFIX_0F2B */
c608c12e 3736 {
75c135a8
L
3737 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
3738 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
3739 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
3740 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
c608c12e 3741 },
4e7d34a6 3742
1ceb70f8 3743 /* PREFIX_0F2C */
c608c12e 3744 {
507bd325
L
3745 { "cvttps2pi", { MXC, EXq }, PREFIX_OPCODE },
3746 { "cvttss2siY", { Gv, EXd }, PREFIX_OPCODE },
3747 { "cvttpd2pi", { MXC, EXx }, PREFIX_OPCODE },
3748 { "cvttsd2siY", { Gv, EXq }, PREFIX_OPCODE },
c608c12e 3749 },
4e7d34a6 3750
1ceb70f8 3751 /* PREFIX_0F2D */
c608c12e 3752 {
507bd325
L
3753 { "cvtps2pi", { MXC, EXq }, PREFIX_OPCODE },
3754 { "cvtss2siY", { Gv, EXd }, PREFIX_OPCODE },
3755 { "cvtpd2pi", { MXC, EXx }, PREFIX_OPCODE },
3756 { "cvtsd2siY", { Gv, EXq }, PREFIX_OPCODE },
c608c12e 3757 },
4e7d34a6 3758
1ceb70f8 3759 /* PREFIX_0F2E */
c608c12e 3760 {
bf890a93 3761 { "ucomiss",{ XM, EXd }, 0 },
592d1631 3762 { Bad_Opcode },
bf890a93 3763 { "ucomisd",{ XM, EXq }, 0 },
c608c12e 3764 },
4e7d34a6 3765
1ceb70f8 3766 /* PREFIX_0F2F */
c608c12e 3767 {
bf890a93 3768 { "comiss", { XM, EXd }, 0 },
592d1631 3769 { Bad_Opcode },
bf890a93 3770 { "comisd", { XM, EXq }, 0 },
c608c12e 3771 },
4e7d34a6 3772
1ceb70f8 3773 /* PREFIX_0F51 */
c608c12e 3774 {
507bd325
L
3775 { "sqrtps", { XM, EXx }, PREFIX_OPCODE },
3776 { "sqrtss", { XM, EXd }, PREFIX_OPCODE },
3777 { "sqrtpd", { XM, EXx }, PREFIX_OPCODE },
3778 { "sqrtsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3779 },
4e7d34a6 3780
1ceb70f8 3781 /* PREFIX_0F52 */
c608c12e 3782 {
507bd325
L
3783 { "rsqrtps",{ XM, EXx }, PREFIX_OPCODE },
3784 { "rsqrtss",{ XM, EXd }, PREFIX_OPCODE },
c608c12e 3785 },
4e7d34a6 3786
1ceb70f8 3787 /* PREFIX_0F53 */
c608c12e 3788 {
507bd325
L
3789 { "rcpps", { XM, EXx }, PREFIX_OPCODE },
3790 { "rcpss", { XM, EXd }, PREFIX_OPCODE },
c608c12e 3791 },
4e7d34a6 3792
1ceb70f8 3793 /* PREFIX_0F58 */
c608c12e 3794 {
507bd325
L
3795 { "addps", { XM, EXx }, PREFIX_OPCODE },
3796 { "addss", { XM, EXd }, PREFIX_OPCODE },
3797 { "addpd", { XM, EXx }, PREFIX_OPCODE },
3798 { "addsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3799 },
4e7d34a6 3800
1ceb70f8 3801 /* PREFIX_0F59 */
c608c12e 3802 {
507bd325
L
3803 { "mulps", { XM, EXx }, PREFIX_OPCODE },
3804 { "mulss", { XM, EXd }, PREFIX_OPCODE },
3805 { "mulpd", { XM, EXx }, PREFIX_OPCODE },
3806 { "mulsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3807 },
4e7d34a6 3808
1ceb70f8 3809 /* PREFIX_0F5A */
041bd2e0 3810 {
507bd325
L
3811 { "cvtps2pd", { XM, EXq }, PREFIX_OPCODE },
3812 { "cvtss2sd", { XM, EXd }, PREFIX_OPCODE },
3813 { "cvtpd2ps", { XM, EXx }, PREFIX_OPCODE },
3814 { "cvtsd2ss", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3815 },
4e7d34a6 3816
1ceb70f8 3817 /* PREFIX_0F5B */
041bd2e0 3818 {
507bd325
L
3819 { "cvtdq2ps", { XM, EXx }, PREFIX_OPCODE },
3820 { "cvttps2dq", { XM, EXx }, PREFIX_OPCODE },
3821 { "cvtps2dq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 3822 },
4e7d34a6 3823
1ceb70f8 3824 /* PREFIX_0F5C */
041bd2e0 3825 {
507bd325
L
3826 { "subps", { XM, EXx }, PREFIX_OPCODE },
3827 { "subss", { XM, EXd }, PREFIX_OPCODE },
3828 { "subpd", { XM, EXx }, PREFIX_OPCODE },
3829 { "subsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3830 },
4e7d34a6 3831
1ceb70f8 3832 /* PREFIX_0F5D */
041bd2e0 3833 {
507bd325
L
3834 { "minps", { XM, EXx }, PREFIX_OPCODE },
3835 { "minss", { XM, EXd }, PREFIX_OPCODE },
3836 { "minpd", { XM, EXx }, PREFIX_OPCODE },
3837 { "minsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3838 },
4e7d34a6 3839
1ceb70f8 3840 /* PREFIX_0F5E */
041bd2e0 3841 {
507bd325
L
3842 { "divps", { XM, EXx }, PREFIX_OPCODE },
3843 { "divss", { XM, EXd }, PREFIX_OPCODE },
3844 { "divpd", { XM, EXx }, PREFIX_OPCODE },
3845 { "divsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3846 },
4e7d34a6 3847
1ceb70f8 3848 /* PREFIX_0F5F */
041bd2e0 3849 {
507bd325
L
3850 { "maxps", { XM, EXx }, PREFIX_OPCODE },
3851 { "maxss", { XM, EXd }, PREFIX_OPCODE },
3852 { "maxpd", { XM, EXx }, PREFIX_OPCODE },
3853 { "maxsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3854 },
4e7d34a6 3855
1ceb70f8 3856 /* PREFIX_0F60 */
041bd2e0 3857 {
507bd325 3858 { "punpcklbw",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3859 { Bad_Opcode },
507bd325 3860 { "punpcklbw",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3861 },
4e7d34a6 3862
1ceb70f8 3863 /* PREFIX_0F61 */
041bd2e0 3864 {
507bd325 3865 { "punpcklwd",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3866 { Bad_Opcode },
507bd325 3867 { "punpcklwd",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3868 },
4e7d34a6 3869
1ceb70f8 3870 /* PREFIX_0F62 */
041bd2e0 3871 {
507bd325 3872 { "punpckldq",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3873 { Bad_Opcode },
507bd325 3874 { "punpckldq",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3875 },
4e7d34a6 3876
1ceb70f8 3877 /* PREFIX_0F6C */
041bd2e0 3878 {
592d1631
L
3879 { Bad_Opcode },
3880 { Bad_Opcode },
507bd325 3881 { "punpcklqdq", { XM, EXx }, PREFIX_OPCODE },
0f17484f 3882 },
4e7d34a6 3883
1ceb70f8 3884 /* PREFIX_0F6D */
0f17484f 3885 {
592d1631
L
3886 { Bad_Opcode },
3887 { Bad_Opcode },
507bd325 3888 { "punpckhqdq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 3889 },
4e7d34a6 3890
1ceb70f8 3891 /* PREFIX_0F6F */
ca164297 3892 {
507bd325
L
3893 { "movq", { MX, EM }, PREFIX_OPCODE },
3894 { "movdqu", { XM, EXx }, PREFIX_OPCODE },
3895 { "movdqa", { XM, EXx }, PREFIX_OPCODE },
ca164297 3896 },
4e7d34a6 3897
1ceb70f8 3898 /* PREFIX_0F70 */
4e7d34a6 3899 {
507bd325
L
3900 { "pshufw", { MX, EM, Ib }, PREFIX_OPCODE },
3901 { "pshufhw",{ XM, EXx, Ib }, PREFIX_OPCODE },
3902 { "pshufd", { XM, EXx, Ib }, PREFIX_OPCODE },
3903 { "pshuflw",{ XM, EXx, Ib }, PREFIX_OPCODE },
4e7d34a6
L
3904 },
3905
92fddf8e
L
3906 /* PREFIX_0F73_REG_3 */
3907 {
592d1631
L
3908 { Bad_Opcode },
3909 { Bad_Opcode },
bf890a93 3910 { "psrldq", { XS, Ib }, 0 },
92fddf8e
L
3911 },
3912
3913 /* PREFIX_0F73_REG_7 */
3914 {
592d1631
L
3915 { Bad_Opcode },
3916 { Bad_Opcode },
bf890a93 3917 { "pslldq", { XS, Ib }, 0 },
92fddf8e
L
3918 },
3919
1ceb70f8 3920 /* PREFIX_0F78 */
4e7d34a6 3921 {
bf890a93 3922 {"vmread", { Em, Gm }, 0 },
592d1631 3923 { Bad_Opcode },
bf890a93
IT
3924 {"extrq", { XS, Ib, Ib }, 0 },
3925 {"insertq", { XM, XS, Ib, Ib }, 0 },
4e7d34a6
L
3926 },
3927
1ceb70f8 3928 /* PREFIX_0F79 */
4e7d34a6 3929 {
bf890a93 3930 {"vmwrite", { Gm, Em }, 0 },
592d1631 3931 { Bad_Opcode },
bf890a93
IT
3932 {"extrq", { XM, XS }, 0 },
3933 {"insertq", { XM, XS }, 0 },
4e7d34a6
L
3934 },
3935
1ceb70f8 3936 /* PREFIX_0F7C */
ca164297 3937 {
592d1631
L
3938 { Bad_Opcode },
3939 { Bad_Opcode },
507bd325
L
3940 { "haddpd", { XM, EXx }, PREFIX_OPCODE },
3941 { "haddps", { XM, EXx }, PREFIX_OPCODE },
ca164297 3942 },
4e7d34a6 3943
1ceb70f8 3944 /* PREFIX_0F7D */
ca164297 3945 {
592d1631
L
3946 { Bad_Opcode },
3947 { Bad_Opcode },
507bd325
L
3948 { "hsubpd", { XM, EXx }, PREFIX_OPCODE },
3949 { "hsubps", { XM, EXx }, PREFIX_OPCODE },
ca164297 3950 },
4e7d34a6 3951
1ceb70f8 3952 /* PREFIX_0F7E */
ca164297 3953 {
507bd325
L
3954 { "movK", { Edq, MX }, PREFIX_OPCODE },
3955 { "movq", { XM, EXq }, PREFIX_OPCODE },
3956 { "movK", { Edq, XM }, PREFIX_OPCODE },
ca164297 3957 },
4e7d34a6 3958
1ceb70f8 3959 /* PREFIX_0F7F */
ca164297 3960 {
507bd325
L
3961 { "movq", { EMS, MX }, PREFIX_OPCODE },
3962 { "movdqu", { EXxS, XM }, PREFIX_OPCODE },
3963 { "movdqa", { EXxS, XM }, PREFIX_OPCODE },
ca164297 3964 },
4e7d34a6 3965
c7b8aa3a
L
3966 /* PREFIX_0FAE_REG_0 */
3967 {
3968 { Bad_Opcode },
bf890a93 3969 { "rdfsbase", { Ev }, 0 },
c7b8aa3a
L
3970 },
3971
3972 /* PREFIX_0FAE_REG_1 */
3973 {
3974 { Bad_Opcode },
bf890a93 3975 { "rdgsbase", { Ev }, 0 },
c7b8aa3a
L
3976 },
3977
3978 /* PREFIX_0FAE_REG_2 */
3979 {
3980 { Bad_Opcode },
bf890a93 3981 { "wrfsbase", { Ev }, 0 },
c7b8aa3a
L
3982 },
3983
3984 /* PREFIX_0FAE_REG_3 */
3985 {
3986 { Bad_Opcode },
bf890a93 3987 { "wrgsbase", { Ev }, 0 },
c7b8aa3a
L
3988 },
3989
c5e7287a
IT
3990 /* PREFIX_0FAE_REG_6 */
3991 {
bf890a93 3992 { "xsaveopt", { FXSAVE }, 0 },
c5e7287a 3993 { Bad_Opcode },
bf890a93 3994 { "clwb", { Mb }, 0 },
c5e7287a
IT
3995 },
3996
963f3586
IT
3997 /* PREFIX_0FAE_REG_7 */
3998 {
bf890a93 3999 { "clflush", { Mb }, 0 },
963f3586 4000 { Bad_Opcode },
bf890a93 4001 { "clflushopt", { Mb }, 0 },
963f3586
IT
4002 },
4003
9d8596f0
IT
4004 /* PREFIX_RM_0_0FAE_REG_7 */
4005 {
bf890a93 4006 { "sfence", { Skip_MODRM }, 0 },
9d8596f0 4007 { Bad_Opcode },
bf890a93 4008 { "pcommit", { Skip_MODRM }, 0 },
9d8596f0
IT
4009 },
4010
1ceb70f8 4011 /* PREFIX_0FB8 */
ca164297 4012 {
592d1631 4013 { Bad_Opcode },
bf890a93 4014 { "popcntS", { Gv, Ev }, 0 },
ca164297 4015 },
4e7d34a6 4016
f12dc422
L
4017 /* PREFIX_0FBC */
4018 {
bf890a93
IT
4019 { "bsfS", { Gv, Ev }, 0 },
4020 { "tzcntS", { Gv, Ev }, 0 },
4021 { "bsfS", { Gv, Ev }, 0 },
f12dc422
L
4022 },
4023
1ceb70f8 4024 /* PREFIX_0FBD */
050dfa73 4025 {
bf890a93
IT
4026 { "bsrS", { Gv, Ev }, 0 },
4027 { "lzcntS", { Gv, Ev }, 0 },
4028 { "bsrS", { Gv, Ev }, 0 },
050dfa73
MM
4029 },
4030
1ceb70f8 4031 /* PREFIX_0FC2 */
050dfa73 4032 {
507bd325
L
4033 { "cmpps", { XM, EXx, CMP }, PREFIX_OPCODE },
4034 { "cmpss", { XM, EXd, CMP }, PREFIX_OPCODE },
4035 { "cmppd", { XM, EXx, CMP }, PREFIX_OPCODE },
4036 { "cmpsd", { XM, EXq, CMP }, PREFIX_OPCODE },
050dfa73 4037 },
246c51aa 4038
4ee52178
L
4039 /* PREFIX_0FC3 */
4040 {
507bd325 4041 { "movntiS", { Ma, Gv }, PREFIX_OPCODE },
4ee52178
L
4042 },
4043
f24bcbaa 4044 /* PREFIX_MOD_0_0FC7_REG_6 */
92fddf8e 4045 {
bf890a93
IT
4046 { "vmptrld",{ Mq }, 0 },
4047 { "vmxon", { Mq }, 0 },
4048 { "vmclear",{ Mq }, 0 },
92fddf8e
L
4049 },
4050
f24bcbaa
L
4051 /* PREFIX_MOD_3_0FC7_REG_6 */
4052 {
4053 { "rdrand", { Ev }, 0 },
4054 { Bad_Opcode },
4055 { "rdrand", { Ev }, 0 }
4056 },
4057
4058 /* PREFIX_MOD_3_0FC7_REG_7 */
4059 {
4060 { "rdseed", { Ev }, 0 },
4061 { Bad_Opcode },
4062 { "rdseed", { Ev }, 0 },
4063 },
4064
1ceb70f8 4065 /* PREFIX_0FD0 */
050dfa73 4066 {
592d1631
L
4067 { Bad_Opcode },
4068 { Bad_Opcode },
bf890a93
IT
4069 { "addsubpd", { XM, EXx }, 0 },
4070 { "addsubps", { XM, EXx }, 0 },
246c51aa 4071 },
050dfa73 4072
1ceb70f8 4073 /* PREFIX_0FD6 */
050dfa73 4074 {
592d1631 4075 { Bad_Opcode },
bf890a93
IT
4076 { "movq2dq",{ XM, MS }, 0 },
4077 { "movq", { EXqS, XM }, 0 },
4078 { "movdq2q",{ MX, XS }, 0 },
050dfa73
MM
4079 },
4080
1ceb70f8 4081 /* PREFIX_0FE6 */
7918206c 4082 {
592d1631 4083 { Bad_Opcode },
507bd325
L
4084 { "cvtdq2pd", { XM, EXq }, PREFIX_OPCODE },
4085 { "cvttpd2dq", { XM, EXx }, PREFIX_OPCODE },
4086 { "cvtpd2dq", { XM, EXx }, PREFIX_OPCODE },
7918206c 4087 },
8b38ad71 4088
1ceb70f8 4089 /* PREFIX_0FE7 */
8b38ad71 4090 {
507bd325 4091 { "movntq", { Mq, MX }, PREFIX_OPCODE },
592d1631 4092 { Bad_Opcode },
75c135a8 4093 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
4e7d34a6
L
4094 },
4095
1ceb70f8 4096 /* PREFIX_0FF0 */
4e7d34a6 4097 {
592d1631
L
4098 { Bad_Opcode },
4099 { Bad_Opcode },
4100 { Bad_Opcode },
1ceb70f8 4101 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4e7d34a6
L
4102 },
4103
1ceb70f8 4104 /* PREFIX_0FF7 */
4e7d34a6 4105 {
507bd325 4106 { "maskmovq", { MX, MS }, PREFIX_OPCODE },
592d1631 4107 { Bad_Opcode },
507bd325 4108 { "maskmovdqu", { XM, XS }, PREFIX_OPCODE },
8b38ad71 4109 },
42903f7f 4110
1ceb70f8 4111 /* PREFIX_0F3810 */
42903f7f 4112 {
592d1631
L
4113 { Bad_Opcode },
4114 { Bad_Opcode },
507bd325 4115 { "pblendvb", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4116 },
4117
1ceb70f8 4118 /* PREFIX_0F3814 */
42903f7f 4119 {
592d1631
L
4120 { Bad_Opcode },
4121 { Bad_Opcode },
507bd325 4122 { "blendvps", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4123 },
4124
1ceb70f8 4125 /* PREFIX_0F3815 */
42903f7f 4126 {
592d1631
L
4127 { Bad_Opcode },
4128 { Bad_Opcode },
507bd325 4129 { "blendvpd", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4130 },
4131
1ceb70f8 4132 /* PREFIX_0F3817 */
42903f7f 4133 {
592d1631
L
4134 { Bad_Opcode },
4135 { Bad_Opcode },
507bd325 4136 { "ptest", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4137 },
4138
1ceb70f8 4139 /* PREFIX_0F3820 */
42903f7f 4140 {
592d1631
L
4141 { Bad_Opcode },
4142 { Bad_Opcode },
507bd325 4143 { "pmovsxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4144 },
4145
1ceb70f8 4146 /* PREFIX_0F3821 */
42903f7f 4147 {
592d1631
L
4148 { Bad_Opcode },
4149 { Bad_Opcode },
507bd325 4150 { "pmovsxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4151 },
4152
1ceb70f8 4153 /* PREFIX_0F3822 */
42903f7f 4154 {
592d1631
L
4155 { Bad_Opcode },
4156 { Bad_Opcode },
507bd325 4157 { "pmovsxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4158 },
4159
1ceb70f8 4160 /* PREFIX_0F3823 */
42903f7f 4161 {
592d1631
L
4162 { Bad_Opcode },
4163 { Bad_Opcode },
507bd325 4164 { "pmovsxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4165 },
4166
1ceb70f8 4167 /* PREFIX_0F3824 */
42903f7f 4168 {
592d1631
L
4169 { Bad_Opcode },
4170 { Bad_Opcode },
507bd325 4171 { "pmovsxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4172 },
4173
1ceb70f8 4174 /* PREFIX_0F3825 */
42903f7f 4175 {
592d1631
L
4176 { Bad_Opcode },
4177 { Bad_Opcode },
507bd325 4178 { "pmovsxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4179 },
4180
1ceb70f8 4181 /* PREFIX_0F3828 */
42903f7f 4182 {
592d1631
L
4183 { Bad_Opcode },
4184 { Bad_Opcode },
507bd325 4185 { "pmuldq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4186 },
4187
1ceb70f8 4188 /* PREFIX_0F3829 */
42903f7f 4189 {
592d1631
L
4190 { Bad_Opcode },
4191 { Bad_Opcode },
507bd325 4192 { "pcmpeqq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4193 },
4194
1ceb70f8 4195 /* PREFIX_0F382A */
42903f7f 4196 {
592d1631
L
4197 { Bad_Opcode },
4198 { Bad_Opcode },
75c135a8 4199 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
42903f7f
L
4200 },
4201
1ceb70f8 4202 /* PREFIX_0F382B */
42903f7f 4203 {
592d1631
L
4204 { Bad_Opcode },
4205 { Bad_Opcode },
507bd325 4206 { "packusdw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4207 },
4208
1ceb70f8 4209 /* PREFIX_0F3830 */
42903f7f 4210 {
592d1631
L
4211 { Bad_Opcode },
4212 { Bad_Opcode },
507bd325 4213 { "pmovzxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4214 },
4215
1ceb70f8 4216 /* PREFIX_0F3831 */
42903f7f 4217 {
592d1631
L
4218 { Bad_Opcode },
4219 { Bad_Opcode },
507bd325 4220 { "pmovzxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4221 },
4222
1ceb70f8 4223 /* PREFIX_0F3832 */
42903f7f 4224 {
592d1631
L
4225 { Bad_Opcode },
4226 { Bad_Opcode },
507bd325 4227 { "pmovzxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4228 },
4229
1ceb70f8 4230 /* PREFIX_0F3833 */
42903f7f 4231 {
592d1631
L
4232 { Bad_Opcode },
4233 { Bad_Opcode },
507bd325 4234 { "pmovzxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4235 },
4236
1ceb70f8 4237 /* PREFIX_0F3834 */
42903f7f 4238 {
592d1631
L
4239 { Bad_Opcode },
4240 { Bad_Opcode },
507bd325 4241 { "pmovzxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4242 },
4243
1ceb70f8 4244 /* PREFIX_0F3835 */
42903f7f 4245 {
592d1631
L
4246 { Bad_Opcode },
4247 { Bad_Opcode },
507bd325 4248 { "pmovzxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4249 },
4250
1ceb70f8 4251 /* PREFIX_0F3837 */
4e7d34a6 4252 {
592d1631
L
4253 { Bad_Opcode },
4254 { Bad_Opcode },
507bd325 4255 { "pcmpgtq", { XM, EXx }, PREFIX_OPCODE },
4e7d34a6
L
4256 },
4257
1ceb70f8 4258 /* PREFIX_0F3838 */
42903f7f 4259 {
592d1631
L
4260 { Bad_Opcode },
4261 { Bad_Opcode },
507bd325 4262 { "pminsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4263 },
4264
1ceb70f8 4265 /* PREFIX_0F3839 */
42903f7f 4266 {
592d1631
L
4267 { Bad_Opcode },
4268 { Bad_Opcode },
507bd325 4269 { "pminsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4270 },
4271
1ceb70f8 4272 /* PREFIX_0F383A */
42903f7f 4273 {
592d1631
L
4274 { Bad_Opcode },
4275 { Bad_Opcode },
507bd325 4276 { "pminuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4277 },
4278
1ceb70f8 4279 /* PREFIX_0F383B */
42903f7f 4280 {
592d1631
L
4281 { Bad_Opcode },
4282 { Bad_Opcode },
507bd325 4283 { "pminud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4284 },
4285
1ceb70f8 4286 /* PREFIX_0F383C */
42903f7f 4287 {
592d1631
L
4288 { Bad_Opcode },
4289 { Bad_Opcode },
507bd325 4290 { "pmaxsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4291 },
4292
1ceb70f8 4293 /* PREFIX_0F383D */
42903f7f 4294 {
592d1631
L
4295 { Bad_Opcode },
4296 { Bad_Opcode },
507bd325 4297 { "pmaxsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4298 },
4299
1ceb70f8 4300 /* PREFIX_0F383E */
42903f7f 4301 {
592d1631
L
4302 { Bad_Opcode },
4303 { Bad_Opcode },
507bd325 4304 { "pmaxuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4305 },
4306
1ceb70f8 4307 /* PREFIX_0F383F */
42903f7f 4308 {
592d1631
L
4309 { Bad_Opcode },
4310 { Bad_Opcode },
507bd325 4311 { "pmaxud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4312 },
4313
1ceb70f8 4314 /* PREFIX_0F3840 */
42903f7f 4315 {
592d1631
L
4316 { Bad_Opcode },
4317 { Bad_Opcode },
507bd325 4318 { "pmulld", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4319 },
4320
1ceb70f8 4321 /* PREFIX_0F3841 */
42903f7f 4322 {
592d1631
L
4323 { Bad_Opcode },
4324 { Bad_Opcode },
507bd325 4325 { "phminposuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4326 },
4327
f1f8f695
L
4328 /* PREFIX_0F3880 */
4329 {
592d1631
L
4330 { Bad_Opcode },
4331 { Bad_Opcode },
507bd325 4332 { "invept", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4333 },
4334
4335 /* PREFIX_0F3881 */
4336 {
592d1631
L
4337 { Bad_Opcode },
4338 { Bad_Opcode },
507bd325 4339 { "invvpid", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4340 },
4341
6c30d220
L
4342 /* PREFIX_0F3882 */
4343 {
4344 { Bad_Opcode },
4345 { Bad_Opcode },
507bd325 4346 { "invpcid", { Gm, M }, PREFIX_OPCODE },
6c30d220
L
4347 },
4348
a0046408
L
4349 /* PREFIX_0F38C8 */
4350 {
507bd325 4351 { "sha1nexte", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4352 },
4353
4354 /* PREFIX_0F38C9 */
4355 {
507bd325 4356 { "sha1msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4357 },
4358
4359 /* PREFIX_0F38CA */
4360 {
507bd325 4361 { "sha1msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4362 },
4363
4364 /* PREFIX_0F38CB */
4365 {
507bd325 4366 { "sha256rnds2", { XM, EXxmm, XMM0 }, PREFIX_OPCODE },
a0046408
L
4367 },
4368
4369 /* PREFIX_0F38CC */
4370 {
507bd325 4371 { "sha256msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4372 },
4373
4374 /* PREFIX_0F38CD */
4375 {
507bd325 4376 { "sha256msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4377 },
4378
c0f3af97
L
4379 /* PREFIX_0F38DB */
4380 {
592d1631
L
4381 { Bad_Opcode },
4382 { Bad_Opcode },
507bd325 4383 { "aesimc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4384 },
4385
4386 /* PREFIX_0F38DC */
4387 {
592d1631
L
4388 { Bad_Opcode },
4389 { Bad_Opcode },
507bd325 4390 { "aesenc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4391 },
4392
4393 /* PREFIX_0F38DD */
4394 {
592d1631
L
4395 { Bad_Opcode },
4396 { Bad_Opcode },
507bd325 4397 { "aesenclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4398 },
4399
4400 /* PREFIX_0F38DE */
4401 {
592d1631
L
4402 { Bad_Opcode },
4403 { Bad_Opcode },
507bd325 4404 { "aesdec", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4405 },
4406
4407 /* PREFIX_0F38DF */
4408 {
592d1631
L
4409 { Bad_Opcode },
4410 { Bad_Opcode },
507bd325 4411 { "aesdeclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4412 },
4413
1ceb70f8 4414 /* PREFIX_0F38F0 */
4e7d34a6 4415 {
507bd325 4416 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
592d1631 4417 { Bad_Opcode },
507bd325
L
4418 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
4419 { "crc32", { Gdq, { CRC32_Fixup, b_mode } }, PREFIX_OPCODE },
4e7d34a6
L
4420 },
4421
1ceb70f8 4422 /* PREFIX_0F38F1 */
4e7d34a6 4423 {
507bd325 4424 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
592d1631 4425 { Bad_Opcode },
507bd325
L
4426 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
4427 { "crc32", { Gdq, { CRC32_Fixup, v_mode } }, PREFIX_OPCODE },
4e7d34a6
L
4428 },
4429
e2e1fcde
L
4430 /* PREFIX_0F38F6 */
4431 {
4432 { Bad_Opcode },
507bd325
L
4433 { "adoxS", { Gdq, Edq}, PREFIX_OPCODE },
4434 { "adcxS", { Gdq, Edq}, PREFIX_OPCODE },
e2e1fcde
L
4435 { Bad_Opcode },
4436 },
4437
1ceb70f8 4438 /* PREFIX_0F3A08 */
42903f7f 4439 {
592d1631
L
4440 { Bad_Opcode },
4441 { Bad_Opcode },
507bd325 4442 { "roundps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4443 },
4444
1ceb70f8 4445 /* PREFIX_0F3A09 */
42903f7f 4446 {
592d1631
L
4447 { Bad_Opcode },
4448 { Bad_Opcode },
507bd325 4449 { "roundpd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4450 },
4451
1ceb70f8 4452 /* PREFIX_0F3A0A */
42903f7f 4453 {
592d1631
L
4454 { Bad_Opcode },
4455 { Bad_Opcode },
507bd325 4456 { "roundss", { XM, EXd, Ib }, PREFIX_OPCODE },
42903f7f
L
4457 },
4458
1ceb70f8 4459 /* PREFIX_0F3A0B */
42903f7f 4460 {
592d1631
L
4461 { Bad_Opcode },
4462 { Bad_Opcode },
507bd325 4463 { "roundsd", { XM, EXq, Ib }, PREFIX_OPCODE },
42903f7f
L
4464 },
4465
1ceb70f8 4466 /* PREFIX_0F3A0C */
42903f7f 4467 {
592d1631
L
4468 { Bad_Opcode },
4469 { Bad_Opcode },
507bd325 4470 { "blendps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4471 },
4472
1ceb70f8 4473 /* PREFIX_0F3A0D */
42903f7f 4474 {
592d1631
L
4475 { Bad_Opcode },
4476 { Bad_Opcode },
507bd325 4477 { "blendpd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4478 },
4479
1ceb70f8 4480 /* PREFIX_0F3A0E */
42903f7f 4481 {
592d1631
L
4482 { Bad_Opcode },
4483 { Bad_Opcode },
507bd325 4484 { "pblendw", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4485 },
4486
1ceb70f8 4487 /* PREFIX_0F3A14 */
42903f7f 4488 {
592d1631
L
4489 { Bad_Opcode },
4490 { Bad_Opcode },
507bd325 4491 { "pextrb", { Edqb, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4492 },
4493
1ceb70f8 4494 /* PREFIX_0F3A15 */
42903f7f 4495 {
592d1631
L
4496 { Bad_Opcode },
4497 { Bad_Opcode },
507bd325 4498 { "pextrw", { Edqw, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4499 },
4500
1ceb70f8 4501 /* PREFIX_0F3A16 */
42903f7f 4502 {
592d1631
L
4503 { Bad_Opcode },
4504 { Bad_Opcode },
507bd325 4505 { "pextrK", { Edq, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4506 },
4507
1ceb70f8 4508 /* PREFIX_0F3A17 */
42903f7f 4509 {
592d1631
L
4510 { Bad_Opcode },
4511 { Bad_Opcode },
507bd325 4512 { "extractps", { Edqd, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4513 },
4514
1ceb70f8 4515 /* PREFIX_0F3A20 */
42903f7f 4516 {
592d1631
L
4517 { Bad_Opcode },
4518 { Bad_Opcode },
507bd325 4519 { "pinsrb", { XM, Edqb, Ib }, PREFIX_OPCODE },
42903f7f
L
4520 },
4521
1ceb70f8 4522 /* PREFIX_0F3A21 */
42903f7f 4523 {
592d1631
L
4524 { Bad_Opcode },
4525 { Bad_Opcode },
507bd325 4526 { "insertps", { XM, EXd, Ib }, PREFIX_OPCODE },
42903f7f
L
4527 },
4528
1ceb70f8 4529 /* PREFIX_0F3A22 */
42903f7f 4530 {
592d1631
L
4531 { Bad_Opcode },
4532 { Bad_Opcode },
507bd325 4533 { "pinsrK", { XM, Edq, Ib }, PREFIX_OPCODE },
42903f7f
L
4534 },
4535
1ceb70f8 4536 /* PREFIX_0F3A40 */
42903f7f 4537 {
592d1631
L
4538 { Bad_Opcode },
4539 { Bad_Opcode },
507bd325 4540 { "dpps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4541 },
4542
1ceb70f8 4543 /* PREFIX_0F3A41 */
42903f7f 4544 {
592d1631
L
4545 { Bad_Opcode },
4546 { Bad_Opcode },
507bd325 4547 { "dppd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4548 },
4549
1ceb70f8 4550 /* PREFIX_0F3A42 */
42903f7f 4551 {
592d1631
L
4552 { Bad_Opcode },
4553 { Bad_Opcode },
507bd325 4554 { "mpsadbw", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f 4555 },
381d071f 4556
c0f3af97
L
4557 /* PREFIX_0F3A44 */
4558 {
592d1631
L
4559 { Bad_Opcode },
4560 { Bad_Opcode },
507bd325 4561 { "pclmulqdq", { XM, EXx, PCLMUL }, PREFIX_OPCODE },
c0f3af97
L
4562 },
4563
1ceb70f8 4564 /* PREFIX_0F3A60 */
381d071f 4565 {
592d1631
L
4566 { Bad_Opcode },
4567 { Bad_Opcode },
507bd325 4568 { "pcmpestrm", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f
L
4569 },
4570
1ceb70f8 4571 /* PREFIX_0F3A61 */
381d071f 4572 {
592d1631
L
4573 { Bad_Opcode },
4574 { Bad_Opcode },
507bd325 4575 { "pcmpestri", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f
L
4576 },
4577
1ceb70f8 4578 /* PREFIX_0F3A62 */
381d071f 4579 {
592d1631
L
4580 { Bad_Opcode },
4581 { Bad_Opcode },
507bd325 4582 { "pcmpistrm", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f
L
4583 },
4584
1ceb70f8 4585 /* PREFIX_0F3A63 */
381d071f 4586 {
592d1631
L
4587 { Bad_Opcode },
4588 { Bad_Opcode },
507bd325 4589 { "pcmpistri", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f 4590 },
09a2c6cf 4591
a0046408
L
4592 /* PREFIX_0F3ACC */
4593 {
507bd325 4594 { "sha1rnds4", { XM, EXxmm, Ib }, PREFIX_OPCODE },
a0046408
L
4595 },
4596
c0f3af97 4597 /* PREFIX_0F3ADF */
09a2c6cf 4598 {
592d1631
L
4599 { Bad_Opcode },
4600 { Bad_Opcode },
507bd325 4601 { "aeskeygenassist", { XM, EXx, Ib }, PREFIX_OPCODE },
09a2c6cf
L
4602 },
4603
592a252b 4604 /* PREFIX_VEX_0F10 */
09a2c6cf 4605 {
592a252b
L
4606 { VEX_W_TABLE (VEX_W_0F10_P_0) },
4607 { VEX_LEN_TABLE (VEX_LEN_0F10_P_1) },
4608 { VEX_W_TABLE (VEX_W_0F10_P_2) },
4609 { VEX_LEN_TABLE (VEX_LEN_0F10_P_3) },
09a2c6cf
L
4610 },
4611
592a252b 4612 /* PREFIX_VEX_0F11 */
09a2c6cf 4613 {
592a252b
L
4614 { VEX_W_TABLE (VEX_W_0F11_P_0) },
4615 { VEX_LEN_TABLE (VEX_LEN_0F11_P_1) },
4616 { VEX_W_TABLE (VEX_W_0F11_P_2) },
4617 { VEX_LEN_TABLE (VEX_LEN_0F11_P_3) },
09a2c6cf
L
4618 },
4619
592a252b 4620 /* PREFIX_VEX_0F12 */
09a2c6cf 4621 {
592a252b
L
4622 { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
4623 { VEX_W_TABLE (VEX_W_0F12_P_1) },
4624 { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) },
4625 { VEX_W_TABLE (VEX_W_0F12_P_3) },
09a2c6cf
L
4626 },
4627
592a252b 4628 /* PREFIX_VEX_0F16 */
09a2c6cf 4629 {
592a252b
L
4630 { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
4631 { VEX_W_TABLE (VEX_W_0F16_P_1) },
4632 { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) },
5f754f58 4633 },
7c52e0e8 4634
592a252b 4635 /* PREFIX_VEX_0F2A */
5f754f58 4636 {
592d1631 4637 { Bad_Opcode },
592a252b 4638 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_1) },
592d1631 4639 { Bad_Opcode },
592a252b 4640 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_3) },
5f754f58 4641 },
7c52e0e8 4642
592a252b 4643 /* PREFIX_VEX_0F2C */
5f754f58 4644 {
592d1631 4645 { Bad_Opcode },
592a252b 4646 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_1) },
592d1631 4647 { Bad_Opcode },
592a252b 4648 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_3) },
5f754f58 4649 },
7c52e0e8 4650
592a252b 4651 /* PREFIX_VEX_0F2D */
7c52e0e8 4652 {
592d1631 4653 { Bad_Opcode },
592a252b 4654 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_1) },
592d1631 4655 { Bad_Opcode },
592a252b 4656 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_3) },
7c52e0e8
L
4657 },
4658
592a252b 4659 /* PREFIX_VEX_0F2E */
7c52e0e8 4660 {
592a252b 4661 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_0) },
592d1631 4662 { Bad_Opcode },
592a252b 4663 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_2) },
7c52e0e8
L
4664 },
4665
592a252b 4666 /* PREFIX_VEX_0F2F */
7c52e0e8 4667 {
592a252b 4668 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_0) },
592d1631 4669 { Bad_Opcode },
592a252b 4670 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_2) },
7c52e0e8
L
4671 },
4672
43234a1e
L
4673 /* PREFIX_VEX_0F41 */
4674 {
4675 { VEX_LEN_TABLE (VEX_LEN_0F41_P_0) },
1ba585e8
IT
4676 { Bad_Opcode },
4677 { VEX_LEN_TABLE (VEX_LEN_0F41_P_2) },
43234a1e
L
4678 },
4679
4680 /* PREFIX_VEX_0F42 */
4681 {
4682 { VEX_LEN_TABLE (VEX_LEN_0F42_P_0) },
1ba585e8
IT
4683 { Bad_Opcode },
4684 { VEX_LEN_TABLE (VEX_LEN_0F42_P_2) },
43234a1e
L
4685 },
4686
4687 /* PREFIX_VEX_0F44 */
4688 {
4689 { VEX_LEN_TABLE (VEX_LEN_0F44_P_0) },
1ba585e8
IT
4690 { Bad_Opcode },
4691 { VEX_LEN_TABLE (VEX_LEN_0F44_P_2) },
43234a1e
L
4692 },
4693
4694 /* PREFIX_VEX_0F45 */
4695 {
4696 { VEX_LEN_TABLE (VEX_LEN_0F45_P_0) },
1ba585e8
IT
4697 { Bad_Opcode },
4698 { VEX_LEN_TABLE (VEX_LEN_0F45_P_2) },
43234a1e
L
4699 },
4700
4701 /* PREFIX_VEX_0F46 */
4702 {
4703 { VEX_LEN_TABLE (VEX_LEN_0F46_P_0) },
1ba585e8
IT
4704 { Bad_Opcode },
4705 { VEX_LEN_TABLE (VEX_LEN_0F46_P_2) },
43234a1e
L
4706 },
4707
4708 /* PREFIX_VEX_0F47 */
4709 {
4710 { VEX_LEN_TABLE (VEX_LEN_0F47_P_0) },
1ba585e8
IT
4711 { Bad_Opcode },
4712 { VEX_LEN_TABLE (VEX_LEN_0F47_P_2) },
43234a1e
L
4713 },
4714
1ba585e8 4715 /* PREFIX_VEX_0F4A */
43234a1e 4716 {
1ba585e8 4717 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_0) },
43234a1e 4718 { Bad_Opcode },
1ba585e8
IT
4719 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_2) },
4720 },
4721
4722 /* PREFIX_VEX_0F4B */
4723 {
4724 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_0) },
43234a1e
L
4725 { Bad_Opcode },
4726 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_2) },
4727 },
4728
592a252b 4729 /* PREFIX_VEX_0F51 */
7c52e0e8 4730 {
592a252b
L
4731 { VEX_W_TABLE (VEX_W_0F51_P_0) },
4732 { VEX_LEN_TABLE (VEX_LEN_0F51_P_1) },
4733 { VEX_W_TABLE (VEX_W_0F51_P_2) },
4734 { VEX_LEN_TABLE (VEX_LEN_0F51_P_3) },
7c52e0e8
L
4735 },
4736
592a252b 4737 /* PREFIX_VEX_0F52 */
7c52e0e8 4738 {
592a252b
L
4739 { VEX_W_TABLE (VEX_W_0F52_P_0) },
4740 { VEX_LEN_TABLE (VEX_LEN_0F52_P_1) },
7c52e0e8
L
4741 },
4742
592a252b 4743 /* PREFIX_VEX_0F53 */
7c52e0e8 4744 {
592a252b
L
4745 { VEX_W_TABLE (VEX_W_0F53_P_0) },
4746 { VEX_LEN_TABLE (VEX_LEN_0F53_P_1) },
7c52e0e8
L
4747 },
4748
592a252b 4749 /* PREFIX_VEX_0F58 */
7c52e0e8 4750 {
592a252b
L
4751 { VEX_W_TABLE (VEX_W_0F58_P_0) },
4752 { VEX_LEN_TABLE (VEX_LEN_0F58_P_1) },
4753 { VEX_W_TABLE (VEX_W_0F58_P_2) },
4754 { VEX_LEN_TABLE (VEX_LEN_0F58_P_3) },
7c52e0e8
L
4755 },
4756
592a252b 4757 /* PREFIX_VEX_0F59 */
7c52e0e8 4758 {
592a252b
L
4759 { VEX_W_TABLE (VEX_W_0F59_P_0) },
4760 { VEX_LEN_TABLE (VEX_LEN_0F59_P_1) },
4761 { VEX_W_TABLE (VEX_W_0F59_P_2) },
4762 { VEX_LEN_TABLE (VEX_LEN_0F59_P_3) },
7c52e0e8
L
4763 },
4764
592a252b 4765 /* PREFIX_VEX_0F5A */
7c52e0e8 4766 {
592a252b
L
4767 { VEX_W_TABLE (VEX_W_0F5A_P_0) },
4768 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_1) },
bf890a93 4769 { "vcvtpd2ps%XY", { XMM, EXx }, 0 },
592a252b 4770 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_3) },
7c52e0e8
L
4771 },
4772
592a252b 4773 /* PREFIX_VEX_0F5B */
7c52e0e8 4774 {
592a252b
L
4775 { VEX_W_TABLE (VEX_W_0F5B_P_0) },
4776 { VEX_W_TABLE (VEX_W_0F5B_P_1) },
4777 { VEX_W_TABLE (VEX_W_0F5B_P_2) },
7c52e0e8
L
4778 },
4779
592a252b 4780 /* PREFIX_VEX_0F5C */
7c52e0e8 4781 {
592a252b
L
4782 { VEX_W_TABLE (VEX_W_0F5C_P_0) },
4783 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_1) },
4784 { VEX_W_TABLE (VEX_W_0F5C_P_2) },
4785 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_3) },
7c52e0e8
L
4786 },
4787
592a252b 4788 /* PREFIX_VEX_0F5D */
7c52e0e8 4789 {
592a252b
L
4790 { VEX_W_TABLE (VEX_W_0F5D_P_0) },
4791 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_1) },
4792 { VEX_W_TABLE (VEX_W_0F5D_P_2) },
4793 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_3) },
7c52e0e8
L
4794 },
4795
592a252b 4796 /* PREFIX_VEX_0F5E */
7c52e0e8 4797 {
592a252b
L
4798 { VEX_W_TABLE (VEX_W_0F5E_P_0) },
4799 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_1) },
4800 { VEX_W_TABLE (VEX_W_0F5E_P_2) },
4801 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_3) },
7c52e0e8
L
4802 },
4803
592a252b 4804 /* PREFIX_VEX_0F5F */
7c52e0e8 4805 {
592a252b
L
4806 { VEX_W_TABLE (VEX_W_0F5F_P_0) },
4807 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_1) },
4808 { VEX_W_TABLE (VEX_W_0F5F_P_2) },
4809 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_3) },
7c52e0e8
L
4810 },
4811
592a252b 4812 /* PREFIX_VEX_0F60 */
7c52e0e8 4813 {
592d1631
L
4814 { Bad_Opcode },
4815 { Bad_Opcode },
6c30d220 4816 { VEX_W_TABLE (VEX_W_0F60_P_2) },
7c52e0e8
L
4817 },
4818
592a252b 4819 /* PREFIX_VEX_0F61 */
7c52e0e8 4820 {
592d1631
L
4821 { Bad_Opcode },
4822 { Bad_Opcode },
6c30d220 4823 { VEX_W_TABLE (VEX_W_0F61_P_2) },
7c52e0e8
L
4824 },
4825
592a252b 4826 /* PREFIX_VEX_0F62 */
7c52e0e8 4827 {
592d1631
L
4828 { Bad_Opcode },
4829 { Bad_Opcode },
6c30d220 4830 { VEX_W_TABLE (VEX_W_0F62_P_2) },
7c52e0e8
L
4831 },
4832
592a252b 4833 /* PREFIX_VEX_0F63 */
7c52e0e8 4834 {
592d1631
L
4835 { Bad_Opcode },
4836 { Bad_Opcode },
6c30d220 4837 { VEX_W_TABLE (VEX_W_0F63_P_2) },
7c52e0e8
L
4838 },
4839
592a252b 4840 /* PREFIX_VEX_0F64 */
7c52e0e8 4841 {
592d1631
L
4842 { Bad_Opcode },
4843 { Bad_Opcode },
6c30d220 4844 { VEX_W_TABLE (VEX_W_0F64_P_2) },
7c52e0e8
L
4845 },
4846
592a252b 4847 /* PREFIX_VEX_0F65 */
7c52e0e8 4848 {
592d1631
L
4849 { Bad_Opcode },
4850 { Bad_Opcode },
6c30d220 4851 { VEX_W_TABLE (VEX_W_0F65_P_2) },
7c52e0e8
L
4852 },
4853
592a252b 4854 /* PREFIX_VEX_0F66 */
7c52e0e8 4855 {
592d1631
L
4856 { Bad_Opcode },
4857 { Bad_Opcode },
6c30d220 4858 { VEX_W_TABLE (VEX_W_0F66_P_2) },
7c52e0e8 4859 },
6439fc28 4860
592a252b 4861 /* PREFIX_VEX_0F67 */
331d2d0d 4862 {
592d1631
L
4863 { Bad_Opcode },
4864 { Bad_Opcode },
6c30d220 4865 { VEX_W_TABLE (VEX_W_0F67_P_2) },
c0f3af97
L
4866 },
4867
592a252b 4868 /* PREFIX_VEX_0F68 */
c0f3af97 4869 {
592d1631
L
4870 { Bad_Opcode },
4871 { Bad_Opcode },
6c30d220 4872 { VEX_W_TABLE (VEX_W_0F68_P_2) },
c0f3af97
L
4873 },
4874
592a252b 4875 /* PREFIX_VEX_0F69 */
c0f3af97 4876 {
592d1631
L
4877 { Bad_Opcode },
4878 { Bad_Opcode },
6c30d220 4879 { VEX_W_TABLE (VEX_W_0F69_P_2) },
c0f3af97
L
4880 },
4881
592a252b 4882 /* PREFIX_VEX_0F6A */
c0f3af97 4883 {
592d1631
L
4884 { Bad_Opcode },
4885 { Bad_Opcode },
6c30d220 4886 { VEX_W_TABLE (VEX_W_0F6A_P_2) },
c0f3af97
L
4887 },
4888
592a252b 4889 /* PREFIX_VEX_0F6B */
c0f3af97 4890 {
592d1631
L
4891 { Bad_Opcode },
4892 { Bad_Opcode },
6c30d220 4893 { VEX_W_TABLE (VEX_W_0F6B_P_2) },
c0f3af97
L
4894 },
4895
592a252b 4896 /* PREFIX_VEX_0F6C */
c0f3af97 4897 {
592d1631
L
4898 { Bad_Opcode },
4899 { Bad_Opcode },
6c30d220 4900 { VEX_W_TABLE (VEX_W_0F6C_P_2) },
c0f3af97
L
4901 },
4902
592a252b 4903 /* PREFIX_VEX_0F6D */
c0f3af97 4904 {
592d1631
L
4905 { Bad_Opcode },
4906 { Bad_Opcode },
6c30d220 4907 { VEX_W_TABLE (VEX_W_0F6D_P_2) },
c0f3af97
L
4908 },
4909
592a252b 4910 /* PREFIX_VEX_0F6E */
c0f3af97 4911 {
592d1631
L
4912 { Bad_Opcode },
4913 { Bad_Opcode },
592a252b 4914 { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) },
c0f3af97
L
4915 },
4916
592a252b 4917 /* PREFIX_VEX_0F6F */
c0f3af97 4918 {
592d1631 4919 { Bad_Opcode },
592a252b
L
4920 { VEX_W_TABLE (VEX_W_0F6F_P_1) },
4921 { VEX_W_TABLE (VEX_W_0F6F_P_2) },
c0f3af97
L
4922 },
4923
592a252b 4924 /* PREFIX_VEX_0F70 */
c0f3af97 4925 {
592d1631 4926 { Bad_Opcode },
6c30d220
L
4927 { VEX_W_TABLE (VEX_W_0F70_P_1) },
4928 { VEX_W_TABLE (VEX_W_0F70_P_2) },
4929 { VEX_W_TABLE (VEX_W_0F70_P_3) },
c0f3af97
L
4930 },
4931
592a252b 4932 /* PREFIX_VEX_0F71_REG_2 */
c0f3af97 4933 {
592d1631
L
4934 { Bad_Opcode },
4935 { Bad_Opcode },
6c30d220 4936 { VEX_W_TABLE (VEX_W_0F71_R_2_P_2) },
c0f3af97
L
4937 },
4938
592a252b 4939 /* PREFIX_VEX_0F71_REG_4 */
c0f3af97 4940 {
592d1631
L
4941 { Bad_Opcode },
4942 { Bad_Opcode },
6c30d220 4943 { VEX_W_TABLE (VEX_W_0F71_R_4_P_2) },
c0f3af97
L
4944 },
4945
592a252b 4946 /* PREFIX_VEX_0F71_REG_6 */
c0f3af97 4947 {
592d1631
L
4948 { Bad_Opcode },
4949 { Bad_Opcode },
6c30d220 4950 { VEX_W_TABLE (VEX_W_0F71_R_6_P_2) },
c0f3af97
L
4951 },
4952
592a252b 4953 /* PREFIX_VEX_0F72_REG_2 */
c0f3af97 4954 {
592d1631
L
4955 { Bad_Opcode },
4956 { Bad_Opcode },
6c30d220 4957 { VEX_W_TABLE (VEX_W_0F72_R_2_P_2) },
c0f3af97
L
4958 },
4959
592a252b 4960 /* PREFIX_VEX_0F72_REG_4 */
c0f3af97 4961 {
592d1631
L
4962 { Bad_Opcode },
4963 { Bad_Opcode },
6c30d220 4964 { VEX_W_TABLE (VEX_W_0F72_R_4_P_2) },
c0f3af97
L
4965 },
4966
592a252b 4967 /* PREFIX_VEX_0F72_REG_6 */
c0f3af97 4968 {
592d1631
L
4969 { Bad_Opcode },
4970 { Bad_Opcode },
6c30d220 4971 { VEX_W_TABLE (VEX_W_0F72_R_6_P_2) },
c0f3af97
L
4972 },
4973
592a252b 4974 /* PREFIX_VEX_0F73_REG_2 */
c0f3af97 4975 {
592d1631
L
4976 { Bad_Opcode },
4977 { Bad_Opcode },
6c30d220 4978 { VEX_W_TABLE (VEX_W_0F73_R_2_P_2) },
c0f3af97
L
4979 },
4980
592a252b 4981 /* PREFIX_VEX_0F73_REG_3 */
c0f3af97 4982 {
592d1631
L
4983 { Bad_Opcode },
4984 { Bad_Opcode },
6c30d220 4985 { VEX_W_TABLE (VEX_W_0F73_R_3_P_2) },
c0f3af97
L
4986 },
4987
592a252b 4988 /* PREFIX_VEX_0F73_REG_6 */
c0f3af97 4989 {
592d1631
L
4990 { Bad_Opcode },
4991 { Bad_Opcode },
6c30d220 4992 { VEX_W_TABLE (VEX_W_0F73_R_6_P_2) },
c0f3af97
L
4993 },
4994
592a252b 4995 /* PREFIX_VEX_0F73_REG_7 */
c0f3af97 4996 {
592d1631
L
4997 { Bad_Opcode },
4998 { Bad_Opcode },
6c30d220 4999 { VEX_W_TABLE (VEX_W_0F73_R_7_P_2) },
c0f3af97
L
5000 },
5001
592a252b 5002 /* PREFIX_VEX_0F74 */
c0f3af97 5003 {
592d1631
L
5004 { Bad_Opcode },
5005 { Bad_Opcode },
6c30d220 5006 { VEX_W_TABLE (VEX_W_0F74_P_2) },
c0f3af97
L
5007 },
5008
592a252b 5009 /* PREFIX_VEX_0F75 */
c0f3af97 5010 {
592d1631
L
5011 { Bad_Opcode },
5012 { Bad_Opcode },
6c30d220 5013 { VEX_W_TABLE (VEX_W_0F75_P_2) },
c0f3af97
L
5014 },
5015
592a252b 5016 /* PREFIX_VEX_0F76 */
c0f3af97 5017 {
592d1631
L
5018 { Bad_Opcode },
5019 { Bad_Opcode },
6c30d220 5020 { VEX_W_TABLE (VEX_W_0F76_P_2) },
c0f3af97
L
5021 },
5022
592a252b 5023 /* PREFIX_VEX_0F77 */
c0f3af97 5024 {
592a252b 5025 { VEX_W_TABLE (VEX_W_0F77_P_0) },
c0f3af97
L
5026 },
5027
592a252b 5028 /* PREFIX_VEX_0F7C */
c0f3af97 5029 {
592d1631
L
5030 { Bad_Opcode },
5031 { Bad_Opcode },
592a252b
L
5032 { VEX_W_TABLE (VEX_W_0F7C_P_2) },
5033 { VEX_W_TABLE (VEX_W_0F7C_P_3) },
c0f3af97
L
5034 },
5035
592a252b 5036 /* PREFIX_VEX_0F7D */
c0f3af97 5037 {
592d1631
L
5038 { Bad_Opcode },
5039 { Bad_Opcode },
592a252b
L
5040 { VEX_W_TABLE (VEX_W_0F7D_P_2) },
5041 { VEX_W_TABLE (VEX_W_0F7D_P_3) },
c0f3af97
L
5042 },
5043
592a252b 5044 /* PREFIX_VEX_0F7E */
c0f3af97 5045 {
592d1631 5046 { Bad_Opcode },
592a252b
L
5047 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) },
5048 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
c0f3af97
L
5049 },
5050
592a252b 5051 /* PREFIX_VEX_0F7F */
c0f3af97 5052 {
592d1631 5053 { Bad_Opcode },
592a252b
L
5054 { VEX_W_TABLE (VEX_W_0F7F_P_1) },
5055 { VEX_W_TABLE (VEX_W_0F7F_P_2) },
c0f3af97
L
5056 },
5057
43234a1e
L
5058 /* PREFIX_VEX_0F90 */
5059 {
5060 { VEX_LEN_TABLE (VEX_LEN_0F90_P_0) },
1ba585e8
IT
5061 { Bad_Opcode },
5062 { VEX_LEN_TABLE (VEX_LEN_0F90_P_2) },
43234a1e
L
5063 },
5064
5065 /* PREFIX_VEX_0F91 */
5066 {
5067 { VEX_LEN_TABLE (VEX_LEN_0F91_P_0) },
1ba585e8
IT
5068 { Bad_Opcode },
5069 { VEX_LEN_TABLE (VEX_LEN_0F91_P_2) },
43234a1e
L
5070 },
5071
5072 /* PREFIX_VEX_0F92 */
5073 {
5074 { VEX_LEN_TABLE (VEX_LEN_0F92_P_0) },
1ba585e8 5075 { Bad_Opcode },
90a915bf 5076 { VEX_LEN_TABLE (VEX_LEN_0F92_P_2) },
1ba585e8 5077 { VEX_LEN_TABLE (VEX_LEN_0F92_P_3) },
43234a1e
L
5078 },
5079
5080 /* PREFIX_VEX_0F93 */
5081 {
5082 { VEX_LEN_TABLE (VEX_LEN_0F93_P_0) },
1ba585e8 5083 { Bad_Opcode },
90a915bf 5084 { VEX_LEN_TABLE (VEX_LEN_0F93_P_2) },
1ba585e8 5085 { VEX_LEN_TABLE (VEX_LEN_0F93_P_3) },
43234a1e
L
5086 },
5087
5088 /* PREFIX_VEX_0F98 */
5089 {
5090 { VEX_LEN_TABLE (VEX_LEN_0F98_P_0) },
1ba585e8
IT
5091 { Bad_Opcode },
5092 { VEX_LEN_TABLE (VEX_LEN_0F98_P_2) },
5093 },
5094
5095 /* PREFIX_VEX_0F99 */
5096 {
5097 { VEX_LEN_TABLE (VEX_LEN_0F99_P_0) },
5098 { Bad_Opcode },
5099 { VEX_LEN_TABLE (VEX_LEN_0F99_P_2) },
43234a1e
L
5100 },
5101
592a252b 5102 /* PREFIX_VEX_0FC2 */
c0f3af97 5103 {
592a252b
L
5104 { VEX_W_TABLE (VEX_W_0FC2_P_0) },
5105 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_1) },
5106 { VEX_W_TABLE (VEX_W_0FC2_P_2) },
5107 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_3) },
c0f3af97
L
5108 },
5109
592a252b 5110 /* PREFIX_VEX_0FC4 */
c0f3af97 5111 {
592d1631
L
5112 { Bad_Opcode },
5113 { Bad_Opcode },
592a252b 5114 { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) },
c0f3af97
L
5115 },
5116
592a252b 5117 /* PREFIX_VEX_0FC5 */
c0f3af97 5118 {
592d1631
L
5119 { Bad_Opcode },
5120 { Bad_Opcode },
592a252b 5121 { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) },
c0f3af97
L
5122 },
5123
592a252b 5124 /* PREFIX_VEX_0FD0 */
c0f3af97 5125 {
592d1631
L
5126 { Bad_Opcode },
5127 { Bad_Opcode },
592a252b
L
5128 { VEX_W_TABLE (VEX_W_0FD0_P_2) },
5129 { VEX_W_TABLE (VEX_W_0FD0_P_3) },
c0f3af97
L
5130 },
5131
592a252b 5132 /* PREFIX_VEX_0FD1 */
c0f3af97 5133 {
592d1631
L
5134 { Bad_Opcode },
5135 { Bad_Opcode },
6c30d220 5136 { VEX_W_TABLE (VEX_W_0FD1_P_2) },
c0f3af97
L
5137 },
5138
592a252b 5139 /* PREFIX_VEX_0FD2 */
c0f3af97 5140 {
592d1631
L
5141 { Bad_Opcode },
5142 { Bad_Opcode },
6c30d220 5143 { VEX_W_TABLE (VEX_W_0FD2_P_2) },
c0f3af97
L
5144 },
5145
592a252b 5146 /* PREFIX_VEX_0FD3 */
c0f3af97 5147 {
592d1631
L
5148 { Bad_Opcode },
5149 { Bad_Opcode },
6c30d220 5150 { VEX_W_TABLE (VEX_W_0FD3_P_2) },
c0f3af97
L
5151 },
5152
592a252b 5153 /* PREFIX_VEX_0FD4 */
c0f3af97 5154 {
592d1631
L
5155 { Bad_Opcode },
5156 { Bad_Opcode },
6c30d220 5157 { VEX_W_TABLE (VEX_W_0FD4_P_2) },
c0f3af97
L
5158 },
5159
592a252b 5160 /* PREFIX_VEX_0FD5 */
c0f3af97 5161 {
592d1631
L
5162 { Bad_Opcode },
5163 { Bad_Opcode },
6c30d220 5164 { VEX_W_TABLE (VEX_W_0FD5_P_2) },
c0f3af97
L
5165 },
5166
592a252b 5167 /* PREFIX_VEX_0FD6 */
c0f3af97 5168 {
592d1631
L
5169 { Bad_Opcode },
5170 { Bad_Opcode },
592a252b 5171 { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) },
c0f3af97
L
5172 },
5173
592a252b 5174 /* PREFIX_VEX_0FD7 */
c0f3af97 5175 {
592d1631
L
5176 { Bad_Opcode },
5177 { Bad_Opcode },
592a252b 5178 { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) },
c0f3af97
L
5179 },
5180
592a252b 5181 /* PREFIX_VEX_0FD8 */
c0f3af97 5182 {
592d1631
L
5183 { Bad_Opcode },
5184 { Bad_Opcode },
6c30d220 5185 { VEX_W_TABLE (VEX_W_0FD8_P_2) },
c0f3af97
L
5186 },
5187
592a252b 5188 /* PREFIX_VEX_0FD9 */
c0f3af97 5189 {
592d1631
L
5190 { Bad_Opcode },
5191 { Bad_Opcode },
6c30d220 5192 { VEX_W_TABLE (VEX_W_0FD9_P_2) },
c0f3af97
L
5193 },
5194
592a252b 5195 /* PREFIX_VEX_0FDA */
c0f3af97 5196 {
592d1631
L
5197 { Bad_Opcode },
5198 { Bad_Opcode },
6c30d220 5199 { VEX_W_TABLE (VEX_W_0FDA_P_2) },
c0f3af97
L
5200 },
5201
592a252b 5202 /* PREFIX_VEX_0FDB */
c0f3af97 5203 {
592d1631
L
5204 { Bad_Opcode },
5205 { Bad_Opcode },
6c30d220 5206 { VEX_W_TABLE (VEX_W_0FDB_P_2) },
c0f3af97
L
5207 },
5208
592a252b 5209 /* PREFIX_VEX_0FDC */
c0f3af97 5210 {
592d1631
L
5211 { Bad_Opcode },
5212 { Bad_Opcode },
6c30d220 5213 { VEX_W_TABLE (VEX_W_0FDC_P_2) },
c0f3af97
L
5214 },
5215
592a252b 5216 /* PREFIX_VEX_0FDD */
c0f3af97 5217 {
592d1631
L
5218 { Bad_Opcode },
5219 { Bad_Opcode },
6c30d220 5220 { VEX_W_TABLE (VEX_W_0FDD_P_2) },
c0f3af97
L
5221 },
5222
592a252b 5223 /* PREFIX_VEX_0FDE */
c0f3af97 5224 {
592d1631
L
5225 { Bad_Opcode },
5226 { Bad_Opcode },
6c30d220 5227 { VEX_W_TABLE (VEX_W_0FDE_P_2) },
c0f3af97
L
5228 },
5229
592a252b 5230 /* PREFIX_VEX_0FDF */
c0f3af97 5231 {
592d1631
L
5232 { Bad_Opcode },
5233 { Bad_Opcode },
6c30d220 5234 { VEX_W_TABLE (VEX_W_0FDF_P_2) },
c0f3af97
L
5235 },
5236
592a252b 5237 /* PREFIX_VEX_0FE0 */
c0f3af97 5238 {
592d1631
L
5239 { Bad_Opcode },
5240 { Bad_Opcode },
6c30d220 5241 { VEX_W_TABLE (VEX_W_0FE0_P_2) },
c0f3af97
L
5242 },
5243
592a252b 5244 /* PREFIX_VEX_0FE1 */
c0f3af97 5245 {
592d1631
L
5246 { Bad_Opcode },
5247 { Bad_Opcode },
6c30d220 5248 { VEX_W_TABLE (VEX_W_0FE1_P_2) },
c0f3af97
L
5249 },
5250
592a252b 5251 /* PREFIX_VEX_0FE2 */
c0f3af97 5252 {
592d1631
L
5253 { Bad_Opcode },
5254 { Bad_Opcode },
6c30d220 5255 { VEX_W_TABLE (VEX_W_0FE2_P_2) },
c0f3af97
L
5256 },
5257
592a252b 5258 /* PREFIX_VEX_0FE3 */
c0f3af97 5259 {
592d1631
L
5260 { Bad_Opcode },
5261 { Bad_Opcode },
6c30d220 5262 { VEX_W_TABLE (VEX_W_0FE3_P_2) },
c0f3af97
L
5263 },
5264
592a252b 5265 /* PREFIX_VEX_0FE4 */
c0f3af97 5266 {
592d1631
L
5267 { Bad_Opcode },
5268 { Bad_Opcode },
6c30d220 5269 { VEX_W_TABLE (VEX_W_0FE4_P_2) },
c0f3af97
L
5270 },
5271
592a252b 5272 /* PREFIX_VEX_0FE5 */
c0f3af97 5273 {
592d1631
L
5274 { Bad_Opcode },
5275 { Bad_Opcode },
6c30d220 5276 { VEX_W_TABLE (VEX_W_0FE5_P_2) },
c0f3af97
L
5277 },
5278
592a252b 5279 /* PREFIX_VEX_0FE6 */
c0f3af97 5280 {
592d1631 5281 { Bad_Opcode },
592a252b
L
5282 { VEX_W_TABLE (VEX_W_0FE6_P_1) },
5283 { VEX_W_TABLE (VEX_W_0FE6_P_2) },
5284 { VEX_W_TABLE (VEX_W_0FE6_P_3) },
c0f3af97
L
5285 },
5286
592a252b 5287 /* PREFIX_VEX_0FE7 */
c0f3af97 5288 {
592d1631
L
5289 { Bad_Opcode },
5290 { Bad_Opcode },
592a252b 5291 { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) },
c0f3af97
L
5292 },
5293
592a252b 5294 /* PREFIX_VEX_0FE8 */
c0f3af97 5295 {
592d1631
L
5296 { Bad_Opcode },
5297 { Bad_Opcode },
6c30d220 5298 { VEX_W_TABLE (VEX_W_0FE8_P_2) },
c0f3af97
L
5299 },
5300
592a252b 5301 /* PREFIX_VEX_0FE9 */
c0f3af97 5302 {
592d1631
L
5303 { Bad_Opcode },
5304 { Bad_Opcode },
6c30d220 5305 { VEX_W_TABLE (VEX_W_0FE9_P_2) },
c0f3af97
L
5306 },
5307
592a252b 5308 /* PREFIX_VEX_0FEA */
c0f3af97 5309 {
592d1631
L
5310 { Bad_Opcode },
5311 { Bad_Opcode },
6c30d220 5312 { VEX_W_TABLE (VEX_W_0FEA_P_2) },
c0f3af97
L
5313 },
5314
592a252b 5315 /* PREFIX_VEX_0FEB */
c0f3af97 5316 {
592d1631
L
5317 { Bad_Opcode },
5318 { Bad_Opcode },
6c30d220 5319 { VEX_W_TABLE (VEX_W_0FEB_P_2) },
c0f3af97
L
5320 },
5321
592a252b 5322 /* PREFIX_VEX_0FEC */
c0f3af97 5323 {
592d1631
L
5324 { Bad_Opcode },
5325 { Bad_Opcode },
6c30d220 5326 { VEX_W_TABLE (VEX_W_0FEC_P_2) },
c0f3af97
L
5327 },
5328
592a252b 5329 /* PREFIX_VEX_0FED */
c0f3af97 5330 {
592d1631
L
5331 { Bad_Opcode },
5332 { Bad_Opcode },
6c30d220 5333 { VEX_W_TABLE (VEX_W_0FED_P_2) },
c0f3af97
L
5334 },
5335
592a252b 5336 /* PREFIX_VEX_0FEE */
c0f3af97 5337 {
592d1631
L
5338 { Bad_Opcode },
5339 { Bad_Opcode },
6c30d220 5340 { VEX_W_TABLE (VEX_W_0FEE_P_2) },
c0f3af97
L
5341 },
5342
592a252b 5343 /* PREFIX_VEX_0FEF */
c0f3af97 5344 {
592d1631
L
5345 { Bad_Opcode },
5346 { Bad_Opcode },
6c30d220 5347 { VEX_W_TABLE (VEX_W_0FEF_P_2) },
c0f3af97
L
5348 },
5349
592a252b 5350 /* PREFIX_VEX_0FF0 */
c0f3af97 5351 {
592d1631
L
5352 { Bad_Opcode },
5353 { Bad_Opcode },
5354 { Bad_Opcode },
592a252b 5355 { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) },
c0f3af97
L
5356 },
5357
592a252b 5358 /* PREFIX_VEX_0FF1 */
c0f3af97 5359 {
592d1631
L
5360 { Bad_Opcode },
5361 { Bad_Opcode },
6c30d220 5362 { VEX_W_TABLE (VEX_W_0FF1_P_2) },
c0f3af97
L
5363 },
5364
592a252b 5365 /* PREFIX_VEX_0FF2 */
c0f3af97 5366 {
592d1631
L
5367 { Bad_Opcode },
5368 { Bad_Opcode },
6c30d220 5369 { VEX_W_TABLE (VEX_W_0FF2_P_2) },
c0f3af97
L
5370 },
5371
592a252b 5372 /* PREFIX_VEX_0FF3 */
c0f3af97 5373 {
592d1631
L
5374 { Bad_Opcode },
5375 { Bad_Opcode },
6c30d220 5376 { VEX_W_TABLE (VEX_W_0FF3_P_2) },
c0f3af97
L
5377 },
5378
592a252b 5379 /* PREFIX_VEX_0FF4 */
c0f3af97 5380 {
592d1631
L
5381 { Bad_Opcode },
5382 { Bad_Opcode },
6c30d220 5383 { VEX_W_TABLE (VEX_W_0FF4_P_2) },
c0f3af97
L
5384 },
5385
592a252b 5386 /* PREFIX_VEX_0FF5 */
c0f3af97 5387 {
592d1631
L
5388 { Bad_Opcode },
5389 { Bad_Opcode },
6c30d220 5390 { VEX_W_TABLE (VEX_W_0FF5_P_2) },
c0f3af97
L
5391 },
5392
592a252b 5393 /* PREFIX_VEX_0FF6 */
c0f3af97 5394 {
592d1631
L
5395 { Bad_Opcode },
5396 { Bad_Opcode },
6c30d220 5397 { VEX_W_TABLE (VEX_W_0FF6_P_2) },
c0f3af97
L
5398 },
5399
592a252b 5400 /* PREFIX_VEX_0FF7 */
c0f3af97 5401 {
592d1631
L
5402 { Bad_Opcode },
5403 { Bad_Opcode },
592a252b 5404 { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) },
c0f3af97
L
5405 },
5406
592a252b 5407 /* PREFIX_VEX_0FF8 */
c0f3af97 5408 {
592d1631
L
5409 { Bad_Opcode },
5410 { Bad_Opcode },
6c30d220 5411 { VEX_W_TABLE (VEX_W_0FF8_P_2) },
c0f3af97
L
5412 },
5413
592a252b 5414 /* PREFIX_VEX_0FF9 */
c0f3af97 5415 {
592d1631
L
5416 { Bad_Opcode },
5417 { Bad_Opcode },
6c30d220 5418 { VEX_W_TABLE (VEX_W_0FF9_P_2) },
c0f3af97
L
5419 },
5420
592a252b 5421 /* PREFIX_VEX_0FFA */
c0f3af97 5422 {
592d1631
L
5423 { Bad_Opcode },
5424 { Bad_Opcode },
6c30d220 5425 { VEX_W_TABLE (VEX_W_0FFA_P_2) },
c0f3af97
L
5426 },
5427
592a252b 5428 /* PREFIX_VEX_0FFB */
c0f3af97 5429 {
592d1631
L
5430 { Bad_Opcode },
5431 { Bad_Opcode },
6c30d220 5432 { VEX_W_TABLE (VEX_W_0FFB_P_2) },
c0f3af97
L
5433 },
5434
592a252b 5435 /* PREFIX_VEX_0FFC */
c0f3af97 5436 {
592d1631
L
5437 { Bad_Opcode },
5438 { Bad_Opcode },
6c30d220 5439 { VEX_W_TABLE (VEX_W_0FFC_P_2) },
c0f3af97
L
5440 },
5441
592a252b 5442 /* PREFIX_VEX_0FFD */
c0f3af97 5443 {
592d1631
L
5444 { Bad_Opcode },
5445 { Bad_Opcode },
6c30d220 5446 { VEX_W_TABLE (VEX_W_0FFD_P_2) },
c0f3af97
L
5447 },
5448
592a252b 5449 /* PREFIX_VEX_0FFE */
c0f3af97 5450 {
592d1631
L
5451 { Bad_Opcode },
5452 { Bad_Opcode },
6c30d220 5453 { VEX_W_TABLE (VEX_W_0FFE_P_2) },
c0f3af97
L
5454 },
5455
592a252b 5456 /* PREFIX_VEX_0F3800 */
c0f3af97 5457 {
592d1631
L
5458 { Bad_Opcode },
5459 { Bad_Opcode },
6c30d220 5460 { VEX_W_TABLE (VEX_W_0F3800_P_2) },
c0f3af97
L
5461 },
5462
592a252b 5463 /* PREFIX_VEX_0F3801 */
c0f3af97 5464 {
592d1631
L
5465 { Bad_Opcode },
5466 { Bad_Opcode },
6c30d220 5467 { VEX_W_TABLE (VEX_W_0F3801_P_2) },
c0f3af97
L
5468 },
5469
592a252b 5470 /* PREFIX_VEX_0F3802 */
c0f3af97 5471 {
592d1631
L
5472 { Bad_Opcode },
5473 { Bad_Opcode },
6c30d220 5474 { VEX_W_TABLE (VEX_W_0F3802_P_2) },
c0f3af97
L
5475 },
5476
592a252b 5477 /* PREFIX_VEX_0F3803 */
c0f3af97 5478 {
592d1631
L
5479 { Bad_Opcode },
5480 { Bad_Opcode },
6c30d220 5481 { VEX_W_TABLE (VEX_W_0F3803_P_2) },
c0f3af97
L
5482 },
5483
592a252b 5484 /* PREFIX_VEX_0F3804 */
c0f3af97 5485 {
592d1631
L
5486 { Bad_Opcode },
5487 { Bad_Opcode },
6c30d220 5488 { VEX_W_TABLE (VEX_W_0F3804_P_2) },
c0f3af97
L
5489 },
5490
592a252b 5491 /* PREFIX_VEX_0F3805 */
c0f3af97 5492 {
592d1631
L
5493 { Bad_Opcode },
5494 { Bad_Opcode },
6c30d220 5495 { VEX_W_TABLE (VEX_W_0F3805_P_2) },
c0f3af97
L
5496 },
5497
592a252b 5498 /* PREFIX_VEX_0F3806 */
c0f3af97 5499 {
592d1631
L
5500 { Bad_Opcode },
5501 { Bad_Opcode },
6c30d220 5502 { VEX_W_TABLE (VEX_W_0F3806_P_2) },
c0f3af97
L
5503 },
5504
592a252b 5505 /* PREFIX_VEX_0F3807 */
c0f3af97 5506 {
592d1631
L
5507 { Bad_Opcode },
5508 { Bad_Opcode },
6c30d220 5509 { VEX_W_TABLE (VEX_W_0F3807_P_2) },
c0f3af97
L
5510 },
5511
592a252b 5512 /* PREFIX_VEX_0F3808 */
c0f3af97 5513 {
592d1631
L
5514 { Bad_Opcode },
5515 { Bad_Opcode },
6c30d220 5516 { VEX_W_TABLE (VEX_W_0F3808_P_2) },
c0f3af97
L
5517 },
5518
592a252b 5519 /* PREFIX_VEX_0F3809 */
c0f3af97 5520 {
592d1631
L
5521 { Bad_Opcode },
5522 { Bad_Opcode },
6c30d220 5523 { VEX_W_TABLE (VEX_W_0F3809_P_2) },
c0f3af97
L
5524 },
5525
592a252b 5526 /* PREFIX_VEX_0F380A */
c0f3af97 5527 {
592d1631
L
5528 { Bad_Opcode },
5529 { Bad_Opcode },
6c30d220 5530 { VEX_W_TABLE (VEX_W_0F380A_P_2) },
c0f3af97
L
5531 },
5532
592a252b 5533 /* PREFIX_VEX_0F380B */
c0f3af97 5534 {
592d1631
L
5535 { Bad_Opcode },
5536 { Bad_Opcode },
6c30d220 5537 { VEX_W_TABLE (VEX_W_0F380B_P_2) },
c0f3af97
L
5538 },
5539
592a252b 5540 /* PREFIX_VEX_0F380C */
c0f3af97 5541 {
592d1631
L
5542 { Bad_Opcode },
5543 { Bad_Opcode },
592a252b 5544 { VEX_W_TABLE (VEX_W_0F380C_P_2) },
c0f3af97
L
5545 },
5546
592a252b 5547 /* PREFIX_VEX_0F380D */
c0f3af97 5548 {
592d1631
L
5549 { Bad_Opcode },
5550 { Bad_Opcode },
592a252b 5551 { VEX_W_TABLE (VEX_W_0F380D_P_2) },
c0f3af97
L
5552 },
5553
592a252b 5554 /* PREFIX_VEX_0F380E */
c0f3af97 5555 {
592d1631
L
5556 { Bad_Opcode },
5557 { Bad_Opcode },
592a252b 5558 { VEX_W_TABLE (VEX_W_0F380E_P_2) },
c0f3af97
L
5559 },
5560
592a252b 5561 /* PREFIX_VEX_0F380F */
c0f3af97 5562 {
592d1631
L
5563 { Bad_Opcode },
5564 { Bad_Opcode },
592a252b 5565 { VEX_W_TABLE (VEX_W_0F380F_P_2) },
c0f3af97
L
5566 },
5567
592a252b 5568 /* PREFIX_VEX_0F3813 */
c7b8aa3a
L
5569 {
5570 { Bad_Opcode },
5571 { Bad_Opcode },
bf890a93 5572 { "vcvtph2ps", { XM, EXxmmq }, 0 },
c7b8aa3a
L
5573 },
5574
6c30d220
L
5575 /* PREFIX_VEX_0F3816 */
5576 {
5577 { Bad_Opcode },
5578 { Bad_Opcode },
5579 { VEX_LEN_TABLE (VEX_LEN_0F3816_P_2) },
5580 },
5581
592a252b 5582 /* PREFIX_VEX_0F3817 */
c0f3af97 5583 {
592d1631
L
5584 { Bad_Opcode },
5585 { Bad_Opcode },
592a252b 5586 { VEX_W_TABLE (VEX_W_0F3817_P_2) },
c0f3af97
L
5587 },
5588
592a252b 5589 /* PREFIX_VEX_0F3818 */
c0f3af97 5590 {
592d1631
L
5591 { Bad_Opcode },
5592 { Bad_Opcode },
6c30d220 5593 { VEX_W_TABLE (VEX_W_0F3818_P_2) },
c0f3af97
L
5594 },
5595
592a252b 5596 /* PREFIX_VEX_0F3819 */
c0f3af97 5597 {
592d1631
L
5598 { Bad_Opcode },
5599 { Bad_Opcode },
6c30d220 5600 { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2) },
c0f3af97
L
5601 },
5602
592a252b 5603 /* PREFIX_VEX_0F381A */
c0f3af97 5604 {
592d1631
L
5605 { Bad_Opcode },
5606 { Bad_Opcode },
592a252b 5607 { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) },
c0f3af97
L
5608 },
5609
592a252b 5610 /* PREFIX_VEX_0F381C */
c0f3af97 5611 {
592d1631
L
5612 { Bad_Opcode },
5613 { Bad_Opcode },
6c30d220 5614 { VEX_W_TABLE (VEX_W_0F381C_P_2) },
c0f3af97
L
5615 },
5616
592a252b 5617 /* PREFIX_VEX_0F381D */
c0f3af97 5618 {
592d1631
L
5619 { Bad_Opcode },
5620 { Bad_Opcode },
6c30d220 5621 { VEX_W_TABLE (VEX_W_0F381D_P_2) },
c0f3af97
L
5622 },
5623
592a252b 5624 /* PREFIX_VEX_0F381E */
c0f3af97 5625 {
592d1631
L
5626 { Bad_Opcode },
5627 { Bad_Opcode },
6c30d220 5628 { VEX_W_TABLE (VEX_W_0F381E_P_2) },
c0f3af97
L
5629 },
5630
592a252b 5631 /* PREFIX_VEX_0F3820 */
c0f3af97 5632 {
592d1631
L
5633 { Bad_Opcode },
5634 { Bad_Opcode },
6c30d220 5635 { VEX_W_TABLE (VEX_W_0F3820_P_2) },
c0f3af97
L
5636 },
5637
592a252b 5638 /* PREFIX_VEX_0F3821 */
c0f3af97 5639 {
592d1631
L
5640 { Bad_Opcode },
5641 { Bad_Opcode },
6c30d220 5642 { VEX_W_TABLE (VEX_W_0F3821_P_2) },
c0f3af97
L
5643 },
5644
592a252b 5645 /* PREFIX_VEX_0F3822 */
c0f3af97 5646 {
592d1631
L
5647 { Bad_Opcode },
5648 { Bad_Opcode },
6c30d220 5649 { VEX_W_TABLE (VEX_W_0F3822_P_2) },
c0f3af97
L
5650 },
5651
592a252b 5652 /* PREFIX_VEX_0F3823 */
c0f3af97 5653 {
592d1631
L
5654 { Bad_Opcode },
5655 { Bad_Opcode },
6c30d220 5656 { VEX_W_TABLE (VEX_W_0F3823_P_2) },
c0f3af97
L
5657 },
5658
592a252b 5659 /* PREFIX_VEX_0F3824 */
c0f3af97 5660 {
592d1631
L
5661 { Bad_Opcode },
5662 { Bad_Opcode },
6c30d220 5663 { VEX_W_TABLE (VEX_W_0F3824_P_2) },
c0f3af97
L
5664 },
5665
592a252b 5666 /* PREFIX_VEX_0F3825 */
c0f3af97 5667 {
592d1631
L
5668 { Bad_Opcode },
5669 { Bad_Opcode },
6c30d220 5670 { VEX_W_TABLE (VEX_W_0F3825_P_2) },
c0f3af97
L
5671 },
5672
592a252b 5673 /* PREFIX_VEX_0F3828 */
c0f3af97 5674 {
592d1631
L
5675 { Bad_Opcode },
5676 { Bad_Opcode },
6c30d220 5677 { VEX_W_TABLE (VEX_W_0F3828_P_2) },
c0f3af97
L
5678 },
5679
592a252b 5680 /* PREFIX_VEX_0F3829 */
c0f3af97 5681 {
592d1631
L
5682 { Bad_Opcode },
5683 { Bad_Opcode },
6c30d220 5684 { VEX_W_TABLE (VEX_W_0F3829_P_2) },
c0f3af97
L
5685 },
5686
592a252b 5687 /* PREFIX_VEX_0F382A */
c0f3af97 5688 {
592d1631
L
5689 { Bad_Opcode },
5690 { Bad_Opcode },
592a252b 5691 { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) },
c0f3af97
L
5692 },
5693
592a252b 5694 /* PREFIX_VEX_0F382B */
c0f3af97 5695 {
592d1631
L
5696 { Bad_Opcode },
5697 { Bad_Opcode },
6c30d220 5698 { VEX_W_TABLE (VEX_W_0F382B_P_2) },
c0f3af97
L
5699 },
5700
592a252b 5701 /* PREFIX_VEX_0F382C */
c0f3af97 5702 {
592d1631
L
5703 { Bad_Opcode },
5704 { Bad_Opcode },
592a252b 5705 { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) },
c0f3af97
L
5706 },
5707
592a252b 5708 /* PREFIX_VEX_0F382D */
c0f3af97 5709 {
592d1631
L
5710 { Bad_Opcode },
5711 { Bad_Opcode },
592a252b 5712 { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) },
c0f3af97
L
5713 },
5714
592a252b 5715 /* PREFIX_VEX_0F382E */
c0f3af97 5716 {
592d1631
L
5717 { Bad_Opcode },
5718 { Bad_Opcode },
592a252b 5719 { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) },
c0f3af97
L
5720 },
5721
592a252b 5722 /* PREFIX_VEX_0F382F */
c0f3af97 5723 {
592d1631
L
5724 { Bad_Opcode },
5725 { Bad_Opcode },
592a252b 5726 { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) },
c0f3af97
L
5727 },
5728
592a252b 5729 /* PREFIX_VEX_0F3830 */
c0f3af97 5730 {
592d1631
L
5731 { Bad_Opcode },
5732 { Bad_Opcode },
6c30d220 5733 { VEX_W_TABLE (VEX_W_0F3830_P_2) },
c0f3af97
L
5734 },
5735
592a252b 5736 /* PREFIX_VEX_0F3831 */
c0f3af97 5737 {
592d1631
L
5738 { Bad_Opcode },
5739 { Bad_Opcode },
6c30d220 5740 { VEX_W_TABLE (VEX_W_0F3831_P_2) },
c0f3af97
L
5741 },
5742
592a252b 5743 /* PREFIX_VEX_0F3832 */
c0f3af97 5744 {
592d1631
L
5745 { Bad_Opcode },
5746 { Bad_Opcode },
6c30d220 5747 { VEX_W_TABLE (VEX_W_0F3832_P_2) },
c0f3af97
L
5748 },
5749
592a252b 5750 /* PREFIX_VEX_0F3833 */
c0f3af97 5751 {
592d1631
L
5752 { Bad_Opcode },
5753 { Bad_Opcode },
6c30d220 5754 { VEX_W_TABLE (VEX_W_0F3833_P_2) },
c0f3af97
L
5755 },
5756
592a252b 5757 /* PREFIX_VEX_0F3834 */
c0f3af97 5758 {
592d1631
L
5759 { Bad_Opcode },
5760 { Bad_Opcode },
6c30d220 5761 { VEX_W_TABLE (VEX_W_0F3834_P_2) },
c0f3af97
L
5762 },
5763
592a252b 5764 /* PREFIX_VEX_0F3835 */
c0f3af97 5765 {
592d1631
L
5766 { Bad_Opcode },
5767 { Bad_Opcode },
6c30d220
L
5768 { VEX_W_TABLE (VEX_W_0F3835_P_2) },
5769 },
5770
5771 /* PREFIX_VEX_0F3836 */
5772 {
5773 { Bad_Opcode },
5774 { Bad_Opcode },
5775 { VEX_LEN_TABLE (VEX_LEN_0F3836_P_2) },
c0f3af97
L
5776 },
5777
592a252b 5778 /* PREFIX_VEX_0F3837 */
c0f3af97 5779 {
592d1631
L
5780 { Bad_Opcode },
5781 { Bad_Opcode },
6c30d220 5782 { VEX_W_TABLE (VEX_W_0F3837_P_2) },
c0f3af97
L
5783 },
5784
592a252b 5785 /* PREFIX_VEX_0F3838 */
c0f3af97 5786 {
592d1631
L
5787 { Bad_Opcode },
5788 { Bad_Opcode },
6c30d220 5789 { VEX_W_TABLE (VEX_W_0F3838_P_2) },
c0f3af97
L
5790 },
5791
592a252b 5792 /* PREFIX_VEX_0F3839 */
c0f3af97 5793 {
592d1631
L
5794 { Bad_Opcode },
5795 { Bad_Opcode },
6c30d220 5796 { VEX_W_TABLE (VEX_W_0F3839_P_2) },
c0f3af97
L
5797 },
5798
592a252b 5799 /* PREFIX_VEX_0F383A */
c0f3af97 5800 {
592d1631
L
5801 { Bad_Opcode },
5802 { Bad_Opcode },
6c30d220 5803 { VEX_W_TABLE (VEX_W_0F383A_P_2) },
c0f3af97
L
5804 },
5805
592a252b 5806 /* PREFIX_VEX_0F383B */
c0f3af97 5807 {
592d1631
L
5808 { Bad_Opcode },
5809 { Bad_Opcode },
6c30d220 5810 { VEX_W_TABLE (VEX_W_0F383B_P_2) },
c0f3af97
L
5811 },
5812
592a252b 5813 /* PREFIX_VEX_0F383C */
c0f3af97 5814 {
592d1631
L
5815 { Bad_Opcode },
5816 { Bad_Opcode },
6c30d220 5817 { VEX_W_TABLE (VEX_W_0F383C_P_2) },
c0f3af97
L
5818 },
5819
592a252b 5820 /* PREFIX_VEX_0F383D */
c0f3af97 5821 {
592d1631
L
5822 { Bad_Opcode },
5823 { Bad_Opcode },
6c30d220 5824 { VEX_W_TABLE (VEX_W_0F383D_P_2) },
c0f3af97
L
5825 },
5826
592a252b 5827 /* PREFIX_VEX_0F383E */
c0f3af97 5828 {
592d1631
L
5829 { Bad_Opcode },
5830 { Bad_Opcode },
6c30d220 5831 { VEX_W_TABLE (VEX_W_0F383E_P_2) },
c0f3af97
L
5832 },
5833
592a252b 5834 /* PREFIX_VEX_0F383F */
c0f3af97 5835 {
592d1631
L
5836 { Bad_Opcode },
5837 { Bad_Opcode },
6c30d220 5838 { VEX_W_TABLE (VEX_W_0F383F_P_2) },
c0f3af97
L
5839 },
5840
592a252b 5841 /* PREFIX_VEX_0F3840 */
c0f3af97 5842 {
592d1631
L
5843 { Bad_Opcode },
5844 { Bad_Opcode },
6c30d220 5845 { VEX_W_TABLE (VEX_W_0F3840_P_2) },
c0f3af97
L
5846 },
5847
592a252b 5848 /* PREFIX_VEX_0F3841 */
c0f3af97 5849 {
592d1631
L
5850 { Bad_Opcode },
5851 { Bad_Opcode },
592a252b 5852 { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) },
c0f3af97
L
5853 },
5854
6c30d220
L
5855 /* PREFIX_VEX_0F3845 */
5856 {
5857 { Bad_Opcode },
5858 { Bad_Opcode },
bf890a93 5859 { "vpsrlv%LW", { XM, Vex, EXx }, 0 },
6c30d220
L
5860 },
5861
5862 /* PREFIX_VEX_0F3846 */
5863 {
5864 { Bad_Opcode },
5865 { Bad_Opcode },
5866 { VEX_W_TABLE (VEX_W_0F3846_P_2) },
5867 },
5868
5869 /* PREFIX_VEX_0F3847 */
5870 {
5871 { Bad_Opcode },
5872 { Bad_Opcode },
bf890a93 5873 { "vpsllv%LW", { XM, Vex, EXx }, 0 },
6c30d220
L
5874 },
5875
5876 /* PREFIX_VEX_0F3858 */
5877 {
5878 { Bad_Opcode },
5879 { Bad_Opcode },
5880 { VEX_W_TABLE (VEX_W_0F3858_P_2) },
5881 },
5882
5883 /* PREFIX_VEX_0F3859 */
5884 {
5885 { Bad_Opcode },
5886 { Bad_Opcode },
5887 { VEX_W_TABLE (VEX_W_0F3859_P_2) },
5888 },
5889
5890 /* PREFIX_VEX_0F385A */
5891 {
5892 { Bad_Opcode },
5893 { Bad_Opcode },
5894 { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) },
5895 },
5896
5897 /* PREFIX_VEX_0F3878 */
5898 {
5899 { Bad_Opcode },
5900 { Bad_Opcode },
5901 { VEX_W_TABLE (VEX_W_0F3878_P_2) },
5902 },
5903
5904 /* PREFIX_VEX_0F3879 */
5905 {
5906 { Bad_Opcode },
5907 { Bad_Opcode },
5908 { VEX_W_TABLE (VEX_W_0F3879_P_2) },
5909 },
5910
5911 /* PREFIX_VEX_0F388C */
5912 {
5913 { Bad_Opcode },
5914 { Bad_Opcode },
f7002f42 5915 { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) },
6c30d220
L
5916 },
5917
5918 /* PREFIX_VEX_0F388E */
5919 {
5920 { Bad_Opcode },
5921 { Bad_Opcode },
f7002f42 5922 { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) },
6c30d220
L
5923 },
5924
5925 /* PREFIX_VEX_0F3890 */
5926 {
5927 { Bad_Opcode },
5928 { Bad_Opcode },
bf890a93 5929 { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
5930 },
5931
5932 /* PREFIX_VEX_0F3891 */
5933 {
5934 { Bad_Opcode },
5935 { Bad_Opcode },
bf890a93 5936 { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
5937 },
5938
5939 /* PREFIX_VEX_0F3892 */
5940 {
5941 { Bad_Opcode },
5942 { Bad_Opcode },
bf890a93 5943 { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
5944 },
5945
5946 /* PREFIX_VEX_0F3893 */
5947 {
5948 { Bad_Opcode },
5949 { Bad_Opcode },
bf890a93 5950 { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
5951 },
5952
592a252b 5953 /* PREFIX_VEX_0F3896 */
a5ff0eb2 5954 {
592d1631
L
5955 { Bad_Opcode },
5956 { Bad_Opcode },
bf890a93 5957 { "vfmaddsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
5958 },
5959
592a252b 5960 /* PREFIX_VEX_0F3897 */
a5ff0eb2 5961 {
592d1631
L
5962 { Bad_Opcode },
5963 { Bad_Opcode },
bf890a93 5964 { "vfmsubadd132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
5965 },
5966
592a252b 5967 /* PREFIX_VEX_0F3898 */
a5ff0eb2 5968 {
592d1631
L
5969 { Bad_Opcode },
5970 { Bad_Opcode },
bf890a93 5971 { "vfmadd132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
5972 },
5973
592a252b 5974 /* PREFIX_VEX_0F3899 */
a5ff0eb2 5975 {
592d1631
L
5976 { Bad_Opcode },
5977 { Bad_Opcode },
bf890a93 5978 { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
a5ff0eb2
L
5979 },
5980
592a252b 5981 /* PREFIX_VEX_0F389A */
a5ff0eb2 5982 {
592d1631
L
5983 { Bad_Opcode },
5984 { Bad_Opcode },
bf890a93 5985 { "vfmsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
5986 },
5987
592a252b 5988 /* PREFIX_VEX_0F389B */
c0f3af97 5989 {
592d1631
L
5990 { Bad_Opcode },
5991 { Bad_Opcode },
bf890a93 5992 { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
5993 },
5994
592a252b 5995 /* PREFIX_VEX_0F389C */
c0f3af97 5996 {
592d1631
L
5997 { Bad_Opcode },
5998 { Bad_Opcode },
bf890a93 5999 { "vfnmadd132p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6000 },
6001
592a252b 6002 /* PREFIX_VEX_0F389D */
c0f3af97 6003 {
592d1631
L
6004 { Bad_Opcode },
6005 { Bad_Opcode },
bf890a93 6006 { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6007 },
6008
592a252b 6009 /* PREFIX_VEX_0F389E */
c0f3af97 6010 {
592d1631
L
6011 { Bad_Opcode },
6012 { Bad_Opcode },
bf890a93 6013 { "vfnmsub132p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6014 },
6015
592a252b 6016 /* PREFIX_VEX_0F389F */
c0f3af97 6017 {
592d1631
L
6018 { Bad_Opcode },
6019 { Bad_Opcode },
bf890a93 6020 { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6021 },
6022
592a252b 6023 /* PREFIX_VEX_0F38A6 */
c0f3af97 6024 {
592d1631
L
6025 { Bad_Opcode },
6026 { Bad_Opcode },
bf890a93 6027 { "vfmaddsub213p%XW", { XM, Vex, EXx }, 0 },
592d1631 6028 { Bad_Opcode },
c0f3af97
L
6029 },
6030
592a252b 6031 /* PREFIX_VEX_0F38A7 */
c0f3af97 6032 {
592d1631
L
6033 { Bad_Opcode },
6034 { Bad_Opcode },
bf890a93 6035 { "vfmsubadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6036 },
6037
592a252b 6038 /* PREFIX_VEX_0F38A8 */
c0f3af97 6039 {
592d1631
L
6040 { Bad_Opcode },
6041 { Bad_Opcode },
bf890a93 6042 { "vfmadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6043 },
6044
592a252b 6045 /* PREFIX_VEX_0F38A9 */
c0f3af97 6046 {
592d1631
L
6047 { Bad_Opcode },
6048 { Bad_Opcode },
bf890a93 6049 { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6050 },
6051
592a252b 6052 /* PREFIX_VEX_0F38AA */
c0f3af97 6053 {
592d1631
L
6054 { Bad_Opcode },
6055 { Bad_Opcode },
bf890a93 6056 { "vfmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6057 },
6058
592a252b 6059 /* PREFIX_VEX_0F38AB */
c0f3af97 6060 {
592d1631
L
6061 { Bad_Opcode },
6062 { Bad_Opcode },
bf890a93 6063 { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6064 },
6065
592a252b 6066 /* PREFIX_VEX_0F38AC */
c0f3af97 6067 {
592d1631
L
6068 { Bad_Opcode },
6069 { Bad_Opcode },
bf890a93 6070 { "vfnmadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6071 },
6072
592a252b 6073 /* PREFIX_VEX_0F38AD */
c0f3af97 6074 {
592d1631
L
6075 { Bad_Opcode },
6076 { Bad_Opcode },
bf890a93 6077 { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6078 },
6079
592a252b 6080 /* PREFIX_VEX_0F38AE */
c0f3af97 6081 {
592d1631
L
6082 { Bad_Opcode },
6083 { Bad_Opcode },
bf890a93 6084 { "vfnmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6085 },
6086
592a252b 6087 /* PREFIX_VEX_0F38AF */
c0f3af97 6088 {
592d1631
L
6089 { Bad_Opcode },
6090 { Bad_Opcode },
bf890a93 6091 { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6092 },
6093
592a252b 6094 /* PREFIX_VEX_0F38B6 */
c0f3af97 6095 {
592d1631
L
6096 { Bad_Opcode },
6097 { Bad_Opcode },
bf890a93 6098 { "vfmaddsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6099 },
6100
592a252b 6101 /* PREFIX_VEX_0F38B7 */
c0f3af97 6102 {
592d1631
L
6103 { Bad_Opcode },
6104 { Bad_Opcode },
bf890a93 6105 { "vfmsubadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6106 },
6107
592a252b 6108 /* PREFIX_VEX_0F38B8 */
c0f3af97 6109 {
592d1631
L
6110 { Bad_Opcode },
6111 { Bad_Opcode },
bf890a93 6112 { "vfmadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6113 },
6114
592a252b 6115 /* PREFIX_VEX_0F38B9 */
c0f3af97 6116 {
592d1631
L
6117 { Bad_Opcode },
6118 { Bad_Opcode },
bf890a93 6119 { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6120 },
6121
592a252b 6122 /* PREFIX_VEX_0F38BA */
c0f3af97 6123 {
592d1631
L
6124 { Bad_Opcode },
6125 { Bad_Opcode },
bf890a93 6126 { "vfmsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6127 },
6128
592a252b 6129 /* PREFIX_VEX_0F38BB */
c0f3af97 6130 {
592d1631
L
6131 { Bad_Opcode },
6132 { Bad_Opcode },
bf890a93 6133 { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6134 },
6135
592a252b 6136 /* PREFIX_VEX_0F38BC */
c0f3af97 6137 {
592d1631
L
6138 { Bad_Opcode },
6139 { Bad_Opcode },
bf890a93 6140 { "vfnmadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6141 },
6142
592a252b 6143 /* PREFIX_VEX_0F38BD */
c0f3af97 6144 {
592d1631
L
6145 { Bad_Opcode },
6146 { Bad_Opcode },
bf890a93 6147 { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6148 },
6149
592a252b 6150 /* PREFIX_VEX_0F38BE */
c0f3af97 6151 {
592d1631
L
6152 { Bad_Opcode },
6153 { Bad_Opcode },
bf890a93 6154 { "vfnmsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6155 },
6156
592a252b 6157 /* PREFIX_VEX_0F38BF */
c0f3af97 6158 {
592d1631
L
6159 { Bad_Opcode },
6160 { Bad_Opcode },
bf890a93 6161 { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6162 },
6163
592a252b 6164 /* PREFIX_VEX_0F38DB */
c0f3af97 6165 {
592d1631
L
6166 { Bad_Opcode },
6167 { Bad_Opcode },
592a252b 6168 { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
c0f3af97
L
6169 },
6170
592a252b 6171 /* PREFIX_VEX_0F38DC */
c0f3af97 6172 {
592d1631
L
6173 { Bad_Opcode },
6174 { Bad_Opcode },
592a252b 6175 { VEX_LEN_TABLE (VEX_LEN_0F38DC_P_2) },
c0f3af97
L
6176 },
6177
592a252b 6178 /* PREFIX_VEX_0F38DD */
c0f3af97 6179 {
592d1631
L
6180 { Bad_Opcode },
6181 { Bad_Opcode },
592a252b 6182 { VEX_LEN_TABLE (VEX_LEN_0F38DD_P_2) },
c0f3af97
L
6183 },
6184
592a252b 6185 /* PREFIX_VEX_0F38DE */
c0f3af97 6186 {
592d1631
L
6187 { Bad_Opcode },
6188 { Bad_Opcode },
592a252b 6189 { VEX_LEN_TABLE (VEX_LEN_0F38DE_P_2) },
c0f3af97
L
6190 },
6191
592a252b 6192 /* PREFIX_VEX_0F38DF */
c0f3af97 6193 {
592d1631
L
6194 { Bad_Opcode },
6195 { Bad_Opcode },
592a252b 6196 { VEX_LEN_TABLE (VEX_LEN_0F38DF_P_2) },
c0f3af97
L
6197 },
6198
f12dc422
L
6199 /* PREFIX_VEX_0F38F2 */
6200 {
6201 { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
6202 },
6203
6204 /* PREFIX_VEX_0F38F3_REG_1 */
6205 {
6206 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
6207 },
6208
6209 /* PREFIX_VEX_0F38F3_REG_2 */
6210 {
6211 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
6212 },
6213
6214 /* PREFIX_VEX_0F38F3_REG_3 */
6215 {
6216 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
6217 },
6218
6c30d220
L
6219 /* PREFIX_VEX_0F38F5 */
6220 {
6221 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) },
6222 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) },
6223 { Bad_Opcode },
6224 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) },
6225 },
6226
6227 /* PREFIX_VEX_0F38F6 */
6228 {
6229 { Bad_Opcode },
6230 { Bad_Opcode },
6231 { Bad_Opcode },
6232 { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) },
6233 },
6234
f12dc422
L
6235 /* PREFIX_VEX_0F38F7 */
6236 {
6237 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
6c30d220
L
6238 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) },
6239 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) },
6240 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) },
6241 },
6242
6243 /* PREFIX_VEX_0F3A00 */
6244 {
6245 { Bad_Opcode },
6246 { Bad_Opcode },
6247 { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) },
6248 },
6249
6250 /* PREFIX_VEX_0F3A01 */
6251 {
6252 { Bad_Opcode },
6253 { Bad_Opcode },
6254 { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) },
6255 },
6256
6257 /* PREFIX_VEX_0F3A02 */
6258 {
6259 { Bad_Opcode },
6260 { Bad_Opcode },
6261 { VEX_W_TABLE (VEX_W_0F3A02_P_2) },
f12dc422
L
6262 },
6263
592a252b 6264 /* PREFIX_VEX_0F3A04 */
c0f3af97 6265 {
592d1631
L
6266 { Bad_Opcode },
6267 { Bad_Opcode },
592a252b 6268 { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
c0f3af97
L
6269 },
6270
592a252b 6271 /* PREFIX_VEX_0F3A05 */
c0f3af97 6272 {
592d1631
L
6273 { Bad_Opcode },
6274 { Bad_Opcode },
592a252b 6275 { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
c0f3af97
L
6276 },
6277
592a252b 6278 /* PREFIX_VEX_0F3A06 */
c0f3af97 6279 {
592d1631
L
6280 { Bad_Opcode },
6281 { Bad_Opcode },
592a252b 6282 { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
c0f3af97
L
6283 },
6284
592a252b 6285 /* PREFIX_VEX_0F3A08 */
c0f3af97 6286 {
592d1631
L
6287 { Bad_Opcode },
6288 { Bad_Opcode },
592a252b 6289 { VEX_W_TABLE (VEX_W_0F3A08_P_2) },
c0f3af97
L
6290 },
6291
592a252b 6292 /* PREFIX_VEX_0F3A09 */
c0f3af97 6293 {
592d1631
L
6294 { Bad_Opcode },
6295 { Bad_Opcode },
592a252b 6296 { VEX_W_TABLE (VEX_W_0F3A09_P_2) },
c0f3af97
L
6297 },
6298
592a252b 6299 /* PREFIX_VEX_0F3A0A */
c0f3af97 6300 {
592d1631
L
6301 { Bad_Opcode },
6302 { Bad_Opcode },
592a252b 6303 { VEX_LEN_TABLE (VEX_LEN_0F3A0A_P_2) },
0bfee649
L
6304 },
6305
592a252b 6306 /* PREFIX_VEX_0F3A0B */
0bfee649 6307 {
592d1631
L
6308 { Bad_Opcode },
6309 { Bad_Opcode },
592a252b 6310 { VEX_LEN_TABLE (VEX_LEN_0F3A0B_P_2) },
0bfee649
L
6311 },
6312
592a252b 6313 /* PREFIX_VEX_0F3A0C */
0bfee649 6314 {
592d1631
L
6315 { Bad_Opcode },
6316 { Bad_Opcode },
592a252b 6317 { VEX_W_TABLE (VEX_W_0F3A0C_P_2) },
0bfee649
L
6318 },
6319
592a252b 6320 /* PREFIX_VEX_0F3A0D */
0bfee649 6321 {
592d1631
L
6322 { Bad_Opcode },
6323 { Bad_Opcode },
592a252b 6324 { VEX_W_TABLE (VEX_W_0F3A0D_P_2) },
c0f3af97
L
6325 },
6326
592a252b 6327 /* PREFIX_VEX_0F3A0E */
0bfee649 6328 {
592d1631
L
6329 { Bad_Opcode },
6330 { Bad_Opcode },
6c30d220 6331 { VEX_W_TABLE (VEX_W_0F3A0E_P_2) },
0bfee649
L
6332 },
6333
592a252b 6334 /* PREFIX_VEX_0F3A0F */
0bfee649 6335 {
592d1631
L
6336 { Bad_Opcode },
6337 { Bad_Opcode },
6c30d220 6338 { VEX_W_TABLE (VEX_W_0F3A0F_P_2) },
0bfee649
L
6339 },
6340
592a252b 6341 /* PREFIX_VEX_0F3A14 */
0bfee649 6342 {
592d1631
L
6343 { Bad_Opcode },
6344 { Bad_Opcode },
592a252b 6345 { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
0bfee649
L
6346 },
6347
592a252b 6348 /* PREFIX_VEX_0F3A15 */
0bfee649 6349 {
592d1631
L
6350 { Bad_Opcode },
6351 { Bad_Opcode },
592a252b 6352 { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
0bfee649
L
6353 },
6354
592a252b 6355 /* PREFIX_VEX_0F3A16 */
c0f3af97 6356 {
592d1631
L
6357 { Bad_Opcode },
6358 { Bad_Opcode },
592a252b 6359 { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
c0f3af97
L
6360 },
6361
592a252b 6362 /* PREFIX_VEX_0F3A17 */
c0f3af97 6363 {
592d1631
L
6364 { Bad_Opcode },
6365 { Bad_Opcode },
592a252b 6366 { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
c0f3af97
L
6367 },
6368
592a252b 6369 /* PREFIX_VEX_0F3A18 */
c0f3af97 6370 {
592d1631
L
6371 { Bad_Opcode },
6372 { Bad_Opcode },
592a252b 6373 { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
c0f3af97
L
6374 },
6375
592a252b 6376 /* PREFIX_VEX_0F3A19 */
c0f3af97 6377 {
592d1631
L
6378 { Bad_Opcode },
6379 { Bad_Opcode },
592a252b 6380 { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
c0f3af97
L
6381 },
6382
592a252b 6383 /* PREFIX_VEX_0F3A1D */
c7b8aa3a
L
6384 {
6385 { Bad_Opcode },
6386 { Bad_Opcode },
bf890a93 6387 { "vcvtps2ph", { EXxmmq, XM, Ib }, 0 },
c7b8aa3a
L
6388 },
6389
592a252b 6390 /* PREFIX_VEX_0F3A20 */
c0f3af97 6391 {
592d1631
L
6392 { Bad_Opcode },
6393 { Bad_Opcode },
592a252b 6394 { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
c0f3af97
L
6395 },
6396
592a252b 6397 /* PREFIX_VEX_0F3A21 */
c0f3af97 6398 {
592d1631
L
6399 { Bad_Opcode },
6400 { Bad_Opcode },
592a252b 6401 { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
c0f3af97
L
6402 },
6403
592a252b 6404 /* PREFIX_VEX_0F3A22 */
0bfee649 6405 {
592d1631
L
6406 { Bad_Opcode },
6407 { Bad_Opcode },
592a252b 6408 { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
0bfee649
L
6409 },
6410
43234a1e
L
6411 /* PREFIX_VEX_0F3A30 */
6412 {
6413 { Bad_Opcode },
6414 { Bad_Opcode },
6415 { VEX_LEN_TABLE (VEX_LEN_0F3A30_P_2) },
6416 },
6417
1ba585e8
IT
6418 /* PREFIX_VEX_0F3A31 */
6419 {
6420 { Bad_Opcode },
6421 { Bad_Opcode },
6422 { VEX_LEN_TABLE (VEX_LEN_0F3A31_P_2) },
6423 },
6424
43234a1e
L
6425 /* PREFIX_VEX_0F3A32 */
6426 {
6427 { Bad_Opcode },
6428 { Bad_Opcode },
6429 { VEX_LEN_TABLE (VEX_LEN_0F3A32_P_2) },
6430 },
6431
1ba585e8
IT
6432 /* PREFIX_VEX_0F3A33 */
6433 {
6434 { Bad_Opcode },
6435 { Bad_Opcode },
6436 { VEX_LEN_TABLE (VEX_LEN_0F3A33_P_2) },
6437 },
6438
6c30d220
L
6439 /* PREFIX_VEX_0F3A38 */
6440 {
6441 { Bad_Opcode },
6442 { Bad_Opcode },
6443 { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) },
6444 },
6445
6446 /* PREFIX_VEX_0F3A39 */
6447 {
6448 { Bad_Opcode },
6449 { Bad_Opcode },
6450 { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) },
6451 },
6452
592a252b 6453 /* PREFIX_VEX_0F3A40 */
c0f3af97 6454 {
592d1631
L
6455 { Bad_Opcode },
6456 { Bad_Opcode },
592a252b 6457 { VEX_W_TABLE (VEX_W_0F3A40_P_2) },
c0f3af97
L
6458 },
6459
592a252b 6460 /* PREFIX_VEX_0F3A41 */
c0f3af97 6461 {
592d1631
L
6462 { Bad_Opcode },
6463 { Bad_Opcode },
592a252b 6464 { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
c0f3af97
L
6465 },
6466
592a252b 6467 /* PREFIX_VEX_0F3A42 */
c0f3af97 6468 {
592d1631
L
6469 { Bad_Opcode },
6470 { Bad_Opcode },
6c30d220 6471 { VEX_W_TABLE (VEX_W_0F3A42_P_2) },
c0f3af97
L
6472 },
6473
592a252b 6474 /* PREFIX_VEX_0F3A44 */
ce2f5b3c 6475 {
592d1631
L
6476 { Bad_Opcode },
6477 { Bad_Opcode },
592a252b 6478 { VEX_LEN_TABLE (VEX_LEN_0F3A44_P_2) },
ce2f5b3c
L
6479 },
6480
6c30d220
L
6481 /* PREFIX_VEX_0F3A46 */
6482 {
6483 { Bad_Opcode },
6484 { Bad_Opcode },
6485 { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) },
6486 },
6487
592a252b 6488 /* PREFIX_VEX_0F3A48 */
a683cc34
SP
6489 {
6490 { Bad_Opcode },
6491 { Bad_Opcode },
592a252b 6492 { VEX_W_TABLE (VEX_W_0F3A48_P_2) },
a683cc34
SP
6493 },
6494
592a252b 6495 /* PREFIX_VEX_0F3A49 */
a683cc34
SP
6496 {
6497 { Bad_Opcode },
6498 { Bad_Opcode },
592a252b 6499 { VEX_W_TABLE (VEX_W_0F3A49_P_2) },
a683cc34
SP
6500 },
6501
592a252b 6502 /* PREFIX_VEX_0F3A4A */
c0f3af97 6503 {
592d1631
L
6504 { Bad_Opcode },
6505 { Bad_Opcode },
592a252b 6506 { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
c0f3af97
L
6507 },
6508
592a252b 6509 /* PREFIX_VEX_0F3A4B */
c0f3af97 6510 {
592d1631
L
6511 { Bad_Opcode },
6512 { Bad_Opcode },
592a252b 6513 { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
c0f3af97
L
6514 },
6515
592a252b 6516 /* PREFIX_VEX_0F3A4C */
c0f3af97 6517 {
592d1631
L
6518 { Bad_Opcode },
6519 { Bad_Opcode },
6c30d220 6520 { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
c0f3af97
L
6521 },
6522
592a252b 6523 /* PREFIX_VEX_0F3A5C */
922d8de8 6524 {
592d1631
L
6525 { Bad_Opcode },
6526 { Bad_Opcode },
bf890a93 6527 { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6528 },
6529
592a252b 6530 /* PREFIX_VEX_0F3A5D */
922d8de8 6531 {
592d1631
L
6532 { Bad_Opcode },
6533 { Bad_Opcode },
bf890a93 6534 { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6535 },
6536
592a252b 6537 /* PREFIX_VEX_0F3A5E */
922d8de8 6538 {
592d1631
L
6539 { Bad_Opcode },
6540 { Bad_Opcode },
bf890a93 6541 { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6542 },
6543
592a252b 6544 /* PREFIX_VEX_0F3A5F */
922d8de8 6545 {
592d1631
L
6546 { Bad_Opcode },
6547 { Bad_Opcode },
bf890a93 6548 { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6549 },
6550
592a252b 6551 /* PREFIX_VEX_0F3A60 */
c0f3af97 6552 {
592d1631
L
6553 { Bad_Opcode },
6554 { Bad_Opcode },
592a252b 6555 { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
592d1631 6556 { Bad_Opcode },
c0f3af97
L
6557 },
6558
592a252b 6559 /* PREFIX_VEX_0F3A61 */
c0f3af97 6560 {
592d1631
L
6561 { Bad_Opcode },
6562 { Bad_Opcode },
592a252b 6563 { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
c0f3af97
L
6564 },
6565
592a252b 6566 /* PREFIX_VEX_0F3A62 */
c0f3af97 6567 {
592d1631
L
6568 { Bad_Opcode },
6569 { Bad_Opcode },
592a252b 6570 { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
c0f3af97
L
6571 },
6572
592a252b 6573 /* PREFIX_VEX_0F3A63 */
c0f3af97 6574 {
592d1631
L
6575 { Bad_Opcode },
6576 { Bad_Opcode },
592a252b 6577 { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
c0f3af97 6578 },
a5ff0eb2 6579
592a252b 6580 /* PREFIX_VEX_0F3A68 */
922d8de8 6581 {
592d1631
L
6582 { Bad_Opcode },
6583 { Bad_Opcode },
bf890a93 6584 { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6585 },
6586
592a252b 6587 /* PREFIX_VEX_0F3A69 */
922d8de8 6588 {
592d1631
L
6589 { Bad_Opcode },
6590 { Bad_Opcode },
bf890a93 6591 { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6592 },
6593
592a252b 6594 /* PREFIX_VEX_0F3A6A */
922d8de8 6595 {
592d1631
L
6596 { Bad_Opcode },
6597 { Bad_Opcode },
592a252b 6598 { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) },
922d8de8
DR
6599 },
6600
592a252b 6601 /* PREFIX_VEX_0F3A6B */
922d8de8 6602 {
592d1631
L
6603 { Bad_Opcode },
6604 { Bad_Opcode },
592a252b 6605 { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) },
922d8de8
DR
6606 },
6607
592a252b 6608 /* PREFIX_VEX_0F3A6C */
922d8de8 6609 {
592d1631
L
6610 { Bad_Opcode },
6611 { Bad_Opcode },
bf890a93 6612 { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6613 },
6614
592a252b 6615 /* PREFIX_VEX_0F3A6D */
922d8de8 6616 {
592d1631
L
6617 { Bad_Opcode },
6618 { Bad_Opcode },
bf890a93 6619 { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6620 },
6621
592a252b 6622 /* PREFIX_VEX_0F3A6E */
922d8de8 6623 {
592d1631
L
6624 { Bad_Opcode },
6625 { Bad_Opcode },
592a252b 6626 { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) },
922d8de8
DR
6627 },
6628
592a252b 6629 /* PREFIX_VEX_0F3A6F */
922d8de8 6630 {
592d1631
L
6631 { Bad_Opcode },
6632 { Bad_Opcode },
592a252b 6633 { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) },
922d8de8
DR
6634 },
6635
592a252b 6636 /* PREFIX_VEX_0F3A78 */
922d8de8 6637 {
592d1631
L
6638 { Bad_Opcode },
6639 { Bad_Opcode },
bf890a93 6640 { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6641 },
6642
592a252b 6643 /* PREFIX_VEX_0F3A79 */
922d8de8 6644 {
592d1631
L
6645 { Bad_Opcode },
6646 { Bad_Opcode },
bf890a93 6647 { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6648 },
6649
592a252b 6650 /* PREFIX_VEX_0F3A7A */
922d8de8 6651 {
592d1631
L
6652 { Bad_Opcode },
6653 { Bad_Opcode },
592a252b 6654 { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) },
922d8de8
DR
6655 },
6656
592a252b 6657 /* PREFIX_VEX_0F3A7B */
922d8de8 6658 {
592d1631
L
6659 { Bad_Opcode },
6660 { Bad_Opcode },
592a252b 6661 { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) },
922d8de8
DR
6662 },
6663
592a252b 6664 /* PREFIX_VEX_0F3A7C */
922d8de8 6665 {
592d1631
L
6666 { Bad_Opcode },
6667 { Bad_Opcode },
bf890a93 6668 { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
592d1631 6669 { Bad_Opcode },
922d8de8
DR
6670 },
6671
592a252b 6672 /* PREFIX_VEX_0F3A7D */
922d8de8 6673 {
592d1631
L
6674 { Bad_Opcode },
6675 { Bad_Opcode },
bf890a93 6676 { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
922d8de8
DR
6677 },
6678
592a252b 6679 /* PREFIX_VEX_0F3A7E */
922d8de8 6680 {
592d1631
L
6681 { Bad_Opcode },
6682 { Bad_Opcode },
592a252b 6683 { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) },
922d8de8
DR
6684 },
6685
592a252b 6686 /* PREFIX_VEX_0F3A7F */
922d8de8 6687 {
592d1631
L
6688 { Bad_Opcode },
6689 { Bad_Opcode },
592a252b 6690 { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) },
922d8de8
DR
6691 },
6692
592a252b 6693 /* PREFIX_VEX_0F3ADF */
a5ff0eb2 6694 {
592d1631
L
6695 { Bad_Opcode },
6696 { Bad_Opcode },
592a252b 6697 { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
a5ff0eb2 6698 },
6c30d220
L
6699
6700 /* PREFIX_VEX_0F3AF0 */
6701 {
6702 { Bad_Opcode },
6703 { Bad_Opcode },
6704 { Bad_Opcode },
6705 { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) },
6706 },
43234a1e
L
6707
6708#define NEED_PREFIX_TABLE
6709#include "i386-dis-evex.h"
6710#undef NEED_PREFIX_TABLE
c0f3af97
L
6711};
6712
6713static const struct dis386 x86_64_table[][2] = {
6714 /* X86_64_06 */
6715 {
bf890a93 6716 { "pushP", { es }, 0 },
c0f3af97
L
6717 },
6718
6719 /* X86_64_07 */
6720 {
bf890a93 6721 { "popP", { es }, 0 },
c0f3af97
L
6722 },
6723
6724 /* X86_64_0D */
6725 {
bf890a93 6726 { "pushP", { cs }, 0 },
c0f3af97
L
6727 },
6728
6729 /* X86_64_16 */
6730 {
bf890a93 6731 { "pushP", { ss }, 0 },
c0f3af97
L
6732 },
6733
6734 /* X86_64_17 */
6735 {
bf890a93 6736 { "popP", { ss }, 0 },
c0f3af97
L
6737 },
6738
6739 /* X86_64_1E */
6740 {
bf890a93 6741 { "pushP", { ds }, 0 },
c0f3af97
L
6742 },
6743
6744 /* X86_64_1F */
6745 {
bf890a93 6746 { "popP", { ds }, 0 },
c0f3af97
L
6747 },
6748
6749 /* X86_64_27 */
6750 {
bf890a93 6751 { "daa", { XX }, 0 },
c0f3af97
L
6752 },
6753
6754 /* X86_64_2F */
6755 {
bf890a93 6756 { "das", { XX }, 0 },
c0f3af97
L
6757 },
6758
6759 /* X86_64_37 */
6760 {
bf890a93 6761 { "aaa", { XX }, 0 },
c0f3af97
L
6762 },
6763
6764 /* X86_64_3F */
6765 {
bf890a93 6766 { "aas", { XX }, 0 },
c0f3af97
L
6767 },
6768
6769 /* X86_64_60 */
6770 {
bf890a93 6771 { "pushaP", { XX }, 0 },
c0f3af97
L
6772 },
6773
6774 /* X86_64_61 */
6775 {
bf890a93 6776 { "popaP", { XX }, 0 },
c0f3af97
L
6777 },
6778
6779 /* X86_64_62 */
6780 {
6781 { MOD_TABLE (MOD_62_32BIT) },
43234a1e 6782 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
6783 },
6784
6785 /* X86_64_63 */
6786 {
bf890a93
IT
6787 { "arpl", { Ew, Gw }, 0 },
6788 { "movs{lq|xd}", { Gv, Ed }, 0 },
c0f3af97
L
6789 },
6790
6791 /* X86_64_6D */
6792 {
bf890a93
IT
6793 { "ins{R|}", { Yzr, indirDX }, 0 },
6794 { "ins{G|}", { Yzr, indirDX }, 0 },
c0f3af97
L
6795 },
6796
6797 /* X86_64_6F */
6798 {
bf890a93
IT
6799 { "outs{R|}", { indirDXr, Xz }, 0 },
6800 { "outs{G|}", { indirDXr, Xz }, 0 },
c0f3af97
L
6801 },
6802
6803 /* X86_64_9A */
6804 {
bf890a93 6805 { "Jcall{T|}", { Ap }, 0 },
c0f3af97
L
6806 },
6807
6808 /* X86_64_C4 */
6809 {
6810 { MOD_TABLE (MOD_C4_32BIT) },
6811 { VEX_C4_TABLE (VEX_0F) },
6812 },
6813
6814 /* X86_64_C5 */
6815 {
6816 { MOD_TABLE (MOD_C5_32BIT) },
6817 { VEX_C5_TABLE (VEX_0F) },
6818 },
6819
6820 /* X86_64_CE */
6821 {
bf890a93 6822 { "into", { XX }, 0 },
c0f3af97
L
6823 },
6824
6825 /* X86_64_D4 */
6826 {
bf890a93 6827 { "aam", { Ib }, 0 },
c0f3af97
L
6828 },
6829
6830 /* X86_64_D5 */
6831 {
bf890a93 6832 { "aad", { Ib }, 0 },
c0f3af97
L
6833 },
6834
6835 /* X86_64_EA */
6836 {
bf890a93 6837 { "Jjmp{T|}", { Ap }, 0 },
c0f3af97
L
6838 },
6839
6840 /* X86_64_0F01_REG_0 */
6841 {
bf890a93
IT
6842 { "sgdt{Q|IQ}", { M }, 0 },
6843 { "sgdt", { M }, 0 },
c0f3af97
L
6844 },
6845
6846 /* X86_64_0F01_REG_1 */
6847 {
bf890a93
IT
6848 { "sidt{Q|IQ}", { M }, 0 },
6849 { "sidt", { M }, 0 },
c0f3af97
L
6850 },
6851
6852 /* X86_64_0F01_REG_2 */
6853 {
bf890a93
IT
6854 { "lgdt{Q|Q}", { M }, 0 },
6855 { "lgdt", { M }, 0 },
c0f3af97
L
6856 },
6857
6858 /* X86_64_0F01_REG_3 */
6859 {
bf890a93
IT
6860 { "lidt{Q|Q}", { M }, 0 },
6861 { "lidt", { M }, 0 },
c0f3af97
L
6862 },
6863};
6864
6865static const struct dis386 three_byte_table[][256] = {
c1e679ec
DR
6866
6867 /* THREE_BYTE_0F38 */
c0f3af97
L
6868 {
6869 /* 00 */
507bd325
L
6870 { "pshufb", { MX, EM }, PREFIX_OPCODE },
6871 { "phaddw", { MX, EM }, PREFIX_OPCODE },
6872 { "phaddd", { MX, EM }, PREFIX_OPCODE },
6873 { "phaddsw", { MX, EM }, PREFIX_OPCODE },
6874 { "pmaddubsw", { MX, EM }, PREFIX_OPCODE },
6875 { "phsubw", { MX, EM }, PREFIX_OPCODE },
6876 { "phsubd", { MX, EM }, PREFIX_OPCODE },
6877 { "phsubsw", { MX, EM }, PREFIX_OPCODE },
c0f3af97 6878 /* 08 */
507bd325
L
6879 { "psignb", { MX, EM }, PREFIX_OPCODE },
6880 { "psignw", { MX, EM }, PREFIX_OPCODE },
6881 { "psignd", { MX, EM }, PREFIX_OPCODE },
6882 { "pmulhrsw", { MX, EM }, PREFIX_OPCODE },
592d1631
L
6883 { Bad_Opcode },
6884 { Bad_Opcode },
6885 { Bad_Opcode },
6886 { Bad_Opcode },
f88c9eb0
SP
6887 /* 10 */
6888 { PREFIX_TABLE (PREFIX_0F3810) },
592d1631
L
6889 { Bad_Opcode },
6890 { Bad_Opcode },
6891 { Bad_Opcode },
f88c9eb0
SP
6892 { PREFIX_TABLE (PREFIX_0F3814) },
6893 { PREFIX_TABLE (PREFIX_0F3815) },
592d1631 6894 { Bad_Opcode },
f88c9eb0
SP
6895 { PREFIX_TABLE (PREFIX_0F3817) },
6896 /* 18 */
592d1631
L
6897 { Bad_Opcode },
6898 { Bad_Opcode },
6899 { Bad_Opcode },
6900 { Bad_Opcode },
507bd325
L
6901 { "pabsb", { MX, EM }, PREFIX_OPCODE },
6902 { "pabsw", { MX, EM }, PREFIX_OPCODE },
6903 { "pabsd", { MX, EM }, PREFIX_OPCODE },
592d1631 6904 { Bad_Opcode },
f88c9eb0
SP
6905 /* 20 */
6906 { PREFIX_TABLE (PREFIX_0F3820) },
6907 { PREFIX_TABLE (PREFIX_0F3821) },
6908 { PREFIX_TABLE (PREFIX_0F3822) },
6909 { PREFIX_TABLE (PREFIX_0F3823) },
6910 { PREFIX_TABLE (PREFIX_0F3824) },
6911 { PREFIX_TABLE (PREFIX_0F3825) },
592d1631
L
6912 { Bad_Opcode },
6913 { Bad_Opcode },
f88c9eb0
SP
6914 /* 28 */
6915 { PREFIX_TABLE (PREFIX_0F3828) },
6916 { PREFIX_TABLE (PREFIX_0F3829) },
6917 { PREFIX_TABLE (PREFIX_0F382A) },
6918 { PREFIX_TABLE (PREFIX_0F382B) },
592d1631
L
6919 { Bad_Opcode },
6920 { Bad_Opcode },
6921 { Bad_Opcode },
6922 { Bad_Opcode },
f88c9eb0
SP
6923 /* 30 */
6924 { PREFIX_TABLE (PREFIX_0F3830) },
6925 { PREFIX_TABLE (PREFIX_0F3831) },
6926 { PREFIX_TABLE (PREFIX_0F3832) },
6927 { PREFIX_TABLE (PREFIX_0F3833) },
6928 { PREFIX_TABLE (PREFIX_0F3834) },
6929 { PREFIX_TABLE (PREFIX_0F3835) },
592d1631 6930 { Bad_Opcode },
f88c9eb0
SP
6931 { PREFIX_TABLE (PREFIX_0F3837) },
6932 /* 38 */
6933 { PREFIX_TABLE (PREFIX_0F3838) },
6934 { PREFIX_TABLE (PREFIX_0F3839) },
6935 { PREFIX_TABLE (PREFIX_0F383A) },
6936 { PREFIX_TABLE (PREFIX_0F383B) },
6937 { PREFIX_TABLE (PREFIX_0F383C) },
6938 { PREFIX_TABLE (PREFIX_0F383D) },
6939 { PREFIX_TABLE (PREFIX_0F383E) },
6940 { PREFIX_TABLE (PREFIX_0F383F) },
6941 /* 40 */
6942 { PREFIX_TABLE (PREFIX_0F3840) },
6943 { PREFIX_TABLE (PREFIX_0F3841) },
592d1631
L
6944 { Bad_Opcode },
6945 { Bad_Opcode },
6946 { Bad_Opcode },
6947 { Bad_Opcode },
6948 { Bad_Opcode },
6949 { Bad_Opcode },
f88c9eb0 6950 /* 48 */
592d1631
L
6951 { Bad_Opcode },
6952 { Bad_Opcode },
6953 { Bad_Opcode },
6954 { Bad_Opcode },
6955 { Bad_Opcode },
6956 { Bad_Opcode },
6957 { Bad_Opcode },
6958 { Bad_Opcode },
f88c9eb0 6959 /* 50 */
592d1631
L
6960 { Bad_Opcode },
6961 { Bad_Opcode },
6962 { Bad_Opcode },
6963 { Bad_Opcode },
6964 { Bad_Opcode },
6965 { Bad_Opcode },
6966 { Bad_Opcode },
6967 { Bad_Opcode },
f88c9eb0 6968 /* 58 */
592d1631
L
6969 { Bad_Opcode },
6970 { Bad_Opcode },
6971 { Bad_Opcode },
6972 { Bad_Opcode },
6973 { Bad_Opcode },
6974 { Bad_Opcode },
6975 { Bad_Opcode },
6976 { Bad_Opcode },
f88c9eb0 6977 /* 60 */
592d1631
L
6978 { Bad_Opcode },
6979 { Bad_Opcode },
6980 { Bad_Opcode },
6981 { Bad_Opcode },
6982 { Bad_Opcode },
6983 { Bad_Opcode },
6984 { Bad_Opcode },
6985 { Bad_Opcode },
f88c9eb0 6986 /* 68 */
592d1631
L
6987 { Bad_Opcode },
6988 { Bad_Opcode },
6989 { Bad_Opcode },
6990 { Bad_Opcode },
6991 { Bad_Opcode },
6992 { Bad_Opcode },
6993 { Bad_Opcode },
6994 { Bad_Opcode },
f88c9eb0 6995 /* 70 */
592d1631
L
6996 { Bad_Opcode },
6997 { Bad_Opcode },
6998 { Bad_Opcode },
6999 { Bad_Opcode },
7000 { Bad_Opcode },
7001 { Bad_Opcode },
7002 { Bad_Opcode },
7003 { Bad_Opcode },
f88c9eb0 7004 /* 78 */
592d1631
L
7005 { Bad_Opcode },
7006 { Bad_Opcode },
7007 { Bad_Opcode },
7008 { Bad_Opcode },
7009 { Bad_Opcode },
7010 { Bad_Opcode },
7011 { Bad_Opcode },
7012 { Bad_Opcode },
f88c9eb0
SP
7013 /* 80 */
7014 { PREFIX_TABLE (PREFIX_0F3880) },
7015 { PREFIX_TABLE (PREFIX_0F3881) },
6c30d220 7016 { PREFIX_TABLE (PREFIX_0F3882) },
592d1631
L
7017 { Bad_Opcode },
7018 { Bad_Opcode },
7019 { Bad_Opcode },
7020 { Bad_Opcode },
7021 { Bad_Opcode },
f88c9eb0 7022 /* 88 */
592d1631
L
7023 { Bad_Opcode },
7024 { Bad_Opcode },
7025 { Bad_Opcode },
7026 { Bad_Opcode },
7027 { Bad_Opcode },
7028 { Bad_Opcode },
7029 { Bad_Opcode },
7030 { Bad_Opcode },
f88c9eb0 7031 /* 90 */
592d1631
L
7032 { Bad_Opcode },
7033 { Bad_Opcode },
7034 { Bad_Opcode },
7035 { Bad_Opcode },
7036 { Bad_Opcode },
7037 { Bad_Opcode },
7038 { Bad_Opcode },
7039 { Bad_Opcode },
f88c9eb0 7040 /* 98 */
592d1631
L
7041 { Bad_Opcode },
7042 { Bad_Opcode },
7043 { Bad_Opcode },
7044 { Bad_Opcode },
7045 { Bad_Opcode },
7046 { Bad_Opcode },
7047 { Bad_Opcode },
7048 { Bad_Opcode },
f88c9eb0 7049 /* a0 */
592d1631
L
7050 { Bad_Opcode },
7051 { Bad_Opcode },
7052 { Bad_Opcode },
7053 { Bad_Opcode },
7054 { Bad_Opcode },
7055 { Bad_Opcode },
7056 { Bad_Opcode },
7057 { Bad_Opcode },
f88c9eb0 7058 /* a8 */
592d1631
L
7059 { Bad_Opcode },
7060 { Bad_Opcode },
7061 { Bad_Opcode },
7062 { Bad_Opcode },
7063 { Bad_Opcode },
7064 { Bad_Opcode },
7065 { Bad_Opcode },
7066 { Bad_Opcode },
f88c9eb0 7067 /* b0 */
592d1631
L
7068 { Bad_Opcode },
7069 { Bad_Opcode },
7070 { Bad_Opcode },
7071 { Bad_Opcode },
7072 { Bad_Opcode },
7073 { Bad_Opcode },
7074 { Bad_Opcode },
7075 { Bad_Opcode },
f88c9eb0 7076 /* b8 */
592d1631
L
7077 { Bad_Opcode },
7078 { Bad_Opcode },
7079 { Bad_Opcode },
7080 { Bad_Opcode },
7081 { Bad_Opcode },
7082 { Bad_Opcode },
7083 { Bad_Opcode },
7084 { Bad_Opcode },
f88c9eb0 7085 /* c0 */
592d1631
L
7086 { Bad_Opcode },
7087 { Bad_Opcode },
7088 { Bad_Opcode },
7089 { Bad_Opcode },
7090 { Bad_Opcode },
7091 { Bad_Opcode },
7092 { Bad_Opcode },
7093 { Bad_Opcode },
f88c9eb0 7094 /* c8 */
a0046408
L
7095 { PREFIX_TABLE (PREFIX_0F38C8) },
7096 { PREFIX_TABLE (PREFIX_0F38C9) },
7097 { PREFIX_TABLE (PREFIX_0F38CA) },
7098 { PREFIX_TABLE (PREFIX_0F38CB) },
7099 { PREFIX_TABLE (PREFIX_0F38CC) },
7100 { PREFIX_TABLE (PREFIX_0F38CD) },
592d1631
L
7101 { Bad_Opcode },
7102 { Bad_Opcode },
f88c9eb0 7103 /* d0 */
592d1631
L
7104 { Bad_Opcode },
7105 { Bad_Opcode },
7106 { Bad_Opcode },
7107 { Bad_Opcode },
7108 { Bad_Opcode },
7109 { Bad_Opcode },
7110 { Bad_Opcode },
7111 { Bad_Opcode },
f88c9eb0 7112 /* d8 */
592d1631
L
7113 { Bad_Opcode },
7114 { Bad_Opcode },
7115 { Bad_Opcode },
f88c9eb0
SP
7116 { PREFIX_TABLE (PREFIX_0F38DB) },
7117 { PREFIX_TABLE (PREFIX_0F38DC) },
7118 { PREFIX_TABLE (PREFIX_0F38DD) },
7119 { PREFIX_TABLE (PREFIX_0F38DE) },
7120 { PREFIX_TABLE (PREFIX_0F38DF) },
7121 /* e0 */
592d1631
L
7122 { Bad_Opcode },
7123 { Bad_Opcode },
7124 { Bad_Opcode },
7125 { Bad_Opcode },
7126 { Bad_Opcode },
7127 { Bad_Opcode },
7128 { Bad_Opcode },
7129 { Bad_Opcode },
f88c9eb0 7130 /* e8 */
592d1631
L
7131 { Bad_Opcode },
7132 { Bad_Opcode },
7133 { Bad_Opcode },
7134 { Bad_Opcode },
7135 { Bad_Opcode },
7136 { Bad_Opcode },
7137 { Bad_Opcode },
7138 { Bad_Opcode },
f88c9eb0
SP
7139 /* f0 */
7140 { PREFIX_TABLE (PREFIX_0F38F0) },
7141 { PREFIX_TABLE (PREFIX_0F38F1) },
592d1631
L
7142 { Bad_Opcode },
7143 { Bad_Opcode },
7144 { Bad_Opcode },
7145 { Bad_Opcode },
e2e1fcde 7146 { PREFIX_TABLE (PREFIX_0F38F6) },
592d1631 7147 { Bad_Opcode },
f88c9eb0 7148 /* f8 */
592d1631
L
7149 { Bad_Opcode },
7150 { Bad_Opcode },
7151 { Bad_Opcode },
7152 { Bad_Opcode },
7153 { Bad_Opcode },
7154 { Bad_Opcode },
7155 { Bad_Opcode },
7156 { Bad_Opcode },
f88c9eb0
SP
7157 },
7158 /* THREE_BYTE_0F3A */
7159 {
7160 /* 00 */
592d1631
L
7161 { Bad_Opcode },
7162 { Bad_Opcode },
7163 { Bad_Opcode },
7164 { Bad_Opcode },
7165 { Bad_Opcode },
7166 { Bad_Opcode },
7167 { Bad_Opcode },
7168 { Bad_Opcode },
f88c9eb0
SP
7169 /* 08 */
7170 { PREFIX_TABLE (PREFIX_0F3A08) },
7171 { PREFIX_TABLE (PREFIX_0F3A09) },
7172 { PREFIX_TABLE (PREFIX_0F3A0A) },
7173 { PREFIX_TABLE (PREFIX_0F3A0B) },
7174 { PREFIX_TABLE (PREFIX_0F3A0C) },
7175 { PREFIX_TABLE (PREFIX_0F3A0D) },
7176 { PREFIX_TABLE (PREFIX_0F3A0E) },
507bd325 7177 { "palignr", { MX, EM, Ib }, PREFIX_OPCODE },
f88c9eb0 7178 /* 10 */
592d1631
L
7179 { Bad_Opcode },
7180 { Bad_Opcode },
7181 { Bad_Opcode },
7182 { Bad_Opcode },
f88c9eb0
SP
7183 { PREFIX_TABLE (PREFIX_0F3A14) },
7184 { PREFIX_TABLE (PREFIX_0F3A15) },
7185 { PREFIX_TABLE (PREFIX_0F3A16) },
7186 { PREFIX_TABLE (PREFIX_0F3A17) },
7187 /* 18 */
592d1631
L
7188 { Bad_Opcode },
7189 { Bad_Opcode },
7190 { Bad_Opcode },
7191 { Bad_Opcode },
7192 { Bad_Opcode },
7193 { Bad_Opcode },
7194 { Bad_Opcode },
7195 { Bad_Opcode },
f88c9eb0
SP
7196 /* 20 */
7197 { PREFIX_TABLE (PREFIX_0F3A20) },
7198 { PREFIX_TABLE (PREFIX_0F3A21) },
7199 { PREFIX_TABLE (PREFIX_0F3A22) },
592d1631
L
7200 { Bad_Opcode },
7201 { Bad_Opcode },
7202 { Bad_Opcode },
7203 { Bad_Opcode },
7204 { Bad_Opcode },
f88c9eb0 7205 /* 28 */
592d1631
L
7206 { Bad_Opcode },
7207 { Bad_Opcode },
7208 { Bad_Opcode },
7209 { Bad_Opcode },
7210 { Bad_Opcode },
7211 { Bad_Opcode },
7212 { Bad_Opcode },
7213 { Bad_Opcode },
f88c9eb0 7214 /* 30 */
592d1631
L
7215 { Bad_Opcode },
7216 { Bad_Opcode },
7217 { Bad_Opcode },
7218 { Bad_Opcode },
7219 { Bad_Opcode },
7220 { Bad_Opcode },
7221 { Bad_Opcode },
7222 { Bad_Opcode },
f88c9eb0 7223 /* 38 */
592d1631
L
7224 { Bad_Opcode },
7225 { Bad_Opcode },
7226 { Bad_Opcode },
7227 { Bad_Opcode },
7228 { Bad_Opcode },
7229 { Bad_Opcode },
7230 { Bad_Opcode },
7231 { Bad_Opcode },
f88c9eb0
SP
7232 /* 40 */
7233 { PREFIX_TABLE (PREFIX_0F3A40) },
7234 { PREFIX_TABLE (PREFIX_0F3A41) },
7235 { PREFIX_TABLE (PREFIX_0F3A42) },
592d1631 7236 { Bad_Opcode },
f88c9eb0 7237 { PREFIX_TABLE (PREFIX_0F3A44) },
592d1631
L
7238 { Bad_Opcode },
7239 { Bad_Opcode },
7240 { Bad_Opcode },
f88c9eb0 7241 /* 48 */
592d1631
L
7242 { Bad_Opcode },
7243 { Bad_Opcode },
7244 { Bad_Opcode },
7245 { Bad_Opcode },
7246 { Bad_Opcode },
7247 { Bad_Opcode },
7248 { Bad_Opcode },
7249 { Bad_Opcode },
f88c9eb0 7250 /* 50 */
592d1631
L
7251 { Bad_Opcode },
7252 { Bad_Opcode },
7253 { Bad_Opcode },
7254 { Bad_Opcode },
7255 { Bad_Opcode },
7256 { Bad_Opcode },
7257 { Bad_Opcode },
7258 { Bad_Opcode },
f88c9eb0 7259 /* 58 */
592d1631
L
7260 { Bad_Opcode },
7261 { Bad_Opcode },
7262 { Bad_Opcode },
7263 { Bad_Opcode },
7264 { Bad_Opcode },
7265 { Bad_Opcode },
7266 { Bad_Opcode },
7267 { Bad_Opcode },
f88c9eb0
SP
7268 /* 60 */
7269 { PREFIX_TABLE (PREFIX_0F3A60) },
7270 { PREFIX_TABLE (PREFIX_0F3A61) },
7271 { PREFIX_TABLE (PREFIX_0F3A62) },
7272 { PREFIX_TABLE (PREFIX_0F3A63) },
592d1631
L
7273 { Bad_Opcode },
7274 { Bad_Opcode },
7275 { Bad_Opcode },
7276 { Bad_Opcode },
f88c9eb0 7277 /* 68 */
592d1631
L
7278 { Bad_Opcode },
7279 { Bad_Opcode },
7280 { Bad_Opcode },
7281 { Bad_Opcode },
7282 { Bad_Opcode },
7283 { Bad_Opcode },
7284 { Bad_Opcode },
7285 { Bad_Opcode },
f88c9eb0 7286 /* 70 */
592d1631
L
7287 { Bad_Opcode },
7288 { Bad_Opcode },
7289 { Bad_Opcode },
7290 { Bad_Opcode },
7291 { Bad_Opcode },
7292 { Bad_Opcode },
7293 { Bad_Opcode },
7294 { Bad_Opcode },
f88c9eb0 7295 /* 78 */
592d1631
L
7296 { Bad_Opcode },
7297 { Bad_Opcode },
7298 { Bad_Opcode },
7299 { Bad_Opcode },
7300 { Bad_Opcode },
7301 { Bad_Opcode },
7302 { Bad_Opcode },
7303 { Bad_Opcode },
f88c9eb0 7304 /* 80 */
592d1631
L
7305 { Bad_Opcode },
7306 { Bad_Opcode },
7307 { Bad_Opcode },
7308 { Bad_Opcode },
7309 { Bad_Opcode },
7310 { Bad_Opcode },
7311 { Bad_Opcode },
7312 { Bad_Opcode },
f88c9eb0 7313 /* 88 */
592d1631
L
7314 { Bad_Opcode },
7315 { Bad_Opcode },
7316 { Bad_Opcode },
7317 { Bad_Opcode },
7318 { Bad_Opcode },
7319 { Bad_Opcode },
7320 { Bad_Opcode },
7321 { Bad_Opcode },
f88c9eb0 7322 /* 90 */
592d1631
L
7323 { Bad_Opcode },
7324 { Bad_Opcode },
7325 { Bad_Opcode },
7326 { Bad_Opcode },
7327 { Bad_Opcode },
7328 { Bad_Opcode },
7329 { Bad_Opcode },
7330 { Bad_Opcode },
f88c9eb0 7331 /* 98 */
592d1631
L
7332 { Bad_Opcode },
7333 { Bad_Opcode },
7334 { Bad_Opcode },
7335 { Bad_Opcode },
7336 { Bad_Opcode },
7337 { Bad_Opcode },
7338 { Bad_Opcode },
7339 { Bad_Opcode },
f88c9eb0 7340 /* a0 */
592d1631
L
7341 { Bad_Opcode },
7342 { Bad_Opcode },
7343 { Bad_Opcode },
7344 { Bad_Opcode },
7345 { Bad_Opcode },
7346 { Bad_Opcode },
7347 { Bad_Opcode },
7348 { Bad_Opcode },
f88c9eb0 7349 /* a8 */
592d1631
L
7350 { Bad_Opcode },
7351 { Bad_Opcode },
7352 { Bad_Opcode },
7353 { Bad_Opcode },
7354 { Bad_Opcode },
7355 { Bad_Opcode },
7356 { Bad_Opcode },
7357 { Bad_Opcode },
f88c9eb0 7358 /* b0 */
592d1631
L
7359 { Bad_Opcode },
7360 { Bad_Opcode },
7361 { Bad_Opcode },
7362 { Bad_Opcode },
7363 { Bad_Opcode },
7364 { Bad_Opcode },
7365 { Bad_Opcode },
7366 { Bad_Opcode },
f88c9eb0 7367 /* b8 */
592d1631
L
7368 { Bad_Opcode },
7369 { Bad_Opcode },
7370 { Bad_Opcode },
7371 { Bad_Opcode },
7372 { Bad_Opcode },
7373 { Bad_Opcode },
7374 { Bad_Opcode },
7375 { Bad_Opcode },
f88c9eb0 7376 /* c0 */
592d1631
L
7377 { Bad_Opcode },
7378 { Bad_Opcode },
7379 { Bad_Opcode },
7380 { Bad_Opcode },
7381 { Bad_Opcode },
7382 { Bad_Opcode },
7383 { Bad_Opcode },
7384 { Bad_Opcode },
f88c9eb0 7385 /* c8 */
592d1631
L
7386 { Bad_Opcode },
7387 { Bad_Opcode },
7388 { Bad_Opcode },
7389 { Bad_Opcode },
a0046408 7390 { PREFIX_TABLE (PREFIX_0F3ACC) },
592d1631
L
7391 { Bad_Opcode },
7392 { Bad_Opcode },
7393 { Bad_Opcode },
f88c9eb0 7394 /* d0 */
592d1631
L
7395 { Bad_Opcode },
7396 { Bad_Opcode },
7397 { Bad_Opcode },
7398 { Bad_Opcode },
7399 { Bad_Opcode },
7400 { Bad_Opcode },
7401 { Bad_Opcode },
7402 { Bad_Opcode },
f88c9eb0 7403 /* d8 */
592d1631
L
7404 { Bad_Opcode },
7405 { Bad_Opcode },
7406 { Bad_Opcode },
7407 { Bad_Opcode },
7408 { Bad_Opcode },
7409 { Bad_Opcode },
7410 { Bad_Opcode },
f88c9eb0
SP
7411 { PREFIX_TABLE (PREFIX_0F3ADF) },
7412 /* e0 */
592d1631
L
7413 { Bad_Opcode },
7414 { Bad_Opcode },
7415 { Bad_Opcode },
7416 { Bad_Opcode },
7417 { Bad_Opcode },
7418 { Bad_Opcode },
7419 { Bad_Opcode },
7420 { Bad_Opcode },
f88c9eb0 7421 /* e8 */
592d1631
L
7422 { Bad_Opcode },
7423 { Bad_Opcode },
7424 { Bad_Opcode },
7425 { Bad_Opcode },
7426 { Bad_Opcode },
7427 { Bad_Opcode },
7428 { Bad_Opcode },
7429 { Bad_Opcode },
f88c9eb0 7430 /* f0 */
592d1631
L
7431 { Bad_Opcode },
7432 { Bad_Opcode },
7433 { Bad_Opcode },
7434 { Bad_Opcode },
7435 { Bad_Opcode },
7436 { Bad_Opcode },
7437 { Bad_Opcode },
7438 { Bad_Opcode },
f88c9eb0 7439 /* f8 */
592d1631
L
7440 { Bad_Opcode },
7441 { Bad_Opcode },
7442 { Bad_Opcode },
7443 { Bad_Opcode },
7444 { Bad_Opcode },
7445 { Bad_Opcode },
7446 { Bad_Opcode },
7447 { Bad_Opcode },
f88c9eb0
SP
7448 },
7449
7450 /* THREE_BYTE_0F7A */
7451 {
7452 /* 00 */
592d1631
L
7453 { Bad_Opcode },
7454 { Bad_Opcode },
7455 { Bad_Opcode },
7456 { Bad_Opcode },
7457 { Bad_Opcode },
7458 { Bad_Opcode },
7459 { Bad_Opcode },
7460 { Bad_Opcode },
f88c9eb0 7461 /* 08 */
592d1631
L
7462 { Bad_Opcode },
7463 { Bad_Opcode },
7464 { Bad_Opcode },
7465 { Bad_Opcode },
7466 { Bad_Opcode },
7467 { Bad_Opcode },
7468 { Bad_Opcode },
7469 { Bad_Opcode },
f88c9eb0 7470 /* 10 */
592d1631
L
7471 { Bad_Opcode },
7472 { Bad_Opcode },
7473 { Bad_Opcode },
7474 { Bad_Opcode },
7475 { Bad_Opcode },
7476 { Bad_Opcode },
7477 { Bad_Opcode },
7478 { Bad_Opcode },
f88c9eb0 7479 /* 18 */
592d1631
L
7480 { Bad_Opcode },
7481 { Bad_Opcode },
7482 { Bad_Opcode },
7483 { Bad_Opcode },
7484 { Bad_Opcode },
7485 { Bad_Opcode },
7486 { Bad_Opcode },
7487 { Bad_Opcode },
f88c9eb0 7488 /* 20 */
507bd325 7489 { "ptest", { XX }, PREFIX_OPCODE },
592d1631
L
7490 { Bad_Opcode },
7491 { Bad_Opcode },
7492 { Bad_Opcode },
7493 { Bad_Opcode },
7494 { Bad_Opcode },
7495 { Bad_Opcode },
7496 { Bad_Opcode },
f88c9eb0 7497 /* 28 */
592d1631
L
7498 { Bad_Opcode },
7499 { Bad_Opcode },
7500 { Bad_Opcode },
7501 { Bad_Opcode },
7502 { Bad_Opcode },
7503 { Bad_Opcode },
7504 { Bad_Opcode },
7505 { Bad_Opcode },
f88c9eb0 7506 /* 30 */
592d1631
L
7507 { Bad_Opcode },
7508 { Bad_Opcode },
7509 { Bad_Opcode },
7510 { Bad_Opcode },
7511 { Bad_Opcode },
7512 { Bad_Opcode },
7513 { Bad_Opcode },
7514 { Bad_Opcode },
f88c9eb0 7515 /* 38 */
592d1631
L
7516 { Bad_Opcode },
7517 { Bad_Opcode },
7518 { Bad_Opcode },
7519 { Bad_Opcode },
7520 { Bad_Opcode },
7521 { Bad_Opcode },
7522 { Bad_Opcode },
7523 { Bad_Opcode },
f88c9eb0 7524 /* 40 */
592d1631 7525 { Bad_Opcode },
507bd325
L
7526 { "phaddbw", { XM, EXq }, PREFIX_OPCODE },
7527 { "phaddbd", { XM, EXq }, PREFIX_OPCODE },
7528 { "phaddbq", { XM, EXq }, PREFIX_OPCODE },
592d1631
L
7529 { Bad_Opcode },
7530 { Bad_Opcode },
507bd325
L
7531 { "phaddwd", { XM, EXq }, PREFIX_OPCODE },
7532 { "phaddwq", { XM, EXq }, PREFIX_OPCODE },
f88c9eb0 7533 /* 48 */
592d1631
L
7534 { Bad_Opcode },
7535 { Bad_Opcode },
7536 { Bad_Opcode },
507bd325 7537 { "phadddq", { XM, EXq }, PREFIX_OPCODE },
592d1631
L
7538 { Bad_Opcode },
7539 { Bad_Opcode },
7540 { Bad_Opcode },
7541 { Bad_Opcode },
f88c9eb0 7542 /* 50 */
592d1631 7543 { Bad_Opcode },
507bd325
L
7544 { "phaddubw", { XM, EXq }, PREFIX_OPCODE },
7545 { "phaddubd", { XM, EXq }, PREFIX_OPCODE },
7546 { "phaddubq", { XM, EXq }, PREFIX_OPCODE },
592d1631
L
7547 { Bad_Opcode },
7548 { Bad_Opcode },
507bd325
L
7549 { "phadduwd", { XM, EXq }, PREFIX_OPCODE },
7550 { "phadduwq", { XM, EXq }, PREFIX_OPCODE },
f88c9eb0 7551 /* 58 */
592d1631
L
7552 { Bad_Opcode },
7553 { Bad_Opcode },
7554 { Bad_Opcode },
507bd325 7555 { "phaddudq", { XM, EXq }, PREFIX_OPCODE },
592d1631
L
7556 { Bad_Opcode },
7557 { Bad_Opcode },
7558 { Bad_Opcode },
7559 { Bad_Opcode },
f88c9eb0 7560 /* 60 */
592d1631 7561 { Bad_Opcode },
507bd325
L
7562 { "phsubbw", { XM, EXq }, PREFIX_OPCODE },
7563 { "phsubbd", { XM, EXq }, PREFIX_OPCODE },
7564 { "phsubbq", { XM, EXq }, PREFIX_OPCODE },
592d1631
L
7565 { Bad_Opcode },
7566 { Bad_Opcode },
7567 { Bad_Opcode },
7568 { Bad_Opcode },
4e7d34a6 7569 /* 68 */
592d1631
L
7570 { Bad_Opcode },
7571 { Bad_Opcode },
7572 { Bad_Opcode },
7573 { Bad_Opcode },
7574 { Bad_Opcode },
7575 { Bad_Opcode },
7576 { Bad_Opcode },
7577 { Bad_Opcode },
85f10a01 7578 /* 70 */
592d1631
L
7579 { Bad_Opcode },
7580 { Bad_Opcode },
7581 { Bad_Opcode },
7582 { Bad_Opcode },
7583 { Bad_Opcode },
7584 { Bad_Opcode },
7585 { Bad_Opcode },
7586 { Bad_Opcode },
85f10a01 7587 /* 78 */
592d1631
L
7588 { Bad_Opcode },
7589 { Bad_Opcode },
7590 { Bad_Opcode },
7591 { Bad_Opcode },
7592 { Bad_Opcode },
7593 { Bad_Opcode },
7594 { Bad_Opcode },
7595 { Bad_Opcode },
85f10a01 7596 /* 80 */
592d1631
L
7597 { Bad_Opcode },
7598 { Bad_Opcode },
7599 { Bad_Opcode },
7600 { Bad_Opcode },
7601 { Bad_Opcode },
7602 { Bad_Opcode },
7603 { Bad_Opcode },
7604 { Bad_Opcode },
85f10a01 7605 /* 88 */
592d1631
L
7606 { Bad_Opcode },
7607 { Bad_Opcode },
7608 { Bad_Opcode },
7609 { Bad_Opcode },
7610 { Bad_Opcode },
7611 { Bad_Opcode },
7612 { Bad_Opcode },
7613 { Bad_Opcode },
85f10a01 7614 /* 90 */
592d1631
L
7615 { Bad_Opcode },
7616 { Bad_Opcode },
7617 { Bad_Opcode },
7618 { Bad_Opcode },
7619 { Bad_Opcode },
7620 { Bad_Opcode },
7621 { Bad_Opcode },
7622 { Bad_Opcode },
85f10a01 7623 /* 98 */
592d1631
L
7624 { Bad_Opcode },
7625 { Bad_Opcode },
7626 { Bad_Opcode },
7627 { Bad_Opcode },
7628 { Bad_Opcode },
7629 { Bad_Opcode },
7630 { Bad_Opcode },
7631 { Bad_Opcode },
85f10a01 7632 /* a0 */
592d1631
L
7633 { Bad_Opcode },
7634 { Bad_Opcode },
7635 { Bad_Opcode },
7636 { Bad_Opcode },
7637 { Bad_Opcode },
7638 { Bad_Opcode },
7639 { Bad_Opcode },
7640 { Bad_Opcode },
85f10a01 7641 /* a8 */
592d1631
L
7642 { Bad_Opcode },
7643 { Bad_Opcode },
7644 { Bad_Opcode },
7645 { Bad_Opcode },
7646 { Bad_Opcode },
7647 { Bad_Opcode },
7648 { Bad_Opcode },
7649 { Bad_Opcode },
85f10a01 7650 /* b0 */
592d1631
L
7651 { Bad_Opcode },
7652 { Bad_Opcode },
7653 { Bad_Opcode },
7654 { Bad_Opcode },
7655 { Bad_Opcode },
7656 { Bad_Opcode },
7657 { Bad_Opcode },
7658 { Bad_Opcode },
85f10a01 7659 /* b8 */
592d1631
L
7660 { Bad_Opcode },
7661 { Bad_Opcode },
7662 { Bad_Opcode },
7663 { Bad_Opcode },
7664 { Bad_Opcode },
7665 { Bad_Opcode },
7666 { Bad_Opcode },
7667 { Bad_Opcode },
85f10a01 7668 /* c0 */
592d1631
L
7669 { Bad_Opcode },
7670 { Bad_Opcode },
7671 { Bad_Opcode },
7672 { Bad_Opcode },
7673 { Bad_Opcode },
7674 { Bad_Opcode },
7675 { Bad_Opcode },
7676 { Bad_Opcode },
85f10a01 7677 /* c8 */
592d1631
L
7678 { Bad_Opcode },
7679 { Bad_Opcode },
7680 { Bad_Opcode },
7681 { Bad_Opcode },
7682 { Bad_Opcode },
7683 { Bad_Opcode },
7684 { Bad_Opcode },
7685 { Bad_Opcode },
85f10a01 7686 /* d0 */
592d1631
L
7687 { Bad_Opcode },
7688 { Bad_Opcode },
7689 { Bad_Opcode },
7690 { Bad_Opcode },
7691 { Bad_Opcode },
7692 { Bad_Opcode },
7693 { Bad_Opcode },
7694 { Bad_Opcode },
85f10a01 7695 /* d8 */
592d1631
L
7696 { Bad_Opcode },
7697 { Bad_Opcode },
7698 { Bad_Opcode },
7699 { Bad_Opcode },
7700 { Bad_Opcode },
7701 { Bad_Opcode },
7702 { Bad_Opcode },
7703 { Bad_Opcode },
85f10a01 7704 /* e0 */
592d1631
L
7705 { Bad_Opcode },
7706 { Bad_Opcode },
7707 { Bad_Opcode },
7708 { Bad_Opcode },
7709 { Bad_Opcode },
7710 { Bad_Opcode },
7711 { Bad_Opcode },
7712 { Bad_Opcode },
85f10a01 7713 /* e8 */
592d1631
L
7714 { Bad_Opcode },
7715 { Bad_Opcode },
7716 { Bad_Opcode },
7717 { Bad_Opcode },
7718 { Bad_Opcode },
7719 { Bad_Opcode },
7720 { Bad_Opcode },
7721 { Bad_Opcode },
85f10a01 7722 /* f0 */
592d1631
L
7723 { Bad_Opcode },
7724 { Bad_Opcode },
7725 { Bad_Opcode },
7726 { Bad_Opcode },
7727 { Bad_Opcode },
7728 { Bad_Opcode },
7729 { Bad_Opcode },
7730 { Bad_Opcode },
85f10a01 7731 /* f8 */
592d1631
L
7732 { Bad_Opcode },
7733 { Bad_Opcode },
7734 { Bad_Opcode },
7735 { Bad_Opcode },
7736 { Bad_Opcode },
7737 { Bad_Opcode },
7738 { Bad_Opcode },
7739 { Bad_Opcode },
85f10a01 7740 },
f88c9eb0
SP
7741};
7742
7743static const struct dis386 xop_table[][256] = {
5dd85c99 7744 /* XOP_08 */
85f10a01
MM
7745 {
7746 /* 00 */
592d1631
L
7747 { Bad_Opcode },
7748 { Bad_Opcode },
7749 { Bad_Opcode },
7750 { Bad_Opcode },
7751 { Bad_Opcode },
7752 { Bad_Opcode },
7753 { Bad_Opcode },
7754 { Bad_Opcode },
85f10a01 7755 /* 08 */
592d1631
L
7756 { Bad_Opcode },
7757 { Bad_Opcode },
7758 { Bad_Opcode },
7759 { Bad_Opcode },
7760 { Bad_Opcode },
7761 { Bad_Opcode },
7762 { Bad_Opcode },
7763 { Bad_Opcode },
85f10a01 7764 /* 10 */
3929df09 7765 { Bad_Opcode },
592d1631
L
7766 { Bad_Opcode },
7767 { Bad_Opcode },
7768 { Bad_Opcode },
7769 { Bad_Opcode },
7770 { Bad_Opcode },
7771 { Bad_Opcode },
7772 { Bad_Opcode },
85f10a01 7773 /* 18 */
592d1631
L
7774 { Bad_Opcode },
7775 { Bad_Opcode },
7776 { Bad_Opcode },
7777 { Bad_Opcode },
7778 { Bad_Opcode },
7779 { Bad_Opcode },
7780 { Bad_Opcode },
7781 { Bad_Opcode },
85f10a01 7782 /* 20 */
592d1631
L
7783 { Bad_Opcode },
7784 { Bad_Opcode },
7785 { Bad_Opcode },
7786 { Bad_Opcode },
7787 { Bad_Opcode },
7788 { Bad_Opcode },
7789 { Bad_Opcode },
7790 { Bad_Opcode },
85f10a01 7791 /* 28 */
592d1631
L
7792 { Bad_Opcode },
7793 { Bad_Opcode },
7794 { Bad_Opcode },
7795 { Bad_Opcode },
7796 { Bad_Opcode },
7797 { Bad_Opcode },
7798 { Bad_Opcode },
7799 { Bad_Opcode },
c0f3af97 7800 /* 30 */
592d1631
L
7801 { Bad_Opcode },
7802 { Bad_Opcode },
7803 { Bad_Opcode },
7804 { Bad_Opcode },
7805 { Bad_Opcode },
7806 { Bad_Opcode },
7807 { Bad_Opcode },
7808 { Bad_Opcode },
c0f3af97 7809 /* 38 */
592d1631
L
7810 { Bad_Opcode },
7811 { Bad_Opcode },
7812 { Bad_Opcode },
7813 { Bad_Opcode },
7814 { Bad_Opcode },
7815 { Bad_Opcode },
7816 { Bad_Opcode },
7817 { Bad_Opcode },
c0f3af97 7818 /* 40 */
592d1631
L
7819 { Bad_Opcode },
7820 { Bad_Opcode },
7821 { Bad_Opcode },
7822 { Bad_Opcode },
7823 { Bad_Opcode },
7824 { Bad_Opcode },
7825 { Bad_Opcode },
7826 { Bad_Opcode },
85f10a01 7827 /* 48 */
592d1631
L
7828 { Bad_Opcode },
7829 { Bad_Opcode },
7830 { Bad_Opcode },
7831 { Bad_Opcode },
7832 { Bad_Opcode },
7833 { Bad_Opcode },
7834 { Bad_Opcode },
7835 { Bad_Opcode },
c0f3af97 7836 /* 50 */
592d1631
L
7837 { Bad_Opcode },
7838 { Bad_Opcode },
7839 { Bad_Opcode },
7840 { Bad_Opcode },
7841 { Bad_Opcode },
7842 { Bad_Opcode },
7843 { Bad_Opcode },
7844 { Bad_Opcode },
85f10a01 7845 /* 58 */
592d1631
L
7846 { Bad_Opcode },
7847 { Bad_Opcode },
7848 { Bad_Opcode },
7849 { Bad_Opcode },
7850 { Bad_Opcode },
7851 { Bad_Opcode },
7852 { Bad_Opcode },
7853 { Bad_Opcode },
c1e679ec 7854 /* 60 */
592d1631
L
7855 { Bad_Opcode },
7856 { Bad_Opcode },
7857 { Bad_Opcode },
7858 { Bad_Opcode },
7859 { Bad_Opcode },
7860 { Bad_Opcode },
7861 { Bad_Opcode },
7862 { Bad_Opcode },
c0f3af97 7863 /* 68 */
592d1631
L
7864 { Bad_Opcode },
7865 { Bad_Opcode },
7866 { Bad_Opcode },
7867 { Bad_Opcode },
7868 { Bad_Opcode },
7869 { Bad_Opcode },
7870 { Bad_Opcode },
7871 { Bad_Opcode },
85f10a01 7872 /* 70 */
592d1631
L
7873 { Bad_Opcode },
7874 { Bad_Opcode },
7875 { Bad_Opcode },
7876 { Bad_Opcode },
7877 { Bad_Opcode },
7878 { Bad_Opcode },
7879 { Bad_Opcode },
7880 { Bad_Opcode },
85f10a01 7881 /* 78 */
592d1631
L
7882 { Bad_Opcode },
7883 { Bad_Opcode },
7884 { Bad_Opcode },
7885 { Bad_Opcode },
7886 { Bad_Opcode },
7887 { Bad_Opcode },
7888 { Bad_Opcode },
7889 { Bad_Opcode },
85f10a01 7890 /* 80 */
592d1631
L
7891 { Bad_Opcode },
7892 { Bad_Opcode },
7893 { Bad_Opcode },
7894 { Bad_Opcode },
7895 { Bad_Opcode },
bf890a93
IT
7896 { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7897 { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7898 { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
5dd85c99 7899 /* 88 */
592d1631
L
7900 { Bad_Opcode },
7901 { Bad_Opcode },
7902 { Bad_Opcode },
7903 { Bad_Opcode },
7904 { Bad_Opcode },
7905 { Bad_Opcode },
bf890a93
IT
7906 { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7907 { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
5dd85c99 7908 /* 90 */
592d1631
L
7909 { Bad_Opcode },
7910 { Bad_Opcode },
7911 { Bad_Opcode },
7912 { Bad_Opcode },
7913 { Bad_Opcode },
bf890a93
IT
7914 { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7915 { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7916 { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
5dd85c99 7917 /* 98 */
592d1631
L
7918 { Bad_Opcode },
7919 { Bad_Opcode },
7920 { Bad_Opcode },
7921 { Bad_Opcode },
7922 { Bad_Opcode },
7923 { Bad_Opcode },
bf890a93
IT
7924 { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7925 { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
5dd85c99 7926 /* a0 */
592d1631
L
7927 { Bad_Opcode },
7928 { Bad_Opcode },
bf890a93
IT
7929 { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7930 { "vpperm", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
592d1631
L
7931 { Bad_Opcode },
7932 { Bad_Opcode },
bf890a93 7933 { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
592d1631 7934 { Bad_Opcode },
5dd85c99 7935 /* a8 */
592d1631
L
7936 { Bad_Opcode },
7937 { Bad_Opcode },
7938 { Bad_Opcode },
7939 { Bad_Opcode },
7940 { Bad_Opcode },
7941 { Bad_Opcode },
7942 { Bad_Opcode },
7943 { Bad_Opcode },
5dd85c99 7944 /* b0 */
592d1631
L
7945 { Bad_Opcode },
7946 { Bad_Opcode },
7947 { Bad_Opcode },
7948 { Bad_Opcode },
7949 { Bad_Opcode },
7950 { Bad_Opcode },
bf890a93 7951 { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
592d1631 7952 { Bad_Opcode },
5dd85c99 7953 /* b8 */
592d1631
L
7954 { Bad_Opcode },
7955 { Bad_Opcode },
7956 { Bad_Opcode },
7957 { Bad_Opcode },
7958 { Bad_Opcode },
7959 { Bad_Opcode },
7960 { Bad_Opcode },
7961 { Bad_Opcode },
5dd85c99 7962 /* c0 */
bf890a93
IT
7963 { "vprotb", { XM, Vex_2src_1, Ib }, 0 },
7964 { "vprotw", { XM, Vex_2src_1, Ib }, 0 },
7965 { "vprotd", { XM, Vex_2src_1, Ib }, 0 },
7966 { "vprotq", { XM, Vex_2src_1, Ib }, 0 },
592d1631
L
7967 { Bad_Opcode },
7968 { Bad_Opcode },
7969 { Bad_Opcode },
7970 { Bad_Opcode },
5dd85c99 7971 /* c8 */
592d1631
L
7972 { Bad_Opcode },
7973 { Bad_Opcode },
7974 { Bad_Opcode },
7975 { Bad_Opcode },
ff688e1f
L
7976 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CC) },
7977 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CD) },
7978 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CE) },
7979 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CF) },
5dd85c99 7980 /* d0 */
592d1631
L
7981 { Bad_Opcode },
7982 { Bad_Opcode },
7983 { Bad_Opcode },
7984 { Bad_Opcode },
7985 { Bad_Opcode },
7986 { Bad_Opcode },
7987 { Bad_Opcode },
7988 { Bad_Opcode },
5dd85c99 7989 /* d8 */
592d1631
L
7990 { Bad_Opcode },
7991 { Bad_Opcode },
7992 { Bad_Opcode },
7993 { Bad_Opcode },
7994 { Bad_Opcode },
7995 { Bad_Opcode },
7996 { Bad_Opcode },
7997 { Bad_Opcode },
5dd85c99 7998 /* e0 */
592d1631
L
7999 { Bad_Opcode },
8000 { Bad_Opcode },
8001 { Bad_Opcode },
8002 { Bad_Opcode },
8003 { Bad_Opcode },
8004 { Bad_Opcode },
8005 { Bad_Opcode },
8006 { Bad_Opcode },
5dd85c99 8007 /* e8 */
592d1631
L
8008 { Bad_Opcode },
8009 { Bad_Opcode },
8010 { Bad_Opcode },
8011 { Bad_Opcode },
ff688e1f
L
8012 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EC) },
8013 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_ED) },
8014 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EE) },
8015 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EF) },
5dd85c99 8016 /* f0 */
592d1631
L
8017 { Bad_Opcode },
8018 { Bad_Opcode },
8019 { Bad_Opcode },
8020 { Bad_Opcode },
8021 { Bad_Opcode },
8022 { Bad_Opcode },
8023 { Bad_Opcode },
8024 { Bad_Opcode },
5dd85c99 8025 /* f8 */
592d1631
L
8026 { Bad_Opcode },
8027 { Bad_Opcode },
8028 { Bad_Opcode },
8029 { Bad_Opcode },
8030 { Bad_Opcode },
8031 { Bad_Opcode },
8032 { Bad_Opcode },
8033 { Bad_Opcode },
5dd85c99
SP
8034 },
8035 /* XOP_09 */
8036 {
8037 /* 00 */
592d1631 8038 { Bad_Opcode },
2a2a0f38
QN
8039 { REG_TABLE (REG_XOP_TBM_01) },
8040 { REG_TABLE (REG_XOP_TBM_02) },
592d1631
L
8041 { Bad_Opcode },
8042 { Bad_Opcode },
8043 { Bad_Opcode },
8044 { Bad_Opcode },
8045 { Bad_Opcode },
5dd85c99 8046 /* 08 */
592d1631
L
8047 { Bad_Opcode },
8048 { Bad_Opcode },
8049 { Bad_Opcode },
8050 { Bad_Opcode },
8051 { Bad_Opcode },
8052 { Bad_Opcode },
8053 { Bad_Opcode },
8054 { Bad_Opcode },
5dd85c99 8055 /* 10 */
592d1631
L
8056 { Bad_Opcode },
8057 { Bad_Opcode },
5dd85c99 8058 { REG_TABLE (REG_XOP_LWPCB) },
592d1631
L
8059 { Bad_Opcode },
8060 { Bad_Opcode },
8061 { Bad_Opcode },
8062 { Bad_Opcode },
8063 { Bad_Opcode },
5dd85c99 8064 /* 18 */
592d1631
L
8065 { Bad_Opcode },
8066 { Bad_Opcode },
8067 { Bad_Opcode },
8068 { Bad_Opcode },
8069 { Bad_Opcode },
8070 { Bad_Opcode },
8071 { Bad_Opcode },
8072 { Bad_Opcode },
5dd85c99 8073 /* 20 */
592d1631
L
8074 { Bad_Opcode },
8075 { Bad_Opcode },
8076 { Bad_Opcode },
8077 { Bad_Opcode },
8078 { Bad_Opcode },
8079 { Bad_Opcode },
8080 { Bad_Opcode },
8081 { Bad_Opcode },
5dd85c99 8082 /* 28 */
592d1631
L
8083 { Bad_Opcode },
8084 { Bad_Opcode },
8085 { Bad_Opcode },
8086 { Bad_Opcode },
8087 { Bad_Opcode },
8088 { Bad_Opcode },
8089 { Bad_Opcode },
8090 { Bad_Opcode },
5dd85c99 8091 /* 30 */
592d1631
L
8092 { Bad_Opcode },
8093 { Bad_Opcode },
8094 { Bad_Opcode },
8095 { Bad_Opcode },
8096 { Bad_Opcode },
8097 { Bad_Opcode },
8098 { Bad_Opcode },
8099 { Bad_Opcode },
5dd85c99 8100 /* 38 */
592d1631
L
8101 { Bad_Opcode },
8102 { Bad_Opcode },
8103 { Bad_Opcode },
8104 { Bad_Opcode },
8105 { Bad_Opcode },
8106 { Bad_Opcode },
8107 { Bad_Opcode },
8108 { Bad_Opcode },
5dd85c99 8109 /* 40 */
592d1631
L
8110 { Bad_Opcode },
8111 { Bad_Opcode },
8112 { Bad_Opcode },
8113 { Bad_Opcode },
8114 { Bad_Opcode },
8115 { Bad_Opcode },
8116 { Bad_Opcode },
8117 { Bad_Opcode },
5dd85c99 8118 /* 48 */
592d1631
L
8119 { Bad_Opcode },
8120 { Bad_Opcode },
8121 { Bad_Opcode },
8122 { Bad_Opcode },
8123 { Bad_Opcode },
8124 { Bad_Opcode },
8125 { Bad_Opcode },
8126 { Bad_Opcode },
5dd85c99 8127 /* 50 */
592d1631
L
8128 { Bad_Opcode },
8129 { Bad_Opcode },
8130 { Bad_Opcode },
8131 { Bad_Opcode },
8132 { Bad_Opcode },
8133 { Bad_Opcode },
8134 { Bad_Opcode },
8135 { Bad_Opcode },
5dd85c99 8136 /* 58 */
592d1631
L
8137 { Bad_Opcode },
8138 { Bad_Opcode },
8139 { Bad_Opcode },
8140 { Bad_Opcode },
8141 { Bad_Opcode },
8142 { Bad_Opcode },
8143 { Bad_Opcode },
8144 { Bad_Opcode },
5dd85c99 8145 /* 60 */
592d1631
L
8146 { Bad_Opcode },
8147 { Bad_Opcode },
8148 { Bad_Opcode },
8149 { Bad_Opcode },
8150 { Bad_Opcode },
8151 { Bad_Opcode },
8152 { Bad_Opcode },
8153 { Bad_Opcode },
5dd85c99 8154 /* 68 */
592d1631
L
8155 { Bad_Opcode },
8156 { Bad_Opcode },
8157 { Bad_Opcode },
8158 { Bad_Opcode },
8159 { Bad_Opcode },
8160 { Bad_Opcode },
8161 { Bad_Opcode },
8162 { Bad_Opcode },
5dd85c99 8163 /* 70 */
592d1631
L
8164 { Bad_Opcode },
8165 { Bad_Opcode },
8166 { Bad_Opcode },
8167 { Bad_Opcode },
8168 { Bad_Opcode },
8169 { Bad_Opcode },
8170 { Bad_Opcode },
8171 { Bad_Opcode },
5dd85c99 8172 /* 78 */
592d1631
L
8173 { Bad_Opcode },
8174 { Bad_Opcode },
8175 { Bad_Opcode },
8176 { Bad_Opcode },
8177 { Bad_Opcode },
8178 { Bad_Opcode },
8179 { Bad_Opcode },
8180 { Bad_Opcode },
5dd85c99 8181 /* 80 */
592a252b
L
8182 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) },
8183 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) },
bf890a93
IT
8184 { "vfrczss", { XM, EXd }, 0 },
8185 { "vfrczsd", { XM, EXq }, 0 },
592d1631
L
8186 { Bad_Opcode },
8187 { Bad_Opcode },
8188 { Bad_Opcode },
8189 { Bad_Opcode },
5dd85c99 8190 /* 88 */
592d1631
L
8191 { Bad_Opcode },
8192 { Bad_Opcode },
8193 { Bad_Opcode },
8194 { Bad_Opcode },
8195 { Bad_Opcode },
8196 { Bad_Opcode },
8197 { Bad_Opcode },
8198 { Bad_Opcode },
5dd85c99 8199 /* 90 */
bf890a93
IT
8200 { "vprotb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8201 { "vprotw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8202 { "vprotd", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8203 { "vprotq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8204 { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8205 { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8206 { "vpshld", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8207 { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
5dd85c99 8208 /* 98 */
bf890a93
IT
8209 { "vpshab", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8210 { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8211 { "vpshad", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8212 { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
592d1631
L
8213 { Bad_Opcode },
8214 { Bad_Opcode },
8215 { Bad_Opcode },
8216 { Bad_Opcode },
5dd85c99 8217 /* a0 */
592d1631
L
8218 { Bad_Opcode },
8219 { Bad_Opcode },
8220 { Bad_Opcode },
8221 { Bad_Opcode },
8222 { Bad_Opcode },
8223 { Bad_Opcode },
8224 { Bad_Opcode },
8225 { Bad_Opcode },
5dd85c99 8226 /* a8 */
592d1631
L
8227 { Bad_Opcode },
8228 { Bad_Opcode },
8229 { Bad_Opcode },
8230 { Bad_Opcode },
8231 { Bad_Opcode },
8232 { Bad_Opcode },
8233 { Bad_Opcode },
8234 { Bad_Opcode },
5dd85c99 8235 /* b0 */
592d1631
L
8236 { Bad_Opcode },
8237 { Bad_Opcode },
8238 { Bad_Opcode },
8239 { Bad_Opcode },
8240 { Bad_Opcode },
8241 { Bad_Opcode },
8242 { Bad_Opcode },
8243 { Bad_Opcode },
5dd85c99 8244 /* b8 */
592d1631
L
8245 { Bad_Opcode },
8246 { Bad_Opcode },
8247 { Bad_Opcode },
8248 { Bad_Opcode },
8249 { Bad_Opcode },
8250 { Bad_Opcode },
8251 { Bad_Opcode },
8252 { Bad_Opcode },
5dd85c99 8253 /* c0 */
592d1631 8254 { Bad_Opcode },
bf890a93
IT
8255 { "vphaddbw", { XM, EXxmm }, 0 },
8256 { "vphaddbd", { XM, EXxmm }, 0 },
8257 { "vphaddbq", { XM, EXxmm }, 0 },
592d1631
L
8258 { Bad_Opcode },
8259 { Bad_Opcode },
bf890a93
IT
8260 { "vphaddwd", { XM, EXxmm }, 0 },
8261 { "vphaddwq", { XM, EXxmm }, 0 },
5dd85c99 8262 /* c8 */
592d1631
L
8263 { Bad_Opcode },
8264 { Bad_Opcode },
8265 { Bad_Opcode },
bf890a93 8266 { "vphadddq", { XM, EXxmm }, 0 },
592d1631
L
8267 { Bad_Opcode },
8268 { Bad_Opcode },
8269 { Bad_Opcode },
8270 { Bad_Opcode },
5dd85c99 8271 /* d0 */
592d1631 8272 { Bad_Opcode },
bf890a93
IT
8273 { "vphaddubw", { XM, EXxmm }, 0 },
8274 { "vphaddubd", { XM, EXxmm }, 0 },
8275 { "vphaddubq", { XM, EXxmm }, 0 },
592d1631
L
8276 { Bad_Opcode },
8277 { Bad_Opcode },
bf890a93
IT
8278 { "vphadduwd", { XM, EXxmm }, 0 },
8279 { "vphadduwq", { XM, EXxmm }, 0 },
5dd85c99 8280 /* d8 */
592d1631
L
8281 { Bad_Opcode },
8282 { Bad_Opcode },
8283 { Bad_Opcode },
bf890a93 8284 { "vphaddudq", { XM, EXxmm }, 0 },
592d1631
L
8285 { Bad_Opcode },
8286 { Bad_Opcode },
8287 { Bad_Opcode },
8288 { Bad_Opcode },
5dd85c99 8289 /* e0 */
592d1631 8290 { Bad_Opcode },
bf890a93
IT
8291 { "vphsubbw", { XM, EXxmm }, 0 },
8292 { "vphsubwd", { XM, EXxmm }, 0 },
8293 { "vphsubdq", { XM, EXxmm }, 0 },
592d1631
L
8294 { Bad_Opcode },
8295 { Bad_Opcode },
8296 { Bad_Opcode },
8297 { Bad_Opcode },
4e7d34a6 8298 /* e8 */
592d1631
L
8299 { Bad_Opcode },
8300 { Bad_Opcode },
8301 { Bad_Opcode },
8302 { Bad_Opcode },
8303 { Bad_Opcode },
8304 { Bad_Opcode },
8305 { Bad_Opcode },
8306 { Bad_Opcode },
4e7d34a6 8307 /* f0 */
592d1631
L
8308 { Bad_Opcode },
8309 { Bad_Opcode },
8310 { Bad_Opcode },
8311 { Bad_Opcode },
8312 { Bad_Opcode },
8313 { Bad_Opcode },
8314 { Bad_Opcode },
8315 { Bad_Opcode },
4e7d34a6 8316 /* f8 */
592d1631
L
8317 { Bad_Opcode },
8318 { Bad_Opcode },
8319 { Bad_Opcode },
8320 { Bad_Opcode },
8321 { Bad_Opcode },
8322 { Bad_Opcode },
8323 { Bad_Opcode },
8324 { Bad_Opcode },
4e7d34a6 8325 },
f88c9eb0 8326 /* XOP_0A */
4e7d34a6
L
8327 {
8328 /* 00 */
592d1631
L
8329 { Bad_Opcode },
8330 { Bad_Opcode },
8331 { Bad_Opcode },
8332 { Bad_Opcode },
8333 { Bad_Opcode },
8334 { Bad_Opcode },
8335 { Bad_Opcode },
8336 { Bad_Opcode },
4e7d34a6 8337 /* 08 */
592d1631
L
8338 { Bad_Opcode },
8339 { Bad_Opcode },
8340 { Bad_Opcode },
8341 { Bad_Opcode },
8342 { Bad_Opcode },
8343 { Bad_Opcode },
8344 { Bad_Opcode },
8345 { Bad_Opcode },
4e7d34a6 8346 /* 10 */
bf890a93 8347 { "bextr", { Gv, Ev, Iq }, 0 },
592d1631 8348 { Bad_Opcode },
f88c9eb0 8349 { REG_TABLE (REG_XOP_LWP) },
592d1631
L
8350 { Bad_Opcode },
8351 { Bad_Opcode },
8352 { Bad_Opcode },
8353 { Bad_Opcode },
8354 { Bad_Opcode },
4e7d34a6 8355 /* 18 */
592d1631
L
8356 { Bad_Opcode },
8357 { Bad_Opcode },
8358 { Bad_Opcode },
8359 { Bad_Opcode },
8360 { Bad_Opcode },
8361 { Bad_Opcode },
8362 { Bad_Opcode },
8363 { Bad_Opcode },
4e7d34a6 8364 /* 20 */
592d1631
L
8365 { Bad_Opcode },
8366 { Bad_Opcode },
8367 { Bad_Opcode },
8368 { Bad_Opcode },
8369 { Bad_Opcode },
8370 { Bad_Opcode },
8371 { Bad_Opcode },
8372 { Bad_Opcode },
4e7d34a6 8373 /* 28 */
592d1631
L
8374 { Bad_Opcode },
8375 { Bad_Opcode },
8376 { Bad_Opcode },
8377 { Bad_Opcode },
8378 { Bad_Opcode },
8379 { Bad_Opcode },
8380 { Bad_Opcode },
8381 { Bad_Opcode },
4e7d34a6 8382 /* 30 */
592d1631
L
8383 { Bad_Opcode },
8384 { Bad_Opcode },
8385 { Bad_Opcode },
8386 { Bad_Opcode },
8387 { Bad_Opcode },
8388 { Bad_Opcode },
8389 { Bad_Opcode },
8390 { Bad_Opcode },
c0f3af97 8391 /* 38 */
592d1631
L
8392 { Bad_Opcode },
8393 { Bad_Opcode },
8394 { Bad_Opcode },
8395 { Bad_Opcode },
8396 { Bad_Opcode },
8397 { Bad_Opcode },
8398 { Bad_Opcode },
8399 { Bad_Opcode },
c0f3af97 8400 /* 40 */
592d1631
L
8401 { Bad_Opcode },
8402 { Bad_Opcode },
8403 { Bad_Opcode },
8404 { Bad_Opcode },
8405 { Bad_Opcode },
8406 { Bad_Opcode },
8407 { Bad_Opcode },
8408 { Bad_Opcode },
c1e679ec 8409 /* 48 */
592d1631
L
8410 { Bad_Opcode },
8411 { Bad_Opcode },
8412 { Bad_Opcode },
8413 { Bad_Opcode },
8414 { Bad_Opcode },
8415 { Bad_Opcode },
8416 { Bad_Opcode },
8417 { Bad_Opcode },
c1e679ec 8418 /* 50 */
592d1631
L
8419 { Bad_Opcode },
8420 { Bad_Opcode },
8421 { Bad_Opcode },
8422 { Bad_Opcode },
8423 { Bad_Opcode },
8424 { Bad_Opcode },
8425 { Bad_Opcode },
8426 { Bad_Opcode },
4e7d34a6 8427 /* 58 */
592d1631
L
8428 { Bad_Opcode },
8429 { Bad_Opcode },
8430 { Bad_Opcode },
8431 { Bad_Opcode },
8432 { Bad_Opcode },
8433 { Bad_Opcode },
8434 { Bad_Opcode },
8435 { Bad_Opcode },
4e7d34a6 8436 /* 60 */
592d1631
L
8437 { Bad_Opcode },
8438 { Bad_Opcode },
8439 { Bad_Opcode },
8440 { Bad_Opcode },
8441 { Bad_Opcode },
8442 { Bad_Opcode },
8443 { Bad_Opcode },
8444 { Bad_Opcode },
4e7d34a6 8445 /* 68 */
592d1631
L
8446 { Bad_Opcode },
8447 { Bad_Opcode },
8448 { Bad_Opcode },
8449 { Bad_Opcode },
8450 { Bad_Opcode },
8451 { Bad_Opcode },
8452 { Bad_Opcode },
8453 { Bad_Opcode },
4e7d34a6 8454 /* 70 */
592d1631
L
8455 { Bad_Opcode },
8456 { Bad_Opcode },
8457 { Bad_Opcode },
8458 { Bad_Opcode },
8459 { Bad_Opcode },
8460 { Bad_Opcode },
8461 { Bad_Opcode },
8462 { Bad_Opcode },
4e7d34a6 8463 /* 78 */
592d1631
L
8464 { Bad_Opcode },
8465 { Bad_Opcode },
8466 { Bad_Opcode },
8467 { Bad_Opcode },
8468 { Bad_Opcode },
8469 { Bad_Opcode },
8470 { Bad_Opcode },
8471 { Bad_Opcode },
4e7d34a6 8472 /* 80 */
592d1631
L
8473 { Bad_Opcode },
8474 { Bad_Opcode },
8475 { Bad_Opcode },
8476 { Bad_Opcode },
8477 { Bad_Opcode },
8478 { Bad_Opcode },
8479 { Bad_Opcode },
8480 { Bad_Opcode },
4e7d34a6 8481 /* 88 */
592d1631
L
8482 { Bad_Opcode },
8483 { Bad_Opcode },
8484 { Bad_Opcode },
8485 { Bad_Opcode },
8486 { Bad_Opcode },
8487 { Bad_Opcode },
8488 { Bad_Opcode },
8489 { Bad_Opcode },
4e7d34a6 8490 /* 90 */
592d1631
L
8491 { Bad_Opcode },
8492 { Bad_Opcode },
8493 { Bad_Opcode },
8494 { Bad_Opcode },
8495 { Bad_Opcode },
8496 { Bad_Opcode },
8497 { Bad_Opcode },
8498 { Bad_Opcode },
4e7d34a6 8499 /* 98 */
592d1631
L
8500 { Bad_Opcode },
8501 { Bad_Opcode },
8502 { Bad_Opcode },
8503 { Bad_Opcode },
8504 { Bad_Opcode },
8505 { Bad_Opcode },
8506 { Bad_Opcode },
8507 { Bad_Opcode },
4e7d34a6 8508 /* a0 */
592d1631
L
8509 { Bad_Opcode },
8510 { Bad_Opcode },
8511 { Bad_Opcode },
8512 { Bad_Opcode },
8513 { Bad_Opcode },
8514 { Bad_Opcode },
8515 { Bad_Opcode },
8516 { Bad_Opcode },
4e7d34a6 8517 /* a8 */
592d1631
L
8518 { Bad_Opcode },
8519 { Bad_Opcode },
8520 { Bad_Opcode },
8521 { Bad_Opcode },
8522 { Bad_Opcode },
8523 { Bad_Opcode },
8524 { Bad_Opcode },
8525 { Bad_Opcode },
d5d7db8e 8526 /* b0 */
592d1631
L
8527 { Bad_Opcode },
8528 { Bad_Opcode },
8529 { Bad_Opcode },
8530 { Bad_Opcode },
8531 { Bad_Opcode },
8532 { Bad_Opcode },
8533 { Bad_Opcode },
8534 { Bad_Opcode },
85f10a01 8535 /* b8 */
592d1631
L
8536 { Bad_Opcode },
8537 { Bad_Opcode },
8538 { Bad_Opcode },
8539 { Bad_Opcode },
8540 { Bad_Opcode },
8541 { Bad_Opcode },
8542 { Bad_Opcode },
8543 { Bad_Opcode },
85f10a01 8544 /* c0 */
592d1631
L
8545 { Bad_Opcode },
8546 { Bad_Opcode },
8547 { Bad_Opcode },
8548 { Bad_Opcode },
8549 { Bad_Opcode },
8550 { Bad_Opcode },
8551 { Bad_Opcode },
8552 { Bad_Opcode },
85f10a01 8553 /* c8 */
592d1631
L
8554 { Bad_Opcode },
8555 { Bad_Opcode },
8556 { Bad_Opcode },
8557 { Bad_Opcode },
8558 { Bad_Opcode },
8559 { Bad_Opcode },
8560 { Bad_Opcode },
8561 { Bad_Opcode },
85f10a01 8562 /* d0 */
592d1631
L
8563 { Bad_Opcode },
8564 { Bad_Opcode },
8565 { Bad_Opcode },
8566 { Bad_Opcode },
8567 { Bad_Opcode },
8568 { Bad_Opcode },
8569 { Bad_Opcode },
8570 { Bad_Opcode },
85f10a01 8571 /* d8 */
592d1631
L
8572 { Bad_Opcode },
8573 { Bad_Opcode },
8574 { Bad_Opcode },
8575 { Bad_Opcode },
8576 { Bad_Opcode },
8577 { Bad_Opcode },
8578 { Bad_Opcode },
8579 { Bad_Opcode },
85f10a01 8580 /* e0 */
592d1631
L
8581 { Bad_Opcode },
8582 { Bad_Opcode },
8583 { Bad_Opcode },
8584 { Bad_Opcode },
8585 { Bad_Opcode },
8586 { Bad_Opcode },
8587 { Bad_Opcode },
8588 { Bad_Opcode },
85f10a01 8589 /* e8 */
592d1631
L
8590 { Bad_Opcode },
8591 { Bad_Opcode },
8592 { Bad_Opcode },
8593 { Bad_Opcode },
8594 { Bad_Opcode },
8595 { Bad_Opcode },
8596 { Bad_Opcode },
8597 { Bad_Opcode },
85f10a01 8598 /* f0 */
592d1631
L
8599 { Bad_Opcode },
8600 { Bad_Opcode },
8601 { Bad_Opcode },
8602 { Bad_Opcode },
8603 { Bad_Opcode },
8604 { Bad_Opcode },
8605 { Bad_Opcode },
8606 { Bad_Opcode },
85f10a01 8607 /* f8 */
592d1631
L
8608 { Bad_Opcode },
8609 { Bad_Opcode },
8610 { Bad_Opcode },
8611 { Bad_Opcode },
8612 { Bad_Opcode },
8613 { Bad_Opcode },
8614 { Bad_Opcode },
8615 { Bad_Opcode },
85f10a01 8616 },
c0f3af97
L
8617};
8618
8619static const struct dis386 vex_table[][256] = {
8620 /* VEX_0F */
85f10a01
MM
8621 {
8622 /* 00 */
592d1631
L
8623 { Bad_Opcode },
8624 { Bad_Opcode },
8625 { Bad_Opcode },
8626 { Bad_Opcode },
8627 { Bad_Opcode },
8628 { Bad_Opcode },
8629 { Bad_Opcode },
8630 { Bad_Opcode },
85f10a01 8631 /* 08 */
592d1631
L
8632 { Bad_Opcode },
8633 { Bad_Opcode },
8634 { Bad_Opcode },
8635 { Bad_Opcode },
8636 { Bad_Opcode },
8637 { Bad_Opcode },
8638 { Bad_Opcode },
8639 { Bad_Opcode },
c0f3af97 8640 /* 10 */
592a252b
L
8641 { PREFIX_TABLE (PREFIX_VEX_0F10) },
8642 { PREFIX_TABLE (PREFIX_VEX_0F11) },
8643 { PREFIX_TABLE (PREFIX_VEX_0F12) },
8644 { MOD_TABLE (MOD_VEX_0F13) },
8645 { VEX_W_TABLE (VEX_W_0F14) },
8646 { VEX_W_TABLE (VEX_W_0F15) },
8647 { PREFIX_TABLE (PREFIX_VEX_0F16) },
8648 { MOD_TABLE (MOD_VEX_0F17) },
c0f3af97 8649 /* 18 */
592d1631
L
8650 { Bad_Opcode },
8651 { Bad_Opcode },
8652 { Bad_Opcode },
8653 { Bad_Opcode },
8654 { Bad_Opcode },
8655 { Bad_Opcode },
8656 { Bad_Opcode },
8657 { Bad_Opcode },
c0f3af97 8658 /* 20 */
592d1631
L
8659 { Bad_Opcode },
8660 { Bad_Opcode },
8661 { Bad_Opcode },
8662 { Bad_Opcode },
8663 { Bad_Opcode },
8664 { Bad_Opcode },
8665 { Bad_Opcode },
8666 { Bad_Opcode },
c0f3af97 8667 /* 28 */
592a252b
L
8668 { VEX_W_TABLE (VEX_W_0F28) },
8669 { VEX_W_TABLE (VEX_W_0F29) },
8670 { PREFIX_TABLE (PREFIX_VEX_0F2A) },
8671 { MOD_TABLE (MOD_VEX_0F2B) },
8672 { PREFIX_TABLE (PREFIX_VEX_0F2C) },
8673 { PREFIX_TABLE (PREFIX_VEX_0F2D) },
8674 { PREFIX_TABLE (PREFIX_VEX_0F2E) },
8675 { PREFIX_TABLE (PREFIX_VEX_0F2F) },
85f10a01 8676 /* 30 */
592d1631
L
8677 { Bad_Opcode },
8678 { Bad_Opcode },
8679 { Bad_Opcode },
8680 { Bad_Opcode },
8681 { Bad_Opcode },
8682 { Bad_Opcode },
8683 { Bad_Opcode },
8684 { Bad_Opcode },
4e7d34a6 8685 /* 38 */
592d1631
L
8686 { Bad_Opcode },
8687 { Bad_Opcode },
8688 { Bad_Opcode },
8689 { Bad_Opcode },
8690 { Bad_Opcode },
8691 { Bad_Opcode },
8692 { Bad_Opcode },
8693 { Bad_Opcode },
d5d7db8e 8694 /* 40 */
592d1631 8695 { Bad_Opcode },
43234a1e
L
8696 { PREFIX_TABLE (PREFIX_VEX_0F41) },
8697 { PREFIX_TABLE (PREFIX_VEX_0F42) },
592d1631 8698 { Bad_Opcode },
43234a1e
L
8699 { PREFIX_TABLE (PREFIX_VEX_0F44) },
8700 { PREFIX_TABLE (PREFIX_VEX_0F45) },
8701 { PREFIX_TABLE (PREFIX_VEX_0F46) },
8702 { PREFIX_TABLE (PREFIX_VEX_0F47) },
85f10a01 8703 /* 48 */
592d1631
L
8704 { Bad_Opcode },
8705 { Bad_Opcode },
1ba585e8 8706 { PREFIX_TABLE (PREFIX_VEX_0F4A) },
43234a1e 8707 { PREFIX_TABLE (PREFIX_VEX_0F4B) },
592d1631
L
8708 { Bad_Opcode },
8709 { Bad_Opcode },
8710 { Bad_Opcode },
8711 { Bad_Opcode },
d5d7db8e 8712 /* 50 */
592a252b
L
8713 { MOD_TABLE (MOD_VEX_0F50) },
8714 { PREFIX_TABLE (PREFIX_VEX_0F51) },
8715 { PREFIX_TABLE (PREFIX_VEX_0F52) },
8716 { PREFIX_TABLE (PREFIX_VEX_0F53) },
bf890a93
IT
8717 { "vandpX", { XM, Vex, EXx }, 0 },
8718 { "vandnpX", { XM, Vex, EXx }, 0 },
8719 { "vorpX", { XM, Vex, EXx }, 0 },
8720 { "vxorpX", { XM, Vex, EXx }, 0 },
c0f3af97 8721 /* 58 */
592a252b
L
8722 { PREFIX_TABLE (PREFIX_VEX_0F58) },
8723 { PREFIX_TABLE (PREFIX_VEX_0F59) },
8724 { PREFIX_TABLE (PREFIX_VEX_0F5A) },
8725 { PREFIX_TABLE (PREFIX_VEX_0F5B) },
8726 { PREFIX_TABLE (PREFIX_VEX_0F5C) },
8727 { PREFIX_TABLE (PREFIX_VEX_0F5D) },
8728 { PREFIX_TABLE (PREFIX_VEX_0F5E) },
8729 { PREFIX_TABLE (PREFIX_VEX_0F5F) },
c0f3af97 8730 /* 60 */
592a252b
L
8731 { PREFIX_TABLE (PREFIX_VEX_0F60) },
8732 { PREFIX_TABLE (PREFIX_VEX_0F61) },
8733 { PREFIX_TABLE (PREFIX_VEX_0F62) },
8734 { PREFIX_TABLE (PREFIX_VEX_0F63) },
8735 { PREFIX_TABLE (PREFIX_VEX_0F64) },
8736 { PREFIX_TABLE (PREFIX_VEX_0F65) },
8737 { PREFIX_TABLE (PREFIX_VEX_0F66) },
8738 { PREFIX_TABLE (PREFIX_VEX_0F67) },
c0f3af97 8739 /* 68 */
592a252b
L
8740 { PREFIX_TABLE (PREFIX_VEX_0F68) },
8741 { PREFIX_TABLE (PREFIX_VEX_0F69) },
8742 { PREFIX_TABLE (PREFIX_VEX_0F6A) },
8743 { PREFIX_TABLE (PREFIX_VEX_0F6B) },
8744 { PREFIX_TABLE (PREFIX_VEX_0F6C) },
8745 { PREFIX_TABLE (PREFIX_VEX_0F6D) },
8746 { PREFIX_TABLE (PREFIX_VEX_0F6E) },
8747 { PREFIX_TABLE (PREFIX_VEX_0F6F) },
c0f3af97 8748 /* 70 */
592a252b
L
8749 { PREFIX_TABLE (PREFIX_VEX_0F70) },
8750 { REG_TABLE (REG_VEX_0F71) },
8751 { REG_TABLE (REG_VEX_0F72) },
8752 { REG_TABLE (REG_VEX_0F73) },
8753 { PREFIX_TABLE (PREFIX_VEX_0F74) },
8754 { PREFIX_TABLE (PREFIX_VEX_0F75) },
8755 { PREFIX_TABLE (PREFIX_VEX_0F76) },
8756 { PREFIX_TABLE (PREFIX_VEX_0F77) },
c0f3af97 8757 /* 78 */
592d1631
L
8758 { Bad_Opcode },
8759 { Bad_Opcode },
8760 { Bad_Opcode },
8761 { Bad_Opcode },
592a252b
L
8762 { PREFIX_TABLE (PREFIX_VEX_0F7C) },
8763 { PREFIX_TABLE (PREFIX_VEX_0F7D) },
8764 { PREFIX_TABLE (PREFIX_VEX_0F7E) },
8765 { PREFIX_TABLE (PREFIX_VEX_0F7F) },
c0f3af97 8766 /* 80 */
592d1631
L
8767 { Bad_Opcode },
8768 { Bad_Opcode },
8769 { Bad_Opcode },
8770 { Bad_Opcode },
8771 { Bad_Opcode },
8772 { Bad_Opcode },
8773 { Bad_Opcode },
8774 { Bad_Opcode },
c0f3af97 8775 /* 88 */
592d1631
L
8776 { Bad_Opcode },
8777 { Bad_Opcode },
8778 { Bad_Opcode },
8779 { Bad_Opcode },
8780 { Bad_Opcode },
8781 { Bad_Opcode },
8782 { Bad_Opcode },
8783 { Bad_Opcode },
c0f3af97 8784 /* 90 */
43234a1e
L
8785 { PREFIX_TABLE (PREFIX_VEX_0F90) },
8786 { PREFIX_TABLE (PREFIX_VEX_0F91) },
8787 { PREFIX_TABLE (PREFIX_VEX_0F92) },
8788 { PREFIX_TABLE (PREFIX_VEX_0F93) },
592d1631
L
8789 { Bad_Opcode },
8790 { Bad_Opcode },
8791 { Bad_Opcode },
8792 { Bad_Opcode },
c0f3af97 8793 /* 98 */
43234a1e 8794 { PREFIX_TABLE (PREFIX_VEX_0F98) },
1ba585e8 8795 { PREFIX_TABLE (PREFIX_VEX_0F99) },
592d1631
L
8796 { Bad_Opcode },
8797 { Bad_Opcode },
8798 { Bad_Opcode },
8799 { Bad_Opcode },
8800 { Bad_Opcode },
8801 { Bad_Opcode },
c0f3af97 8802 /* a0 */
592d1631
L
8803 { Bad_Opcode },
8804 { Bad_Opcode },
8805 { Bad_Opcode },
8806 { Bad_Opcode },
8807 { Bad_Opcode },
8808 { Bad_Opcode },
8809 { Bad_Opcode },
8810 { Bad_Opcode },
c0f3af97 8811 /* a8 */
592d1631
L
8812 { Bad_Opcode },
8813 { Bad_Opcode },
8814 { Bad_Opcode },
8815 { Bad_Opcode },
8816 { Bad_Opcode },
8817 { Bad_Opcode },
592a252b 8818 { REG_TABLE (REG_VEX_0FAE) },
592d1631 8819 { Bad_Opcode },
c0f3af97 8820 /* b0 */
592d1631
L
8821 { Bad_Opcode },
8822 { Bad_Opcode },
8823 { Bad_Opcode },
8824 { Bad_Opcode },
8825 { Bad_Opcode },
8826 { Bad_Opcode },
8827 { Bad_Opcode },
8828 { Bad_Opcode },
c0f3af97 8829 /* b8 */
592d1631
L
8830 { Bad_Opcode },
8831 { Bad_Opcode },
8832 { Bad_Opcode },
8833 { Bad_Opcode },
8834 { Bad_Opcode },
8835 { Bad_Opcode },
8836 { Bad_Opcode },
8837 { Bad_Opcode },
c0f3af97 8838 /* c0 */
592d1631
L
8839 { Bad_Opcode },
8840 { Bad_Opcode },
592a252b 8841 { PREFIX_TABLE (PREFIX_VEX_0FC2) },
592d1631 8842 { Bad_Opcode },
592a252b
L
8843 { PREFIX_TABLE (PREFIX_VEX_0FC4) },
8844 { PREFIX_TABLE (PREFIX_VEX_0FC5) },
bf890a93 8845 { "vshufpX", { XM, Vex, EXx, Ib }, 0 },
592d1631 8846 { Bad_Opcode },
c0f3af97 8847 /* c8 */
592d1631
L
8848 { Bad_Opcode },
8849 { Bad_Opcode },
8850 { Bad_Opcode },
8851 { Bad_Opcode },
8852 { Bad_Opcode },
8853 { Bad_Opcode },
8854 { Bad_Opcode },
8855 { Bad_Opcode },
c0f3af97 8856 /* d0 */
592a252b
L
8857 { PREFIX_TABLE (PREFIX_VEX_0FD0) },
8858 { PREFIX_TABLE (PREFIX_VEX_0FD1) },
8859 { PREFIX_TABLE (PREFIX_VEX_0FD2) },
8860 { PREFIX_TABLE (PREFIX_VEX_0FD3) },
8861 { PREFIX_TABLE (PREFIX_VEX_0FD4) },
8862 { PREFIX_TABLE (PREFIX_VEX_0FD5) },
8863 { PREFIX_TABLE (PREFIX_VEX_0FD6) },
8864 { PREFIX_TABLE (PREFIX_VEX_0FD7) },
c0f3af97 8865 /* d8 */
592a252b
L
8866 { PREFIX_TABLE (PREFIX_VEX_0FD8) },
8867 { PREFIX_TABLE (PREFIX_VEX_0FD9) },
8868 { PREFIX_TABLE (PREFIX_VEX_0FDA) },
8869 { PREFIX_TABLE (PREFIX_VEX_0FDB) },
8870 { PREFIX_TABLE (PREFIX_VEX_0FDC) },
8871 { PREFIX_TABLE (PREFIX_VEX_0FDD) },
8872 { PREFIX_TABLE (PREFIX_VEX_0FDE) },
8873 { PREFIX_TABLE (PREFIX_VEX_0FDF) },
c0f3af97 8874 /* e0 */
592a252b
L
8875 { PREFIX_TABLE (PREFIX_VEX_0FE0) },
8876 { PREFIX_TABLE (PREFIX_VEX_0FE1) },
8877 { PREFIX_TABLE (PREFIX_VEX_0FE2) },
8878 { PREFIX_TABLE (PREFIX_VEX_0FE3) },
8879 { PREFIX_TABLE (PREFIX_VEX_0FE4) },
8880 { PREFIX_TABLE (PREFIX_VEX_0FE5) },
8881 { PREFIX_TABLE (PREFIX_VEX_0FE6) },
8882 { PREFIX_TABLE (PREFIX_VEX_0FE7) },
c0f3af97 8883 /* e8 */
592a252b
L
8884 { PREFIX_TABLE (PREFIX_VEX_0FE8) },
8885 { PREFIX_TABLE (PREFIX_VEX_0FE9) },
8886 { PREFIX_TABLE (PREFIX_VEX_0FEA) },
8887 { PREFIX_TABLE (PREFIX_VEX_0FEB) },
8888 { PREFIX_TABLE (PREFIX_VEX_0FEC) },
8889 { PREFIX_TABLE (PREFIX_VEX_0FED) },
8890 { PREFIX_TABLE (PREFIX_VEX_0FEE) },
8891 { PREFIX_TABLE (PREFIX_VEX_0FEF) },
c0f3af97 8892 /* f0 */
592a252b
L
8893 { PREFIX_TABLE (PREFIX_VEX_0FF0) },
8894 { PREFIX_TABLE (PREFIX_VEX_0FF1) },
8895 { PREFIX_TABLE (PREFIX_VEX_0FF2) },
8896 { PREFIX_TABLE (PREFIX_VEX_0FF3) },
8897 { PREFIX_TABLE (PREFIX_VEX_0FF4) },
8898 { PREFIX_TABLE (PREFIX_VEX_0FF5) },
8899 { PREFIX_TABLE (PREFIX_VEX_0FF6) },
8900 { PREFIX_TABLE (PREFIX_VEX_0FF7) },
c0f3af97 8901 /* f8 */
592a252b
L
8902 { PREFIX_TABLE (PREFIX_VEX_0FF8) },
8903 { PREFIX_TABLE (PREFIX_VEX_0FF9) },
8904 { PREFIX_TABLE (PREFIX_VEX_0FFA) },
8905 { PREFIX_TABLE (PREFIX_VEX_0FFB) },
8906 { PREFIX_TABLE (PREFIX_VEX_0FFC) },
8907 { PREFIX_TABLE (PREFIX_VEX_0FFD) },
8908 { PREFIX_TABLE (PREFIX_VEX_0FFE) },
592d1631 8909 { Bad_Opcode },
c0f3af97
L
8910 },
8911 /* VEX_0F38 */
8912 {
8913 /* 00 */
592a252b
L
8914 { PREFIX_TABLE (PREFIX_VEX_0F3800) },
8915 { PREFIX_TABLE (PREFIX_VEX_0F3801) },
8916 { PREFIX_TABLE (PREFIX_VEX_0F3802) },
8917 { PREFIX_TABLE (PREFIX_VEX_0F3803) },
8918 { PREFIX_TABLE (PREFIX_VEX_0F3804) },
8919 { PREFIX_TABLE (PREFIX_VEX_0F3805) },
8920 { PREFIX_TABLE (PREFIX_VEX_0F3806) },
8921 { PREFIX_TABLE (PREFIX_VEX_0F3807) },
c0f3af97 8922 /* 08 */
592a252b
L
8923 { PREFIX_TABLE (PREFIX_VEX_0F3808) },
8924 { PREFIX_TABLE (PREFIX_VEX_0F3809) },
8925 { PREFIX_TABLE (PREFIX_VEX_0F380A) },
8926 { PREFIX_TABLE (PREFIX_VEX_0F380B) },
8927 { PREFIX_TABLE (PREFIX_VEX_0F380C) },
8928 { PREFIX_TABLE (PREFIX_VEX_0F380D) },
8929 { PREFIX_TABLE (PREFIX_VEX_0F380E) },
8930 { PREFIX_TABLE (PREFIX_VEX_0F380F) },
c0f3af97 8931 /* 10 */
592d1631
L
8932 { Bad_Opcode },
8933 { Bad_Opcode },
8934 { Bad_Opcode },
592a252b 8935 { PREFIX_TABLE (PREFIX_VEX_0F3813) },
592d1631
L
8936 { Bad_Opcode },
8937 { Bad_Opcode },
6c30d220 8938 { PREFIX_TABLE (PREFIX_VEX_0F3816) },
592a252b 8939 { PREFIX_TABLE (PREFIX_VEX_0F3817) },
c0f3af97 8940 /* 18 */
592a252b
L
8941 { PREFIX_TABLE (PREFIX_VEX_0F3818) },
8942 { PREFIX_TABLE (PREFIX_VEX_0F3819) },
8943 { PREFIX_TABLE (PREFIX_VEX_0F381A) },
592d1631 8944 { Bad_Opcode },
592a252b
L
8945 { PREFIX_TABLE (PREFIX_VEX_0F381C) },
8946 { PREFIX_TABLE (PREFIX_VEX_0F381D) },
8947 { PREFIX_TABLE (PREFIX_VEX_0F381E) },
592d1631 8948 { Bad_Opcode },
c0f3af97 8949 /* 20 */
592a252b
L
8950 { PREFIX_TABLE (PREFIX_VEX_0F3820) },
8951 { PREFIX_TABLE (PREFIX_VEX_0F3821) },
8952 { PREFIX_TABLE (PREFIX_VEX_0F3822) },
8953 { PREFIX_TABLE (PREFIX_VEX_0F3823) },
8954 { PREFIX_TABLE (PREFIX_VEX_0F3824) },
8955 { PREFIX_TABLE (PREFIX_VEX_0F3825) },
592d1631
L
8956 { Bad_Opcode },
8957 { Bad_Opcode },
c0f3af97 8958 /* 28 */
592a252b
L
8959 { PREFIX_TABLE (PREFIX_VEX_0F3828) },
8960 { PREFIX_TABLE (PREFIX_VEX_0F3829) },
8961 { PREFIX_TABLE (PREFIX_VEX_0F382A) },
8962 { PREFIX_TABLE (PREFIX_VEX_0F382B) },
8963 { PREFIX_TABLE (PREFIX_VEX_0F382C) },
8964 { PREFIX_TABLE (PREFIX_VEX_0F382D) },
8965 { PREFIX_TABLE (PREFIX_VEX_0F382E) },
8966 { PREFIX_TABLE (PREFIX_VEX_0F382F) },
c0f3af97 8967 /* 30 */
592a252b
L
8968 { PREFIX_TABLE (PREFIX_VEX_0F3830) },
8969 { PREFIX_TABLE (PREFIX_VEX_0F3831) },
8970 { PREFIX_TABLE (PREFIX_VEX_0F3832) },
8971 { PREFIX_TABLE (PREFIX_VEX_0F3833) },
8972 { PREFIX_TABLE (PREFIX_VEX_0F3834) },
8973 { PREFIX_TABLE (PREFIX_VEX_0F3835) },
6c30d220 8974 { PREFIX_TABLE (PREFIX_VEX_0F3836) },
592a252b 8975 { PREFIX_TABLE (PREFIX_VEX_0F3837) },
c0f3af97 8976 /* 38 */
592a252b
L
8977 { PREFIX_TABLE (PREFIX_VEX_0F3838) },
8978 { PREFIX_TABLE (PREFIX_VEX_0F3839) },
8979 { PREFIX_TABLE (PREFIX_VEX_0F383A) },
8980 { PREFIX_TABLE (PREFIX_VEX_0F383B) },
8981 { PREFIX_TABLE (PREFIX_VEX_0F383C) },
8982 { PREFIX_TABLE (PREFIX_VEX_0F383D) },
8983 { PREFIX_TABLE (PREFIX_VEX_0F383E) },
8984 { PREFIX_TABLE (PREFIX_VEX_0F383F) },
c0f3af97 8985 /* 40 */
592a252b
L
8986 { PREFIX_TABLE (PREFIX_VEX_0F3840) },
8987 { PREFIX_TABLE (PREFIX_VEX_0F3841) },
592d1631
L
8988 { Bad_Opcode },
8989 { Bad_Opcode },
8990 { Bad_Opcode },
6c30d220
L
8991 { PREFIX_TABLE (PREFIX_VEX_0F3845) },
8992 { PREFIX_TABLE (PREFIX_VEX_0F3846) },
8993 { PREFIX_TABLE (PREFIX_VEX_0F3847) },
c0f3af97 8994 /* 48 */
592d1631
L
8995 { Bad_Opcode },
8996 { Bad_Opcode },
8997 { Bad_Opcode },
8998 { Bad_Opcode },
8999 { Bad_Opcode },
9000 { Bad_Opcode },
9001 { Bad_Opcode },
9002 { Bad_Opcode },
c0f3af97 9003 /* 50 */
592d1631
L
9004 { Bad_Opcode },
9005 { Bad_Opcode },
9006 { Bad_Opcode },
9007 { Bad_Opcode },
9008 { Bad_Opcode },
9009 { Bad_Opcode },
9010 { Bad_Opcode },
9011 { Bad_Opcode },
c0f3af97 9012 /* 58 */
6c30d220
L
9013 { PREFIX_TABLE (PREFIX_VEX_0F3858) },
9014 { PREFIX_TABLE (PREFIX_VEX_0F3859) },
9015 { PREFIX_TABLE (PREFIX_VEX_0F385A) },
592d1631
L
9016 { Bad_Opcode },
9017 { Bad_Opcode },
9018 { Bad_Opcode },
9019 { Bad_Opcode },
9020 { Bad_Opcode },
c0f3af97 9021 /* 60 */
592d1631
L
9022 { Bad_Opcode },
9023 { Bad_Opcode },
9024 { Bad_Opcode },
9025 { Bad_Opcode },
9026 { Bad_Opcode },
9027 { Bad_Opcode },
9028 { Bad_Opcode },
9029 { Bad_Opcode },
c0f3af97 9030 /* 68 */
592d1631
L
9031 { Bad_Opcode },
9032 { Bad_Opcode },
9033 { Bad_Opcode },
9034 { Bad_Opcode },
9035 { Bad_Opcode },
9036 { Bad_Opcode },
9037 { Bad_Opcode },
9038 { Bad_Opcode },
c0f3af97 9039 /* 70 */
592d1631
L
9040 { Bad_Opcode },
9041 { Bad_Opcode },
9042 { Bad_Opcode },
9043 { Bad_Opcode },
9044 { Bad_Opcode },
9045 { Bad_Opcode },
9046 { Bad_Opcode },
9047 { Bad_Opcode },
c0f3af97 9048 /* 78 */
6c30d220
L
9049 { PREFIX_TABLE (PREFIX_VEX_0F3878) },
9050 { PREFIX_TABLE (PREFIX_VEX_0F3879) },
592d1631
L
9051 { Bad_Opcode },
9052 { Bad_Opcode },
9053 { Bad_Opcode },
9054 { Bad_Opcode },
9055 { Bad_Opcode },
9056 { Bad_Opcode },
c0f3af97 9057 /* 80 */
592d1631
L
9058 { Bad_Opcode },
9059 { Bad_Opcode },
9060 { Bad_Opcode },
9061 { Bad_Opcode },
9062 { Bad_Opcode },
9063 { Bad_Opcode },
9064 { Bad_Opcode },
9065 { Bad_Opcode },
c0f3af97 9066 /* 88 */
592d1631
L
9067 { Bad_Opcode },
9068 { Bad_Opcode },
9069 { Bad_Opcode },
9070 { Bad_Opcode },
6c30d220 9071 { PREFIX_TABLE (PREFIX_VEX_0F388C) },
592d1631 9072 { Bad_Opcode },
6c30d220 9073 { PREFIX_TABLE (PREFIX_VEX_0F388E) },
592d1631 9074 { Bad_Opcode },
c0f3af97 9075 /* 90 */
6c30d220
L
9076 { PREFIX_TABLE (PREFIX_VEX_0F3890) },
9077 { PREFIX_TABLE (PREFIX_VEX_0F3891) },
9078 { PREFIX_TABLE (PREFIX_VEX_0F3892) },
9079 { PREFIX_TABLE (PREFIX_VEX_0F3893) },
592d1631
L
9080 { Bad_Opcode },
9081 { Bad_Opcode },
592a252b
L
9082 { PREFIX_TABLE (PREFIX_VEX_0F3896) },
9083 { PREFIX_TABLE (PREFIX_VEX_0F3897) },
c0f3af97 9084 /* 98 */
592a252b
L
9085 { PREFIX_TABLE (PREFIX_VEX_0F3898) },
9086 { PREFIX_TABLE (PREFIX_VEX_0F3899) },
9087 { PREFIX_TABLE (PREFIX_VEX_0F389A) },
9088 { PREFIX_TABLE (PREFIX_VEX_0F389B) },
9089 { PREFIX_TABLE (PREFIX_VEX_0F389C) },
9090 { PREFIX_TABLE (PREFIX_VEX_0F389D) },
9091 { PREFIX_TABLE (PREFIX_VEX_0F389E) },
9092 { PREFIX_TABLE (PREFIX_VEX_0F389F) },
c0f3af97 9093 /* a0 */
592d1631
L
9094 { Bad_Opcode },
9095 { Bad_Opcode },
9096 { Bad_Opcode },
9097 { Bad_Opcode },
9098 { Bad_Opcode },
9099 { Bad_Opcode },
592a252b
L
9100 { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
9101 { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
c0f3af97 9102 /* a8 */
592a252b
L
9103 { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
9104 { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
9105 { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
9106 { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
9107 { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
9108 { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
9109 { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
9110 { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
c0f3af97 9111 /* b0 */
592d1631
L
9112 { Bad_Opcode },
9113 { Bad_Opcode },
9114 { Bad_Opcode },
9115 { Bad_Opcode },
9116 { Bad_Opcode },
9117 { Bad_Opcode },
592a252b
L
9118 { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
9119 { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
c0f3af97 9120 /* b8 */
592a252b
L
9121 { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
9122 { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
9123 { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
9124 { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
9125 { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
9126 { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
9127 { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
9128 { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
c0f3af97 9129 /* c0 */
592d1631
L
9130 { Bad_Opcode },
9131 { Bad_Opcode },
9132 { Bad_Opcode },
9133 { Bad_Opcode },
9134 { Bad_Opcode },
9135 { Bad_Opcode },
9136 { Bad_Opcode },
9137 { Bad_Opcode },
c0f3af97 9138 /* c8 */
592d1631
L
9139 { Bad_Opcode },
9140 { Bad_Opcode },
9141 { Bad_Opcode },
9142 { Bad_Opcode },
9143 { Bad_Opcode },
9144 { Bad_Opcode },
9145 { Bad_Opcode },
9146 { Bad_Opcode },
c0f3af97 9147 /* d0 */
592d1631
L
9148 { Bad_Opcode },
9149 { Bad_Opcode },
9150 { Bad_Opcode },
9151 { Bad_Opcode },
9152 { Bad_Opcode },
9153 { Bad_Opcode },
9154 { Bad_Opcode },
9155 { Bad_Opcode },
c0f3af97 9156 /* d8 */
592d1631
L
9157 { Bad_Opcode },
9158 { Bad_Opcode },
9159 { Bad_Opcode },
592a252b
L
9160 { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
9161 { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
9162 { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
9163 { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
9164 { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
c0f3af97 9165 /* e0 */
592d1631
L
9166 { Bad_Opcode },
9167 { Bad_Opcode },
9168 { Bad_Opcode },
9169 { Bad_Opcode },
9170 { Bad_Opcode },
9171 { Bad_Opcode },
9172 { Bad_Opcode },
9173 { Bad_Opcode },
c0f3af97 9174 /* e8 */
592d1631
L
9175 { Bad_Opcode },
9176 { Bad_Opcode },
9177 { Bad_Opcode },
9178 { Bad_Opcode },
9179 { Bad_Opcode },
9180 { Bad_Opcode },
9181 { Bad_Opcode },
9182 { Bad_Opcode },
c0f3af97 9183 /* f0 */
592d1631
L
9184 { Bad_Opcode },
9185 { Bad_Opcode },
f12dc422
L
9186 { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
9187 { REG_TABLE (REG_VEX_0F38F3) },
592d1631 9188 { Bad_Opcode },
6c30d220
L
9189 { PREFIX_TABLE (PREFIX_VEX_0F38F5) },
9190 { PREFIX_TABLE (PREFIX_VEX_0F38F6) },
f12dc422 9191 { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
c0f3af97 9192 /* f8 */
592d1631
L
9193 { Bad_Opcode },
9194 { Bad_Opcode },
9195 { Bad_Opcode },
9196 { Bad_Opcode },
9197 { Bad_Opcode },
9198 { Bad_Opcode },
9199 { Bad_Opcode },
9200 { Bad_Opcode },
c0f3af97
L
9201 },
9202 /* VEX_0F3A */
9203 {
9204 /* 00 */
6c30d220
L
9205 { PREFIX_TABLE (PREFIX_VEX_0F3A00) },
9206 { PREFIX_TABLE (PREFIX_VEX_0F3A01) },
9207 { PREFIX_TABLE (PREFIX_VEX_0F3A02) },
592d1631 9208 { Bad_Opcode },
592a252b
L
9209 { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
9210 { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
9211 { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
592d1631 9212 { Bad_Opcode },
c0f3af97 9213 /* 08 */
592a252b
L
9214 { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
9215 { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
9216 { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
9217 { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
9218 { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
9219 { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
9220 { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
9221 { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
c0f3af97 9222 /* 10 */
592d1631
L
9223 { Bad_Opcode },
9224 { Bad_Opcode },
9225 { Bad_Opcode },
9226 { Bad_Opcode },
592a252b
L
9227 { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
9228 { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
9229 { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
9230 { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
c0f3af97 9231 /* 18 */
592a252b
L
9232 { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
9233 { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
592d1631
L
9234 { Bad_Opcode },
9235 { Bad_Opcode },
9236 { Bad_Opcode },
592a252b 9237 { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
592d1631
L
9238 { Bad_Opcode },
9239 { Bad_Opcode },
c0f3af97 9240 /* 20 */
592a252b
L
9241 { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
9242 { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
9243 { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
592d1631
L
9244 { Bad_Opcode },
9245 { Bad_Opcode },
9246 { Bad_Opcode },
9247 { Bad_Opcode },
9248 { Bad_Opcode },
c0f3af97 9249 /* 28 */
592d1631
L
9250 { Bad_Opcode },
9251 { Bad_Opcode },
9252 { Bad_Opcode },
9253 { Bad_Opcode },
9254 { Bad_Opcode },
9255 { Bad_Opcode },
9256 { Bad_Opcode },
9257 { Bad_Opcode },
c0f3af97 9258 /* 30 */
43234a1e 9259 { PREFIX_TABLE (PREFIX_VEX_0F3A30) },
1ba585e8 9260 { PREFIX_TABLE (PREFIX_VEX_0F3A31) },
43234a1e 9261 { PREFIX_TABLE (PREFIX_VEX_0F3A32) },
1ba585e8 9262 { PREFIX_TABLE (PREFIX_VEX_0F3A33) },
592d1631
L
9263 { Bad_Opcode },
9264 { Bad_Opcode },
9265 { Bad_Opcode },
9266 { Bad_Opcode },
c0f3af97 9267 /* 38 */
6c30d220
L
9268 { PREFIX_TABLE (PREFIX_VEX_0F3A38) },
9269 { PREFIX_TABLE (PREFIX_VEX_0F3A39) },
592d1631
L
9270 { Bad_Opcode },
9271 { Bad_Opcode },
9272 { Bad_Opcode },
9273 { Bad_Opcode },
9274 { Bad_Opcode },
9275 { Bad_Opcode },
c0f3af97 9276 /* 40 */
592a252b
L
9277 { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
9278 { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
9279 { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
592d1631 9280 { Bad_Opcode },
592a252b 9281 { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
592d1631 9282 { Bad_Opcode },
6c30d220 9283 { PREFIX_TABLE (PREFIX_VEX_0F3A46) },
592d1631 9284 { Bad_Opcode },
c0f3af97 9285 /* 48 */
592a252b
L
9286 { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
9287 { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
9288 { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
9289 { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
9290 { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
592d1631
L
9291 { Bad_Opcode },
9292 { Bad_Opcode },
9293 { Bad_Opcode },
c0f3af97 9294 /* 50 */
592d1631
L
9295 { Bad_Opcode },
9296 { Bad_Opcode },
9297 { Bad_Opcode },
9298 { Bad_Opcode },
9299 { Bad_Opcode },
9300 { Bad_Opcode },
9301 { Bad_Opcode },
9302 { Bad_Opcode },
c0f3af97 9303 /* 58 */
592d1631
L
9304 { Bad_Opcode },
9305 { Bad_Opcode },
9306 { Bad_Opcode },
9307 { Bad_Opcode },
592a252b
L
9308 { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
9309 { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
9310 { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
9311 { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
c0f3af97 9312 /* 60 */
592a252b
L
9313 { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
9314 { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
9315 { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
9316 { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
592d1631
L
9317 { Bad_Opcode },
9318 { Bad_Opcode },
9319 { Bad_Opcode },
9320 { Bad_Opcode },
c0f3af97 9321 /* 68 */
592a252b
L
9322 { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
9323 { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
9324 { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
9325 { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
9326 { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
9327 { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
9328 { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
9329 { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
c0f3af97 9330 /* 70 */
592d1631
L
9331 { Bad_Opcode },
9332 { Bad_Opcode },
9333 { Bad_Opcode },
9334 { Bad_Opcode },
9335 { Bad_Opcode },
9336 { Bad_Opcode },
9337 { Bad_Opcode },
9338 { Bad_Opcode },
c0f3af97 9339 /* 78 */
592a252b
L
9340 { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
9341 { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
9342 { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
9343 { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
9344 { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
9345 { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
9346 { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
9347 { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
c0f3af97 9348 /* 80 */
592d1631
L
9349 { Bad_Opcode },
9350 { Bad_Opcode },
9351 { Bad_Opcode },
9352 { Bad_Opcode },
9353 { Bad_Opcode },
9354 { Bad_Opcode },
9355 { Bad_Opcode },
9356 { Bad_Opcode },
c0f3af97 9357 /* 88 */
592d1631
L
9358 { Bad_Opcode },
9359 { Bad_Opcode },
9360 { Bad_Opcode },
9361 { Bad_Opcode },
9362 { Bad_Opcode },
9363 { Bad_Opcode },
9364 { Bad_Opcode },
9365 { Bad_Opcode },
c0f3af97 9366 /* 90 */
592d1631
L
9367 { Bad_Opcode },
9368 { Bad_Opcode },
9369 { Bad_Opcode },
9370 { Bad_Opcode },
9371 { Bad_Opcode },
9372 { Bad_Opcode },
9373 { Bad_Opcode },
9374 { Bad_Opcode },
c0f3af97 9375 /* 98 */
592d1631
L
9376 { Bad_Opcode },
9377 { Bad_Opcode },
9378 { Bad_Opcode },
9379 { Bad_Opcode },
9380 { Bad_Opcode },
9381 { Bad_Opcode },
9382 { Bad_Opcode },
9383 { Bad_Opcode },
c0f3af97 9384 /* a0 */
592d1631
L
9385 { Bad_Opcode },
9386 { Bad_Opcode },
9387 { Bad_Opcode },
9388 { Bad_Opcode },
9389 { Bad_Opcode },
9390 { Bad_Opcode },
9391 { Bad_Opcode },
9392 { Bad_Opcode },
c0f3af97 9393 /* a8 */
592d1631
L
9394 { Bad_Opcode },
9395 { Bad_Opcode },
9396 { Bad_Opcode },
9397 { Bad_Opcode },
9398 { Bad_Opcode },
9399 { Bad_Opcode },
9400 { Bad_Opcode },
9401 { Bad_Opcode },
c0f3af97 9402 /* b0 */
592d1631
L
9403 { Bad_Opcode },
9404 { Bad_Opcode },
9405 { Bad_Opcode },
9406 { Bad_Opcode },
9407 { Bad_Opcode },
9408 { Bad_Opcode },
9409 { Bad_Opcode },
9410 { Bad_Opcode },
c0f3af97 9411 /* b8 */
592d1631
L
9412 { Bad_Opcode },
9413 { Bad_Opcode },
9414 { Bad_Opcode },
9415 { Bad_Opcode },
9416 { Bad_Opcode },
9417 { Bad_Opcode },
9418 { Bad_Opcode },
9419 { Bad_Opcode },
c0f3af97 9420 /* c0 */
592d1631
L
9421 { Bad_Opcode },
9422 { Bad_Opcode },
9423 { Bad_Opcode },
9424 { Bad_Opcode },
9425 { Bad_Opcode },
9426 { Bad_Opcode },
9427 { Bad_Opcode },
9428 { Bad_Opcode },
c0f3af97 9429 /* c8 */
592d1631
L
9430 { Bad_Opcode },
9431 { Bad_Opcode },
9432 { Bad_Opcode },
9433 { Bad_Opcode },
9434 { Bad_Opcode },
9435 { Bad_Opcode },
9436 { Bad_Opcode },
9437 { Bad_Opcode },
c0f3af97 9438 /* d0 */
592d1631
L
9439 { Bad_Opcode },
9440 { Bad_Opcode },
9441 { Bad_Opcode },
9442 { Bad_Opcode },
9443 { Bad_Opcode },
9444 { Bad_Opcode },
9445 { Bad_Opcode },
9446 { Bad_Opcode },
c0f3af97 9447 /* d8 */
592d1631
L
9448 { Bad_Opcode },
9449 { Bad_Opcode },
9450 { Bad_Opcode },
9451 { Bad_Opcode },
9452 { Bad_Opcode },
9453 { Bad_Opcode },
9454 { Bad_Opcode },
592a252b 9455 { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
c0f3af97 9456 /* e0 */
592d1631
L
9457 { Bad_Opcode },
9458 { Bad_Opcode },
9459 { Bad_Opcode },
9460 { Bad_Opcode },
9461 { Bad_Opcode },
9462 { Bad_Opcode },
9463 { Bad_Opcode },
9464 { Bad_Opcode },
c0f3af97 9465 /* e8 */
592d1631
L
9466 { Bad_Opcode },
9467 { Bad_Opcode },
9468 { Bad_Opcode },
9469 { Bad_Opcode },
9470 { Bad_Opcode },
9471 { Bad_Opcode },
9472 { Bad_Opcode },
9473 { Bad_Opcode },
c0f3af97 9474 /* f0 */
6c30d220 9475 { PREFIX_TABLE (PREFIX_VEX_0F3AF0) },
592d1631
L
9476 { Bad_Opcode },
9477 { Bad_Opcode },
9478 { Bad_Opcode },
9479 { Bad_Opcode },
9480 { Bad_Opcode },
9481 { Bad_Opcode },
9482 { Bad_Opcode },
c0f3af97 9483 /* f8 */
592d1631
L
9484 { Bad_Opcode },
9485 { Bad_Opcode },
9486 { Bad_Opcode },
9487 { Bad_Opcode },
9488 { Bad_Opcode },
9489 { Bad_Opcode },
9490 { Bad_Opcode },
9491 { Bad_Opcode },
c0f3af97
L
9492 },
9493};
9494
43234a1e
L
9495#define NEED_OPCODE_TABLE
9496#include "i386-dis-evex.h"
9497#undef NEED_OPCODE_TABLE
c0f3af97 9498static const struct dis386 vex_len_table[][2] = {
592a252b 9499 /* VEX_LEN_0F10_P_1 */
c0f3af97 9500 {
592a252b
L
9501 { VEX_W_TABLE (VEX_W_0F10_P_1) },
9502 { VEX_W_TABLE (VEX_W_0F10_P_1) },
c0f3af97
L
9503 },
9504
592a252b 9505 /* VEX_LEN_0F10_P_3 */
c0f3af97 9506 {
592a252b
L
9507 { VEX_W_TABLE (VEX_W_0F10_P_3) },
9508 { VEX_W_TABLE (VEX_W_0F10_P_3) },
c0f3af97
L
9509 },
9510
592a252b 9511 /* VEX_LEN_0F11_P_1 */
c0f3af97 9512 {
592a252b
L
9513 { VEX_W_TABLE (VEX_W_0F11_P_1) },
9514 { VEX_W_TABLE (VEX_W_0F11_P_1) },
c0f3af97
L
9515 },
9516
592a252b 9517 /* VEX_LEN_0F11_P_3 */
c0f3af97 9518 {
592a252b
L
9519 { VEX_W_TABLE (VEX_W_0F11_P_3) },
9520 { VEX_W_TABLE (VEX_W_0F11_P_3) },
c0f3af97
L
9521 },
9522
592a252b 9523 /* VEX_LEN_0F12_P_0_M_0 */
c0f3af97 9524 {
592a252b 9525 { VEX_W_TABLE (VEX_W_0F12_P_0_M_0) },
c0f3af97
L
9526 },
9527
592a252b 9528 /* VEX_LEN_0F12_P_0_M_1 */
c0f3af97 9529 {
592a252b 9530 { VEX_W_TABLE (VEX_W_0F12_P_0_M_1) },
c0f3af97
L
9531 },
9532
592a252b 9533 /* VEX_LEN_0F12_P_2 */
c0f3af97 9534 {
592a252b 9535 { VEX_W_TABLE (VEX_W_0F12_P_2) },
c0f3af97
L
9536 },
9537
592a252b 9538 /* VEX_LEN_0F13_M_0 */
c0f3af97 9539 {
592a252b 9540 { VEX_W_TABLE (VEX_W_0F13_M_0) },
c0f3af97
L
9541 },
9542
592a252b 9543 /* VEX_LEN_0F16_P_0_M_0 */
c0f3af97 9544 {
592a252b 9545 { VEX_W_TABLE (VEX_W_0F16_P_0_M_0) },
c0f3af97
L
9546 },
9547
592a252b 9548 /* VEX_LEN_0F16_P_0_M_1 */
c0f3af97 9549 {
592a252b 9550 { VEX_W_TABLE (VEX_W_0F16_P_0_M_1) },
c0f3af97
L
9551 },
9552
592a252b 9553 /* VEX_LEN_0F16_P_2 */
c0f3af97 9554 {
592a252b 9555 { VEX_W_TABLE (VEX_W_0F16_P_2) },
c0f3af97
L
9556 },
9557
592a252b 9558 /* VEX_LEN_0F17_M_0 */
c0f3af97 9559 {
592a252b 9560 { VEX_W_TABLE (VEX_W_0F17_M_0) },
c0f3af97
L
9561 },
9562
592a252b 9563 /* VEX_LEN_0F2A_P_1 */
c0f3af97 9564 {
bf890a93
IT
9565 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev }, 0 },
9566 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev }, 0 },
c0f3af97
L
9567 },
9568
592a252b 9569 /* VEX_LEN_0F2A_P_3 */
c0f3af97 9570 {
bf890a93
IT
9571 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev }, 0 },
9572 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev }, 0 },
c0f3af97
L
9573 },
9574
592a252b 9575 /* VEX_LEN_0F2C_P_1 */
c0f3af97 9576 {
bf890a93
IT
9577 { "vcvttss2siY", { Gv, EXdScalar }, 0 },
9578 { "vcvttss2siY", { Gv, EXdScalar }, 0 },
c0f3af97
L
9579 },
9580
592a252b 9581 /* VEX_LEN_0F2C_P_3 */
c0f3af97 9582 {
bf890a93
IT
9583 { "vcvttsd2siY", { Gv, EXqScalar }, 0 },
9584 { "vcvttsd2siY", { Gv, EXqScalar }, 0 },
c0f3af97
L
9585 },
9586
592a252b 9587 /* VEX_LEN_0F2D_P_1 */
c0f3af97 9588 {
bf890a93
IT
9589 { "vcvtss2siY", { Gv, EXdScalar }, 0 },
9590 { "vcvtss2siY", { Gv, EXdScalar }, 0 },
c0f3af97
L
9591 },
9592
592a252b 9593 /* VEX_LEN_0F2D_P_3 */
c0f3af97 9594 {
bf890a93
IT
9595 { "vcvtsd2siY", { Gv, EXqScalar }, 0 },
9596 { "vcvtsd2siY", { Gv, EXqScalar }, 0 },
c0f3af97
L
9597 },
9598
592a252b 9599 /* VEX_LEN_0F2E_P_0 */
c0f3af97 9600 {
592a252b
L
9601 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
9602 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
c0f3af97
L
9603 },
9604
592a252b 9605 /* VEX_LEN_0F2E_P_2 */
c0f3af97 9606 {
592a252b
L
9607 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
9608 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
c0f3af97
L
9609 },
9610
592a252b 9611 /* VEX_LEN_0F2F_P_0 */
c0f3af97 9612 {
592a252b
L
9613 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
9614 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
c0f3af97
L
9615 },
9616
592a252b 9617 /* VEX_LEN_0F2F_P_2 */
c0f3af97 9618 {
592a252b
L
9619 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
9620 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
c0f3af97
L
9621 },
9622
43234a1e
L
9623 /* VEX_LEN_0F41_P_0 */
9624 {
9625 { Bad_Opcode },
9626 { VEX_W_TABLE (VEX_W_0F41_P_0_LEN_1) },
9627 },
1ba585e8
IT
9628 /* VEX_LEN_0F41_P_2 */
9629 {
9630 { Bad_Opcode },
9631 { VEX_W_TABLE (VEX_W_0F41_P_2_LEN_1) },
9632 },
43234a1e
L
9633 /* VEX_LEN_0F42_P_0 */
9634 {
9635 { Bad_Opcode },
9636 { VEX_W_TABLE (VEX_W_0F42_P_0_LEN_1) },
9637 },
1ba585e8
IT
9638 /* VEX_LEN_0F42_P_2 */
9639 {
9640 { Bad_Opcode },
9641 { VEX_W_TABLE (VEX_W_0F42_P_2_LEN_1) },
9642 },
43234a1e
L
9643 /* VEX_LEN_0F44_P_0 */
9644 {
9645 { VEX_W_TABLE (VEX_W_0F44_P_0_LEN_0) },
9646 },
1ba585e8
IT
9647 /* VEX_LEN_0F44_P_2 */
9648 {
9649 { VEX_W_TABLE (VEX_W_0F44_P_2_LEN_0) },
9650 },
43234a1e
L
9651 /* VEX_LEN_0F45_P_0 */
9652 {
9653 { Bad_Opcode },
9654 { VEX_W_TABLE (VEX_W_0F45_P_0_LEN_1) },
9655 },
1ba585e8
IT
9656 /* VEX_LEN_0F45_P_2 */
9657 {
9658 { Bad_Opcode },
9659 { VEX_W_TABLE (VEX_W_0F45_P_2_LEN_1) },
9660 },
43234a1e
L
9661 /* VEX_LEN_0F46_P_0 */
9662 {
9663 { Bad_Opcode },
9664 { VEX_W_TABLE (VEX_W_0F46_P_0_LEN_1) },
9665 },
1ba585e8
IT
9666 /* VEX_LEN_0F46_P_2 */
9667 {
9668 { Bad_Opcode },
9669 { VEX_W_TABLE (VEX_W_0F46_P_2_LEN_1) },
9670 },
43234a1e
L
9671 /* VEX_LEN_0F47_P_0 */
9672 {
9673 { Bad_Opcode },
9674 { VEX_W_TABLE (VEX_W_0F47_P_0_LEN_1) },
9675 },
1ba585e8
IT
9676 /* VEX_LEN_0F47_P_2 */
9677 {
9678 { Bad_Opcode },
9679 { VEX_W_TABLE (VEX_W_0F47_P_2_LEN_1) },
9680 },
9681 /* VEX_LEN_0F4A_P_0 */
9682 {
9683 { Bad_Opcode },
9684 { VEX_W_TABLE (VEX_W_0F4A_P_0_LEN_1) },
9685 },
9686 /* VEX_LEN_0F4A_P_2 */
9687 {
9688 { Bad_Opcode },
9689 { VEX_W_TABLE (VEX_W_0F4A_P_2_LEN_1) },
9690 },
9691 /* VEX_LEN_0F4B_P_0 */
9692 {
9693 { Bad_Opcode },
9694 { VEX_W_TABLE (VEX_W_0F4B_P_0_LEN_1) },
9695 },
43234a1e
L
9696 /* VEX_LEN_0F4B_P_2 */
9697 {
9698 { Bad_Opcode },
9699 { VEX_W_TABLE (VEX_W_0F4B_P_2_LEN_1) },
9700 },
9701
592a252b 9702 /* VEX_LEN_0F51_P_1 */
c0f3af97 9703 {
592a252b
L
9704 { VEX_W_TABLE (VEX_W_0F51_P_1) },
9705 { VEX_W_TABLE (VEX_W_0F51_P_1) },
c0f3af97
L
9706 },
9707
592a252b 9708 /* VEX_LEN_0F51_P_3 */
c0f3af97 9709 {
592a252b
L
9710 { VEX_W_TABLE (VEX_W_0F51_P_3) },
9711 { VEX_W_TABLE (VEX_W_0F51_P_3) },
c0f3af97
L
9712 },
9713
592a252b 9714 /* VEX_LEN_0F52_P_1 */
c0f3af97 9715 {
592a252b
L
9716 { VEX_W_TABLE (VEX_W_0F52_P_1) },
9717 { VEX_W_TABLE (VEX_W_0F52_P_1) },
c0f3af97
L
9718 },
9719
592a252b 9720 /* VEX_LEN_0F53_P_1 */
c0f3af97 9721 {
592a252b
L
9722 { VEX_W_TABLE (VEX_W_0F53_P_1) },
9723 { VEX_W_TABLE (VEX_W_0F53_P_1) },
c0f3af97
L
9724 },
9725
592a252b 9726 /* VEX_LEN_0F58_P_1 */
c0f3af97 9727 {
592a252b
L
9728 { VEX_W_TABLE (VEX_W_0F58_P_1) },
9729 { VEX_W_TABLE (VEX_W_0F58_P_1) },
c0f3af97
L
9730 },
9731
592a252b 9732 /* VEX_LEN_0F58_P_3 */
c0f3af97 9733 {
592a252b
L
9734 { VEX_W_TABLE (VEX_W_0F58_P_3) },
9735 { VEX_W_TABLE (VEX_W_0F58_P_3) },
c0f3af97
L
9736 },
9737
592a252b 9738 /* VEX_LEN_0F59_P_1 */
c0f3af97 9739 {
592a252b
L
9740 { VEX_W_TABLE (VEX_W_0F59_P_1) },
9741 { VEX_W_TABLE (VEX_W_0F59_P_1) },
c0f3af97
L
9742 },
9743
592a252b 9744 /* VEX_LEN_0F59_P_3 */
c0f3af97 9745 {
592a252b
L
9746 { VEX_W_TABLE (VEX_W_0F59_P_3) },
9747 { VEX_W_TABLE (VEX_W_0F59_P_3) },
c0f3af97
L
9748 },
9749
592a252b 9750 /* VEX_LEN_0F5A_P_1 */
c0f3af97 9751 {
592a252b
L
9752 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
9753 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
c0f3af97
L
9754 },
9755
592a252b 9756 /* VEX_LEN_0F5A_P_3 */
c0f3af97 9757 {
592a252b
L
9758 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
9759 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
c0f3af97
L
9760 },
9761
592a252b 9762 /* VEX_LEN_0F5C_P_1 */
c0f3af97 9763 {
592a252b
L
9764 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
9765 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
c0f3af97
L
9766 },
9767
592a252b 9768 /* VEX_LEN_0F5C_P_3 */
c0f3af97 9769 {
592a252b
L
9770 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
9771 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
c0f3af97
L
9772 },
9773
592a252b 9774 /* VEX_LEN_0F5D_P_1 */
c0f3af97 9775 {
592a252b
L
9776 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
9777 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
c0f3af97
L
9778 },
9779
592a252b 9780 /* VEX_LEN_0F5D_P_3 */
c0f3af97 9781 {
592a252b
L
9782 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
9783 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
c0f3af97
L
9784 },
9785
592a252b 9786 /* VEX_LEN_0F5E_P_1 */
c0f3af97 9787 {
592a252b
L
9788 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
9789 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
c0f3af97
L
9790 },
9791
592a252b 9792 /* VEX_LEN_0F5E_P_3 */
c0f3af97 9793 {
592a252b
L
9794 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
9795 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
c0f3af97
L
9796 },
9797
592a252b 9798 /* VEX_LEN_0F5F_P_1 */
c0f3af97 9799 {
592a252b
L
9800 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
9801 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
c0f3af97
L
9802 },
9803
592a252b 9804 /* VEX_LEN_0F5F_P_3 */
c0f3af97 9805 {
592a252b
L
9806 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
9807 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
c0f3af97
L
9808 },
9809
592a252b 9810 /* VEX_LEN_0F6E_P_2 */
c0f3af97 9811 {
bf890a93
IT
9812 { "vmovK", { XMScalar, Edq }, 0 },
9813 { "vmovK", { XMScalar, Edq }, 0 },
c0f3af97
L
9814 },
9815
592a252b 9816 /* VEX_LEN_0F7E_P_1 */
c0f3af97 9817 {
592a252b
L
9818 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
9819 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
c0f3af97
L
9820 },
9821
592a252b 9822 /* VEX_LEN_0F7E_P_2 */
c0f3af97 9823 {
bf890a93
IT
9824 { "vmovK", { Edq, XMScalar }, 0 },
9825 { "vmovK", { Edq, XMScalar }, 0 },
c0f3af97
L
9826 },
9827
43234a1e
L
9828 /* VEX_LEN_0F90_P_0 */
9829 {
9830 { VEX_W_TABLE (VEX_W_0F90_P_0_LEN_0) },
9831 },
9832
1ba585e8
IT
9833 /* VEX_LEN_0F90_P_2 */
9834 {
9835 { VEX_W_TABLE (VEX_W_0F90_P_2_LEN_0) },
9836 },
9837
43234a1e
L
9838 /* VEX_LEN_0F91_P_0 */
9839 {
9840 { VEX_W_TABLE (VEX_W_0F91_P_0_LEN_0) },
9841 },
9842
1ba585e8
IT
9843 /* VEX_LEN_0F91_P_2 */
9844 {
9845 { VEX_W_TABLE (VEX_W_0F91_P_2_LEN_0) },
9846 },
9847
43234a1e
L
9848 /* VEX_LEN_0F92_P_0 */
9849 {
9850 { VEX_W_TABLE (VEX_W_0F92_P_0_LEN_0) },
9851 },
9852
90a915bf
IT
9853 /* VEX_LEN_0F92_P_2 */
9854 {
9855 { VEX_W_TABLE (VEX_W_0F92_P_2_LEN_0) },
9856 },
9857
1ba585e8
IT
9858 /* VEX_LEN_0F92_P_3 */
9859 {
9860 { VEX_W_TABLE (VEX_W_0F92_P_3_LEN_0) },
9861 },
9862
43234a1e
L
9863 /* VEX_LEN_0F93_P_0 */
9864 {
9865 { VEX_W_TABLE (VEX_W_0F93_P_0_LEN_0) },
9866 },
9867
90a915bf
IT
9868 /* VEX_LEN_0F93_P_2 */
9869 {
9870 { VEX_W_TABLE (VEX_W_0F93_P_2_LEN_0) },
9871 },
9872
1ba585e8
IT
9873 /* VEX_LEN_0F93_P_3 */
9874 {
9875 { VEX_W_TABLE (VEX_W_0F93_P_3_LEN_0) },
9876 },
9877
43234a1e
L
9878 /* VEX_LEN_0F98_P_0 */
9879 {
9880 { VEX_W_TABLE (VEX_W_0F98_P_0_LEN_0) },
9881 },
9882
1ba585e8
IT
9883 /* VEX_LEN_0F98_P_2 */
9884 {
9885 { VEX_W_TABLE (VEX_W_0F98_P_2_LEN_0) },
9886 },
9887
9888 /* VEX_LEN_0F99_P_0 */
9889 {
9890 { VEX_W_TABLE (VEX_W_0F99_P_0_LEN_0) },
9891 },
9892
9893 /* VEX_LEN_0F99_P_2 */
9894 {
9895 { VEX_W_TABLE (VEX_W_0F99_P_2_LEN_0) },
9896 },
9897
6c30d220 9898 /* VEX_LEN_0FAE_R_2_M_0 */
c0f3af97 9899 {
6c30d220 9900 { VEX_W_TABLE (VEX_W_0FAE_R_2_M_0) },
c0f3af97
L
9901 },
9902
6c30d220 9903 /* VEX_LEN_0FAE_R_3_M_0 */
c0f3af97 9904 {
6c30d220 9905 { VEX_W_TABLE (VEX_W_0FAE_R_3_M_0) },
c0f3af97
L
9906 },
9907
6c30d220 9908 /* VEX_LEN_0FC2_P_1 */
c0f3af97 9909 {
6c30d220
L
9910 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
9911 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
c0f3af97
L
9912 },
9913
6c30d220 9914 /* VEX_LEN_0FC2_P_3 */
c0f3af97 9915 {
6c30d220
L
9916 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
9917 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
c0f3af97
L
9918 },
9919
6c30d220 9920 /* VEX_LEN_0FC4_P_2 */
c0f3af97 9921 {
6c30d220 9922 { VEX_W_TABLE (VEX_W_0FC4_P_2) },
c0f3af97
L
9923 },
9924
6c30d220 9925 /* VEX_LEN_0FC5_P_2 */
c0f3af97 9926 {
6c30d220 9927 { VEX_W_TABLE (VEX_W_0FC5_P_2) },
c0f3af97
L
9928 },
9929
6c30d220 9930 /* VEX_LEN_0FD6_P_2 */
c0f3af97 9931 {
6c30d220
L
9932 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
9933 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
c0f3af97
L
9934 },
9935
6c30d220 9936 /* VEX_LEN_0FF7_P_2 */
c0f3af97 9937 {
6c30d220 9938 { VEX_W_TABLE (VEX_W_0FF7_P_2) },
c0f3af97
L
9939 },
9940
6c30d220 9941 /* VEX_LEN_0F3816_P_2 */
c0f3af97 9942 {
6c30d220
L
9943 { Bad_Opcode },
9944 { VEX_W_TABLE (VEX_W_0F3816_P_2) },
c0f3af97
L
9945 },
9946
6c30d220 9947 /* VEX_LEN_0F3819_P_2 */
c0f3af97 9948 {
6c30d220
L
9949 { Bad_Opcode },
9950 { VEX_W_TABLE (VEX_W_0F3819_P_2) },
c0f3af97
L
9951 },
9952
6c30d220 9953 /* VEX_LEN_0F381A_P_2_M_0 */
c0f3af97 9954 {
6c30d220
L
9955 { Bad_Opcode },
9956 { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
c0f3af97
L
9957 },
9958
6c30d220 9959 /* VEX_LEN_0F3836_P_2 */
c0f3af97 9960 {
6c30d220
L
9961 { Bad_Opcode },
9962 { VEX_W_TABLE (VEX_W_0F3836_P_2) },
c0f3af97
L
9963 },
9964
592a252b 9965 /* VEX_LEN_0F3841_P_2 */
c0f3af97 9966 {
592a252b 9967 { VEX_W_TABLE (VEX_W_0F3841_P_2) },
c0f3af97
L
9968 },
9969
6c30d220
L
9970 /* VEX_LEN_0F385A_P_2_M_0 */
9971 {
9972 { Bad_Opcode },
9973 { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) },
9974 },
9975
592a252b 9976 /* VEX_LEN_0F38DB_P_2 */
a5ff0eb2 9977 {
592a252b 9978 { VEX_W_TABLE (VEX_W_0F38DB_P_2) },
a5ff0eb2
L
9979 },
9980
592a252b 9981 /* VEX_LEN_0F38DC_P_2 */
a5ff0eb2 9982 {
592a252b 9983 { VEX_W_TABLE (VEX_W_0F38DC_P_2) },
a5ff0eb2
L
9984 },
9985
592a252b 9986 /* VEX_LEN_0F38DD_P_2 */
a5ff0eb2 9987 {
592a252b 9988 { VEX_W_TABLE (VEX_W_0F38DD_P_2) },
a5ff0eb2
L
9989 },
9990
592a252b 9991 /* VEX_LEN_0F38DE_P_2 */
a5ff0eb2 9992 {
592a252b 9993 { VEX_W_TABLE (VEX_W_0F38DE_P_2) },
a5ff0eb2
L
9994 },
9995
592a252b 9996 /* VEX_LEN_0F38DF_P_2 */
a5ff0eb2 9997 {
592a252b 9998 { VEX_W_TABLE (VEX_W_0F38DF_P_2) },
a5ff0eb2
L
9999 },
10000
f12dc422
L
10001 /* VEX_LEN_0F38F2_P_0 */
10002 {
bf890a93 10003 { "andnS", { Gdq, VexGdq, Edq }, 0 },
f12dc422
L
10004 },
10005
10006 /* VEX_LEN_0F38F3_R_1_P_0 */
10007 {
bf890a93 10008 { "blsrS", { VexGdq, Edq }, 0 },
f12dc422
L
10009 },
10010
10011 /* VEX_LEN_0F38F3_R_2_P_0 */
10012 {
bf890a93 10013 { "blsmskS", { VexGdq, Edq }, 0 },
f12dc422
L
10014 },
10015
10016 /* VEX_LEN_0F38F3_R_3_P_0 */
10017 {
bf890a93 10018 { "blsiS", { VexGdq, Edq }, 0 },
f12dc422
L
10019 },
10020
6c30d220
L
10021 /* VEX_LEN_0F38F5_P_0 */
10022 {
bf890a93 10023 { "bzhiS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
10024 },
10025
10026 /* VEX_LEN_0F38F5_P_1 */
10027 {
bf890a93 10028 { "pextS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
10029 },
10030
10031 /* VEX_LEN_0F38F5_P_3 */
10032 {
bf890a93 10033 { "pdepS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
10034 },
10035
10036 /* VEX_LEN_0F38F6_P_3 */
10037 {
bf890a93 10038 { "mulxS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
10039 },
10040
f12dc422
L
10041 /* VEX_LEN_0F38F7_P_0 */
10042 {
bf890a93 10043 { "bextrS", { Gdq, Edq, VexGdq }, 0 },
f12dc422
L
10044 },
10045
6c30d220
L
10046 /* VEX_LEN_0F38F7_P_1 */
10047 {
bf890a93 10048 { "sarxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
10049 },
10050
10051 /* VEX_LEN_0F38F7_P_2 */
10052 {
bf890a93 10053 { "shlxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
10054 },
10055
10056 /* VEX_LEN_0F38F7_P_3 */
10057 {
bf890a93 10058 { "shrxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
10059 },
10060
10061 /* VEX_LEN_0F3A00_P_2 */
10062 {
10063 { Bad_Opcode },
10064 { VEX_W_TABLE (VEX_W_0F3A00_P_2) },
10065 },
10066
10067 /* VEX_LEN_0F3A01_P_2 */
10068 {
10069 { Bad_Opcode },
10070 { VEX_W_TABLE (VEX_W_0F3A01_P_2) },
10071 },
10072
592a252b 10073 /* VEX_LEN_0F3A06_P_2 */
c0f3af97 10074 {
592d1631 10075 { Bad_Opcode },
592a252b 10076 { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
c0f3af97
L
10077 },
10078
592a252b 10079 /* VEX_LEN_0F3A0A_P_2 */
c0f3af97 10080 {
592a252b
L
10081 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
10082 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
c0f3af97
L
10083 },
10084
592a252b 10085 /* VEX_LEN_0F3A0B_P_2 */
c0f3af97 10086 {
592a252b
L
10087 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
10088 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
c0f3af97
L
10089 },
10090
592a252b 10091 /* VEX_LEN_0F3A14_P_2 */
c0f3af97 10092 {
592a252b 10093 { VEX_W_TABLE (VEX_W_0F3A14_P_2) },
c0f3af97
L
10094 },
10095
592a252b 10096 /* VEX_LEN_0F3A15_P_2 */
c0f3af97 10097 {
592a252b 10098 { VEX_W_TABLE (VEX_W_0F3A15_P_2) },
c0f3af97
L
10099 },
10100
592a252b 10101 /* VEX_LEN_0F3A16_P_2 */
c0f3af97 10102 {
bf890a93 10103 { "vpextrK", { Edq, XM, Ib }, 0 },
c0f3af97
L
10104 },
10105
592a252b 10106 /* VEX_LEN_0F3A17_P_2 */
c0f3af97 10107 {
bf890a93 10108 { "vextractps", { Edqd, XM, Ib }, 0 },
c0f3af97
L
10109 },
10110
592a252b 10111 /* VEX_LEN_0F3A18_P_2 */
c0f3af97 10112 {
592d1631 10113 { Bad_Opcode },
592a252b 10114 { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
c0f3af97
L
10115 },
10116
592a252b 10117 /* VEX_LEN_0F3A19_P_2 */
c0f3af97 10118 {
592d1631 10119 { Bad_Opcode },
592a252b 10120 { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
c0f3af97
L
10121 },
10122
592a252b 10123 /* VEX_LEN_0F3A20_P_2 */
c0f3af97 10124 {
592a252b 10125 { VEX_W_TABLE (VEX_W_0F3A20_P_2) },
c0f3af97
L
10126 },
10127
592a252b 10128 /* VEX_LEN_0F3A21_P_2 */
c0f3af97 10129 {
592a252b 10130 { VEX_W_TABLE (VEX_W_0F3A21_P_2) },
c0f3af97
L
10131 },
10132
592a252b 10133 /* VEX_LEN_0F3A22_P_2 */
c0f3af97 10134 {
bf890a93 10135 { "vpinsrK", { XM, Vex128, Edq, Ib }, 0 },
c0f3af97
L
10136 },
10137
43234a1e
L
10138 /* VEX_LEN_0F3A30_P_2 */
10139 {
10140 { VEX_W_TABLE (VEX_W_0F3A30_P_2_LEN_0) },
10141 },
10142
1ba585e8
IT
10143 /* VEX_LEN_0F3A31_P_2 */
10144 {
10145 { VEX_W_TABLE (VEX_W_0F3A31_P_2_LEN_0) },
10146 },
10147
43234a1e
L
10148 /* VEX_LEN_0F3A32_P_2 */
10149 {
10150 { VEX_W_TABLE (VEX_W_0F3A32_P_2_LEN_0) },
10151 },
10152
1ba585e8
IT
10153 /* VEX_LEN_0F3A33_P_2 */
10154 {
10155 { VEX_W_TABLE (VEX_W_0F3A33_P_2_LEN_0) },
10156 },
10157
6c30d220 10158 /* VEX_LEN_0F3A38_P_2 */
c0f3af97 10159 {
6c30d220
L
10160 { Bad_Opcode },
10161 { VEX_W_TABLE (VEX_W_0F3A38_P_2) },
c0f3af97
L
10162 },
10163
6c30d220 10164 /* VEX_LEN_0F3A39_P_2 */
c0f3af97 10165 {
6c30d220
L
10166 { Bad_Opcode },
10167 { VEX_W_TABLE (VEX_W_0F3A39_P_2) },
10168 },
10169
10170 /* VEX_LEN_0F3A41_P_2 */
10171 {
10172 { VEX_W_TABLE (VEX_W_0F3A41_P_2) },
c0f3af97
L
10173 },
10174
592a252b 10175 /* VEX_LEN_0F3A44_P_2 */
ce2f5b3c 10176 {
592a252b 10177 { VEX_W_TABLE (VEX_W_0F3A44_P_2) },
ce2f5b3c
L
10178 },
10179
6c30d220 10180 /* VEX_LEN_0F3A46_P_2 */
c0f3af97 10181 {
6c30d220
L
10182 { Bad_Opcode },
10183 { VEX_W_TABLE (VEX_W_0F3A46_P_2) },
c0f3af97
L
10184 },
10185
592a252b 10186 /* VEX_LEN_0F3A60_P_2 */
c0f3af97 10187 {
592a252b 10188 { VEX_W_TABLE (VEX_W_0F3A60_P_2) },
c0f3af97
L
10189 },
10190
592a252b 10191 /* VEX_LEN_0F3A61_P_2 */
c0f3af97 10192 {
592a252b 10193 { VEX_W_TABLE (VEX_W_0F3A61_P_2) },
c0f3af97
L
10194 },
10195
592a252b 10196 /* VEX_LEN_0F3A62_P_2 */
c0f3af97 10197 {
592a252b 10198 { VEX_W_TABLE (VEX_W_0F3A62_P_2) },
c0f3af97
L
10199 },
10200
592a252b 10201 /* VEX_LEN_0F3A63_P_2 */
c0f3af97 10202 {
592a252b 10203 { VEX_W_TABLE (VEX_W_0F3A63_P_2) },
c0f3af97
L
10204 },
10205
592a252b 10206 /* VEX_LEN_0F3A6A_P_2 */
922d8de8 10207 {
bf890a93 10208 { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
922d8de8
DR
10209 },
10210
592a252b 10211 /* VEX_LEN_0F3A6B_P_2 */
922d8de8 10212 {
bf890a93 10213 { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
922d8de8
DR
10214 },
10215
592a252b 10216 /* VEX_LEN_0F3A6E_P_2 */
922d8de8 10217 {
bf890a93 10218 { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
922d8de8
DR
10219 },
10220
592a252b 10221 /* VEX_LEN_0F3A6F_P_2 */
922d8de8 10222 {
bf890a93 10223 { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
922d8de8
DR
10224 },
10225
592a252b 10226 /* VEX_LEN_0F3A7A_P_2 */
922d8de8 10227 {
bf890a93 10228 { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
922d8de8
DR
10229 },
10230
592a252b 10231 /* VEX_LEN_0F3A7B_P_2 */
922d8de8 10232 {
bf890a93 10233 { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
922d8de8
DR
10234 },
10235
592a252b 10236 /* VEX_LEN_0F3A7E_P_2 */
922d8de8 10237 {
bf890a93 10238 { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
922d8de8
DR
10239 },
10240
592a252b 10241 /* VEX_LEN_0F3A7F_P_2 */
922d8de8 10242 {
bf890a93 10243 { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
922d8de8
DR
10244 },
10245
592a252b 10246 /* VEX_LEN_0F3ADF_P_2 */
a5ff0eb2 10247 {
592a252b 10248 { VEX_W_TABLE (VEX_W_0F3ADF_P_2) },
a5ff0eb2 10249 },
4c807e72 10250
6c30d220
L
10251 /* VEX_LEN_0F3AF0_P_3 */
10252 {
bf890a93 10253 { "rorxS", { Gdq, Edq, Ib }, 0 },
6c30d220
L
10254 },
10255
ff688e1f
L
10256 /* VEX_LEN_0FXOP_08_CC */
10257 {
bf890a93 10258 { "vpcomb", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10259 },
10260
10261 /* VEX_LEN_0FXOP_08_CD */
10262 {
bf890a93 10263 { "vpcomw", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10264 },
10265
10266 /* VEX_LEN_0FXOP_08_CE */
10267 {
bf890a93 10268 { "vpcomd", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10269 },
10270
10271 /* VEX_LEN_0FXOP_08_CF */
10272 {
bf890a93 10273 { "vpcomq", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10274 },
10275
10276 /* VEX_LEN_0FXOP_08_EC */
10277 {
bf890a93 10278 { "vpcomub", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10279 },
10280
10281 /* VEX_LEN_0FXOP_08_ED */
10282 {
bf890a93 10283 { "vpcomuw", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10284 },
10285
10286 /* VEX_LEN_0FXOP_08_EE */
10287 {
bf890a93 10288 { "vpcomud", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10289 },
10290
10291 /* VEX_LEN_0FXOP_08_EF */
10292 {
bf890a93 10293 { "vpcomuq", { XM, Vex128, EXx, Ib }, 0 },
ff688e1f
L
10294 },
10295
592a252b 10296 /* VEX_LEN_0FXOP_09_80 */
5dd85c99 10297 {
bf890a93
IT
10298 { "vfrczps", { XM, EXxmm }, 0 },
10299 { "vfrczps", { XM, EXymmq }, 0 },
5dd85c99 10300 },
4c807e72 10301
592a252b 10302 /* VEX_LEN_0FXOP_09_81 */
5dd85c99 10303 {
bf890a93
IT
10304 { "vfrczpd", { XM, EXxmm }, 0 },
10305 { "vfrczpd", { XM, EXymmq }, 0 },
5dd85c99 10306 },
331d2d0d
L
10307};
10308
9e30b8e0 10309static const struct dis386 vex_w_table[][2] = {
b844680a 10310 {
592a252b 10311 /* VEX_W_0F10_P_0 */
bf890a93 10312 { "vmovups", { XM, EXx }, 0 },
d8faab4e
L
10313 },
10314 {
592a252b 10315 /* VEX_W_0F10_P_1 */
bf890a93 10316 { "vmovss", { XMVexScalar, VexScalar, EXdScalar }, 0 },
d8faab4e
L
10317 },
10318 {
592a252b 10319 /* VEX_W_0F10_P_2 */
bf890a93 10320 { "vmovupd", { XM, EXx }, 0 },
d8faab4e
L
10321 },
10322 {
592a252b 10323 /* VEX_W_0F10_P_3 */
bf890a93 10324 { "vmovsd", { XMVexScalar, VexScalar, EXqScalar }, 0 },
d8faab4e
L
10325 },
10326 {
592a252b 10327 /* VEX_W_0F11_P_0 */
bf890a93 10328 { "vmovups", { EXxS, XM }, 0 },
d8faab4e
L
10329 },
10330 {
592a252b 10331 /* VEX_W_0F11_P_1 */
bf890a93 10332 { "vmovss", { EXdVexScalarS, VexScalar, XMScalar }, 0 },
b844680a
L
10333 },
10334 {
592a252b 10335 /* VEX_W_0F11_P_2 */
bf890a93 10336 { "vmovupd", { EXxS, XM }, 0 },
b844680a
L
10337 },
10338 {
592a252b 10339 /* VEX_W_0F11_P_3 */
bf890a93 10340 { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar }, 0 },
d8faab4e
L
10341 },
10342 {
592a252b 10343 /* VEX_W_0F12_P_0_M_0 */
bf890a93 10344 { "vmovlps", { XM, Vex128, EXq }, 0 },
b844680a
L
10345 },
10346 {
592a252b 10347 /* VEX_W_0F12_P_0_M_1 */
bf890a93 10348 { "vmovhlps", { XM, Vex128, EXq }, 0 },
b844680a
L
10349 },
10350 {
592a252b 10351 /* VEX_W_0F12_P_1 */
bf890a93 10352 { "vmovsldup", { XM, EXx }, 0 },
b844680a
L
10353 },
10354 {
592a252b 10355 /* VEX_W_0F12_P_2 */
bf890a93 10356 { "vmovlpd", { XM, Vex128, EXq }, 0 },
b844680a
L
10357 },
10358 {
592a252b 10359 /* VEX_W_0F12_P_3 */
bf890a93 10360 { "vmovddup", { XM, EXymmq }, 0 },
b844680a
L
10361 },
10362 {
592a252b 10363 /* VEX_W_0F13_M_0 */
bf890a93 10364 { "vmovlpX", { EXq, XM }, 0 },
b844680a
L
10365 },
10366 {
592a252b 10367 /* VEX_W_0F14 */
bf890a93 10368 { "vunpcklpX", { XM, Vex, EXx }, 0 },
b844680a
L
10369 },
10370 {
592a252b 10371 /* VEX_W_0F15 */
bf890a93 10372 { "vunpckhpX", { XM, Vex, EXx }, 0 },
b844680a
L
10373 },
10374 {
592a252b 10375 /* VEX_W_0F16_P_0_M_0 */
bf890a93 10376 { "vmovhps", { XM, Vex128, EXq }, 0 },
9e30b8e0
L
10377 },
10378 {
592a252b 10379 /* VEX_W_0F16_P_0_M_1 */
bf890a93 10380 { "vmovlhps", { XM, Vex128, EXq }, 0 },
9e30b8e0
L
10381 },
10382 {
592a252b 10383 /* VEX_W_0F16_P_1 */
bf890a93 10384 { "vmovshdup", { XM, EXx }, 0 },
9e30b8e0
L
10385 },
10386 {
592a252b 10387 /* VEX_W_0F16_P_2 */
bf890a93 10388 { "vmovhpd", { XM, Vex128, EXq }, 0 },
9e30b8e0
L
10389 },
10390 {
592a252b 10391 /* VEX_W_0F17_M_0 */
bf890a93 10392 { "vmovhpX", { EXq, XM }, 0 },
9e30b8e0
L
10393 },
10394 {
592a252b 10395 /* VEX_W_0F28 */
bf890a93 10396 { "vmovapX", { XM, EXx }, 0 },
9e30b8e0
L
10397 },
10398 {
592a252b 10399 /* VEX_W_0F29 */
bf890a93 10400 { "vmovapX", { EXxS, XM }, 0 },
9e30b8e0
L
10401 },
10402 {
592a252b 10403 /* VEX_W_0F2B_M_0 */
bf890a93 10404 { "vmovntpX", { Mx, XM }, 0 },
9e30b8e0
L
10405 },
10406 {
592a252b 10407 /* VEX_W_0F2E_P_0 */
bf890a93 10408 { "vucomiss", { XMScalar, EXdScalar }, 0 },
9e30b8e0
L
10409 },
10410 {
592a252b 10411 /* VEX_W_0F2E_P_2 */
bf890a93 10412 { "vucomisd", { XMScalar, EXqScalar }, 0 },
9e30b8e0
L
10413 },
10414 {
592a252b 10415 /* VEX_W_0F2F_P_0 */
bf890a93 10416 { "vcomiss", { XMScalar, EXdScalar }, 0 },
9e30b8e0
L
10417 },
10418 {
592a252b 10419 /* VEX_W_0F2F_P_2 */
bf890a93 10420 { "vcomisd", { XMScalar, EXqScalar }, 0 },
9e30b8e0 10421 },
43234a1e
L
10422 {
10423 /* VEX_W_0F41_P_0_LEN_1 */
bf890a93
IT
10424 { "kandw", { MaskG, MaskVex, MaskR }, 0 },
10425 { "kandq", { MaskG, MaskVex, MaskR }, 0 },
1ba585e8
IT
10426 },
10427 {
10428 /* VEX_W_0F41_P_2_LEN_1 */
bf890a93
IT
10429 { "kandb", { MaskG, MaskVex, MaskR }, 0 },
10430 { "kandd", { MaskG, MaskVex, MaskR }, 0 },
43234a1e
L
10431 },
10432 {
10433 /* VEX_W_0F42_P_0_LEN_1 */
bf890a93
IT
10434 { "kandnw", { MaskG, MaskVex, MaskR }, 0 },
10435 { "kandnq", { MaskG, MaskVex, MaskR }, 0 },
1ba585e8
IT
10436 },
10437 {
10438 /* VEX_W_0F42_P_2_LEN_1 */
bf890a93
IT
10439 { "kandnb", { MaskG, MaskVex, MaskR }, 0 },
10440 { "kandnd", { MaskG, MaskVex, MaskR }, 0 },
43234a1e
L
10441 },
10442 {
10443 /* VEX_W_0F44_P_0_LEN_0 */
bf890a93
IT
10444 { "knotw", { MaskG, MaskR }, 0 },
10445 { "knotq", { MaskG, MaskR }, 0 },
1ba585e8
IT
10446 },
10447 {
10448 /* VEX_W_0F44_P_2_LEN_0 */
bf890a93
IT
10449 { "knotb", { MaskG, MaskR }, 0 },
10450 { "knotd", { MaskG, MaskR }, 0 },
43234a1e
L
10451 },
10452 {
10453 /* VEX_W_0F45_P_0_LEN_1 */
bf890a93
IT
10454 { "korw", { MaskG, MaskVex, MaskR }, 0 },
10455 { "korq", { MaskG, MaskVex, MaskR }, 0 },
1ba585e8
IT
10456 },
10457 {
10458 /* VEX_W_0F45_P_2_LEN_1 */
bf890a93
IT
10459 { "korb", { MaskG, MaskVex, MaskR }, 0 },
10460 { "kord", { MaskG, MaskVex, MaskR }, 0 },
43234a1e
L
10461 },
10462 {
10463 /* VEX_W_0F46_P_0_LEN_1 */
bf890a93
IT
10464 { "kxnorw", { MaskG, MaskVex, MaskR }, 0 },
10465 { "kxnorq", { MaskG, MaskVex, MaskR }, 0 },
1ba585e8
IT
10466 },
10467 {
10468 /* VEX_W_0F46_P_2_LEN_1 */
bf890a93
IT
10469 { "kxnorb", { MaskG, MaskVex, MaskR }, 0 },
10470 { "kxnord", { MaskG, MaskVex, MaskR }, 0 },
43234a1e
L
10471 },
10472 {
10473 /* VEX_W_0F47_P_0_LEN_1 */
bf890a93
IT
10474 { "kxorw", { MaskG, MaskVex, MaskR }, 0 },
10475 { "kxorq", { MaskG, MaskVex, MaskR }, 0 },
1ba585e8
IT
10476 },
10477 {
10478 /* VEX_W_0F47_P_2_LEN_1 */
bf890a93
IT
10479 { "kxorb", { MaskG, MaskVex, MaskR }, 0 },
10480 { "kxord", { MaskG, MaskVex, MaskR }, 0 },
1ba585e8
IT
10481 },
10482 {
10483 /* VEX_W_0F4A_P_0_LEN_1 */
bf890a93
IT
10484 { "kaddw", { MaskG, MaskVex, MaskR }, 0 },
10485 { "kaddq", { MaskG, MaskVex, MaskR }, 0 },
1ba585e8
IT
10486 },
10487 {
10488 /* VEX_W_0F4A_P_2_LEN_1 */
bf890a93
IT
10489 { "kaddb", { MaskG, MaskVex, MaskR }, 0 },
10490 { "kaddd", { MaskG, MaskVex, MaskR }, 0 },
1ba585e8
IT
10491 },
10492 {
10493 /* VEX_W_0F4B_P_0_LEN_1 */
bf890a93
IT
10494 { "kunpckwd", { MaskG, MaskVex, MaskR }, 0 },
10495 { "kunpckdq", { MaskG, MaskVex, MaskR }, 0 },
43234a1e
L
10496 },
10497 {
10498 /* VEX_W_0F4B_P_2_LEN_1 */
bf890a93 10499 { "kunpckbw", { MaskG, MaskVex, MaskR }, 0 },
43234a1e 10500 },
9e30b8e0 10501 {
592a252b 10502 /* VEX_W_0F50_M_0 */
bf890a93 10503 { "vmovmskpX", { Gdq, XS }, 0 },
9e30b8e0
L
10504 },
10505 {
592a252b 10506 /* VEX_W_0F51_P_0 */
bf890a93 10507 { "vsqrtps", { XM, EXx }, 0 },
9e30b8e0
L
10508 },
10509 {
592a252b 10510 /* VEX_W_0F51_P_1 */
bf890a93 10511 { "vsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10512 },
10513 {
592a252b 10514 /* VEX_W_0F51_P_2 */
bf890a93 10515 { "vsqrtpd", { XM, EXx }, 0 },
9e30b8e0
L
10516 },
10517 {
592a252b 10518 /* VEX_W_0F51_P_3 */
bf890a93 10519 { "vsqrtsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10520 },
10521 {
592a252b 10522 /* VEX_W_0F52_P_0 */
bf890a93 10523 { "vrsqrtps", { XM, EXx }, 0 },
9e30b8e0
L
10524 },
10525 {
592a252b 10526 /* VEX_W_0F52_P_1 */
bf890a93 10527 { "vrsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10528 },
10529 {
592a252b 10530 /* VEX_W_0F53_P_0 */
bf890a93 10531 { "vrcpps", { XM, EXx }, 0 },
9e30b8e0
L
10532 },
10533 {
592a252b 10534 /* VEX_W_0F53_P_1 */
bf890a93 10535 { "vrcpss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10536 },
10537 {
592a252b 10538 /* VEX_W_0F58_P_0 */
bf890a93 10539 { "vaddps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10540 },
10541 {
592a252b 10542 /* VEX_W_0F58_P_1 */
bf890a93 10543 { "vaddss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10544 },
10545 {
592a252b 10546 /* VEX_W_0F58_P_2 */
bf890a93 10547 { "vaddpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10548 },
10549 {
592a252b 10550 /* VEX_W_0F58_P_3 */
bf890a93 10551 { "vaddsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10552 },
10553 {
592a252b 10554 /* VEX_W_0F59_P_0 */
bf890a93 10555 { "vmulps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10556 },
10557 {
592a252b 10558 /* VEX_W_0F59_P_1 */
bf890a93 10559 { "vmulss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10560 },
10561 {
592a252b 10562 /* VEX_W_0F59_P_2 */
bf890a93 10563 { "vmulpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10564 },
10565 {
592a252b 10566 /* VEX_W_0F59_P_3 */
bf890a93 10567 { "vmulsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10568 },
10569 {
592a252b 10570 /* VEX_W_0F5A_P_0 */
bf890a93 10571 { "vcvtps2pd", { XM, EXxmmq }, 0 },
9e30b8e0
L
10572 },
10573 {
592a252b 10574 /* VEX_W_0F5A_P_1 */
bf890a93 10575 { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10576 },
10577 {
592a252b 10578 /* VEX_W_0F5A_P_3 */
bf890a93 10579 { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10580 },
10581 {
592a252b 10582 /* VEX_W_0F5B_P_0 */
bf890a93 10583 { "vcvtdq2ps", { XM, EXx }, 0 },
9e30b8e0
L
10584 },
10585 {
592a252b 10586 /* VEX_W_0F5B_P_1 */
bf890a93 10587 { "vcvttps2dq", { XM, EXx }, 0 },
9e30b8e0
L
10588 },
10589 {
592a252b 10590 /* VEX_W_0F5B_P_2 */
bf890a93 10591 { "vcvtps2dq", { XM, EXx }, 0 },
9e30b8e0
L
10592 },
10593 {
592a252b 10594 /* VEX_W_0F5C_P_0 */
bf890a93 10595 { "vsubps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10596 },
10597 {
592a252b 10598 /* VEX_W_0F5C_P_1 */
bf890a93 10599 { "vsubss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10600 },
10601 {
592a252b 10602 /* VEX_W_0F5C_P_2 */
bf890a93 10603 { "vsubpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10604 },
10605 {
592a252b 10606 /* VEX_W_0F5C_P_3 */
bf890a93 10607 { "vsubsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10608 },
10609 {
592a252b 10610 /* VEX_W_0F5D_P_0 */
bf890a93 10611 { "vminps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10612 },
10613 {
592a252b 10614 /* VEX_W_0F5D_P_1 */
bf890a93 10615 { "vminss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10616 },
10617 {
592a252b 10618 /* VEX_W_0F5D_P_2 */
bf890a93 10619 { "vminpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10620 },
10621 {
592a252b 10622 /* VEX_W_0F5D_P_3 */
bf890a93 10623 { "vminsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10624 },
10625 {
592a252b 10626 /* VEX_W_0F5E_P_0 */
bf890a93 10627 { "vdivps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10628 },
10629 {
592a252b 10630 /* VEX_W_0F5E_P_1 */
bf890a93 10631 { "vdivss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10632 },
10633 {
592a252b 10634 /* VEX_W_0F5E_P_2 */
bf890a93 10635 { "vdivpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10636 },
10637 {
592a252b 10638 /* VEX_W_0F5E_P_3 */
bf890a93 10639 { "vdivsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10640 },
10641 {
592a252b 10642 /* VEX_W_0F5F_P_0 */
bf890a93 10643 { "vmaxps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10644 },
10645 {
592a252b 10646 /* VEX_W_0F5F_P_1 */
bf890a93 10647 { "vmaxss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10648 },
10649 {
592a252b 10650 /* VEX_W_0F5F_P_2 */
bf890a93 10651 { "vmaxpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10652 },
10653 {
592a252b 10654 /* VEX_W_0F5F_P_3 */
bf890a93 10655 { "vmaxsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10656 },
10657 {
592a252b 10658 /* VEX_W_0F60_P_2 */
bf890a93 10659 { "vpunpcklbw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10660 },
10661 {
592a252b 10662 /* VEX_W_0F61_P_2 */
bf890a93 10663 { "vpunpcklwd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10664 },
10665 {
592a252b 10666 /* VEX_W_0F62_P_2 */
bf890a93 10667 { "vpunpckldq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10668 },
10669 {
592a252b 10670 /* VEX_W_0F63_P_2 */
bf890a93 10671 { "vpacksswb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10672 },
10673 {
592a252b 10674 /* VEX_W_0F64_P_2 */
bf890a93 10675 { "vpcmpgtb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10676 },
10677 {
592a252b 10678 /* VEX_W_0F65_P_2 */
bf890a93 10679 { "vpcmpgtw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10680 },
10681 {
592a252b 10682 /* VEX_W_0F66_P_2 */
bf890a93 10683 { "vpcmpgtd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10684 },
10685 {
592a252b 10686 /* VEX_W_0F67_P_2 */
bf890a93 10687 { "vpackuswb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10688 },
10689 {
592a252b 10690 /* VEX_W_0F68_P_2 */
bf890a93 10691 { "vpunpckhbw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10692 },
10693 {
592a252b 10694 /* VEX_W_0F69_P_2 */
bf890a93 10695 { "vpunpckhwd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10696 },
10697 {
592a252b 10698 /* VEX_W_0F6A_P_2 */
bf890a93 10699 { "vpunpckhdq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10700 },
10701 {
592a252b 10702 /* VEX_W_0F6B_P_2 */
bf890a93 10703 { "vpackssdw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10704 },
10705 {
592a252b 10706 /* VEX_W_0F6C_P_2 */
bf890a93 10707 { "vpunpcklqdq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10708 },
10709 {
592a252b 10710 /* VEX_W_0F6D_P_2 */
bf890a93 10711 { "vpunpckhqdq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10712 },
10713 {
592a252b 10714 /* VEX_W_0F6F_P_1 */
bf890a93 10715 { "vmovdqu", { XM, EXx }, 0 },
9e30b8e0
L
10716 },
10717 {
592a252b 10718 /* VEX_W_0F6F_P_2 */
bf890a93 10719 { "vmovdqa", { XM, EXx }, 0 },
9e30b8e0
L
10720 },
10721 {
592a252b 10722 /* VEX_W_0F70_P_1 */
bf890a93 10723 { "vpshufhw", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10724 },
10725 {
592a252b 10726 /* VEX_W_0F70_P_2 */
bf890a93 10727 { "vpshufd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10728 },
10729 {
592a252b 10730 /* VEX_W_0F70_P_3 */
bf890a93 10731 { "vpshuflw", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10732 },
10733 {
592a252b 10734 /* VEX_W_0F71_R_2_P_2 */
bf890a93 10735 { "vpsrlw", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10736 },
10737 {
592a252b 10738 /* VEX_W_0F71_R_4_P_2 */
bf890a93 10739 { "vpsraw", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10740 },
10741 {
592a252b 10742 /* VEX_W_0F71_R_6_P_2 */
bf890a93 10743 { "vpsllw", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10744 },
10745 {
592a252b 10746 /* VEX_W_0F72_R_2_P_2 */
bf890a93 10747 { "vpsrld", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10748 },
10749 {
592a252b 10750 /* VEX_W_0F72_R_4_P_2 */
bf890a93 10751 { "vpsrad", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10752 },
10753 {
592a252b 10754 /* VEX_W_0F72_R_6_P_2 */
bf890a93 10755 { "vpslld", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10756 },
10757 {
592a252b 10758 /* VEX_W_0F73_R_2_P_2 */
bf890a93 10759 { "vpsrlq", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10760 },
10761 {
592a252b 10762 /* VEX_W_0F73_R_3_P_2 */
bf890a93 10763 { "vpsrldq", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10764 },
10765 {
592a252b 10766 /* VEX_W_0F73_R_6_P_2 */
bf890a93 10767 { "vpsllq", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10768 },
10769 {
592a252b 10770 /* VEX_W_0F73_R_7_P_2 */
bf890a93 10771 { "vpslldq", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10772 },
10773 {
592a252b 10774 /* VEX_W_0F74_P_2 */
bf890a93 10775 { "vpcmpeqb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10776 },
10777 {
592a252b 10778 /* VEX_W_0F75_P_2 */
bf890a93 10779 { "vpcmpeqw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10780 },
10781 {
592a252b 10782 /* VEX_W_0F76_P_2 */
bf890a93 10783 { "vpcmpeqd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10784 },
10785 {
592a252b 10786 /* VEX_W_0F77_P_0 */
bf890a93 10787 { "", { VZERO }, 0 },
9e30b8e0
L
10788 },
10789 {
592a252b 10790 /* VEX_W_0F7C_P_2 */
bf890a93 10791 { "vhaddpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10792 },
10793 {
592a252b 10794 /* VEX_W_0F7C_P_3 */
bf890a93 10795 { "vhaddps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10796 },
10797 {
592a252b 10798 /* VEX_W_0F7D_P_2 */
bf890a93 10799 { "vhsubpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10800 },
10801 {
592a252b 10802 /* VEX_W_0F7D_P_3 */
bf890a93 10803 { "vhsubps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10804 },
10805 {
592a252b 10806 /* VEX_W_0F7E_P_1 */
bf890a93 10807 { "vmovq", { XMScalar, EXqScalar }, 0 },
9e30b8e0
L
10808 },
10809 {
592a252b 10810 /* VEX_W_0F7F_P_1 */
bf890a93 10811 { "vmovdqu", { EXxS, XM }, 0 },
9e30b8e0
L
10812 },
10813 {
592a252b 10814 /* VEX_W_0F7F_P_2 */
bf890a93 10815 { "vmovdqa", { EXxS, XM }, 0 },
9e30b8e0 10816 },
43234a1e
L
10817 {
10818 /* VEX_W_0F90_P_0_LEN_0 */
bf890a93
IT
10819 { "kmovw", { MaskG, MaskE }, 0 },
10820 { "kmovq", { MaskG, MaskE }, 0 },
1ba585e8
IT
10821 },
10822 {
10823 /* VEX_W_0F90_P_2_LEN_0 */
bf890a93
IT
10824 { "kmovb", { MaskG, MaskBDE }, 0 },
10825 { "kmovd", { MaskG, MaskBDE }, 0 },
43234a1e
L
10826 },
10827 {
10828 /* VEX_W_0F91_P_0_LEN_0 */
bf890a93
IT
10829 { "kmovw", { Ew, MaskG }, 0 },
10830 { "kmovq", { Eq, MaskG }, 0 },
1ba585e8
IT
10831 },
10832 {
10833 /* VEX_W_0F91_P_2_LEN_0 */
bf890a93
IT
10834 { "kmovb", { Eb, MaskG }, 0 },
10835 { "kmovd", { Ed, MaskG }, 0 },
43234a1e
L
10836 },
10837 {
10838 /* VEX_W_0F92_P_0_LEN_0 */
bf890a93 10839 { "kmovw", { MaskG, Rdq }, 0 },
43234a1e 10840 },
90a915bf
IT
10841 {
10842 /* VEX_W_0F92_P_2_LEN_0 */
bf890a93 10843 { "kmovb", { MaskG, Rdq }, 0 },
90a915bf 10844 },
1ba585e8
IT
10845 {
10846 /* VEX_W_0F92_P_3_LEN_0 */
bf890a93
IT
10847 { "kmovd", { MaskG, Rdq }, 0 },
10848 { "kmovq", { MaskG, Rdq }, 0 },
1ba585e8 10849 },
43234a1e
L
10850 {
10851 /* VEX_W_0F93_P_0_LEN_0 */
bf890a93 10852 { "kmovw", { Gdq, MaskR }, 0 },
43234a1e 10853 },
90a915bf
IT
10854 {
10855 /* VEX_W_0F93_P_2_LEN_0 */
bf890a93 10856 { "kmovb", { Gdq, MaskR }, 0 },
90a915bf 10857 },
1ba585e8
IT
10858 {
10859 /* VEX_W_0F93_P_3_LEN_0 */
bf890a93
IT
10860 { "kmovd", { Gdq, MaskR }, 0 },
10861 { "kmovq", { Gdq, MaskR }, 0 },
1ba585e8 10862 },
43234a1e
L
10863 {
10864 /* VEX_W_0F98_P_0_LEN_0 */
bf890a93
IT
10865 { "kortestw", { MaskG, MaskR }, 0 },
10866 { "kortestq", { MaskG, MaskR }, 0 },
1ba585e8
IT
10867 },
10868 {
10869 /* VEX_W_0F98_P_2_LEN_0 */
bf890a93
IT
10870 { "kortestb", { MaskG, MaskR }, 0 },
10871 { "kortestd", { MaskG, MaskR }, 0 },
1ba585e8
IT
10872 },
10873 {
10874 /* VEX_W_0F99_P_0_LEN_0 */
bf890a93
IT
10875 { "ktestw", { MaskG, MaskR }, 0 },
10876 { "ktestq", { MaskG, MaskR }, 0 },
1ba585e8
IT
10877 },
10878 {
10879 /* VEX_W_0F99_P_2_LEN_0 */
bf890a93
IT
10880 { "ktestb", { MaskG, MaskR }, 0 },
10881 { "ktestd", { MaskG, MaskR }, 0 },
43234a1e 10882 },
9e30b8e0 10883 {
592a252b 10884 /* VEX_W_0FAE_R_2_M_0 */
bf890a93 10885 { "vldmxcsr", { Md }, 0 },
9e30b8e0
L
10886 },
10887 {
592a252b 10888 /* VEX_W_0FAE_R_3_M_0 */
bf890a93 10889 { "vstmxcsr", { Md }, 0 },
9e30b8e0
L
10890 },
10891 {
592a252b 10892 /* VEX_W_0FC2_P_0 */
bf890a93 10893 { "vcmpps", { XM, Vex, EXx, VCMP }, 0 },
9e30b8e0
L
10894 },
10895 {
592a252b 10896 /* VEX_W_0FC2_P_1 */
bf890a93 10897 { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP }, 0 },
9e30b8e0
L
10898 },
10899 {
592a252b 10900 /* VEX_W_0FC2_P_2 */
bf890a93 10901 { "vcmppd", { XM, Vex, EXx, VCMP }, 0 },
9e30b8e0
L
10902 },
10903 {
592a252b 10904 /* VEX_W_0FC2_P_3 */
bf890a93 10905 { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP }, 0 },
9e30b8e0
L
10906 },
10907 {
592a252b 10908 /* VEX_W_0FC4_P_2 */
bf890a93 10909 { "vpinsrw", { XM, Vex128, Edqw, Ib }, 0 },
9e30b8e0
L
10910 },
10911 {
592a252b 10912 /* VEX_W_0FC5_P_2 */
bf890a93 10913 { "vpextrw", { Gdq, XS, Ib }, 0 },
9e30b8e0
L
10914 },
10915 {
592a252b 10916 /* VEX_W_0FD0_P_2 */
bf890a93 10917 { "vaddsubpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10918 },
10919 {
592a252b 10920 /* VEX_W_0FD0_P_3 */
bf890a93 10921 { "vaddsubps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10922 },
10923 {
592a252b 10924 /* VEX_W_0FD1_P_2 */
bf890a93 10925 { "vpsrlw", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
10926 },
10927 {
592a252b 10928 /* VEX_W_0FD2_P_2 */
bf890a93 10929 { "vpsrld", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
10930 },
10931 {
592a252b 10932 /* VEX_W_0FD3_P_2 */
bf890a93 10933 { "vpsrlq", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
10934 },
10935 {
592a252b 10936 /* VEX_W_0FD4_P_2 */
bf890a93 10937 { "vpaddq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10938 },
10939 {
592a252b 10940 /* VEX_W_0FD5_P_2 */
bf890a93 10941 { "vpmullw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10942 },
10943 {
592a252b 10944 /* VEX_W_0FD6_P_2 */
bf890a93 10945 { "vmovq", { EXqScalarS, XMScalar }, 0 },
9e30b8e0
L
10946 },
10947 {
592a252b 10948 /* VEX_W_0FD7_P_2_M_1 */
bf890a93 10949 { "vpmovmskb", { Gdq, XS }, 0 },
9e30b8e0
L
10950 },
10951 {
592a252b 10952 /* VEX_W_0FD8_P_2 */
bf890a93 10953 { "vpsubusb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10954 },
10955 {
592a252b 10956 /* VEX_W_0FD9_P_2 */
bf890a93 10957 { "vpsubusw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10958 },
10959 {
592a252b 10960 /* VEX_W_0FDA_P_2 */
bf890a93 10961 { "vpminub", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10962 },
10963 {
592a252b 10964 /* VEX_W_0FDB_P_2 */
bf890a93 10965 { "vpand", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10966 },
10967 {
592a252b 10968 /* VEX_W_0FDC_P_2 */
bf890a93 10969 { "vpaddusb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10970 },
10971 {
592a252b 10972 /* VEX_W_0FDD_P_2 */
bf890a93 10973 { "vpaddusw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10974 },
10975 {
592a252b 10976 /* VEX_W_0FDE_P_2 */
bf890a93 10977 { "vpmaxub", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10978 },
10979 {
592a252b 10980 /* VEX_W_0FDF_P_2 */
bf890a93 10981 { "vpandn", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10982 },
10983 {
592a252b 10984 /* VEX_W_0FE0_P_2 */
bf890a93 10985 { "vpavgb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10986 },
10987 {
592a252b 10988 /* VEX_W_0FE1_P_2 */
bf890a93 10989 { "vpsraw", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
10990 },
10991 {
592a252b 10992 /* VEX_W_0FE2_P_2 */
bf890a93 10993 { "vpsrad", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
10994 },
10995 {
592a252b 10996 /* VEX_W_0FE3_P_2 */
bf890a93 10997 { "vpavgw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10998 },
10999 {
592a252b 11000 /* VEX_W_0FE4_P_2 */
bf890a93 11001 { "vpmulhuw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11002 },
11003 {
592a252b 11004 /* VEX_W_0FE5_P_2 */
bf890a93 11005 { "vpmulhw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11006 },
11007 {
592a252b 11008 /* VEX_W_0FE6_P_1 */
bf890a93 11009 { "vcvtdq2pd", { XM, EXxmmq }, 0 },
9e30b8e0
L
11010 },
11011 {
592a252b 11012 /* VEX_W_0FE6_P_2 */
bf890a93 11013 { "vcvttpd2dq%XY", { XMM, EXx }, 0 },
9e30b8e0
L
11014 },
11015 {
592a252b 11016 /* VEX_W_0FE6_P_3 */
bf890a93 11017 { "vcvtpd2dq%XY", { XMM, EXx }, 0 },
9e30b8e0
L
11018 },
11019 {
592a252b 11020 /* VEX_W_0FE7_P_2_M_0 */
bf890a93 11021 { "vmovntdq", { Mx, XM }, 0 },
9e30b8e0
L
11022 },
11023 {
592a252b 11024 /* VEX_W_0FE8_P_2 */
bf890a93 11025 { "vpsubsb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11026 },
11027 {
592a252b 11028 /* VEX_W_0FE9_P_2 */
bf890a93 11029 { "vpsubsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11030 },
11031 {
592a252b 11032 /* VEX_W_0FEA_P_2 */
bf890a93 11033 { "vpminsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11034 },
11035 {
592a252b 11036 /* VEX_W_0FEB_P_2 */
bf890a93 11037 { "vpor", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11038 },
11039 {
592a252b 11040 /* VEX_W_0FEC_P_2 */
bf890a93 11041 { "vpaddsb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11042 },
11043 {
592a252b 11044 /* VEX_W_0FED_P_2 */
bf890a93 11045 { "vpaddsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11046 },
11047 {
592a252b 11048 /* VEX_W_0FEE_P_2 */
bf890a93 11049 { "vpmaxsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11050 },
11051 {
592a252b 11052 /* VEX_W_0FEF_P_2 */
bf890a93 11053 { "vpxor", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11054 },
11055 {
592a252b 11056 /* VEX_W_0FF0_P_3_M_0 */
bf890a93 11057 { "vlddqu", { XM, M }, 0 },
9e30b8e0
L
11058 },
11059 {
592a252b 11060 /* VEX_W_0FF1_P_2 */
bf890a93 11061 { "vpsllw", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
11062 },
11063 {
592a252b 11064 /* VEX_W_0FF2_P_2 */
bf890a93 11065 { "vpslld", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
11066 },
11067 {
592a252b 11068 /* VEX_W_0FF3_P_2 */
bf890a93 11069 { "vpsllq", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
11070 },
11071 {
592a252b 11072 /* VEX_W_0FF4_P_2 */
bf890a93 11073 { "vpmuludq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11074 },
11075 {
592a252b 11076 /* VEX_W_0FF5_P_2 */
bf890a93 11077 { "vpmaddwd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11078 },
11079 {
592a252b 11080 /* VEX_W_0FF6_P_2 */
bf890a93 11081 { "vpsadbw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11082 },
11083 {
592a252b 11084 /* VEX_W_0FF7_P_2 */
bf890a93 11085 { "vmaskmovdqu", { XM, XS }, 0 },
9e30b8e0
L
11086 },
11087 {
592a252b 11088 /* VEX_W_0FF8_P_2 */
bf890a93 11089 { "vpsubb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11090 },
11091 {
592a252b 11092 /* VEX_W_0FF9_P_2 */
bf890a93 11093 { "vpsubw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11094 },
11095 {
592a252b 11096 /* VEX_W_0FFA_P_2 */
bf890a93 11097 { "vpsubd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11098 },
11099 {
592a252b 11100 /* VEX_W_0FFB_P_2 */
bf890a93 11101 { "vpsubq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11102 },
11103 {
592a252b 11104 /* VEX_W_0FFC_P_2 */
bf890a93 11105 { "vpaddb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11106 },
11107 {
592a252b 11108 /* VEX_W_0FFD_P_2 */
bf890a93 11109 { "vpaddw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11110 },
11111 {
592a252b 11112 /* VEX_W_0FFE_P_2 */
bf890a93 11113 { "vpaddd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11114 },
11115 {
592a252b 11116 /* VEX_W_0F3800_P_2 */
bf890a93 11117 { "vpshufb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11118 },
11119 {
592a252b 11120 /* VEX_W_0F3801_P_2 */
bf890a93 11121 { "vphaddw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11122 },
11123 {
592a252b 11124 /* VEX_W_0F3802_P_2 */
bf890a93 11125 { "vphaddd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11126 },
11127 {
592a252b 11128 /* VEX_W_0F3803_P_2 */
bf890a93 11129 { "vphaddsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11130 },
11131 {
592a252b 11132 /* VEX_W_0F3804_P_2 */
bf890a93 11133 { "vpmaddubsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11134 },
11135 {
592a252b 11136 /* VEX_W_0F3805_P_2 */
bf890a93 11137 { "vphsubw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11138 },
11139 {
592a252b 11140 /* VEX_W_0F3806_P_2 */
bf890a93 11141 { "vphsubd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11142 },
11143 {
592a252b 11144 /* VEX_W_0F3807_P_2 */
bf890a93 11145 { "vphsubsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11146 },
11147 {
592a252b 11148 /* VEX_W_0F3808_P_2 */
bf890a93 11149 { "vpsignb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11150 },
11151 {
592a252b 11152 /* VEX_W_0F3809_P_2 */
bf890a93 11153 { "vpsignw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11154 },
11155 {
592a252b 11156 /* VEX_W_0F380A_P_2 */
bf890a93 11157 { "vpsignd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11158 },
11159 {
592a252b 11160 /* VEX_W_0F380B_P_2 */
bf890a93 11161 { "vpmulhrsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11162 },
11163 {
592a252b 11164 /* VEX_W_0F380C_P_2 */
bf890a93 11165 { "vpermilps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11166 },
11167 {
592a252b 11168 /* VEX_W_0F380D_P_2 */
bf890a93 11169 { "vpermilpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11170 },
11171 {
592a252b 11172 /* VEX_W_0F380E_P_2 */
bf890a93 11173 { "vtestps", { XM, EXx }, 0 },
9e30b8e0
L
11174 },
11175 {
592a252b 11176 /* VEX_W_0F380F_P_2 */
bf890a93 11177 { "vtestpd", { XM, EXx }, 0 },
9e30b8e0 11178 },
6c30d220
L
11179 {
11180 /* VEX_W_0F3816_P_2 */
bf890a93 11181 { "vpermps", { XM, Vex, EXx }, 0 },
6c30d220 11182 },
9e30b8e0 11183 {
592a252b 11184 /* VEX_W_0F3817_P_2 */
bf890a93 11185 { "vptest", { XM, EXx }, 0 },
9e30b8e0 11186 },
bcf2684f 11187 {
6c30d220 11188 /* VEX_W_0F3818_P_2 */
bf890a93 11189 { "vbroadcastss", { XM, EXxmm_md }, 0 },
bcf2684f 11190 },
9e30b8e0 11191 {
6c30d220 11192 /* VEX_W_0F3819_P_2 */
bf890a93 11193 { "vbroadcastsd", { XM, EXxmm_mq }, 0 },
9e30b8e0
L
11194 },
11195 {
592a252b 11196 /* VEX_W_0F381A_P_2_M_0 */
bf890a93 11197 { "vbroadcastf128", { XM, Mxmm }, 0 },
9e30b8e0
L
11198 },
11199 {
592a252b 11200 /* VEX_W_0F381C_P_2 */
bf890a93 11201 { "vpabsb", { XM, EXx }, 0 },
9e30b8e0
L
11202 },
11203 {
592a252b 11204 /* VEX_W_0F381D_P_2 */
bf890a93 11205 { "vpabsw", { XM, EXx }, 0 },
9e30b8e0
L
11206 },
11207 {
592a252b 11208 /* VEX_W_0F381E_P_2 */
bf890a93 11209 { "vpabsd", { XM, EXx }, 0 },
9e30b8e0
L
11210 },
11211 {
592a252b 11212 /* VEX_W_0F3820_P_2 */
bf890a93 11213 { "vpmovsxbw", { XM, EXxmmq }, 0 },
9e30b8e0
L
11214 },
11215 {
592a252b 11216 /* VEX_W_0F3821_P_2 */
bf890a93 11217 { "vpmovsxbd", { XM, EXxmmqd }, 0 },
9e30b8e0
L
11218 },
11219 {
592a252b 11220 /* VEX_W_0F3822_P_2 */
bf890a93 11221 { "vpmovsxbq", { XM, EXxmmdw }, 0 },
9e30b8e0
L
11222 },
11223 {
592a252b 11224 /* VEX_W_0F3823_P_2 */
bf890a93 11225 { "vpmovsxwd", { XM, EXxmmq }, 0 },
9e30b8e0
L
11226 },
11227 {
592a252b 11228 /* VEX_W_0F3824_P_2 */
bf890a93 11229 { "vpmovsxwq", { XM, EXxmmqd }, 0 },
9e30b8e0
L
11230 },
11231 {
592a252b 11232 /* VEX_W_0F3825_P_2 */
bf890a93 11233 { "vpmovsxdq", { XM, EXxmmq }, 0 },
9e30b8e0
L
11234 },
11235 {
592a252b 11236 /* VEX_W_0F3828_P_2 */
bf890a93 11237 { "vpmuldq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11238 },
11239 {
592a252b 11240 /* VEX_W_0F3829_P_2 */
bf890a93 11241 { "vpcmpeqq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11242 },
11243 {
592a252b 11244 /* VEX_W_0F382A_P_2_M_0 */
bf890a93 11245 { "vmovntdqa", { XM, Mx }, 0 },
9e30b8e0
L
11246 },
11247 {
592a252b 11248 /* VEX_W_0F382B_P_2 */
bf890a93 11249 { "vpackusdw", { XM, Vex, EXx }, 0 },
9e30b8e0 11250 },
53aa04a0 11251 {
592a252b 11252 /* VEX_W_0F382C_P_2_M_0 */
bf890a93 11253 { "vmaskmovps", { XM, Vex, Mx }, 0 },
53aa04a0
L
11254 },
11255 {
592a252b 11256 /* VEX_W_0F382D_P_2_M_0 */
bf890a93 11257 { "vmaskmovpd", { XM, Vex, Mx }, 0 },
53aa04a0
L
11258 },
11259 {
592a252b 11260 /* VEX_W_0F382E_P_2_M_0 */
bf890a93 11261 { "vmaskmovps", { Mx, Vex, XM }, 0 },
53aa04a0
L
11262 },
11263 {
592a252b 11264 /* VEX_W_0F382F_P_2_M_0 */
bf890a93 11265 { "vmaskmovpd", { Mx, Vex, XM }, 0 },
53aa04a0 11266 },
9e30b8e0 11267 {
592a252b 11268 /* VEX_W_0F3830_P_2 */
bf890a93 11269 { "vpmovzxbw", { XM, EXxmmq }, 0 },
9e30b8e0
L
11270 },
11271 {
592a252b 11272 /* VEX_W_0F3831_P_2 */
bf890a93 11273 { "vpmovzxbd", { XM, EXxmmqd }, 0 },
9e30b8e0
L
11274 },
11275 {
592a252b 11276 /* VEX_W_0F3832_P_2 */
bf890a93 11277 { "vpmovzxbq", { XM, EXxmmdw }, 0 },
9e30b8e0
L
11278 },
11279 {
592a252b 11280 /* VEX_W_0F3833_P_2 */
bf890a93 11281 { "vpmovzxwd", { XM, EXxmmq }, 0 },
9e30b8e0
L
11282 },
11283 {
592a252b 11284 /* VEX_W_0F3834_P_2 */
bf890a93 11285 { "vpmovzxwq", { XM, EXxmmqd }, 0 },
9e30b8e0
L
11286 },
11287 {
592a252b 11288 /* VEX_W_0F3835_P_2 */
bf890a93 11289 { "vpmovzxdq", { XM, EXxmmq }, 0 },
6c30d220
L
11290 },
11291 {
11292 /* VEX_W_0F3836_P_2 */
bf890a93 11293 { "vpermd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11294 },
11295 {
592a252b 11296 /* VEX_W_0F3837_P_2 */
bf890a93 11297 { "vpcmpgtq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11298 },
11299 {
592a252b 11300 /* VEX_W_0F3838_P_2 */
bf890a93 11301 { "vpminsb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11302 },
11303 {
592a252b 11304 /* VEX_W_0F3839_P_2 */
bf890a93 11305 { "vpminsd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11306 },
11307 {
592a252b 11308 /* VEX_W_0F383A_P_2 */
bf890a93 11309 { "vpminuw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11310 },
11311 {
592a252b 11312 /* VEX_W_0F383B_P_2 */
bf890a93 11313 { "vpminud", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11314 },
11315 {
592a252b 11316 /* VEX_W_0F383C_P_2 */
bf890a93 11317 { "vpmaxsb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11318 },
11319 {
592a252b 11320 /* VEX_W_0F383D_P_2 */
bf890a93 11321 { "vpmaxsd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11322 },
11323 {
592a252b 11324 /* VEX_W_0F383E_P_2 */
bf890a93 11325 { "vpmaxuw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11326 },
11327 {
592a252b 11328 /* VEX_W_0F383F_P_2 */
bf890a93 11329 { "vpmaxud", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11330 },
11331 {
592a252b 11332 /* VEX_W_0F3840_P_2 */
bf890a93 11333 { "vpmulld", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11334 },
11335 {
592a252b 11336 /* VEX_W_0F3841_P_2 */
bf890a93 11337 { "vphminposuw", { XM, EXx }, 0 },
9e30b8e0 11338 },
6c30d220
L
11339 {
11340 /* VEX_W_0F3846_P_2 */
bf890a93 11341 { "vpsravd", { XM, Vex, EXx }, 0 },
6c30d220
L
11342 },
11343 {
11344 /* VEX_W_0F3858_P_2 */
bf890a93 11345 { "vpbroadcastd", { XM, EXxmm_md }, 0 },
6c30d220
L
11346 },
11347 {
11348 /* VEX_W_0F3859_P_2 */
bf890a93 11349 { "vpbroadcastq", { XM, EXxmm_mq }, 0 },
6c30d220
L
11350 },
11351 {
11352 /* VEX_W_0F385A_P_2_M_0 */
bf890a93 11353 { "vbroadcasti128", { XM, Mxmm }, 0 },
6c30d220
L
11354 },
11355 {
11356 /* VEX_W_0F3878_P_2 */
bf890a93 11357 { "vpbroadcastb", { XM, EXxmm_mb }, 0 },
6c30d220
L
11358 },
11359 {
11360 /* VEX_W_0F3879_P_2 */
bf890a93 11361 { "vpbroadcastw", { XM, EXxmm_mw }, 0 },
6c30d220 11362 },
9e30b8e0 11363 {
592a252b 11364 /* VEX_W_0F38DB_P_2 */
bf890a93 11365 { "vaesimc", { XM, EXx }, 0 },
9e30b8e0
L
11366 },
11367 {
592a252b 11368 /* VEX_W_0F38DC_P_2 */
bf890a93 11369 { "vaesenc", { XM, Vex128, EXx }, 0 },
9e30b8e0
L
11370 },
11371 {
592a252b 11372 /* VEX_W_0F38DD_P_2 */
bf890a93 11373 { "vaesenclast", { XM, Vex128, EXx }, 0 },
9e30b8e0
L
11374 },
11375 {
592a252b 11376 /* VEX_W_0F38DE_P_2 */
bf890a93 11377 { "vaesdec", { XM, Vex128, EXx }, 0 },
9e30b8e0
L
11378 },
11379 {
592a252b 11380 /* VEX_W_0F38DF_P_2 */
bf890a93 11381 { "vaesdeclast", { XM, Vex128, EXx }, 0 },
9e30b8e0 11382 },
6c30d220
L
11383 {
11384 /* VEX_W_0F3A00_P_2 */
11385 { Bad_Opcode },
bf890a93 11386 { "vpermq", { XM, EXx, Ib }, 0 },
6c30d220
L
11387 },
11388 {
11389 /* VEX_W_0F3A01_P_2 */
11390 { Bad_Opcode },
bf890a93 11391 { "vpermpd", { XM, EXx, Ib }, 0 },
6c30d220
L
11392 },
11393 {
11394 /* VEX_W_0F3A02_P_2 */
bf890a93 11395 { "vpblendd", { XM, Vex, EXx, Ib }, 0 },
6c30d220 11396 },
9e30b8e0 11397 {
592a252b 11398 /* VEX_W_0F3A04_P_2 */
bf890a93 11399 { "vpermilps", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11400 },
11401 {
592a252b 11402 /* VEX_W_0F3A05_P_2 */
bf890a93 11403 { "vpermilpd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11404 },
11405 {
592a252b 11406 /* VEX_W_0F3A06_P_2 */
bf890a93 11407 { "vperm2f128", { XM, Vex256, EXx, Ib }, 0 },
9e30b8e0
L
11408 },
11409 {
592a252b 11410 /* VEX_W_0F3A08_P_2 */
bf890a93 11411 { "vroundps", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11412 },
11413 {
592a252b 11414 /* VEX_W_0F3A09_P_2 */
bf890a93 11415 { "vroundpd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11416 },
11417 {
592a252b 11418 /* VEX_W_0F3A0A_P_2 */
bf890a93 11419 { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib }, 0 },
9e30b8e0
L
11420 },
11421 {
592a252b 11422 /* VEX_W_0F3A0B_P_2 */
bf890a93 11423 { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib }, 0 },
9e30b8e0
L
11424 },
11425 {
592a252b 11426 /* VEX_W_0F3A0C_P_2 */
bf890a93 11427 { "vblendps", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11428 },
11429 {
592a252b 11430 /* VEX_W_0F3A0D_P_2 */
bf890a93 11431 { "vblendpd", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11432 },
11433 {
592a252b 11434 /* VEX_W_0F3A0E_P_2 */
bf890a93 11435 { "vpblendw", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11436 },
11437 {
592a252b 11438 /* VEX_W_0F3A0F_P_2 */
bf890a93 11439 { "vpalignr", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11440 },
11441 {
592a252b 11442 /* VEX_W_0F3A14_P_2 */
bf890a93 11443 { "vpextrb", { Edqb, XM, Ib }, 0 },
9e30b8e0
L
11444 },
11445 {
592a252b 11446 /* VEX_W_0F3A15_P_2 */
bf890a93 11447 { "vpextrw", { Edqw, XM, Ib }, 0 },
9e30b8e0
L
11448 },
11449 {
592a252b 11450 /* VEX_W_0F3A18_P_2 */
bf890a93 11451 { "vinsertf128", { XM, Vex256, EXxmm, Ib }, 0 },
9e30b8e0
L
11452 },
11453 {
592a252b 11454 /* VEX_W_0F3A19_P_2 */
bf890a93 11455 { "vextractf128", { EXxmm, XM, Ib }, 0 },
9e30b8e0
L
11456 },
11457 {
592a252b 11458 /* VEX_W_0F3A20_P_2 */
bf890a93 11459 { "vpinsrb", { XM, Vex128, Edqb, Ib }, 0 },
9e30b8e0
L
11460 },
11461 {
592a252b 11462 /* VEX_W_0F3A21_P_2 */
bf890a93 11463 { "vinsertps", { XM, Vex128, EXd, Ib }, 0 },
9e30b8e0 11464 },
43234a1e 11465 {
1ba585e8 11466 /* VEX_W_0F3A30_P_2_LEN_0 */
bf890a93
IT
11467 { "kshiftrb", { MaskG, MaskR, Ib }, 0 },
11468 { "kshiftrw", { MaskG, MaskR, Ib }, 0 },
43234a1e
L
11469 },
11470 {
1ba585e8 11471 /* VEX_W_0F3A31_P_2_LEN_0 */
bf890a93
IT
11472 { "kshiftrd", { MaskG, MaskR, Ib }, 0 },
11473 { "kshiftrq", { MaskG, MaskR, Ib }, 0 },
1ba585e8
IT
11474 },
11475 {
11476 /* VEX_W_0F3A32_P_2_LEN_0 */
bf890a93
IT
11477 { "kshiftlb", { MaskG, MaskR, Ib }, 0 },
11478 { "kshiftlw", { MaskG, MaskR, Ib }, 0 },
43234a1e 11479 },
1ba585e8
IT
11480 {
11481 /* VEX_W_0F3A33_P_2_LEN_0 */
bf890a93
IT
11482 { "kshiftld", { MaskG, MaskR, Ib }, 0 },
11483 { "kshiftlq", { MaskG, MaskR, Ib }, 0 },
1ba585e8 11484 },
6c30d220
L
11485 {
11486 /* VEX_W_0F3A38_P_2 */
bf890a93 11487 { "vinserti128", { XM, Vex256, EXxmm, Ib }, 0 },
6c30d220
L
11488 },
11489 {
11490 /* VEX_W_0F3A39_P_2 */
bf890a93 11491 { "vextracti128", { EXxmm, XM, Ib }, 0 },
6c30d220 11492 },
9e30b8e0 11493 {
592a252b 11494 /* VEX_W_0F3A40_P_2 */
bf890a93 11495 { "vdpps", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11496 },
11497 {
592a252b 11498 /* VEX_W_0F3A41_P_2 */
bf890a93 11499 { "vdppd", { XM, Vex128, EXx, Ib }, 0 },
9e30b8e0
L
11500 },
11501 {
592a252b 11502 /* VEX_W_0F3A42_P_2 */
bf890a93 11503 { "vmpsadbw", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11504 },
11505 {
592a252b 11506 /* VEX_W_0F3A44_P_2 */
bf890a93 11507 { "vpclmulqdq", { XM, Vex128, EXx, PCLMUL }, 0 },
9e30b8e0 11508 },
6c30d220
L
11509 {
11510 /* VEX_W_0F3A46_P_2 */
bf890a93 11511 { "vperm2i128", { XM, Vex256, EXx, Ib }, 0 },
6c30d220 11512 },
a683cc34 11513 {
592a252b 11514 /* VEX_W_0F3A48_P_2 */
bf890a93
IT
11515 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
11516 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34
SP
11517 },
11518 {
592a252b 11519 /* VEX_W_0F3A49_P_2 */
bf890a93
IT
11520 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
11521 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34 11522 },
9e30b8e0 11523 {
592a252b 11524 /* VEX_W_0F3A4A_P_2 */
bf890a93 11525 { "vblendvps", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
11526 },
11527 {
592a252b 11528 /* VEX_W_0F3A4B_P_2 */
bf890a93 11529 { "vblendvpd", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
11530 },
11531 {
592a252b 11532 /* VEX_W_0F3A4C_P_2 */
bf890a93 11533 { "vpblendvb", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
11534 },
11535 {
592a252b 11536 /* VEX_W_0F3A60_P_2 */
bf890a93 11537 { "vpcmpestrm", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11538 },
11539 {
592a252b 11540 /* VEX_W_0F3A61_P_2 */
bf890a93 11541 { "vpcmpestri", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11542 },
11543 {
592a252b 11544 /* VEX_W_0F3A62_P_2 */
bf890a93 11545 { "vpcmpistrm", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11546 },
11547 {
592a252b 11548 /* VEX_W_0F3A63_P_2 */
bf890a93 11549 { "vpcmpistri", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11550 },
11551 {
592a252b 11552 /* VEX_W_0F3ADF_P_2 */
bf890a93 11553 { "vaeskeygenassist", { XM, EXx, Ib }, 0 },
9e30b8e0 11554 },
43234a1e
L
11555#define NEED_VEX_W_TABLE
11556#include "i386-dis-evex.h"
11557#undef NEED_VEX_W_TABLE
9e30b8e0
L
11558};
11559
11560static const struct dis386 mod_table[][2] = {
11561 {
11562 /* MOD_8D */
bf890a93 11563 { "leaS", { Gv, M }, 0 },
9e30b8e0 11564 },
42164a71
L
11565 {
11566 /* MOD_C6_REG_7 */
11567 { Bad_Opcode },
11568 { RM_TABLE (RM_C6_REG_7) },
11569 },
11570 {
11571 /* MOD_C7_REG_7 */
11572 { Bad_Opcode },
11573 { RM_TABLE (RM_C7_REG_7) },
11574 },
4a357820
MZ
11575 {
11576 /* MOD_FF_REG_3 */
bf890a93 11577 { "Jcall{T|}", { indirEp }, 0 },
4a357820
MZ
11578 },
11579 {
11580 /* MOD_FF_REG_5 */
bf890a93 11581 { "Jjmp{T|}", { indirEp }, 0 },
4a357820 11582 },
9e30b8e0
L
11583 {
11584 /* MOD_0F01_REG_0 */
11585 { X86_64_TABLE (X86_64_0F01_REG_0) },
11586 { RM_TABLE (RM_0F01_REG_0) },
11587 },
11588 {
11589 /* MOD_0F01_REG_1 */
11590 { X86_64_TABLE (X86_64_0F01_REG_1) },
11591 { RM_TABLE (RM_0F01_REG_1) },
11592 },
11593 {
11594 /* MOD_0F01_REG_2 */
11595 { X86_64_TABLE (X86_64_0F01_REG_2) },
11596 { RM_TABLE (RM_0F01_REG_2) },
11597 },
11598 {
11599 /* MOD_0F01_REG_3 */
11600 { X86_64_TABLE (X86_64_0F01_REG_3) },
11601 { RM_TABLE (RM_0F01_REG_3) },
11602 },
11603 {
11604 /* MOD_0F01_REG_7 */
bf890a93 11605 { "invlpg", { Mb }, 0 },
9e30b8e0
L
11606 { RM_TABLE (RM_0F01_REG_7) },
11607 },
11608 {
11609 /* MOD_0F12_PREFIX_0 */
507bd325
L
11610 { "movlps", { XM, EXq }, PREFIX_OPCODE },
11611 { "movhlps", { XM, EXq }, PREFIX_OPCODE },
9e30b8e0
L
11612 },
11613 {
11614 /* MOD_0F13 */
507bd325 11615 { "movlpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
11616 },
11617 {
11618 /* MOD_0F16_PREFIX_0 */
bf890a93
IT
11619 { "movhps", { XM, EXq }, 0 },
11620 { "movlhps", { XM, EXq }, 0 },
9e30b8e0
L
11621 },
11622 {
11623 /* MOD_0F17 */
507bd325 11624 { "movhpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
11625 },
11626 {
11627 /* MOD_0F18_REG_0 */
bf890a93 11628 { "prefetchnta", { Mb }, 0 },
9e30b8e0
L
11629 },
11630 {
11631 /* MOD_0F18_REG_1 */
bf890a93 11632 { "prefetcht0", { Mb }, 0 },
9e30b8e0
L
11633 },
11634 {
11635 /* MOD_0F18_REG_2 */
bf890a93 11636 { "prefetcht1", { Mb }, 0 },
9e30b8e0
L
11637 },
11638 {
11639 /* MOD_0F18_REG_3 */
bf890a93 11640 { "prefetcht2", { Mb }, 0 },
9e30b8e0 11641 },
d7189fa5
RM
11642 {
11643 /* MOD_0F18_REG_4 */
bf890a93 11644 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
11645 },
11646 {
11647 /* MOD_0F18_REG_5 */
bf890a93 11648 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
11649 },
11650 {
11651 /* MOD_0F18_REG_6 */
bf890a93 11652 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
11653 },
11654 {
11655 /* MOD_0F18_REG_7 */
bf890a93 11656 { "nop/reserved", { Mb }, 0 },
d7189fa5 11657 },
7e8b059b
L
11658 {
11659 /* MOD_0F1A_PREFIX_0 */
bf890a93
IT
11660 { "bndldx", { Gbnd, Ev_bnd }, 0 },
11661 { "nopQ", { Ev }, 0 },
7e8b059b
L
11662 },
11663 {
11664 /* MOD_0F1B_PREFIX_0 */
bf890a93
IT
11665 { "bndstx", { Ev_bnd, Gbnd }, 0 },
11666 { "nopQ", { Ev }, 0 },
7e8b059b
L
11667 },
11668 {
11669 /* MOD_0F1B_PREFIX_1 */
bf890a93
IT
11670 { "bndmk", { Gbnd, Ev_bnd }, 0 },
11671 { "nopQ", { Ev }, 0 },
7e8b059b 11672 },
b844680a 11673 {
92fddf8e 11674 /* MOD_0F24 */
7bb15c6f 11675 { Bad_Opcode },
bf890a93 11676 { "movL", { Rd, Td }, 0 },
b844680a
L
11677 },
11678 {
92fddf8e 11679 /* MOD_0F26 */
592d1631 11680 { Bad_Opcode },
bf890a93 11681 { "movL", { Td, Rd }, 0 },
b844680a 11682 },
75c135a8
L
11683 {
11684 /* MOD_0F2B_PREFIX_0 */
507bd325 11685 {"movntps", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
11686 },
11687 {
11688 /* MOD_0F2B_PREFIX_1 */
507bd325 11689 {"movntss", { Md, XM }, PREFIX_OPCODE },
75c135a8
L
11690 },
11691 {
11692 /* MOD_0F2B_PREFIX_2 */
507bd325 11693 {"movntpd", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
11694 },
11695 {
11696 /* MOD_0F2B_PREFIX_3 */
507bd325 11697 {"movntsd", { Mq, XM }, PREFIX_OPCODE },
75c135a8
L
11698 },
11699 {
11700 /* MOD_0F51 */
592d1631 11701 { Bad_Opcode },
507bd325 11702 { "movmskpX", { Gdq, XS }, PREFIX_OPCODE },
75c135a8 11703 },
b844680a 11704 {
1ceb70f8 11705 /* MOD_0F71_REG_2 */
592d1631 11706 { Bad_Opcode },
bf890a93 11707 { "psrlw", { MS, Ib }, 0 },
b844680a
L
11708 },
11709 {
1ceb70f8 11710 /* MOD_0F71_REG_4 */
592d1631 11711 { Bad_Opcode },
bf890a93 11712 { "psraw", { MS, Ib }, 0 },
b844680a
L
11713 },
11714 {
1ceb70f8 11715 /* MOD_0F71_REG_6 */
592d1631 11716 { Bad_Opcode },
bf890a93 11717 { "psllw", { MS, Ib }, 0 },
b844680a
L
11718 },
11719 {
1ceb70f8 11720 /* MOD_0F72_REG_2 */
592d1631 11721 { Bad_Opcode },
bf890a93 11722 { "psrld", { MS, Ib }, 0 },
b844680a
L
11723 },
11724 {
1ceb70f8 11725 /* MOD_0F72_REG_4 */
592d1631 11726 { Bad_Opcode },
bf890a93 11727 { "psrad", { MS, Ib }, 0 },
b844680a
L
11728 },
11729 {
1ceb70f8 11730 /* MOD_0F72_REG_6 */
592d1631 11731 { Bad_Opcode },
bf890a93 11732 { "pslld", { MS, Ib }, 0 },
b844680a
L
11733 },
11734 {
1ceb70f8 11735 /* MOD_0F73_REG_2 */
592d1631 11736 { Bad_Opcode },
bf890a93 11737 { "psrlq", { MS, Ib }, 0 },
b844680a
L
11738 },
11739 {
1ceb70f8 11740 /* MOD_0F73_REG_3 */
592d1631 11741 { Bad_Opcode },
c0f3af97
L
11742 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
11743 },
11744 {
11745 /* MOD_0F73_REG_6 */
592d1631 11746 { Bad_Opcode },
bf890a93 11747 { "psllq", { MS, Ib }, 0 },
c0f3af97
L
11748 },
11749 {
11750 /* MOD_0F73_REG_7 */
592d1631 11751 { Bad_Opcode },
c0f3af97
L
11752 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
11753 },
11754 {
11755 /* MOD_0FAE_REG_0 */
bf890a93 11756 { "fxsave", { FXSAVE }, 0 },
c7b8aa3a 11757 { PREFIX_TABLE (PREFIX_0FAE_REG_0) },
c0f3af97
L
11758 },
11759 {
11760 /* MOD_0FAE_REG_1 */
bf890a93 11761 { "fxrstor", { FXSAVE }, 0 },
c7b8aa3a 11762 { PREFIX_TABLE (PREFIX_0FAE_REG_1) },
c0f3af97
L
11763 },
11764 {
11765 /* MOD_0FAE_REG_2 */
bf890a93 11766 { "ldmxcsr", { Md }, 0 },
c7b8aa3a 11767 { PREFIX_TABLE (PREFIX_0FAE_REG_2) },
c0f3af97
L
11768 },
11769 {
11770 /* MOD_0FAE_REG_3 */
bf890a93 11771 { "stmxcsr", { Md }, 0 },
c7b8aa3a 11772 { PREFIX_TABLE (PREFIX_0FAE_REG_3) },
c0f3af97
L
11773 },
11774 {
11775 /* MOD_0FAE_REG_4 */
bf890a93 11776 { "xsave", { FXSAVE }, 0 },
c0f3af97
L
11777 },
11778 {
11779 /* MOD_0FAE_REG_5 */
bf890a93 11780 { "xrstor", { FXSAVE }, 0 },
c0f3af97
L
11781 { RM_TABLE (RM_0FAE_REG_5) },
11782 },
11783 {
11784 /* MOD_0FAE_REG_6 */
c5e7287a 11785 { PREFIX_TABLE (PREFIX_0FAE_REG_6) },
c0f3af97
L
11786 { RM_TABLE (RM_0FAE_REG_6) },
11787 },
11788 {
11789 /* MOD_0FAE_REG_7 */
963f3586 11790 { PREFIX_TABLE (PREFIX_0FAE_REG_7) },
c0f3af97
L
11791 { RM_TABLE (RM_0FAE_REG_7) },
11792 },
11793 {
11794 /* MOD_0FB2 */
bf890a93 11795 { "lssS", { Gv, Mp }, 0 },
c0f3af97
L
11796 },
11797 {
11798 /* MOD_0FB4 */
bf890a93 11799 { "lfsS", { Gv, Mp }, 0 },
c0f3af97
L
11800 },
11801 {
11802 /* MOD_0FB5 */
bf890a93 11803 { "lgsS", { Gv, Mp }, 0 },
c0f3af97 11804 },
963f3586
IT
11805 {
11806 /* MOD_0FC7_REG_3 */
bf890a93 11807 { "xrstors", { FXSAVE }, 0 },
963f3586
IT
11808 },
11809 {
11810 /* MOD_0FC7_REG_4 */
bf890a93 11811 { "xsavec", { FXSAVE }, 0 },
963f3586
IT
11812 },
11813 {
11814 /* MOD_0FC7_REG_5 */
bf890a93 11815 { "xsaves", { FXSAVE }, 0 },
963f3586 11816 },
c0f3af97
L
11817 {
11818 /* MOD_0FC7_REG_6 */
f24bcbaa
L
11819 { PREFIX_TABLE (PREFIX_MOD_0_0FC7_REG_6) },
11820 { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_6) }
c0f3af97
L
11821 },
11822 {
11823 /* MOD_0FC7_REG_7 */
bf890a93 11824 { "vmptrst", { Mq }, 0 },
f24bcbaa 11825 { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_7) }
c0f3af97
L
11826 },
11827 {
11828 /* MOD_0FD7 */
592d1631 11829 { Bad_Opcode },
bf890a93 11830 { "pmovmskb", { Gdq, MS }, 0 },
c0f3af97
L
11831 },
11832 {
11833 /* MOD_0FE7_PREFIX_2 */
bf890a93 11834 { "movntdq", { Mx, XM }, 0 },
c0f3af97
L
11835 },
11836 {
11837 /* MOD_0FF0_PREFIX_3 */
bf890a93 11838 { "lddqu", { XM, M }, 0 },
c0f3af97
L
11839 },
11840 {
11841 /* MOD_0F382A_PREFIX_2 */
bf890a93 11842 { "movntdqa", { XM, Mx }, 0 },
c0f3af97
L
11843 },
11844 {
11845 /* MOD_62_32BIT */
bf890a93 11846 { "bound{S|}", { Gv, Ma }, 0 },
43234a1e 11847 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
11848 },
11849 {
11850 /* MOD_C4_32BIT */
bf890a93 11851 { "lesS", { Gv, Mp }, 0 },
c0f3af97
L
11852 { VEX_C4_TABLE (VEX_0F) },
11853 },
11854 {
11855 /* MOD_C5_32BIT */
bf890a93 11856 { "ldsS", { Gv, Mp }, 0 },
c0f3af97
L
11857 { VEX_C5_TABLE (VEX_0F) },
11858 },
11859 {
592a252b
L
11860 /* MOD_VEX_0F12_PREFIX_0 */
11861 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
11862 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
c0f3af97
L
11863 },
11864 {
592a252b
L
11865 /* MOD_VEX_0F13 */
11866 { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
c0f3af97
L
11867 },
11868 {
592a252b
L
11869 /* MOD_VEX_0F16_PREFIX_0 */
11870 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
11871 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
c0f3af97
L
11872 },
11873 {
592a252b
L
11874 /* MOD_VEX_0F17 */
11875 { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
c0f3af97
L
11876 },
11877 {
592a252b
L
11878 /* MOD_VEX_0F2B */
11879 { VEX_W_TABLE (VEX_W_0F2B_M_0) },
c0f3af97
L
11880 },
11881 {
592a252b 11882 /* MOD_VEX_0F50 */
592d1631 11883 { Bad_Opcode },
592a252b 11884 { VEX_W_TABLE (VEX_W_0F50_M_0) },
c0f3af97
L
11885 },
11886 {
592a252b 11887 /* MOD_VEX_0F71_REG_2 */
592d1631 11888 { Bad_Opcode },
592a252b 11889 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
b844680a
L
11890 },
11891 {
592a252b 11892 /* MOD_VEX_0F71_REG_4 */
592d1631 11893 { Bad_Opcode },
592a252b 11894 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
b844680a
L
11895 },
11896 {
592a252b 11897 /* MOD_VEX_0F71_REG_6 */
592d1631 11898 { Bad_Opcode },
592a252b 11899 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
b844680a
L
11900 },
11901 {
592a252b 11902 /* MOD_VEX_0F72_REG_2 */
592d1631 11903 { Bad_Opcode },
592a252b 11904 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
b844680a 11905 },
d8faab4e 11906 {
592a252b 11907 /* MOD_VEX_0F72_REG_4 */
592d1631 11908 { Bad_Opcode },
592a252b 11909 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
d8faab4e
L
11910 },
11911 {
592a252b 11912 /* MOD_VEX_0F72_REG_6 */
592d1631 11913 { Bad_Opcode },
592a252b 11914 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
d8faab4e 11915 },
876d4bfa 11916 {
592a252b 11917 /* MOD_VEX_0F73_REG_2 */
592d1631 11918 { Bad_Opcode },
592a252b 11919 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
876d4bfa
L
11920 },
11921 {
592a252b 11922 /* MOD_VEX_0F73_REG_3 */
592d1631 11923 { Bad_Opcode },
592a252b 11924 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
475a2301
L
11925 },
11926 {
592a252b 11927 /* MOD_VEX_0F73_REG_6 */
592d1631 11928 { Bad_Opcode },
592a252b 11929 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
876d4bfa
L
11930 },
11931 {
592a252b 11932 /* MOD_VEX_0F73_REG_7 */
592d1631 11933 { Bad_Opcode },
592a252b 11934 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
876d4bfa
L
11935 },
11936 {
592a252b
L
11937 /* MOD_VEX_0FAE_REG_2 */
11938 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
876d4bfa 11939 },
bbedc832 11940 {
592a252b
L
11941 /* MOD_VEX_0FAE_REG_3 */
11942 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
bbedc832 11943 },
144c41d9 11944 {
592a252b 11945 /* MOD_VEX_0FD7_PREFIX_2 */
592d1631 11946 { Bad_Opcode },
6c30d220 11947 { VEX_W_TABLE (VEX_W_0FD7_P_2_M_1) },
144c41d9 11948 },
1afd85e3 11949 {
592a252b
L
11950 /* MOD_VEX_0FE7_PREFIX_2 */
11951 { VEX_W_TABLE (VEX_W_0FE7_P_2_M_0) },
1afd85e3
L
11952 },
11953 {
592a252b
L
11954 /* MOD_VEX_0FF0_PREFIX_3 */
11955 { VEX_W_TABLE (VEX_W_0FF0_P_3_M_0) },
92fddf8e 11956 },
75c135a8 11957 {
592a252b
L
11958 /* MOD_VEX_0F381A_PREFIX_2 */
11959 { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
75c135a8 11960 },
1afd85e3 11961 {
592a252b 11962 /* MOD_VEX_0F382A_PREFIX_2 */
6c30d220 11963 { VEX_W_TABLE (VEX_W_0F382A_P_2_M_0) },
1afd85e3 11964 },
75c135a8 11965 {
592a252b
L
11966 /* MOD_VEX_0F382C_PREFIX_2 */
11967 { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
75c135a8 11968 },
1afd85e3 11969 {
592a252b
L
11970 /* MOD_VEX_0F382D_PREFIX_2 */
11971 { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
1afd85e3
L
11972 },
11973 {
592a252b
L
11974 /* MOD_VEX_0F382E_PREFIX_2 */
11975 { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
1afd85e3
L
11976 },
11977 {
592a252b
L
11978 /* MOD_VEX_0F382F_PREFIX_2 */
11979 { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
1afd85e3 11980 },
6c30d220
L
11981 {
11982 /* MOD_VEX_0F385A_PREFIX_2 */
11983 { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) },
11984 },
11985 {
11986 /* MOD_VEX_0F388C_PREFIX_2 */
bf890a93 11987 { "vpmaskmov%LW", { XM, Vex, Mx }, 0 },
6c30d220
L
11988 },
11989 {
11990 /* MOD_VEX_0F388E_PREFIX_2 */
bf890a93 11991 { "vpmaskmov%LW", { Mx, Vex, XM }, 0 },
6c30d220 11992 },
43234a1e
L
11993#define NEED_MOD_TABLE
11994#include "i386-dis-evex.h"
11995#undef NEED_MOD_TABLE
b844680a
L
11996};
11997
1ceb70f8 11998static const struct dis386 rm_table[][8] = {
42164a71
L
11999 {
12000 /* RM_C6_REG_7 */
bf890a93 12001 { "xabort", { Skip_MODRM, Ib }, 0 },
42164a71
L
12002 },
12003 {
12004 /* RM_C7_REG_7 */
bf890a93 12005 { "xbeginT", { Skip_MODRM, Jv }, 0 },
42164a71 12006 },
b844680a 12007 {
1ceb70f8 12008 /* RM_0F01_REG_0 */
592d1631 12009 { Bad_Opcode },
bf890a93
IT
12010 { "vmcall", { Skip_MODRM }, 0 },
12011 { "vmlaunch", { Skip_MODRM }, 0 },
12012 { "vmresume", { Skip_MODRM }, 0 },
12013 { "vmxoff", { Skip_MODRM }, 0 },
b844680a
L
12014 },
12015 {
1ceb70f8 12016 /* RM_0F01_REG_1 */
bf890a93
IT
12017 { "monitor", { { OP_Monitor, 0 } }, 0 },
12018 { "mwait", { { OP_Mwait, 0 } }, 0 },
12019 { "clac", { Skip_MODRM }, 0 },
12020 { "stac", { Skip_MODRM }, 0 },
2cf200a4
IT
12021 { Bad_Opcode },
12022 { Bad_Opcode },
12023 { Bad_Opcode },
bf890a93 12024 { "encls", { Skip_MODRM }, 0 },
b844680a 12025 },
475a2301
L
12026 {
12027 /* RM_0F01_REG_2 */
bf890a93
IT
12028 { "xgetbv", { Skip_MODRM }, 0 },
12029 { "xsetbv", { Skip_MODRM }, 0 },
8729a6f6
L
12030 { Bad_Opcode },
12031 { Bad_Opcode },
bf890a93
IT
12032 { "vmfunc", { Skip_MODRM }, 0 },
12033 { "xend", { Skip_MODRM }, 0 },
12034 { "xtest", { Skip_MODRM }, 0 },
12035 { "enclu", { Skip_MODRM }, 0 },
475a2301 12036 },
b844680a 12037 {
1ceb70f8 12038 /* RM_0F01_REG_3 */
bf890a93
IT
12039 { "vmrun", { Skip_MODRM }, 0 },
12040 { "vmmcall", { Skip_MODRM }, 0 },
12041 { "vmload", { Skip_MODRM }, 0 },
12042 { "vmsave", { Skip_MODRM }, 0 },
12043 { "stgi", { Skip_MODRM }, 0 },
12044 { "clgi", { Skip_MODRM }, 0 },
12045 { "skinit", { Skip_MODRM }, 0 },
12046 { "invlpga", { Skip_MODRM }, 0 },
4e7d34a6
L
12047 },
12048 {
1ceb70f8 12049 /* RM_0F01_REG_7 */
bf890a93
IT
12050 { "swapgs", { Skip_MODRM }, 0 },
12051 { "rdtscp", { Skip_MODRM }, 0 },
029f3522
GG
12052 { Bad_Opcode },
12053 { Bad_Opcode },
bf890a93 12054 { "clzero", { Skip_MODRM }, 0 },
b844680a
L
12055 },
12056 {
1ceb70f8 12057 /* RM_0FAE_REG_5 */
bf890a93 12058 { "lfence", { Skip_MODRM }, 0 },
b844680a
L
12059 },
12060 {
1ceb70f8 12061 /* RM_0FAE_REG_6 */
bf890a93 12062 { "mfence", { Skip_MODRM }, 0 },
b844680a 12063 },
bbedc832 12064 {
1ceb70f8 12065 /* RM_0FAE_REG_7 */
9d8596f0 12066 { PREFIX_TABLE (PREFIX_RM_0_0FAE_REG_7) },
144c41d9 12067 },
b844680a
L
12068};
12069
c608c12e
AM
12070#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
12071
f16cd0d5
L
12072/* We use the high bit to indicate different name for the same
12073 prefix. */
f16cd0d5 12074#define REP_PREFIX (0xf3 | 0x100)
42164a71
L
12075#define XACQUIRE_PREFIX (0xf2 | 0x200)
12076#define XRELEASE_PREFIX (0xf3 | 0x400)
7e8b059b 12077#define BND_PREFIX (0xf2 | 0x400)
f16cd0d5
L
12078
12079static int
26ca5450 12080ckprefix (void)
252b5132 12081{
f16cd0d5 12082 int newrex, i, length;
52b15da3 12083 rex = 0;
c0f3af97 12084 rex_ignored = 0;
252b5132 12085 prefixes = 0;
7d421014 12086 used_prefixes = 0;
52b15da3 12087 rex_used = 0;
f16cd0d5
L
12088 last_lock_prefix = -1;
12089 last_repz_prefix = -1;
12090 last_repnz_prefix = -1;
12091 last_data_prefix = -1;
12092 last_addr_prefix = -1;
12093 last_rex_prefix = -1;
12094 last_seg_prefix = -1;
d9949a36 12095 fwait_prefix = -1;
285ca992 12096 active_seg_prefix = 0;
f310f33d
L
12097 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
12098 all_prefixes[i] = 0;
12099 i = 0;
f16cd0d5
L
12100 length = 0;
12101 /* The maximum instruction length is 15bytes. */
12102 while (length < MAX_CODE_LENGTH - 1)
252b5132
RH
12103 {
12104 FETCH_DATA (the_info, codep + 1);
52b15da3 12105 newrex = 0;
252b5132
RH
12106 switch (*codep)
12107 {
52b15da3
JH
12108 /* REX prefixes family. */
12109 case 0x40:
12110 case 0x41:
12111 case 0x42:
12112 case 0x43:
12113 case 0x44:
12114 case 0x45:
12115 case 0x46:
12116 case 0x47:
12117 case 0x48:
12118 case 0x49:
12119 case 0x4a:
12120 case 0x4b:
12121 case 0x4c:
12122 case 0x4d:
12123 case 0x4e:
12124 case 0x4f:
f16cd0d5
L
12125 if (address_mode == mode_64bit)
12126 newrex = *codep;
12127 else
12128 return 1;
12129 last_rex_prefix = i;
52b15da3 12130 break;
252b5132
RH
12131 case 0xf3:
12132 prefixes |= PREFIX_REPZ;
f16cd0d5 12133 last_repz_prefix = i;
252b5132
RH
12134 break;
12135 case 0xf2:
12136 prefixes |= PREFIX_REPNZ;
f16cd0d5 12137 last_repnz_prefix = i;
252b5132
RH
12138 break;
12139 case 0xf0:
12140 prefixes |= PREFIX_LOCK;
f16cd0d5 12141 last_lock_prefix = i;
252b5132
RH
12142 break;
12143 case 0x2e:
12144 prefixes |= PREFIX_CS;
f16cd0d5 12145 last_seg_prefix = i;
285ca992 12146 active_seg_prefix = PREFIX_CS;
252b5132
RH
12147 break;
12148 case 0x36:
12149 prefixes |= PREFIX_SS;
f16cd0d5 12150 last_seg_prefix = i;
285ca992 12151 active_seg_prefix = PREFIX_SS;
252b5132
RH
12152 break;
12153 case 0x3e:
12154 prefixes |= PREFIX_DS;
f16cd0d5 12155 last_seg_prefix = i;
285ca992 12156 active_seg_prefix = PREFIX_DS;
252b5132
RH
12157 break;
12158 case 0x26:
12159 prefixes |= PREFIX_ES;
f16cd0d5 12160 last_seg_prefix = i;
285ca992 12161 active_seg_prefix = PREFIX_ES;
252b5132
RH
12162 break;
12163 case 0x64:
12164 prefixes |= PREFIX_FS;
f16cd0d5 12165 last_seg_prefix = i;
285ca992 12166 active_seg_prefix = PREFIX_FS;
252b5132
RH
12167 break;
12168 case 0x65:
12169 prefixes |= PREFIX_GS;
f16cd0d5 12170 last_seg_prefix = i;
285ca992 12171 active_seg_prefix = PREFIX_GS;
252b5132
RH
12172 break;
12173 case 0x66:
12174 prefixes |= PREFIX_DATA;
f16cd0d5 12175 last_data_prefix = i;
252b5132
RH
12176 break;
12177 case 0x67:
12178 prefixes |= PREFIX_ADDR;
f16cd0d5 12179 last_addr_prefix = i;
252b5132 12180 break;
5076851f 12181 case FWAIT_OPCODE:
252b5132
RH
12182 /* fwait is really an instruction. If there are prefixes
12183 before the fwait, they belong to the fwait, *not* to the
12184 following instruction. */
d9949a36 12185 fwait_prefix = i;
3e7d61b2 12186 if (prefixes || rex)
252b5132
RH
12187 {
12188 prefixes |= PREFIX_FWAIT;
12189 codep++;
6c067bbb
RM
12190 /* This ensures that the previous REX prefixes are noticed
12191 as unused prefixes, as in the return case below. */
12192 rex_used = rex;
f16cd0d5 12193 return 1;
252b5132
RH
12194 }
12195 prefixes = PREFIX_FWAIT;
12196 break;
12197 default:
f16cd0d5 12198 return 1;
252b5132 12199 }
52b15da3
JH
12200 /* Rex is ignored when followed by another prefix. */
12201 if (rex)
12202 {
3e7d61b2 12203 rex_used = rex;
f16cd0d5 12204 return 1;
52b15da3 12205 }
f16cd0d5
L
12206 if (*codep != FWAIT_OPCODE)
12207 all_prefixes[i++] = *codep;
52b15da3 12208 rex = newrex;
252b5132 12209 codep++;
f16cd0d5
L
12210 length++;
12211 }
12212 return 0;
12213}
12214
7d421014
ILT
12215/* Return the name of the prefix byte PREF, or NULL if PREF is not a
12216 prefix byte. */
12217
12218static const char *
26ca5450 12219prefix_name (int pref, int sizeflag)
7d421014 12220{
0003779b
L
12221 static const char *rexes [16] =
12222 {
12223 "rex", /* 0x40 */
12224 "rex.B", /* 0x41 */
12225 "rex.X", /* 0x42 */
12226 "rex.XB", /* 0x43 */
12227 "rex.R", /* 0x44 */
12228 "rex.RB", /* 0x45 */
12229 "rex.RX", /* 0x46 */
12230 "rex.RXB", /* 0x47 */
12231 "rex.W", /* 0x48 */
12232 "rex.WB", /* 0x49 */
12233 "rex.WX", /* 0x4a */
12234 "rex.WXB", /* 0x4b */
12235 "rex.WR", /* 0x4c */
12236 "rex.WRB", /* 0x4d */
12237 "rex.WRX", /* 0x4e */
12238 "rex.WRXB", /* 0x4f */
12239 };
12240
7d421014
ILT
12241 switch (pref)
12242 {
52b15da3
JH
12243 /* REX prefixes family. */
12244 case 0x40:
52b15da3 12245 case 0x41:
52b15da3 12246 case 0x42:
52b15da3 12247 case 0x43:
52b15da3 12248 case 0x44:
52b15da3 12249 case 0x45:
52b15da3 12250 case 0x46:
52b15da3 12251 case 0x47:
52b15da3 12252 case 0x48:
52b15da3 12253 case 0x49:
52b15da3 12254 case 0x4a:
52b15da3 12255 case 0x4b:
52b15da3 12256 case 0x4c:
52b15da3 12257 case 0x4d:
52b15da3 12258 case 0x4e:
52b15da3 12259 case 0x4f:
0003779b 12260 return rexes [pref - 0x40];
7d421014
ILT
12261 case 0xf3:
12262 return "repz";
12263 case 0xf2:
12264 return "repnz";
12265 case 0xf0:
12266 return "lock";
12267 case 0x2e:
12268 return "cs";
12269 case 0x36:
12270 return "ss";
12271 case 0x3e:
12272 return "ds";
12273 case 0x26:
12274 return "es";
12275 case 0x64:
12276 return "fs";
12277 case 0x65:
12278 return "gs";
12279 case 0x66:
12280 return (sizeflag & DFLAG) ? "data16" : "data32";
12281 case 0x67:
cb712a9e 12282 if (address_mode == mode_64bit)
db6eb5be 12283 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 12284 else
2888cb7a 12285 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
12286 case FWAIT_OPCODE:
12287 return "fwait";
f16cd0d5
L
12288 case REP_PREFIX:
12289 return "rep";
42164a71
L
12290 case XACQUIRE_PREFIX:
12291 return "xacquire";
12292 case XRELEASE_PREFIX:
12293 return "xrelease";
7e8b059b
L
12294 case BND_PREFIX:
12295 return "bnd";
7d421014
ILT
12296 default:
12297 return NULL;
12298 }
12299}
12300
ce518a5f
L
12301static char op_out[MAX_OPERANDS][100];
12302static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 12303static int two_source_ops;
ce518a5f
L
12304static bfd_vma op_address[MAX_OPERANDS];
12305static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 12306static bfd_vma start_pc;
ce518a5f 12307
252b5132
RH
12308/*
12309 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
12310 * (see topic "Redundant prefixes" in the "Differences from 8086"
12311 * section of the "Virtual 8086 Mode" chapter.)
12312 * 'pc' should be the address of this instruction, it will
12313 * be used to print the target address if this is a relative jump or call
12314 * The function returns the length of this instruction in bytes.
12315 */
12316
252b5132 12317static char intel_syntax;
9d141669 12318static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
12319static char open_char;
12320static char close_char;
12321static char separator_char;
12322static char scale_char;
12323
e396998b
AM
12324/* Here for backwards compatibility. When gdb stops using
12325 print_insn_i386_att and print_insn_i386_intel these functions can
12326 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 12327int
26ca5450 12328print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
12329{
12330 intel_syntax = 0;
e396998b
AM
12331
12332 return print_insn (pc, info);
252b5132
RH
12333}
12334
12335int
26ca5450 12336print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
12337{
12338 intel_syntax = 1;
e396998b
AM
12339
12340 return print_insn (pc, info);
252b5132
RH
12341}
12342
e396998b 12343int
26ca5450 12344print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
12345{
12346 intel_syntax = -1;
12347
12348 return print_insn (pc, info);
12349}
12350
f59a29b9
L
12351void
12352print_i386_disassembler_options (FILE *stream)
12353{
12354 fprintf (stream, _("\n\
12355The following i386/x86-64 specific disassembler options are supported for use\n\
12356with the -M switch (multiple options should be separated by commas):\n"));
12357
12358 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
12359 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
12360 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
12361 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
12362 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
12363 fprintf (stream, _(" att-mnemonic\n"
12364 " Display instruction in AT&T mnemonic\n"));
12365 fprintf (stream, _(" intel-mnemonic\n"
12366 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
12367 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
12368 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
12369 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
12370 fprintf (stream, _(" data32 Assume 32bit data size\n"));
12371 fprintf (stream, _(" data16 Assume 16bit data size\n"));
12372 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
12373}
12374
592d1631 12375/* Bad opcode. */
bf890a93 12376static const struct dis386 bad_opcode = { "(bad)", { XX }, 0 };
592d1631 12377
b844680a
L
12378/* Get a pointer to struct dis386 with a valid name. */
12379
12380static const struct dis386 *
8bb15339 12381get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 12382{
91d6fa6a 12383 int vindex, vex_table_index;
b844680a
L
12384
12385 if (dp->name != NULL)
12386 return dp;
12387
12388 switch (dp->op[0].bytemode)
12389 {
1ceb70f8
L
12390 case USE_REG_TABLE:
12391 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
12392 break;
12393
12394 case USE_MOD_TABLE:
91d6fa6a
NC
12395 vindex = modrm.mod == 0x3 ? 1 : 0;
12396 dp = &mod_table[dp->op[1].bytemode][vindex];
1ceb70f8
L
12397 break;
12398
12399 case USE_RM_TABLE:
12400 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
12401 break;
12402
4e7d34a6 12403 case USE_PREFIX_TABLE:
c0f3af97 12404 if (need_vex)
b844680a 12405 {
c0f3af97
L
12406 /* The prefix in VEX is implicit. */
12407 switch (vex.prefix)
12408 {
12409 case 0:
91d6fa6a 12410 vindex = 0;
c0f3af97
L
12411 break;
12412 case REPE_PREFIX_OPCODE:
91d6fa6a 12413 vindex = 1;
c0f3af97
L
12414 break;
12415 case DATA_PREFIX_OPCODE:
91d6fa6a 12416 vindex = 2;
c0f3af97
L
12417 break;
12418 case REPNE_PREFIX_OPCODE:
91d6fa6a 12419 vindex = 3;
c0f3af97
L
12420 break;
12421 default:
12422 abort ();
12423 break;
12424 }
b844680a 12425 }
7bb15c6f 12426 else
b844680a 12427 {
285ca992
L
12428 int last_prefix = -1;
12429 int prefix = 0;
91d6fa6a 12430 vindex = 0;
285ca992
L
12431 /* We check PREFIX_REPNZ and PREFIX_REPZ before PREFIX_DATA.
12432 When there are multiple PREFIX_REPNZ and PREFIX_REPZ, the
12433 last one wins. */
12434 if ((prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) != 0)
b844680a 12435 {
285ca992 12436 if (last_repz_prefix > last_repnz_prefix)
c0f3af97 12437 {
285ca992
L
12438 vindex = 1;
12439 prefix = PREFIX_REPZ;
12440 last_prefix = last_repz_prefix;
c0f3af97
L
12441 }
12442 else
b844680a 12443 {
285ca992
L
12444 vindex = 3;
12445 prefix = PREFIX_REPNZ;
12446 last_prefix = last_repnz_prefix;
b844680a 12447 }
285ca992 12448
507bd325
L
12449 /* Check if prefix should be ignored. */
12450 if ((((prefix_table[dp->op[1].bytemode][vindex].prefix_requirement
12451 & PREFIX_IGNORED) >> PREFIX_IGNORED_SHIFT)
12452 & prefix) != 0)
285ca992
L
12453 vindex = 0;
12454 }
12455
12456 if (vindex == 0 && (prefixes & PREFIX_DATA) != 0)
12457 {
12458 vindex = 2;
12459 prefix = PREFIX_DATA;
12460 last_prefix = last_data_prefix;
12461 }
12462
12463 if (vindex != 0)
12464 {
12465 used_prefixes |= prefix;
12466 all_prefixes[last_prefix] = 0;
b844680a
L
12467 }
12468 }
91d6fa6a 12469 dp = &prefix_table[dp->op[1].bytemode][vindex];
b844680a
L
12470 break;
12471
4e7d34a6 12472 case USE_X86_64_TABLE:
91d6fa6a
NC
12473 vindex = address_mode == mode_64bit ? 1 : 0;
12474 dp = &x86_64_table[dp->op[1].bytemode][vindex];
b844680a
L
12475 break;
12476
4e7d34a6 12477 case USE_3BYTE_TABLE:
8bb15339 12478 FETCH_DATA (info, codep + 2);
91d6fa6a
NC
12479 vindex = *codep++;
12480 dp = &three_byte_table[dp->op[1].bytemode][vindex];
285ca992 12481 end_codep = codep;
8bb15339
L
12482 modrm.mod = (*codep >> 6) & 3;
12483 modrm.reg = (*codep >> 3) & 7;
12484 modrm.rm = *codep & 7;
12485 break;
12486
c0f3af97
L
12487 case USE_VEX_LEN_TABLE:
12488 if (!need_vex)
12489 abort ();
12490
12491 switch (vex.length)
12492 {
12493 case 128:
91d6fa6a 12494 vindex = 0;
c0f3af97
L
12495 break;
12496 case 256:
91d6fa6a 12497 vindex = 1;
c0f3af97
L
12498 break;
12499 default:
12500 abort ();
12501 break;
12502 }
12503
91d6fa6a 12504 dp = &vex_len_table[dp->op[1].bytemode][vindex];
c0f3af97
L
12505 break;
12506
f88c9eb0
SP
12507 case USE_XOP_8F_TABLE:
12508 FETCH_DATA (info, codep + 3);
12509 /* All bits in the REX prefix are ignored. */
12510 rex_ignored = rex;
12511 rex = ~(*codep >> 5) & 0x7;
12512
12513 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
12514 switch ((*codep & 0x1f))
12515 {
12516 default:
f07af43e
L
12517 dp = &bad_opcode;
12518 return dp;
5dd85c99
SP
12519 case 0x8:
12520 vex_table_index = XOP_08;
12521 break;
f88c9eb0
SP
12522 case 0x9:
12523 vex_table_index = XOP_09;
12524 break;
12525 case 0xa:
12526 vex_table_index = XOP_0A;
12527 break;
12528 }
12529 codep++;
12530 vex.w = *codep & 0x80;
12531 if (vex.w && address_mode == mode_64bit)
12532 rex |= REX_W;
12533
12534 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12535 if (address_mode != mode_64bit
12536 && vex.register_specifier > 0x7)
f07af43e
L
12537 {
12538 dp = &bad_opcode;
12539 return dp;
12540 }
f88c9eb0
SP
12541
12542 vex.length = (*codep & 0x4) ? 256 : 128;
12543 switch ((*codep & 0x3))
12544 {
12545 case 0:
12546 vex.prefix = 0;
12547 break;
12548 case 1:
12549 vex.prefix = DATA_PREFIX_OPCODE;
12550 break;
12551 case 2:
12552 vex.prefix = REPE_PREFIX_OPCODE;
12553 break;
12554 case 3:
12555 vex.prefix = REPNE_PREFIX_OPCODE;
12556 break;
12557 }
12558 need_vex = 1;
12559 need_vex_reg = 1;
12560 codep++;
91d6fa6a
NC
12561 vindex = *codep++;
12562 dp = &xop_table[vex_table_index][vindex];
c48244a5 12563
285ca992 12564 end_codep = codep;
c48244a5
SP
12565 FETCH_DATA (info, codep + 1);
12566 modrm.mod = (*codep >> 6) & 3;
12567 modrm.reg = (*codep >> 3) & 7;
12568 modrm.rm = *codep & 7;
f88c9eb0
SP
12569 break;
12570
c0f3af97 12571 case USE_VEX_C4_TABLE:
43234a1e 12572 /* VEX prefix. */
c0f3af97
L
12573 FETCH_DATA (info, codep + 3);
12574 /* All bits in the REX prefix are ignored. */
12575 rex_ignored = rex;
12576 rex = ~(*codep >> 5) & 0x7;
12577 switch ((*codep & 0x1f))
12578 {
12579 default:
f07af43e
L
12580 dp = &bad_opcode;
12581 return dp;
c0f3af97 12582 case 0x1:
f88c9eb0 12583 vex_table_index = VEX_0F;
c0f3af97
L
12584 break;
12585 case 0x2:
f88c9eb0 12586 vex_table_index = VEX_0F38;
c0f3af97
L
12587 break;
12588 case 0x3:
f88c9eb0 12589 vex_table_index = VEX_0F3A;
c0f3af97
L
12590 break;
12591 }
12592 codep++;
12593 vex.w = *codep & 0x80;
12594 if (vex.w && address_mode == mode_64bit)
12595 rex |= REX_W;
12596
12597 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12598 if (address_mode != mode_64bit
12599 && vex.register_specifier > 0x7)
f07af43e
L
12600 {
12601 dp = &bad_opcode;
12602 return dp;
12603 }
c0f3af97
L
12604
12605 vex.length = (*codep & 0x4) ? 256 : 128;
12606 switch ((*codep & 0x3))
12607 {
12608 case 0:
12609 vex.prefix = 0;
12610 break;
12611 case 1:
12612 vex.prefix = DATA_PREFIX_OPCODE;
12613 break;
12614 case 2:
12615 vex.prefix = REPE_PREFIX_OPCODE;
12616 break;
12617 case 3:
12618 vex.prefix = REPNE_PREFIX_OPCODE;
12619 break;
12620 }
12621 need_vex = 1;
12622 need_vex_reg = 1;
12623 codep++;
91d6fa6a
NC
12624 vindex = *codep++;
12625 dp = &vex_table[vex_table_index][vindex];
285ca992 12626 end_codep = codep;
c0f3af97 12627 /* There is no MODRM byte for VEX [82|77]. */
91d6fa6a 12628 if (vindex != 0x77 && vindex != 0x82)
c0f3af97
L
12629 {
12630 FETCH_DATA (info, codep + 1);
12631 modrm.mod = (*codep >> 6) & 3;
12632 modrm.reg = (*codep >> 3) & 7;
12633 modrm.rm = *codep & 7;
12634 }
12635 break;
12636
12637 case USE_VEX_C5_TABLE:
43234a1e 12638 /* VEX prefix. */
c0f3af97
L
12639 FETCH_DATA (info, codep + 2);
12640 /* All bits in the REX prefix are ignored. */
12641 rex_ignored = rex;
12642 rex = (*codep & 0x80) ? 0 : REX_R;
12643
12644 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12645 if (address_mode != mode_64bit
12646 && vex.register_specifier > 0x7)
f07af43e
L
12647 {
12648 dp = &bad_opcode;
12649 return dp;
12650 }
c0f3af97 12651
759a05ce
L
12652 vex.w = 0;
12653
c0f3af97
L
12654 vex.length = (*codep & 0x4) ? 256 : 128;
12655 switch ((*codep & 0x3))
12656 {
12657 case 0:
12658 vex.prefix = 0;
12659 break;
12660 case 1:
12661 vex.prefix = DATA_PREFIX_OPCODE;
12662 break;
12663 case 2:
12664 vex.prefix = REPE_PREFIX_OPCODE;
12665 break;
12666 case 3:
12667 vex.prefix = REPNE_PREFIX_OPCODE;
12668 break;
12669 }
12670 need_vex = 1;
12671 need_vex_reg = 1;
12672 codep++;
91d6fa6a
NC
12673 vindex = *codep++;
12674 dp = &vex_table[dp->op[1].bytemode][vindex];
285ca992 12675 end_codep = codep;
c0f3af97 12676 /* There is no MODRM byte for VEX [82|77]. */
91d6fa6a 12677 if (vindex != 0x77 && vindex != 0x82)
c0f3af97
L
12678 {
12679 FETCH_DATA (info, codep + 1);
12680 modrm.mod = (*codep >> 6) & 3;
12681 modrm.reg = (*codep >> 3) & 7;
12682 modrm.rm = *codep & 7;
12683 }
12684 break;
12685
9e30b8e0
L
12686 case USE_VEX_W_TABLE:
12687 if (!need_vex)
12688 abort ();
12689
12690 dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
12691 break;
12692
43234a1e
L
12693 case USE_EVEX_TABLE:
12694 two_source_ops = 0;
12695 /* EVEX prefix. */
12696 vex.evex = 1;
12697 FETCH_DATA (info, codep + 4);
12698 /* All bits in the REX prefix are ignored. */
12699 rex_ignored = rex;
12700 /* The first byte after 0x62. */
12701 rex = ~(*codep >> 5) & 0x7;
12702 vex.r = *codep & 0x10;
12703 switch ((*codep & 0xf))
12704 {
12705 default:
12706 return &bad_opcode;
12707 case 0x1:
12708 vex_table_index = EVEX_0F;
12709 break;
12710 case 0x2:
12711 vex_table_index = EVEX_0F38;
12712 break;
12713 case 0x3:
12714 vex_table_index = EVEX_0F3A;
12715 break;
12716 }
12717
12718 /* The second byte after 0x62. */
12719 codep++;
12720 vex.w = *codep & 0x80;
12721 if (vex.w && address_mode == mode_64bit)
12722 rex |= REX_W;
12723
12724 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12725 if (address_mode != mode_64bit)
12726 {
12727 /* In 16/32-bit mode silently ignore following bits. */
12728 rex &= ~REX_B;
12729 vex.r = 1;
12730 vex.v = 1;
12731 vex.register_specifier &= 0x7;
12732 }
12733
12734 /* The U bit. */
12735 if (!(*codep & 0x4))
12736 return &bad_opcode;
12737
12738 switch ((*codep & 0x3))
12739 {
12740 case 0:
12741 vex.prefix = 0;
12742 break;
12743 case 1:
12744 vex.prefix = DATA_PREFIX_OPCODE;
12745 break;
12746 case 2:
12747 vex.prefix = REPE_PREFIX_OPCODE;
12748 break;
12749 case 3:
12750 vex.prefix = REPNE_PREFIX_OPCODE;
12751 break;
12752 }
12753
12754 /* The third byte after 0x62. */
12755 codep++;
12756
12757 /* Remember the static rounding bits. */
12758 vex.ll = (*codep >> 5) & 3;
12759 vex.b = (*codep & 0x10) != 0;
12760
12761 vex.v = *codep & 0x8;
12762 vex.mask_register_specifier = *codep & 0x7;
12763 vex.zeroing = *codep & 0x80;
12764
12765 need_vex = 1;
12766 need_vex_reg = 1;
12767 codep++;
12768 vindex = *codep++;
12769 dp = &evex_table[vex_table_index][vindex];
285ca992 12770 end_codep = codep;
43234a1e
L
12771 FETCH_DATA (info, codep + 1);
12772 modrm.mod = (*codep >> 6) & 3;
12773 modrm.reg = (*codep >> 3) & 7;
12774 modrm.rm = *codep & 7;
12775
12776 /* Set vector length. */
12777 if (modrm.mod == 3 && vex.b)
12778 vex.length = 512;
12779 else
12780 {
12781 switch (vex.ll)
12782 {
12783 case 0x0:
12784 vex.length = 128;
12785 break;
12786 case 0x1:
12787 vex.length = 256;
12788 break;
12789 case 0x2:
12790 vex.length = 512;
12791 break;
12792 default:
12793 return &bad_opcode;
12794 }
12795 }
12796 break;
12797
592d1631
L
12798 case 0:
12799 dp = &bad_opcode;
12800 break;
12801
b844680a 12802 default:
d34b5006 12803 abort ();
b844680a
L
12804 }
12805
12806 if (dp->name != NULL)
12807 return dp;
12808 else
8bb15339 12809 return get_valid_dis386 (dp, info);
b844680a
L
12810}
12811
dfc8cf43 12812static void
55cf16e1 12813get_sib (disassemble_info *info, int sizeflag)
dfc8cf43
L
12814{
12815 /* If modrm.mod == 3, operand must be register. */
12816 if (need_modrm
55cf16e1 12817 && ((sizeflag & AFLAG) || address_mode == mode_64bit)
dfc8cf43
L
12818 && modrm.mod != 3
12819 && modrm.rm == 4)
12820 {
12821 FETCH_DATA (info, codep + 2);
12822 sib.index = (codep [1] >> 3) & 7;
12823 sib.scale = (codep [1] >> 6) & 3;
12824 sib.base = codep [1] & 7;
12825 }
12826}
12827
e396998b 12828static int
26ca5450 12829print_insn (bfd_vma pc, disassemble_info *info)
252b5132 12830{
2da11e11 12831 const struct dis386 *dp;
252b5132 12832 int i;
ce518a5f 12833 char *op_txt[MAX_OPERANDS];
252b5132 12834 int needcomma;
df18fdba 12835 int sizeflag, orig_sizeflag;
e396998b 12836 const char *p;
252b5132 12837 struct dis_private priv;
f16cd0d5 12838 int prefix_length;
252b5132 12839
d7921315
L
12840 priv.orig_sizeflag = AFLAG | DFLAG;
12841 if ((info->mach & bfd_mach_i386_i386) != 0)
cb712a9e 12842 address_mode = mode_32bit;
2da11e11 12843 else if (info->mach == bfd_mach_i386_i8086)
d7921315
L
12844 {
12845 address_mode = mode_16bit;
12846 priv.orig_sizeflag = 0;
12847 }
2da11e11 12848 else
d7921315
L
12849 address_mode = mode_64bit;
12850
12851 if (intel_syntax == (char) -1)
12852 intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
e396998b
AM
12853
12854 for (p = info->disassembler_options; p != NULL; )
12855 {
0112cd26 12856 if (CONST_STRNEQ (p, "x86-64"))
e396998b 12857 {
cb712a9e 12858 address_mode = mode_64bit;
e396998b
AM
12859 priv.orig_sizeflag = AFLAG | DFLAG;
12860 }
0112cd26 12861 else if (CONST_STRNEQ (p, "i386"))
e396998b 12862 {
cb712a9e 12863 address_mode = mode_32bit;
e396998b
AM
12864 priv.orig_sizeflag = AFLAG | DFLAG;
12865 }
0112cd26 12866 else if (CONST_STRNEQ (p, "i8086"))
e396998b 12867 {
cb712a9e 12868 address_mode = mode_16bit;
e396998b
AM
12869 priv.orig_sizeflag = 0;
12870 }
0112cd26 12871 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
12872 {
12873 intel_syntax = 1;
9d141669
L
12874 if (CONST_STRNEQ (p + 5, "-mnemonic"))
12875 intel_mnemonic = 1;
e396998b 12876 }
0112cd26 12877 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
12878 {
12879 intel_syntax = 0;
9d141669
L
12880 if (CONST_STRNEQ (p + 3, "-mnemonic"))
12881 intel_mnemonic = 0;
e396998b 12882 }
0112cd26 12883 else if (CONST_STRNEQ (p, "addr"))
e396998b 12884 {
f59a29b9
L
12885 if (address_mode == mode_64bit)
12886 {
12887 if (p[4] == '3' && p[5] == '2')
12888 priv.orig_sizeflag &= ~AFLAG;
12889 else if (p[4] == '6' && p[5] == '4')
12890 priv.orig_sizeflag |= AFLAG;
12891 }
12892 else
12893 {
12894 if (p[4] == '1' && p[5] == '6')
12895 priv.orig_sizeflag &= ~AFLAG;
12896 else if (p[4] == '3' && p[5] == '2')
12897 priv.orig_sizeflag |= AFLAG;
12898 }
e396998b 12899 }
0112cd26 12900 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
12901 {
12902 if (p[4] == '1' && p[5] == '6')
12903 priv.orig_sizeflag &= ~DFLAG;
12904 else if (p[4] == '3' && p[5] == '2')
12905 priv.orig_sizeflag |= DFLAG;
12906 }
0112cd26 12907 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
12908 priv.orig_sizeflag |= SUFFIX_ALWAYS;
12909
12910 p = strchr (p, ',');
12911 if (p != NULL)
12912 p++;
12913 }
12914
12915 if (intel_syntax)
12916 {
12917 names64 = intel_names64;
12918 names32 = intel_names32;
12919 names16 = intel_names16;
12920 names8 = intel_names8;
12921 names8rex = intel_names8rex;
12922 names_seg = intel_names_seg;
b9733481 12923 names_mm = intel_names_mm;
7e8b059b 12924 names_bnd = intel_names_bnd;
b9733481
L
12925 names_xmm = intel_names_xmm;
12926 names_ymm = intel_names_ymm;
43234a1e 12927 names_zmm = intel_names_zmm;
db51cc60
L
12928 index64 = intel_index64;
12929 index32 = intel_index32;
43234a1e 12930 names_mask = intel_names_mask;
e396998b
AM
12931 index16 = intel_index16;
12932 open_char = '[';
12933 close_char = ']';
12934 separator_char = '+';
12935 scale_char = '*';
12936 }
12937 else
12938 {
12939 names64 = att_names64;
12940 names32 = att_names32;
12941 names16 = att_names16;
12942 names8 = att_names8;
12943 names8rex = att_names8rex;
12944 names_seg = att_names_seg;
b9733481 12945 names_mm = att_names_mm;
7e8b059b 12946 names_bnd = att_names_bnd;
b9733481
L
12947 names_xmm = att_names_xmm;
12948 names_ymm = att_names_ymm;
43234a1e 12949 names_zmm = att_names_zmm;
db51cc60
L
12950 index64 = att_index64;
12951 index32 = att_index32;
43234a1e 12952 names_mask = att_names_mask;
e396998b
AM
12953 index16 = att_index16;
12954 open_char = '(';
12955 close_char = ')';
12956 separator_char = ',';
12957 scale_char = ',';
12958 }
2da11e11 12959
4fe53c98 12960 /* The output looks better if we put 7 bytes on a line, since that
8a9036a4
L
12961 puts most long word instructions on a single line. Use 8 bytes
12962 for Intel L1OM. */
d7921315 12963 if ((info->mach & bfd_mach_l1om) != 0)
8a9036a4
L
12964 info->bytes_per_line = 8;
12965 else
12966 info->bytes_per_line = 7;
252b5132 12967
26ca5450 12968 info->private_data = &priv;
252b5132
RH
12969 priv.max_fetched = priv.the_buffer;
12970 priv.insn_start = pc;
252b5132
RH
12971
12972 obuf[0] = 0;
ce518a5f
L
12973 for (i = 0; i < MAX_OPERANDS; ++i)
12974 {
12975 op_out[i][0] = 0;
12976 op_index[i] = -1;
12977 }
252b5132
RH
12978
12979 the_info = info;
12980 start_pc = pc;
e396998b
AM
12981 start_codep = priv.the_buffer;
12982 codep = priv.the_buffer;
252b5132 12983
8df14d78 12984 if (OPCODES_SIGSETJMP (priv.bailout) != 0)
5076851f 12985 {
7d421014
ILT
12986 const char *name;
12987
5076851f 12988 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
12989 means we have an incomplete instruction of some sort. Just
12990 print the first byte as a prefix or a .byte pseudo-op. */
12991 if (codep > priv.the_buffer)
5076851f 12992 {
e396998b 12993 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
12994 if (name != NULL)
12995 (*info->fprintf_func) (info->stream, "%s", name);
12996 else
5076851f 12997 {
7d421014
ILT
12998 /* Just print the first byte as a .byte instruction. */
12999 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 13000 (unsigned int) priv.the_buffer[0]);
5076851f 13001 }
5076851f 13002
7d421014 13003 return 1;
5076851f
ILT
13004 }
13005
13006 return -1;
13007 }
13008
52b15da3 13009 obufp = obuf;
f16cd0d5
L
13010 sizeflag = priv.orig_sizeflag;
13011
13012 if (!ckprefix () || rex_used)
13013 {
13014 /* Too many prefixes or unused REX prefixes. */
13015 for (i = 0;
f6dd4781 13016 i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
f16cd0d5 13017 i++)
de882298 13018 (*info->fprintf_func) (info->stream, "%s%s",
6c067bbb 13019 i == 0 ? "" : " ",
f16cd0d5 13020 prefix_name (all_prefixes[i], sizeflag));
de882298 13021 return i;
f16cd0d5 13022 }
252b5132
RH
13023
13024 insn_codep = codep;
13025
13026 FETCH_DATA (info, codep + 1);
13027 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
13028
3e7d61b2 13029 if (((prefixes & PREFIX_FWAIT)
f16cd0d5 13030 && ((*codep < 0xd8) || (*codep > 0xdf))))
252b5132 13031 {
86a80a50 13032 /* Handle prefixes before fwait. */
d9949a36 13033 for (i = 0; i < fwait_prefix && all_prefixes[i];
86a80a50
L
13034 i++)
13035 (*info->fprintf_func) (info->stream, "%s ",
13036 prefix_name (all_prefixes[i], sizeflag));
f16cd0d5 13037 (*info->fprintf_func) (info->stream, "fwait");
86a80a50 13038 return i + 1;
252b5132
RH
13039 }
13040
252b5132
RH
13041 if (*codep == 0x0f)
13042 {
eec0f4ca 13043 unsigned char threebyte;
252b5132 13044 FETCH_DATA (info, codep + 2);
eec0f4ca
L
13045 threebyte = *++codep;
13046 dp = &dis386_twobyte[threebyte];
252b5132 13047 need_modrm = twobyte_has_modrm[*codep];
eec0f4ca 13048 codep++;
252b5132
RH
13049 }
13050 else
13051 {
6439fc28 13052 dp = &dis386[*codep];
252b5132 13053 need_modrm = onebyte_has_modrm[*codep];
eec0f4ca 13054 codep++;
252b5132 13055 }
246c51aa 13056
df18fdba
L
13057 /* Save sizeflag for printing the extra prefixes later before updating
13058 it for mnemonic and operand processing. The prefix names depend
13059 only on the address mode. */
13060 orig_sizeflag = sizeflag;
c608c12e 13061 if (prefixes & PREFIX_ADDR)
df18fdba 13062 sizeflag ^= AFLAG;
b844680a 13063 if ((prefixes & PREFIX_DATA))
df18fdba 13064 sizeflag ^= DFLAG;
3ffd33cf 13065
285ca992 13066 end_codep = codep;
8bb15339 13067 if (need_modrm)
252b5132
RH
13068 {
13069 FETCH_DATA (info, codep + 1);
7967e09e
L
13070 modrm.mod = (*codep >> 6) & 3;
13071 modrm.reg = (*codep >> 3) & 7;
13072 modrm.rm = *codep & 7;
252b5132
RH
13073 }
13074
42d5f9c6
MS
13075 need_vex = 0;
13076 need_vex_reg = 0;
13077 vex_w_done = 0;
43234a1e 13078 vex.evex = 0;
55b126d4 13079
ce518a5f 13080 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132 13081 {
55cf16e1 13082 get_sib (info, sizeflag);
252b5132
RH
13083 dofloat (sizeflag);
13084 }
13085 else
13086 {
8bb15339 13087 dp = get_valid_dis386 (dp, info);
b844680a 13088 if (dp != NULL && putop (dp->name, sizeflag) == 0)
6c067bbb 13089 {
55cf16e1 13090 get_sib (info, sizeflag);
ce518a5f
L
13091 for (i = 0; i < MAX_OPERANDS; ++i)
13092 {
246c51aa 13093 obufp = op_out[i];
ce518a5f
L
13094 op_ad = MAX_OPERANDS - 1 - i;
13095 if (dp->op[i].rtn)
13096 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
43234a1e
L
13097 /* For EVEX instruction after the last operand masking
13098 should be printed. */
13099 if (i == 0 && vex.evex)
13100 {
13101 /* Don't print {%k0}. */
13102 if (vex.mask_register_specifier)
13103 {
13104 oappend ("{");
13105 oappend (names_mask[vex.mask_register_specifier]);
13106 oappend ("}");
13107 }
13108 if (vex.zeroing)
13109 oappend ("{z}");
13110 }
ce518a5f 13111 }
6439fc28 13112 }
252b5132
RH
13113 }
13114
d869730d 13115 /* Check if the REX prefix is used. */
e2e6193d 13116 if (rex_ignored == 0 && (rex ^ rex_used) == 0 && last_rex_prefix >= 0)
f16cd0d5
L
13117 all_prefixes[last_rex_prefix] = 0;
13118
5e6718e4 13119 /* Check if the SEG prefix is used. */
f16cd0d5
L
13120 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
13121 | PREFIX_FS | PREFIX_GS)) != 0
285ca992 13122 && (used_prefixes & active_seg_prefix) != 0)
f16cd0d5
L
13123 all_prefixes[last_seg_prefix] = 0;
13124
5e6718e4 13125 /* Check if the ADDR prefix is used. */
f16cd0d5
L
13126 if ((prefixes & PREFIX_ADDR) != 0
13127 && (used_prefixes & PREFIX_ADDR) != 0)
13128 all_prefixes[last_addr_prefix] = 0;
13129
df18fdba
L
13130 /* Check if the DATA prefix is used. */
13131 if ((prefixes & PREFIX_DATA) != 0
13132 && (used_prefixes & PREFIX_DATA) != 0)
13133 all_prefixes[last_data_prefix] = 0;
f16cd0d5 13134
df18fdba 13135 /* Print the extra prefixes. */
f16cd0d5 13136 prefix_length = 0;
f310f33d 13137 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
f16cd0d5
L
13138 if (all_prefixes[i])
13139 {
13140 const char *name;
df18fdba 13141 name = prefix_name (all_prefixes[i], orig_sizeflag);
f16cd0d5
L
13142 if (name == NULL)
13143 abort ();
13144 prefix_length += strlen (name) + 1;
13145 (*info->fprintf_func) (info->stream, "%s ", name);
13146 }
b844680a 13147
285ca992
L
13148 /* If the mandatory PREFIX_REPZ/PREFIX_REPNZ/PREFIX_DATA prefix is
13149 unused, opcode is invalid. Since the PREFIX_DATA prefix may be
13150 used by putop and MMX/SSE operand and may be overriden by the
13151 PREFIX_REPZ/PREFIX_REPNZ fix, we check the PREFIX_DATA prefix
13152 separately. */
3888916d 13153 if (dp->prefix_requirement == PREFIX_OPCODE
285ca992
L
13154 && dp != &bad_opcode
13155 && (((prefixes
13156 & (PREFIX_REPZ | PREFIX_REPNZ)) != 0
13157 && (used_prefixes
13158 & (PREFIX_REPZ | PREFIX_REPNZ)) == 0)
13159 || ((((prefixes
13160 & (PREFIX_REPZ | PREFIX_REPNZ | PREFIX_DATA))
13161 == PREFIX_DATA)
13162 && (used_prefixes & PREFIX_DATA) == 0))))
13163 {
13164 (*info->fprintf_func) (info->stream, "(bad)");
13165 return end_codep - priv.the_buffer;
13166 }
13167
f16cd0d5
L
13168 /* Check maximum code length. */
13169 if ((codep - start_codep) > MAX_CODE_LENGTH)
13170 {
13171 (*info->fprintf_func) (info->stream, "(bad)");
13172 return MAX_CODE_LENGTH;
13173 }
b844680a 13174
ea397f5b 13175 obufp = mnemonicendp;
f16cd0d5 13176 for (i = strlen (obuf) + prefix_length; i < 6; i++)
252b5132
RH
13177 oappend (" ");
13178 oappend (" ");
13179 (*info->fprintf_func) (info->stream, "%s", obuf);
13180
13181 /* The enter and bound instructions are printed with operands in the same
13182 order as the intel book; everything else is printed in reverse order. */
2da11e11 13183 if (intel_syntax || two_source_ops)
252b5132 13184 {
185b1163
L
13185 bfd_vma riprel;
13186
ce518a5f 13187 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 13188 op_txt[i] = op_out[i];
246c51aa 13189
ce518a5f
L
13190 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
13191 {
6c067bbb
RM
13192 op_ad = op_index[i];
13193 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
13194 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
13195 riprel = op_riprel[i];
13196 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
13197 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 13198 }
252b5132
RH
13199 }
13200 else
13201 {
ce518a5f 13202 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 13203 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
13204 }
13205
ce518a5f
L
13206 needcomma = 0;
13207 for (i = 0; i < MAX_OPERANDS; ++i)
13208 if (*op_txt[i])
13209 {
13210 if (needcomma)
13211 (*info->fprintf_func) (info->stream, ",");
13212 if (op_index[i] != -1 && !op_riprel[i])
13213 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
13214 else
13215 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
13216 needcomma = 1;
13217 }
050dfa73 13218
ce518a5f 13219 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
13220 if (op_index[i] != -1 && op_riprel[i])
13221 {
13222 (*info->fprintf_func) (info->stream, " # ");
13223 (*info->print_address_func) ((bfd_vma) (start_pc + codep - start_codep
13224 + op_address[op_index[i]]), info);
185b1163 13225 break;
52b15da3 13226 }
e396998b 13227 return codep - priv.the_buffer;
252b5132
RH
13228}
13229
6439fc28 13230static const char *float_mem[] = {
252b5132 13231 /* d8 */
7c52e0e8
L
13232 "fadd{s|}",
13233 "fmul{s|}",
13234 "fcom{s|}",
13235 "fcomp{s|}",
13236 "fsub{s|}",
13237 "fsubr{s|}",
13238 "fdiv{s|}",
13239 "fdivr{s|}",
db6eb5be 13240 /* d9 */
7c52e0e8 13241 "fld{s|}",
252b5132 13242 "(bad)",
7c52e0e8
L
13243 "fst{s|}",
13244 "fstp{s|}",
9306ca4a 13245 "fldenvIC",
252b5132 13246 "fldcw",
9306ca4a 13247 "fNstenvIC",
252b5132
RH
13248 "fNstcw",
13249 /* da */
7c52e0e8
L
13250 "fiadd{l|}",
13251 "fimul{l|}",
13252 "ficom{l|}",
13253 "ficomp{l|}",
13254 "fisub{l|}",
13255 "fisubr{l|}",
13256 "fidiv{l|}",
13257 "fidivr{l|}",
252b5132 13258 /* db */
7c52e0e8
L
13259 "fild{l|}",
13260 "fisttp{l|}",
13261 "fist{l|}",
13262 "fistp{l|}",
252b5132 13263 "(bad)",
6439fc28 13264 "fld{t||t|}",
252b5132 13265 "(bad)",
6439fc28 13266 "fstp{t||t|}",
252b5132 13267 /* dc */
7c52e0e8
L
13268 "fadd{l|}",
13269 "fmul{l|}",
13270 "fcom{l|}",
13271 "fcomp{l|}",
13272 "fsub{l|}",
13273 "fsubr{l|}",
13274 "fdiv{l|}",
13275 "fdivr{l|}",
252b5132 13276 /* dd */
7c52e0e8
L
13277 "fld{l|}",
13278 "fisttp{ll|}",
13279 "fst{l||}",
13280 "fstp{l|}",
9306ca4a 13281 "frstorIC",
252b5132 13282 "(bad)",
9306ca4a 13283 "fNsaveIC",
252b5132
RH
13284 "fNstsw",
13285 /* de */
13286 "fiadd",
13287 "fimul",
13288 "ficom",
13289 "ficomp",
13290 "fisub",
13291 "fisubr",
13292 "fidiv",
13293 "fidivr",
13294 /* df */
13295 "fild",
ca164297 13296 "fisttp",
252b5132
RH
13297 "fist",
13298 "fistp",
13299 "fbld",
7c52e0e8 13300 "fild{ll|}",
252b5132 13301 "fbstp",
7c52e0e8 13302 "fistp{ll|}",
1d9f512f
AM
13303};
13304
13305static const unsigned char float_mem_mode[] = {
13306 /* d8 */
13307 d_mode,
13308 d_mode,
13309 d_mode,
13310 d_mode,
13311 d_mode,
13312 d_mode,
13313 d_mode,
13314 d_mode,
13315 /* d9 */
13316 d_mode,
13317 0,
13318 d_mode,
13319 d_mode,
13320 0,
13321 w_mode,
13322 0,
13323 w_mode,
13324 /* da */
13325 d_mode,
13326 d_mode,
13327 d_mode,
13328 d_mode,
13329 d_mode,
13330 d_mode,
13331 d_mode,
13332 d_mode,
13333 /* db */
13334 d_mode,
13335 d_mode,
13336 d_mode,
13337 d_mode,
13338 0,
9306ca4a 13339 t_mode,
1d9f512f 13340 0,
9306ca4a 13341 t_mode,
1d9f512f
AM
13342 /* dc */
13343 q_mode,
13344 q_mode,
13345 q_mode,
13346 q_mode,
13347 q_mode,
13348 q_mode,
13349 q_mode,
13350 q_mode,
13351 /* dd */
13352 q_mode,
13353 q_mode,
13354 q_mode,
13355 q_mode,
13356 0,
13357 0,
13358 0,
13359 w_mode,
13360 /* de */
13361 w_mode,
13362 w_mode,
13363 w_mode,
13364 w_mode,
13365 w_mode,
13366 w_mode,
13367 w_mode,
13368 w_mode,
13369 /* df */
13370 w_mode,
13371 w_mode,
13372 w_mode,
13373 w_mode,
9306ca4a 13374 t_mode,
1d9f512f 13375 q_mode,
9306ca4a 13376 t_mode,
1d9f512f 13377 q_mode
252b5132
RH
13378};
13379
ce518a5f
L
13380#define ST { OP_ST, 0 }
13381#define STi { OP_STi, 0 }
252b5132 13382
bf890a93
IT
13383#define FGRPd9_2 NULL, { { NULL, 0 } }, 0
13384#define FGRPd9_4 NULL, { { NULL, 1 } }, 0
13385#define FGRPd9_5 NULL, { { NULL, 2 } }, 0
13386#define FGRPd9_6 NULL, { { NULL, 3 } }, 0
13387#define FGRPd9_7 NULL, { { NULL, 4 } }, 0
13388#define FGRPda_5 NULL, { { NULL, 5 } }, 0
13389#define FGRPdb_4 NULL, { { NULL, 6 } }, 0
13390#define FGRPde_3 NULL, { { NULL, 7 } }, 0
13391#define FGRPdf_4 NULL, { { NULL, 8 } }, 0
252b5132 13392
2da11e11 13393static const struct dis386 float_reg[][8] = {
252b5132
RH
13394 /* d8 */
13395 {
bf890a93
IT
13396 { "fadd", { ST, STi }, 0 },
13397 { "fmul", { ST, STi }, 0 },
13398 { "fcom", { STi }, 0 },
13399 { "fcomp", { STi }, 0 },
13400 { "fsub", { ST, STi }, 0 },
13401 { "fsubr", { ST, STi }, 0 },
13402 { "fdiv", { ST, STi }, 0 },
13403 { "fdivr", { ST, STi }, 0 },
252b5132
RH
13404 },
13405 /* d9 */
13406 {
bf890a93
IT
13407 { "fld", { STi }, 0 },
13408 { "fxch", { STi }, 0 },
252b5132 13409 { FGRPd9_2 },
592d1631 13410 { Bad_Opcode },
252b5132
RH
13411 { FGRPd9_4 },
13412 { FGRPd9_5 },
13413 { FGRPd9_6 },
13414 { FGRPd9_7 },
13415 },
13416 /* da */
13417 {
bf890a93
IT
13418 { "fcmovb", { ST, STi }, 0 },
13419 { "fcmove", { ST, STi }, 0 },
13420 { "fcmovbe",{ ST, STi }, 0 },
13421 { "fcmovu", { ST, STi }, 0 },
592d1631 13422 { Bad_Opcode },
252b5132 13423 { FGRPda_5 },
592d1631
L
13424 { Bad_Opcode },
13425 { Bad_Opcode },
252b5132
RH
13426 },
13427 /* db */
13428 {
bf890a93
IT
13429 { "fcmovnb",{ ST, STi }, 0 },
13430 { "fcmovne",{ ST, STi }, 0 },
13431 { "fcmovnbe",{ ST, STi }, 0 },
13432 { "fcmovnu",{ ST, STi }, 0 },
252b5132 13433 { FGRPdb_4 },
bf890a93
IT
13434 { "fucomi", { ST, STi }, 0 },
13435 { "fcomi", { ST, STi }, 0 },
592d1631 13436 { Bad_Opcode },
252b5132
RH
13437 },
13438 /* dc */
13439 {
bf890a93
IT
13440 { "fadd", { STi, ST }, 0 },
13441 { "fmul", { STi, ST }, 0 },
592d1631
L
13442 { Bad_Opcode },
13443 { Bad_Opcode },
bf890a93
IT
13444 { "fsub!M", { STi, ST }, 0 },
13445 { "fsubM", { STi, ST }, 0 },
13446 { "fdiv!M", { STi, ST }, 0 },
13447 { "fdivM", { STi, ST }, 0 },
252b5132
RH
13448 },
13449 /* dd */
13450 {
bf890a93 13451 { "ffree", { STi }, 0 },
592d1631 13452 { Bad_Opcode },
bf890a93
IT
13453 { "fst", { STi }, 0 },
13454 { "fstp", { STi }, 0 },
13455 { "fucom", { STi }, 0 },
13456 { "fucomp", { STi }, 0 },
592d1631
L
13457 { Bad_Opcode },
13458 { Bad_Opcode },
252b5132
RH
13459 },
13460 /* de */
13461 {
bf890a93
IT
13462 { "faddp", { STi, ST }, 0 },
13463 { "fmulp", { STi, ST }, 0 },
592d1631 13464 { Bad_Opcode },
252b5132 13465 { FGRPde_3 },
bf890a93
IT
13466 { "fsub!Mp", { STi, ST }, 0 },
13467 { "fsubMp", { STi, ST }, 0 },
13468 { "fdiv!Mp", { STi, ST }, 0 },
13469 { "fdivMp", { STi, ST }, 0 },
252b5132
RH
13470 },
13471 /* df */
13472 {
bf890a93 13473 { "ffreep", { STi }, 0 },
592d1631
L
13474 { Bad_Opcode },
13475 { Bad_Opcode },
13476 { Bad_Opcode },
252b5132 13477 { FGRPdf_4 },
bf890a93
IT
13478 { "fucomip", { ST, STi }, 0 },
13479 { "fcomip", { ST, STi }, 0 },
592d1631 13480 { Bad_Opcode },
252b5132
RH
13481 },
13482};
13483
252b5132
RH
13484static char *fgrps[][8] = {
13485 /* d9_2 0 */
13486 {
13487 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13488 },
13489
13490 /* d9_4 1 */
13491 {
13492 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
13493 },
13494
13495 /* d9_5 2 */
13496 {
13497 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
13498 },
13499
13500 /* d9_6 3 */
13501 {
13502 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
13503 },
13504
13505 /* d9_7 4 */
13506 {
13507 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
13508 },
13509
13510 /* da_5 5 */
13511 {
13512 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13513 },
13514
13515 /* db_4 6 */
13516 {
309d3373
JB
13517 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
13518 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
252b5132
RH
13519 },
13520
13521 /* de_3 7 */
13522 {
13523 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13524 },
13525
13526 /* df_4 8 */
13527 {
13528 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13529 },
13530};
13531
b6169b20
L
13532static void
13533swap_operand (void)
13534{
13535 mnemonicendp[0] = '.';
13536 mnemonicendp[1] = 's';
13537 mnemonicendp += 2;
13538}
13539
b844680a
L
13540static void
13541OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
13542 int sizeflag ATTRIBUTE_UNUSED)
13543{
13544 /* Skip mod/rm byte. */
13545 MODRM_CHECK;
13546 codep++;
13547}
13548
252b5132 13549static void
26ca5450 13550dofloat (int sizeflag)
252b5132 13551{
2da11e11 13552 const struct dis386 *dp;
252b5132
RH
13553 unsigned char floatop;
13554
13555 floatop = codep[-1];
13556
7967e09e 13557 if (modrm.mod != 3)
252b5132 13558 {
7967e09e 13559 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
13560
13561 putop (float_mem[fp_indx], sizeflag);
ce518a5f 13562 obufp = op_out[0];
6e50d963 13563 op_ad = 2;
1d9f512f 13564 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
13565 return;
13566 }
6608db57 13567 /* Skip mod/rm byte. */
4bba6815 13568 MODRM_CHECK;
252b5132
RH
13569 codep++;
13570
7967e09e 13571 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
13572 if (dp->name == NULL)
13573 {
7967e09e 13574 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 13575
6608db57 13576 /* Instruction fnstsw is only one with strange arg. */
252b5132 13577 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 13578 strcpy (op_out[0], names16[0]);
252b5132
RH
13579 }
13580 else
13581 {
13582 putop (dp->name, sizeflag);
13583
ce518a5f 13584 obufp = op_out[0];
6e50d963 13585 op_ad = 2;
ce518a5f
L
13586 if (dp->op[0].rtn)
13587 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 13588
ce518a5f 13589 obufp = op_out[1];
6e50d963 13590 op_ad = 1;
ce518a5f
L
13591 if (dp->op[1].rtn)
13592 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
13593 }
13594}
13595
9ce09ba2
RM
13596/* Like oappend (below), but S is a string starting with '%'.
13597 In Intel syntax, the '%' is elided. */
13598static void
13599oappend_maybe_intel (const char *s)
13600{
13601 oappend (s + intel_syntax);
13602}
13603
252b5132 13604static void
26ca5450 13605OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13606{
9ce09ba2 13607 oappend_maybe_intel ("%st");
252b5132
RH
13608}
13609
252b5132 13610static void
26ca5450 13611OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13612{
7967e09e 13613 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
9ce09ba2 13614 oappend_maybe_intel (scratchbuf);
252b5132
RH
13615}
13616
6608db57 13617/* Capital letters in template are macros. */
6439fc28 13618static int
d3ce72d0 13619putop (const char *in_template, int sizeflag)
252b5132 13620{
2da11e11 13621 const char *p;
9306ca4a 13622 int alt = 0;
9d141669 13623 int cond = 1;
98b528ac
L
13624 unsigned int l = 0, len = 1;
13625 char last[4];
13626
13627#define SAVE_LAST(c) \
13628 if (l < len && l < sizeof (last)) \
13629 last[l++] = c; \
13630 else \
13631 abort ();
252b5132 13632
d3ce72d0 13633 for (p = in_template; *p; p++)
252b5132
RH
13634 {
13635 switch (*p)
13636 {
13637 default:
13638 *obufp++ = *p;
13639 break;
98b528ac
L
13640 case '%':
13641 len++;
13642 break;
9d141669
L
13643 case '!':
13644 cond = 0;
13645 break;
6439fc28
AM
13646 case '{':
13647 alt = 0;
13648 if (intel_syntax)
6439fc28
AM
13649 {
13650 while (*++p != '|')
7c52e0e8
L
13651 if (*p == '}' || *p == '\0')
13652 abort ();
6439fc28 13653 }
9306ca4a
JB
13654 /* Fall through. */
13655 case 'I':
13656 alt = 1;
13657 continue;
6439fc28
AM
13658 case '|':
13659 while (*++p != '}')
13660 {
13661 if (*p == '\0')
13662 abort ();
13663 }
13664 break;
13665 case '}':
13666 break;
252b5132 13667 case 'A':
db6eb5be
AM
13668 if (intel_syntax)
13669 break;
7967e09e 13670 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
13671 *obufp++ = 'b';
13672 break;
13673 case 'B':
4b06377f
L
13674 if (l == 0 && len == 1)
13675 {
13676case_B:
13677 if (intel_syntax)
13678 break;
13679 if (sizeflag & SUFFIX_ALWAYS)
13680 *obufp++ = 'b';
13681 }
13682 else
13683 {
13684 if (l != 1
13685 || len != 2
13686 || last[0] != 'L')
13687 {
13688 SAVE_LAST (*p);
13689 break;
13690 }
13691
13692 if (address_mode == mode_64bit
13693 && !(prefixes & PREFIX_ADDR))
13694 {
13695 *obufp++ = 'a';
13696 *obufp++ = 'b';
13697 *obufp++ = 's';
13698 }
13699
13700 goto case_B;
13701 }
252b5132 13702 break;
9306ca4a
JB
13703 case 'C':
13704 if (intel_syntax && !alt)
13705 break;
13706 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
13707 {
13708 if (sizeflag & DFLAG)
13709 *obufp++ = intel_syntax ? 'd' : 'l';
13710 else
13711 *obufp++ = intel_syntax ? 'w' : 's';
13712 used_prefixes |= (prefixes & PREFIX_DATA);
13713 }
13714 break;
ed7841b3
JB
13715 case 'D':
13716 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
13717 break;
161a04f6 13718 USED_REX (REX_W);
7967e09e 13719 if (modrm.mod == 3)
ed7841b3 13720 {
161a04f6 13721 if (rex & REX_W)
ed7841b3 13722 *obufp++ = 'q';
ed7841b3 13723 else
f16cd0d5
L
13724 {
13725 if (sizeflag & DFLAG)
13726 *obufp++ = intel_syntax ? 'd' : 'l';
13727 else
13728 *obufp++ = 'w';
13729 used_prefixes |= (prefixes & PREFIX_DATA);
13730 }
ed7841b3
JB
13731 }
13732 else
13733 *obufp++ = 'w';
13734 break;
252b5132 13735 case 'E': /* For jcxz/jecxz */
cb712a9e 13736 if (address_mode == mode_64bit)
c1a64871
JH
13737 {
13738 if (sizeflag & AFLAG)
13739 *obufp++ = 'r';
13740 else
13741 *obufp++ = 'e';
13742 }
13743 else
13744 if (sizeflag & AFLAG)
13745 *obufp++ = 'e';
3ffd33cf
AM
13746 used_prefixes |= (prefixes & PREFIX_ADDR);
13747 break;
13748 case 'F':
db6eb5be
AM
13749 if (intel_syntax)
13750 break;
e396998b 13751 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
13752 {
13753 if (sizeflag & AFLAG)
cb712a9e 13754 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 13755 else
cb712a9e 13756 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
13757 used_prefixes |= (prefixes & PREFIX_ADDR);
13758 }
252b5132 13759 break;
52fd6d94
JB
13760 case 'G':
13761 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
13762 break;
161a04f6 13763 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
13764 *obufp++ = 'l';
13765 else
13766 *obufp++ = 'w';
161a04f6 13767 if (!(rex & REX_W))
52fd6d94
JB
13768 used_prefixes |= (prefixes & PREFIX_DATA);
13769 break;
5dd0794d 13770 case 'H':
db6eb5be
AM
13771 if (intel_syntax)
13772 break;
5dd0794d
AM
13773 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
13774 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
13775 {
13776 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
13777 *obufp++ = ',';
13778 *obufp++ = 'p';
13779 if (prefixes & PREFIX_DS)
13780 *obufp++ = 't';
13781 else
13782 *obufp++ = 'n';
13783 }
13784 break;
9306ca4a
JB
13785 case 'J':
13786 if (intel_syntax)
13787 break;
13788 *obufp++ = 'l';
13789 break;
42903f7f
L
13790 case 'K':
13791 USED_REX (REX_W);
13792 if (rex & REX_W)
13793 *obufp++ = 'q';
13794 else
13795 *obufp++ = 'd';
13796 break;
6dd5059a
L
13797 case 'Z':
13798 if (intel_syntax)
13799 break;
13800 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
13801 {
13802 *obufp++ = 'q';
13803 break;
13804 }
13805 /* Fall through. */
98b528ac 13806 goto case_L;
252b5132 13807 case 'L':
98b528ac
L
13808 if (l != 0 || len != 1)
13809 {
13810 SAVE_LAST (*p);
13811 break;
13812 }
13813case_L:
db6eb5be
AM
13814 if (intel_syntax)
13815 break;
252b5132
RH
13816 if (sizeflag & SUFFIX_ALWAYS)
13817 *obufp++ = 'l';
252b5132 13818 break;
9d141669
L
13819 case 'M':
13820 if (intel_mnemonic != cond)
13821 *obufp++ = 'r';
13822 break;
252b5132
RH
13823 case 'N':
13824 if ((prefixes & PREFIX_FWAIT) == 0)
13825 *obufp++ = 'n';
7d421014
ILT
13826 else
13827 used_prefixes |= PREFIX_FWAIT;
252b5132 13828 break;
52b15da3 13829 case 'O':
161a04f6
L
13830 USED_REX (REX_W);
13831 if (rex & REX_W)
6439fc28 13832 *obufp++ = 'o';
a35ca55a
JB
13833 else if (intel_syntax && (sizeflag & DFLAG))
13834 *obufp++ = 'q';
52b15da3
JH
13835 else
13836 *obufp++ = 'd';
161a04f6 13837 if (!(rex & REX_W))
a35ca55a 13838 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 13839 break;
6439fc28 13840 case 'T':
d9e3625e
L
13841 if (!intel_syntax
13842 && address_mode == mode_64bit
7bb15c6f 13843 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
13844 {
13845 *obufp++ = 'q';
13846 break;
13847 }
6608db57 13848 /* Fall through. */
4b4c407a 13849 goto case_P;
252b5132 13850 case 'P':
4b4c407a 13851 if (l == 0 && len == 1)
d9e3625e 13852 {
4b4c407a
L
13853case_P:
13854 if (intel_syntax)
d9e3625e 13855 {
4b4c407a
L
13856 if ((rex & REX_W) == 0
13857 && (prefixes & PREFIX_DATA))
13858 {
13859 if ((sizeflag & DFLAG) == 0)
13860 *obufp++ = 'w';
13861 used_prefixes |= (prefixes & PREFIX_DATA);
13862 }
13863 break;
13864 }
13865 if ((prefixes & PREFIX_DATA)
13866 || (rex & REX_W)
13867 || (sizeflag & SUFFIX_ALWAYS))
13868 {
13869 USED_REX (REX_W);
13870 if (rex & REX_W)
13871 *obufp++ = 'q';
13872 else
13873 {
13874 if (sizeflag & DFLAG)
13875 *obufp++ = 'l';
13876 else
13877 *obufp++ = 'w';
13878 used_prefixes |= (prefixes & PREFIX_DATA);
13879 }
d9e3625e 13880 }
d9e3625e 13881 }
4b4c407a 13882 else
252b5132 13883 {
4b4c407a
L
13884 if (l != 1 || len != 2 || last[0] != 'L')
13885 {
13886 SAVE_LAST (*p);
13887 break;
13888 }
13889
13890 if ((prefixes & PREFIX_DATA)
13891 || (rex & REX_W)
13892 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 13893 {
4b4c407a
L
13894 USED_REX (REX_W);
13895 if (rex & REX_W)
13896 *obufp++ = 'q';
13897 else
13898 {
13899 if (sizeflag & DFLAG)
13900 *obufp++ = intel_syntax ? 'd' : 'l';
13901 else
13902 *obufp++ = 'w';
13903 used_prefixes |= (prefixes & PREFIX_DATA);
13904 }
52b15da3 13905 }
252b5132
RH
13906 }
13907 break;
6439fc28 13908 case 'U':
db6eb5be
AM
13909 if (intel_syntax)
13910 break;
7bb15c6f 13911 if (address_mode == mode_64bit
6c067bbb 13912 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28 13913 {
7967e09e 13914 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 13915 *obufp++ = 'q';
6439fc28
AM
13916 break;
13917 }
6608db57 13918 /* Fall through. */
98b528ac 13919 goto case_Q;
252b5132 13920 case 'Q':
98b528ac 13921 if (l == 0 && len == 1)
252b5132 13922 {
98b528ac
L
13923case_Q:
13924 if (intel_syntax && !alt)
13925 break;
13926 USED_REX (REX_W);
13927 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 13928 {
98b528ac
L
13929 if (rex & REX_W)
13930 *obufp++ = 'q';
52b15da3 13931 else
98b528ac
L
13932 {
13933 if (sizeflag & DFLAG)
13934 *obufp++ = intel_syntax ? 'd' : 'l';
13935 else
13936 *obufp++ = 'w';
f16cd0d5 13937 used_prefixes |= (prefixes & PREFIX_DATA);
98b528ac 13938 }
52b15da3 13939 }
98b528ac
L
13940 }
13941 else
13942 {
13943 if (l != 1 || len != 2 || last[0] != 'L')
13944 {
13945 SAVE_LAST (*p);
13946 break;
13947 }
13948 if (intel_syntax
13949 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
13950 break;
13951 if ((rex & REX_W))
13952 {
13953 USED_REX (REX_W);
13954 *obufp++ = 'q';
13955 }
13956 else
13957 *obufp++ = 'l';
252b5132
RH
13958 }
13959 break;
13960 case 'R':
161a04f6
L
13961 USED_REX (REX_W);
13962 if (rex & REX_W)
a35ca55a
JB
13963 *obufp++ = 'q';
13964 else if (sizeflag & DFLAG)
c608c12e 13965 {
a35ca55a 13966 if (intel_syntax)
c608c12e 13967 *obufp++ = 'd';
c608c12e 13968 else
a35ca55a 13969 *obufp++ = 'l';
c608c12e 13970 }
252b5132 13971 else
a35ca55a
JB
13972 *obufp++ = 'w';
13973 if (intel_syntax && !p[1]
161a04f6 13974 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 13975 *obufp++ = 'e';
161a04f6 13976 if (!(rex & REX_W))
52b15da3 13977 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 13978 break;
1a114b12 13979 case 'V':
4b06377f 13980 if (l == 0 && len == 1)
1a114b12 13981 {
4b06377f
L
13982 if (intel_syntax)
13983 break;
7bb15c6f 13984 if (address_mode == mode_64bit
6c067bbb 13985 && ((sizeflag & DFLAG) || (rex & REX_W)))
4b06377f
L
13986 {
13987 if (sizeflag & SUFFIX_ALWAYS)
13988 *obufp++ = 'q';
13989 break;
13990 }
13991 }
13992 else
13993 {
13994 if (l != 1
13995 || len != 2
13996 || last[0] != 'L')
13997 {
13998 SAVE_LAST (*p);
13999 break;
14000 }
14001
14002 if (rex & REX_W)
14003 {
14004 *obufp++ = 'a';
14005 *obufp++ = 'b';
14006 *obufp++ = 's';
14007 }
1a114b12
JB
14008 }
14009 /* Fall through. */
4b06377f 14010 goto case_S;
252b5132 14011 case 'S':
4b06377f 14012 if (l == 0 && len == 1)
252b5132 14013 {
4b06377f
L
14014case_S:
14015 if (intel_syntax)
14016 break;
14017 if (sizeflag & SUFFIX_ALWAYS)
52b15da3 14018 {
4b06377f
L
14019 if (rex & REX_W)
14020 *obufp++ = 'q';
52b15da3 14021 else
4b06377f
L
14022 {
14023 if (sizeflag & DFLAG)
14024 *obufp++ = 'l';
14025 else
14026 *obufp++ = 'w';
14027 used_prefixes |= (prefixes & PREFIX_DATA);
14028 }
14029 }
14030 }
14031 else
14032 {
14033 if (l != 1
14034 || len != 2
14035 || last[0] != 'L')
14036 {
14037 SAVE_LAST (*p);
14038 break;
52b15da3 14039 }
4b06377f
L
14040
14041 if (address_mode == mode_64bit
14042 && !(prefixes & PREFIX_ADDR))
14043 {
14044 *obufp++ = 'a';
14045 *obufp++ = 'b';
14046 *obufp++ = 's';
14047 }
14048
14049 goto case_S;
252b5132 14050 }
252b5132 14051 break;
041bd2e0 14052 case 'X':
c0f3af97
L
14053 if (l != 0 || len != 1)
14054 {
14055 SAVE_LAST (*p);
14056 break;
14057 }
14058 if (need_vex && vex.prefix)
14059 {
14060 if (vex.prefix == DATA_PREFIX_OPCODE)
14061 *obufp++ = 'd';
14062 else
14063 *obufp++ = 's';
14064 }
041bd2e0 14065 else
f16cd0d5
L
14066 {
14067 if (prefixes & PREFIX_DATA)
14068 *obufp++ = 'd';
14069 else
14070 *obufp++ = 's';
14071 used_prefixes |= (prefixes & PREFIX_DATA);
14072 }
041bd2e0 14073 break;
76f227a5 14074 case 'Y':
c0f3af97 14075 if (l == 0 && len == 1)
76f227a5 14076 {
c0f3af97
L
14077 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
14078 break;
14079 if (rex & REX_W)
14080 {
14081 USED_REX (REX_W);
14082 *obufp++ = 'q';
14083 }
14084 break;
14085 }
14086 else
14087 {
14088 if (l != 1 || len != 2 || last[0] != 'X')
14089 {
14090 SAVE_LAST (*p);
14091 break;
14092 }
14093 if (!need_vex)
14094 abort ();
14095 if (intel_syntax
14096 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
14097 break;
14098 switch (vex.length)
14099 {
14100 case 128:
14101 *obufp++ = 'x';
14102 break;
14103 case 256:
14104 *obufp++ = 'y';
14105 break;
14106 default:
14107 abort ();
14108 }
76f227a5
JH
14109 }
14110 break;
252b5132 14111 case 'W':
0bfee649 14112 if (l == 0 && len == 1)
a35ca55a 14113 {
0bfee649
L
14114 /* operand size flag for cwtl, cbtw */
14115 USED_REX (REX_W);
14116 if (rex & REX_W)
14117 {
14118 if (intel_syntax)
14119 *obufp++ = 'd';
14120 else
14121 *obufp++ = 'l';
14122 }
14123 else if (sizeflag & DFLAG)
14124 *obufp++ = 'w';
a35ca55a 14125 else
0bfee649
L
14126 *obufp++ = 'b';
14127 if (!(rex & REX_W))
14128 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 14129 }
252b5132 14130 else
0bfee649 14131 {
6c30d220
L
14132 if (l != 1
14133 || len != 2
14134 || (last[0] != 'X'
14135 && last[0] != 'L'))
0bfee649
L
14136 {
14137 SAVE_LAST (*p);
14138 break;
14139 }
14140 if (!need_vex)
14141 abort ();
6c30d220
L
14142 if (last[0] == 'X')
14143 *obufp++ = vex.w ? 'd': 's';
14144 else
14145 *obufp++ = vex.w ? 'q': 'd';
0bfee649 14146 }
252b5132
RH
14147 break;
14148 }
9306ca4a 14149 alt = 0;
252b5132
RH
14150 }
14151 *obufp = 0;
ea397f5b 14152 mnemonicendp = obufp;
6439fc28 14153 return 0;
252b5132
RH
14154}
14155
14156static void
26ca5450 14157oappend (const char *s)
252b5132 14158{
ea397f5b 14159 obufp = stpcpy (obufp, s);
252b5132
RH
14160}
14161
14162static void
26ca5450 14163append_seg (void)
252b5132 14164{
285ca992
L
14165 /* Only print the active segment register. */
14166 if (!active_seg_prefix)
14167 return;
14168
14169 used_prefixes |= active_seg_prefix;
14170 switch (active_seg_prefix)
7d421014 14171 {
285ca992 14172 case PREFIX_CS:
9ce09ba2 14173 oappend_maybe_intel ("%cs:");
285ca992
L
14174 break;
14175 case PREFIX_DS:
9ce09ba2 14176 oappend_maybe_intel ("%ds:");
285ca992
L
14177 break;
14178 case PREFIX_SS:
9ce09ba2 14179 oappend_maybe_intel ("%ss:");
285ca992
L
14180 break;
14181 case PREFIX_ES:
9ce09ba2 14182 oappend_maybe_intel ("%es:");
285ca992
L
14183 break;
14184 case PREFIX_FS:
9ce09ba2 14185 oappend_maybe_intel ("%fs:");
285ca992
L
14186 break;
14187 case PREFIX_GS:
9ce09ba2 14188 oappend_maybe_intel ("%gs:");
285ca992
L
14189 break;
14190 default:
14191 break;
7d421014 14192 }
252b5132
RH
14193}
14194
14195static void
26ca5450 14196OP_indirE (int bytemode, int sizeflag)
252b5132
RH
14197{
14198 if (!intel_syntax)
14199 oappend ("*");
14200 OP_E (bytemode, sizeflag);
14201}
14202
52b15da3 14203static void
26ca5450 14204print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 14205{
cb712a9e 14206 if (address_mode == mode_64bit)
52b15da3
JH
14207 {
14208 if (hex)
14209 {
14210 char tmp[30];
14211 int i;
14212 buf[0] = '0';
14213 buf[1] = 'x';
14214 sprintf_vma (tmp, disp);
6608db57 14215 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
14216 strcpy (buf + 2, tmp + i);
14217 }
14218 else
14219 {
14220 bfd_signed_vma v = disp;
14221 char tmp[30];
14222 int i;
14223 if (v < 0)
14224 {
14225 *(buf++) = '-';
14226 v = -disp;
6608db57 14227 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
14228 if (v < 0)
14229 {
14230 strcpy (buf, "9223372036854775808");
14231 return;
14232 }
14233 }
14234 if (!v)
14235 {
14236 strcpy (buf, "0");
14237 return;
14238 }
14239
14240 i = 0;
14241 tmp[29] = 0;
14242 while (v)
14243 {
6608db57 14244 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
14245 v /= 10;
14246 i++;
14247 }
14248 strcpy (buf, tmp + 29 - i);
14249 }
14250 }
14251 else
14252 {
14253 if (hex)
14254 sprintf (buf, "0x%x", (unsigned int) disp);
14255 else
14256 sprintf (buf, "%d", (int) disp);
14257 }
14258}
14259
5d669648
L
14260/* Put DISP in BUF as signed hex number. */
14261
14262static void
14263print_displacement (char *buf, bfd_vma disp)
14264{
14265 bfd_signed_vma val = disp;
14266 char tmp[30];
14267 int i, j = 0;
14268
14269 if (val < 0)
14270 {
14271 buf[j++] = '-';
14272 val = -disp;
14273
14274 /* Check for possible overflow. */
14275 if (val < 0)
14276 {
14277 switch (address_mode)
14278 {
14279 case mode_64bit:
14280 strcpy (buf + j, "0x8000000000000000");
14281 break;
14282 case mode_32bit:
14283 strcpy (buf + j, "0x80000000");
14284 break;
14285 case mode_16bit:
14286 strcpy (buf + j, "0x8000");
14287 break;
14288 }
14289 return;
14290 }
14291 }
14292
14293 buf[j++] = '0';
14294 buf[j++] = 'x';
14295
0af1713e 14296 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
14297 for (i = 0; tmp[i] == '0'; i++)
14298 continue;
14299 if (tmp[i] == '\0')
14300 i--;
14301 strcpy (buf + j, tmp + i);
14302}
14303
3f31e633
JB
14304static void
14305intel_operand_size (int bytemode, int sizeflag)
14306{
43234a1e
L
14307 if (vex.evex
14308 && vex.b
14309 && (bytemode == x_mode
14310 || bytemode == evex_half_bcst_xmmq_mode))
14311 {
14312 if (vex.w)
14313 oappend ("QWORD PTR ");
14314 else
14315 oappend ("DWORD PTR ");
14316 return;
14317 }
3f31e633
JB
14318 switch (bytemode)
14319 {
14320 case b_mode:
b6169b20 14321 case b_swap_mode:
42903f7f 14322 case dqb_mode:
1ba585e8 14323 case db_mode:
3f31e633
JB
14324 oappend ("BYTE PTR ");
14325 break;
14326 case w_mode:
1ba585e8 14327 case dw_mode:
3f31e633 14328 case dqw_mode:
1ba585e8 14329 case dqw_swap_mode:
3f31e633
JB
14330 oappend ("WORD PTR ");
14331 break;
1a114b12 14332 case stack_v_mode:
7bb15c6f 14333 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
3f31e633
JB
14334 {
14335 oappend ("QWORD PTR ");
3f31e633
JB
14336 break;
14337 }
14338 /* FALLTHRU */
14339 case v_mode:
b6169b20 14340 case v_swap_mode:
3f31e633 14341 case dq_mode:
161a04f6
L
14342 USED_REX (REX_W);
14343 if (rex & REX_W)
3f31e633 14344 oappend ("QWORD PTR ");
3f31e633 14345 else
f16cd0d5
L
14346 {
14347 if ((sizeflag & DFLAG) || bytemode == dq_mode)
14348 oappend ("DWORD PTR ");
14349 else
14350 oappend ("WORD PTR ");
14351 used_prefixes |= (prefixes & PREFIX_DATA);
14352 }
3f31e633 14353 break;
52fd6d94 14354 case z_mode:
161a04f6 14355 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
14356 *obufp++ = 'D';
14357 oappend ("WORD PTR ");
161a04f6 14358 if (!(rex & REX_W))
52fd6d94
JB
14359 used_prefixes |= (prefixes & PREFIX_DATA);
14360 break;
34b772a6
JB
14361 case a_mode:
14362 if (sizeflag & DFLAG)
14363 oappend ("QWORD PTR ");
14364 else
14365 oappend ("DWORD PTR ");
14366 used_prefixes |= (prefixes & PREFIX_DATA);
14367 break;
3f31e633 14368 case d_mode:
539f890d
L
14369 case d_scalar_mode:
14370 case d_scalar_swap_mode:
fa99fab2 14371 case d_swap_mode:
42903f7f 14372 case dqd_mode:
3f31e633
JB
14373 oappend ("DWORD PTR ");
14374 break;
14375 case q_mode:
539f890d
L
14376 case q_scalar_mode:
14377 case q_scalar_swap_mode:
b6169b20 14378 case q_swap_mode:
3f31e633
JB
14379 oappend ("QWORD PTR ");
14380 break;
14381 case m_mode:
cb712a9e 14382 if (address_mode == mode_64bit)
3f31e633
JB
14383 oappend ("QWORD PTR ");
14384 else
14385 oappend ("DWORD PTR ");
14386 break;
14387 case f_mode:
14388 if (sizeflag & DFLAG)
14389 oappend ("FWORD PTR ");
14390 else
14391 oappend ("DWORD PTR ");
14392 used_prefixes |= (prefixes & PREFIX_DATA);
14393 break;
14394 case t_mode:
14395 oappend ("TBYTE PTR ");
14396 break;
14397 case x_mode:
b6169b20 14398 case x_swap_mode:
43234a1e
L
14399 case evex_x_gscat_mode:
14400 case evex_x_nobcst_mode:
c0f3af97
L
14401 if (need_vex)
14402 {
14403 switch (vex.length)
14404 {
14405 case 128:
14406 oappend ("XMMWORD PTR ");
14407 break;
14408 case 256:
14409 oappend ("YMMWORD PTR ");
14410 break;
43234a1e
L
14411 case 512:
14412 oappend ("ZMMWORD PTR ");
14413 break;
c0f3af97
L
14414 default:
14415 abort ();
14416 }
14417 }
14418 else
14419 oappend ("XMMWORD PTR ");
14420 break;
14421 case xmm_mode:
3f31e633
JB
14422 oappend ("XMMWORD PTR ");
14423 break;
43234a1e
L
14424 case ymm_mode:
14425 oappend ("YMMWORD PTR ");
14426 break;
c0f3af97 14427 case xmmq_mode:
43234a1e 14428 case evex_half_bcst_xmmq_mode:
c0f3af97
L
14429 if (!need_vex)
14430 abort ();
14431
14432 switch (vex.length)
14433 {
14434 case 128:
14435 oappend ("QWORD PTR ");
14436 break;
14437 case 256:
14438 oappend ("XMMWORD PTR ");
14439 break;
43234a1e
L
14440 case 512:
14441 oappend ("YMMWORD PTR ");
14442 break;
c0f3af97
L
14443 default:
14444 abort ();
14445 }
14446 break;
6c30d220
L
14447 case xmm_mb_mode:
14448 if (!need_vex)
14449 abort ();
14450
14451 switch (vex.length)
14452 {
14453 case 128:
14454 case 256:
43234a1e 14455 case 512:
6c30d220
L
14456 oappend ("BYTE PTR ");
14457 break;
14458 default:
14459 abort ();
14460 }
14461 break;
14462 case xmm_mw_mode:
14463 if (!need_vex)
14464 abort ();
14465
14466 switch (vex.length)
14467 {
14468 case 128:
14469 case 256:
43234a1e 14470 case 512:
6c30d220
L
14471 oappend ("WORD PTR ");
14472 break;
14473 default:
14474 abort ();
14475 }
14476 break;
14477 case xmm_md_mode:
14478 if (!need_vex)
14479 abort ();
14480
14481 switch (vex.length)
14482 {
14483 case 128:
14484 case 256:
43234a1e 14485 case 512:
6c30d220
L
14486 oappend ("DWORD PTR ");
14487 break;
14488 default:
14489 abort ();
14490 }
14491 break;
14492 case xmm_mq_mode:
14493 if (!need_vex)
14494 abort ();
14495
14496 switch (vex.length)
14497 {
14498 case 128:
14499 case 256:
43234a1e 14500 case 512:
6c30d220
L
14501 oappend ("QWORD PTR ");
14502 break;
14503 default:
14504 abort ();
14505 }
14506 break;
14507 case xmmdw_mode:
14508 if (!need_vex)
14509 abort ();
14510
14511 switch (vex.length)
14512 {
14513 case 128:
14514 oappend ("WORD PTR ");
14515 break;
14516 case 256:
14517 oappend ("DWORD PTR ");
14518 break;
43234a1e
L
14519 case 512:
14520 oappend ("QWORD PTR ");
14521 break;
6c30d220
L
14522 default:
14523 abort ();
14524 }
14525 break;
14526 case xmmqd_mode:
14527 if (!need_vex)
14528 abort ();
14529
14530 switch (vex.length)
14531 {
14532 case 128:
14533 oappend ("DWORD PTR ");
14534 break;
14535 case 256:
14536 oappend ("QWORD PTR ");
14537 break;
43234a1e
L
14538 case 512:
14539 oappend ("XMMWORD PTR ");
14540 break;
6c30d220
L
14541 default:
14542 abort ();
14543 }
14544 break;
c0f3af97
L
14545 case ymmq_mode:
14546 if (!need_vex)
14547 abort ();
14548
14549 switch (vex.length)
14550 {
14551 case 128:
14552 oappend ("QWORD PTR ");
14553 break;
14554 case 256:
14555 oappend ("YMMWORD PTR ");
14556 break;
43234a1e
L
14557 case 512:
14558 oappend ("ZMMWORD PTR ");
14559 break;
c0f3af97
L
14560 default:
14561 abort ();
14562 }
14563 break;
6c30d220
L
14564 case ymmxmm_mode:
14565 if (!need_vex)
14566 abort ();
14567
14568 switch (vex.length)
14569 {
14570 case 128:
14571 case 256:
14572 oappend ("XMMWORD PTR ");
14573 break;
14574 default:
14575 abort ();
14576 }
14577 break;
fb9c77c7
L
14578 case o_mode:
14579 oappend ("OWORD PTR ");
14580 break;
43234a1e 14581 case xmm_mdq_mode:
0bfee649 14582 case vex_w_dq_mode:
1c480963 14583 case vex_scalar_w_dq_mode:
0bfee649
L
14584 if (!need_vex)
14585 abort ();
14586
14587 if (vex.w)
14588 oappend ("QWORD PTR ");
14589 else
14590 oappend ("DWORD PTR ");
14591 break;
43234a1e
L
14592 case vex_vsib_d_w_dq_mode:
14593 case vex_vsib_q_w_dq_mode:
14594 if (!need_vex)
14595 abort ();
14596
14597 if (!vex.evex)
14598 {
14599 if (vex.w)
14600 oappend ("QWORD PTR ");
14601 else
14602 oappend ("DWORD PTR ");
14603 }
14604 else
14605 {
b28d1bda
IT
14606 switch (vex.length)
14607 {
14608 case 128:
14609 oappend ("XMMWORD PTR ");
14610 break;
14611 case 256:
14612 oappend ("YMMWORD PTR ");
14613 break;
14614 case 512:
14615 oappend ("ZMMWORD PTR ");
14616 break;
14617 default:
14618 abort ();
14619 }
43234a1e
L
14620 }
14621 break;
5fc35d96
IT
14622 case vex_vsib_q_w_d_mode:
14623 case vex_vsib_d_w_d_mode:
b28d1bda 14624 if (!need_vex || !vex.evex)
5fc35d96
IT
14625 abort ();
14626
b28d1bda
IT
14627 switch (vex.length)
14628 {
14629 case 128:
14630 oappend ("QWORD PTR ");
14631 break;
14632 case 256:
14633 oappend ("XMMWORD PTR ");
14634 break;
14635 case 512:
14636 oappend ("YMMWORD PTR ");
14637 break;
14638 default:
14639 abort ();
14640 }
5fc35d96
IT
14641
14642 break;
1ba585e8
IT
14643 case mask_bd_mode:
14644 if (!need_vex || vex.length != 128)
14645 abort ();
14646 if (vex.w)
14647 oappend ("DWORD PTR ");
14648 else
14649 oappend ("BYTE PTR ");
14650 break;
43234a1e
L
14651 case mask_mode:
14652 if (!need_vex)
14653 abort ();
1ba585e8
IT
14654 if (vex.w)
14655 oappend ("QWORD PTR ");
14656 else
14657 oappend ("WORD PTR ");
43234a1e 14658 break;
6c75cc62 14659 case v_bnd_mode:
3f31e633
JB
14660 default:
14661 break;
14662 }
14663}
14664
252b5132 14665static void
c0f3af97 14666OP_E_register (int bytemode, int sizeflag)
252b5132 14667{
c0f3af97
L
14668 int reg = modrm.rm;
14669 const char **names;
252b5132 14670
c0f3af97
L
14671 USED_REX (REX_B);
14672 if ((rex & REX_B))
14673 reg += 8;
252b5132 14674
b6169b20 14675 if ((sizeflag & SUFFIX_ALWAYS)
1ba585e8
IT
14676 && (bytemode == b_swap_mode
14677 || bytemode == v_swap_mode
14678 || bytemode == dqw_swap_mode))
b6169b20
L
14679 swap_operand ();
14680
c0f3af97 14681 switch (bytemode)
252b5132 14682 {
c0f3af97 14683 case b_mode:
b6169b20 14684 case b_swap_mode:
c0f3af97
L
14685 USED_REX (0);
14686 if (rex)
14687 names = names8rex;
14688 else
14689 names = names8;
14690 break;
14691 case w_mode:
14692 names = names16;
14693 break;
14694 case d_mode:
1ba585e8
IT
14695 case dw_mode:
14696 case db_mode:
c0f3af97
L
14697 names = names32;
14698 break;
14699 case q_mode:
14700 names = names64;
14701 break;
14702 case m_mode:
6c75cc62 14703 case v_bnd_mode:
c0f3af97
L
14704 names = address_mode == mode_64bit ? names64 : names32;
14705 break;
7e8b059b
L
14706 case bnd_mode:
14707 names = names_bnd;
14708 break;
c0f3af97 14709 case stack_v_mode:
7bb15c6f 14710 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
252b5132 14711 {
c0f3af97 14712 names = names64;
252b5132 14713 break;
252b5132 14714 }
c0f3af97
L
14715 bytemode = v_mode;
14716 /* FALLTHRU */
14717 case v_mode:
b6169b20 14718 case v_swap_mode:
c0f3af97
L
14719 case dq_mode:
14720 case dqb_mode:
14721 case dqd_mode:
14722 case dqw_mode:
1ba585e8 14723 case dqw_swap_mode:
c0f3af97
L
14724 USED_REX (REX_W);
14725 if (rex & REX_W)
14726 names = names64;
c0f3af97 14727 else
f16cd0d5 14728 {
7bb15c6f 14729 if ((sizeflag & DFLAG)
f16cd0d5
L
14730 || (bytemode != v_mode
14731 && bytemode != v_swap_mode))
14732 names = names32;
14733 else
14734 names = names16;
14735 used_prefixes |= (prefixes & PREFIX_DATA);
14736 }
c0f3af97 14737 break;
1ba585e8 14738 case mask_bd_mode:
43234a1e
L
14739 case mask_mode:
14740 names = names_mask;
14741 break;
c0f3af97
L
14742 case 0:
14743 return;
14744 default:
14745 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
14746 return;
14747 }
c0f3af97
L
14748 oappend (names[reg]);
14749}
14750
14751static void
c1e679ec 14752OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
14753{
14754 bfd_vma disp = 0;
14755 int add = (rex & REX_B) ? 8 : 0;
14756 int riprel = 0;
43234a1e
L
14757 int shift;
14758
14759 if (vex.evex)
14760 {
14761 /* In EVEX, if operand doesn't allow broadcast, vex.b should be 0. */
14762 if (vex.b
14763 && bytemode != x_mode
90a915bf 14764 && bytemode != xmmq_mode
43234a1e
L
14765 && bytemode != evex_half_bcst_xmmq_mode)
14766 {
14767 BadOp ();
14768 return;
14769 }
14770 switch (bytemode)
14771 {
1ba585e8
IT
14772 case dqw_mode:
14773 case dw_mode:
14774 case dqw_swap_mode:
14775 shift = 1;
14776 break;
14777 case dqb_mode:
14778 case db_mode:
14779 shift = 0;
14780 break;
43234a1e 14781 case vex_vsib_d_w_dq_mode:
5fc35d96 14782 case vex_vsib_d_w_d_mode:
eaa9d1ad 14783 case vex_vsib_q_w_dq_mode:
5fc35d96 14784 case vex_vsib_q_w_d_mode:
43234a1e
L
14785 case evex_x_gscat_mode:
14786 case xmm_mdq_mode:
14787 shift = vex.w ? 3 : 2;
14788 break;
43234a1e
L
14789 case x_mode:
14790 case evex_half_bcst_xmmq_mode:
90a915bf 14791 case xmmq_mode:
43234a1e
L
14792 if (vex.b)
14793 {
14794 shift = vex.w ? 3 : 2;
14795 break;
14796 }
14797 /* Fall through if vex.b == 0. */
14798 case xmmqd_mode:
14799 case xmmdw_mode:
43234a1e
L
14800 case ymmq_mode:
14801 case evex_x_nobcst_mode:
14802 case x_swap_mode:
14803 switch (vex.length)
14804 {
14805 case 128:
14806 shift = 4;
14807 break;
14808 case 256:
14809 shift = 5;
14810 break;
14811 case 512:
14812 shift = 6;
14813 break;
14814 default:
14815 abort ();
14816 }
14817 break;
14818 case ymm_mode:
14819 shift = 5;
14820 break;
14821 case xmm_mode:
14822 shift = 4;
14823 break;
14824 case xmm_mq_mode:
14825 case q_mode:
14826 case q_scalar_mode:
14827 case q_swap_mode:
14828 case q_scalar_swap_mode:
14829 shift = 3;
14830 break;
14831 case dqd_mode:
14832 case xmm_md_mode:
14833 case d_mode:
14834 case d_scalar_mode:
14835 case d_swap_mode:
14836 case d_scalar_swap_mode:
14837 shift = 2;
14838 break;
14839 case xmm_mw_mode:
14840 shift = 1;
14841 break;
14842 case xmm_mb_mode:
14843 shift = 0;
14844 break;
14845 default:
14846 abort ();
14847 }
14848 /* Make necessary corrections to shift for modes that need it.
14849 For these modes we currently have shift 4, 5 or 6 depending on
14850 vex.length (it corresponds to xmmword, ymmword or zmmword
14851 operand). We might want to make it 3, 4 or 5 (e.g. for
14852 xmmq_mode). In case of broadcast enabled the corrections
14853 aren't needed, as element size is always 32 or 64 bits. */
90a915bf
IT
14854 if (!vex.b
14855 && (bytemode == xmmq_mode
14856 || bytemode == evex_half_bcst_xmmq_mode))
43234a1e
L
14857 shift -= 1;
14858 else if (bytemode == xmmqd_mode)
14859 shift -= 2;
14860 else if (bytemode == xmmdw_mode)
14861 shift -= 3;
b28d1bda
IT
14862 else if (bytemode == ymmq_mode && vex.length == 128)
14863 shift -= 1;
43234a1e
L
14864 }
14865 else
14866 shift = 0;
252b5132 14867
c0f3af97 14868 USED_REX (REX_B);
3f31e633
JB
14869 if (intel_syntax)
14870 intel_operand_size (bytemode, sizeflag);
252b5132
RH
14871 append_seg ();
14872
5d669648 14873 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 14874 {
5d669648
L
14875 /* 32/64 bit address mode */
14876 int havedisp;
252b5132
RH
14877 int havesib;
14878 int havebase;
0f7da397 14879 int haveindex;
20afcfb7 14880 int needindex;
82c18208 14881 int base, rbase;
91d6fa6a 14882 int vindex = 0;
252b5132 14883 int scale = 0;
7e8b059b
L
14884 int addr32flag = !((sizeflag & AFLAG)
14885 || bytemode == v_bnd_mode
14886 || bytemode == bnd_mode);
6c30d220
L
14887 const char **indexes64 = names64;
14888 const char **indexes32 = names32;
252b5132
RH
14889
14890 havesib = 0;
14891 havebase = 1;
0f7da397 14892 haveindex = 0;
7967e09e 14893 base = modrm.rm;
252b5132
RH
14894
14895 if (base == 4)
14896 {
14897 havesib = 1;
dfc8cf43 14898 vindex = sib.index;
161a04f6
L
14899 USED_REX (REX_X);
14900 if (rex & REX_X)
91d6fa6a 14901 vindex += 8;
6c30d220
L
14902 switch (bytemode)
14903 {
14904 case vex_vsib_d_w_dq_mode:
5fc35d96 14905 case vex_vsib_d_w_d_mode:
6c30d220 14906 case vex_vsib_q_w_dq_mode:
5fc35d96 14907 case vex_vsib_q_w_d_mode:
6c30d220
L
14908 if (!need_vex)
14909 abort ();
43234a1e
L
14910 if (vex.evex)
14911 {
14912 if (!vex.v)
14913 vindex += 16;
14914 }
6c30d220
L
14915
14916 haveindex = 1;
14917 switch (vex.length)
14918 {
14919 case 128:
7bb15c6f 14920 indexes64 = indexes32 = names_xmm;
6c30d220
L
14921 break;
14922 case 256:
5fc35d96
IT
14923 if (!vex.w
14924 || bytemode == vex_vsib_q_w_dq_mode
14925 || bytemode == vex_vsib_q_w_d_mode)
7bb15c6f 14926 indexes64 = indexes32 = names_ymm;
6c30d220 14927 else
7bb15c6f 14928 indexes64 = indexes32 = names_xmm;
6c30d220 14929 break;
43234a1e 14930 case 512:
5fc35d96
IT
14931 if (!vex.w
14932 || bytemode == vex_vsib_q_w_dq_mode
14933 || bytemode == vex_vsib_q_w_d_mode)
43234a1e
L
14934 indexes64 = indexes32 = names_zmm;
14935 else
14936 indexes64 = indexes32 = names_ymm;
14937 break;
6c30d220
L
14938 default:
14939 abort ();
14940 }
14941 break;
14942 default:
14943 haveindex = vindex != 4;
14944 break;
14945 }
14946 scale = sib.scale;
14947 base = sib.base;
252b5132
RH
14948 codep++;
14949 }
82c18208 14950 rbase = base + add;
252b5132 14951
7967e09e 14952 switch (modrm.mod)
252b5132
RH
14953 {
14954 case 0:
82c18208 14955 if (base == 5)
252b5132
RH
14956 {
14957 havebase = 0;
cb712a9e 14958 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
14959 riprel = 1;
14960 disp = get32s ();
252b5132
RH
14961 }
14962 break;
14963 case 1:
14964 FETCH_DATA (the_info, codep + 1);
14965 disp = *codep++;
14966 if ((disp & 0x80) != 0)
14967 disp -= 0x100;
43234a1e
L
14968 if (vex.evex && shift > 0)
14969 disp <<= shift;
252b5132
RH
14970 break;
14971 case 2:
52b15da3 14972 disp = get32s ();
252b5132
RH
14973 break;
14974 }
14975
20afcfb7
L
14976 /* In 32bit mode, we need index register to tell [offset] from
14977 [eiz*1 + offset]. */
14978 needindex = (havesib
14979 && !havebase
14980 && !haveindex
14981 && address_mode == mode_32bit);
14982 havedisp = (havebase
14983 || needindex
14984 || (havesib && (haveindex || scale != 0)));
5d669648 14985
252b5132 14986 if (!intel_syntax)
82c18208 14987 if (modrm.mod != 0 || base == 5)
db6eb5be 14988 {
5d669648
L
14989 if (havedisp || riprel)
14990 print_displacement (scratchbuf, disp);
14991 else
14992 print_operand_value (scratchbuf, 1, disp);
db6eb5be 14993 oappend (scratchbuf);
52b15da3
JH
14994 if (riprel)
14995 {
14996 set_op (disp, 1);
87767711 14997 oappend (sizeflag & AFLAG ? "(%rip)" : "(%eip)");
52b15da3 14998 }
db6eb5be 14999 }
2da11e11 15000
7e8b059b
L
15001 if ((havebase || haveindex || riprel)
15002 && (bytemode != v_bnd_mode)
15003 && (bytemode != bnd_mode))
87767711
JB
15004 used_prefixes |= PREFIX_ADDR;
15005
5d669648 15006 if (havedisp || (intel_syntax && riprel))
252b5132 15007 {
252b5132 15008 *obufp++ = open_char;
52b15da3 15009 if (intel_syntax && riprel)
185b1163
L
15010 {
15011 set_op (disp, 1);
87767711 15012 oappend (sizeflag & AFLAG ? "rip" : "eip");
185b1163 15013 }
db6eb5be 15014 *obufp = '\0';
252b5132 15015 if (havebase)
7e8b059b 15016 oappend (address_mode == mode_64bit && !addr32flag
82c18208 15017 ? names64[rbase] : names32[rbase]);
252b5132
RH
15018 if (havesib)
15019 {
db51cc60
L
15020 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
15021 print index to tell base + index from base. */
15022 if (scale != 0
20afcfb7 15023 || needindex
db51cc60
L
15024 || haveindex
15025 || (havebase && base != ESP_REG_NUM))
252b5132 15026 {
9306ca4a 15027 if (!intel_syntax || havebase)
db6eb5be 15028 {
9306ca4a
JB
15029 *obufp++ = separator_char;
15030 *obufp = '\0';
db6eb5be 15031 }
db51cc60 15032 if (haveindex)
7e8b059b 15033 oappend (address_mode == mode_64bit && !addr32flag
6c30d220 15034 ? indexes64[vindex] : indexes32[vindex]);
db51cc60 15035 else
7e8b059b 15036 oappend (address_mode == mode_64bit && !addr32flag
db51cc60
L
15037 ? index64 : index32);
15038
db6eb5be
AM
15039 *obufp++ = scale_char;
15040 *obufp = '\0';
15041 sprintf (scratchbuf, "%d", 1 << scale);
15042 oappend (scratchbuf);
15043 }
252b5132 15044 }
185b1163 15045 if (intel_syntax
82c18208 15046 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 15047 {
db51cc60 15048 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
15049 {
15050 *obufp++ = '+';
15051 *obufp = '\0';
15052 }
05203043 15053 else if (modrm.mod != 1 && disp != -disp)
3d456fa1
JB
15054 {
15055 *obufp++ = '-';
15056 *obufp = '\0';
15057 disp = - (bfd_signed_vma) disp;
15058 }
15059
db51cc60
L
15060 if (havedisp)
15061 print_displacement (scratchbuf, disp);
15062 else
15063 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
15064 oappend (scratchbuf);
15065 }
252b5132
RH
15066
15067 *obufp++ = close_char;
db6eb5be 15068 *obufp = '\0';
252b5132
RH
15069 }
15070 else if (intel_syntax)
db6eb5be 15071 {
82c18208 15072 if (modrm.mod != 0 || base == 5)
db6eb5be 15073 {
285ca992 15074 if (!active_seg_prefix)
252b5132 15075 {
d708bcba 15076 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
15077 oappend (":");
15078 }
52b15da3 15079 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
15080 oappend (scratchbuf);
15081 }
15082 }
252b5132
RH
15083 }
15084 else
f16cd0d5
L
15085 {
15086 /* 16 bit address mode */
15087 used_prefixes |= prefixes & PREFIX_ADDR;
7967e09e 15088 switch (modrm.mod)
252b5132
RH
15089 {
15090 case 0:
7967e09e 15091 if (modrm.rm == 6)
252b5132
RH
15092 {
15093 disp = get16 ();
15094 if ((disp & 0x8000) != 0)
15095 disp -= 0x10000;
15096 }
15097 break;
15098 case 1:
15099 FETCH_DATA (the_info, codep + 1);
15100 disp = *codep++;
15101 if ((disp & 0x80) != 0)
15102 disp -= 0x100;
15103 break;
15104 case 2:
15105 disp = get16 ();
15106 if ((disp & 0x8000) != 0)
15107 disp -= 0x10000;
15108 break;
15109 }
15110
15111 if (!intel_syntax)
7967e09e 15112 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 15113 {
5d669648 15114 print_displacement (scratchbuf, disp);
db6eb5be
AM
15115 oappend (scratchbuf);
15116 }
252b5132 15117
7967e09e 15118 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
15119 {
15120 *obufp++ = open_char;
db6eb5be 15121 *obufp = '\0';
7967e09e 15122 oappend (index16[modrm.rm]);
5d669648
L
15123 if (intel_syntax
15124 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 15125 {
5d669648 15126 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
15127 {
15128 *obufp++ = '+';
15129 *obufp = '\0';
15130 }
7967e09e 15131 else if (modrm.mod != 1)
3d456fa1
JB
15132 {
15133 *obufp++ = '-';
15134 *obufp = '\0';
15135 disp = - (bfd_signed_vma) disp;
15136 }
15137
5d669648 15138 print_displacement (scratchbuf, disp);
3d456fa1
JB
15139 oappend (scratchbuf);
15140 }
15141
db6eb5be
AM
15142 *obufp++ = close_char;
15143 *obufp = '\0';
252b5132 15144 }
3d456fa1
JB
15145 else if (intel_syntax)
15146 {
285ca992 15147 if (!active_seg_prefix)
3d456fa1
JB
15148 {
15149 oappend (names_seg[ds_reg - es_reg]);
15150 oappend (":");
15151 }
15152 print_operand_value (scratchbuf, 1, disp & 0xffff);
15153 oappend (scratchbuf);
15154 }
252b5132 15155 }
43234a1e
L
15156 if (vex.evex && vex.b
15157 && (bytemode == x_mode
90a915bf 15158 || bytemode == xmmq_mode
43234a1e
L
15159 || bytemode == evex_half_bcst_xmmq_mode))
15160 {
90a915bf
IT
15161 if (vex.w
15162 || bytemode == xmmq_mode
15163 || bytemode == evex_half_bcst_xmmq_mode)
b28d1bda
IT
15164 {
15165 switch (vex.length)
15166 {
15167 case 128:
15168 oappend ("{1to2}");
15169 break;
15170 case 256:
15171 oappend ("{1to4}");
15172 break;
15173 case 512:
15174 oappend ("{1to8}");
15175 break;
15176 default:
15177 abort ();
15178 }
15179 }
43234a1e 15180 else
b28d1bda
IT
15181 {
15182 switch (vex.length)
15183 {
15184 case 128:
15185 oappend ("{1to4}");
15186 break;
15187 case 256:
15188 oappend ("{1to8}");
15189 break;
15190 case 512:
15191 oappend ("{1to16}");
15192 break;
15193 default:
15194 abort ();
15195 }
15196 }
43234a1e 15197 }
252b5132
RH
15198}
15199
c0f3af97 15200static void
8b3f93e7 15201OP_E (int bytemode, int sizeflag)
c0f3af97
L
15202{
15203 /* Skip mod/rm byte. */
15204 MODRM_CHECK;
15205 codep++;
15206
15207 if (modrm.mod == 3)
15208 OP_E_register (bytemode, sizeflag);
15209 else
c1e679ec 15210 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
15211}
15212
252b5132 15213static void
26ca5450 15214OP_G (int bytemode, int sizeflag)
252b5132 15215{
52b15da3 15216 int add = 0;
161a04f6
L
15217 USED_REX (REX_R);
15218 if (rex & REX_R)
52b15da3 15219 add += 8;
252b5132
RH
15220 switch (bytemode)
15221 {
15222 case b_mode:
52b15da3
JH
15223 USED_REX (0);
15224 if (rex)
7967e09e 15225 oappend (names8rex[modrm.reg + add]);
52b15da3 15226 else
7967e09e 15227 oappend (names8[modrm.reg + add]);
252b5132
RH
15228 break;
15229 case w_mode:
7967e09e 15230 oappend (names16[modrm.reg + add]);
252b5132
RH
15231 break;
15232 case d_mode:
1ba585e8
IT
15233 case db_mode:
15234 case dw_mode:
7967e09e 15235 oappend (names32[modrm.reg + add]);
52b15da3
JH
15236 break;
15237 case q_mode:
7967e09e 15238 oappend (names64[modrm.reg + add]);
252b5132 15239 break;
7e8b059b
L
15240 case bnd_mode:
15241 oappend (names_bnd[modrm.reg]);
15242 break;
252b5132 15243 case v_mode:
9306ca4a 15244 case dq_mode:
42903f7f
L
15245 case dqb_mode:
15246 case dqd_mode:
9306ca4a 15247 case dqw_mode:
1ba585e8 15248 case dqw_swap_mode:
161a04f6
L
15249 USED_REX (REX_W);
15250 if (rex & REX_W)
7967e09e 15251 oappend (names64[modrm.reg + add]);
252b5132 15252 else
f16cd0d5
L
15253 {
15254 if ((sizeflag & DFLAG) || bytemode != v_mode)
15255 oappend (names32[modrm.reg + add]);
15256 else
15257 oappend (names16[modrm.reg + add]);
15258 used_prefixes |= (prefixes & PREFIX_DATA);
15259 }
252b5132 15260 break;
90700ea2 15261 case m_mode:
cb712a9e 15262 if (address_mode == mode_64bit)
7967e09e 15263 oappend (names64[modrm.reg + add]);
90700ea2 15264 else
7967e09e 15265 oappend (names32[modrm.reg + add]);
90700ea2 15266 break;
1ba585e8 15267 case mask_bd_mode:
43234a1e
L
15268 case mask_mode:
15269 oappend (names_mask[modrm.reg + add]);
15270 break;
252b5132
RH
15271 default:
15272 oappend (INTERNAL_DISASSEMBLER_ERROR);
15273 break;
15274 }
15275}
15276
52b15da3 15277static bfd_vma
26ca5450 15278get64 (void)
52b15da3 15279{
5dd0794d 15280 bfd_vma x;
52b15da3 15281#ifdef BFD64
5dd0794d
AM
15282 unsigned int a;
15283 unsigned int b;
15284
52b15da3
JH
15285 FETCH_DATA (the_info, codep + 8);
15286 a = *codep++ & 0xff;
15287 a |= (*codep++ & 0xff) << 8;
15288 a |= (*codep++ & 0xff) << 16;
15289 a |= (*codep++ & 0xff) << 24;
5dd0794d 15290 b = *codep++ & 0xff;
52b15da3
JH
15291 b |= (*codep++ & 0xff) << 8;
15292 b |= (*codep++ & 0xff) << 16;
15293 b |= (*codep++ & 0xff) << 24;
15294 x = a + ((bfd_vma) b << 32);
15295#else
6608db57 15296 abort ();
5dd0794d 15297 x = 0;
52b15da3
JH
15298#endif
15299 return x;
15300}
15301
15302static bfd_signed_vma
26ca5450 15303get32 (void)
252b5132 15304{
52b15da3 15305 bfd_signed_vma x = 0;
252b5132
RH
15306
15307 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
15308 x = *codep++ & (bfd_signed_vma) 0xff;
15309 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
15310 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
15311 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
15312 return x;
15313}
15314
15315static bfd_signed_vma
26ca5450 15316get32s (void)
52b15da3
JH
15317{
15318 bfd_signed_vma x = 0;
15319
15320 FETCH_DATA (the_info, codep + 4);
15321 x = *codep++ & (bfd_signed_vma) 0xff;
15322 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
15323 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
15324 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
15325
15326 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
15327
252b5132
RH
15328 return x;
15329}
15330
15331static int
26ca5450 15332get16 (void)
252b5132
RH
15333{
15334 int x = 0;
15335
15336 FETCH_DATA (the_info, codep + 2);
15337 x = *codep++ & 0xff;
15338 x |= (*codep++ & 0xff) << 8;
15339 return x;
15340}
15341
15342static void
26ca5450 15343set_op (bfd_vma op, int riprel)
252b5132
RH
15344{
15345 op_index[op_ad] = op_ad;
cb712a9e 15346 if (address_mode == mode_64bit)
7081ff04
AJ
15347 {
15348 op_address[op_ad] = op;
15349 op_riprel[op_ad] = riprel;
15350 }
15351 else
15352 {
15353 /* Mask to get a 32-bit address. */
15354 op_address[op_ad] = op & 0xffffffff;
15355 op_riprel[op_ad] = riprel & 0xffffffff;
15356 }
252b5132
RH
15357}
15358
15359static void
26ca5450 15360OP_REG (int code, int sizeflag)
252b5132 15361{
2da11e11 15362 const char *s;
9b60702d 15363 int add;
de882298
RM
15364
15365 switch (code)
15366 {
15367 case es_reg: case ss_reg: case cs_reg:
15368 case ds_reg: case fs_reg: case gs_reg:
15369 oappend (names_seg[code - es_reg]);
15370 return;
15371 }
15372
161a04f6
L
15373 USED_REX (REX_B);
15374 if (rex & REX_B)
52b15da3 15375 add = 8;
9b60702d
L
15376 else
15377 add = 0;
52b15da3
JH
15378
15379 switch (code)
15380 {
52b15da3
JH
15381 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
15382 case sp_reg: case bp_reg: case si_reg: case di_reg:
15383 s = names16[code - ax_reg + add];
15384 break;
52b15da3
JH
15385 case al_reg: case ah_reg: case cl_reg: case ch_reg:
15386 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
15387 USED_REX (0);
15388 if (rex)
15389 s = names8rex[code - al_reg + add];
15390 else
15391 s = names8[code - al_reg];
15392 break;
6439fc28
AM
15393 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
15394 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
7bb15c6f 15395 if (address_mode == mode_64bit
6c067bbb 15396 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
15397 {
15398 s = names64[code - rAX_reg + add];
15399 break;
15400 }
15401 code += eAX_reg - rAX_reg;
6608db57 15402 /* Fall through. */
52b15da3
JH
15403 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
15404 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
15405 USED_REX (REX_W);
15406 if (rex & REX_W)
52b15da3 15407 s = names64[code - eAX_reg + add];
52b15da3 15408 else
f16cd0d5
L
15409 {
15410 if (sizeflag & DFLAG)
15411 s = names32[code - eAX_reg + add];
15412 else
15413 s = names16[code - eAX_reg + add];
15414 used_prefixes |= (prefixes & PREFIX_DATA);
15415 }
52b15da3 15416 break;
52b15da3
JH
15417 default:
15418 s = INTERNAL_DISASSEMBLER_ERROR;
15419 break;
15420 }
15421 oappend (s);
15422}
15423
15424static void
26ca5450 15425OP_IMREG (int code, int sizeflag)
52b15da3
JH
15426{
15427 const char *s;
252b5132
RH
15428
15429 switch (code)
15430 {
15431 case indir_dx_reg:
d708bcba 15432 if (intel_syntax)
52fd6d94 15433 s = "dx";
d708bcba 15434 else
db6eb5be 15435 s = "(%dx)";
252b5132
RH
15436 break;
15437 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
15438 case sp_reg: case bp_reg: case si_reg: case di_reg:
15439 s = names16[code - ax_reg];
15440 break;
15441 case es_reg: case ss_reg: case cs_reg:
15442 case ds_reg: case fs_reg: case gs_reg:
15443 s = names_seg[code - es_reg];
15444 break;
15445 case al_reg: case ah_reg: case cl_reg: case ch_reg:
15446 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
52b15da3
JH
15447 USED_REX (0);
15448 if (rex)
15449 s = names8rex[code - al_reg];
15450 else
15451 s = names8[code - al_reg];
252b5132
RH
15452 break;
15453 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
15454 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
15455 USED_REX (REX_W);
15456 if (rex & REX_W)
52b15da3 15457 s = names64[code - eAX_reg];
252b5132 15458 else
f16cd0d5
L
15459 {
15460 if (sizeflag & DFLAG)
15461 s = names32[code - eAX_reg];
15462 else
15463 s = names16[code - eAX_reg];
15464 used_prefixes |= (prefixes & PREFIX_DATA);
15465 }
252b5132 15466 break;
52fd6d94 15467 case z_mode_ax_reg:
161a04f6 15468 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
15469 s = *names32;
15470 else
15471 s = *names16;
161a04f6 15472 if (!(rex & REX_W))
52fd6d94
JB
15473 used_prefixes |= (prefixes & PREFIX_DATA);
15474 break;
252b5132
RH
15475 default:
15476 s = INTERNAL_DISASSEMBLER_ERROR;
15477 break;
15478 }
15479 oappend (s);
15480}
15481
15482static void
26ca5450 15483OP_I (int bytemode, int sizeflag)
252b5132 15484{
52b15da3
JH
15485 bfd_signed_vma op;
15486 bfd_signed_vma mask = -1;
252b5132
RH
15487
15488 switch (bytemode)
15489 {
15490 case b_mode:
15491 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
15492 op = *codep++;
15493 mask = 0xff;
15494 break;
15495 case q_mode:
cb712a9e 15496 if (address_mode == mode_64bit)
6439fc28
AM
15497 {
15498 op = get32s ();
15499 break;
15500 }
6608db57 15501 /* Fall through. */
252b5132 15502 case v_mode:
161a04f6
L
15503 USED_REX (REX_W);
15504 if (rex & REX_W)
52b15da3 15505 op = get32s ();
252b5132 15506 else
52b15da3 15507 {
f16cd0d5
L
15508 if (sizeflag & DFLAG)
15509 {
15510 op = get32 ();
15511 mask = 0xffffffff;
15512 }
15513 else
15514 {
15515 op = get16 ();
15516 mask = 0xfffff;
15517 }
15518 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 15519 }
252b5132
RH
15520 break;
15521 case w_mode:
52b15da3 15522 mask = 0xfffff;
252b5132
RH
15523 op = get16 ();
15524 break;
9306ca4a
JB
15525 case const_1_mode:
15526 if (intel_syntax)
6c067bbb 15527 oappend ("1");
9306ca4a 15528 return;
252b5132
RH
15529 default:
15530 oappend (INTERNAL_DISASSEMBLER_ERROR);
15531 return;
15532 }
15533
52b15da3
JH
15534 op &= mask;
15535 scratchbuf[0] = '$';
d708bcba 15536 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 15537 oappend_maybe_intel (scratchbuf);
52b15da3
JH
15538 scratchbuf[0] = '\0';
15539}
15540
15541static void
26ca5450 15542OP_I64 (int bytemode, int sizeflag)
52b15da3
JH
15543{
15544 bfd_signed_vma op;
15545 bfd_signed_vma mask = -1;
15546
cb712a9e 15547 if (address_mode != mode_64bit)
6439fc28
AM
15548 {
15549 OP_I (bytemode, sizeflag);
15550 return;
15551 }
15552
52b15da3
JH
15553 switch (bytemode)
15554 {
15555 case b_mode:
15556 FETCH_DATA (the_info, codep + 1);
15557 op = *codep++;
15558 mask = 0xff;
15559 break;
15560 case v_mode:
161a04f6
L
15561 USED_REX (REX_W);
15562 if (rex & REX_W)
52b15da3 15563 op = get64 ();
52b15da3
JH
15564 else
15565 {
f16cd0d5
L
15566 if (sizeflag & DFLAG)
15567 {
15568 op = get32 ();
15569 mask = 0xffffffff;
15570 }
15571 else
15572 {
15573 op = get16 ();
15574 mask = 0xfffff;
15575 }
15576 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 15577 }
52b15da3
JH
15578 break;
15579 case w_mode:
15580 mask = 0xfffff;
15581 op = get16 ();
15582 break;
15583 default:
15584 oappend (INTERNAL_DISASSEMBLER_ERROR);
15585 return;
15586 }
15587
15588 op &= mask;
15589 scratchbuf[0] = '$';
d708bcba 15590 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 15591 oappend_maybe_intel (scratchbuf);
252b5132
RH
15592 scratchbuf[0] = '\0';
15593}
15594
15595static void
26ca5450 15596OP_sI (int bytemode, int sizeflag)
252b5132 15597{
52b15da3 15598 bfd_signed_vma op;
252b5132
RH
15599
15600 switch (bytemode)
15601 {
15602 case b_mode:
e3949f17 15603 case b_T_mode:
252b5132
RH
15604 FETCH_DATA (the_info, codep + 1);
15605 op = *codep++;
15606 if ((op & 0x80) != 0)
15607 op -= 0x100;
e3949f17
L
15608 if (bytemode == b_T_mode)
15609 {
15610 if (address_mode != mode_64bit
7bb15c6f 15611 || !((sizeflag & DFLAG) || (rex & REX_W)))
e3949f17 15612 {
6c067bbb
RM
15613 /* The operand-size prefix is overridden by a REX prefix. */
15614 if ((sizeflag & DFLAG) || (rex & REX_W))
e3949f17
L
15615 op &= 0xffffffff;
15616 else
15617 op &= 0xffff;
15618 }
15619 }
15620 else
15621 {
15622 if (!(rex & REX_W))
15623 {
15624 if (sizeflag & DFLAG)
15625 op &= 0xffffffff;
15626 else
15627 op &= 0xffff;
15628 }
15629 }
252b5132
RH
15630 break;
15631 case v_mode:
7bb15c6f
RM
15632 /* The operand-size prefix is overridden by a REX prefix. */
15633 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 15634 op = get32s ();
252b5132 15635 else
d9e3625e 15636 op = get16 ();
252b5132
RH
15637 break;
15638 default:
15639 oappend (INTERNAL_DISASSEMBLER_ERROR);
15640 return;
15641 }
52b15da3
JH
15642
15643 scratchbuf[0] = '$';
15644 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 15645 oappend_maybe_intel (scratchbuf);
252b5132
RH
15646}
15647
15648static void
26ca5450 15649OP_J (int bytemode, int sizeflag)
252b5132 15650{
52b15da3 15651 bfd_vma disp;
7081ff04 15652 bfd_vma mask = -1;
65ca155d 15653 bfd_vma segment = 0;
252b5132
RH
15654
15655 switch (bytemode)
15656 {
15657 case b_mode:
15658 FETCH_DATA (the_info, codep + 1);
15659 disp = *codep++;
15660 if ((disp & 0x80) != 0)
15661 disp -= 0x100;
15662 break;
15663 case v_mode:
f16cd0d5 15664 USED_REX (REX_W);
161a04f6 15665 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 15666 disp = get32s ();
252b5132
RH
15667 else
15668 {
15669 disp = get16 ();
206717e8
L
15670 if ((disp & 0x8000) != 0)
15671 disp -= 0x10000;
65ca155d
L
15672 /* In 16bit mode, address is wrapped around at 64k within
15673 the same segment. Otherwise, a data16 prefix on a jump
15674 instruction means that the pc is masked to 16 bits after
15675 the displacement is added! */
15676 mask = 0xffff;
15677 if ((prefixes & PREFIX_DATA) == 0)
15678 segment = ((start_pc + codep - start_codep)
15679 & ~((bfd_vma) 0xffff));
252b5132 15680 }
f16cd0d5
L
15681 if (!(rex & REX_W))
15682 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
15683 break;
15684 default:
15685 oappend (INTERNAL_DISASSEMBLER_ERROR);
15686 return;
15687 }
42d5f9c6 15688 disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
52b15da3
JH
15689 set_op (disp, 0);
15690 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
15691 oappend (scratchbuf);
15692}
15693
252b5132 15694static void
ed7841b3 15695OP_SEG (int bytemode, int sizeflag)
252b5132 15696{
ed7841b3 15697 if (bytemode == w_mode)
7967e09e 15698 oappend (names_seg[modrm.reg]);
ed7841b3 15699 else
7967e09e 15700 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
15701}
15702
15703static void
26ca5450 15704OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
15705{
15706 int seg, offset;
15707
c608c12e 15708 if (sizeflag & DFLAG)
252b5132 15709 {
c608c12e
AM
15710 offset = get32 ();
15711 seg = get16 ();
252b5132 15712 }
c608c12e
AM
15713 else
15714 {
15715 offset = get16 ();
15716 seg = get16 ();
15717 }
7d421014 15718 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 15719 if (intel_syntax)
3f31e633 15720 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
15721 else
15722 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 15723 oappend (scratchbuf);
252b5132
RH
15724}
15725
252b5132 15726static void
3f31e633 15727OP_OFF (int bytemode, int sizeflag)
252b5132 15728{
52b15da3 15729 bfd_vma off;
252b5132 15730
3f31e633
JB
15731 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
15732 intel_operand_size (bytemode, sizeflag);
252b5132
RH
15733 append_seg ();
15734
cb712a9e 15735 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
15736 off = get32 ();
15737 else
15738 off = get16 ();
15739
15740 if (intel_syntax)
15741 {
285ca992 15742 if (!active_seg_prefix)
252b5132 15743 {
d708bcba 15744 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
15745 oappend (":");
15746 }
15747 }
52b15da3
JH
15748 print_operand_value (scratchbuf, 1, off);
15749 oappend (scratchbuf);
15750}
6439fc28 15751
52b15da3 15752static void
3f31e633 15753OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
15754{
15755 bfd_vma off;
15756
539e75ad
L
15757 if (address_mode != mode_64bit
15758 || (prefixes & PREFIX_ADDR))
6439fc28
AM
15759 {
15760 OP_OFF (bytemode, sizeflag);
15761 return;
15762 }
15763
3f31e633
JB
15764 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
15765 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
15766 append_seg ();
15767
6608db57 15768 off = get64 ();
52b15da3
JH
15769
15770 if (intel_syntax)
15771 {
285ca992 15772 if (!active_seg_prefix)
52b15da3 15773 {
d708bcba 15774 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
15775 oappend (":");
15776 }
15777 }
15778 print_operand_value (scratchbuf, 1, off);
252b5132
RH
15779 oappend (scratchbuf);
15780}
15781
15782static void
26ca5450 15783ptr_reg (int code, int sizeflag)
252b5132 15784{
2da11e11 15785 const char *s;
d708bcba 15786
1d9f512f 15787 *obufp++ = open_char;
20f0a1fc 15788 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 15789 if (address_mode == mode_64bit)
c1a64871
JH
15790 {
15791 if (!(sizeflag & AFLAG))
db6eb5be 15792 s = names32[code - eAX_reg];
c1a64871 15793 else
db6eb5be 15794 s = names64[code - eAX_reg];
c1a64871 15795 }
52b15da3 15796 else if (sizeflag & AFLAG)
252b5132
RH
15797 s = names32[code - eAX_reg];
15798 else
15799 s = names16[code - eAX_reg];
15800 oappend (s);
1d9f512f
AM
15801 *obufp++ = close_char;
15802 *obufp = 0;
252b5132
RH
15803}
15804
15805static void
26ca5450 15806OP_ESreg (int code, int sizeflag)
252b5132 15807{
9306ca4a 15808 if (intel_syntax)
52fd6d94
JB
15809 {
15810 switch (codep[-1])
15811 {
15812 case 0x6d: /* insw/insl */
15813 intel_operand_size (z_mode, sizeflag);
15814 break;
15815 case 0xa5: /* movsw/movsl/movsq */
15816 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15817 case 0xab: /* stosw/stosl */
15818 case 0xaf: /* scasw/scasl */
15819 intel_operand_size (v_mode, sizeflag);
15820 break;
15821 default:
15822 intel_operand_size (b_mode, sizeflag);
15823 }
15824 }
9ce09ba2 15825 oappend_maybe_intel ("%es:");
252b5132
RH
15826 ptr_reg (code, sizeflag);
15827}
15828
15829static void
26ca5450 15830OP_DSreg (int code, int sizeflag)
252b5132 15831{
9306ca4a 15832 if (intel_syntax)
52fd6d94
JB
15833 {
15834 switch (codep[-1])
15835 {
15836 case 0x6f: /* outsw/outsl */
15837 intel_operand_size (z_mode, sizeflag);
15838 break;
15839 case 0xa5: /* movsw/movsl/movsq */
15840 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15841 case 0xad: /* lodsw/lodsl/lodsq */
15842 intel_operand_size (v_mode, sizeflag);
15843 break;
15844 default:
15845 intel_operand_size (b_mode, sizeflag);
15846 }
15847 }
285ca992
L
15848 /* Set active_seg_prefix to PREFIX_DS if it is unset so that the
15849 default segment register DS is printed. */
15850 if (!active_seg_prefix)
15851 active_seg_prefix = PREFIX_DS;
6608db57 15852 append_seg ();
252b5132
RH
15853 ptr_reg (code, sizeflag);
15854}
15855
252b5132 15856static void
26ca5450 15857OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15858{
9b60702d 15859 int add;
161a04f6 15860 if (rex & REX_R)
c4a530c5 15861 {
161a04f6 15862 USED_REX (REX_R);
c4a530c5
JB
15863 add = 8;
15864 }
cb712a9e 15865 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 15866 {
f16cd0d5 15867 all_prefixes[last_lock_prefix] = 0;
c4a530c5
JB
15868 used_prefixes |= PREFIX_LOCK;
15869 add = 8;
15870 }
9b60702d
L
15871 else
15872 add = 0;
7967e09e 15873 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
9ce09ba2 15874 oappend_maybe_intel (scratchbuf);
252b5132
RH
15875}
15876
252b5132 15877static void
26ca5450 15878OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15879{
9b60702d 15880 int add;
161a04f6
L
15881 USED_REX (REX_R);
15882 if (rex & REX_R)
52b15da3 15883 add = 8;
9b60702d
L
15884 else
15885 add = 0;
d708bcba 15886 if (intel_syntax)
7967e09e 15887 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 15888 else
7967e09e 15889 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
15890 oappend (scratchbuf);
15891}
15892
252b5132 15893static void
26ca5450 15894OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15895{
7967e09e 15896 sprintf (scratchbuf, "%%tr%d", modrm.reg);
9ce09ba2 15897 oappend_maybe_intel (scratchbuf);
252b5132
RH
15898}
15899
15900static void
6f74c397 15901OP_R (int bytemode, int sizeflag)
252b5132 15902{
68f34464
L
15903 /* Skip mod/rm byte. */
15904 MODRM_CHECK;
15905 codep++;
15906 OP_E_register (bytemode, sizeflag);
252b5132
RH
15907}
15908
15909static void
26ca5450 15910OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15911{
b9733481
L
15912 int reg = modrm.reg;
15913 const char **names;
15914
041bd2e0
JH
15915 used_prefixes |= (prefixes & PREFIX_DATA);
15916 if (prefixes & PREFIX_DATA)
20f0a1fc 15917 {
b9733481 15918 names = names_xmm;
161a04f6
L
15919 USED_REX (REX_R);
15920 if (rex & REX_R)
b9733481 15921 reg += 8;
20f0a1fc 15922 }
041bd2e0 15923 else
b9733481
L
15924 names = names_mm;
15925 oappend (names[reg]);
252b5132
RH
15926}
15927
c608c12e 15928static void
c0f3af97 15929OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 15930{
b9733481
L
15931 int reg = modrm.reg;
15932 const char **names;
15933
161a04f6
L
15934 USED_REX (REX_R);
15935 if (rex & REX_R)
b9733481 15936 reg += 8;
43234a1e
L
15937 if (vex.evex)
15938 {
15939 if (!vex.r)
15940 reg += 16;
15941 }
15942
539f890d
L
15943 if (need_vex
15944 && bytemode != xmm_mode
43234a1e
L
15945 && bytemode != xmmq_mode
15946 && bytemode != evex_half_bcst_xmmq_mode
15947 && bytemode != ymm_mode
539f890d 15948 && bytemode != scalar_mode)
c0f3af97
L
15949 {
15950 switch (vex.length)
15951 {
15952 case 128:
b9733481 15953 names = names_xmm;
c0f3af97
L
15954 break;
15955 case 256:
5fc35d96
IT
15956 if (vex.w
15957 || (bytemode != vex_vsib_q_w_dq_mode
15958 && bytemode != vex_vsib_q_w_d_mode))
6c30d220
L
15959 names = names_ymm;
15960 else
15961 names = names_xmm;
c0f3af97 15962 break;
43234a1e
L
15963 case 512:
15964 names = names_zmm;
15965 break;
c0f3af97
L
15966 default:
15967 abort ();
15968 }
15969 }
43234a1e
L
15970 else if (bytemode == xmmq_mode
15971 || bytemode == evex_half_bcst_xmmq_mode)
15972 {
15973 switch (vex.length)
15974 {
15975 case 128:
15976 case 256:
15977 names = names_xmm;
15978 break;
15979 case 512:
15980 names = names_ymm;
15981 break;
15982 default:
15983 abort ();
15984 }
15985 }
15986 else if (bytemode == ymm_mode)
15987 names = names_ymm;
c0f3af97 15988 else
b9733481
L
15989 names = names_xmm;
15990 oappend (names[reg]);
c608c12e
AM
15991}
15992
252b5132 15993static void
26ca5450 15994OP_EM (int bytemode, int sizeflag)
252b5132 15995{
b9733481
L
15996 int reg;
15997 const char **names;
15998
7967e09e 15999 if (modrm.mod != 3)
252b5132 16000 {
b6169b20
L
16001 if (intel_syntax
16002 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
16003 {
16004 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16005 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 16006 }
252b5132
RH
16007 OP_E (bytemode, sizeflag);
16008 return;
16009 }
16010
b6169b20
L
16011 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
16012 swap_operand ();
16013
6608db57 16014 /* Skip mod/rm byte. */
4bba6815 16015 MODRM_CHECK;
252b5132 16016 codep++;
041bd2e0 16017 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 16018 reg = modrm.rm;
041bd2e0 16019 if (prefixes & PREFIX_DATA)
20f0a1fc 16020 {
b9733481 16021 names = names_xmm;
161a04f6
L
16022 USED_REX (REX_B);
16023 if (rex & REX_B)
b9733481 16024 reg += 8;
20f0a1fc 16025 }
041bd2e0 16026 else
b9733481
L
16027 names = names_mm;
16028 oappend (names[reg]);
252b5132
RH
16029}
16030
246c51aa
L
16031/* cvt* are the only instructions in sse2 which have
16032 both SSE and MMX operands and also have 0x66 prefix
16033 in their opcode. 0x66 was originally used to differentiate
16034 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
16035 cvt* separately using OP_EMC and OP_MXC */
16036static void
16037OP_EMC (int bytemode, int sizeflag)
16038{
7967e09e 16039 if (modrm.mod != 3)
4d9567e0
MM
16040 {
16041 if (intel_syntax && bytemode == v_mode)
16042 {
16043 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16044 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 16045 }
4d9567e0
MM
16046 OP_E (bytemode, sizeflag);
16047 return;
16048 }
246c51aa 16049
4d9567e0
MM
16050 /* Skip mod/rm byte. */
16051 MODRM_CHECK;
16052 codep++;
16053 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 16054 oappend (names_mm[modrm.rm]);
4d9567e0
MM
16055}
16056
16057static void
16058OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16059{
16060 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 16061 oappend (names_mm[modrm.reg]);
4d9567e0
MM
16062}
16063
c608c12e 16064static void
26ca5450 16065OP_EX (int bytemode, int sizeflag)
c608c12e 16066{
b9733481
L
16067 int reg;
16068 const char **names;
d6f574e0
L
16069
16070 /* Skip mod/rm byte. */
16071 MODRM_CHECK;
16072 codep++;
16073
7967e09e 16074 if (modrm.mod != 3)
c608c12e 16075 {
c1e679ec 16076 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
16077 return;
16078 }
d6f574e0 16079
b9733481 16080 reg = modrm.rm;
161a04f6
L
16081 USED_REX (REX_B);
16082 if (rex & REX_B)
b9733481 16083 reg += 8;
43234a1e
L
16084 if (vex.evex)
16085 {
16086 USED_REX (REX_X);
16087 if ((rex & REX_X))
16088 reg += 16;
16089 }
c608c12e 16090
b6169b20 16091 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
16092 && (bytemode == x_swap_mode
16093 || bytemode == d_swap_mode
1ba585e8 16094 || bytemode == dqw_swap_mode
7bb15c6f 16095 || bytemode == d_scalar_swap_mode
539f890d
L
16096 || bytemode == q_swap_mode
16097 || bytemode == q_scalar_swap_mode))
b6169b20
L
16098 swap_operand ();
16099
c0f3af97
L
16100 if (need_vex
16101 && bytemode != xmm_mode
6c30d220
L
16102 && bytemode != xmmdw_mode
16103 && bytemode != xmmqd_mode
16104 && bytemode != xmm_mb_mode
16105 && bytemode != xmm_mw_mode
16106 && bytemode != xmm_md_mode
16107 && bytemode != xmm_mq_mode
43234a1e 16108 && bytemode != xmm_mdq_mode
539f890d 16109 && bytemode != xmmq_mode
43234a1e
L
16110 && bytemode != evex_half_bcst_xmmq_mode
16111 && bytemode != ymm_mode
539f890d 16112 && bytemode != d_scalar_mode
7bb15c6f 16113 && bytemode != d_scalar_swap_mode
539f890d 16114 && bytemode != q_scalar_mode
1c480963
L
16115 && bytemode != q_scalar_swap_mode
16116 && bytemode != vex_scalar_w_dq_mode)
c0f3af97
L
16117 {
16118 switch (vex.length)
16119 {
16120 case 128:
b9733481 16121 names = names_xmm;
c0f3af97
L
16122 break;
16123 case 256:
b9733481 16124 names = names_ymm;
c0f3af97 16125 break;
43234a1e
L
16126 case 512:
16127 names = names_zmm;
16128 break;
c0f3af97
L
16129 default:
16130 abort ();
16131 }
16132 }
43234a1e
L
16133 else if (bytemode == xmmq_mode
16134 || bytemode == evex_half_bcst_xmmq_mode)
16135 {
16136 switch (vex.length)
16137 {
16138 case 128:
16139 case 256:
16140 names = names_xmm;
16141 break;
16142 case 512:
16143 names = names_ymm;
16144 break;
16145 default:
16146 abort ();
16147 }
16148 }
16149 else if (bytemode == ymm_mode)
16150 names = names_ymm;
c0f3af97 16151 else
b9733481
L
16152 names = names_xmm;
16153 oappend (names[reg]);
c608c12e
AM
16154}
16155
252b5132 16156static void
26ca5450 16157OP_MS (int bytemode, int sizeflag)
252b5132 16158{
7967e09e 16159 if (modrm.mod == 3)
2da11e11
AM
16160 OP_EM (bytemode, sizeflag);
16161 else
6608db57 16162 BadOp ();
252b5132
RH
16163}
16164
992aaec9 16165static void
26ca5450 16166OP_XS (int bytemode, int sizeflag)
992aaec9 16167{
7967e09e 16168 if (modrm.mod == 3)
992aaec9
AM
16169 OP_EX (bytemode, sizeflag);
16170 else
6608db57 16171 BadOp ();
992aaec9
AM
16172}
16173
cc0ec051
AM
16174static void
16175OP_M (int bytemode, int sizeflag)
16176{
7967e09e 16177 if (modrm.mod == 3)
75413a22
L
16178 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
16179 BadOp ();
cc0ec051
AM
16180 else
16181 OP_E (bytemode, sizeflag);
16182}
16183
16184static void
16185OP_0f07 (int bytemode, int sizeflag)
16186{
7967e09e 16187 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
16188 BadOp ();
16189 else
16190 OP_E (bytemode, sizeflag);
16191}
16192
46e883c5 16193/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 16194 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 16195
cc0ec051 16196static void
46e883c5 16197NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 16198{
8b38ad71
L
16199 if ((prefixes & PREFIX_DATA) != 0
16200 || (rex != 0
16201 && rex != 0x48
16202 && address_mode == mode_64bit))
46e883c5
L
16203 OP_REG (bytemode, sizeflag);
16204 else
16205 strcpy (obuf, "nop");
16206}
16207
16208static void
16209NOP_Fixup2 (int bytemode, int sizeflag)
16210{
8b38ad71
L
16211 if ((prefixes & PREFIX_DATA) != 0
16212 || (rex != 0
16213 && rex != 0x48
16214 && address_mode == mode_64bit))
46e883c5 16215 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
16216}
16217
84037f8c 16218static const char *const Suffix3DNow[] = {
252b5132
RH
16219/* 00 */ NULL, NULL, NULL, NULL,
16220/* 04 */ NULL, NULL, NULL, NULL,
16221/* 08 */ NULL, NULL, NULL, NULL,
9e525108 16222/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
16223/* 10 */ NULL, NULL, NULL, NULL,
16224/* 14 */ NULL, NULL, NULL, NULL,
16225/* 18 */ NULL, NULL, NULL, NULL,
9e525108 16226/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
16227/* 20 */ NULL, NULL, NULL, NULL,
16228/* 24 */ NULL, NULL, NULL, NULL,
16229/* 28 */ NULL, NULL, NULL, NULL,
16230/* 2C */ NULL, NULL, NULL, NULL,
16231/* 30 */ NULL, NULL, NULL, NULL,
16232/* 34 */ NULL, NULL, NULL, NULL,
16233/* 38 */ NULL, NULL, NULL, NULL,
16234/* 3C */ NULL, NULL, NULL, NULL,
16235/* 40 */ NULL, NULL, NULL, NULL,
16236/* 44 */ NULL, NULL, NULL, NULL,
16237/* 48 */ NULL, NULL, NULL, NULL,
16238/* 4C */ NULL, NULL, NULL, NULL,
16239/* 50 */ NULL, NULL, NULL, NULL,
16240/* 54 */ NULL, NULL, NULL, NULL,
16241/* 58 */ NULL, NULL, NULL, NULL,
16242/* 5C */ NULL, NULL, NULL, NULL,
16243/* 60 */ NULL, NULL, NULL, NULL,
16244/* 64 */ NULL, NULL, NULL, NULL,
16245/* 68 */ NULL, NULL, NULL, NULL,
16246/* 6C */ NULL, NULL, NULL, NULL,
16247/* 70 */ NULL, NULL, NULL, NULL,
16248/* 74 */ NULL, NULL, NULL, NULL,
16249/* 78 */ NULL, NULL, NULL, NULL,
16250/* 7C */ NULL, NULL, NULL, NULL,
16251/* 80 */ NULL, NULL, NULL, NULL,
16252/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
16253/* 88 */ NULL, NULL, "pfnacc", NULL,
16254/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
16255/* 90 */ "pfcmpge", NULL, NULL, NULL,
16256/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
16257/* 98 */ NULL, NULL, "pfsub", NULL,
16258/* 9C */ NULL, NULL, "pfadd", NULL,
16259/* A0 */ "pfcmpgt", NULL, NULL, NULL,
16260/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
16261/* A8 */ NULL, NULL, "pfsubr", NULL,
16262/* AC */ NULL, NULL, "pfacc", NULL,
16263/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 16264/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 16265/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
16266/* BC */ NULL, NULL, NULL, "pavgusb",
16267/* C0 */ NULL, NULL, NULL, NULL,
16268/* C4 */ NULL, NULL, NULL, NULL,
16269/* C8 */ NULL, NULL, NULL, NULL,
16270/* CC */ NULL, NULL, NULL, NULL,
16271/* D0 */ NULL, NULL, NULL, NULL,
16272/* D4 */ NULL, NULL, NULL, NULL,
16273/* D8 */ NULL, NULL, NULL, NULL,
16274/* DC */ NULL, NULL, NULL, NULL,
16275/* E0 */ NULL, NULL, NULL, NULL,
16276/* E4 */ NULL, NULL, NULL, NULL,
16277/* E8 */ NULL, NULL, NULL, NULL,
16278/* EC */ NULL, NULL, NULL, NULL,
16279/* F0 */ NULL, NULL, NULL, NULL,
16280/* F4 */ NULL, NULL, NULL, NULL,
16281/* F8 */ NULL, NULL, NULL, NULL,
16282/* FC */ NULL, NULL, NULL, NULL,
16283};
16284
16285static void
26ca5450 16286OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
16287{
16288 const char *mnemonic;
16289
16290 FETCH_DATA (the_info, codep + 1);
16291 /* AMD 3DNow! instructions are specified by an opcode suffix in the
16292 place where an 8-bit immediate would normally go. ie. the last
16293 byte of the instruction. */
ea397f5b 16294 obufp = mnemonicendp;
c608c12e 16295 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 16296 if (mnemonic)
2da11e11 16297 oappend (mnemonic);
252b5132
RH
16298 else
16299 {
16300 /* Since a variable sized modrm/sib chunk is between the start
16301 of the opcode (0x0f0f) and the opcode suffix, we need to do
16302 all the modrm processing first, and don't know until now that
16303 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
16304 op_out[0][0] = '\0';
16305 op_out[1][0] = '\0';
6608db57 16306 BadOp ();
252b5132 16307 }
ea397f5b 16308 mnemonicendp = obufp;
252b5132 16309}
c608c12e 16310
ea397f5b
L
16311static struct op simd_cmp_op[] =
16312{
16313 { STRING_COMMA_LEN ("eq") },
16314 { STRING_COMMA_LEN ("lt") },
16315 { STRING_COMMA_LEN ("le") },
16316 { STRING_COMMA_LEN ("unord") },
16317 { STRING_COMMA_LEN ("neq") },
16318 { STRING_COMMA_LEN ("nlt") },
16319 { STRING_COMMA_LEN ("nle") },
16320 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
16321};
16322
16323static void
ad19981d 16324CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
16325{
16326 unsigned int cmp_type;
16327
16328 FETCH_DATA (the_info, codep + 1);
16329 cmp_type = *codep++ & 0xff;
c0f3af97 16330 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 16331 {
ad19981d 16332 char suffix [3];
ea397f5b 16333 char *p = mnemonicendp - 2;
ad19981d
L
16334 suffix[0] = p[0];
16335 suffix[1] = p[1];
16336 suffix[2] = '\0';
ea397f5b
L
16337 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
16338 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
16339 }
16340 else
16341 {
ad19981d
L
16342 /* We have a reserved extension byte. Output it directly. */
16343 scratchbuf[0] = '$';
16344 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16345 oappend_maybe_intel (scratchbuf);
ad19981d 16346 scratchbuf[0] = '\0';
c608c12e
AM
16347 }
16348}
16349
ca164297 16350static void
b844680a
L
16351OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
16352 int sizeflag ATTRIBUTE_UNUSED)
16353{
16354 /* mwait %eax,%ecx */
16355 if (!intel_syntax)
16356 {
16357 const char **names = (address_mode == mode_64bit
16358 ? names64 : names32);
16359 strcpy (op_out[0], names[0]);
16360 strcpy (op_out[1], names[1]);
16361 two_source_ops = 1;
16362 }
16363 /* Skip mod/rm byte. */
16364 MODRM_CHECK;
16365 codep++;
16366}
16367
16368static void
16369OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
16370 int sizeflag ATTRIBUTE_UNUSED)
ca164297 16371{
b844680a
L
16372 /* monitor %eax,%ecx,%edx" */
16373 if (!intel_syntax)
ca164297 16374 {
b844680a 16375 const char **op1_names;
cb712a9e
L
16376 const char **names = (address_mode == mode_64bit
16377 ? names64 : names32);
1d9f512f 16378
b844680a
L
16379 if (!(prefixes & PREFIX_ADDR))
16380 op1_names = (address_mode == mode_16bit
16381 ? names16 : names);
ca164297
L
16382 else
16383 {
b844680a 16384 /* Remove "addr16/addr32". */
f16cd0d5 16385 all_prefixes[last_addr_prefix] = 0;
b844680a
L
16386 op1_names = (address_mode != mode_32bit
16387 ? names32 : names16);
16388 used_prefixes |= PREFIX_ADDR;
ca164297 16389 }
b844680a
L
16390 strcpy (op_out[0], op1_names[0]);
16391 strcpy (op_out[1], names[1]);
16392 strcpy (op_out[2], names[2]);
16393 two_source_ops = 1;
ca164297 16394 }
b844680a
L
16395 /* Skip mod/rm byte. */
16396 MODRM_CHECK;
16397 codep++;
30123838
JB
16398}
16399
6608db57
KH
16400static void
16401BadOp (void)
2da11e11 16402{
6608db57
KH
16403 /* Throw away prefixes and 1st. opcode byte. */
16404 codep = insn_codep + 1;
2da11e11
AM
16405 oappend ("(bad)");
16406}
4cc91dba 16407
35c52694
L
16408static void
16409REP_Fixup (int bytemode, int sizeflag)
16410{
16411 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
16412 lods and stos. */
35c52694 16413 if (prefixes & PREFIX_REPZ)
f16cd0d5 16414 all_prefixes[last_repz_prefix] = REP_PREFIX;
35c52694
L
16415
16416 switch (bytemode)
16417 {
16418 case al_reg:
16419 case eAX_reg:
16420 case indir_dx_reg:
16421 OP_IMREG (bytemode, sizeflag);
16422 break;
16423 case eDI_reg:
16424 OP_ESreg (bytemode, sizeflag);
16425 break;
16426 case eSI_reg:
16427 OP_DSreg (bytemode, sizeflag);
16428 break;
16429 default:
16430 abort ();
16431 break;
16432 }
16433}
f5804c90 16434
7e8b059b
L
16435/* For BND-prefixed instructions 0xF2 prefix should be displayed as
16436 "bnd". */
16437
16438static void
16439BND_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16440{
16441 if (prefixes & PREFIX_REPNZ)
16442 all_prefixes[last_repnz_prefix] = BND_PREFIX;
16443}
16444
42164a71
L
16445/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
16446 "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
16447 */
16448
16449static void
16450HLE_Fixup1 (int bytemode, int sizeflag)
16451{
16452 if (modrm.mod != 3
16453 && (prefixes & PREFIX_LOCK) != 0)
16454 {
16455 if (prefixes & PREFIX_REPZ)
16456 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16457 if (prefixes & PREFIX_REPNZ)
16458 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
16459 }
16460
16461 OP_E (bytemode, sizeflag);
16462}
16463
16464/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
16465 "xacquire"/"xrelease" for memory operand. No check for LOCK prefix.
16466 */
16467
16468static void
16469HLE_Fixup2 (int bytemode, int sizeflag)
16470{
16471 if (modrm.mod != 3)
16472 {
16473 if (prefixes & PREFIX_REPZ)
16474 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16475 if (prefixes & PREFIX_REPNZ)
16476 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
16477 }
16478
16479 OP_E (bytemode, sizeflag);
16480}
16481
16482/* Similar to OP_E. But the 0xf3 prefixes should be displayed as
16483 "xrelease" for memory operand. No check for LOCK prefix. */
16484
16485static void
16486HLE_Fixup3 (int bytemode, int sizeflag)
16487{
16488 if (modrm.mod != 3
16489 && last_repz_prefix > last_repnz_prefix
16490 && (prefixes & PREFIX_REPZ) != 0)
16491 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16492
16493 OP_E (bytemode, sizeflag);
16494}
16495
f5804c90
L
16496static void
16497CMPXCHG8B_Fixup (int bytemode, int sizeflag)
16498{
161a04f6
L
16499 USED_REX (REX_W);
16500 if (rex & REX_W)
f5804c90
L
16501 {
16502 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
16503 char *p = mnemonicendp - 2;
16504 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 16505 bytemode = o_mode;
f5804c90 16506 }
42164a71
L
16507 else if ((prefixes & PREFIX_LOCK) != 0)
16508 {
16509 if (prefixes & PREFIX_REPZ)
16510 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16511 if (prefixes & PREFIX_REPNZ)
16512 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
16513 }
16514
f5804c90
L
16515 OP_M (bytemode, sizeflag);
16516}
42903f7f
L
16517
16518static void
16519XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
16520{
b9733481
L
16521 const char **names;
16522
c0f3af97
L
16523 if (need_vex)
16524 {
16525 switch (vex.length)
16526 {
16527 case 128:
b9733481 16528 names = names_xmm;
c0f3af97
L
16529 break;
16530 case 256:
b9733481 16531 names = names_ymm;
c0f3af97
L
16532 break;
16533 default:
16534 abort ();
16535 }
16536 }
16537 else
b9733481
L
16538 names = names_xmm;
16539 oappend (names[reg]);
42903f7f 16540}
381d071f
L
16541
16542static void
16543CRC32_Fixup (int bytemode, int sizeflag)
16544{
16545 /* Add proper suffix to "crc32". */
ea397f5b 16546 char *p = mnemonicendp;
381d071f
L
16547
16548 switch (bytemode)
16549 {
16550 case b_mode:
20592a94 16551 if (intel_syntax)
ea397f5b 16552 goto skip;
20592a94 16553
381d071f
L
16554 *p++ = 'b';
16555 break;
16556 case v_mode:
20592a94 16557 if (intel_syntax)
ea397f5b 16558 goto skip;
20592a94 16559
381d071f
L
16560 USED_REX (REX_W);
16561 if (rex & REX_W)
16562 *p++ = 'q';
7bb15c6f 16563 else
f16cd0d5
L
16564 {
16565 if (sizeflag & DFLAG)
16566 *p++ = 'l';
16567 else
16568 *p++ = 'w';
16569 used_prefixes |= (prefixes & PREFIX_DATA);
16570 }
381d071f
L
16571 break;
16572 default:
16573 oappend (INTERNAL_DISASSEMBLER_ERROR);
16574 break;
16575 }
ea397f5b 16576 mnemonicendp = p;
381d071f
L
16577 *p = '\0';
16578
ea397f5b 16579skip:
381d071f
L
16580 if (modrm.mod == 3)
16581 {
16582 int add;
16583
16584 /* Skip mod/rm byte. */
16585 MODRM_CHECK;
16586 codep++;
16587
16588 USED_REX (REX_B);
16589 add = (rex & REX_B) ? 8 : 0;
16590 if (bytemode == b_mode)
16591 {
16592 USED_REX (0);
16593 if (rex)
16594 oappend (names8rex[modrm.rm + add]);
16595 else
16596 oappend (names8[modrm.rm + add]);
16597 }
16598 else
16599 {
16600 USED_REX (REX_W);
16601 if (rex & REX_W)
16602 oappend (names64[modrm.rm + add]);
16603 else if ((prefixes & PREFIX_DATA))
16604 oappend (names16[modrm.rm + add]);
16605 else
16606 oappend (names32[modrm.rm + add]);
16607 }
16608 }
16609 else
9344ff29 16610 OP_E (bytemode, sizeflag);
381d071f 16611}
85f10a01 16612
eacc9c89
L
16613static void
16614FXSAVE_Fixup (int bytemode, int sizeflag)
16615{
16616 /* Add proper suffix to "fxsave" and "fxrstor". */
16617 USED_REX (REX_W);
16618 if (rex & REX_W)
16619 {
16620 char *p = mnemonicendp;
16621 *p++ = '6';
16622 *p++ = '4';
16623 *p = '\0';
16624 mnemonicendp = p;
16625 }
16626 OP_M (bytemode, sizeflag);
16627}
16628
c0f3af97
L
16629/* Display the destination register operand for instructions with
16630 VEX. */
16631
16632static void
16633OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16634{
539f890d 16635 int reg;
b9733481
L
16636 const char **names;
16637
c0f3af97
L
16638 if (!need_vex)
16639 abort ();
16640
16641 if (!need_vex_reg)
16642 return;
16643
539f890d 16644 reg = vex.register_specifier;
43234a1e
L
16645 if (vex.evex)
16646 {
16647 if (!vex.v)
16648 reg += 16;
16649 }
16650
539f890d
L
16651 if (bytemode == vex_scalar_mode)
16652 {
16653 oappend (names_xmm[reg]);
16654 return;
16655 }
16656
c0f3af97
L
16657 switch (vex.length)
16658 {
16659 case 128:
16660 switch (bytemode)
16661 {
16662 case vex_mode:
16663 case vex128_mode:
6c30d220 16664 case vex_vsib_q_w_dq_mode:
5fc35d96 16665 case vex_vsib_q_w_d_mode:
cb21baef
L
16666 names = names_xmm;
16667 break;
16668 case dq_mode:
16669 if (vex.w)
16670 names = names64;
16671 else
16672 names = names32;
c0f3af97 16673 break;
1ba585e8 16674 case mask_bd_mode:
43234a1e
L
16675 case mask_mode:
16676 names = names_mask;
16677 break;
c0f3af97
L
16678 default:
16679 abort ();
16680 return;
16681 }
c0f3af97
L
16682 break;
16683 case 256:
16684 switch (bytemode)
16685 {
16686 case vex_mode:
16687 case vex256_mode:
6c30d220
L
16688 names = names_ymm;
16689 break;
16690 case vex_vsib_q_w_dq_mode:
5fc35d96 16691 case vex_vsib_q_w_d_mode:
6c30d220 16692 names = vex.w ? names_ymm : names_xmm;
c0f3af97 16693 break;
1ba585e8 16694 case mask_bd_mode:
43234a1e
L
16695 case mask_mode:
16696 names = names_mask;
16697 break;
c0f3af97
L
16698 default:
16699 abort ();
16700 return;
16701 }
c0f3af97 16702 break;
43234a1e
L
16703 case 512:
16704 names = names_zmm;
16705 break;
c0f3af97
L
16706 default:
16707 abort ();
16708 break;
16709 }
539f890d 16710 oappend (names[reg]);
c0f3af97
L
16711}
16712
922d8de8
DR
16713/* Get the VEX immediate byte without moving codep. */
16714
16715static unsigned char
ccc5981b 16716get_vex_imm8 (int sizeflag, int opnum)
922d8de8
DR
16717{
16718 int bytes_before_imm = 0;
16719
922d8de8
DR
16720 if (modrm.mod != 3)
16721 {
16722 /* There are SIB/displacement bytes. */
16723 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
6c067bbb 16724 {
922d8de8 16725 /* 32/64 bit address mode */
6c067bbb 16726 int base = modrm.rm;
922d8de8
DR
16727
16728 /* Check SIB byte. */
6c067bbb
RM
16729 if (base == 4)
16730 {
16731 FETCH_DATA (the_info, codep + 1);
16732 base = *codep & 7;
16733 /* When decoding the third source, don't increase
16734 bytes_before_imm as this has already been incremented
16735 by one in OP_E_memory while decoding the second
16736 source operand. */
16737 if (opnum == 0)
16738 bytes_before_imm++;
16739 }
16740
16741 /* Don't increase bytes_before_imm when decoding the third source,
16742 it has already been incremented by OP_E_memory while decoding
16743 the second source operand. */
16744 if (opnum == 0)
16745 {
16746 switch (modrm.mod)
16747 {
16748 case 0:
16749 /* When modrm.rm == 5 or modrm.rm == 4 and base in
16750 SIB == 5, there is a 4 byte displacement. */
16751 if (base != 5)
16752 /* No displacement. */
16753 break;
16754 case 2:
16755 /* 4 byte displacement. */
16756 bytes_before_imm += 4;
16757 break;
16758 case 1:
16759 /* 1 byte displacement. */
16760 bytes_before_imm++;
16761 break;
16762 }
16763 }
16764 }
922d8de8 16765 else
02e647f9
SP
16766 {
16767 /* 16 bit address mode */
6c067bbb
RM
16768 /* Don't increase bytes_before_imm when decoding the third source,
16769 it has already been incremented by OP_E_memory while decoding
16770 the second source operand. */
16771 if (opnum == 0)
16772 {
02e647f9
SP
16773 switch (modrm.mod)
16774 {
16775 case 0:
16776 /* When modrm.rm == 6, there is a 2 byte displacement. */
16777 if (modrm.rm != 6)
16778 /* No displacement. */
16779 break;
16780 case 2:
16781 /* 2 byte displacement. */
16782 bytes_before_imm += 2;
16783 break;
16784 case 1:
16785 /* 1 byte displacement: when decoding the third source,
16786 don't increase bytes_before_imm as this has already
16787 been incremented by one in OP_E_memory while decoding
16788 the second source operand. */
16789 if (opnum == 0)
16790 bytes_before_imm++;
ccc5981b 16791
02e647f9
SP
16792 break;
16793 }
922d8de8
DR
16794 }
16795 }
16796 }
16797
16798 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
16799 return codep [bytes_before_imm];
16800}
16801
16802static void
16803OP_EX_VexReg (int bytemode, int sizeflag, int reg)
16804{
b9733481
L
16805 const char **names;
16806
922d8de8
DR
16807 if (reg == -1 && modrm.mod != 3)
16808 {
16809 OP_E_memory (bytemode, sizeflag);
16810 return;
16811 }
16812 else
16813 {
16814 if (reg == -1)
16815 {
16816 reg = modrm.rm;
16817 USED_REX (REX_B);
16818 if (rex & REX_B)
16819 reg += 8;
16820 }
16821 else if (reg > 7 && address_mode != mode_64bit)
16822 BadOp ();
16823 }
16824
16825 switch (vex.length)
16826 {
16827 case 128:
b9733481 16828 names = names_xmm;
922d8de8
DR
16829 break;
16830 case 256:
b9733481 16831 names = names_ymm;
922d8de8
DR
16832 break;
16833 default:
16834 abort ();
16835 }
b9733481 16836 oappend (names[reg]);
922d8de8
DR
16837}
16838
a683cc34
SP
16839static void
16840OP_EX_VexImmW (int bytemode, int sizeflag)
16841{
16842 int reg = -1;
16843 static unsigned char vex_imm8;
16844
16845 if (vex_w_done == 0)
16846 {
16847 vex_w_done = 1;
16848
16849 /* Skip mod/rm byte. */
16850 MODRM_CHECK;
16851 codep++;
16852
16853 vex_imm8 = get_vex_imm8 (sizeflag, 0);
16854
16855 if (vex.w)
16856 reg = vex_imm8 >> 4;
16857
16858 OP_EX_VexReg (bytemode, sizeflag, reg);
16859 }
16860 else if (vex_w_done == 1)
16861 {
16862 vex_w_done = 2;
16863
16864 if (!vex.w)
16865 reg = vex_imm8 >> 4;
16866
16867 OP_EX_VexReg (bytemode, sizeflag, reg);
16868 }
16869 else
16870 {
16871 /* Output the imm8 directly. */
16872 scratchbuf[0] = '$';
16873 print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
9ce09ba2 16874 oappend_maybe_intel (scratchbuf);
a683cc34
SP
16875 scratchbuf[0] = '\0';
16876 codep++;
16877 }
16878}
16879
5dd85c99
SP
16880static void
16881OP_Vex_2src (int bytemode, int sizeflag)
16882{
16883 if (modrm.mod == 3)
16884 {
b9733481 16885 int reg = modrm.rm;
5dd85c99 16886 USED_REX (REX_B);
b9733481
L
16887 if (rex & REX_B)
16888 reg += 8;
16889 oappend (names_xmm[reg]);
5dd85c99
SP
16890 }
16891 else
16892 {
16893 if (intel_syntax
16894 && (bytemode == v_mode || bytemode == v_swap_mode))
16895 {
16896 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16897 used_prefixes |= (prefixes & PREFIX_DATA);
16898 }
16899 OP_E (bytemode, sizeflag);
16900 }
16901}
16902
16903static void
16904OP_Vex_2src_1 (int bytemode, int sizeflag)
16905{
16906 if (modrm.mod == 3)
16907 {
16908 /* Skip mod/rm byte. */
16909 MODRM_CHECK;
16910 codep++;
16911 }
16912
16913 if (vex.w)
b9733481 16914 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
16915 else
16916 OP_Vex_2src (bytemode, sizeflag);
16917}
16918
16919static void
16920OP_Vex_2src_2 (int bytemode, int sizeflag)
16921{
16922 if (vex.w)
16923 OP_Vex_2src (bytemode, sizeflag);
16924 else
b9733481 16925 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
16926}
16927
922d8de8
DR
16928static void
16929OP_EX_VexW (int bytemode, int sizeflag)
16930{
16931 int reg = -1;
16932
16933 if (!vex_w_done)
16934 {
16935 vex_w_done = 1;
41effecb
SP
16936
16937 /* Skip mod/rm byte. */
16938 MODRM_CHECK;
16939 codep++;
16940
922d8de8 16941 if (vex.w)
ccc5981b 16942 reg = get_vex_imm8 (sizeflag, 0) >> 4;
922d8de8
DR
16943 }
16944 else
16945 {
16946 if (!vex.w)
ccc5981b 16947 reg = get_vex_imm8 (sizeflag, 1) >> 4;
922d8de8
DR
16948 }
16949
16950 OP_EX_VexReg (bytemode, sizeflag, reg);
16951}
16952
922d8de8
DR
16953static void
16954VEXI4_Fixup (int bytemode ATTRIBUTE_UNUSED,
16955 int sizeflag ATTRIBUTE_UNUSED)
16956{
16957 /* Skip the immediate byte and check for invalid bits. */
16958 FETCH_DATA (the_info, codep + 1);
16959 if (*codep++ & 0xf)
16960 BadOp ();
16961}
16962
c0f3af97
L
16963static void
16964OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16965{
16966 int reg;
b9733481
L
16967 const char **names;
16968
c0f3af97
L
16969 FETCH_DATA (the_info, codep + 1);
16970 reg = *codep++;
16971
16972 if (bytemode != x_mode)
16973 abort ();
16974
16975 if (reg & 0xf)
16976 BadOp ();
16977
16978 reg >>= 4;
dae39acc
L
16979 if (reg > 7 && address_mode != mode_64bit)
16980 BadOp ();
16981
c0f3af97
L
16982 switch (vex.length)
16983 {
16984 case 128:
b9733481 16985 names = names_xmm;
c0f3af97
L
16986 break;
16987 case 256:
b9733481 16988 names = names_ymm;
c0f3af97
L
16989 break;
16990 default:
16991 abort ();
16992 }
b9733481 16993 oappend (names[reg]);
c0f3af97
L
16994}
16995
922d8de8
DR
16996static void
16997OP_XMM_VexW (int bytemode, int sizeflag)
16998{
16999 /* Turn off the REX.W bit since it is used for swapping operands
17000 now. */
17001 rex &= ~REX_W;
17002 OP_XMM (bytemode, sizeflag);
17003}
17004
c0f3af97
L
17005static void
17006OP_EX_Vex (int bytemode, int sizeflag)
17007{
17008 if (modrm.mod != 3)
17009 {
17010 if (vex.register_specifier != 0)
17011 BadOp ();
17012 need_vex_reg = 0;
17013 }
17014 OP_EX (bytemode, sizeflag);
17015}
17016
17017static void
17018OP_XMM_Vex (int bytemode, int sizeflag)
17019{
17020 if (modrm.mod != 3)
17021 {
17022 if (vex.register_specifier != 0)
17023 BadOp ();
17024 need_vex_reg = 0;
17025 }
17026 OP_XMM (bytemode, sizeflag);
17027}
17028
17029static void
17030VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17031{
17032 switch (vex.length)
17033 {
17034 case 128:
ea397f5b 17035 mnemonicendp = stpcpy (obuf, "vzeroupper");
c0f3af97
L
17036 break;
17037 case 256:
ea397f5b 17038 mnemonicendp = stpcpy (obuf, "vzeroall");
c0f3af97
L
17039 break;
17040 default:
17041 abort ();
17042 }
17043}
17044
ea397f5b
L
17045static struct op vex_cmp_op[] =
17046{
17047 { STRING_COMMA_LEN ("eq") },
17048 { STRING_COMMA_LEN ("lt") },
17049 { STRING_COMMA_LEN ("le") },
17050 { STRING_COMMA_LEN ("unord") },
17051 { STRING_COMMA_LEN ("neq") },
17052 { STRING_COMMA_LEN ("nlt") },
17053 { STRING_COMMA_LEN ("nle") },
17054 { STRING_COMMA_LEN ("ord") },
17055 { STRING_COMMA_LEN ("eq_uq") },
17056 { STRING_COMMA_LEN ("nge") },
17057 { STRING_COMMA_LEN ("ngt") },
17058 { STRING_COMMA_LEN ("false") },
17059 { STRING_COMMA_LEN ("neq_oq") },
17060 { STRING_COMMA_LEN ("ge") },
17061 { STRING_COMMA_LEN ("gt") },
17062 { STRING_COMMA_LEN ("true") },
17063 { STRING_COMMA_LEN ("eq_os") },
17064 { STRING_COMMA_LEN ("lt_oq") },
17065 { STRING_COMMA_LEN ("le_oq") },
17066 { STRING_COMMA_LEN ("unord_s") },
17067 { STRING_COMMA_LEN ("neq_us") },
17068 { STRING_COMMA_LEN ("nlt_uq") },
17069 { STRING_COMMA_LEN ("nle_uq") },
17070 { STRING_COMMA_LEN ("ord_s") },
17071 { STRING_COMMA_LEN ("eq_us") },
17072 { STRING_COMMA_LEN ("nge_uq") },
17073 { STRING_COMMA_LEN ("ngt_uq") },
17074 { STRING_COMMA_LEN ("false_os") },
17075 { STRING_COMMA_LEN ("neq_os") },
17076 { STRING_COMMA_LEN ("ge_oq") },
17077 { STRING_COMMA_LEN ("gt_oq") },
17078 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
17079};
17080
17081static void
17082VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17083{
17084 unsigned int cmp_type;
17085
17086 FETCH_DATA (the_info, codep + 1);
17087 cmp_type = *codep++ & 0xff;
17088 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
17089 {
17090 char suffix [3];
ea397f5b 17091 char *p = mnemonicendp - 2;
c0f3af97
L
17092 suffix[0] = p[0];
17093 suffix[1] = p[1];
17094 suffix[2] = '\0';
ea397f5b
L
17095 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
17096 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
17097 }
17098 else
17099 {
17100 /* We have a reserved extension byte. Output it directly. */
17101 scratchbuf[0] = '$';
17102 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 17103 oappend_maybe_intel (scratchbuf);
c0f3af97
L
17104 scratchbuf[0] = '\0';
17105 }
17106}
17107
43234a1e
L
17108static void
17109VPCMP_Fixup (int bytemode ATTRIBUTE_UNUSED,
17110 int sizeflag ATTRIBUTE_UNUSED)
17111{
17112 unsigned int cmp_type;
17113
17114 if (!vex.evex)
17115 abort ();
17116
17117 FETCH_DATA (the_info, codep + 1);
17118 cmp_type = *codep++ & 0xff;
17119 /* There are aliases for immediates 0, 1, 2, 4, 5, 6.
17120 If it's the case, print suffix, otherwise - print the immediate. */
17121 if (cmp_type < ARRAY_SIZE (simd_cmp_op)
17122 && cmp_type != 3
17123 && cmp_type != 7)
17124 {
17125 char suffix [3];
17126 char *p = mnemonicendp - 2;
17127
17128 /* vpcmp* can have both one- and two-lettered suffix. */
17129 if (p[0] == 'p')
17130 {
17131 p++;
17132 suffix[0] = p[0];
17133 suffix[1] = '\0';
17134 }
17135 else
17136 {
17137 suffix[0] = p[0];
17138 suffix[1] = p[1];
17139 suffix[2] = '\0';
17140 }
17141
17142 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
17143 mnemonicendp += simd_cmp_op[cmp_type].len;
17144 }
17145 else
17146 {
17147 /* We have a reserved extension byte. Output it directly. */
17148 scratchbuf[0] = '$';
17149 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 17150 oappend_maybe_intel (scratchbuf);
43234a1e
L
17151 scratchbuf[0] = '\0';
17152 }
17153}
17154
ea397f5b
L
17155static const struct op pclmul_op[] =
17156{
17157 { STRING_COMMA_LEN ("lql") },
17158 { STRING_COMMA_LEN ("hql") },
17159 { STRING_COMMA_LEN ("lqh") },
17160 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
17161};
17162
17163static void
17164PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
17165 int sizeflag ATTRIBUTE_UNUSED)
17166{
17167 unsigned int pclmul_type;
17168
17169 FETCH_DATA (the_info, codep + 1);
17170 pclmul_type = *codep++ & 0xff;
17171 switch (pclmul_type)
17172 {
17173 case 0x10:
17174 pclmul_type = 2;
17175 break;
17176 case 0x11:
17177 pclmul_type = 3;
17178 break;
17179 default:
17180 break;
7bb15c6f 17181 }
c0f3af97
L
17182 if (pclmul_type < ARRAY_SIZE (pclmul_op))
17183 {
17184 char suffix [4];
ea397f5b 17185 char *p = mnemonicendp - 3;
c0f3af97
L
17186 suffix[0] = p[0];
17187 suffix[1] = p[1];
17188 suffix[2] = p[2];
17189 suffix[3] = '\0';
ea397f5b
L
17190 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
17191 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
17192 }
17193 else
17194 {
17195 /* We have a reserved extension byte. Output it directly. */
17196 scratchbuf[0] = '$';
17197 print_operand_value (scratchbuf + 1, 1, pclmul_type);
9ce09ba2 17198 oappend_maybe_intel (scratchbuf);
c0f3af97
L
17199 scratchbuf[0] = '\0';
17200 }
17201}
17202
f1f8f695
L
17203static void
17204MOVBE_Fixup (int bytemode, int sizeflag)
17205{
17206 /* Add proper suffix to "movbe". */
ea397f5b 17207 char *p = mnemonicendp;
f1f8f695
L
17208
17209 switch (bytemode)
17210 {
17211 case v_mode:
17212 if (intel_syntax)
ea397f5b 17213 goto skip;
f1f8f695
L
17214
17215 USED_REX (REX_W);
17216 if (sizeflag & SUFFIX_ALWAYS)
17217 {
17218 if (rex & REX_W)
17219 *p++ = 'q';
f1f8f695 17220 else
f16cd0d5
L
17221 {
17222 if (sizeflag & DFLAG)
17223 *p++ = 'l';
17224 else
17225 *p++ = 'w';
17226 used_prefixes |= (prefixes & PREFIX_DATA);
17227 }
f1f8f695 17228 }
f1f8f695
L
17229 break;
17230 default:
17231 oappend (INTERNAL_DISASSEMBLER_ERROR);
17232 break;
17233 }
ea397f5b 17234 mnemonicendp = p;
f1f8f695
L
17235 *p = '\0';
17236
ea397f5b 17237skip:
f1f8f695
L
17238 OP_M (bytemode, sizeflag);
17239}
f88c9eb0
SP
17240
17241static void
17242OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17243{
17244 int reg;
17245 const char **names;
17246
17247 /* Skip mod/rm byte. */
17248 MODRM_CHECK;
17249 codep++;
17250
17251 if (vex.w)
17252 names = names64;
f88c9eb0 17253 else
ce7d077e 17254 names = names32;
f88c9eb0
SP
17255
17256 reg = modrm.rm;
17257 USED_REX (REX_B);
17258 if (rex & REX_B)
17259 reg += 8;
17260
17261 oappend (names[reg]);
17262}
17263
17264static void
17265OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17266{
17267 const char **names;
17268
17269 if (vex.w)
17270 names = names64;
f88c9eb0 17271 else
ce7d077e 17272 names = names32;
f88c9eb0
SP
17273
17274 oappend (names[vex.register_specifier]);
17275}
43234a1e
L
17276
17277static void
17278OP_Mask (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17279{
17280 if (!vex.evex
1ba585e8 17281 || (bytemode != mask_mode && bytemode != mask_bd_mode))
43234a1e
L
17282 abort ();
17283
17284 USED_REX (REX_R);
17285 if ((rex & REX_R) != 0 || !vex.r)
17286 {
17287 BadOp ();
17288 return;
17289 }
17290
17291 oappend (names_mask [modrm.reg]);
17292}
17293
17294static void
17295OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17296{
17297 if (!vex.evex
17298 || (bytemode != evex_rounding_mode
17299 && bytemode != evex_sae_mode))
17300 abort ();
17301 if (modrm.mod == 3 && vex.b)
17302 switch (bytemode)
17303 {
17304 case evex_rounding_mode:
17305 oappend (names_rounding[vex.ll]);
17306 break;
17307 case evex_sae_mode:
17308 oappend ("{sae}");
17309 break;
17310 default:
17311 break;
17312 }
17313}
This page took 2.051541 seconds and 4 git commands to generate.