Sync config.guess and config.sub with GCC
[deliverable/binutils-gdb.git] / opcodes / i386-dis.c
CommitLineData
252b5132 1/* Print i386 instructions for GDB, the GNU debugger.
060d22b0 2 Copyright 1988, 1989, 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
7bb15c6f 3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
0af1713e 4 Free Software Foundation, Inc.
252b5132 5
9b201bb5 6 This file is part of the GNU opcodes library.
20f0a1fc 7
9b201bb5 8 This library is free software; you can redistribute it and/or modify
20f0a1fc 9 it under the terms of the GNU General Public License as published by
9b201bb5
NC
10 the Free Software Foundation; either version 3, or (at your option)
11 any later version.
20f0a1fc 12
9b201bb5
NC
13 It is distributed in the hope that it will be useful, but WITHOUT
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
16 License for more details.
20f0a1fc
NC
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
9b201bb5
NC
20 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
21 MA 02110-1301, USA. */
22
20f0a1fc
NC
23
24/* 80386 instruction printer by Pace Willisson (pace@prep.ai.mit.edu)
25 July 1988
26 modified by John Hassey (hassey@dg-rtp.dg.com)
27 x86-64 support added by Jan Hubicka (jh@suse.cz)
28 VIA PadLock support by Michal Ludvig (mludvig@suse.cz). */
29
30/* The main tables describing the instructions is essentially a copy
31 of the "Opcode Map" chapter (Appendix A) of the Intel 80386
32 Programmers Manual. Usually, there is a capital letter, followed
33 by a small letter. The capital letter tell the addressing mode,
34 and the small letter tells about the operand size. Refer to
35 the Intel manual for details. */
252b5132 36
252b5132 37#include "sysdep.h"
dabbade6 38#include "dis-asm.h"
252b5132 39#include "opintl.h"
0b1cf022 40#include "opcode/i386.h"
85f10a01 41#include "libiberty.h"
252b5132
RH
42
43#include <setjmp.h>
44
26ca5450
AJ
45static int print_insn (bfd_vma, disassemble_info *);
46static void dofloat (int);
47static void OP_ST (int, int);
48static void OP_STi (int, int);
49static int putop (const char *, int);
50static void oappend (const char *);
51static void append_seg (void);
52static void OP_indirE (int, int);
53static void print_operand_value (char *, int, bfd_vma);
c0f3af97 54static void OP_E_register (int, int);
c1e679ec 55static void OP_E_memory (int, int);
5d669648 56static void print_displacement (char *, bfd_vma);
26ca5450
AJ
57static void OP_E (int, int);
58static void OP_G (int, int);
59static bfd_vma get64 (void);
60static bfd_signed_vma get32 (void);
61static bfd_signed_vma get32s (void);
62static int get16 (void);
63static void set_op (bfd_vma, int);
b844680a 64static void OP_Skip_MODRM (int, int);
26ca5450
AJ
65static void OP_REG (int, int);
66static void OP_IMREG (int, int);
67static void OP_I (int, int);
68static void OP_I64 (int, int);
69static void OP_sI (int, int);
70static void OP_J (int, int);
71static void OP_SEG (int, int);
72static void OP_DIR (int, int);
73static void OP_OFF (int, int);
74static void OP_OFF64 (int, int);
75static void ptr_reg (int, int);
76static void OP_ESreg (int, int);
77static void OP_DSreg (int, int);
78static void OP_C (int, int);
79static void OP_D (int, int);
80static void OP_T (int, int);
6f74c397 81static void OP_R (int, int);
26ca5450
AJ
82static void OP_MMX (int, int);
83static void OP_XMM (int, int);
84static void OP_EM (int, int);
85static void OP_EX (int, int);
4d9567e0
MM
86static void OP_EMC (int,int);
87static void OP_MXC (int,int);
26ca5450
AJ
88static void OP_MS (int, int);
89static void OP_XS (int, int);
cc0ec051 90static void OP_M (int, int);
c0f3af97
L
91static void OP_VEX (int, int);
92static void OP_EX_Vex (int, int);
922d8de8 93static void OP_EX_VexW (int, int);
a683cc34 94static void OP_EX_VexImmW (int, int);
c0f3af97 95static void OP_XMM_Vex (int, int);
922d8de8 96static void OP_XMM_VexW (int, int);
c0f3af97
L
97static void OP_REG_VexI4 (int, int);
98static void PCLMUL_Fixup (int, int);
922d8de8 99static void VEXI4_Fixup (int, int);
c0f3af97
L
100static void VZERO_Fixup (int, int);
101static void VCMP_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);
42164a71
L
111static void HLE_Fixup1 (int, int);
112static void HLE_Fixup2 (int, int);
113static void HLE_Fixup3 (int, int);
f5804c90 114static void CMPXCHG8B_Fixup (int, int);
42903f7f 115static void XMM_Fixup (int, int);
381d071f 116static void CRC32_Fixup (int, int);
eacc9c89 117static void FXSAVE_Fixup (int, int);
f88c9eb0
SP
118static void OP_LWPCB_E (int, int);
119static void OP_LWP_E (int, int);
5dd85c99
SP
120static void OP_Vex_2src_1 (int, int);
121static void OP_Vex_2src_2 (int, int);
c1e679ec 122
f1f8f695 123static void MOVBE_Fixup (int, int);
252b5132 124
6608db57 125struct dis_private {
252b5132
RH
126 /* Points to first byte not fetched. */
127 bfd_byte *max_fetched;
0b1cf022 128 bfd_byte the_buffer[MAX_MNEM_SIZE];
252b5132 129 bfd_vma insn_start;
e396998b 130 int orig_sizeflag;
252b5132
RH
131 jmp_buf bailout;
132};
133
cb712a9e
L
134enum address_mode
135{
136 mode_16bit,
137 mode_32bit,
138 mode_64bit
139};
140
141enum address_mode address_mode;
52b15da3 142
5076851f
ILT
143/* Flags for the prefixes for the current instruction. See below. */
144static int prefixes;
145
52b15da3
JH
146/* REX prefix the current instruction. See below. */
147static int rex;
148/* Bits of REX we've already used. */
149static int rex_used;
d869730d 150/* REX bits in original REX prefix ignored. */
c0f3af97 151static int rex_ignored;
52b15da3
JH
152/* Mark parts used in the REX prefix. When we are testing for
153 empty prefix (for 8bit register REX extension), just mask it
154 out. Otherwise test for REX bit is excuse for existence of REX
155 only in case value is nonzero. */
156#define USED_REX(value) \
157 { \
158 if (value) \
161a04f6
L
159 { \
160 if ((rex & value)) \
161 rex_used |= (value) | REX_OPCODE; \
162 } \
52b15da3 163 else \
161a04f6 164 rex_used |= REX_OPCODE; \
52b15da3
JH
165 }
166
7d421014
ILT
167/* Flags for prefixes which we somehow handled when printing the
168 current instruction. */
169static int used_prefixes;
170
5076851f
ILT
171/* Flags stored in PREFIXES. */
172#define PREFIX_REPZ 1
173#define PREFIX_REPNZ 2
174#define PREFIX_LOCK 4
175#define PREFIX_CS 8
176#define PREFIX_SS 0x10
177#define PREFIX_DS 0x20
178#define PREFIX_ES 0x40
179#define PREFIX_FS 0x80
180#define PREFIX_GS 0x100
181#define PREFIX_DATA 0x200
182#define PREFIX_ADDR 0x400
183#define PREFIX_FWAIT 0x800
184
252b5132
RH
185/* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
186 to ADDR (exclusive) are valid. Returns 1 for success, longjmps
187 on error. */
188#define FETCH_DATA(info, addr) \
6608db57 189 ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
252b5132
RH
190 ? 1 : fetch_data ((info), (addr)))
191
192static int
26ca5450 193fetch_data (struct disassemble_info *info, bfd_byte *addr)
252b5132
RH
194{
195 int status;
6608db57 196 struct dis_private *priv = (struct dis_private *) info->private_data;
252b5132
RH
197 bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
198
0b1cf022 199 if (addr <= priv->the_buffer + MAX_MNEM_SIZE)
272c9217
JB
200 status = (*info->read_memory_func) (start,
201 priv->max_fetched,
202 addr - priv->max_fetched,
203 info);
204 else
205 status = -1;
252b5132
RH
206 if (status != 0)
207 {
7d421014 208 /* If we did manage to read at least one byte, then
db6eb5be
AM
209 print_insn_i386 will do something sensible. Otherwise, print
210 an error. We do that here because this is where we know
211 STATUS. */
7d421014 212 if (priv->max_fetched == priv->the_buffer)
5076851f 213 (*info->memory_error_func) (status, start, info);
252b5132
RH
214 longjmp (priv->bailout, 1);
215 }
216 else
217 priv->max_fetched = addr;
218 return 1;
219}
220
ce518a5f 221#define XX { NULL, 0 }
592d1631 222#define Bad_Opcode NULL, { { NULL, 0 } }
ce518a5f
L
223
224#define Eb { OP_E, b_mode }
b6169b20 225#define EbS { OP_E, b_swap_mode }
ce518a5f 226#define Ev { OP_E, v_mode }
b6169b20 227#define EvS { OP_E, v_swap_mode }
ce518a5f
L
228#define Ed { OP_E, d_mode }
229#define Edq { OP_E, dq_mode }
230#define Edqw { OP_E, dqw_mode }
42903f7f
L
231#define Edqb { OP_E, dqb_mode }
232#define Edqd { OP_E, dqd_mode }
09335d05 233#define Eq { OP_E, q_mode }
ce518a5f
L
234#define indirEv { OP_indirE, stack_v_mode }
235#define indirEp { OP_indirE, f_mode }
236#define stackEv { OP_E, stack_v_mode }
237#define Em { OP_E, m_mode }
238#define Ew { OP_E, w_mode }
239#define M { OP_M, 0 } /* lea, lgdt, etc. */
34b772a6 240#define Ma { OP_M, a_mode }
b844680a 241#define Mb { OP_M, b_mode }
d9a5e5e5 242#define Md { OP_M, d_mode }
f1f8f695 243#define Mo { OP_M, o_mode }
ce518a5f
L
244#define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for LDS, LES etc */
245#define Mq { OP_M, q_mode }
4ee52178 246#define Mx { OP_M, x_mode }
c0f3af97 247#define Mxmm { OP_M, xmm_mode }
ce518a5f
L
248#define Gb { OP_G, b_mode }
249#define Gv { OP_G, v_mode }
250#define Gd { OP_G, d_mode }
251#define Gdq { OP_G, dq_mode }
252#define Gm { OP_G, m_mode }
253#define Gw { OP_G, w_mode }
6f74c397
L
254#define Rd { OP_R, d_mode }
255#define Rm { OP_R, m_mode }
ce518a5f
L
256#define Ib { OP_I, b_mode }
257#define sIb { OP_sI, b_mode } /* sign extened byte */
e3949f17 258#define sIbT { OP_sI, b_T_mode } /* sign extened byte like 'T' */
ce518a5f 259#define Iv { OP_I, v_mode }
7bb15c6f 260#define sIv { OP_sI, v_mode }
ce518a5f
L
261#define Iq { OP_I, q_mode }
262#define Iv64 { OP_I64, v_mode }
263#define Iw { OP_I, w_mode }
264#define I1 { OP_I, const_1_mode }
265#define Jb { OP_J, b_mode }
266#define Jv { OP_J, v_mode }
267#define Cm { OP_C, m_mode }
268#define Dm { OP_D, m_mode }
269#define Td { OP_T, d_mode }
b844680a 270#define Skip_MODRM { OP_Skip_MODRM, 0 }
ce518a5f
L
271
272#define RMeAX { OP_REG, eAX_reg }
273#define RMeBX { OP_REG, eBX_reg }
274#define RMeCX { OP_REG, eCX_reg }
275#define RMeDX { OP_REG, eDX_reg }
276#define RMeSP { OP_REG, eSP_reg }
277#define RMeBP { OP_REG, eBP_reg }
278#define RMeSI { OP_REG, eSI_reg }
279#define RMeDI { OP_REG, eDI_reg }
280#define RMrAX { OP_REG, rAX_reg }
281#define RMrBX { OP_REG, rBX_reg }
282#define RMrCX { OP_REG, rCX_reg }
283#define RMrDX { OP_REG, rDX_reg }
284#define RMrSP { OP_REG, rSP_reg }
285#define RMrBP { OP_REG, rBP_reg }
286#define RMrSI { OP_REG, rSI_reg }
287#define RMrDI { OP_REG, rDI_reg }
288#define RMAL { OP_REG, al_reg }
ce518a5f
L
289#define RMCL { OP_REG, cl_reg }
290#define RMDL { OP_REG, dl_reg }
291#define RMBL { OP_REG, bl_reg }
292#define RMAH { OP_REG, ah_reg }
293#define RMCH { OP_REG, ch_reg }
294#define RMDH { OP_REG, dh_reg }
295#define RMBH { OP_REG, bh_reg }
296#define RMAX { OP_REG, ax_reg }
297#define RMDX { OP_REG, dx_reg }
298
299#define eAX { OP_IMREG, eAX_reg }
300#define eBX { OP_IMREG, eBX_reg }
301#define eCX { OP_IMREG, eCX_reg }
302#define eDX { OP_IMREG, eDX_reg }
303#define eSP { OP_IMREG, eSP_reg }
304#define eBP { OP_IMREG, eBP_reg }
305#define eSI { OP_IMREG, eSI_reg }
306#define eDI { OP_IMREG, eDI_reg }
307#define AL { OP_IMREG, al_reg }
308#define CL { OP_IMREG, cl_reg }
309#define DL { OP_IMREG, dl_reg }
310#define BL { OP_IMREG, bl_reg }
311#define AH { OP_IMREG, ah_reg }
312#define CH { OP_IMREG, ch_reg }
313#define DH { OP_IMREG, dh_reg }
314#define BH { OP_IMREG, bh_reg }
315#define AX { OP_IMREG, ax_reg }
316#define DX { OP_IMREG, dx_reg }
317#define zAX { OP_IMREG, z_mode_ax_reg }
318#define indirDX { OP_IMREG, indir_dx_reg }
319
320#define Sw { OP_SEG, w_mode }
321#define Sv { OP_SEG, v_mode }
322#define Ap { OP_DIR, 0 }
323#define Ob { OP_OFF64, b_mode }
324#define Ov { OP_OFF64, v_mode }
325#define Xb { OP_DSreg, eSI_reg }
326#define Xv { OP_DSreg, eSI_reg }
327#define Xz { OP_DSreg, eSI_reg }
328#define Yb { OP_ESreg, eDI_reg }
329#define Yv { OP_ESreg, eDI_reg }
330#define DSBX { OP_DSreg, eBX_reg }
331
332#define es { OP_REG, es_reg }
333#define ss { OP_REG, ss_reg }
334#define cs { OP_REG, cs_reg }
335#define ds { OP_REG, ds_reg }
336#define fs { OP_REG, fs_reg }
337#define gs { OP_REG, gs_reg }
338
339#define MX { OP_MMX, 0 }
340#define XM { OP_XMM, 0 }
539f890d 341#define XMScalar { OP_XMM, scalar_mode }
6c30d220 342#define XMGatherQ { OP_XMM, vex_vsib_q_w_dq_mode }
c0f3af97 343#define XMM { OP_XMM, xmm_mode }
ce518a5f 344#define EM { OP_EM, v_mode }
b6169b20 345#define EMS { OP_EM, v_swap_mode }
09a2c6cf 346#define EMd { OP_EM, d_mode }
14051056 347#define EMx { OP_EM, x_mode }
8976381e 348#define EXw { OP_EX, w_mode }
09a2c6cf 349#define EXd { OP_EX, d_mode }
539f890d 350#define EXdScalar { OP_EX, d_scalar_mode }
fa99fab2 351#define EXdS { OP_EX, d_swap_mode }
09a2c6cf 352#define EXq { OP_EX, q_mode }
539f890d
L
353#define EXqScalar { OP_EX, q_scalar_mode }
354#define EXqScalarS { OP_EX, q_scalar_swap_mode }
b6169b20 355#define EXqS { OP_EX, q_swap_mode }
09a2c6cf 356#define EXx { OP_EX, x_mode }
b6169b20 357#define EXxS { OP_EX, x_swap_mode }
c0f3af97
L
358#define EXxmm { OP_EX, xmm_mode }
359#define EXxmmq { OP_EX, xmmq_mode }
6c30d220
L
360#define EXxmm_mb { OP_EX, xmm_mb_mode }
361#define EXxmm_mw { OP_EX, xmm_mw_mode }
362#define EXxmm_md { OP_EX, xmm_md_mode }
363#define EXxmm_mq { OP_EX, xmm_mq_mode }
364#define EXxmmdw { OP_EX, xmmdw_mode }
365#define EXxmmqd { OP_EX, xmmqd_mode }
c0f3af97 366#define EXymmq { OP_EX, ymmq_mode }
0bfee649 367#define EXVexWdq { OP_EX, vex_w_dq_mode }
1c480963 368#define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
ce518a5f
L
369#define MS { OP_MS, v_mode }
370#define XS { OP_XS, v_mode }
09335d05 371#define EMCq { OP_EMC, q_mode }
ce518a5f 372#define MXC { OP_MXC, 0 }
ce518a5f 373#define OPSUF { OP_3DNowSuffix, 0 }
ad19981d 374#define CMP { CMP_Fixup, 0 }
42903f7f 375#define XMM0 { XMM_Fixup, 0 }
eacc9c89 376#define FXSAVE { FXSAVE_Fixup, 0 }
5dd85c99
SP
377#define Vex_2src_1 { OP_Vex_2src_1, 0 }
378#define Vex_2src_2 { OP_Vex_2src_2, 0 }
252b5132 379
c0f3af97 380#define Vex { OP_VEX, vex_mode }
539f890d 381#define VexScalar { OP_VEX, vex_scalar_mode }
6c30d220 382#define VexGatherQ { OP_VEX, vex_vsib_q_w_dq_mode }
c0f3af97
L
383#define Vex128 { OP_VEX, vex128_mode }
384#define Vex256 { OP_VEX, vex256_mode }
cb21baef 385#define VexGdq { OP_VEX, dq_mode }
922d8de8 386#define VexI4 { VEXI4_Fixup, 0}
c0f3af97 387#define EXdVex { OP_EX_Vex, d_mode }
fa99fab2 388#define EXdVexS { OP_EX_Vex, d_swap_mode }
539f890d 389#define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode }
c0f3af97 390#define EXqVex { OP_EX_Vex, q_mode }
fa99fab2 391#define EXqVexS { OP_EX_Vex, q_swap_mode }
539f890d 392#define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode }
922d8de8
DR
393#define EXVexW { OP_EX_VexW, x_mode }
394#define EXdVexW { OP_EX_VexW, d_mode }
395#define EXqVexW { OP_EX_VexW, q_mode }
a683cc34 396#define EXVexImmW { OP_EX_VexImmW, x_mode }
c0f3af97 397#define XMVex { OP_XMM_Vex, 0 }
539f890d 398#define XMVexScalar { OP_XMM_Vex, scalar_mode }
922d8de8 399#define XMVexW { OP_XMM_VexW, 0 }
c0f3af97
L
400#define XMVexI4 { OP_REG_VexI4, x_mode }
401#define PCLMUL { PCLMUL_Fixup, 0 }
402#define VZERO { VZERO_Fixup, 0 }
403#define VCMP { VCMP_Fixup, 0 }
c0f3af97 404
6c30d220
L
405#define MVexVSIBDWpX { OP_M, vex_vsib_d_w_dq_mode }
406#define MVexVSIBQWpX { OP_M, vex_vsib_q_w_dq_mode }
407
35c52694 408/* Used handle "rep" prefix for string instructions. */
ce518a5f
L
409#define Xbr { REP_Fixup, eSI_reg }
410#define Xvr { REP_Fixup, eSI_reg }
411#define Ybr { REP_Fixup, eDI_reg }
412#define Yvr { REP_Fixup, eDI_reg }
413#define Yzr { REP_Fixup, eDI_reg }
414#define indirDXr { REP_Fixup, indir_dx_reg }
415#define ALr { REP_Fixup, al_reg }
416#define eAXr { REP_Fixup, eAX_reg }
417
42164a71
L
418/* Used handle HLE prefix for lockable instructions. */
419#define Ebh1 { HLE_Fixup1, b_mode }
420#define Evh1 { HLE_Fixup1, v_mode }
421#define Ebh2 { HLE_Fixup2, b_mode }
422#define Evh2 { HLE_Fixup2, v_mode }
423#define Ebh3 { HLE_Fixup3, b_mode }
424#define Evh3 { HLE_Fixup3, v_mode }
425
ce518a5f
L
426#define cond_jump_flag { NULL, cond_jump_mode }
427#define loop_jcxz_flag { NULL, loop_jcxz_mode }
3ffd33cf 428
252b5132 429/* bits in sizeflag */
252b5132 430#define SUFFIX_ALWAYS 4
252b5132
RH
431#define AFLAG 2
432#define DFLAG 1
433
51e7da1b
L
434enum
435{
436 /* byte operand */
437 b_mode = 1,
438 /* byte operand with operand swapped */
3873ba12 439 b_swap_mode,
e3949f17
L
440 /* byte operand, sign extend like 'T' suffix */
441 b_T_mode,
51e7da1b 442 /* operand size depends on prefixes */
3873ba12 443 v_mode,
51e7da1b 444 /* operand size depends on prefixes with operand swapped */
3873ba12 445 v_swap_mode,
51e7da1b 446 /* word operand */
3873ba12 447 w_mode,
51e7da1b 448 /* double word operand */
3873ba12 449 d_mode,
51e7da1b 450 /* double word operand with operand swapped */
3873ba12 451 d_swap_mode,
51e7da1b 452 /* quad word operand */
3873ba12 453 q_mode,
51e7da1b 454 /* quad word operand with operand swapped */
3873ba12 455 q_swap_mode,
51e7da1b 456 /* ten-byte operand */
3873ba12 457 t_mode,
51e7da1b 458 /* 16-byte XMM or 32-byte YMM operand */
3873ba12 459 x_mode,
51e7da1b 460 /* 16-byte XMM or 32-byte YMM operand with operand swapped */
3873ba12 461 x_swap_mode,
51e7da1b 462 /* 16-byte XMM operand */
3873ba12 463 xmm_mode,
51e7da1b 464 /* 16-byte XMM or quad word operand */
3873ba12 465 xmmq_mode,
6c30d220
L
466 /* XMM register or byte memory operand */
467 xmm_mb_mode,
468 /* XMM register or word memory operand */
469 xmm_mw_mode,
470 /* XMM register or double word memory operand */
471 xmm_md_mode,
472 /* XMM register or quad word memory operand */
473 xmm_mq_mode,
474 /* 16-byte XMM, word or double word operand */
475 xmmdw_mode,
476 /* 16-byte XMM, double word or quad word operand */
477 xmmqd_mode,
51e7da1b 478 /* 32-byte YMM or quad word operand */
3873ba12 479 ymmq_mode,
6c30d220
L
480 /* 32-byte YMM or 16-byte word operand */
481 ymmxmm_mode,
51e7da1b 482 /* d_mode in 32bit, q_mode in 64bit mode. */
3873ba12 483 m_mode,
51e7da1b 484 /* pair of v_mode operands */
3873ba12
L
485 a_mode,
486 cond_jump_mode,
487 loop_jcxz_mode,
51e7da1b 488 /* operand size depends on REX prefixes. */
3873ba12 489 dq_mode,
51e7da1b 490 /* registers like dq_mode, memory like w_mode. */
3873ba12 491 dqw_mode,
51e7da1b 492 /* 4- or 6-byte pointer operand */
3873ba12
L
493 f_mode,
494 const_1_mode,
51e7da1b 495 /* v_mode for stack-related opcodes. */
3873ba12 496 stack_v_mode,
51e7da1b 497 /* non-quad operand size depends on prefixes */
3873ba12 498 z_mode,
51e7da1b 499 /* 16-byte operand */
3873ba12 500 o_mode,
51e7da1b 501 /* registers like dq_mode, memory like b_mode. */
3873ba12 502 dqb_mode,
51e7da1b 503 /* registers like dq_mode, memory like d_mode. */
3873ba12 504 dqd_mode,
51e7da1b 505 /* normal vex mode */
3873ba12 506 vex_mode,
51e7da1b 507 /* 128bit vex mode */
3873ba12 508 vex128_mode,
51e7da1b 509 /* 256bit vex mode */
3873ba12 510 vex256_mode,
51e7da1b 511 /* operand size depends on the VEX.W bit. */
3873ba12 512 vex_w_dq_mode,
d55ee72f 513
6c30d220
L
514 /* Similar to vex_w_dq_mode, with VSIB dword indices. */
515 vex_vsib_d_w_dq_mode,
516 /* Similar to vex_w_dq_mode, with VSIB qword indices. */
517 vex_vsib_q_w_dq_mode,
518
539f890d
L
519 /* scalar, ignore vector length. */
520 scalar_mode,
521 /* like d_mode, ignore vector length. */
522 d_scalar_mode,
523 /* like d_swap_mode, ignore vector length. */
524 d_scalar_swap_mode,
525 /* like q_mode, ignore vector length. */
526 q_scalar_mode,
527 /* like q_swap_mode, ignore vector length. */
528 q_scalar_swap_mode,
529 /* like vex_mode, ignore vector length. */
530 vex_scalar_mode,
1c480963
L
531 /* like vex_w_dq_mode, ignore vector length. */
532 vex_scalar_w_dq_mode,
539f890d 533
3873ba12
L
534 es_reg,
535 cs_reg,
536 ss_reg,
537 ds_reg,
538 fs_reg,
539 gs_reg,
d55ee72f 540
3873ba12
L
541 eAX_reg,
542 eCX_reg,
543 eDX_reg,
544 eBX_reg,
545 eSP_reg,
546 eBP_reg,
547 eSI_reg,
548 eDI_reg,
d55ee72f 549
3873ba12
L
550 al_reg,
551 cl_reg,
552 dl_reg,
553 bl_reg,
554 ah_reg,
555 ch_reg,
556 dh_reg,
557 bh_reg,
d55ee72f 558
3873ba12
L
559 ax_reg,
560 cx_reg,
561 dx_reg,
562 bx_reg,
563 sp_reg,
564 bp_reg,
565 si_reg,
566 di_reg,
d55ee72f 567
3873ba12
L
568 rAX_reg,
569 rCX_reg,
570 rDX_reg,
571 rBX_reg,
572 rSP_reg,
573 rBP_reg,
574 rSI_reg,
575 rDI_reg,
d55ee72f 576
3873ba12
L
577 z_mode_ax_reg,
578 indir_dx_reg
51e7da1b 579};
252b5132 580
51e7da1b
L
581enum
582{
583 FLOATCODE = 1,
3873ba12
L
584 USE_REG_TABLE,
585 USE_MOD_TABLE,
586 USE_RM_TABLE,
587 USE_PREFIX_TABLE,
588 USE_X86_64_TABLE,
589 USE_3BYTE_TABLE,
f88c9eb0 590 USE_XOP_8F_TABLE,
3873ba12
L
591 USE_VEX_C4_TABLE,
592 USE_VEX_C5_TABLE,
9e30b8e0
L
593 USE_VEX_LEN_TABLE,
594 USE_VEX_W_TABLE
51e7da1b 595};
6439fc28 596
1ceb70f8 597#define FLOAT NULL, { { NULL, FLOATCODE } }
4efba78c 598
4e7d34a6 599#define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }
1ceb70f8
L
600#define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
601#define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
602#define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
603#define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
4e7d34a6
L
604#define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
605#define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
f88c9eb0 606#define XOP_8F_TABLE(I) DIS386 (USE_XOP_8F_TABLE, (I))
c0f3af97
L
607#define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
608#define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
609#define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
9e30b8e0 610#define VEX_W_TABLE(I) DIS386 (USE_VEX_W_TABLE, (I))
1ceb70f8 611
51e7da1b
L
612enum
613{
614 REG_80 = 0,
3873ba12
L
615 REG_81,
616 REG_82,
617 REG_8F,
618 REG_C0,
619 REG_C1,
620 REG_C6,
621 REG_C7,
622 REG_D0,
623 REG_D1,
624 REG_D2,
625 REG_D3,
626 REG_F6,
627 REG_F7,
628 REG_FE,
629 REG_FF,
630 REG_0F00,
631 REG_0F01,
632 REG_0F0D,
633 REG_0F18,
634 REG_0F71,
635 REG_0F72,
636 REG_0F73,
637 REG_0FA6,
638 REG_0FA7,
639 REG_0FAE,
640 REG_0FBA,
641 REG_0FC7,
592a252b
L
642 REG_VEX_0F71,
643 REG_VEX_0F72,
644 REG_VEX_0F73,
645 REG_VEX_0FAE,
f12dc422 646 REG_VEX_0F38F3,
f88c9eb0 647 REG_XOP_LWPCB,
2a2a0f38
QN
648 REG_XOP_LWP,
649 REG_XOP_TBM_01,
650 REG_XOP_TBM_02
51e7da1b 651};
1ceb70f8 652
51e7da1b
L
653enum
654{
655 MOD_8D = 0,
42164a71
L
656 MOD_C6_REG_7,
657 MOD_C7_REG_7,
3873ba12
L
658 MOD_0F01_REG_0,
659 MOD_0F01_REG_1,
660 MOD_0F01_REG_2,
661 MOD_0F01_REG_3,
662 MOD_0F01_REG_7,
663 MOD_0F12_PREFIX_0,
664 MOD_0F13,
665 MOD_0F16_PREFIX_0,
666 MOD_0F17,
667 MOD_0F18_REG_0,
668 MOD_0F18_REG_1,
669 MOD_0F18_REG_2,
670 MOD_0F18_REG_3,
d7189fa5
RM
671 MOD_0F18_REG_4,
672 MOD_0F18_REG_5,
673 MOD_0F18_REG_6,
674 MOD_0F18_REG_7,
3873ba12
L
675 MOD_0F20,
676 MOD_0F21,
677 MOD_0F22,
678 MOD_0F23,
679 MOD_0F24,
680 MOD_0F26,
681 MOD_0F2B_PREFIX_0,
682 MOD_0F2B_PREFIX_1,
683 MOD_0F2B_PREFIX_2,
684 MOD_0F2B_PREFIX_3,
685 MOD_0F51,
686 MOD_0F71_REG_2,
687 MOD_0F71_REG_4,
688 MOD_0F71_REG_6,
689 MOD_0F72_REG_2,
690 MOD_0F72_REG_4,
691 MOD_0F72_REG_6,
692 MOD_0F73_REG_2,
693 MOD_0F73_REG_3,
694 MOD_0F73_REG_6,
695 MOD_0F73_REG_7,
696 MOD_0FAE_REG_0,
697 MOD_0FAE_REG_1,
698 MOD_0FAE_REG_2,
699 MOD_0FAE_REG_3,
700 MOD_0FAE_REG_4,
701 MOD_0FAE_REG_5,
702 MOD_0FAE_REG_6,
703 MOD_0FAE_REG_7,
704 MOD_0FB2,
705 MOD_0FB4,
706 MOD_0FB5,
707 MOD_0FC7_REG_6,
708 MOD_0FC7_REG_7,
709 MOD_0FD7,
710 MOD_0FE7_PREFIX_2,
711 MOD_0FF0_PREFIX_3,
712 MOD_0F382A_PREFIX_2,
713 MOD_62_32BIT,
714 MOD_C4_32BIT,
715 MOD_C5_32BIT,
592a252b
L
716 MOD_VEX_0F12_PREFIX_0,
717 MOD_VEX_0F13,
718 MOD_VEX_0F16_PREFIX_0,
719 MOD_VEX_0F17,
720 MOD_VEX_0F2B,
721 MOD_VEX_0F50,
722 MOD_VEX_0F71_REG_2,
723 MOD_VEX_0F71_REG_4,
724 MOD_VEX_0F71_REG_6,
725 MOD_VEX_0F72_REG_2,
726 MOD_VEX_0F72_REG_4,
727 MOD_VEX_0F72_REG_6,
728 MOD_VEX_0F73_REG_2,
729 MOD_VEX_0F73_REG_3,
730 MOD_VEX_0F73_REG_6,
731 MOD_VEX_0F73_REG_7,
732 MOD_VEX_0FAE_REG_2,
733 MOD_VEX_0FAE_REG_3,
734 MOD_VEX_0FD7_PREFIX_2,
735 MOD_VEX_0FE7_PREFIX_2,
736 MOD_VEX_0FF0_PREFIX_3,
592a252b
L
737 MOD_VEX_0F381A_PREFIX_2,
738 MOD_VEX_0F382A_PREFIX_2,
739 MOD_VEX_0F382C_PREFIX_2,
740 MOD_VEX_0F382D_PREFIX_2,
741 MOD_VEX_0F382E_PREFIX_2,
6c30d220
L
742 MOD_VEX_0F382F_PREFIX_2,
743 MOD_VEX_0F385A_PREFIX_2,
744 MOD_VEX_0F388C_PREFIX_2,
745 MOD_VEX_0F388E_PREFIX_2,
51e7da1b 746};
1ceb70f8 747
51e7da1b
L
748enum
749{
42164a71
L
750 RM_C6_REG_7 = 0,
751 RM_C7_REG_7,
752 RM_0F01_REG_0,
3873ba12
L
753 RM_0F01_REG_1,
754 RM_0F01_REG_2,
755 RM_0F01_REG_3,
756 RM_0F01_REG_7,
757 RM_0FAE_REG_5,
758 RM_0FAE_REG_6,
759 RM_0FAE_REG_7
51e7da1b 760};
1ceb70f8 761
51e7da1b
L
762enum
763{
764 PREFIX_90 = 0,
3873ba12
L
765 PREFIX_0F10,
766 PREFIX_0F11,
767 PREFIX_0F12,
768 PREFIX_0F16,
769 PREFIX_0F2A,
770 PREFIX_0F2B,
771 PREFIX_0F2C,
772 PREFIX_0F2D,
773 PREFIX_0F2E,
774 PREFIX_0F2F,
775 PREFIX_0F51,
776 PREFIX_0F52,
777 PREFIX_0F53,
778 PREFIX_0F58,
779 PREFIX_0F59,
780 PREFIX_0F5A,
781 PREFIX_0F5B,
782 PREFIX_0F5C,
783 PREFIX_0F5D,
784 PREFIX_0F5E,
785 PREFIX_0F5F,
786 PREFIX_0F60,
787 PREFIX_0F61,
788 PREFIX_0F62,
789 PREFIX_0F6C,
790 PREFIX_0F6D,
791 PREFIX_0F6F,
792 PREFIX_0F70,
793 PREFIX_0F73_REG_3,
794 PREFIX_0F73_REG_7,
795 PREFIX_0F78,
796 PREFIX_0F79,
797 PREFIX_0F7C,
798 PREFIX_0F7D,
799 PREFIX_0F7E,
800 PREFIX_0F7F,
c7b8aa3a
L
801 PREFIX_0FAE_REG_0,
802 PREFIX_0FAE_REG_1,
803 PREFIX_0FAE_REG_2,
804 PREFIX_0FAE_REG_3,
3873ba12 805 PREFIX_0FB8,
f12dc422 806 PREFIX_0FBC,
3873ba12
L
807 PREFIX_0FBD,
808 PREFIX_0FC2,
809 PREFIX_0FC3,
810 PREFIX_0FC7_REG_6,
811 PREFIX_0FD0,
812 PREFIX_0FD6,
813 PREFIX_0FE6,
814 PREFIX_0FE7,
815 PREFIX_0FF0,
816 PREFIX_0FF7,
817 PREFIX_0F3810,
818 PREFIX_0F3814,
819 PREFIX_0F3815,
820 PREFIX_0F3817,
821 PREFIX_0F3820,
822 PREFIX_0F3821,
823 PREFIX_0F3822,
824 PREFIX_0F3823,
825 PREFIX_0F3824,
826 PREFIX_0F3825,
827 PREFIX_0F3828,
828 PREFIX_0F3829,
829 PREFIX_0F382A,
830 PREFIX_0F382B,
831 PREFIX_0F3830,
832 PREFIX_0F3831,
833 PREFIX_0F3832,
834 PREFIX_0F3833,
835 PREFIX_0F3834,
836 PREFIX_0F3835,
837 PREFIX_0F3837,
838 PREFIX_0F3838,
839 PREFIX_0F3839,
840 PREFIX_0F383A,
841 PREFIX_0F383B,
842 PREFIX_0F383C,
843 PREFIX_0F383D,
844 PREFIX_0F383E,
845 PREFIX_0F383F,
846 PREFIX_0F3840,
847 PREFIX_0F3841,
848 PREFIX_0F3880,
849 PREFIX_0F3881,
6c30d220 850 PREFIX_0F3882,
3873ba12
L
851 PREFIX_0F38DB,
852 PREFIX_0F38DC,
853 PREFIX_0F38DD,
854 PREFIX_0F38DE,
855 PREFIX_0F38DF,
856 PREFIX_0F38F0,
857 PREFIX_0F38F1,
e2e1fcde 858 PREFIX_0F38F6,
3873ba12
L
859 PREFIX_0F3A08,
860 PREFIX_0F3A09,
861 PREFIX_0F3A0A,
862 PREFIX_0F3A0B,
863 PREFIX_0F3A0C,
864 PREFIX_0F3A0D,
865 PREFIX_0F3A0E,
866 PREFIX_0F3A14,
867 PREFIX_0F3A15,
868 PREFIX_0F3A16,
869 PREFIX_0F3A17,
870 PREFIX_0F3A20,
871 PREFIX_0F3A21,
872 PREFIX_0F3A22,
873 PREFIX_0F3A40,
874 PREFIX_0F3A41,
875 PREFIX_0F3A42,
876 PREFIX_0F3A44,
877 PREFIX_0F3A60,
878 PREFIX_0F3A61,
879 PREFIX_0F3A62,
880 PREFIX_0F3A63,
881 PREFIX_0F3ADF,
592a252b
L
882 PREFIX_VEX_0F10,
883 PREFIX_VEX_0F11,
884 PREFIX_VEX_0F12,
885 PREFIX_VEX_0F16,
886 PREFIX_VEX_0F2A,
887 PREFIX_VEX_0F2C,
888 PREFIX_VEX_0F2D,
889 PREFIX_VEX_0F2E,
890 PREFIX_VEX_0F2F,
891 PREFIX_VEX_0F51,
892 PREFIX_VEX_0F52,
893 PREFIX_VEX_0F53,
894 PREFIX_VEX_0F58,
895 PREFIX_VEX_0F59,
896 PREFIX_VEX_0F5A,
897 PREFIX_VEX_0F5B,
898 PREFIX_VEX_0F5C,
899 PREFIX_VEX_0F5D,
900 PREFIX_VEX_0F5E,
901 PREFIX_VEX_0F5F,
902 PREFIX_VEX_0F60,
903 PREFIX_VEX_0F61,
904 PREFIX_VEX_0F62,
905 PREFIX_VEX_0F63,
906 PREFIX_VEX_0F64,
907 PREFIX_VEX_0F65,
908 PREFIX_VEX_0F66,
909 PREFIX_VEX_0F67,
910 PREFIX_VEX_0F68,
911 PREFIX_VEX_0F69,
912 PREFIX_VEX_0F6A,
913 PREFIX_VEX_0F6B,
914 PREFIX_VEX_0F6C,
915 PREFIX_VEX_0F6D,
916 PREFIX_VEX_0F6E,
917 PREFIX_VEX_0F6F,
918 PREFIX_VEX_0F70,
919 PREFIX_VEX_0F71_REG_2,
920 PREFIX_VEX_0F71_REG_4,
921 PREFIX_VEX_0F71_REG_6,
922 PREFIX_VEX_0F72_REG_2,
923 PREFIX_VEX_0F72_REG_4,
924 PREFIX_VEX_0F72_REG_6,
925 PREFIX_VEX_0F73_REG_2,
926 PREFIX_VEX_0F73_REG_3,
927 PREFIX_VEX_0F73_REG_6,
928 PREFIX_VEX_0F73_REG_7,
929 PREFIX_VEX_0F74,
930 PREFIX_VEX_0F75,
931 PREFIX_VEX_0F76,
932 PREFIX_VEX_0F77,
933 PREFIX_VEX_0F7C,
934 PREFIX_VEX_0F7D,
935 PREFIX_VEX_0F7E,
936 PREFIX_VEX_0F7F,
937 PREFIX_VEX_0FC2,
938 PREFIX_VEX_0FC4,
939 PREFIX_VEX_0FC5,
940 PREFIX_VEX_0FD0,
941 PREFIX_VEX_0FD1,
942 PREFIX_VEX_0FD2,
943 PREFIX_VEX_0FD3,
944 PREFIX_VEX_0FD4,
945 PREFIX_VEX_0FD5,
946 PREFIX_VEX_0FD6,
947 PREFIX_VEX_0FD7,
948 PREFIX_VEX_0FD8,
949 PREFIX_VEX_0FD9,
950 PREFIX_VEX_0FDA,
951 PREFIX_VEX_0FDB,
952 PREFIX_VEX_0FDC,
953 PREFIX_VEX_0FDD,
954 PREFIX_VEX_0FDE,
955 PREFIX_VEX_0FDF,
956 PREFIX_VEX_0FE0,
957 PREFIX_VEX_0FE1,
958 PREFIX_VEX_0FE2,
959 PREFIX_VEX_0FE3,
960 PREFIX_VEX_0FE4,
961 PREFIX_VEX_0FE5,
962 PREFIX_VEX_0FE6,
963 PREFIX_VEX_0FE7,
964 PREFIX_VEX_0FE8,
965 PREFIX_VEX_0FE9,
966 PREFIX_VEX_0FEA,
967 PREFIX_VEX_0FEB,
968 PREFIX_VEX_0FEC,
969 PREFIX_VEX_0FED,
970 PREFIX_VEX_0FEE,
971 PREFIX_VEX_0FEF,
972 PREFIX_VEX_0FF0,
973 PREFIX_VEX_0FF1,
974 PREFIX_VEX_0FF2,
975 PREFIX_VEX_0FF3,
976 PREFIX_VEX_0FF4,
977 PREFIX_VEX_0FF5,
978 PREFIX_VEX_0FF6,
979 PREFIX_VEX_0FF7,
980 PREFIX_VEX_0FF8,
981 PREFIX_VEX_0FF9,
982 PREFIX_VEX_0FFA,
983 PREFIX_VEX_0FFB,
984 PREFIX_VEX_0FFC,
985 PREFIX_VEX_0FFD,
986 PREFIX_VEX_0FFE,
987 PREFIX_VEX_0F3800,
988 PREFIX_VEX_0F3801,
989 PREFIX_VEX_0F3802,
990 PREFIX_VEX_0F3803,
991 PREFIX_VEX_0F3804,
992 PREFIX_VEX_0F3805,
993 PREFIX_VEX_0F3806,
994 PREFIX_VEX_0F3807,
995 PREFIX_VEX_0F3808,
996 PREFIX_VEX_0F3809,
997 PREFIX_VEX_0F380A,
998 PREFIX_VEX_0F380B,
999 PREFIX_VEX_0F380C,
1000 PREFIX_VEX_0F380D,
1001 PREFIX_VEX_0F380E,
1002 PREFIX_VEX_0F380F,
1003 PREFIX_VEX_0F3813,
6c30d220 1004 PREFIX_VEX_0F3816,
592a252b
L
1005 PREFIX_VEX_0F3817,
1006 PREFIX_VEX_0F3818,
1007 PREFIX_VEX_0F3819,
1008 PREFIX_VEX_0F381A,
1009 PREFIX_VEX_0F381C,
1010 PREFIX_VEX_0F381D,
1011 PREFIX_VEX_0F381E,
1012 PREFIX_VEX_0F3820,
1013 PREFIX_VEX_0F3821,
1014 PREFIX_VEX_0F3822,
1015 PREFIX_VEX_0F3823,
1016 PREFIX_VEX_0F3824,
1017 PREFIX_VEX_0F3825,
1018 PREFIX_VEX_0F3828,
1019 PREFIX_VEX_0F3829,
1020 PREFIX_VEX_0F382A,
1021 PREFIX_VEX_0F382B,
1022 PREFIX_VEX_0F382C,
1023 PREFIX_VEX_0F382D,
1024 PREFIX_VEX_0F382E,
1025 PREFIX_VEX_0F382F,
1026 PREFIX_VEX_0F3830,
1027 PREFIX_VEX_0F3831,
1028 PREFIX_VEX_0F3832,
1029 PREFIX_VEX_0F3833,
1030 PREFIX_VEX_0F3834,
1031 PREFIX_VEX_0F3835,
6c30d220 1032 PREFIX_VEX_0F3836,
592a252b
L
1033 PREFIX_VEX_0F3837,
1034 PREFIX_VEX_0F3838,
1035 PREFIX_VEX_0F3839,
1036 PREFIX_VEX_0F383A,
1037 PREFIX_VEX_0F383B,
1038 PREFIX_VEX_0F383C,
1039 PREFIX_VEX_0F383D,
1040 PREFIX_VEX_0F383E,
1041 PREFIX_VEX_0F383F,
1042 PREFIX_VEX_0F3840,
1043 PREFIX_VEX_0F3841,
6c30d220
L
1044 PREFIX_VEX_0F3845,
1045 PREFIX_VEX_0F3846,
1046 PREFIX_VEX_0F3847,
1047 PREFIX_VEX_0F3858,
1048 PREFIX_VEX_0F3859,
1049 PREFIX_VEX_0F385A,
1050 PREFIX_VEX_0F3878,
1051 PREFIX_VEX_0F3879,
1052 PREFIX_VEX_0F388C,
1053 PREFIX_VEX_0F388E,
1054 PREFIX_VEX_0F3890,
1055 PREFIX_VEX_0F3891,
1056 PREFIX_VEX_0F3892,
1057 PREFIX_VEX_0F3893,
592a252b
L
1058 PREFIX_VEX_0F3896,
1059 PREFIX_VEX_0F3897,
1060 PREFIX_VEX_0F3898,
1061 PREFIX_VEX_0F3899,
1062 PREFIX_VEX_0F389A,
1063 PREFIX_VEX_0F389B,
1064 PREFIX_VEX_0F389C,
1065 PREFIX_VEX_0F389D,
1066 PREFIX_VEX_0F389E,
1067 PREFIX_VEX_0F389F,
1068 PREFIX_VEX_0F38A6,
1069 PREFIX_VEX_0F38A7,
1070 PREFIX_VEX_0F38A8,
1071 PREFIX_VEX_0F38A9,
1072 PREFIX_VEX_0F38AA,
1073 PREFIX_VEX_0F38AB,
1074 PREFIX_VEX_0F38AC,
1075 PREFIX_VEX_0F38AD,
1076 PREFIX_VEX_0F38AE,
1077 PREFIX_VEX_0F38AF,
1078 PREFIX_VEX_0F38B6,
1079 PREFIX_VEX_0F38B7,
1080 PREFIX_VEX_0F38B8,
1081 PREFIX_VEX_0F38B9,
1082 PREFIX_VEX_0F38BA,
1083 PREFIX_VEX_0F38BB,
1084 PREFIX_VEX_0F38BC,
1085 PREFIX_VEX_0F38BD,
1086 PREFIX_VEX_0F38BE,
1087 PREFIX_VEX_0F38BF,
1088 PREFIX_VEX_0F38DB,
1089 PREFIX_VEX_0F38DC,
1090 PREFIX_VEX_0F38DD,
1091 PREFIX_VEX_0F38DE,
1092 PREFIX_VEX_0F38DF,
f12dc422
L
1093 PREFIX_VEX_0F38F2,
1094 PREFIX_VEX_0F38F3_REG_1,
1095 PREFIX_VEX_0F38F3_REG_2,
1096 PREFIX_VEX_0F38F3_REG_3,
6c30d220
L
1097 PREFIX_VEX_0F38F5,
1098 PREFIX_VEX_0F38F6,
f12dc422 1099 PREFIX_VEX_0F38F7,
6c30d220
L
1100 PREFIX_VEX_0F3A00,
1101 PREFIX_VEX_0F3A01,
1102 PREFIX_VEX_0F3A02,
592a252b
L
1103 PREFIX_VEX_0F3A04,
1104 PREFIX_VEX_0F3A05,
1105 PREFIX_VEX_0F3A06,
1106 PREFIX_VEX_0F3A08,
1107 PREFIX_VEX_0F3A09,
1108 PREFIX_VEX_0F3A0A,
1109 PREFIX_VEX_0F3A0B,
1110 PREFIX_VEX_0F3A0C,
1111 PREFIX_VEX_0F3A0D,
1112 PREFIX_VEX_0F3A0E,
1113 PREFIX_VEX_0F3A0F,
1114 PREFIX_VEX_0F3A14,
1115 PREFIX_VEX_0F3A15,
1116 PREFIX_VEX_0F3A16,
1117 PREFIX_VEX_0F3A17,
1118 PREFIX_VEX_0F3A18,
1119 PREFIX_VEX_0F3A19,
1120 PREFIX_VEX_0F3A1D,
1121 PREFIX_VEX_0F3A20,
1122 PREFIX_VEX_0F3A21,
1123 PREFIX_VEX_0F3A22,
6c30d220
L
1124 PREFIX_VEX_0F3A38,
1125 PREFIX_VEX_0F3A39,
592a252b
L
1126 PREFIX_VEX_0F3A40,
1127 PREFIX_VEX_0F3A41,
1128 PREFIX_VEX_0F3A42,
1129 PREFIX_VEX_0F3A44,
6c30d220 1130 PREFIX_VEX_0F3A46,
592a252b
L
1131 PREFIX_VEX_0F3A48,
1132 PREFIX_VEX_0F3A49,
1133 PREFIX_VEX_0F3A4A,
1134 PREFIX_VEX_0F3A4B,
1135 PREFIX_VEX_0F3A4C,
1136 PREFIX_VEX_0F3A5C,
1137 PREFIX_VEX_0F3A5D,
1138 PREFIX_VEX_0F3A5E,
1139 PREFIX_VEX_0F3A5F,
1140 PREFIX_VEX_0F3A60,
1141 PREFIX_VEX_0F3A61,
1142 PREFIX_VEX_0F3A62,
1143 PREFIX_VEX_0F3A63,
1144 PREFIX_VEX_0F3A68,
1145 PREFIX_VEX_0F3A69,
1146 PREFIX_VEX_0F3A6A,
1147 PREFIX_VEX_0F3A6B,
1148 PREFIX_VEX_0F3A6C,
1149 PREFIX_VEX_0F3A6D,
1150 PREFIX_VEX_0F3A6E,
1151 PREFIX_VEX_0F3A6F,
1152 PREFIX_VEX_0F3A78,
1153 PREFIX_VEX_0F3A79,
1154 PREFIX_VEX_0F3A7A,
1155 PREFIX_VEX_0F3A7B,
1156 PREFIX_VEX_0F3A7C,
1157 PREFIX_VEX_0F3A7D,
1158 PREFIX_VEX_0F3A7E,
1159 PREFIX_VEX_0F3A7F,
6c30d220
L
1160 PREFIX_VEX_0F3ADF,
1161 PREFIX_VEX_0F3AF0
51e7da1b 1162};
4e7d34a6 1163
51e7da1b
L
1164enum
1165{
1166 X86_64_06 = 0,
3873ba12
L
1167 X86_64_07,
1168 X86_64_0D,
1169 X86_64_16,
1170 X86_64_17,
1171 X86_64_1E,
1172 X86_64_1F,
1173 X86_64_27,
1174 X86_64_2F,
1175 X86_64_37,
1176 X86_64_3F,
1177 X86_64_60,
1178 X86_64_61,
1179 X86_64_62,
1180 X86_64_63,
1181 X86_64_6D,
1182 X86_64_6F,
1183 X86_64_9A,
1184 X86_64_C4,
1185 X86_64_C5,
1186 X86_64_CE,
1187 X86_64_D4,
1188 X86_64_D5,
1189 X86_64_EA,
1190 X86_64_0F01_REG_0,
1191 X86_64_0F01_REG_1,
1192 X86_64_0F01_REG_2,
1193 X86_64_0F01_REG_3
51e7da1b 1194};
4e7d34a6 1195
51e7da1b
L
1196enum
1197{
1198 THREE_BYTE_0F38 = 0,
3873ba12
L
1199 THREE_BYTE_0F3A,
1200 THREE_BYTE_0F7A
51e7da1b 1201};
4e7d34a6 1202
f88c9eb0
SP
1203enum
1204{
5dd85c99
SP
1205 XOP_08 = 0,
1206 XOP_09,
f88c9eb0
SP
1207 XOP_0A
1208};
1209
51e7da1b
L
1210enum
1211{
1212 VEX_0F = 0,
3873ba12
L
1213 VEX_0F38,
1214 VEX_0F3A
51e7da1b 1215};
c0f3af97 1216
51e7da1b
L
1217enum
1218{
592a252b
L
1219 VEX_LEN_0F10_P_1 = 0,
1220 VEX_LEN_0F10_P_3,
1221 VEX_LEN_0F11_P_1,
1222 VEX_LEN_0F11_P_3,
1223 VEX_LEN_0F12_P_0_M_0,
1224 VEX_LEN_0F12_P_0_M_1,
1225 VEX_LEN_0F12_P_2,
1226 VEX_LEN_0F13_M_0,
1227 VEX_LEN_0F16_P_0_M_0,
1228 VEX_LEN_0F16_P_0_M_1,
1229 VEX_LEN_0F16_P_2,
1230 VEX_LEN_0F17_M_0,
1231 VEX_LEN_0F2A_P_1,
1232 VEX_LEN_0F2A_P_3,
1233 VEX_LEN_0F2C_P_1,
1234 VEX_LEN_0F2C_P_3,
1235 VEX_LEN_0F2D_P_1,
1236 VEX_LEN_0F2D_P_3,
1237 VEX_LEN_0F2E_P_0,
1238 VEX_LEN_0F2E_P_2,
1239 VEX_LEN_0F2F_P_0,
1240 VEX_LEN_0F2F_P_2,
1241 VEX_LEN_0F51_P_1,
1242 VEX_LEN_0F51_P_3,
1243 VEX_LEN_0F52_P_1,
1244 VEX_LEN_0F53_P_1,
1245 VEX_LEN_0F58_P_1,
1246 VEX_LEN_0F58_P_3,
1247 VEX_LEN_0F59_P_1,
1248 VEX_LEN_0F59_P_3,
1249 VEX_LEN_0F5A_P_1,
1250 VEX_LEN_0F5A_P_3,
1251 VEX_LEN_0F5C_P_1,
1252 VEX_LEN_0F5C_P_3,
1253 VEX_LEN_0F5D_P_1,
1254 VEX_LEN_0F5D_P_3,
1255 VEX_LEN_0F5E_P_1,
1256 VEX_LEN_0F5E_P_3,
1257 VEX_LEN_0F5F_P_1,
1258 VEX_LEN_0F5F_P_3,
592a252b 1259 VEX_LEN_0F6E_P_2,
592a252b
L
1260 VEX_LEN_0F7E_P_1,
1261 VEX_LEN_0F7E_P_2,
1262 VEX_LEN_0FAE_R_2_M_0,
1263 VEX_LEN_0FAE_R_3_M_0,
1264 VEX_LEN_0FC2_P_1,
1265 VEX_LEN_0FC2_P_3,
1266 VEX_LEN_0FC4_P_2,
1267 VEX_LEN_0FC5_P_2,
592a252b 1268 VEX_LEN_0FD6_P_2,
592a252b 1269 VEX_LEN_0FF7_P_2,
6c30d220
L
1270 VEX_LEN_0F3816_P_2,
1271 VEX_LEN_0F3819_P_2,
592a252b 1272 VEX_LEN_0F381A_P_2_M_0,
6c30d220 1273 VEX_LEN_0F3836_P_2,
592a252b 1274 VEX_LEN_0F3841_P_2,
6c30d220 1275 VEX_LEN_0F385A_P_2_M_0,
592a252b
L
1276 VEX_LEN_0F38DB_P_2,
1277 VEX_LEN_0F38DC_P_2,
1278 VEX_LEN_0F38DD_P_2,
1279 VEX_LEN_0F38DE_P_2,
1280 VEX_LEN_0F38DF_P_2,
f12dc422
L
1281 VEX_LEN_0F38F2_P_0,
1282 VEX_LEN_0F38F3_R_1_P_0,
1283 VEX_LEN_0F38F3_R_2_P_0,
1284 VEX_LEN_0F38F3_R_3_P_0,
6c30d220
L
1285 VEX_LEN_0F38F5_P_0,
1286 VEX_LEN_0F38F5_P_1,
1287 VEX_LEN_0F38F5_P_3,
1288 VEX_LEN_0F38F6_P_3,
f12dc422 1289 VEX_LEN_0F38F7_P_0,
6c30d220
L
1290 VEX_LEN_0F38F7_P_1,
1291 VEX_LEN_0F38F7_P_2,
1292 VEX_LEN_0F38F7_P_3,
1293 VEX_LEN_0F3A00_P_2,
1294 VEX_LEN_0F3A01_P_2,
592a252b
L
1295 VEX_LEN_0F3A06_P_2,
1296 VEX_LEN_0F3A0A_P_2,
1297 VEX_LEN_0F3A0B_P_2,
592a252b
L
1298 VEX_LEN_0F3A14_P_2,
1299 VEX_LEN_0F3A15_P_2,
1300 VEX_LEN_0F3A16_P_2,
1301 VEX_LEN_0F3A17_P_2,
1302 VEX_LEN_0F3A18_P_2,
1303 VEX_LEN_0F3A19_P_2,
1304 VEX_LEN_0F3A20_P_2,
1305 VEX_LEN_0F3A21_P_2,
1306 VEX_LEN_0F3A22_P_2,
6c30d220
L
1307 VEX_LEN_0F3A38_P_2,
1308 VEX_LEN_0F3A39_P_2,
592a252b 1309 VEX_LEN_0F3A41_P_2,
592a252b 1310 VEX_LEN_0F3A44_P_2,
6c30d220 1311 VEX_LEN_0F3A46_P_2,
592a252b
L
1312 VEX_LEN_0F3A60_P_2,
1313 VEX_LEN_0F3A61_P_2,
1314 VEX_LEN_0F3A62_P_2,
1315 VEX_LEN_0F3A63_P_2,
1316 VEX_LEN_0F3A6A_P_2,
1317 VEX_LEN_0F3A6B_P_2,
1318 VEX_LEN_0F3A6E_P_2,
1319 VEX_LEN_0F3A6F_P_2,
1320 VEX_LEN_0F3A7A_P_2,
1321 VEX_LEN_0F3A7B_P_2,
1322 VEX_LEN_0F3A7E_P_2,
1323 VEX_LEN_0F3A7F_P_2,
1324 VEX_LEN_0F3ADF_P_2,
6c30d220 1325 VEX_LEN_0F3AF0_P_3,
ff688e1f
L
1326 VEX_LEN_0FXOP_08_CC,
1327 VEX_LEN_0FXOP_08_CD,
1328 VEX_LEN_0FXOP_08_CE,
1329 VEX_LEN_0FXOP_08_CF,
1330 VEX_LEN_0FXOP_08_EC,
1331 VEX_LEN_0FXOP_08_ED,
1332 VEX_LEN_0FXOP_08_EE,
1333 VEX_LEN_0FXOP_08_EF,
592a252b
L
1334 VEX_LEN_0FXOP_09_80,
1335 VEX_LEN_0FXOP_09_81
51e7da1b 1336};
c0f3af97 1337
9e30b8e0
L
1338enum
1339{
592a252b
L
1340 VEX_W_0F10_P_0 = 0,
1341 VEX_W_0F10_P_1,
1342 VEX_W_0F10_P_2,
1343 VEX_W_0F10_P_3,
1344 VEX_W_0F11_P_0,
1345 VEX_W_0F11_P_1,
1346 VEX_W_0F11_P_2,
1347 VEX_W_0F11_P_3,
1348 VEX_W_0F12_P_0_M_0,
1349 VEX_W_0F12_P_0_M_1,
1350 VEX_W_0F12_P_1,
1351 VEX_W_0F12_P_2,
1352 VEX_W_0F12_P_3,
1353 VEX_W_0F13_M_0,
1354 VEX_W_0F14,
1355 VEX_W_0F15,
1356 VEX_W_0F16_P_0_M_0,
1357 VEX_W_0F16_P_0_M_1,
1358 VEX_W_0F16_P_1,
1359 VEX_W_0F16_P_2,
1360 VEX_W_0F17_M_0,
1361 VEX_W_0F28,
1362 VEX_W_0F29,
1363 VEX_W_0F2B_M_0,
1364 VEX_W_0F2E_P_0,
1365 VEX_W_0F2E_P_2,
1366 VEX_W_0F2F_P_0,
1367 VEX_W_0F2F_P_2,
1368 VEX_W_0F50_M_0,
1369 VEX_W_0F51_P_0,
1370 VEX_W_0F51_P_1,
1371 VEX_W_0F51_P_2,
1372 VEX_W_0F51_P_3,
1373 VEX_W_0F52_P_0,
1374 VEX_W_0F52_P_1,
1375 VEX_W_0F53_P_0,
1376 VEX_W_0F53_P_1,
1377 VEX_W_0F58_P_0,
1378 VEX_W_0F58_P_1,
1379 VEX_W_0F58_P_2,
1380 VEX_W_0F58_P_3,
1381 VEX_W_0F59_P_0,
1382 VEX_W_0F59_P_1,
1383 VEX_W_0F59_P_2,
1384 VEX_W_0F59_P_3,
1385 VEX_W_0F5A_P_0,
1386 VEX_W_0F5A_P_1,
1387 VEX_W_0F5A_P_3,
1388 VEX_W_0F5B_P_0,
1389 VEX_W_0F5B_P_1,
1390 VEX_W_0F5B_P_2,
1391 VEX_W_0F5C_P_0,
1392 VEX_W_0F5C_P_1,
1393 VEX_W_0F5C_P_2,
1394 VEX_W_0F5C_P_3,
1395 VEX_W_0F5D_P_0,
1396 VEX_W_0F5D_P_1,
1397 VEX_W_0F5D_P_2,
1398 VEX_W_0F5D_P_3,
1399 VEX_W_0F5E_P_0,
1400 VEX_W_0F5E_P_1,
1401 VEX_W_0F5E_P_2,
1402 VEX_W_0F5E_P_3,
1403 VEX_W_0F5F_P_0,
1404 VEX_W_0F5F_P_1,
1405 VEX_W_0F5F_P_2,
1406 VEX_W_0F5F_P_3,
1407 VEX_W_0F60_P_2,
1408 VEX_W_0F61_P_2,
1409 VEX_W_0F62_P_2,
1410 VEX_W_0F63_P_2,
1411 VEX_W_0F64_P_2,
1412 VEX_W_0F65_P_2,
1413 VEX_W_0F66_P_2,
1414 VEX_W_0F67_P_2,
1415 VEX_W_0F68_P_2,
1416 VEX_W_0F69_P_2,
1417 VEX_W_0F6A_P_2,
1418 VEX_W_0F6B_P_2,
1419 VEX_W_0F6C_P_2,
1420 VEX_W_0F6D_P_2,
1421 VEX_W_0F6F_P_1,
1422 VEX_W_0F6F_P_2,
1423 VEX_W_0F70_P_1,
1424 VEX_W_0F70_P_2,
1425 VEX_W_0F70_P_3,
1426 VEX_W_0F71_R_2_P_2,
1427 VEX_W_0F71_R_4_P_2,
1428 VEX_W_0F71_R_6_P_2,
1429 VEX_W_0F72_R_2_P_2,
1430 VEX_W_0F72_R_4_P_2,
1431 VEX_W_0F72_R_6_P_2,
1432 VEX_W_0F73_R_2_P_2,
1433 VEX_W_0F73_R_3_P_2,
1434 VEX_W_0F73_R_6_P_2,
1435 VEX_W_0F73_R_7_P_2,
1436 VEX_W_0F74_P_2,
1437 VEX_W_0F75_P_2,
1438 VEX_W_0F76_P_2,
1439 VEX_W_0F77_P_0,
1440 VEX_W_0F7C_P_2,
1441 VEX_W_0F7C_P_3,
1442 VEX_W_0F7D_P_2,
1443 VEX_W_0F7D_P_3,
1444 VEX_W_0F7E_P_1,
1445 VEX_W_0F7F_P_1,
1446 VEX_W_0F7F_P_2,
1447 VEX_W_0FAE_R_2_M_0,
1448 VEX_W_0FAE_R_3_M_0,
1449 VEX_W_0FC2_P_0,
1450 VEX_W_0FC2_P_1,
1451 VEX_W_0FC2_P_2,
1452 VEX_W_0FC2_P_3,
1453 VEX_W_0FC4_P_2,
1454 VEX_W_0FC5_P_2,
1455 VEX_W_0FD0_P_2,
1456 VEX_W_0FD0_P_3,
1457 VEX_W_0FD1_P_2,
1458 VEX_W_0FD2_P_2,
1459 VEX_W_0FD3_P_2,
1460 VEX_W_0FD4_P_2,
1461 VEX_W_0FD5_P_2,
1462 VEX_W_0FD6_P_2,
1463 VEX_W_0FD7_P_2_M_1,
1464 VEX_W_0FD8_P_2,
1465 VEX_W_0FD9_P_2,
1466 VEX_W_0FDA_P_2,
1467 VEX_W_0FDB_P_2,
1468 VEX_W_0FDC_P_2,
1469 VEX_W_0FDD_P_2,
1470 VEX_W_0FDE_P_2,
1471 VEX_W_0FDF_P_2,
1472 VEX_W_0FE0_P_2,
1473 VEX_W_0FE1_P_2,
1474 VEX_W_0FE2_P_2,
1475 VEX_W_0FE3_P_2,
1476 VEX_W_0FE4_P_2,
1477 VEX_W_0FE5_P_2,
1478 VEX_W_0FE6_P_1,
1479 VEX_W_0FE6_P_2,
1480 VEX_W_0FE6_P_3,
1481 VEX_W_0FE7_P_2_M_0,
1482 VEX_W_0FE8_P_2,
1483 VEX_W_0FE9_P_2,
1484 VEX_W_0FEA_P_2,
1485 VEX_W_0FEB_P_2,
1486 VEX_W_0FEC_P_2,
1487 VEX_W_0FED_P_2,
1488 VEX_W_0FEE_P_2,
1489 VEX_W_0FEF_P_2,
1490 VEX_W_0FF0_P_3_M_0,
1491 VEX_W_0FF1_P_2,
1492 VEX_W_0FF2_P_2,
1493 VEX_W_0FF3_P_2,
1494 VEX_W_0FF4_P_2,
1495 VEX_W_0FF5_P_2,
1496 VEX_W_0FF6_P_2,
1497 VEX_W_0FF7_P_2,
1498 VEX_W_0FF8_P_2,
1499 VEX_W_0FF9_P_2,
1500 VEX_W_0FFA_P_2,
1501 VEX_W_0FFB_P_2,
1502 VEX_W_0FFC_P_2,
1503 VEX_W_0FFD_P_2,
1504 VEX_W_0FFE_P_2,
1505 VEX_W_0F3800_P_2,
1506 VEX_W_0F3801_P_2,
1507 VEX_W_0F3802_P_2,
1508 VEX_W_0F3803_P_2,
1509 VEX_W_0F3804_P_2,
1510 VEX_W_0F3805_P_2,
1511 VEX_W_0F3806_P_2,
1512 VEX_W_0F3807_P_2,
1513 VEX_W_0F3808_P_2,
1514 VEX_W_0F3809_P_2,
1515 VEX_W_0F380A_P_2,
1516 VEX_W_0F380B_P_2,
1517 VEX_W_0F380C_P_2,
1518 VEX_W_0F380D_P_2,
1519 VEX_W_0F380E_P_2,
1520 VEX_W_0F380F_P_2,
6c30d220 1521 VEX_W_0F3816_P_2,
592a252b 1522 VEX_W_0F3817_P_2,
6c30d220
L
1523 VEX_W_0F3818_P_2,
1524 VEX_W_0F3819_P_2,
592a252b
L
1525 VEX_W_0F381A_P_2_M_0,
1526 VEX_W_0F381C_P_2,
1527 VEX_W_0F381D_P_2,
1528 VEX_W_0F381E_P_2,
1529 VEX_W_0F3820_P_2,
1530 VEX_W_0F3821_P_2,
1531 VEX_W_0F3822_P_2,
1532 VEX_W_0F3823_P_2,
1533 VEX_W_0F3824_P_2,
1534 VEX_W_0F3825_P_2,
1535 VEX_W_0F3828_P_2,
1536 VEX_W_0F3829_P_2,
1537 VEX_W_0F382A_P_2_M_0,
1538 VEX_W_0F382B_P_2,
1539 VEX_W_0F382C_P_2_M_0,
1540 VEX_W_0F382D_P_2_M_0,
1541 VEX_W_0F382E_P_2_M_0,
1542 VEX_W_0F382F_P_2_M_0,
1543 VEX_W_0F3830_P_2,
1544 VEX_W_0F3831_P_2,
1545 VEX_W_0F3832_P_2,
1546 VEX_W_0F3833_P_2,
1547 VEX_W_0F3834_P_2,
1548 VEX_W_0F3835_P_2,
6c30d220 1549 VEX_W_0F3836_P_2,
592a252b
L
1550 VEX_W_0F3837_P_2,
1551 VEX_W_0F3838_P_2,
1552 VEX_W_0F3839_P_2,
1553 VEX_W_0F383A_P_2,
1554 VEX_W_0F383B_P_2,
1555 VEX_W_0F383C_P_2,
1556 VEX_W_0F383D_P_2,
1557 VEX_W_0F383E_P_2,
1558 VEX_W_0F383F_P_2,
1559 VEX_W_0F3840_P_2,
1560 VEX_W_0F3841_P_2,
6c30d220
L
1561 VEX_W_0F3846_P_2,
1562 VEX_W_0F3858_P_2,
1563 VEX_W_0F3859_P_2,
1564 VEX_W_0F385A_P_2_M_0,
1565 VEX_W_0F3878_P_2,
1566 VEX_W_0F3879_P_2,
592a252b
L
1567 VEX_W_0F38DB_P_2,
1568 VEX_W_0F38DC_P_2,
1569 VEX_W_0F38DD_P_2,
1570 VEX_W_0F38DE_P_2,
1571 VEX_W_0F38DF_P_2,
6c30d220
L
1572 VEX_W_0F3A00_P_2,
1573 VEX_W_0F3A01_P_2,
1574 VEX_W_0F3A02_P_2,
592a252b
L
1575 VEX_W_0F3A04_P_2,
1576 VEX_W_0F3A05_P_2,
1577 VEX_W_0F3A06_P_2,
1578 VEX_W_0F3A08_P_2,
1579 VEX_W_0F3A09_P_2,
1580 VEX_W_0F3A0A_P_2,
1581 VEX_W_0F3A0B_P_2,
1582 VEX_W_0F3A0C_P_2,
1583 VEX_W_0F3A0D_P_2,
1584 VEX_W_0F3A0E_P_2,
1585 VEX_W_0F3A0F_P_2,
1586 VEX_W_0F3A14_P_2,
1587 VEX_W_0F3A15_P_2,
1588 VEX_W_0F3A18_P_2,
1589 VEX_W_0F3A19_P_2,
1590 VEX_W_0F3A20_P_2,
1591 VEX_W_0F3A21_P_2,
6c30d220
L
1592 VEX_W_0F3A38_P_2,
1593 VEX_W_0F3A39_P_2,
592a252b
L
1594 VEX_W_0F3A40_P_2,
1595 VEX_W_0F3A41_P_2,
1596 VEX_W_0F3A42_P_2,
1597 VEX_W_0F3A44_P_2,
6c30d220 1598 VEX_W_0F3A46_P_2,
592a252b
L
1599 VEX_W_0F3A48_P_2,
1600 VEX_W_0F3A49_P_2,
1601 VEX_W_0F3A4A_P_2,
1602 VEX_W_0F3A4B_P_2,
1603 VEX_W_0F3A4C_P_2,
1604 VEX_W_0F3A60_P_2,
1605 VEX_W_0F3A61_P_2,
1606 VEX_W_0F3A62_P_2,
1607 VEX_W_0F3A63_P_2,
1608 VEX_W_0F3ADF_P_2
9e30b8e0
L
1609};
1610
26ca5450 1611typedef void (*op_rtn) (int bytemode, int sizeflag);
252b5132
RH
1612
1613struct dis386 {
2da11e11 1614 const char *name;
ce518a5f
L
1615 struct
1616 {
1617 op_rtn rtn;
1618 int bytemode;
1619 } op[MAX_OPERANDS];
252b5132
RH
1620};
1621
1622/* Upper case letters in the instruction names here are macros.
1623 'A' => print 'b' if no register operands or suffix_always is true
1624 'B' => print 'b' if suffix_always is true
9306ca4a 1625 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
98b528ac 1626 size prefix
ed7841b3 1627 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
98b528ac 1628 suffix_always is true
252b5132 1629 'E' => print 'e' if 32-bit form of jcxz
3ffd33cf 1630 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
52fd6d94 1631 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
5dd0794d 1632 'H' => print ",pt" or ",pn" branch hint
9306ca4a 1633 'I' => honor following macro letter even in Intel mode (implemented only
98b528ac 1634 for some of the macro letters)
9306ca4a 1635 'J' => print 'l'
42903f7f 1636 'K' => print 'd' or 'q' if rex prefix is present.
252b5132 1637 'L' => print 'l' if suffix_always is true
9d141669 1638 'M' => print 'r' if intel_mnemonic is false.
252b5132 1639 'N' => print 'n' if instruction has no wait "prefix"
a35ca55a 1640 'O' => print 'd' or 'o' (or 'q' in Intel mode)
52b15da3 1641 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
98b528ac
L
1642 or suffix_always is true. print 'q' if rex prefix is present.
1643 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
1644 is true
a35ca55a 1645 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
52b15da3 1646 'S' => print 'w', 'l' or 'q' if suffix_always is true
6439fc28
AM
1647 'T' => print 'q' in 64bit mode and behave as 'P' otherwise
1648 'U' => print 'q' in 64bit mode and behave as 'Q' otherwise
1a114b12 1649 'V' => print 'q' in 64bit mode and behave as 'S' otherwise
a35ca55a 1650 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
9306ca4a 1651 'X' => print 's', 'd' depending on data16 prefix (for XMM)
8a72226a
L
1652 'Y' => 'q' if instruction has an REX 64bit overwrite prefix and
1653 suffix_always is true.
6dd5059a 1654 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
9d141669 1655 '!' => change condition from true to false or from false to true.
98b528ac
L
1656 '%' => add 1 upper case letter to the macro.
1657
1658 2 upper case letter macros:
c0f3af97
L
1659 "XY" => print 'x' or 'y' if no register operands or suffix_always
1660 is true.
4b06377f
L
1661 "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
1662 "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
98b528ac 1663 or suffix_always is true
4b06377f
L
1664 "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
1665 "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
1666 "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
6c30d220 1667 "LW" => print 'd', 'q' depending on the VEX.W bit
52b15da3 1668
6439fc28
AM
1669 Many of the above letters print nothing in Intel mode. See "putop"
1670 for the details.
52b15da3 1671
6439fc28 1672 Braces '{' and '}', and vertical bars '|', indicate alternative
7c52e0e8 1673 mnemonic strings for AT&T and Intel. */
252b5132 1674
6439fc28 1675static const struct dis386 dis386[] = {
252b5132 1676 /* 00 */
42164a71
L
1677 { "addB", { Ebh1, Gb } },
1678 { "addS", { Evh1, Gv } },
c7532693
L
1679 { "addB", { Gb, EbS } },
1680 { "addS", { Gv, EvS } },
ce518a5f
L
1681 { "addB", { AL, Ib } },
1682 { "addS", { eAX, Iv } },
4e7d34a6
L
1683 { X86_64_TABLE (X86_64_06) },
1684 { X86_64_TABLE (X86_64_07) },
252b5132 1685 /* 08 */
42164a71
L
1686 { "orB", { Ebh1, Gb } },
1687 { "orS", { Evh1, Gv } },
c7532693
L
1688 { "orB", { Gb, EbS } },
1689 { "orS", { Gv, EvS } },
ce518a5f
L
1690 { "orB", { AL, Ib } },
1691 { "orS", { eAX, Iv } },
4e7d34a6 1692 { X86_64_TABLE (X86_64_0D) },
592d1631 1693 { Bad_Opcode }, /* 0x0f extended opcode escape */
252b5132 1694 /* 10 */
42164a71
L
1695 { "adcB", { Ebh1, Gb } },
1696 { "adcS", { Evh1, Gv } },
c7532693
L
1697 { "adcB", { Gb, EbS } },
1698 { "adcS", { Gv, EvS } },
ce518a5f
L
1699 { "adcB", { AL, Ib } },
1700 { "adcS", { eAX, Iv } },
4e7d34a6
L
1701 { X86_64_TABLE (X86_64_16) },
1702 { X86_64_TABLE (X86_64_17) },
252b5132 1703 /* 18 */
42164a71
L
1704 { "sbbB", { Ebh1, Gb } },
1705 { "sbbS", { Evh1, Gv } },
c7532693
L
1706 { "sbbB", { Gb, EbS } },
1707 { "sbbS", { Gv, EvS } },
ce518a5f
L
1708 { "sbbB", { AL, Ib } },
1709 { "sbbS", { eAX, Iv } },
4e7d34a6
L
1710 { X86_64_TABLE (X86_64_1E) },
1711 { X86_64_TABLE (X86_64_1F) },
252b5132 1712 /* 20 */
42164a71
L
1713 { "andB", { Ebh1, Gb } },
1714 { "andS", { Evh1, Gv } },
c7532693
L
1715 { "andB", { Gb, EbS } },
1716 { "andS", { Gv, EvS } },
ce518a5f
L
1717 { "andB", { AL, Ib } },
1718 { "andS", { eAX, Iv } },
592d1631 1719 { Bad_Opcode }, /* SEG ES prefix */
4e7d34a6 1720 { X86_64_TABLE (X86_64_27) },
252b5132 1721 /* 28 */
42164a71
L
1722 { "subB", { Ebh1, Gb } },
1723 { "subS", { Evh1, Gv } },
c7532693
L
1724 { "subB", { Gb, EbS } },
1725 { "subS", { Gv, EvS } },
ce518a5f
L
1726 { "subB", { AL, Ib } },
1727 { "subS", { eAX, Iv } },
592d1631 1728 { Bad_Opcode }, /* SEG CS prefix */
4e7d34a6 1729 { X86_64_TABLE (X86_64_2F) },
252b5132 1730 /* 30 */
42164a71
L
1731 { "xorB", { Ebh1, Gb } },
1732 { "xorS", { Evh1, Gv } },
c7532693
L
1733 { "xorB", { Gb, EbS } },
1734 { "xorS", { Gv, EvS } },
ce518a5f
L
1735 { "xorB", { AL, Ib } },
1736 { "xorS", { eAX, Iv } },
592d1631 1737 { Bad_Opcode }, /* SEG SS prefix */
4e7d34a6 1738 { X86_64_TABLE (X86_64_37) },
252b5132 1739 /* 38 */
ce518a5f
L
1740 { "cmpB", { Eb, Gb } },
1741 { "cmpS", { Ev, Gv } },
c7532693
L
1742 { "cmpB", { Gb, EbS } },
1743 { "cmpS", { Gv, EvS } },
ce518a5f
L
1744 { "cmpB", { AL, Ib } },
1745 { "cmpS", { eAX, Iv } },
592d1631 1746 { Bad_Opcode }, /* SEG DS prefix */
4e7d34a6 1747 { X86_64_TABLE (X86_64_3F) },
252b5132 1748 /* 40 */
ce518a5f
L
1749 { "inc{S|}", { RMeAX } },
1750 { "inc{S|}", { RMeCX } },
1751 { "inc{S|}", { RMeDX } },
1752 { "inc{S|}", { RMeBX } },
1753 { "inc{S|}", { RMeSP } },
1754 { "inc{S|}", { RMeBP } },
1755 { "inc{S|}", { RMeSI } },
1756 { "inc{S|}", { RMeDI } },
252b5132 1757 /* 48 */
ce518a5f
L
1758 { "dec{S|}", { RMeAX } },
1759 { "dec{S|}", { RMeCX } },
1760 { "dec{S|}", { RMeDX } },
1761 { "dec{S|}", { RMeBX } },
1762 { "dec{S|}", { RMeSP } },
1763 { "dec{S|}", { RMeBP } },
1764 { "dec{S|}", { RMeSI } },
1765 { "dec{S|}", { RMeDI } },
252b5132 1766 /* 50 */
ce518a5f
L
1767 { "pushV", { RMrAX } },
1768 { "pushV", { RMrCX } },
1769 { "pushV", { RMrDX } },
1770 { "pushV", { RMrBX } },
1771 { "pushV", { RMrSP } },
1772 { "pushV", { RMrBP } },
1773 { "pushV", { RMrSI } },
1774 { "pushV", { RMrDI } },
252b5132 1775 /* 58 */
ce518a5f
L
1776 { "popV", { RMrAX } },
1777 { "popV", { RMrCX } },
1778 { "popV", { RMrDX } },
1779 { "popV", { RMrBX } },
1780 { "popV", { RMrSP } },
1781 { "popV", { RMrBP } },
1782 { "popV", { RMrSI } },
1783 { "popV", { RMrDI } },
252b5132 1784 /* 60 */
4e7d34a6
L
1785 { X86_64_TABLE (X86_64_60) },
1786 { X86_64_TABLE (X86_64_61) },
1787 { X86_64_TABLE (X86_64_62) },
1788 { X86_64_TABLE (X86_64_63) },
592d1631
L
1789 { Bad_Opcode }, /* seg fs */
1790 { Bad_Opcode }, /* seg gs */
1791 { Bad_Opcode }, /* op size prefix */
1792 { Bad_Opcode }, /* adr size prefix */
252b5132 1793 /* 68 */
d9e3625e 1794 { "pushT", { sIv } },
ce518a5f 1795 { "imulS", { Gv, Ev, Iv } },
e3949f17 1796 { "pushT", { sIbT } },
ce518a5f 1797 { "imulS", { Gv, Ev, sIb } },
7c52e0e8 1798 { "ins{b|}", { Ybr, indirDX } },
4e7d34a6 1799 { X86_64_TABLE (X86_64_6D) },
7c52e0e8 1800 { "outs{b|}", { indirDXr, Xb } },
4e7d34a6 1801 { X86_64_TABLE (X86_64_6F) },
252b5132 1802 /* 70 */
ce518a5f
L
1803 { "joH", { Jb, XX, cond_jump_flag } },
1804 { "jnoH", { Jb, XX, cond_jump_flag } },
1805 { "jbH", { Jb, XX, cond_jump_flag } },
1806 { "jaeH", { Jb, XX, cond_jump_flag } },
1807 { "jeH", { Jb, XX, cond_jump_flag } },
1808 { "jneH", { Jb, XX, cond_jump_flag } },
1809 { "jbeH", { Jb, XX, cond_jump_flag } },
1810 { "jaH", { Jb, XX, cond_jump_flag } },
252b5132 1811 /* 78 */
ce518a5f
L
1812 { "jsH", { Jb, XX, cond_jump_flag } },
1813 { "jnsH", { Jb, XX, cond_jump_flag } },
1814 { "jpH", { Jb, XX, cond_jump_flag } },
1815 { "jnpH", { Jb, XX, cond_jump_flag } },
1816 { "jlH", { Jb, XX, cond_jump_flag } },
1817 { "jgeH", { Jb, XX, cond_jump_flag } },
1818 { "jleH", { Jb, XX, cond_jump_flag } },
1819 { "jgH", { Jb, XX, cond_jump_flag } },
252b5132 1820 /* 80 */
1ceb70f8
L
1821 { REG_TABLE (REG_80) },
1822 { REG_TABLE (REG_81) },
592d1631 1823 { Bad_Opcode },
1ceb70f8 1824 { REG_TABLE (REG_82) },
ce518a5f
L
1825 { "testB", { Eb, Gb } },
1826 { "testS", { Ev, Gv } },
42164a71
L
1827 { "xchgB", { Ebh2, Gb } },
1828 { "xchgS", { Evh2, Gv } },
252b5132 1829 /* 88 */
42164a71
L
1830 { "movB", { Ebh3, Gb } },
1831 { "movS", { Evh3, Gv } },
b6169b20
L
1832 { "movB", { Gb, EbS } },
1833 { "movS", { Gv, EvS } },
ce518a5f 1834 { "movD", { Sv, Sw } },
1ceb70f8 1835 { MOD_TABLE (MOD_8D) },
ce518a5f 1836 { "movD", { Sw, Sv } },
1ceb70f8 1837 { REG_TABLE (REG_8F) },
252b5132 1838 /* 90 */
1ceb70f8 1839 { PREFIX_TABLE (PREFIX_90) },
ce518a5f
L
1840 { "xchgS", { RMeCX, eAX } },
1841 { "xchgS", { RMeDX, eAX } },
1842 { "xchgS", { RMeBX, eAX } },
1843 { "xchgS", { RMeSP, eAX } },
1844 { "xchgS", { RMeBP, eAX } },
1845 { "xchgS", { RMeSI, eAX } },
1846 { "xchgS", { RMeDI, eAX } },
252b5132 1847 /* 98 */
7c52e0e8
L
1848 { "cW{t|}R", { XX } },
1849 { "cR{t|}O", { XX } },
4e7d34a6 1850 { X86_64_TABLE (X86_64_9A) },
592d1631 1851 { Bad_Opcode }, /* fwait */
ce518a5f
L
1852 { "pushfT", { XX } },
1853 { "popfT", { XX } },
7c52e0e8
L
1854 { "sahf", { XX } },
1855 { "lahf", { XX } },
252b5132 1856 /* a0 */
4b06377f
L
1857 { "mov%LB", { AL, Ob } },
1858 { "mov%LS", { eAX, Ov } },
1859 { "mov%LB", { Ob, AL } },
1860 { "mov%LS", { Ov, eAX } },
7c52e0e8
L
1861 { "movs{b|}", { Ybr, Xb } },
1862 { "movs{R|}", { Yvr, Xv } },
1863 { "cmps{b|}", { Xb, Yb } },
1864 { "cmps{R|}", { Xv, Yv } },
252b5132 1865 /* a8 */
ce518a5f
L
1866 { "testB", { AL, Ib } },
1867 { "testS", { eAX, Iv } },
1868 { "stosB", { Ybr, AL } },
1869 { "stosS", { Yvr, eAX } },
1870 { "lodsB", { ALr, Xb } },
1871 { "lodsS", { eAXr, Xv } },
1872 { "scasB", { AL, Yb } },
1873 { "scasS", { eAX, Yv } },
252b5132 1874 /* b0 */
ce518a5f
L
1875 { "movB", { RMAL, Ib } },
1876 { "movB", { RMCL, Ib } },
1877 { "movB", { RMDL, Ib } },
1878 { "movB", { RMBL, Ib } },
1879 { "movB", { RMAH, Ib } },
1880 { "movB", { RMCH, Ib } },
1881 { "movB", { RMDH, Ib } },
1882 { "movB", { RMBH, Ib } },
252b5132 1883 /* b8 */
4b06377f
L
1884 { "mov%LV", { RMeAX, Iv64 } },
1885 { "mov%LV", { RMeCX, Iv64 } },
1886 { "mov%LV", { RMeDX, Iv64 } },
1887 { "mov%LV", { RMeBX, Iv64 } },
1888 { "mov%LV", { RMeSP, Iv64 } },
1889 { "mov%LV", { RMeBP, Iv64 } },
1890 { "mov%LV", { RMeSI, Iv64 } },
1891 { "mov%LV", { RMeDI, Iv64 } },
252b5132 1892 /* c0 */
1ceb70f8
L
1893 { REG_TABLE (REG_C0) },
1894 { REG_TABLE (REG_C1) },
ce518a5f
L
1895 { "retT", { Iw } },
1896 { "retT", { XX } },
4e7d34a6
L
1897 { X86_64_TABLE (X86_64_C4) },
1898 { X86_64_TABLE (X86_64_C5) },
1ceb70f8
L
1899 { REG_TABLE (REG_C6) },
1900 { REG_TABLE (REG_C7) },
252b5132 1901 /* c8 */
ce518a5f
L
1902 { "enterT", { Iw, Ib } },
1903 { "leaveT", { XX } },
ddab3d59
JB
1904 { "Jret{|f}P", { Iw } },
1905 { "Jret{|f}P", { XX } },
ce518a5f
L
1906 { "int3", { XX } },
1907 { "int", { Ib } },
4e7d34a6 1908 { X86_64_TABLE (X86_64_CE) },
ce518a5f 1909 { "iretP", { XX } },
252b5132 1910 /* d0 */
1ceb70f8
L
1911 { REG_TABLE (REG_D0) },
1912 { REG_TABLE (REG_D1) },
1913 { REG_TABLE (REG_D2) },
1914 { REG_TABLE (REG_D3) },
4e7d34a6
L
1915 { X86_64_TABLE (X86_64_D4) },
1916 { X86_64_TABLE (X86_64_D5) },
592d1631 1917 { Bad_Opcode },
ce518a5f 1918 { "xlat", { DSBX } },
252b5132
RH
1919 /* d8 */
1920 { FLOAT },
1921 { FLOAT },
1922 { FLOAT },
1923 { FLOAT },
1924 { FLOAT },
1925 { FLOAT },
1926 { FLOAT },
1927 { FLOAT },
1928 /* e0 */
ce518a5f
L
1929 { "loopneFH", { Jb, XX, loop_jcxz_flag } },
1930 { "loopeFH", { Jb, XX, loop_jcxz_flag } },
1931 { "loopFH", { Jb, XX, loop_jcxz_flag } },
1932 { "jEcxzH", { Jb, XX, loop_jcxz_flag } },
1933 { "inB", { AL, Ib } },
1934 { "inG", { zAX, Ib } },
1935 { "outB", { Ib, AL } },
1936 { "outG", { Ib, zAX } },
252b5132 1937 /* e8 */
ce518a5f
L
1938 { "callT", { Jv } },
1939 { "jmpT", { Jv } },
4e7d34a6 1940 { X86_64_TABLE (X86_64_EA) },
ce518a5f
L
1941 { "jmp", { Jb } },
1942 { "inB", { AL, indirDX } },
1943 { "inG", { zAX, indirDX } },
1944 { "outB", { indirDX, AL } },
1945 { "outG", { indirDX, zAX } },
252b5132 1946 /* f0 */
592d1631 1947 { Bad_Opcode }, /* lock prefix */
ce518a5f 1948 { "icebp", { XX } },
592d1631
L
1949 { Bad_Opcode }, /* repne */
1950 { Bad_Opcode }, /* repz */
ce518a5f
L
1951 { "hlt", { XX } },
1952 { "cmc", { XX } },
1ceb70f8
L
1953 { REG_TABLE (REG_F6) },
1954 { REG_TABLE (REG_F7) },
252b5132 1955 /* f8 */
ce518a5f
L
1956 { "clc", { XX } },
1957 { "stc", { XX } },
1958 { "cli", { XX } },
1959 { "sti", { XX } },
1960 { "cld", { XX } },
1961 { "std", { XX } },
1ceb70f8
L
1962 { REG_TABLE (REG_FE) },
1963 { REG_TABLE (REG_FF) },
252b5132
RH
1964};
1965
6439fc28 1966static const struct dis386 dis386_twobyte[] = {
252b5132 1967 /* 00 */
1ceb70f8
L
1968 { REG_TABLE (REG_0F00 ) },
1969 { REG_TABLE (REG_0F01 ) },
ce518a5f
L
1970 { "larS", { Gv, Ew } },
1971 { "lslS", { Gv, Ew } },
592d1631 1972 { Bad_Opcode },
ce518a5f
L
1973 { "syscall", { XX } },
1974 { "clts", { XX } },
1975 { "sysretP", { XX } },
252b5132 1976 /* 08 */
ce518a5f
L
1977 { "invd", { XX } },
1978 { "wbinvd", { XX } },
592d1631 1979 { Bad_Opcode },
b414985b 1980 { "ud2", { XX } },
592d1631 1981 { Bad_Opcode },
b5b1fc4f 1982 { REG_TABLE (REG_0F0D) },
ce518a5f
L
1983 { "femms", { XX } },
1984 { "", { MX, EM, OPSUF } }, /* See OP_3DNowSuffix. */
252b5132 1985 /* 10 */
1ceb70f8
L
1986 { PREFIX_TABLE (PREFIX_0F10) },
1987 { PREFIX_TABLE (PREFIX_0F11) },
1988 { PREFIX_TABLE (PREFIX_0F12) },
1989 { MOD_TABLE (MOD_0F13) },
f2a421c4
L
1990 { "unpcklpX", { XM, EXx } },
1991 { "unpckhpX", { XM, EXx } },
1ceb70f8
L
1992 { PREFIX_TABLE (PREFIX_0F16) },
1993 { MOD_TABLE (MOD_0F17) },
252b5132 1994 /* 18 */
1ceb70f8 1995 { REG_TABLE (REG_0F18) },
b5b1fc4f
L
1996 { "nopQ", { Ev } },
1997 { "nopQ", { Ev } },
1998 { "nopQ", { Ev } },
1999 { "nopQ", { Ev } },
2000 { "nopQ", { Ev } },
2001 { "nopQ", { Ev } },
ce518a5f 2002 { "nopQ", { Ev } },
252b5132 2003 /* 20 */
1ceb70f8
L
2004 { MOD_TABLE (MOD_0F20) },
2005 { MOD_TABLE (MOD_0F21) },
2006 { MOD_TABLE (MOD_0F22) },
2007 { MOD_TABLE (MOD_0F23) },
2008 { MOD_TABLE (MOD_0F24) },
592d1631 2009 { Bad_Opcode },
1ceb70f8 2010 { MOD_TABLE (MOD_0F26) },
592d1631 2011 { Bad_Opcode },
252b5132 2012 /* 28 */
09a2c6cf 2013 { "movapX", { XM, EXx } },
b6169b20 2014 { "movapX", { EXxS, XM } },
1ceb70f8
L
2015 { PREFIX_TABLE (PREFIX_0F2A) },
2016 { PREFIX_TABLE (PREFIX_0F2B) },
2017 { PREFIX_TABLE (PREFIX_0F2C) },
2018 { PREFIX_TABLE (PREFIX_0F2D) },
2019 { PREFIX_TABLE (PREFIX_0F2E) },
2020 { PREFIX_TABLE (PREFIX_0F2F) },
252b5132 2021 /* 30 */
ce518a5f
L
2022 { "wrmsr", { XX } },
2023 { "rdtsc", { XX } },
2024 { "rdmsr", { XX } },
2025 { "rdpmc", { XX } },
2026 { "sysenter", { XX } },
2027 { "sysexit", { XX } },
592d1631 2028 { Bad_Opcode },
47dd174c 2029 { "getsec", { XX } },
252b5132 2030 /* 38 */
4e7d34a6 2031 { THREE_BYTE_TABLE (THREE_BYTE_0F38) },
592d1631 2032 { Bad_Opcode },
4e7d34a6 2033 { THREE_BYTE_TABLE (THREE_BYTE_0F3A) },
592d1631
L
2034 { Bad_Opcode },
2035 { Bad_Opcode },
2036 { Bad_Opcode },
2037 { Bad_Opcode },
2038 { Bad_Opcode },
252b5132 2039 /* 40 */
b19d5385
JB
2040 { "cmovoS", { Gv, Ev } },
2041 { "cmovnoS", { Gv, Ev } },
2042 { "cmovbS", { Gv, Ev } },
2043 { "cmovaeS", { Gv, Ev } },
2044 { "cmoveS", { Gv, Ev } },
2045 { "cmovneS", { Gv, Ev } },
2046 { "cmovbeS", { Gv, Ev } },
2047 { "cmovaS", { Gv, Ev } },
252b5132 2048 /* 48 */
b19d5385
JB
2049 { "cmovsS", { Gv, Ev } },
2050 { "cmovnsS", { Gv, Ev } },
2051 { "cmovpS", { Gv, Ev } },
2052 { "cmovnpS", { Gv, Ev } },
2053 { "cmovlS", { Gv, Ev } },
2054 { "cmovgeS", { Gv, Ev } },
2055 { "cmovleS", { Gv, Ev } },
2056 { "cmovgS", { Gv, Ev } },
252b5132 2057 /* 50 */
75c135a8 2058 { MOD_TABLE (MOD_0F51) },
1ceb70f8
L
2059 { PREFIX_TABLE (PREFIX_0F51) },
2060 { PREFIX_TABLE (PREFIX_0F52) },
2061 { PREFIX_TABLE (PREFIX_0F53) },
09a2c6cf
L
2062 { "andpX", { XM, EXx } },
2063 { "andnpX", { XM, EXx } },
2064 { "orpX", { XM, EXx } },
2065 { "xorpX", { XM, EXx } },
252b5132 2066 /* 58 */
1ceb70f8
L
2067 { PREFIX_TABLE (PREFIX_0F58) },
2068 { PREFIX_TABLE (PREFIX_0F59) },
2069 { PREFIX_TABLE (PREFIX_0F5A) },
2070 { PREFIX_TABLE (PREFIX_0F5B) },
2071 { PREFIX_TABLE (PREFIX_0F5C) },
2072 { PREFIX_TABLE (PREFIX_0F5D) },
2073 { PREFIX_TABLE (PREFIX_0F5E) },
2074 { PREFIX_TABLE (PREFIX_0F5F) },
252b5132 2075 /* 60 */
1ceb70f8
L
2076 { PREFIX_TABLE (PREFIX_0F60) },
2077 { PREFIX_TABLE (PREFIX_0F61) },
2078 { PREFIX_TABLE (PREFIX_0F62) },
ce518a5f
L
2079 { "packsswb", { MX, EM } },
2080 { "pcmpgtb", { MX, EM } },
2081 { "pcmpgtw", { MX, EM } },
2082 { "pcmpgtd", { MX, EM } },
2083 { "packuswb", { MX, EM } },
252b5132 2084 /* 68 */
ce518a5f
L
2085 { "punpckhbw", { MX, EM } },
2086 { "punpckhwd", { MX, EM } },
2087 { "punpckhdq", { MX, EM } },
2088 { "packssdw", { MX, EM } },
1ceb70f8
L
2089 { PREFIX_TABLE (PREFIX_0F6C) },
2090 { PREFIX_TABLE (PREFIX_0F6D) },
231af070 2091 { "movK", { MX, Edq } },
1ceb70f8 2092 { PREFIX_TABLE (PREFIX_0F6F) },
252b5132 2093 /* 70 */
1ceb70f8
L
2094 { PREFIX_TABLE (PREFIX_0F70) },
2095 { REG_TABLE (REG_0F71) },
2096 { REG_TABLE (REG_0F72) },
2097 { REG_TABLE (REG_0F73) },
ce518a5f
L
2098 { "pcmpeqb", { MX, EM } },
2099 { "pcmpeqw", { MX, EM } },
2100 { "pcmpeqd", { MX, EM } },
2101 { "emms", { XX } },
252b5132 2102 /* 78 */
1ceb70f8
L
2103 { PREFIX_TABLE (PREFIX_0F78) },
2104 { PREFIX_TABLE (PREFIX_0F79) },
4e7d34a6 2105 { THREE_BYTE_TABLE (THREE_BYTE_0F7A) },
592d1631 2106 { Bad_Opcode },
1ceb70f8
L
2107 { PREFIX_TABLE (PREFIX_0F7C) },
2108 { PREFIX_TABLE (PREFIX_0F7D) },
2109 { PREFIX_TABLE (PREFIX_0F7E) },
2110 { PREFIX_TABLE (PREFIX_0F7F) },
252b5132 2111 /* 80 */
ce518a5f
L
2112 { "joH", { Jv, XX, cond_jump_flag } },
2113 { "jnoH", { Jv, XX, cond_jump_flag } },
2114 { "jbH", { Jv, XX, cond_jump_flag } },
2115 { "jaeH", { Jv, XX, cond_jump_flag } },
2116 { "jeH", { Jv, XX, cond_jump_flag } },
2117 { "jneH", { Jv, XX, cond_jump_flag } },
2118 { "jbeH", { Jv, XX, cond_jump_flag } },
2119 { "jaH", { Jv, XX, cond_jump_flag } },
252b5132 2120 /* 88 */
ce518a5f
L
2121 { "jsH", { Jv, XX, cond_jump_flag } },
2122 { "jnsH", { Jv, XX, cond_jump_flag } },
2123 { "jpH", { Jv, XX, cond_jump_flag } },
2124 { "jnpH", { Jv, XX, cond_jump_flag } },
2125 { "jlH", { Jv, XX, cond_jump_flag } },
2126 { "jgeH", { Jv, XX, cond_jump_flag } },
2127 { "jleH", { Jv, XX, cond_jump_flag } },
2128 { "jgH", { Jv, XX, cond_jump_flag } },
252b5132 2129 /* 90 */
ce518a5f
L
2130 { "seto", { Eb } },
2131 { "setno", { Eb } },
2132 { "setb", { Eb } },
2133 { "setae", { Eb } },
2134 { "sete", { Eb } },
2135 { "setne", { Eb } },
2136 { "setbe", { Eb } },
2137 { "seta", { Eb } },
252b5132 2138 /* 98 */
ce518a5f
L
2139 { "sets", { Eb } },
2140 { "setns", { Eb } },
2141 { "setp", { Eb } },
2142 { "setnp", { Eb } },
2143 { "setl", { Eb } },
2144 { "setge", { Eb } },
2145 { "setle", { Eb } },
2146 { "setg", { Eb } },
252b5132 2147 /* a0 */
ce518a5f
L
2148 { "pushT", { fs } },
2149 { "popT", { fs } },
2150 { "cpuid", { XX } },
2151 { "btS", { Ev, Gv } },
2152 { "shldS", { Ev, Gv, Ib } },
2153 { "shldS", { Ev, Gv, CL } },
1ceb70f8
L
2154 { REG_TABLE (REG_0FA6) },
2155 { REG_TABLE (REG_0FA7) },
252b5132 2156 /* a8 */
ce518a5f
L
2157 { "pushT", { gs } },
2158 { "popT", { gs } },
2159 { "rsm", { XX } },
42164a71 2160 { "btsS", { Evh1, Gv } },
ce518a5f
L
2161 { "shrdS", { Ev, Gv, Ib } },
2162 { "shrdS", { Ev, Gv, CL } },
1ceb70f8 2163 { REG_TABLE (REG_0FAE) },
ce518a5f 2164 { "imulS", { Gv, Ev } },
252b5132 2165 /* b0 */
42164a71
L
2166 { "cmpxchgB", { Ebh1, Gb } },
2167 { "cmpxchgS", { Evh1, Gv } },
1ceb70f8 2168 { MOD_TABLE (MOD_0FB2) },
42164a71 2169 { "btrS", { Evh1, Gv } },
1ceb70f8
L
2170 { MOD_TABLE (MOD_0FB4) },
2171 { MOD_TABLE (MOD_0FB5) },
7c52e0e8
L
2172 { "movz{bR|x}", { Gv, Eb } },
2173 { "movz{wR|x}", { Gv, Ew } }, /* yes, there really is movzww ! */
252b5132 2174 /* b8 */
1ceb70f8 2175 { PREFIX_TABLE (PREFIX_0FB8) },
b414985b 2176 { "ud1", { XX } },
1ceb70f8 2177 { REG_TABLE (REG_0FBA) },
42164a71 2178 { "btcS", { Evh1, Gv } },
f12dc422 2179 { PREFIX_TABLE (PREFIX_0FBC) },
1ceb70f8 2180 { PREFIX_TABLE (PREFIX_0FBD) },
7c52e0e8
L
2181 { "movs{bR|x}", { Gv, Eb } },
2182 { "movs{wR|x}", { Gv, Ew } }, /* yes, there really is movsww ! */
252b5132 2183 /* c0 */
42164a71
L
2184 { "xaddB", { Ebh1, Gb } },
2185 { "xaddS", { Evh1, Gv } },
1ceb70f8 2186 { PREFIX_TABLE (PREFIX_0FC2) },
4ee52178 2187 { PREFIX_TABLE (PREFIX_0FC3) },
ce518a5f
L
2188 { "pinsrw", { MX, Edqw, Ib } },
2189 { "pextrw", { Gdq, MS, Ib } },
09a2c6cf 2190 { "shufpX", { XM, EXx, Ib } },
1ceb70f8 2191 { REG_TABLE (REG_0FC7) },
252b5132 2192 /* c8 */
ce518a5f
L
2193 { "bswap", { RMeAX } },
2194 { "bswap", { RMeCX } },
2195 { "bswap", { RMeDX } },
2196 { "bswap", { RMeBX } },
2197 { "bswap", { RMeSP } },
2198 { "bswap", { RMeBP } },
2199 { "bswap", { RMeSI } },
2200 { "bswap", { RMeDI } },
252b5132 2201 /* d0 */
1ceb70f8 2202 { PREFIX_TABLE (PREFIX_0FD0) },
ce518a5f
L
2203 { "psrlw", { MX, EM } },
2204 { "psrld", { MX, EM } },
2205 { "psrlq", { MX, EM } },
2206 { "paddq", { MX, EM } },
2207 { "pmullw", { MX, EM } },
1ceb70f8 2208 { PREFIX_TABLE (PREFIX_0FD6) },
75c135a8 2209 { MOD_TABLE (MOD_0FD7) },
252b5132 2210 /* d8 */
ce518a5f
L
2211 { "psubusb", { MX, EM } },
2212 { "psubusw", { MX, EM } },
2213 { "pminub", { MX, EM } },
2214 { "pand", { MX, EM } },
2215 { "paddusb", { MX, EM } },
2216 { "paddusw", { MX, EM } },
2217 { "pmaxub", { MX, EM } },
2218 { "pandn", { MX, EM } },
252b5132 2219 /* e0 */
ce518a5f
L
2220 { "pavgb", { MX, EM } },
2221 { "psraw", { MX, EM } },
2222 { "psrad", { MX, EM } },
2223 { "pavgw", { MX, EM } },
2224 { "pmulhuw", { MX, EM } },
2225 { "pmulhw", { MX, EM } },
1ceb70f8
L
2226 { PREFIX_TABLE (PREFIX_0FE6) },
2227 { PREFIX_TABLE (PREFIX_0FE7) },
252b5132 2228 /* e8 */
ce518a5f
L
2229 { "psubsb", { MX, EM } },
2230 { "psubsw", { MX, EM } },
2231 { "pminsw", { MX, EM } },
2232 { "por", { MX, EM } },
2233 { "paddsb", { MX, EM } },
2234 { "paddsw", { MX, EM } },
2235 { "pmaxsw", { MX, EM } },
2236 { "pxor", { MX, EM } },
252b5132 2237 /* f0 */
1ceb70f8 2238 { PREFIX_TABLE (PREFIX_0FF0) },
ce518a5f
L
2239 { "psllw", { MX, EM } },
2240 { "pslld", { MX, EM } },
2241 { "psllq", { MX, EM } },
2242 { "pmuludq", { MX, EM } },
2243 { "pmaddwd", { MX, EM } },
2244 { "psadbw", { MX, EM } },
1ceb70f8 2245 { PREFIX_TABLE (PREFIX_0FF7) },
252b5132 2246 /* f8 */
ce518a5f
L
2247 { "psubb", { MX, EM } },
2248 { "psubw", { MX, EM } },
2249 { "psubd", { MX, EM } },
2250 { "psubq", { MX, EM } },
2251 { "paddb", { MX, EM } },
2252 { "paddw", { MX, EM } },
2253 { "paddd", { MX, EM } },
592d1631 2254 { Bad_Opcode },
252b5132
RH
2255};
2256
2257static const unsigned char onebyte_has_modrm[256] = {
c608c12e
AM
2258 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2259 /* ------------------------------- */
2260 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
2261 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
2262 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
2263 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
2264 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
2265 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
2266 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
2267 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
2268 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
2269 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
2270 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
2271 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
2272 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
2273 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
2274 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
2275 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
2276 /* ------------------------------- */
2277 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
252b5132
RH
2278};
2279
2280static const unsigned char twobyte_has_modrm[256] = {
c608c12e
AM
2281 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2282 /* ------------------------------- */
252b5132 2283 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
b5b1fc4f 2284 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
85f10a01 2285 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
331d2d0d 2286 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
252b5132 2287 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
4bba6815
AM
2288 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
2289 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
85f10a01 2290 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
252b5132
RH
2291 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
2292 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
30d1c836 2293 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
050dfa73 2294 /* b0 */ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* bf */
252b5132 2295 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
ca164297 2296 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
4bba6815 2297 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
ca164297 2298 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* ff */
c608c12e
AM
2299 /* ------------------------------- */
2300 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2301};
2302
252b5132
RH
2303static char obuf[100];
2304static char *obufp;
ea397f5b 2305static char *mnemonicendp;
252b5132
RH
2306static char scratchbuf[100];
2307static unsigned char *start_codep;
2308static unsigned char *insn_codep;
2309static unsigned char *codep;
f16cd0d5
L
2310static int last_lock_prefix;
2311static int last_repz_prefix;
2312static int last_repnz_prefix;
2313static int last_data_prefix;
2314static int last_addr_prefix;
2315static int last_rex_prefix;
2316static int last_seg_prefix;
2317#define MAX_CODE_LENGTH 15
2318/* We can up to 14 prefixes since the maximum instruction length is
2319 15bytes. */
2320static int all_prefixes[MAX_CODE_LENGTH - 1];
252b5132 2321static disassemble_info *the_info;
7967e09e
L
2322static struct
2323 {
2324 int mod;
7967e09e 2325 int reg;
484c222e 2326 int rm;
7967e09e
L
2327 }
2328modrm;
4bba6815 2329static unsigned char need_modrm;
dfc8cf43
L
2330static struct
2331 {
2332 int scale;
2333 int index;
2334 int base;
2335 }
2336sib;
c0f3af97
L
2337static struct
2338 {
2339 int register_specifier;
2340 int length;
2341 int prefix;
2342 int w;
2343 }
2344vex;
2345static unsigned char need_vex;
2346static unsigned char need_vex_reg;
dae39acc 2347static unsigned char vex_w_done;
252b5132 2348
ea397f5b
L
2349struct op
2350 {
2351 const char *name;
2352 unsigned int len;
2353 };
2354
4bba6815
AM
2355/* If we are accessing mod/rm/reg without need_modrm set, then the
2356 values are stale. Hitting this abort likely indicates that you
2357 need to update onebyte_has_modrm or twobyte_has_modrm. */
2358#define MODRM_CHECK if (!need_modrm) abort ()
2359
d708bcba
AM
2360static const char **names64;
2361static const char **names32;
2362static const char **names16;
2363static const char **names8;
2364static const char **names8rex;
2365static const char **names_seg;
db51cc60
L
2366static const char *index64;
2367static const char *index32;
d708bcba
AM
2368static const char **index16;
2369
2370static const char *intel_names64[] = {
2371 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
2372 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
2373};
2374static const char *intel_names32[] = {
2375 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
2376 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
2377};
2378static const char *intel_names16[] = {
2379 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
2380 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
2381};
2382static const char *intel_names8[] = {
2383 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
2384};
2385static const char *intel_names8rex[] = {
2386 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
2387 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
2388};
2389static const char *intel_names_seg[] = {
2390 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
2391};
db51cc60
L
2392static const char *intel_index64 = "riz";
2393static const char *intel_index32 = "eiz";
d708bcba
AM
2394static const char *intel_index16[] = {
2395 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
2396};
2397
2398static const char *att_names64[] = {
2399 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
52b15da3
JH
2400 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
2401};
d708bcba
AM
2402static const char *att_names32[] = {
2403 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
52b15da3 2404 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
252b5132 2405};
d708bcba
AM
2406static const char *att_names16[] = {
2407 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
52b15da3 2408 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
252b5132 2409};
d708bcba
AM
2410static const char *att_names8[] = {
2411 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
252b5132 2412};
d708bcba
AM
2413static const char *att_names8rex[] = {
2414 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
52b15da3
JH
2415 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
2416};
d708bcba
AM
2417static const char *att_names_seg[] = {
2418 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
252b5132 2419};
db51cc60
L
2420static const char *att_index64 = "%riz";
2421static const char *att_index32 = "%eiz";
d708bcba
AM
2422static const char *att_index16[] = {
2423 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
252b5132
RH
2424};
2425
b9733481
L
2426static const char **names_mm;
2427static const char *intel_names_mm[] = {
2428 "mm0", "mm1", "mm2", "mm3",
2429 "mm4", "mm5", "mm6", "mm7"
2430};
2431static const char *att_names_mm[] = {
2432 "%mm0", "%mm1", "%mm2", "%mm3",
2433 "%mm4", "%mm5", "%mm6", "%mm7"
2434};
2435
2436static const char **names_xmm;
2437static const char *intel_names_xmm[] = {
2438 "xmm0", "xmm1", "xmm2", "xmm3",
2439 "xmm4", "xmm5", "xmm6", "xmm7",
2440 "xmm8", "xmm9", "xmm10", "xmm11",
2441 "xmm12", "xmm13", "xmm14", "xmm15"
2442};
2443static const char *att_names_xmm[] = {
2444 "%xmm0", "%xmm1", "%xmm2", "%xmm3",
2445 "%xmm4", "%xmm5", "%xmm6", "%xmm7",
2446 "%xmm8", "%xmm9", "%xmm10", "%xmm11",
2447 "%xmm12", "%xmm13", "%xmm14", "%xmm15"
2448};
2449
2450static const char **names_ymm;
2451static const char *intel_names_ymm[] = {
2452 "ymm0", "ymm1", "ymm2", "ymm3",
2453 "ymm4", "ymm5", "ymm6", "ymm7",
2454 "ymm8", "ymm9", "ymm10", "ymm11",
2455 "ymm12", "ymm13", "ymm14", "ymm15"
2456};
2457static const char *att_names_ymm[] = {
2458 "%ymm0", "%ymm1", "%ymm2", "%ymm3",
2459 "%ymm4", "%ymm5", "%ymm6", "%ymm7",
2460 "%ymm8", "%ymm9", "%ymm10", "%ymm11",
2461 "%ymm12", "%ymm13", "%ymm14", "%ymm15"
2462};
2463
1ceb70f8
L
2464static const struct dis386 reg_table[][8] = {
2465 /* REG_80 */
252b5132 2466 {
42164a71
L
2467 { "addA", { Ebh1, Ib } },
2468 { "orA", { Ebh1, Ib } },
2469 { "adcA", { Ebh1, Ib } },
2470 { "sbbA", { Ebh1, Ib } },
2471 { "andA", { Ebh1, Ib } },
2472 { "subA", { Ebh1, Ib } },
2473 { "xorA", { Ebh1, Ib } },
ce518a5f 2474 { "cmpA", { Eb, Ib } },
252b5132 2475 },
1ceb70f8 2476 /* REG_81 */
252b5132 2477 {
42164a71
L
2478 { "addQ", { Evh1, Iv } },
2479 { "orQ", { Evh1, Iv } },
2480 { "adcQ", { Evh1, Iv } },
2481 { "sbbQ", { Evh1, Iv } },
2482 { "andQ", { Evh1, Iv } },
2483 { "subQ", { Evh1, Iv } },
2484 { "xorQ", { Evh1, Iv } },
ce518a5f 2485 { "cmpQ", { Ev, Iv } },
252b5132 2486 },
1ceb70f8 2487 /* REG_82 */
252b5132 2488 {
42164a71
L
2489 { "addQ", { Evh1, sIb } },
2490 { "orQ", { Evh1, sIb } },
2491 { "adcQ", { Evh1, sIb } },
2492 { "sbbQ", { Evh1, sIb } },
2493 { "andQ", { Evh1, sIb } },
2494 { "subQ", { Evh1, sIb } },
2495 { "xorQ", { Evh1, sIb } },
ce518a5f 2496 { "cmpQ", { Ev, sIb } },
252b5132 2497 },
1ceb70f8 2498 /* REG_8F */
4e7d34a6
L
2499 {
2500 { "popU", { stackEv } },
c48244a5 2501 { XOP_8F_TABLE (XOP_09) },
592d1631
L
2502 { Bad_Opcode },
2503 { Bad_Opcode },
2504 { Bad_Opcode },
f88c9eb0 2505 { XOP_8F_TABLE (XOP_09) },
4e7d34a6 2506 },
1ceb70f8 2507 /* REG_C0 */
252b5132 2508 {
ce518a5f
L
2509 { "rolA", { Eb, Ib } },
2510 { "rorA", { Eb, Ib } },
2511 { "rclA", { Eb, Ib } },
2512 { "rcrA", { Eb, Ib } },
2513 { "shlA", { Eb, Ib } },
2514 { "shrA", { Eb, Ib } },
592d1631 2515 { Bad_Opcode },
ce518a5f 2516 { "sarA", { Eb, Ib } },
252b5132 2517 },
1ceb70f8 2518 /* REG_C1 */
252b5132 2519 {
ce518a5f
L
2520 { "rolQ", { Ev, Ib } },
2521 { "rorQ", { Ev, Ib } },
2522 { "rclQ", { Ev, Ib } },
2523 { "rcrQ", { Ev, Ib } },
2524 { "shlQ", { Ev, Ib } },
2525 { "shrQ", { Ev, Ib } },
592d1631 2526 { Bad_Opcode },
ce518a5f 2527 { "sarQ", { Ev, Ib } },
252b5132 2528 },
1ceb70f8 2529 /* REG_C6 */
4e7d34a6 2530 {
42164a71
L
2531 { "movA", { Ebh3, Ib } },
2532 { Bad_Opcode },
2533 { Bad_Opcode },
2534 { Bad_Opcode },
2535 { Bad_Opcode },
2536 { Bad_Opcode },
2537 { Bad_Opcode },
2538 { MOD_TABLE (MOD_C6_REG_7) },
4e7d34a6 2539 },
1ceb70f8 2540 /* REG_C7 */
4e7d34a6 2541 {
42164a71
L
2542 { "movQ", { Evh3, Iv } },
2543 { Bad_Opcode },
2544 { Bad_Opcode },
2545 { Bad_Opcode },
2546 { Bad_Opcode },
2547 { Bad_Opcode },
2548 { Bad_Opcode },
2549 { MOD_TABLE (MOD_C7_REG_7) },
4e7d34a6 2550 },
1ceb70f8 2551 /* REG_D0 */
252b5132 2552 {
ce518a5f
L
2553 { "rolA", { Eb, I1 } },
2554 { "rorA", { Eb, I1 } },
2555 { "rclA", { Eb, I1 } },
2556 { "rcrA", { Eb, I1 } },
2557 { "shlA", { Eb, I1 } },
2558 { "shrA", { Eb, I1 } },
592d1631 2559 { Bad_Opcode },
ce518a5f 2560 { "sarA", { Eb, I1 } },
252b5132 2561 },
1ceb70f8 2562 /* REG_D1 */
252b5132 2563 {
ce518a5f
L
2564 { "rolQ", { Ev, I1 } },
2565 { "rorQ", { Ev, I1 } },
2566 { "rclQ", { Ev, I1 } },
2567 { "rcrQ", { Ev, I1 } },
2568 { "shlQ", { Ev, I1 } },
2569 { "shrQ", { Ev, I1 } },
592d1631 2570 { Bad_Opcode },
ce518a5f 2571 { "sarQ", { Ev, I1 } },
252b5132 2572 },
1ceb70f8 2573 /* REG_D2 */
252b5132 2574 {
ce518a5f
L
2575 { "rolA", { Eb, CL } },
2576 { "rorA", { Eb, CL } },
2577 { "rclA", { Eb, CL } },
2578 { "rcrA", { Eb, CL } },
2579 { "shlA", { Eb, CL } },
2580 { "shrA", { Eb, CL } },
592d1631 2581 { Bad_Opcode },
ce518a5f 2582 { "sarA", { Eb, CL } },
252b5132 2583 },
1ceb70f8 2584 /* REG_D3 */
252b5132 2585 {
ce518a5f
L
2586 { "rolQ", { Ev, CL } },
2587 { "rorQ", { Ev, CL } },
2588 { "rclQ", { Ev, CL } },
2589 { "rcrQ", { Ev, CL } },
2590 { "shlQ", { Ev, CL } },
2591 { "shrQ", { Ev, CL } },
592d1631 2592 { Bad_Opcode },
ce518a5f 2593 { "sarQ", { Ev, CL } },
252b5132 2594 },
1ceb70f8 2595 /* REG_F6 */
252b5132 2596 {
ce518a5f 2597 { "testA", { Eb, Ib } },
592d1631 2598 { Bad_Opcode },
42164a71
L
2599 { "notA", { Ebh1 } },
2600 { "negA", { Ebh1 } },
ce518a5f
L
2601 { "mulA", { Eb } }, /* Don't print the implicit %al register, */
2602 { "imulA", { Eb } }, /* to distinguish these opcodes from other */
2603 { "divA", { Eb } }, /* mul/imul opcodes. Do the same for div */
2604 { "idivA", { Eb } }, /* and idiv for consistency. */
252b5132 2605 },
1ceb70f8 2606 /* REG_F7 */
252b5132 2607 {
ce518a5f 2608 { "testQ", { Ev, Iv } },
592d1631 2609 { Bad_Opcode },
42164a71
L
2610 { "notQ", { Evh1 } },
2611 { "negQ", { Evh1 } },
ce518a5f
L
2612 { "mulQ", { Ev } }, /* Don't print the implicit register. */
2613 { "imulQ", { Ev } },
2614 { "divQ", { Ev } },
2615 { "idivQ", { Ev } },
252b5132 2616 },
1ceb70f8 2617 /* REG_FE */
252b5132 2618 {
42164a71
L
2619 { "incA", { Ebh1 } },
2620 { "decA", { Ebh1 } },
252b5132 2621 },
1ceb70f8 2622 /* REG_FF */
252b5132 2623 {
42164a71
L
2624 { "incQ", { Evh1 } },
2625 { "decQ", { Evh1 } },
d9e3625e
L
2626 { "call{T|}", { indirEv } },
2627 { "Jcall{T|}", { indirEp } },
2628 { "jmp{T|}", { indirEv } },
2629 { "Jjmp{T|}", { indirEp } },
ce518a5f 2630 { "pushU", { stackEv } },
592d1631 2631 { Bad_Opcode },
252b5132 2632 },
1ceb70f8 2633 /* REG_0F00 */
252b5132 2634 {
ce518a5f
L
2635 { "sldtD", { Sv } },
2636 { "strD", { Sv } },
2637 { "lldt", { Ew } },
2638 { "ltr", { Ew } },
2639 { "verr", { Ew } },
2640 { "verw", { Ew } },
592d1631
L
2641 { Bad_Opcode },
2642 { Bad_Opcode },
252b5132 2643 },
1ceb70f8 2644 /* REG_0F01 */
252b5132 2645 {
1ceb70f8
L
2646 { MOD_TABLE (MOD_0F01_REG_0) },
2647 { MOD_TABLE (MOD_0F01_REG_1) },
2648 { MOD_TABLE (MOD_0F01_REG_2) },
2649 { MOD_TABLE (MOD_0F01_REG_3) },
ce518a5f 2650 { "smswD", { Sv } },
592d1631 2651 { Bad_Opcode },
ce518a5f 2652 { "lmsw", { Ew } },
1ceb70f8 2653 { MOD_TABLE (MOD_0F01_REG_7) },
252b5132 2654 },
b5b1fc4f 2655 /* REG_0F0D */
252b5132 2656 {
1ab03f4b
L
2657 { "prefetch", { Mb } },
2658 { "prefetchw", { Mb } },
d7189fa5
RM
2659 { "prefetch", { Mb } },
2660 { "prefetch", { Mb } },
2661 { "prefetch", { Mb } },
2662 { "prefetch", { Mb } },
2663 { "prefetch", { Mb } },
2664 { "prefetch", { Mb } },
252b5132 2665 },
1ceb70f8 2666 /* REG_0F18 */
252b5132 2667 {
1ceb70f8
L
2668 { MOD_TABLE (MOD_0F18_REG_0) },
2669 { MOD_TABLE (MOD_0F18_REG_1) },
2670 { MOD_TABLE (MOD_0F18_REG_2) },
2671 { MOD_TABLE (MOD_0F18_REG_3) },
d7189fa5
RM
2672 { MOD_TABLE (MOD_0F18_REG_4) },
2673 { MOD_TABLE (MOD_0F18_REG_5) },
2674 { MOD_TABLE (MOD_0F18_REG_6) },
2675 { MOD_TABLE (MOD_0F18_REG_7) },
252b5132 2676 },
1ceb70f8 2677 /* REG_0F71 */
a6bd098c 2678 {
592d1631
L
2679 { Bad_Opcode },
2680 { Bad_Opcode },
1ceb70f8 2681 { MOD_TABLE (MOD_0F71_REG_2) },
592d1631 2682 { Bad_Opcode },
1ceb70f8 2683 { MOD_TABLE (MOD_0F71_REG_4) },
592d1631 2684 { Bad_Opcode },
1ceb70f8 2685 { MOD_TABLE (MOD_0F71_REG_6) },
a6bd098c 2686 },
1ceb70f8 2687 /* REG_0F72 */
a6bd098c 2688 {
592d1631
L
2689 { Bad_Opcode },
2690 { Bad_Opcode },
1ceb70f8 2691 { MOD_TABLE (MOD_0F72_REG_2) },
592d1631 2692 { Bad_Opcode },
1ceb70f8 2693 { MOD_TABLE (MOD_0F72_REG_4) },
592d1631 2694 { Bad_Opcode },
1ceb70f8 2695 { MOD_TABLE (MOD_0F72_REG_6) },
a6bd098c 2696 },
1ceb70f8 2697 /* REG_0F73 */
252b5132 2698 {
592d1631
L
2699 { Bad_Opcode },
2700 { Bad_Opcode },
1ceb70f8
L
2701 { MOD_TABLE (MOD_0F73_REG_2) },
2702 { MOD_TABLE (MOD_0F73_REG_3) },
592d1631
L
2703 { Bad_Opcode },
2704 { Bad_Opcode },
1ceb70f8
L
2705 { MOD_TABLE (MOD_0F73_REG_6) },
2706 { MOD_TABLE (MOD_0F73_REG_7) },
252b5132 2707 },
1ceb70f8 2708 /* REG_0FA6 */
252b5132 2709 {
4e7d34a6
L
2710 { "montmul", { { OP_0f07, 0 } } },
2711 { "xsha1", { { OP_0f07, 0 } } },
2712 { "xsha256", { { OP_0f07, 0 } } },
4e7d34a6 2713 },
1ceb70f8 2714 /* REG_0FA7 */
4e7d34a6
L
2715 {
2716 { "xstore-rng", { { OP_0f07, 0 } } },
2717 { "xcrypt-ecb", { { OP_0f07, 0 } } },
2718 { "xcrypt-cbc", { { OP_0f07, 0 } } },
2719 { "xcrypt-ctr", { { OP_0f07, 0 } } },
2720 { "xcrypt-cfb", { { OP_0f07, 0 } } },
2721 { "xcrypt-ofb", { { OP_0f07, 0 } } },
4e7d34a6 2722 },
1ceb70f8 2723 /* REG_0FAE */
4e7d34a6 2724 {
1ceb70f8
L
2725 { MOD_TABLE (MOD_0FAE_REG_0) },
2726 { MOD_TABLE (MOD_0FAE_REG_1) },
2727 { MOD_TABLE (MOD_0FAE_REG_2) },
2728 { MOD_TABLE (MOD_0FAE_REG_3) },
475a2301 2729 { MOD_TABLE (MOD_0FAE_REG_4) },
1ceb70f8
L
2730 { MOD_TABLE (MOD_0FAE_REG_5) },
2731 { MOD_TABLE (MOD_0FAE_REG_6) },
2732 { MOD_TABLE (MOD_0FAE_REG_7) },
252b5132 2733 },
1ceb70f8 2734 /* REG_0FBA */
252b5132 2735 {
592d1631
L
2736 { Bad_Opcode },
2737 { Bad_Opcode },
2738 { Bad_Opcode },
2739 { Bad_Opcode },
4e7d34a6 2740 { "btQ", { Ev, Ib } },
42164a71
L
2741 { "btsQ", { Evh1, Ib } },
2742 { "btrQ", { Evh1, Ib } },
2743 { "btcQ", { Evh1, Ib } },
c608c12e 2744 },
1ceb70f8 2745 /* REG_0FC7 */
c608c12e 2746 {
592d1631 2747 { Bad_Opcode },
4e7d34a6 2748 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } } },
592d1631
L
2749 { Bad_Opcode },
2750 { Bad_Opcode },
2751 { Bad_Opcode },
2752 { Bad_Opcode },
1ceb70f8
L
2753 { MOD_TABLE (MOD_0FC7_REG_6) },
2754 { MOD_TABLE (MOD_0FC7_REG_7) },
252b5132 2755 },
592a252b 2756 /* REG_VEX_0F71 */
c0f3af97 2757 {
592d1631
L
2758 { Bad_Opcode },
2759 { Bad_Opcode },
592a252b 2760 { MOD_TABLE (MOD_VEX_0F71_REG_2) },
592d1631 2761 { Bad_Opcode },
592a252b 2762 { MOD_TABLE (MOD_VEX_0F71_REG_4) },
592d1631 2763 { Bad_Opcode },
592a252b 2764 { MOD_TABLE (MOD_VEX_0F71_REG_6) },
c0f3af97 2765 },
592a252b 2766 /* REG_VEX_0F72 */
c0f3af97 2767 {
592d1631
L
2768 { Bad_Opcode },
2769 { Bad_Opcode },
592a252b 2770 { MOD_TABLE (MOD_VEX_0F72_REG_2) },
592d1631 2771 { Bad_Opcode },
592a252b 2772 { MOD_TABLE (MOD_VEX_0F72_REG_4) },
592d1631 2773 { Bad_Opcode },
592a252b 2774 { MOD_TABLE (MOD_VEX_0F72_REG_6) },
c0f3af97 2775 },
592a252b 2776 /* REG_VEX_0F73 */
c0f3af97 2777 {
592d1631
L
2778 { Bad_Opcode },
2779 { Bad_Opcode },
592a252b
L
2780 { MOD_TABLE (MOD_VEX_0F73_REG_2) },
2781 { MOD_TABLE (MOD_VEX_0F73_REG_3) },
592d1631
L
2782 { Bad_Opcode },
2783 { Bad_Opcode },
592a252b
L
2784 { MOD_TABLE (MOD_VEX_0F73_REG_6) },
2785 { MOD_TABLE (MOD_VEX_0F73_REG_7) },
c0f3af97 2786 },
592a252b 2787 /* REG_VEX_0FAE */
c0f3af97 2788 {
592d1631
L
2789 { Bad_Opcode },
2790 { Bad_Opcode },
592a252b
L
2791 { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
2792 { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
c0f3af97 2793 },
f12dc422
L
2794 /* REG_VEX_0F38F3 */
2795 {
2796 { Bad_Opcode },
2797 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
2798 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
2799 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
2800 },
f88c9eb0
SP
2801 /* REG_XOP_LWPCB */
2802 {
2803 { "llwpcb", { { OP_LWPCB_E, 0 } } },
2804 { "slwpcb", { { OP_LWPCB_E, 0 } } },
f88c9eb0
SP
2805 },
2806 /* REG_XOP_LWP */
2807 {
ce7d077e
SP
2808 { "lwpins", { { OP_LWP_E, 0 }, Ed, Iq } },
2809 { "lwpval", { { OP_LWP_E, 0 }, Ed, Iq } },
f88c9eb0 2810 },
2a2a0f38
QN
2811 /* REG_XOP_TBM_01 */
2812 {
2813 { Bad_Opcode },
2814 { "blcfill", { { OP_LWP_E, 0 }, Ev } },
2815 { "blsfill", { { OP_LWP_E, 0 }, Ev } },
2816 { "blcs", { { OP_LWP_E, 0 }, Ev } },
2817 { "tzmsk", { { OP_LWP_E, 0 }, Ev } },
2818 { "blcic", { { OP_LWP_E, 0 }, Ev } },
2819 { "blsic", { { OP_LWP_E, 0 }, Ev } },
2820 { "t1mskc", { { OP_LWP_E, 0 }, Ev } },
2821 },
2822 /* REG_XOP_TBM_02 */
2823 {
2824 { Bad_Opcode },
2825 { "blcmsk", { { OP_LWP_E, 0 }, Ev } },
2826 { Bad_Opcode },
2827 { Bad_Opcode },
2828 { Bad_Opcode },
2829 { Bad_Opcode },
2830 { "blci", { { OP_LWP_E, 0 }, Ev } },
2831 },
4e7d34a6
L
2832};
2833
1ceb70f8
L
2834static const struct dis386 prefix_table[][4] = {
2835 /* PREFIX_90 */
252b5132 2836 {
4e7d34a6
L
2837 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
2838 { "pause", { XX } },
2839 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
0f10071e 2840 },
4e7d34a6 2841
1ceb70f8 2842 /* PREFIX_0F10 */
cc0ec051 2843 {
4e7d34a6
L
2844 { "movups", { XM, EXx } },
2845 { "movss", { XM, EXd } },
2846 { "movupd", { XM, EXx } },
2847 { "movsd", { XM, EXq } },
30d1c836 2848 },
4e7d34a6 2849
1ceb70f8 2850 /* PREFIX_0F11 */
30d1c836 2851 {
b6169b20 2852 { "movups", { EXxS, XM } },
fa99fab2 2853 { "movss", { EXdS, XM } },
b6169b20 2854 { "movupd", { EXxS, XM } },
fa99fab2 2855 { "movsd", { EXqS, XM } },
4e7d34a6 2856 },
252b5132 2857
1ceb70f8 2858 /* PREFIX_0F12 */
c608c12e 2859 {
1ceb70f8 2860 { MOD_TABLE (MOD_0F12_PREFIX_0) },
4e7d34a6
L
2861 { "movsldup", { XM, EXx } },
2862 { "movlpd", { XM, EXq } },
2863 { "movddup", { XM, EXq } },
c608c12e 2864 },
4e7d34a6 2865
1ceb70f8 2866 /* PREFIX_0F16 */
c608c12e 2867 {
1ceb70f8 2868 { MOD_TABLE (MOD_0F16_PREFIX_0) },
4e7d34a6
L
2869 { "movshdup", { XM, EXx } },
2870 { "movhpd", { XM, EXq } },
c608c12e 2871 },
4e7d34a6 2872
1ceb70f8 2873 /* PREFIX_0F2A */
c608c12e 2874 {
09335d05 2875 { "cvtpi2ps", { XM, EMCq } },
98b528ac 2876 { "cvtsi2ss%LQ", { XM, Ev } },
09335d05 2877 { "cvtpi2pd", { XM, EMCq } },
98b528ac 2878 { "cvtsi2sd%LQ", { XM, Ev } },
c608c12e 2879 },
4e7d34a6 2880
1ceb70f8 2881 /* PREFIX_0F2B */
c608c12e 2882 {
75c135a8
L
2883 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
2884 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
2885 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
2886 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
c608c12e 2887 },
4e7d34a6 2888
1ceb70f8 2889 /* PREFIX_0F2C */
c608c12e 2890 {
09335d05
L
2891 { "cvttps2pi", { MXC, EXq } },
2892 { "cvttss2siY", { Gv, EXd } },
09a2c6cf 2893 { "cvttpd2pi", { MXC, EXx } },
09335d05 2894 { "cvttsd2siY", { Gv, EXq } },
c608c12e 2895 },
4e7d34a6 2896
1ceb70f8 2897 /* PREFIX_0F2D */
c608c12e 2898 {
4e7d34a6
L
2899 { "cvtps2pi", { MXC, EXq } },
2900 { "cvtss2siY", { Gv, EXd } },
2901 { "cvtpd2pi", { MXC, EXx } },
2902 { "cvtsd2siY", { Gv, EXq } },
c608c12e 2903 },
4e7d34a6 2904
1ceb70f8 2905 /* PREFIX_0F2E */
c608c12e 2906 {
7bb15c6f 2907 { "ucomiss",{ XM, EXd } },
592d1631 2908 { Bad_Opcode },
7bb15c6f 2909 { "ucomisd",{ XM, EXq } },
c608c12e 2910 },
4e7d34a6 2911
1ceb70f8 2912 /* PREFIX_0F2F */
c608c12e 2913 {
4e7d34a6 2914 { "comiss", { XM, EXd } },
592d1631 2915 { Bad_Opcode },
4e7d34a6 2916 { "comisd", { XM, EXq } },
c608c12e 2917 },
4e7d34a6 2918
1ceb70f8 2919 /* PREFIX_0F51 */
c608c12e 2920 {
4e7d34a6
L
2921 { "sqrtps", { XM, EXx } },
2922 { "sqrtss", { XM, EXd } },
2923 { "sqrtpd", { XM, EXx } },
2924 { "sqrtsd", { XM, EXq } },
c608c12e 2925 },
4e7d34a6 2926
1ceb70f8 2927 /* PREFIX_0F52 */
c608c12e 2928 {
4e7d34a6
L
2929 { "rsqrtps",{ XM, EXx } },
2930 { "rsqrtss",{ XM, EXd } },
c608c12e 2931 },
4e7d34a6 2932
1ceb70f8 2933 /* PREFIX_0F53 */
c608c12e 2934 {
4e7d34a6
L
2935 { "rcpps", { XM, EXx } },
2936 { "rcpss", { XM, EXd } },
c608c12e 2937 },
4e7d34a6 2938
1ceb70f8 2939 /* PREFIX_0F58 */
c608c12e 2940 {
4e7d34a6
L
2941 { "addps", { XM, EXx } },
2942 { "addss", { XM, EXd } },
2943 { "addpd", { XM, EXx } },
2944 { "addsd", { XM, EXq } },
c608c12e 2945 },
4e7d34a6 2946
1ceb70f8 2947 /* PREFIX_0F59 */
c608c12e 2948 {
4e7d34a6
L
2949 { "mulps", { XM, EXx } },
2950 { "mulss", { XM, EXd } },
2951 { "mulpd", { XM, EXx } },
2952 { "mulsd", { XM, EXq } },
041bd2e0 2953 },
4e7d34a6 2954
1ceb70f8 2955 /* PREFIX_0F5A */
041bd2e0 2956 {
4e7d34a6
L
2957 { "cvtps2pd", { XM, EXq } },
2958 { "cvtss2sd", { XM, EXd } },
2959 { "cvtpd2ps", { XM, EXx } },
2960 { "cvtsd2ss", { XM, EXq } },
041bd2e0 2961 },
4e7d34a6 2962
1ceb70f8 2963 /* PREFIX_0F5B */
041bd2e0 2964 {
09a2c6cf
L
2965 { "cvtdq2ps", { XM, EXx } },
2966 { "cvttps2dq", { XM, EXx } },
2967 { "cvtps2dq", { XM, EXx } },
041bd2e0 2968 },
4e7d34a6 2969
1ceb70f8 2970 /* PREFIX_0F5C */
041bd2e0 2971 {
4e7d34a6
L
2972 { "subps", { XM, EXx } },
2973 { "subss", { XM, EXd } },
2974 { "subpd", { XM, EXx } },
2975 { "subsd", { XM, EXq } },
041bd2e0 2976 },
4e7d34a6 2977
1ceb70f8 2978 /* PREFIX_0F5D */
041bd2e0 2979 {
4e7d34a6
L
2980 { "minps", { XM, EXx } },
2981 { "minss", { XM, EXd } },
2982 { "minpd", { XM, EXx } },
2983 { "minsd", { XM, EXq } },
041bd2e0 2984 },
4e7d34a6 2985
1ceb70f8 2986 /* PREFIX_0F5E */
041bd2e0 2987 {
4e7d34a6
L
2988 { "divps", { XM, EXx } },
2989 { "divss", { XM, EXd } },
2990 { "divpd", { XM, EXx } },
2991 { "divsd", { XM, EXq } },
041bd2e0 2992 },
4e7d34a6 2993
1ceb70f8 2994 /* PREFIX_0F5F */
041bd2e0 2995 {
4e7d34a6
L
2996 { "maxps", { XM, EXx } },
2997 { "maxss", { XM, EXd } },
2998 { "maxpd", { XM, EXx } },
2999 { "maxsd", { XM, EXq } },
041bd2e0 3000 },
4e7d34a6 3001
1ceb70f8 3002 /* PREFIX_0F60 */
041bd2e0 3003 {
4e7d34a6 3004 { "punpcklbw",{ MX, EMd } },
592d1631 3005 { Bad_Opcode },
4e7d34a6 3006 { "punpcklbw",{ MX, EMx } },
041bd2e0 3007 },
4e7d34a6 3008
1ceb70f8 3009 /* PREFIX_0F61 */
041bd2e0 3010 {
4e7d34a6 3011 { "punpcklwd",{ MX, EMd } },
592d1631 3012 { Bad_Opcode },
4e7d34a6 3013 { "punpcklwd",{ MX, EMx } },
041bd2e0 3014 },
4e7d34a6 3015
1ceb70f8 3016 /* PREFIX_0F62 */
041bd2e0 3017 {
4e7d34a6 3018 { "punpckldq",{ MX, EMd } },
592d1631 3019 { Bad_Opcode },
4e7d34a6 3020 { "punpckldq",{ MX, EMx } },
041bd2e0 3021 },
4e7d34a6 3022
1ceb70f8 3023 /* PREFIX_0F6C */
041bd2e0 3024 {
592d1631
L
3025 { Bad_Opcode },
3026 { Bad_Opcode },
4e7d34a6 3027 { "punpcklqdq", { XM, EXx } },
0f17484f 3028 },
4e7d34a6 3029
1ceb70f8 3030 /* PREFIX_0F6D */
0f17484f 3031 {
592d1631
L
3032 { Bad_Opcode },
3033 { Bad_Opcode },
4e7d34a6 3034 { "punpckhqdq", { XM, EXx } },
041bd2e0 3035 },
4e7d34a6 3036
1ceb70f8 3037 /* PREFIX_0F6F */
ca164297 3038 {
4e7d34a6
L
3039 { "movq", { MX, EM } },
3040 { "movdqu", { XM, EXx } },
3041 { "movdqa", { XM, EXx } },
ca164297 3042 },
4e7d34a6 3043
1ceb70f8 3044 /* PREFIX_0F70 */
4e7d34a6
L
3045 {
3046 { "pshufw", { MX, EM, Ib } },
3047 { "pshufhw",{ XM, EXx, Ib } },
3048 { "pshufd", { XM, EXx, Ib } },
3049 { "pshuflw",{ XM, EXx, Ib } },
3050 },
3051
92fddf8e
L
3052 /* PREFIX_0F73_REG_3 */
3053 {
592d1631
L
3054 { Bad_Opcode },
3055 { Bad_Opcode },
92fddf8e 3056 { "psrldq", { XS, Ib } },
92fddf8e
L
3057 },
3058
3059 /* PREFIX_0F73_REG_7 */
3060 {
592d1631
L
3061 { Bad_Opcode },
3062 { Bad_Opcode },
92fddf8e 3063 { "pslldq", { XS, Ib } },
92fddf8e
L
3064 },
3065
1ceb70f8 3066 /* PREFIX_0F78 */
4e7d34a6
L
3067 {
3068 {"vmread", { Em, Gm } },
592d1631 3069 { Bad_Opcode },
4e7d34a6
L
3070 {"extrq", { XS, Ib, Ib } },
3071 {"insertq", { XM, XS, Ib, Ib } },
3072 },
3073
1ceb70f8 3074 /* PREFIX_0F79 */
4e7d34a6
L
3075 {
3076 {"vmwrite", { Gm, Em } },
592d1631 3077 { Bad_Opcode },
4e7d34a6
L
3078 {"extrq", { XM, XS } },
3079 {"insertq", { XM, XS } },
3080 },
3081
1ceb70f8 3082 /* PREFIX_0F7C */
ca164297 3083 {
592d1631
L
3084 { Bad_Opcode },
3085 { Bad_Opcode },
09a2c6cf
L
3086 { "haddpd", { XM, EXx } },
3087 { "haddps", { XM, EXx } },
ca164297 3088 },
4e7d34a6 3089
1ceb70f8 3090 /* PREFIX_0F7D */
ca164297 3091 {
592d1631
L
3092 { Bad_Opcode },
3093 { Bad_Opcode },
09a2c6cf
L
3094 { "hsubpd", { XM, EXx } },
3095 { "hsubps", { XM, EXx } },
ca164297 3096 },
4e7d34a6 3097
1ceb70f8 3098 /* PREFIX_0F7E */
ca164297 3099 {
4e7d34a6
L
3100 { "movK", { Edq, MX } },
3101 { "movq", { XM, EXq } },
3102 { "movK", { Edq, XM } },
ca164297 3103 },
4e7d34a6 3104
1ceb70f8 3105 /* PREFIX_0F7F */
ca164297 3106 {
b6169b20
L
3107 { "movq", { EMS, MX } },
3108 { "movdqu", { EXxS, XM } },
3109 { "movdqa", { EXxS, XM } },
ca164297 3110 },
4e7d34a6 3111
c7b8aa3a
L
3112 /* PREFIX_0FAE_REG_0 */
3113 {
3114 { Bad_Opcode },
3115 { "rdfsbase", { Ev } },
3116 },
3117
3118 /* PREFIX_0FAE_REG_1 */
3119 {
3120 { Bad_Opcode },
3121 { "rdgsbase", { Ev } },
3122 },
3123
3124 /* PREFIX_0FAE_REG_2 */
3125 {
3126 { Bad_Opcode },
3127 { "wrfsbase", { Ev } },
3128 },
3129
3130 /* PREFIX_0FAE_REG_3 */
3131 {
3132 { Bad_Opcode },
3133 { "wrgsbase", { Ev } },
3134 },
3135
1ceb70f8 3136 /* PREFIX_0FB8 */
ca164297 3137 {
592d1631 3138 { Bad_Opcode },
4e7d34a6 3139 { "popcntS", { Gv, Ev } },
ca164297 3140 },
4e7d34a6 3141
f12dc422
L
3142 /* PREFIX_0FBC */
3143 {
3144 { "bsfS", { Gv, Ev } },
3145 { "tzcntS", { Gv, Ev } },
3146 { "bsfS", { Gv, Ev } },
3147 },
3148
1ceb70f8 3149 /* PREFIX_0FBD */
050dfa73 3150 {
4e7d34a6
L
3151 { "bsrS", { Gv, Ev } },
3152 { "lzcntS", { Gv, Ev } },
3153 { "bsrS", { Gv, Ev } },
050dfa73
MM
3154 },
3155
1ceb70f8 3156 /* PREFIX_0FC2 */
050dfa73 3157 {
ad19981d
L
3158 { "cmpps", { XM, EXx, CMP } },
3159 { "cmpss", { XM, EXd, CMP } },
3160 { "cmppd", { XM, EXx, CMP } },
3161 { "cmpsd", { XM, EXq, CMP } },
050dfa73 3162 },
246c51aa 3163
4ee52178
L
3164 /* PREFIX_0FC3 */
3165 {
3166 { "movntiS", { Ma, Gv } },
4ee52178
L
3167 },
3168
92fddf8e
L
3169 /* PREFIX_0FC7_REG_6 */
3170 {
3171 { "vmptrld",{ Mq } },
3172 { "vmxon", { Mq } },
3173 { "vmclear",{ Mq } },
92fddf8e
L
3174 },
3175
1ceb70f8 3176 /* PREFIX_0FD0 */
050dfa73 3177 {
592d1631
L
3178 { Bad_Opcode },
3179 { Bad_Opcode },
4e7d34a6
L
3180 { "addsubpd", { XM, EXx } },
3181 { "addsubps", { XM, EXx } },
246c51aa 3182 },
050dfa73 3183
1ceb70f8 3184 /* PREFIX_0FD6 */
050dfa73 3185 {
592d1631 3186 { Bad_Opcode },
4e7d34a6 3187 { "movq2dq",{ XM, MS } },
b6169b20 3188 { "movq", { EXqS, XM } },
4e7d34a6 3189 { "movdq2q",{ MX, XS } },
050dfa73
MM
3190 },
3191
1ceb70f8 3192 /* PREFIX_0FE6 */
7918206c 3193 {
592d1631 3194 { Bad_Opcode },
4e7d34a6
L
3195 { "cvtdq2pd", { XM, EXq } },
3196 { "cvttpd2dq", { XM, EXx } },
3197 { "cvtpd2dq", { XM, EXx } },
7918206c 3198 },
8b38ad71 3199
1ceb70f8 3200 /* PREFIX_0FE7 */
8b38ad71 3201 {
4ee52178 3202 { "movntq", { Mq, MX } },
592d1631 3203 { Bad_Opcode },
75c135a8 3204 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
4e7d34a6
L
3205 },
3206
1ceb70f8 3207 /* PREFIX_0FF0 */
4e7d34a6 3208 {
592d1631
L
3209 { Bad_Opcode },
3210 { Bad_Opcode },
3211 { Bad_Opcode },
1ceb70f8 3212 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4e7d34a6
L
3213 },
3214
1ceb70f8 3215 /* PREFIX_0FF7 */
4e7d34a6
L
3216 {
3217 { "maskmovq", { MX, MS } },
592d1631 3218 { Bad_Opcode },
4e7d34a6 3219 { "maskmovdqu", { XM, XS } },
8b38ad71 3220 },
42903f7f 3221
1ceb70f8 3222 /* PREFIX_0F3810 */
42903f7f 3223 {
592d1631
L
3224 { Bad_Opcode },
3225 { Bad_Opcode },
88a94849 3226 { "pblendvb", { XM, EXx, XMM0 } },
42903f7f
L
3227 },
3228
1ceb70f8 3229 /* PREFIX_0F3814 */
42903f7f 3230 {
592d1631
L
3231 { Bad_Opcode },
3232 { Bad_Opcode },
88a94849 3233 { "blendvps", { XM, EXx, XMM0 } },
42903f7f
L
3234 },
3235
1ceb70f8 3236 /* PREFIX_0F3815 */
42903f7f 3237 {
592d1631
L
3238 { Bad_Opcode },
3239 { Bad_Opcode },
09a2c6cf 3240 { "blendvpd", { XM, EXx, XMM0 } },
42903f7f
L
3241 },
3242
1ceb70f8 3243 /* PREFIX_0F3817 */
42903f7f 3244 {
592d1631
L
3245 { Bad_Opcode },
3246 { Bad_Opcode },
09a2c6cf 3247 { "ptest", { XM, EXx } },
42903f7f
L
3248 },
3249
1ceb70f8 3250 /* PREFIX_0F3820 */
42903f7f 3251 {
592d1631
L
3252 { Bad_Opcode },
3253 { Bad_Opcode },
8976381e 3254 { "pmovsxbw", { XM, EXq } },
42903f7f
L
3255 },
3256
1ceb70f8 3257 /* PREFIX_0F3821 */
42903f7f 3258 {
592d1631
L
3259 { Bad_Opcode },
3260 { Bad_Opcode },
8976381e 3261 { "pmovsxbd", { XM, EXd } },
42903f7f
L
3262 },
3263
1ceb70f8 3264 /* PREFIX_0F3822 */
42903f7f 3265 {
592d1631
L
3266 { Bad_Opcode },
3267 { Bad_Opcode },
8976381e 3268 { "pmovsxbq", { XM, EXw } },
42903f7f
L
3269 },
3270
1ceb70f8 3271 /* PREFIX_0F3823 */
42903f7f 3272 {
592d1631
L
3273 { Bad_Opcode },
3274 { Bad_Opcode },
8976381e 3275 { "pmovsxwd", { XM, EXq } },
42903f7f
L
3276 },
3277
1ceb70f8 3278 /* PREFIX_0F3824 */
42903f7f 3279 {
592d1631
L
3280 { Bad_Opcode },
3281 { Bad_Opcode },
8976381e 3282 { "pmovsxwq", { XM, EXd } },
42903f7f
L
3283 },
3284
1ceb70f8 3285 /* PREFIX_0F3825 */
42903f7f 3286 {
592d1631
L
3287 { Bad_Opcode },
3288 { Bad_Opcode },
8976381e 3289 { "pmovsxdq", { XM, EXq } },
42903f7f
L
3290 },
3291
1ceb70f8 3292 /* PREFIX_0F3828 */
42903f7f 3293 {
592d1631
L
3294 { Bad_Opcode },
3295 { Bad_Opcode },
09a2c6cf 3296 { "pmuldq", { XM, EXx } },
42903f7f
L
3297 },
3298
1ceb70f8 3299 /* PREFIX_0F3829 */
42903f7f 3300 {
592d1631
L
3301 { Bad_Opcode },
3302 { Bad_Opcode },
09a2c6cf 3303 { "pcmpeqq", { XM, EXx } },
42903f7f
L
3304 },
3305
1ceb70f8 3306 /* PREFIX_0F382A */
42903f7f 3307 {
592d1631
L
3308 { Bad_Opcode },
3309 { Bad_Opcode },
75c135a8 3310 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
42903f7f
L
3311 },
3312
1ceb70f8 3313 /* PREFIX_0F382B */
42903f7f 3314 {
592d1631
L
3315 { Bad_Opcode },
3316 { Bad_Opcode },
09a2c6cf 3317 { "packusdw", { XM, EXx } },
42903f7f
L
3318 },
3319
1ceb70f8 3320 /* PREFIX_0F3830 */
42903f7f 3321 {
592d1631
L
3322 { Bad_Opcode },
3323 { Bad_Opcode },
8976381e 3324 { "pmovzxbw", { XM, EXq } },
42903f7f
L
3325 },
3326
1ceb70f8 3327 /* PREFIX_0F3831 */
42903f7f 3328 {
592d1631
L
3329 { Bad_Opcode },
3330 { Bad_Opcode },
8976381e 3331 { "pmovzxbd", { XM, EXd } },
42903f7f
L
3332 },
3333
1ceb70f8 3334 /* PREFIX_0F3832 */
42903f7f 3335 {
592d1631
L
3336 { Bad_Opcode },
3337 { Bad_Opcode },
8976381e 3338 { "pmovzxbq", { XM, EXw } },
42903f7f
L
3339 },
3340
1ceb70f8 3341 /* PREFIX_0F3833 */
42903f7f 3342 {
592d1631
L
3343 { Bad_Opcode },
3344 { Bad_Opcode },
8976381e 3345 { "pmovzxwd", { XM, EXq } },
42903f7f
L
3346 },
3347
1ceb70f8 3348 /* PREFIX_0F3834 */
42903f7f 3349 {
592d1631
L
3350 { Bad_Opcode },
3351 { Bad_Opcode },
8976381e 3352 { "pmovzxwq", { XM, EXd } },
42903f7f
L
3353 },
3354
1ceb70f8 3355 /* PREFIX_0F3835 */
42903f7f 3356 {
592d1631
L
3357 { Bad_Opcode },
3358 { Bad_Opcode },
8976381e 3359 { "pmovzxdq", { XM, EXq } },
42903f7f
L
3360 },
3361
1ceb70f8 3362 /* PREFIX_0F3837 */
4e7d34a6 3363 {
592d1631
L
3364 { Bad_Opcode },
3365 { Bad_Opcode },
4e7d34a6 3366 { "pcmpgtq", { XM, EXx } },
4e7d34a6
L
3367 },
3368
1ceb70f8 3369 /* PREFIX_0F3838 */
42903f7f 3370 {
592d1631
L
3371 { Bad_Opcode },
3372 { Bad_Opcode },
09a2c6cf 3373 { "pminsb", { XM, EXx } },
42903f7f
L
3374 },
3375
1ceb70f8 3376 /* PREFIX_0F3839 */
42903f7f 3377 {
592d1631
L
3378 { Bad_Opcode },
3379 { Bad_Opcode },
09a2c6cf 3380 { "pminsd", { XM, EXx } },
42903f7f
L
3381 },
3382
1ceb70f8 3383 /* PREFIX_0F383A */
42903f7f 3384 {
592d1631
L
3385 { Bad_Opcode },
3386 { Bad_Opcode },
09a2c6cf 3387 { "pminuw", { XM, EXx } },
42903f7f
L
3388 },
3389
1ceb70f8 3390 /* PREFIX_0F383B */
42903f7f 3391 {
592d1631
L
3392 { Bad_Opcode },
3393 { Bad_Opcode },
09a2c6cf 3394 { "pminud", { XM, EXx } },
42903f7f
L
3395 },
3396
1ceb70f8 3397 /* PREFIX_0F383C */
42903f7f 3398 {
592d1631
L
3399 { Bad_Opcode },
3400 { Bad_Opcode },
09a2c6cf 3401 { "pmaxsb", { XM, EXx } },
42903f7f
L
3402 },
3403
1ceb70f8 3404 /* PREFIX_0F383D */
42903f7f 3405 {
592d1631
L
3406 { Bad_Opcode },
3407 { Bad_Opcode },
09a2c6cf 3408 { "pmaxsd", { XM, EXx } },
42903f7f
L
3409 },
3410
1ceb70f8 3411 /* PREFIX_0F383E */
42903f7f 3412 {
592d1631
L
3413 { Bad_Opcode },
3414 { Bad_Opcode },
09a2c6cf 3415 { "pmaxuw", { XM, EXx } },
42903f7f
L
3416 },
3417
1ceb70f8 3418 /* PREFIX_0F383F */
42903f7f 3419 {
592d1631
L
3420 { Bad_Opcode },
3421 { Bad_Opcode },
09a2c6cf 3422 { "pmaxud", { XM, EXx } },
42903f7f
L
3423 },
3424
1ceb70f8 3425 /* PREFIX_0F3840 */
42903f7f 3426 {
592d1631
L
3427 { Bad_Opcode },
3428 { Bad_Opcode },
09a2c6cf 3429 { "pmulld", { XM, EXx } },
42903f7f
L
3430 },
3431
1ceb70f8 3432 /* PREFIX_0F3841 */
42903f7f 3433 {
592d1631
L
3434 { Bad_Opcode },
3435 { Bad_Opcode },
09a2c6cf 3436 { "phminposuw", { XM, EXx } },
42903f7f
L
3437 },
3438
f1f8f695
L
3439 /* PREFIX_0F3880 */
3440 {
592d1631
L
3441 { Bad_Opcode },
3442 { Bad_Opcode },
f1f8f695 3443 { "invept", { Gm, Mo } },
f1f8f695
L
3444 },
3445
3446 /* PREFIX_0F3881 */
3447 {
592d1631
L
3448 { Bad_Opcode },
3449 { Bad_Opcode },
f1f8f695 3450 { "invvpid", { Gm, Mo } },
f1f8f695
L
3451 },
3452
6c30d220
L
3453 /* PREFIX_0F3882 */
3454 {
3455 { Bad_Opcode },
3456 { Bad_Opcode },
3457 { "invpcid", { Gm, M } },
3458 },
3459
c0f3af97
L
3460 /* PREFIX_0F38DB */
3461 {
592d1631
L
3462 { Bad_Opcode },
3463 { Bad_Opcode },
c0f3af97 3464 { "aesimc", { XM, EXx } },
c0f3af97
L
3465 },
3466
3467 /* PREFIX_0F38DC */
3468 {
592d1631
L
3469 { Bad_Opcode },
3470 { Bad_Opcode },
c0f3af97 3471 { "aesenc", { XM, EXx } },
c0f3af97
L
3472 },
3473
3474 /* PREFIX_0F38DD */
3475 {
592d1631
L
3476 { Bad_Opcode },
3477 { Bad_Opcode },
c0f3af97 3478 { "aesenclast", { XM, EXx } },
c0f3af97
L
3479 },
3480
3481 /* PREFIX_0F38DE */
3482 {
592d1631
L
3483 { Bad_Opcode },
3484 { Bad_Opcode },
c0f3af97 3485 { "aesdec", { XM, EXx } },
c0f3af97
L
3486 },
3487
3488 /* PREFIX_0F38DF */
3489 {
592d1631
L
3490 { Bad_Opcode },
3491 { Bad_Opcode },
c0f3af97 3492 { "aesdeclast", { XM, EXx } },
c0f3af97
L
3493 },
3494
1ceb70f8 3495 /* PREFIX_0F38F0 */
4e7d34a6 3496 {
f1f8f695 3497 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
592d1631 3498 { Bad_Opcode },
f1f8f695 3499 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
7bb15c6f 3500 { "crc32", { Gdq, { CRC32_Fixup, b_mode } } },
4e7d34a6
L
3501 },
3502
1ceb70f8 3503 /* PREFIX_0F38F1 */
4e7d34a6 3504 {
f1f8f695 3505 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
592d1631 3506 { Bad_Opcode },
f1f8f695 3507 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
7bb15c6f 3508 { "crc32", { Gdq, { CRC32_Fixup, v_mode } } },
4e7d34a6
L
3509 },
3510
e2e1fcde
L
3511 /* PREFIX_0F38F6 */
3512 {
3513 { Bad_Opcode },
3514 { "adoxS", { Gdq, Edq} },
3515 { "adcxS", { Gdq, Edq} },
3516 { Bad_Opcode },
3517 },
3518
1ceb70f8 3519 /* PREFIX_0F3A08 */
42903f7f 3520 {
592d1631
L
3521 { Bad_Opcode },
3522 { Bad_Opcode },
09a2c6cf 3523 { "roundps", { XM, EXx, Ib } },
42903f7f
L
3524 },
3525
1ceb70f8 3526 /* PREFIX_0F3A09 */
42903f7f 3527 {
592d1631
L
3528 { Bad_Opcode },
3529 { Bad_Opcode },
09a2c6cf 3530 { "roundpd", { XM, EXx, Ib } },
42903f7f
L
3531 },
3532
1ceb70f8 3533 /* PREFIX_0F3A0A */
42903f7f 3534 {
592d1631
L
3535 { Bad_Opcode },
3536 { Bad_Opcode },
09335d05 3537 { "roundss", { XM, EXd, Ib } },
42903f7f
L
3538 },
3539
1ceb70f8 3540 /* PREFIX_0F3A0B */
42903f7f 3541 {
592d1631
L
3542 { Bad_Opcode },
3543 { Bad_Opcode },
09335d05 3544 { "roundsd", { XM, EXq, Ib } },
42903f7f
L
3545 },
3546
1ceb70f8 3547 /* PREFIX_0F3A0C */
42903f7f 3548 {
592d1631
L
3549 { Bad_Opcode },
3550 { Bad_Opcode },
09a2c6cf 3551 { "blendps", { XM, EXx, Ib } },
42903f7f
L
3552 },
3553
1ceb70f8 3554 /* PREFIX_0F3A0D */
42903f7f 3555 {
592d1631
L
3556 { Bad_Opcode },
3557 { Bad_Opcode },
09a2c6cf 3558 { "blendpd", { XM, EXx, Ib } },
42903f7f
L
3559 },
3560
1ceb70f8 3561 /* PREFIX_0F3A0E */
42903f7f 3562 {
592d1631
L
3563 { Bad_Opcode },
3564 { Bad_Opcode },
09a2c6cf 3565 { "pblendw", { XM, EXx, Ib } },
42903f7f
L
3566 },
3567
1ceb70f8 3568 /* PREFIX_0F3A14 */
42903f7f 3569 {
592d1631
L
3570 { Bad_Opcode },
3571 { Bad_Opcode },
42903f7f 3572 { "pextrb", { Edqb, XM, Ib } },
42903f7f
L
3573 },
3574
1ceb70f8 3575 /* PREFIX_0F3A15 */
42903f7f 3576 {
592d1631
L
3577 { Bad_Opcode },
3578 { Bad_Opcode },
42903f7f 3579 { "pextrw", { Edqw, XM, Ib } },
42903f7f
L
3580 },
3581
1ceb70f8 3582 /* PREFIX_0F3A16 */
42903f7f 3583 {
592d1631
L
3584 { Bad_Opcode },
3585 { Bad_Opcode },
42903f7f 3586 { "pextrK", { Edq, XM, Ib } },
42903f7f
L
3587 },
3588
1ceb70f8 3589 /* PREFIX_0F3A17 */
42903f7f 3590 {
592d1631
L
3591 { Bad_Opcode },
3592 { Bad_Opcode },
42903f7f 3593 { "extractps", { Edqd, XM, Ib } },
42903f7f
L
3594 },
3595
1ceb70f8 3596 /* PREFIX_0F3A20 */
42903f7f 3597 {
592d1631
L
3598 { Bad_Opcode },
3599 { Bad_Opcode },
42903f7f 3600 { "pinsrb", { XM, Edqb, Ib } },
42903f7f
L
3601 },
3602
1ceb70f8 3603 /* PREFIX_0F3A21 */
42903f7f 3604 {
592d1631
L
3605 { Bad_Opcode },
3606 { Bad_Opcode },
8976381e 3607 { "insertps", { XM, EXd, Ib } },
42903f7f
L
3608 },
3609
1ceb70f8 3610 /* PREFIX_0F3A22 */
42903f7f 3611 {
592d1631
L
3612 { Bad_Opcode },
3613 { Bad_Opcode },
42903f7f 3614 { "pinsrK", { XM, Edq, Ib } },
42903f7f
L
3615 },
3616
1ceb70f8 3617 /* PREFIX_0F3A40 */
42903f7f 3618 {
592d1631
L
3619 { Bad_Opcode },
3620 { Bad_Opcode },
09a2c6cf 3621 { "dpps", { XM, EXx, Ib } },
42903f7f
L
3622 },
3623
1ceb70f8 3624 /* PREFIX_0F3A41 */
42903f7f 3625 {
592d1631
L
3626 { Bad_Opcode },
3627 { Bad_Opcode },
09a2c6cf 3628 { "dppd", { XM, EXx, Ib } },
42903f7f
L
3629 },
3630
1ceb70f8 3631 /* PREFIX_0F3A42 */
42903f7f 3632 {
592d1631
L
3633 { Bad_Opcode },
3634 { Bad_Opcode },
09a2c6cf 3635 { "mpsadbw", { XM, EXx, Ib } },
42903f7f 3636 },
381d071f 3637
c0f3af97
L
3638 /* PREFIX_0F3A44 */
3639 {
592d1631
L
3640 { Bad_Opcode },
3641 { Bad_Opcode },
c0f3af97 3642 { "pclmulqdq", { XM, EXx, PCLMUL } },
c0f3af97
L
3643 },
3644
1ceb70f8 3645 /* PREFIX_0F3A60 */
381d071f 3646 {
592d1631
L
3647 { Bad_Opcode },
3648 { Bad_Opcode },
4e7d34a6 3649 { "pcmpestrm", { XM, EXx, Ib } },
381d071f
L
3650 },
3651
1ceb70f8 3652 /* PREFIX_0F3A61 */
381d071f 3653 {
592d1631
L
3654 { Bad_Opcode },
3655 { Bad_Opcode },
4e7d34a6 3656 { "pcmpestri", { XM, EXx, Ib } },
381d071f
L
3657 },
3658
1ceb70f8 3659 /* PREFIX_0F3A62 */
381d071f 3660 {
592d1631
L
3661 { Bad_Opcode },
3662 { Bad_Opcode },
4e7d34a6 3663 { "pcmpistrm", { XM, EXx, Ib } },
381d071f
L
3664 },
3665
1ceb70f8 3666 /* PREFIX_0F3A63 */
381d071f 3667 {
592d1631
L
3668 { Bad_Opcode },
3669 { Bad_Opcode },
4e7d34a6 3670 { "pcmpistri", { XM, EXx, Ib } },
381d071f 3671 },
09a2c6cf 3672
c0f3af97 3673 /* PREFIX_0F3ADF */
09a2c6cf 3674 {
592d1631
L
3675 { Bad_Opcode },
3676 { Bad_Opcode },
c0f3af97 3677 { "aeskeygenassist", { XM, EXx, Ib } },
09a2c6cf
L
3678 },
3679
592a252b 3680 /* PREFIX_VEX_0F10 */
09a2c6cf 3681 {
592a252b
L
3682 { VEX_W_TABLE (VEX_W_0F10_P_0) },
3683 { VEX_LEN_TABLE (VEX_LEN_0F10_P_1) },
3684 { VEX_W_TABLE (VEX_W_0F10_P_2) },
3685 { VEX_LEN_TABLE (VEX_LEN_0F10_P_3) },
09a2c6cf
L
3686 },
3687
592a252b 3688 /* PREFIX_VEX_0F11 */
09a2c6cf 3689 {
592a252b
L
3690 { VEX_W_TABLE (VEX_W_0F11_P_0) },
3691 { VEX_LEN_TABLE (VEX_LEN_0F11_P_1) },
3692 { VEX_W_TABLE (VEX_W_0F11_P_2) },
3693 { VEX_LEN_TABLE (VEX_LEN_0F11_P_3) },
09a2c6cf
L
3694 },
3695
592a252b 3696 /* PREFIX_VEX_0F12 */
09a2c6cf 3697 {
592a252b
L
3698 { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
3699 { VEX_W_TABLE (VEX_W_0F12_P_1) },
3700 { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) },
3701 { VEX_W_TABLE (VEX_W_0F12_P_3) },
09a2c6cf
L
3702 },
3703
592a252b 3704 /* PREFIX_VEX_0F16 */
09a2c6cf 3705 {
592a252b
L
3706 { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
3707 { VEX_W_TABLE (VEX_W_0F16_P_1) },
3708 { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) },
5f754f58 3709 },
7c52e0e8 3710
592a252b 3711 /* PREFIX_VEX_0F2A */
5f754f58 3712 {
592d1631 3713 { Bad_Opcode },
592a252b 3714 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_1) },
592d1631 3715 { Bad_Opcode },
592a252b 3716 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_3) },
5f754f58 3717 },
7c52e0e8 3718
592a252b 3719 /* PREFIX_VEX_0F2C */
5f754f58 3720 {
592d1631 3721 { Bad_Opcode },
592a252b 3722 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_1) },
592d1631 3723 { Bad_Opcode },
592a252b 3724 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_3) },
5f754f58 3725 },
7c52e0e8 3726
592a252b 3727 /* PREFIX_VEX_0F2D */
7c52e0e8 3728 {
592d1631 3729 { Bad_Opcode },
592a252b 3730 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_1) },
592d1631 3731 { Bad_Opcode },
592a252b 3732 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_3) },
7c52e0e8
L
3733 },
3734
592a252b 3735 /* PREFIX_VEX_0F2E */
7c52e0e8 3736 {
592a252b 3737 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_0) },
592d1631 3738 { Bad_Opcode },
592a252b 3739 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_2) },
7c52e0e8
L
3740 },
3741
592a252b 3742 /* PREFIX_VEX_0F2F */
7c52e0e8 3743 {
592a252b 3744 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_0) },
592d1631 3745 { Bad_Opcode },
592a252b 3746 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_2) },
7c52e0e8
L
3747 },
3748
592a252b 3749 /* PREFIX_VEX_0F51 */
7c52e0e8 3750 {
592a252b
L
3751 { VEX_W_TABLE (VEX_W_0F51_P_0) },
3752 { VEX_LEN_TABLE (VEX_LEN_0F51_P_1) },
3753 { VEX_W_TABLE (VEX_W_0F51_P_2) },
3754 { VEX_LEN_TABLE (VEX_LEN_0F51_P_3) },
7c52e0e8
L
3755 },
3756
592a252b 3757 /* PREFIX_VEX_0F52 */
7c52e0e8 3758 {
592a252b
L
3759 { VEX_W_TABLE (VEX_W_0F52_P_0) },
3760 { VEX_LEN_TABLE (VEX_LEN_0F52_P_1) },
7c52e0e8
L
3761 },
3762
592a252b 3763 /* PREFIX_VEX_0F53 */
7c52e0e8 3764 {
592a252b
L
3765 { VEX_W_TABLE (VEX_W_0F53_P_0) },
3766 { VEX_LEN_TABLE (VEX_LEN_0F53_P_1) },
7c52e0e8
L
3767 },
3768
592a252b 3769 /* PREFIX_VEX_0F58 */
7c52e0e8 3770 {
592a252b
L
3771 { VEX_W_TABLE (VEX_W_0F58_P_0) },
3772 { VEX_LEN_TABLE (VEX_LEN_0F58_P_1) },
3773 { VEX_W_TABLE (VEX_W_0F58_P_2) },
3774 { VEX_LEN_TABLE (VEX_LEN_0F58_P_3) },
7c52e0e8
L
3775 },
3776
592a252b 3777 /* PREFIX_VEX_0F59 */
7c52e0e8 3778 {
592a252b
L
3779 { VEX_W_TABLE (VEX_W_0F59_P_0) },
3780 { VEX_LEN_TABLE (VEX_LEN_0F59_P_1) },
3781 { VEX_W_TABLE (VEX_W_0F59_P_2) },
3782 { VEX_LEN_TABLE (VEX_LEN_0F59_P_3) },
7c52e0e8
L
3783 },
3784
592a252b 3785 /* PREFIX_VEX_0F5A */
7c52e0e8 3786 {
592a252b
L
3787 { VEX_W_TABLE (VEX_W_0F5A_P_0) },
3788 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_1) },
c0f3af97 3789 { "vcvtpd2ps%XY", { XMM, EXx } },
592a252b 3790 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_3) },
7c52e0e8
L
3791 },
3792
592a252b 3793 /* PREFIX_VEX_0F5B */
7c52e0e8 3794 {
592a252b
L
3795 { VEX_W_TABLE (VEX_W_0F5B_P_0) },
3796 { VEX_W_TABLE (VEX_W_0F5B_P_1) },
3797 { VEX_W_TABLE (VEX_W_0F5B_P_2) },
7c52e0e8
L
3798 },
3799
592a252b 3800 /* PREFIX_VEX_0F5C */
7c52e0e8 3801 {
592a252b
L
3802 { VEX_W_TABLE (VEX_W_0F5C_P_0) },
3803 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_1) },
3804 { VEX_W_TABLE (VEX_W_0F5C_P_2) },
3805 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_3) },
7c52e0e8
L
3806 },
3807
592a252b 3808 /* PREFIX_VEX_0F5D */
7c52e0e8 3809 {
592a252b
L
3810 { VEX_W_TABLE (VEX_W_0F5D_P_0) },
3811 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_1) },
3812 { VEX_W_TABLE (VEX_W_0F5D_P_2) },
3813 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_3) },
7c52e0e8
L
3814 },
3815
592a252b 3816 /* PREFIX_VEX_0F5E */
7c52e0e8 3817 {
592a252b
L
3818 { VEX_W_TABLE (VEX_W_0F5E_P_0) },
3819 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_1) },
3820 { VEX_W_TABLE (VEX_W_0F5E_P_2) },
3821 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_3) },
7c52e0e8
L
3822 },
3823
592a252b 3824 /* PREFIX_VEX_0F5F */
7c52e0e8 3825 {
592a252b
L
3826 { VEX_W_TABLE (VEX_W_0F5F_P_0) },
3827 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_1) },
3828 { VEX_W_TABLE (VEX_W_0F5F_P_2) },
3829 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_3) },
7c52e0e8
L
3830 },
3831
592a252b 3832 /* PREFIX_VEX_0F60 */
7c52e0e8 3833 {
592d1631
L
3834 { Bad_Opcode },
3835 { Bad_Opcode },
6c30d220 3836 { VEX_W_TABLE (VEX_W_0F60_P_2) },
7c52e0e8
L
3837 },
3838
592a252b 3839 /* PREFIX_VEX_0F61 */
7c52e0e8 3840 {
592d1631
L
3841 { Bad_Opcode },
3842 { Bad_Opcode },
6c30d220 3843 { VEX_W_TABLE (VEX_W_0F61_P_2) },
7c52e0e8
L
3844 },
3845
592a252b 3846 /* PREFIX_VEX_0F62 */
7c52e0e8 3847 {
592d1631
L
3848 { Bad_Opcode },
3849 { Bad_Opcode },
6c30d220 3850 { VEX_W_TABLE (VEX_W_0F62_P_2) },
7c52e0e8
L
3851 },
3852
592a252b 3853 /* PREFIX_VEX_0F63 */
7c52e0e8 3854 {
592d1631
L
3855 { Bad_Opcode },
3856 { Bad_Opcode },
6c30d220 3857 { VEX_W_TABLE (VEX_W_0F63_P_2) },
7c52e0e8
L
3858 },
3859
592a252b 3860 /* PREFIX_VEX_0F64 */
7c52e0e8 3861 {
592d1631
L
3862 { Bad_Opcode },
3863 { Bad_Opcode },
6c30d220 3864 { VEX_W_TABLE (VEX_W_0F64_P_2) },
7c52e0e8
L
3865 },
3866
592a252b 3867 /* PREFIX_VEX_0F65 */
7c52e0e8 3868 {
592d1631
L
3869 { Bad_Opcode },
3870 { Bad_Opcode },
6c30d220 3871 { VEX_W_TABLE (VEX_W_0F65_P_2) },
7c52e0e8
L
3872 },
3873
592a252b 3874 /* PREFIX_VEX_0F66 */
7c52e0e8 3875 {
592d1631
L
3876 { Bad_Opcode },
3877 { Bad_Opcode },
6c30d220 3878 { VEX_W_TABLE (VEX_W_0F66_P_2) },
7c52e0e8 3879 },
6439fc28 3880
592a252b 3881 /* PREFIX_VEX_0F67 */
331d2d0d 3882 {
592d1631
L
3883 { Bad_Opcode },
3884 { Bad_Opcode },
6c30d220 3885 { VEX_W_TABLE (VEX_W_0F67_P_2) },
c0f3af97
L
3886 },
3887
592a252b 3888 /* PREFIX_VEX_0F68 */
c0f3af97 3889 {
592d1631
L
3890 { Bad_Opcode },
3891 { Bad_Opcode },
6c30d220 3892 { VEX_W_TABLE (VEX_W_0F68_P_2) },
c0f3af97
L
3893 },
3894
592a252b 3895 /* PREFIX_VEX_0F69 */
c0f3af97 3896 {
592d1631
L
3897 { Bad_Opcode },
3898 { Bad_Opcode },
6c30d220 3899 { VEX_W_TABLE (VEX_W_0F69_P_2) },
c0f3af97
L
3900 },
3901
592a252b 3902 /* PREFIX_VEX_0F6A */
c0f3af97 3903 {
592d1631
L
3904 { Bad_Opcode },
3905 { Bad_Opcode },
6c30d220 3906 { VEX_W_TABLE (VEX_W_0F6A_P_2) },
c0f3af97
L
3907 },
3908
592a252b 3909 /* PREFIX_VEX_0F6B */
c0f3af97 3910 {
592d1631
L
3911 { Bad_Opcode },
3912 { Bad_Opcode },
6c30d220 3913 { VEX_W_TABLE (VEX_W_0F6B_P_2) },
c0f3af97
L
3914 },
3915
592a252b 3916 /* PREFIX_VEX_0F6C */
c0f3af97 3917 {
592d1631
L
3918 { Bad_Opcode },
3919 { Bad_Opcode },
6c30d220 3920 { VEX_W_TABLE (VEX_W_0F6C_P_2) },
c0f3af97
L
3921 },
3922
592a252b 3923 /* PREFIX_VEX_0F6D */
c0f3af97 3924 {
592d1631
L
3925 { Bad_Opcode },
3926 { Bad_Opcode },
6c30d220 3927 { VEX_W_TABLE (VEX_W_0F6D_P_2) },
c0f3af97
L
3928 },
3929
592a252b 3930 /* PREFIX_VEX_0F6E */
c0f3af97 3931 {
592d1631
L
3932 { Bad_Opcode },
3933 { Bad_Opcode },
592a252b 3934 { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) },
c0f3af97
L
3935 },
3936
592a252b 3937 /* PREFIX_VEX_0F6F */
c0f3af97 3938 {
592d1631 3939 { Bad_Opcode },
592a252b
L
3940 { VEX_W_TABLE (VEX_W_0F6F_P_1) },
3941 { VEX_W_TABLE (VEX_W_0F6F_P_2) },
c0f3af97
L
3942 },
3943
592a252b 3944 /* PREFIX_VEX_0F70 */
c0f3af97 3945 {
592d1631 3946 { Bad_Opcode },
6c30d220
L
3947 { VEX_W_TABLE (VEX_W_0F70_P_1) },
3948 { VEX_W_TABLE (VEX_W_0F70_P_2) },
3949 { VEX_W_TABLE (VEX_W_0F70_P_3) },
c0f3af97
L
3950 },
3951
592a252b 3952 /* PREFIX_VEX_0F71_REG_2 */
c0f3af97 3953 {
592d1631
L
3954 { Bad_Opcode },
3955 { Bad_Opcode },
6c30d220 3956 { VEX_W_TABLE (VEX_W_0F71_R_2_P_2) },
c0f3af97
L
3957 },
3958
592a252b 3959 /* PREFIX_VEX_0F71_REG_4 */
c0f3af97 3960 {
592d1631
L
3961 { Bad_Opcode },
3962 { Bad_Opcode },
6c30d220 3963 { VEX_W_TABLE (VEX_W_0F71_R_4_P_2) },
c0f3af97
L
3964 },
3965
592a252b 3966 /* PREFIX_VEX_0F71_REG_6 */
c0f3af97 3967 {
592d1631
L
3968 { Bad_Opcode },
3969 { Bad_Opcode },
6c30d220 3970 { VEX_W_TABLE (VEX_W_0F71_R_6_P_2) },
c0f3af97
L
3971 },
3972
592a252b 3973 /* PREFIX_VEX_0F72_REG_2 */
c0f3af97 3974 {
592d1631
L
3975 { Bad_Opcode },
3976 { Bad_Opcode },
6c30d220 3977 { VEX_W_TABLE (VEX_W_0F72_R_2_P_2) },
c0f3af97
L
3978 },
3979
592a252b 3980 /* PREFIX_VEX_0F72_REG_4 */
c0f3af97 3981 {
592d1631
L
3982 { Bad_Opcode },
3983 { Bad_Opcode },
6c30d220 3984 { VEX_W_TABLE (VEX_W_0F72_R_4_P_2) },
c0f3af97
L
3985 },
3986
592a252b 3987 /* PREFIX_VEX_0F72_REG_6 */
c0f3af97 3988 {
592d1631
L
3989 { Bad_Opcode },
3990 { Bad_Opcode },
6c30d220 3991 { VEX_W_TABLE (VEX_W_0F72_R_6_P_2) },
c0f3af97
L
3992 },
3993
592a252b 3994 /* PREFIX_VEX_0F73_REG_2 */
c0f3af97 3995 {
592d1631
L
3996 { Bad_Opcode },
3997 { Bad_Opcode },
6c30d220 3998 { VEX_W_TABLE (VEX_W_0F73_R_2_P_2) },
c0f3af97
L
3999 },
4000
592a252b 4001 /* PREFIX_VEX_0F73_REG_3 */
c0f3af97 4002 {
592d1631
L
4003 { Bad_Opcode },
4004 { Bad_Opcode },
6c30d220 4005 { VEX_W_TABLE (VEX_W_0F73_R_3_P_2) },
c0f3af97
L
4006 },
4007
592a252b 4008 /* PREFIX_VEX_0F73_REG_6 */
c0f3af97 4009 {
592d1631
L
4010 { Bad_Opcode },
4011 { Bad_Opcode },
6c30d220 4012 { VEX_W_TABLE (VEX_W_0F73_R_6_P_2) },
c0f3af97
L
4013 },
4014
592a252b 4015 /* PREFIX_VEX_0F73_REG_7 */
c0f3af97 4016 {
592d1631
L
4017 { Bad_Opcode },
4018 { Bad_Opcode },
6c30d220 4019 { VEX_W_TABLE (VEX_W_0F73_R_7_P_2) },
c0f3af97
L
4020 },
4021
592a252b 4022 /* PREFIX_VEX_0F74 */
c0f3af97 4023 {
592d1631
L
4024 { Bad_Opcode },
4025 { Bad_Opcode },
6c30d220 4026 { VEX_W_TABLE (VEX_W_0F74_P_2) },
c0f3af97
L
4027 },
4028
592a252b 4029 /* PREFIX_VEX_0F75 */
c0f3af97 4030 {
592d1631
L
4031 { Bad_Opcode },
4032 { Bad_Opcode },
6c30d220 4033 { VEX_W_TABLE (VEX_W_0F75_P_2) },
c0f3af97
L
4034 },
4035
592a252b 4036 /* PREFIX_VEX_0F76 */
c0f3af97 4037 {
592d1631
L
4038 { Bad_Opcode },
4039 { Bad_Opcode },
6c30d220 4040 { VEX_W_TABLE (VEX_W_0F76_P_2) },
c0f3af97
L
4041 },
4042
592a252b 4043 /* PREFIX_VEX_0F77 */
c0f3af97 4044 {
592a252b 4045 { VEX_W_TABLE (VEX_W_0F77_P_0) },
c0f3af97
L
4046 },
4047
592a252b 4048 /* PREFIX_VEX_0F7C */
c0f3af97 4049 {
592d1631
L
4050 { Bad_Opcode },
4051 { Bad_Opcode },
592a252b
L
4052 { VEX_W_TABLE (VEX_W_0F7C_P_2) },
4053 { VEX_W_TABLE (VEX_W_0F7C_P_3) },
c0f3af97
L
4054 },
4055
592a252b 4056 /* PREFIX_VEX_0F7D */
c0f3af97 4057 {
592d1631
L
4058 { Bad_Opcode },
4059 { Bad_Opcode },
592a252b
L
4060 { VEX_W_TABLE (VEX_W_0F7D_P_2) },
4061 { VEX_W_TABLE (VEX_W_0F7D_P_3) },
c0f3af97
L
4062 },
4063
592a252b 4064 /* PREFIX_VEX_0F7E */
c0f3af97 4065 {
592d1631 4066 { Bad_Opcode },
592a252b
L
4067 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) },
4068 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
c0f3af97
L
4069 },
4070
592a252b 4071 /* PREFIX_VEX_0F7F */
c0f3af97 4072 {
592d1631 4073 { Bad_Opcode },
592a252b
L
4074 { VEX_W_TABLE (VEX_W_0F7F_P_1) },
4075 { VEX_W_TABLE (VEX_W_0F7F_P_2) },
c0f3af97
L
4076 },
4077
592a252b 4078 /* PREFIX_VEX_0FC2 */
c0f3af97 4079 {
592a252b
L
4080 { VEX_W_TABLE (VEX_W_0FC2_P_0) },
4081 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_1) },
4082 { VEX_W_TABLE (VEX_W_0FC2_P_2) },
4083 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_3) },
c0f3af97
L
4084 },
4085
592a252b 4086 /* PREFIX_VEX_0FC4 */
c0f3af97 4087 {
592d1631
L
4088 { Bad_Opcode },
4089 { Bad_Opcode },
592a252b 4090 { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) },
c0f3af97
L
4091 },
4092
592a252b 4093 /* PREFIX_VEX_0FC5 */
c0f3af97 4094 {
592d1631
L
4095 { Bad_Opcode },
4096 { Bad_Opcode },
592a252b 4097 { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) },
c0f3af97
L
4098 },
4099
592a252b 4100 /* PREFIX_VEX_0FD0 */
c0f3af97 4101 {
592d1631
L
4102 { Bad_Opcode },
4103 { Bad_Opcode },
592a252b
L
4104 { VEX_W_TABLE (VEX_W_0FD0_P_2) },
4105 { VEX_W_TABLE (VEX_W_0FD0_P_3) },
c0f3af97
L
4106 },
4107
592a252b 4108 /* PREFIX_VEX_0FD1 */
c0f3af97 4109 {
592d1631
L
4110 { Bad_Opcode },
4111 { Bad_Opcode },
6c30d220 4112 { VEX_W_TABLE (VEX_W_0FD1_P_2) },
c0f3af97
L
4113 },
4114
592a252b 4115 /* PREFIX_VEX_0FD2 */
c0f3af97 4116 {
592d1631
L
4117 { Bad_Opcode },
4118 { Bad_Opcode },
6c30d220 4119 { VEX_W_TABLE (VEX_W_0FD2_P_2) },
c0f3af97
L
4120 },
4121
592a252b 4122 /* PREFIX_VEX_0FD3 */
c0f3af97 4123 {
592d1631
L
4124 { Bad_Opcode },
4125 { Bad_Opcode },
6c30d220 4126 { VEX_W_TABLE (VEX_W_0FD3_P_2) },
c0f3af97
L
4127 },
4128
592a252b 4129 /* PREFIX_VEX_0FD4 */
c0f3af97 4130 {
592d1631
L
4131 { Bad_Opcode },
4132 { Bad_Opcode },
6c30d220 4133 { VEX_W_TABLE (VEX_W_0FD4_P_2) },
c0f3af97
L
4134 },
4135
592a252b 4136 /* PREFIX_VEX_0FD5 */
c0f3af97 4137 {
592d1631
L
4138 { Bad_Opcode },
4139 { Bad_Opcode },
6c30d220 4140 { VEX_W_TABLE (VEX_W_0FD5_P_2) },
c0f3af97
L
4141 },
4142
592a252b 4143 /* PREFIX_VEX_0FD6 */
c0f3af97 4144 {
592d1631
L
4145 { Bad_Opcode },
4146 { Bad_Opcode },
592a252b 4147 { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) },
c0f3af97
L
4148 },
4149
592a252b 4150 /* PREFIX_VEX_0FD7 */
c0f3af97 4151 {
592d1631
L
4152 { Bad_Opcode },
4153 { Bad_Opcode },
592a252b 4154 { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) },
c0f3af97
L
4155 },
4156
592a252b 4157 /* PREFIX_VEX_0FD8 */
c0f3af97 4158 {
592d1631
L
4159 { Bad_Opcode },
4160 { Bad_Opcode },
6c30d220 4161 { VEX_W_TABLE (VEX_W_0FD8_P_2) },
c0f3af97
L
4162 },
4163
592a252b 4164 /* PREFIX_VEX_0FD9 */
c0f3af97 4165 {
592d1631
L
4166 { Bad_Opcode },
4167 { Bad_Opcode },
6c30d220 4168 { VEX_W_TABLE (VEX_W_0FD9_P_2) },
c0f3af97
L
4169 },
4170
592a252b 4171 /* PREFIX_VEX_0FDA */
c0f3af97 4172 {
592d1631
L
4173 { Bad_Opcode },
4174 { Bad_Opcode },
6c30d220 4175 { VEX_W_TABLE (VEX_W_0FDA_P_2) },
c0f3af97
L
4176 },
4177
592a252b 4178 /* PREFIX_VEX_0FDB */
c0f3af97 4179 {
592d1631
L
4180 { Bad_Opcode },
4181 { Bad_Opcode },
6c30d220 4182 { VEX_W_TABLE (VEX_W_0FDB_P_2) },
c0f3af97
L
4183 },
4184
592a252b 4185 /* PREFIX_VEX_0FDC */
c0f3af97 4186 {
592d1631
L
4187 { Bad_Opcode },
4188 { Bad_Opcode },
6c30d220 4189 { VEX_W_TABLE (VEX_W_0FDC_P_2) },
c0f3af97
L
4190 },
4191
592a252b 4192 /* PREFIX_VEX_0FDD */
c0f3af97 4193 {
592d1631
L
4194 { Bad_Opcode },
4195 { Bad_Opcode },
6c30d220 4196 { VEX_W_TABLE (VEX_W_0FDD_P_2) },
c0f3af97
L
4197 },
4198
592a252b 4199 /* PREFIX_VEX_0FDE */
c0f3af97 4200 {
592d1631
L
4201 { Bad_Opcode },
4202 { Bad_Opcode },
6c30d220 4203 { VEX_W_TABLE (VEX_W_0FDE_P_2) },
c0f3af97
L
4204 },
4205
592a252b 4206 /* PREFIX_VEX_0FDF */
c0f3af97 4207 {
592d1631
L
4208 { Bad_Opcode },
4209 { Bad_Opcode },
6c30d220 4210 { VEX_W_TABLE (VEX_W_0FDF_P_2) },
c0f3af97
L
4211 },
4212
592a252b 4213 /* PREFIX_VEX_0FE0 */
c0f3af97 4214 {
592d1631
L
4215 { Bad_Opcode },
4216 { Bad_Opcode },
6c30d220 4217 { VEX_W_TABLE (VEX_W_0FE0_P_2) },
c0f3af97
L
4218 },
4219
592a252b 4220 /* PREFIX_VEX_0FE1 */
c0f3af97 4221 {
592d1631
L
4222 { Bad_Opcode },
4223 { Bad_Opcode },
6c30d220 4224 { VEX_W_TABLE (VEX_W_0FE1_P_2) },
c0f3af97
L
4225 },
4226
592a252b 4227 /* PREFIX_VEX_0FE2 */
c0f3af97 4228 {
592d1631
L
4229 { Bad_Opcode },
4230 { Bad_Opcode },
6c30d220 4231 { VEX_W_TABLE (VEX_W_0FE2_P_2) },
c0f3af97
L
4232 },
4233
592a252b 4234 /* PREFIX_VEX_0FE3 */
c0f3af97 4235 {
592d1631
L
4236 { Bad_Opcode },
4237 { Bad_Opcode },
6c30d220 4238 { VEX_W_TABLE (VEX_W_0FE3_P_2) },
c0f3af97
L
4239 },
4240
592a252b 4241 /* PREFIX_VEX_0FE4 */
c0f3af97 4242 {
592d1631
L
4243 { Bad_Opcode },
4244 { Bad_Opcode },
6c30d220 4245 { VEX_W_TABLE (VEX_W_0FE4_P_2) },
c0f3af97
L
4246 },
4247
592a252b 4248 /* PREFIX_VEX_0FE5 */
c0f3af97 4249 {
592d1631
L
4250 { Bad_Opcode },
4251 { Bad_Opcode },
6c30d220 4252 { VEX_W_TABLE (VEX_W_0FE5_P_2) },
c0f3af97
L
4253 },
4254
592a252b 4255 /* PREFIX_VEX_0FE6 */
c0f3af97 4256 {
592d1631 4257 { Bad_Opcode },
592a252b
L
4258 { VEX_W_TABLE (VEX_W_0FE6_P_1) },
4259 { VEX_W_TABLE (VEX_W_0FE6_P_2) },
4260 { VEX_W_TABLE (VEX_W_0FE6_P_3) },
c0f3af97
L
4261 },
4262
592a252b 4263 /* PREFIX_VEX_0FE7 */
c0f3af97 4264 {
592d1631
L
4265 { Bad_Opcode },
4266 { Bad_Opcode },
592a252b 4267 { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) },
c0f3af97
L
4268 },
4269
592a252b 4270 /* PREFIX_VEX_0FE8 */
c0f3af97 4271 {
592d1631
L
4272 { Bad_Opcode },
4273 { Bad_Opcode },
6c30d220 4274 { VEX_W_TABLE (VEX_W_0FE8_P_2) },
c0f3af97
L
4275 },
4276
592a252b 4277 /* PREFIX_VEX_0FE9 */
c0f3af97 4278 {
592d1631
L
4279 { Bad_Opcode },
4280 { Bad_Opcode },
6c30d220 4281 { VEX_W_TABLE (VEX_W_0FE9_P_2) },
c0f3af97
L
4282 },
4283
592a252b 4284 /* PREFIX_VEX_0FEA */
c0f3af97 4285 {
592d1631
L
4286 { Bad_Opcode },
4287 { Bad_Opcode },
6c30d220 4288 { VEX_W_TABLE (VEX_W_0FEA_P_2) },
c0f3af97
L
4289 },
4290
592a252b 4291 /* PREFIX_VEX_0FEB */
c0f3af97 4292 {
592d1631
L
4293 { Bad_Opcode },
4294 { Bad_Opcode },
6c30d220 4295 { VEX_W_TABLE (VEX_W_0FEB_P_2) },
c0f3af97
L
4296 },
4297
592a252b 4298 /* PREFIX_VEX_0FEC */
c0f3af97 4299 {
592d1631
L
4300 { Bad_Opcode },
4301 { Bad_Opcode },
6c30d220 4302 { VEX_W_TABLE (VEX_W_0FEC_P_2) },
c0f3af97
L
4303 },
4304
592a252b 4305 /* PREFIX_VEX_0FED */
c0f3af97 4306 {
592d1631
L
4307 { Bad_Opcode },
4308 { Bad_Opcode },
6c30d220 4309 { VEX_W_TABLE (VEX_W_0FED_P_2) },
c0f3af97
L
4310 },
4311
592a252b 4312 /* PREFIX_VEX_0FEE */
c0f3af97 4313 {
592d1631
L
4314 { Bad_Opcode },
4315 { Bad_Opcode },
6c30d220 4316 { VEX_W_TABLE (VEX_W_0FEE_P_2) },
c0f3af97
L
4317 },
4318
592a252b 4319 /* PREFIX_VEX_0FEF */
c0f3af97 4320 {
592d1631
L
4321 { Bad_Opcode },
4322 { Bad_Opcode },
6c30d220 4323 { VEX_W_TABLE (VEX_W_0FEF_P_2) },
c0f3af97
L
4324 },
4325
592a252b 4326 /* PREFIX_VEX_0FF0 */
c0f3af97 4327 {
592d1631
L
4328 { Bad_Opcode },
4329 { Bad_Opcode },
4330 { Bad_Opcode },
592a252b 4331 { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) },
c0f3af97
L
4332 },
4333
592a252b 4334 /* PREFIX_VEX_0FF1 */
c0f3af97 4335 {
592d1631
L
4336 { Bad_Opcode },
4337 { Bad_Opcode },
6c30d220 4338 { VEX_W_TABLE (VEX_W_0FF1_P_2) },
c0f3af97
L
4339 },
4340
592a252b 4341 /* PREFIX_VEX_0FF2 */
c0f3af97 4342 {
592d1631
L
4343 { Bad_Opcode },
4344 { Bad_Opcode },
6c30d220 4345 { VEX_W_TABLE (VEX_W_0FF2_P_2) },
c0f3af97
L
4346 },
4347
592a252b 4348 /* PREFIX_VEX_0FF3 */
c0f3af97 4349 {
592d1631
L
4350 { Bad_Opcode },
4351 { Bad_Opcode },
6c30d220 4352 { VEX_W_TABLE (VEX_W_0FF3_P_2) },
c0f3af97
L
4353 },
4354
592a252b 4355 /* PREFIX_VEX_0FF4 */
c0f3af97 4356 {
592d1631
L
4357 { Bad_Opcode },
4358 { Bad_Opcode },
6c30d220 4359 { VEX_W_TABLE (VEX_W_0FF4_P_2) },
c0f3af97
L
4360 },
4361
592a252b 4362 /* PREFIX_VEX_0FF5 */
c0f3af97 4363 {
592d1631
L
4364 { Bad_Opcode },
4365 { Bad_Opcode },
6c30d220 4366 { VEX_W_TABLE (VEX_W_0FF5_P_2) },
c0f3af97
L
4367 },
4368
592a252b 4369 /* PREFIX_VEX_0FF6 */
c0f3af97 4370 {
592d1631
L
4371 { Bad_Opcode },
4372 { Bad_Opcode },
6c30d220 4373 { VEX_W_TABLE (VEX_W_0FF6_P_2) },
c0f3af97
L
4374 },
4375
592a252b 4376 /* PREFIX_VEX_0FF7 */
c0f3af97 4377 {
592d1631
L
4378 { Bad_Opcode },
4379 { Bad_Opcode },
592a252b 4380 { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) },
c0f3af97
L
4381 },
4382
592a252b 4383 /* PREFIX_VEX_0FF8 */
c0f3af97 4384 {
592d1631
L
4385 { Bad_Opcode },
4386 { Bad_Opcode },
6c30d220 4387 { VEX_W_TABLE (VEX_W_0FF8_P_2) },
c0f3af97
L
4388 },
4389
592a252b 4390 /* PREFIX_VEX_0FF9 */
c0f3af97 4391 {
592d1631
L
4392 { Bad_Opcode },
4393 { Bad_Opcode },
6c30d220 4394 { VEX_W_TABLE (VEX_W_0FF9_P_2) },
c0f3af97
L
4395 },
4396
592a252b 4397 /* PREFIX_VEX_0FFA */
c0f3af97 4398 {
592d1631
L
4399 { Bad_Opcode },
4400 { Bad_Opcode },
6c30d220 4401 { VEX_W_TABLE (VEX_W_0FFA_P_2) },
c0f3af97
L
4402 },
4403
592a252b 4404 /* PREFIX_VEX_0FFB */
c0f3af97 4405 {
592d1631
L
4406 { Bad_Opcode },
4407 { Bad_Opcode },
6c30d220 4408 { VEX_W_TABLE (VEX_W_0FFB_P_2) },
c0f3af97
L
4409 },
4410
592a252b 4411 /* PREFIX_VEX_0FFC */
c0f3af97 4412 {
592d1631
L
4413 { Bad_Opcode },
4414 { Bad_Opcode },
6c30d220 4415 { VEX_W_TABLE (VEX_W_0FFC_P_2) },
c0f3af97
L
4416 },
4417
592a252b 4418 /* PREFIX_VEX_0FFD */
c0f3af97 4419 {
592d1631
L
4420 { Bad_Opcode },
4421 { Bad_Opcode },
6c30d220 4422 { VEX_W_TABLE (VEX_W_0FFD_P_2) },
c0f3af97
L
4423 },
4424
592a252b 4425 /* PREFIX_VEX_0FFE */
c0f3af97 4426 {
592d1631
L
4427 { Bad_Opcode },
4428 { Bad_Opcode },
6c30d220 4429 { VEX_W_TABLE (VEX_W_0FFE_P_2) },
c0f3af97
L
4430 },
4431
592a252b 4432 /* PREFIX_VEX_0F3800 */
c0f3af97 4433 {
592d1631
L
4434 { Bad_Opcode },
4435 { Bad_Opcode },
6c30d220 4436 { VEX_W_TABLE (VEX_W_0F3800_P_2) },
c0f3af97
L
4437 },
4438
592a252b 4439 /* PREFIX_VEX_0F3801 */
c0f3af97 4440 {
592d1631
L
4441 { Bad_Opcode },
4442 { Bad_Opcode },
6c30d220 4443 { VEX_W_TABLE (VEX_W_0F3801_P_2) },
c0f3af97
L
4444 },
4445
592a252b 4446 /* PREFIX_VEX_0F3802 */
c0f3af97 4447 {
592d1631
L
4448 { Bad_Opcode },
4449 { Bad_Opcode },
6c30d220 4450 { VEX_W_TABLE (VEX_W_0F3802_P_2) },
c0f3af97
L
4451 },
4452
592a252b 4453 /* PREFIX_VEX_0F3803 */
c0f3af97 4454 {
592d1631
L
4455 { Bad_Opcode },
4456 { Bad_Opcode },
6c30d220 4457 { VEX_W_TABLE (VEX_W_0F3803_P_2) },
c0f3af97
L
4458 },
4459
592a252b 4460 /* PREFIX_VEX_0F3804 */
c0f3af97 4461 {
592d1631
L
4462 { Bad_Opcode },
4463 { Bad_Opcode },
6c30d220 4464 { VEX_W_TABLE (VEX_W_0F3804_P_2) },
c0f3af97
L
4465 },
4466
592a252b 4467 /* PREFIX_VEX_0F3805 */
c0f3af97 4468 {
592d1631
L
4469 { Bad_Opcode },
4470 { Bad_Opcode },
6c30d220 4471 { VEX_W_TABLE (VEX_W_0F3805_P_2) },
c0f3af97
L
4472 },
4473
592a252b 4474 /* PREFIX_VEX_0F3806 */
c0f3af97 4475 {
592d1631
L
4476 { Bad_Opcode },
4477 { Bad_Opcode },
6c30d220 4478 { VEX_W_TABLE (VEX_W_0F3806_P_2) },
c0f3af97
L
4479 },
4480
592a252b 4481 /* PREFIX_VEX_0F3807 */
c0f3af97 4482 {
592d1631
L
4483 { Bad_Opcode },
4484 { Bad_Opcode },
6c30d220 4485 { VEX_W_TABLE (VEX_W_0F3807_P_2) },
c0f3af97
L
4486 },
4487
592a252b 4488 /* PREFIX_VEX_0F3808 */
c0f3af97 4489 {
592d1631
L
4490 { Bad_Opcode },
4491 { Bad_Opcode },
6c30d220 4492 { VEX_W_TABLE (VEX_W_0F3808_P_2) },
c0f3af97
L
4493 },
4494
592a252b 4495 /* PREFIX_VEX_0F3809 */
c0f3af97 4496 {
592d1631
L
4497 { Bad_Opcode },
4498 { Bad_Opcode },
6c30d220 4499 { VEX_W_TABLE (VEX_W_0F3809_P_2) },
c0f3af97
L
4500 },
4501
592a252b 4502 /* PREFIX_VEX_0F380A */
c0f3af97 4503 {
592d1631
L
4504 { Bad_Opcode },
4505 { Bad_Opcode },
6c30d220 4506 { VEX_W_TABLE (VEX_W_0F380A_P_2) },
c0f3af97
L
4507 },
4508
592a252b 4509 /* PREFIX_VEX_0F380B */
c0f3af97 4510 {
592d1631
L
4511 { Bad_Opcode },
4512 { Bad_Opcode },
6c30d220 4513 { VEX_W_TABLE (VEX_W_0F380B_P_2) },
c0f3af97
L
4514 },
4515
592a252b 4516 /* PREFIX_VEX_0F380C */
c0f3af97 4517 {
592d1631
L
4518 { Bad_Opcode },
4519 { Bad_Opcode },
592a252b 4520 { VEX_W_TABLE (VEX_W_0F380C_P_2) },
c0f3af97
L
4521 },
4522
592a252b 4523 /* PREFIX_VEX_0F380D */
c0f3af97 4524 {
592d1631
L
4525 { Bad_Opcode },
4526 { Bad_Opcode },
592a252b 4527 { VEX_W_TABLE (VEX_W_0F380D_P_2) },
c0f3af97
L
4528 },
4529
592a252b 4530 /* PREFIX_VEX_0F380E */
c0f3af97 4531 {
592d1631
L
4532 { Bad_Opcode },
4533 { Bad_Opcode },
592a252b 4534 { VEX_W_TABLE (VEX_W_0F380E_P_2) },
c0f3af97
L
4535 },
4536
592a252b 4537 /* PREFIX_VEX_0F380F */
c0f3af97 4538 {
592d1631
L
4539 { Bad_Opcode },
4540 { Bad_Opcode },
592a252b 4541 { VEX_W_TABLE (VEX_W_0F380F_P_2) },
c0f3af97
L
4542 },
4543
592a252b 4544 /* PREFIX_VEX_0F3813 */
c7b8aa3a
L
4545 {
4546 { Bad_Opcode },
4547 { Bad_Opcode },
4548 { "vcvtph2ps", { XM, EXxmmq } },
4549 },
4550
6c30d220
L
4551 /* PREFIX_VEX_0F3816 */
4552 {
4553 { Bad_Opcode },
4554 { Bad_Opcode },
4555 { VEX_LEN_TABLE (VEX_LEN_0F3816_P_2) },
4556 },
4557
592a252b 4558 /* PREFIX_VEX_0F3817 */
c0f3af97 4559 {
592d1631
L
4560 { Bad_Opcode },
4561 { Bad_Opcode },
592a252b 4562 { VEX_W_TABLE (VEX_W_0F3817_P_2) },
c0f3af97
L
4563 },
4564
592a252b 4565 /* PREFIX_VEX_0F3818 */
c0f3af97 4566 {
592d1631
L
4567 { Bad_Opcode },
4568 { Bad_Opcode },
6c30d220 4569 { VEX_W_TABLE (VEX_W_0F3818_P_2) },
c0f3af97
L
4570 },
4571
592a252b 4572 /* PREFIX_VEX_0F3819 */
c0f3af97 4573 {
592d1631
L
4574 { Bad_Opcode },
4575 { Bad_Opcode },
6c30d220 4576 { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2) },
c0f3af97
L
4577 },
4578
592a252b 4579 /* PREFIX_VEX_0F381A */
c0f3af97 4580 {
592d1631
L
4581 { Bad_Opcode },
4582 { Bad_Opcode },
592a252b 4583 { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) },
c0f3af97
L
4584 },
4585
592a252b 4586 /* PREFIX_VEX_0F381C */
c0f3af97 4587 {
592d1631
L
4588 { Bad_Opcode },
4589 { Bad_Opcode },
6c30d220 4590 { VEX_W_TABLE (VEX_W_0F381C_P_2) },
c0f3af97
L
4591 },
4592
592a252b 4593 /* PREFIX_VEX_0F381D */
c0f3af97 4594 {
592d1631
L
4595 { Bad_Opcode },
4596 { Bad_Opcode },
6c30d220 4597 { VEX_W_TABLE (VEX_W_0F381D_P_2) },
c0f3af97
L
4598 },
4599
592a252b 4600 /* PREFIX_VEX_0F381E */
c0f3af97 4601 {
592d1631
L
4602 { Bad_Opcode },
4603 { Bad_Opcode },
6c30d220 4604 { VEX_W_TABLE (VEX_W_0F381E_P_2) },
c0f3af97
L
4605 },
4606
592a252b 4607 /* PREFIX_VEX_0F3820 */
c0f3af97 4608 {
592d1631
L
4609 { Bad_Opcode },
4610 { Bad_Opcode },
6c30d220 4611 { VEX_W_TABLE (VEX_W_0F3820_P_2) },
c0f3af97
L
4612 },
4613
592a252b 4614 /* PREFIX_VEX_0F3821 */
c0f3af97 4615 {
592d1631
L
4616 { Bad_Opcode },
4617 { Bad_Opcode },
6c30d220 4618 { VEX_W_TABLE (VEX_W_0F3821_P_2) },
c0f3af97
L
4619 },
4620
592a252b 4621 /* PREFIX_VEX_0F3822 */
c0f3af97 4622 {
592d1631
L
4623 { Bad_Opcode },
4624 { Bad_Opcode },
6c30d220 4625 { VEX_W_TABLE (VEX_W_0F3822_P_2) },
c0f3af97
L
4626 },
4627
592a252b 4628 /* PREFIX_VEX_0F3823 */
c0f3af97 4629 {
592d1631
L
4630 { Bad_Opcode },
4631 { Bad_Opcode },
6c30d220 4632 { VEX_W_TABLE (VEX_W_0F3823_P_2) },
c0f3af97
L
4633 },
4634
592a252b 4635 /* PREFIX_VEX_0F3824 */
c0f3af97 4636 {
592d1631
L
4637 { Bad_Opcode },
4638 { Bad_Opcode },
6c30d220 4639 { VEX_W_TABLE (VEX_W_0F3824_P_2) },
c0f3af97
L
4640 },
4641
592a252b 4642 /* PREFIX_VEX_0F3825 */
c0f3af97 4643 {
592d1631
L
4644 { Bad_Opcode },
4645 { Bad_Opcode },
6c30d220 4646 { VEX_W_TABLE (VEX_W_0F3825_P_2) },
c0f3af97
L
4647 },
4648
592a252b 4649 /* PREFIX_VEX_0F3828 */
c0f3af97 4650 {
592d1631
L
4651 { Bad_Opcode },
4652 { Bad_Opcode },
6c30d220 4653 { VEX_W_TABLE (VEX_W_0F3828_P_2) },
c0f3af97
L
4654 },
4655
592a252b 4656 /* PREFIX_VEX_0F3829 */
c0f3af97 4657 {
592d1631
L
4658 { Bad_Opcode },
4659 { Bad_Opcode },
6c30d220 4660 { VEX_W_TABLE (VEX_W_0F3829_P_2) },
c0f3af97
L
4661 },
4662
592a252b 4663 /* PREFIX_VEX_0F382A */
c0f3af97 4664 {
592d1631
L
4665 { Bad_Opcode },
4666 { Bad_Opcode },
592a252b 4667 { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) },
c0f3af97
L
4668 },
4669
592a252b 4670 /* PREFIX_VEX_0F382B */
c0f3af97 4671 {
592d1631
L
4672 { Bad_Opcode },
4673 { Bad_Opcode },
6c30d220 4674 { VEX_W_TABLE (VEX_W_0F382B_P_2) },
c0f3af97
L
4675 },
4676
592a252b 4677 /* PREFIX_VEX_0F382C */
c0f3af97 4678 {
592d1631
L
4679 { Bad_Opcode },
4680 { Bad_Opcode },
592a252b 4681 { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) },
c0f3af97
L
4682 },
4683
592a252b 4684 /* PREFIX_VEX_0F382D */
c0f3af97 4685 {
592d1631
L
4686 { Bad_Opcode },
4687 { Bad_Opcode },
592a252b 4688 { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) },
c0f3af97
L
4689 },
4690
592a252b 4691 /* PREFIX_VEX_0F382E */
c0f3af97 4692 {
592d1631
L
4693 { Bad_Opcode },
4694 { Bad_Opcode },
592a252b 4695 { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) },
c0f3af97
L
4696 },
4697
592a252b 4698 /* PREFIX_VEX_0F382F */
c0f3af97 4699 {
592d1631
L
4700 { Bad_Opcode },
4701 { Bad_Opcode },
592a252b 4702 { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) },
c0f3af97
L
4703 },
4704
592a252b 4705 /* PREFIX_VEX_0F3830 */
c0f3af97 4706 {
592d1631
L
4707 { Bad_Opcode },
4708 { Bad_Opcode },
6c30d220 4709 { VEX_W_TABLE (VEX_W_0F3830_P_2) },
c0f3af97
L
4710 },
4711
592a252b 4712 /* PREFIX_VEX_0F3831 */
c0f3af97 4713 {
592d1631
L
4714 { Bad_Opcode },
4715 { Bad_Opcode },
6c30d220 4716 { VEX_W_TABLE (VEX_W_0F3831_P_2) },
c0f3af97
L
4717 },
4718
592a252b 4719 /* PREFIX_VEX_0F3832 */
c0f3af97 4720 {
592d1631
L
4721 { Bad_Opcode },
4722 { Bad_Opcode },
6c30d220 4723 { VEX_W_TABLE (VEX_W_0F3832_P_2) },
c0f3af97
L
4724 },
4725
592a252b 4726 /* PREFIX_VEX_0F3833 */
c0f3af97 4727 {
592d1631
L
4728 { Bad_Opcode },
4729 { Bad_Opcode },
6c30d220 4730 { VEX_W_TABLE (VEX_W_0F3833_P_2) },
c0f3af97
L
4731 },
4732
592a252b 4733 /* PREFIX_VEX_0F3834 */
c0f3af97 4734 {
592d1631
L
4735 { Bad_Opcode },
4736 { Bad_Opcode },
6c30d220 4737 { VEX_W_TABLE (VEX_W_0F3834_P_2) },
c0f3af97
L
4738 },
4739
592a252b 4740 /* PREFIX_VEX_0F3835 */
c0f3af97 4741 {
592d1631
L
4742 { Bad_Opcode },
4743 { Bad_Opcode },
6c30d220
L
4744 { VEX_W_TABLE (VEX_W_0F3835_P_2) },
4745 },
4746
4747 /* PREFIX_VEX_0F3836 */
4748 {
4749 { Bad_Opcode },
4750 { Bad_Opcode },
4751 { VEX_LEN_TABLE (VEX_LEN_0F3836_P_2) },
c0f3af97
L
4752 },
4753
592a252b 4754 /* PREFIX_VEX_0F3837 */
c0f3af97 4755 {
592d1631
L
4756 { Bad_Opcode },
4757 { Bad_Opcode },
6c30d220 4758 { VEX_W_TABLE (VEX_W_0F3837_P_2) },
c0f3af97
L
4759 },
4760
592a252b 4761 /* PREFIX_VEX_0F3838 */
c0f3af97 4762 {
592d1631
L
4763 { Bad_Opcode },
4764 { Bad_Opcode },
6c30d220 4765 { VEX_W_TABLE (VEX_W_0F3838_P_2) },
c0f3af97
L
4766 },
4767
592a252b 4768 /* PREFIX_VEX_0F3839 */
c0f3af97 4769 {
592d1631
L
4770 { Bad_Opcode },
4771 { Bad_Opcode },
6c30d220 4772 { VEX_W_TABLE (VEX_W_0F3839_P_2) },
c0f3af97
L
4773 },
4774
592a252b 4775 /* PREFIX_VEX_0F383A */
c0f3af97 4776 {
592d1631
L
4777 { Bad_Opcode },
4778 { Bad_Opcode },
6c30d220 4779 { VEX_W_TABLE (VEX_W_0F383A_P_2) },
c0f3af97
L
4780 },
4781
592a252b 4782 /* PREFIX_VEX_0F383B */
c0f3af97 4783 {
592d1631
L
4784 { Bad_Opcode },
4785 { Bad_Opcode },
6c30d220 4786 { VEX_W_TABLE (VEX_W_0F383B_P_2) },
c0f3af97
L
4787 },
4788
592a252b 4789 /* PREFIX_VEX_0F383C */
c0f3af97 4790 {
592d1631
L
4791 { Bad_Opcode },
4792 { Bad_Opcode },
6c30d220 4793 { VEX_W_TABLE (VEX_W_0F383C_P_2) },
c0f3af97
L
4794 },
4795
592a252b 4796 /* PREFIX_VEX_0F383D */
c0f3af97 4797 {
592d1631
L
4798 { Bad_Opcode },
4799 { Bad_Opcode },
6c30d220 4800 { VEX_W_TABLE (VEX_W_0F383D_P_2) },
c0f3af97
L
4801 },
4802
592a252b 4803 /* PREFIX_VEX_0F383E */
c0f3af97 4804 {
592d1631
L
4805 { Bad_Opcode },
4806 { Bad_Opcode },
6c30d220 4807 { VEX_W_TABLE (VEX_W_0F383E_P_2) },
c0f3af97
L
4808 },
4809
592a252b 4810 /* PREFIX_VEX_0F383F */
c0f3af97 4811 {
592d1631
L
4812 { Bad_Opcode },
4813 { Bad_Opcode },
6c30d220 4814 { VEX_W_TABLE (VEX_W_0F383F_P_2) },
c0f3af97
L
4815 },
4816
592a252b 4817 /* PREFIX_VEX_0F3840 */
c0f3af97 4818 {
592d1631
L
4819 { Bad_Opcode },
4820 { Bad_Opcode },
6c30d220 4821 { VEX_W_TABLE (VEX_W_0F3840_P_2) },
c0f3af97
L
4822 },
4823
592a252b 4824 /* PREFIX_VEX_0F3841 */
c0f3af97 4825 {
592d1631
L
4826 { Bad_Opcode },
4827 { Bad_Opcode },
592a252b 4828 { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) },
c0f3af97
L
4829 },
4830
6c30d220
L
4831 /* PREFIX_VEX_0F3845 */
4832 {
4833 { Bad_Opcode },
4834 { Bad_Opcode },
4835 { "vpsrlv%LW", { XM, Vex, EXx } },
4836 },
4837
4838 /* PREFIX_VEX_0F3846 */
4839 {
4840 { Bad_Opcode },
4841 { Bad_Opcode },
4842 { VEX_W_TABLE (VEX_W_0F3846_P_2) },
4843 },
4844
4845 /* PREFIX_VEX_0F3847 */
4846 {
4847 { Bad_Opcode },
4848 { Bad_Opcode },
4849 { "vpsllv%LW", { XM, Vex, EXx } },
4850 },
4851
4852 /* PREFIX_VEX_0F3858 */
4853 {
4854 { Bad_Opcode },
4855 { Bad_Opcode },
4856 { VEX_W_TABLE (VEX_W_0F3858_P_2) },
4857 },
4858
4859 /* PREFIX_VEX_0F3859 */
4860 {
4861 { Bad_Opcode },
4862 { Bad_Opcode },
4863 { VEX_W_TABLE (VEX_W_0F3859_P_2) },
4864 },
4865
4866 /* PREFIX_VEX_0F385A */
4867 {
4868 { Bad_Opcode },
4869 { Bad_Opcode },
4870 { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) },
4871 },
4872
4873 /* PREFIX_VEX_0F3878 */
4874 {
4875 { Bad_Opcode },
4876 { Bad_Opcode },
4877 { VEX_W_TABLE (VEX_W_0F3878_P_2) },
4878 },
4879
4880 /* PREFIX_VEX_0F3879 */
4881 {
4882 { Bad_Opcode },
4883 { Bad_Opcode },
4884 { VEX_W_TABLE (VEX_W_0F3879_P_2) },
4885 },
4886
4887 /* PREFIX_VEX_0F388C */
4888 {
4889 { Bad_Opcode },
4890 { Bad_Opcode },
f7002f42 4891 { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) },
6c30d220
L
4892 },
4893
4894 /* PREFIX_VEX_0F388E */
4895 {
4896 { Bad_Opcode },
4897 { Bad_Opcode },
f7002f42 4898 { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) },
6c30d220
L
4899 },
4900
4901 /* PREFIX_VEX_0F3890 */
4902 {
4903 { Bad_Opcode },
4904 { Bad_Opcode },
4905 { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex } },
4906 },
4907
4908 /* PREFIX_VEX_0F3891 */
4909 {
4910 { Bad_Opcode },
4911 { Bad_Opcode },
4912 { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ } },
4913 },
4914
4915 /* PREFIX_VEX_0F3892 */
4916 {
4917 { Bad_Opcode },
4918 { Bad_Opcode },
4919 { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex } },
4920 },
4921
4922 /* PREFIX_VEX_0F3893 */
4923 {
4924 { Bad_Opcode },
4925 { Bad_Opcode },
4926 { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ } },
4927 },
4928
592a252b 4929 /* PREFIX_VEX_0F3896 */
a5ff0eb2 4930 {
592d1631
L
4931 { Bad_Opcode },
4932 { Bad_Opcode },
0bfee649 4933 { "vfmaddsub132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4934 },
4935
592a252b 4936 /* PREFIX_VEX_0F3897 */
a5ff0eb2 4937 {
592d1631
L
4938 { Bad_Opcode },
4939 { Bad_Opcode },
0bfee649 4940 { "vfmsubadd132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4941 },
4942
592a252b 4943 /* PREFIX_VEX_0F3898 */
a5ff0eb2 4944 {
592d1631
L
4945 { Bad_Opcode },
4946 { Bad_Opcode },
0bfee649 4947 { "vfmadd132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4948 },
4949
592a252b 4950 /* PREFIX_VEX_0F3899 */
a5ff0eb2 4951 {
592d1631
L
4952 { Bad_Opcode },
4953 { Bad_Opcode },
1c480963 4954 { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
a5ff0eb2
L
4955 },
4956
592a252b 4957 /* PREFIX_VEX_0F389A */
a5ff0eb2 4958 {
592d1631
L
4959 { Bad_Opcode },
4960 { Bad_Opcode },
0bfee649 4961 { "vfmsub132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4962 },
4963
592a252b 4964 /* PREFIX_VEX_0F389B */
c0f3af97 4965 {
592d1631
L
4966 { Bad_Opcode },
4967 { Bad_Opcode },
1c480963 4968 { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4969 },
4970
592a252b 4971 /* PREFIX_VEX_0F389C */
c0f3af97 4972 {
592d1631
L
4973 { Bad_Opcode },
4974 { Bad_Opcode },
0bfee649 4975 { "vfnmadd132p%XW", { XM, Vex, EXx } },
c0f3af97
L
4976 },
4977
592a252b 4978 /* PREFIX_VEX_0F389D */
c0f3af97 4979 {
592d1631
L
4980 { Bad_Opcode },
4981 { Bad_Opcode },
1c480963 4982 { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4983 },
4984
592a252b 4985 /* PREFIX_VEX_0F389E */
c0f3af97 4986 {
592d1631
L
4987 { Bad_Opcode },
4988 { Bad_Opcode },
0bfee649 4989 { "vfnmsub132p%XW", { XM, Vex, EXx } },
c0f3af97
L
4990 },
4991
592a252b 4992 /* PREFIX_VEX_0F389F */
c0f3af97 4993 {
592d1631
L
4994 { Bad_Opcode },
4995 { Bad_Opcode },
1c480963 4996 { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4997 },
4998
592a252b 4999 /* PREFIX_VEX_0F38A6 */
c0f3af97 5000 {
592d1631
L
5001 { Bad_Opcode },
5002 { Bad_Opcode },
0bfee649 5003 { "vfmaddsub213p%XW", { XM, Vex, EXx } },
592d1631 5004 { Bad_Opcode },
c0f3af97
L
5005 },
5006
592a252b 5007 /* PREFIX_VEX_0F38A7 */
c0f3af97 5008 {
592d1631
L
5009 { Bad_Opcode },
5010 { Bad_Opcode },
0bfee649 5011 { "vfmsubadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
5012 },
5013
592a252b 5014 /* PREFIX_VEX_0F38A8 */
c0f3af97 5015 {
592d1631
L
5016 { Bad_Opcode },
5017 { Bad_Opcode },
0bfee649 5018 { "vfmadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
5019 },
5020
592a252b 5021 /* PREFIX_VEX_0F38A9 */
c0f3af97 5022 {
592d1631
L
5023 { Bad_Opcode },
5024 { Bad_Opcode },
1c480963 5025 { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5026 },
5027
592a252b 5028 /* PREFIX_VEX_0F38AA */
c0f3af97 5029 {
592d1631
L
5030 { Bad_Opcode },
5031 { Bad_Opcode },
0bfee649 5032 { "vfmsub213p%XW", { XM, Vex, EXx } },
c0f3af97
L
5033 },
5034
592a252b 5035 /* PREFIX_VEX_0F38AB */
c0f3af97 5036 {
592d1631
L
5037 { Bad_Opcode },
5038 { Bad_Opcode },
1c480963 5039 { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5040 },
5041
592a252b 5042 /* PREFIX_VEX_0F38AC */
c0f3af97 5043 {
592d1631
L
5044 { Bad_Opcode },
5045 { Bad_Opcode },
0bfee649 5046 { "vfnmadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
5047 },
5048
592a252b 5049 /* PREFIX_VEX_0F38AD */
c0f3af97 5050 {
592d1631
L
5051 { Bad_Opcode },
5052 { Bad_Opcode },
1c480963 5053 { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5054 },
5055
592a252b 5056 /* PREFIX_VEX_0F38AE */
c0f3af97 5057 {
592d1631
L
5058 { Bad_Opcode },
5059 { Bad_Opcode },
0bfee649 5060 { "vfnmsub213p%XW", { XM, Vex, EXx } },
c0f3af97
L
5061 },
5062
592a252b 5063 /* PREFIX_VEX_0F38AF */
c0f3af97 5064 {
592d1631
L
5065 { Bad_Opcode },
5066 { Bad_Opcode },
1c480963 5067 { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5068 },
5069
592a252b 5070 /* PREFIX_VEX_0F38B6 */
c0f3af97 5071 {
592d1631
L
5072 { Bad_Opcode },
5073 { Bad_Opcode },
0bfee649 5074 { "vfmaddsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
5075 },
5076
592a252b 5077 /* PREFIX_VEX_0F38B7 */
c0f3af97 5078 {
592d1631
L
5079 { Bad_Opcode },
5080 { Bad_Opcode },
0bfee649 5081 { "vfmsubadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
5082 },
5083
592a252b 5084 /* PREFIX_VEX_0F38B8 */
c0f3af97 5085 {
592d1631
L
5086 { Bad_Opcode },
5087 { Bad_Opcode },
0bfee649 5088 { "vfmadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
5089 },
5090
592a252b 5091 /* PREFIX_VEX_0F38B9 */
c0f3af97 5092 {
592d1631
L
5093 { Bad_Opcode },
5094 { Bad_Opcode },
1c480963 5095 { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5096 },
5097
592a252b 5098 /* PREFIX_VEX_0F38BA */
c0f3af97 5099 {
592d1631
L
5100 { Bad_Opcode },
5101 { Bad_Opcode },
0bfee649 5102 { "vfmsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
5103 },
5104
592a252b 5105 /* PREFIX_VEX_0F38BB */
c0f3af97 5106 {
592d1631
L
5107 { Bad_Opcode },
5108 { Bad_Opcode },
1c480963 5109 { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5110 },
5111
592a252b 5112 /* PREFIX_VEX_0F38BC */
c0f3af97 5113 {
592d1631
L
5114 { Bad_Opcode },
5115 { Bad_Opcode },
0bfee649 5116 { "vfnmadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
5117 },
5118
592a252b 5119 /* PREFIX_VEX_0F38BD */
c0f3af97 5120 {
592d1631
L
5121 { Bad_Opcode },
5122 { Bad_Opcode },
1c480963 5123 { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5124 },
5125
592a252b 5126 /* PREFIX_VEX_0F38BE */
c0f3af97 5127 {
592d1631
L
5128 { Bad_Opcode },
5129 { Bad_Opcode },
0bfee649 5130 { "vfnmsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
5131 },
5132
592a252b 5133 /* PREFIX_VEX_0F38BF */
c0f3af97 5134 {
592d1631
L
5135 { Bad_Opcode },
5136 { Bad_Opcode },
1c480963 5137 { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5138 },
5139
592a252b 5140 /* PREFIX_VEX_0F38DB */
c0f3af97 5141 {
592d1631
L
5142 { Bad_Opcode },
5143 { Bad_Opcode },
592a252b 5144 { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
c0f3af97
L
5145 },
5146
592a252b 5147 /* PREFIX_VEX_0F38DC */
c0f3af97 5148 {
592d1631
L
5149 { Bad_Opcode },
5150 { Bad_Opcode },
592a252b 5151 { VEX_LEN_TABLE (VEX_LEN_0F38DC_P_2) },
c0f3af97
L
5152 },
5153
592a252b 5154 /* PREFIX_VEX_0F38DD */
c0f3af97 5155 {
592d1631
L
5156 { Bad_Opcode },
5157 { Bad_Opcode },
592a252b 5158 { VEX_LEN_TABLE (VEX_LEN_0F38DD_P_2) },
c0f3af97
L
5159 },
5160
592a252b 5161 /* PREFIX_VEX_0F38DE */
c0f3af97 5162 {
592d1631
L
5163 { Bad_Opcode },
5164 { Bad_Opcode },
592a252b 5165 { VEX_LEN_TABLE (VEX_LEN_0F38DE_P_2) },
c0f3af97
L
5166 },
5167
592a252b 5168 /* PREFIX_VEX_0F38DF */
c0f3af97 5169 {
592d1631
L
5170 { Bad_Opcode },
5171 { Bad_Opcode },
592a252b 5172 { VEX_LEN_TABLE (VEX_LEN_0F38DF_P_2) },
c0f3af97
L
5173 },
5174
f12dc422
L
5175 /* PREFIX_VEX_0F38F2 */
5176 {
5177 { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
5178 },
5179
5180 /* PREFIX_VEX_0F38F3_REG_1 */
5181 {
5182 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
5183 },
5184
5185 /* PREFIX_VEX_0F38F3_REG_2 */
5186 {
5187 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
5188 },
5189
5190 /* PREFIX_VEX_0F38F3_REG_3 */
5191 {
5192 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
5193 },
5194
6c30d220
L
5195 /* PREFIX_VEX_0F38F5 */
5196 {
5197 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) },
5198 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) },
5199 { Bad_Opcode },
5200 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) },
5201 },
5202
5203 /* PREFIX_VEX_0F38F6 */
5204 {
5205 { Bad_Opcode },
5206 { Bad_Opcode },
5207 { Bad_Opcode },
5208 { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) },
5209 },
5210
f12dc422
L
5211 /* PREFIX_VEX_0F38F7 */
5212 {
5213 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
6c30d220
L
5214 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) },
5215 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) },
5216 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) },
5217 },
5218
5219 /* PREFIX_VEX_0F3A00 */
5220 {
5221 { Bad_Opcode },
5222 { Bad_Opcode },
5223 { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) },
5224 },
5225
5226 /* PREFIX_VEX_0F3A01 */
5227 {
5228 { Bad_Opcode },
5229 { Bad_Opcode },
5230 { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) },
5231 },
5232
5233 /* PREFIX_VEX_0F3A02 */
5234 {
5235 { Bad_Opcode },
5236 { Bad_Opcode },
5237 { VEX_W_TABLE (VEX_W_0F3A02_P_2) },
f12dc422
L
5238 },
5239
592a252b 5240 /* PREFIX_VEX_0F3A04 */
c0f3af97 5241 {
592d1631
L
5242 { Bad_Opcode },
5243 { Bad_Opcode },
592a252b 5244 { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
c0f3af97
L
5245 },
5246
592a252b 5247 /* PREFIX_VEX_0F3A05 */
c0f3af97 5248 {
592d1631
L
5249 { Bad_Opcode },
5250 { Bad_Opcode },
592a252b 5251 { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
c0f3af97
L
5252 },
5253
592a252b 5254 /* PREFIX_VEX_0F3A06 */
c0f3af97 5255 {
592d1631
L
5256 { Bad_Opcode },
5257 { Bad_Opcode },
592a252b 5258 { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
c0f3af97
L
5259 },
5260
592a252b 5261 /* PREFIX_VEX_0F3A08 */
c0f3af97 5262 {
592d1631
L
5263 { Bad_Opcode },
5264 { Bad_Opcode },
592a252b 5265 { VEX_W_TABLE (VEX_W_0F3A08_P_2) },
c0f3af97
L
5266 },
5267
592a252b 5268 /* PREFIX_VEX_0F3A09 */
c0f3af97 5269 {
592d1631
L
5270 { Bad_Opcode },
5271 { Bad_Opcode },
592a252b 5272 { VEX_W_TABLE (VEX_W_0F3A09_P_2) },
c0f3af97
L
5273 },
5274
592a252b 5275 /* PREFIX_VEX_0F3A0A */
c0f3af97 5276 {
592d1631
L
5277 { Bad_Opcode },
5278 { Bad_Opcode },
592a252b 5279 { VEX_LEN_TABLE (VEX_LEN_0F3A0A_P_2) },
0bfee649
L
5280 },
5281
592a252b 5282 /* PREFIX_VEX_0F3A0B */
0bfee649 5283 {
592d1631
L
5284 { Bad_Opcode },
5285 { Bad_Opcode },
592a252b 5286 { VEX_LEN_TABLE (VEX_LEN_0F3A0B_P_2) },
0bfee649
L
5287 },
5288
592a252b 5289 /* PREFIX_VEX_0F3A0C */
0bfee649 5290 {
592d1631
L
5291 { Bad_Opcode },
5292 { Bad_Opcode },
592a252b 5293 { VEX_W_TABLE (VEX_W_0F3A0C_P_2) },
0bfee649
L
5294 },
5295
592a252b 5296 /* PREFIX_VEX_0F3A0D */
0bfee649 5297 {
592d1631
L
5298 { Bad_Opcode },
5299 { Bad_Opcode },
592a252b 5300 { VEX_W_TABLE (VEX_W_0F3A0D_P_2) },
c0f3af97
L
5301 },
5302
592a252b 5303 /* PREFIX_VEX_0F3A0E */
0bfee649 5304 {
592d1631
L
5305 { Bad_Opcode },
5306 { Bad_Opcode },
6c30d220 5307 { VEX_W_TABLE (VEX_W_0F3A0E_P_2) },
0bfee649
L
5308 },
5309
592a252b 5310 /* PREFIX_VEX_0F3A0F */
0bfee649 5311 {
592d1631
L
5312 { Bad_Opcode },
5313 { Bad_Opcode },
6c30d220 5314 { VEX_W_TABLE (VEX_W_0F3A0F_P_2) },
0bfee649
L
5315 },
5316
592a252b 5317 /* PREFIX_VEX_0F3A14 */
0bfee649 5318 {
592d1631
L
5319 { Bad_Opcode },
5320 { Bad_Opcode },
592a252b 5321 { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
0bfee649
L
5322 },
5323
592a252b 5324 /* PREFIX_VEX_0F3A15 */
0bfee649 5325 {
592d1631
L
5326 { Bad_Opcode },
5327 { Bad_Opcode },
592a252b 5328 { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
0bfee649
L
5329 },
5330
592a252b 5331 /* PREFIX_VEX_0F3A16 */
c0f3af97 5332 {
592d1631
L
5333 { Bad_Opcode },
5334 { Bad_Opcode },
592a252b 5335 { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
c0f3af97
L
5336 },
5337
592a252b 5338 /* PREFIX_VEX_0F3A17 */
c0f3af97 5339 {
592d1631
L
5340 { Bad_Opcode },
5341 { Bad_Opcode },
592a252b 5342 { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
c0f3af97
L
5343 },
5344
592a252b 5345 /* PREFIX_VEX_0F3A18 */
c0f3af97 5346 {
592d1631
L
5347 { Bad_Opcode },
5348 { Bad_Opcode },
592a252b 5349 { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
c0f3af97
L
5350 },
5351
592a252b 5352 /* PREFIX_VEX_0F3A19 */
c0f3af97 5353 {
592d1631
L
5354 { Bad_Opcode },
5355 { Bad_Opcode },
592a252b 5356 { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
c0f3af97
L
5357 },
5358
592a252b 5359 /* PREFIX_VEX_0F3A1D */
c7b8aa3a
L
5360 {
5361 { Bad_Opcode },
5362 { Bad_Opcode },
5363 { "vcvtps2ph", { EXxmmq, XM, Ib } },
5364 },
5365
592a252b 5366 /* PREFIX_VEX_0F3A20 */
c0f3af97 5367 {
592d1631
L
5368 { Bad_Opcode },
5369 { Bad_Opcode },
592a252b 5370 { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
c0f3af97
L
5371 },
5372
592a252b 5373 /* PREFIX_VEX_0F3A21 */
c0f3af97 5374 {
592d1631
L
5375 { Bad_Opcode },
5376 { Bad_Opcode },
592a252b 5377 { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
c0f3af97
L
5378 },
5379
592a252b 5380 /* PREFIX_VEX_0F3A22 */
0bfee649 5381 {
592d1631
L
5382 { Bad_Opcode },
5383 { Bad_Opcode },
592a252b 5384 { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
0bfee649
L
5385 },
5386
6c30d220
L
5387 /* PREFIX_VEX_0F3A38 */
5388 {
5389 { Bad_Opcode },
5390 { Bad_Opcode },
5391 { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) },
5392 },
5393
5394 /* PREFIX_VEX_0F3A39 */
5395 {
5396 { Bad_Opcode },
5397 { Bad_Opcode },
5398 { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) },
5399 },
5400
592a252b 5401 /* PREFIX_VEX_0F3A40 */
c0f3af97 5402 {
592d1631
L
5403 { Bad_Opcode },
5404 { Bad_Opcode },
592a252b 5405 { VEX_W_TABLE (VEX_W_0F3A40_P_2) },
c0f3af97
L
5406 },
5407
592a252b 5408 /* PREFIX_VEX_0F3A41 */
c0f3af97 5409 {
592d1631
L
5410 { Bad_Opcode },
5411 { Bad_Opcode },
592a252b 5412 { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
c0f3af97
L
5413 },
5414
592a252b 5415 /* PREFIX_VEX_0F3A42 */
c0f3af97 5416 {
592d1631
L
5417 { Bad_Opcode },
5418 { Bad_Opcode },
6c30d220 5419 { VEX_W_TABLE (VEX_W_0F3A42_P_2) },
c0f3af97
L
5420 },
5421
592a252b 5422 /* PREFIX_VEX_0F3A44 */
ce2f5b3c 5423 {
592d1631
L
5424 { Bad_Opcode },
5425 { Bad_Opcode },
592a252b 5426 { VEX_LEN_TABLE (VEX_LEN_0F3A44_P_2) },
ce2f5b3c
L
5427 },
5428
6c30d220
L
5429 /* PREFIX_VEX_0F3A46 */
5430 {
5431 { Bad_Opcode },
5432 { Bad_Opcode },
5433 { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) },
5434 },
5435
592a252b 5436 /* PREFIX_VEX_0F3A48 */
a683cc34
SP
5437 {
5438 { Bad_Opcode },
5439 { Bad_Opcode },
592a252b 5440 { VEX_W_TABLE (VEX_W_0F3A48_P_2) },
a683cc34
SP
5441 },
5442
592a252b 5443 /* PREFIX_VEX_0F3A49 */
a683cc34
SP
5444 {
5445 { Bad_Opcode },
5446 { Bad_Opcode },
592a252b 5447 { VEX_W_TABLE (VEX_W_0F3A49_P_2) },
a683cc34
SP
5448 },
5449
592a252b 5450 /* PREFIX_VEX_0F3A4A */
c0f3af97 5451 {
592d1631
L
5452 { Bad_Opcode },
5453 { Bad_Opcode },
592a252b 5454 { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
c0f3af97
L
5455 },
5456
592a252b 5457 /* PREFIX_VEX_0F3A4B */
c0f3af97 5458 {
592d1631
L
5459 { Bad_Opcode },
5460 { Bad_Opcode },
592a252b 5461 { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
c0f3af97
L
5462 },
5463
592a252b 5464 /* PREFIX_VEX_0F3A4C */
c0f3af97 5465 {
592d1631
L
5466 { Bad_Opcode },
5467 { Bad_Opcode },
6c30d220 5468 { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
c0f3af97
L
5469 },
5470
592a252b 5471 /* PREFIX_VEX_0F3A5C */
922d8de8 5472 {
592d1631
L
5473 { Bad_Opcode },
5474 { Bad_Opcode },
206c2556 5475 { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5476 },
5477
592a252b 5478 /* PREFIX_VEX_0F3A5D */
922d8de8 5479 {
592d1631
L
5480 { Bad_Opcode },
5481 { Bad_Opcode },
206c2556 5482 { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5483 },
5484
592a252b 5485 /* PREFIX_VEX_0F3A5E */
922d8de8 5486 {
592d1631
L
5487 { Bad_Opcode },
5488 { Bad_Opcode },
206c2556 5489 { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5490 },
5491
592a252b 5492 /* PREFIX_VEX_0F3A5F */
922d8de8 5493 {
592d1631
L
5494 { Bad_Opcode },
5495 { Bad_Opcode },
206c2556 5496 { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5497 },
5498
592a252b 5499 /* PREFIX_VEX_0F3A60 */
c0f3af97 5500 {
592d1631
L
5501 { Bad_Opcode },
5502 { Bad_Opcode },
592a252b 5503 { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
592d1631 5504 { Bad_Opcode },
c0f3af97
L
5505 },
5506
592a252b 5507 /* PREFIX_VEX_0F3A61 */
c0f3af97 5508 {
592d1631
L
5509 { Bad_Opcode },
5510 { Bad_Opcode },
592a252b 5511 { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
c0f3af97
L
5512 },
5513
592a252b 5514 /* PREFIX_VEX_0F3A62 */
c0f3af97 5515 {
592d1631
L
5516 { Bad_Opcode },
5517 { Bad_Opcode },
592a252b 5518 { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
c0f3af97
L
5519 },
5520
592a252b 5521 /* PREFIX_VEX_0F3A63 */
c0f3af97 5522 {
592d1631
L
5523 { Bad_Opcode },
5524 { Bad_Opcode },
592a252b 5525 { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
c0f3af97 5526 },
a5ff0eb2 5527
592a252b 5528 /* PREFIX_VEX_0F3A68 */
922d8de8 5529 {
592d1631
L
5530 { Bad_Opcode },
5531 { Bad_Opcode },
206c2556 5532 { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5533 },
5534
592a252b 5535 /* PREFIX_VEX_0F3A69 */
922d8de8 5536 {
592d1631
L
5537 { Bad_Opcode },
5538 { Bad_Opcode },
206c2556 5539 { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5540 },
5541
592a252b 5542 /* PREFIX_VEX_0F3A6A */
922d8de8 5543 {
592d1631
L
5544 { Bad_Opcode },
5545 { Bad_Opcode },
592a252b 5546 { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) },
922d8de8
DR
5547 },
5548
592a252b 5549 /* PREFIX_VEX_0F3A6B */
922d8de8 5550 {
592d1631
L
5551 { Bad_Opcode },
5552 { Bad_Opcode },
592a252b 5553 { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) },
922d8de8
DR
5554 },
5555
592a252b 5556 /* PREFIX_VEX_0F3A6C */
922d8de8 5557 {
592d1631
L
5558 { Bad_Opcode },
5559 { Bad_Opcode },
206c2556 5560 { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5561 },
5562
592a252b 5563 /* PREFIX_VEX_0F3A6D */
922d8de8 5564 {
592d1631
L
5565 { Bad_Opcode },
5566 { Bad_Opcode },
206c2556 5567 { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5568 },
5569
592a252b 5570 /* PREFIX_VEX_0F3A6E */
922d8de8 5571 {
592d1631
L
5572 { Bad_Opcode },
5573 { Bad_Opcode },
592a252b 5574 { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) },
922d8de8
DR
5575 },
5576
592a252b 5577 /* PREFIX_VEX_0F3A6F */
922d8de8 5578 {
592d1631
L
5579 { Bad_Opcode },
5580 { Bad_Opcode },
592a252b 5581 { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) },
922d8de8
DR
5582 },
5583
592a252b 5584 /* PREFIX_VEX_0F3A78 */
922d8de8 5585 {
592d1631
L
5586 { Bad_Opcode },
5587 { Bad_Opcode },
206c2556 5588 { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5589 },
5590
592a252b 5591 /* PREFIX_VEX_0F3A79 */
922d8de8 5592 {
592d1631
L
5593 { Bad_Opcode },
5594 { Bad_Opcode },
206c2556 5595 { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5596 },
5597
592a252b 5598 /* PREFIX_VEX_0F3A7A */
922d8de8 5599 {
592d1631
L
5600 { Bad_Opcode },
5601 { Bad_Opcode },
592a252b 5602 { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) },
922d8de8
DR
5603 },
5604
592a252b 5605 /* PREFIX_VEX_0F3A7B */
922d8de8 5606 {
592d1631
L
5607 { Bad_Opcode },
5608 { Bad_Opcode },
592a252b 5609 { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) },
922d8de8
DR
5610 },
5611
592a252b 5612 /* PREFIX_VEX_0F3A7C */
922d8de8 5613 {
592d1631
L
5614 { Bad_Opcode },
5615 { Bad_Opcode },
206c2556 5616 { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631 5617 { Bad_Opcode },
922d8de8
DR
5618 },
5619
592a252b 5620 /* PREFIX_VEX_0F3A7D */
922d8de8 5621 {
592d1631
L
5622 { Bad_Opcode },
5623 { Bad_Opcode },
206c2556 5624 { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5625 },
5626
592a252b 5627 /* PREFIX_VEX_0F3A7E */
922d8de8 5628 {
592d1631
L
5629 { Bad_Opcode },
5630 { Bad_Opcode },
592a252b 5631 { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) },
922d8de8
DR
5632 },
5633
592a252b 5634 /* PREFIX_VEX_0F3A7F */
922d8de8 5635 {
592d1631
L
5636 { Bad_Opcode },
5637 { Bad_Opcode },
592a252b 5638 { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) },
922d8de8
DR
5639 },
5640
592a252b 5641 /* PREFIX_VEX_0F3ADF */
a5ff0eb2 5642 {
592d1631
L
5643 { Bad_Opcode },
5644 { Bad_Opcode },
592a252b 5645 { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
a5ff0eb2 5646 },
6c30d220
L
5647
5648 /* PREFIX_VEX_0F3AF0 */
5649 {
5650 { Bad_Opcode },
5651 { Bad_Opcode },
5652 { Bad_Opcode },
5653 { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) },
5654 },
c0f3af97
L
5655};
5656
5657static const struct dis386 x86_64_table[][2] = {
5658 /* X86_64_06 */
5659 {
d9e3625e 5660 { "pushP", { es } },
c0f3af97
L
5661 },
5662
5663 /* X86_64_07 */
5664 {
d9e3625e 5665 { "popP", { es } },
c0f3af97
L
5666 },
5667
5668 /* X86_64_0D */
5669 {
d9e3625e 5670 { "pushP", { cs } },
c0f3af97
L
5671 },
5672
5673 /* X86_64_16 */
5674 {
d9e3625e 5675 { "pushP", { ss } },
c0f3af97
L
5676 },
5677
5678 /* X86_64_17 */
5679 {
d9e3625e 5680 { "popP", { ss } },
c0f3af97
L
5681 },
5682
5683 /* X86_64_1E */
5684 {
d9e3625e 5685 { "pushP", { ds } },
c0f3af97
L
5686 },
5687
5688 /* X86_64_1F */
5689 {
d9e3625e 5690 { "popP", { ds } },
c0f3af97
L
5691 },
5692
5693 /* X86_64_27 */
5694 {
5695 { "daa", { XX } },
c0f3af97
L
5696 },
5697
5698 /* X86_64_2F */
5699 {
5700 { "das", { XX } },
c0f3af97
L
5701 },
5702
5703 /* X86_64_37 */
5704 {
5705 { "aaa", { XX } },
c0f3af97
L
5706 },
5707
5708 /* X86_64_3F */
5709 {
5710 { "aas", { XX } },
c0f3af97
L
5711 },
5712
5713 /* X86_64_60 */
5714 {
d9e3625e 5715 { "pushaP", { XX } },
c0f3af97
L
5716 },
5717
5718 /* X86_64_61 */
5719 {
d9e3625e 5720 { "popaP", { XX } },
c0f3af97
L
5721 },
5722
5723 /* X86_64_62 */
5724 {
5725 { MOD_TABLE (MOD_62_32BIT) },
c0f3af97
L
5726 },
5727
5728 /* X86_64_63 */
5729 {
5730 { "arpl", { Ew, Gw } },
5731 { "movs{lq|xd}", { Gv, Ed } },
5732 },
5733
5734 /* X86_64_6D */
5735 {
5736 { "ins{R|}", { Yzr, indirDX } },
5737 { "ins{G|}", { Yzr, indirDX } },
5738 },
5739
5740 /* X86_64_6F */
5741 {
5742 { "outs{R|}", { indirDXr, Xz } },
5743 { "outs{G|}", { indirDXr, Xz } },
5744 },
5745
5746 /* X86_64_9A */
5747 {
5748 { "Jcall{T|}", { Ap } },
c0f3af97
L
5749 },
5750
5751 /* X86_64_C4 */
5752 {
5753 { MOD_TABLE (MOD_C4_32BIT) },
5754 { VEX_C4_TABLE (VEX_0F) },
5755 },
5756
5757 /* X86_64_C5 */
5758 {
5759 { MOD_TABLE (MOD_C5_32BIT) },
5760 { VEX_C5_TABLE (VEX_0F) },
5761 },
5762
5763 /* X86_64_CE */
5764 {
5765 { "into", { XX } },
c0f3af97
L
5766 },
5767
5768 /* X86_64_D4 */
5769 {
e3949f17 5770 { "aam", { Ib } },
c0f3af97
L
5771 },
5772
5773 /* X86_64_D5 */
5774 {
e3949f17 5775 { "aad", { Ib } },
c0f3af97
L
5776 },
5777
5778 /* X86_64_EA */
5779 {
5780 { "Jjmp{T|}", { Ap } },
c0f3af97
L
5781 },
5782
5783 /* X86_64_0F01_REG_0 */
5784 {
5785 { "sgdt{Q|IQ}", { M } },
5786 { "sgdt", { M } },
5787 },
5788
5789 /* X86_64_0F01_REG_1 */
5790 {
5791 { "sidt{Q|IQ}", { M } },
5792 { "sidt", { M } },
5793 },
5794
5795 /* X86_64_0F01_REG_2 */
5796 {
5797 { "lgdt{Q|Q}", { M } },
5798 { "lgdt", { M } },
5799 },
5800
5801 /* X86_64_0F01_REG_3 */
5802 {
5803 { "lidt{Q|Q}", { M } },
5804 { "lidt", { M } },
5805 },
5806};
5807
5808static const struct dis386 three_byte_table[][256] = {
c1e679ec
DR
5809
5810 /* THREE_BYTE_0F38 */
c0f3af97
L
5811 {
5812 /* 00 */
c1e679ec
DR
5813 { "pshufb", { MX, EM } },
5814 { "phaddw", { MX, EM } },
5815 { "phaddd", { MX, EM } },
5816 { "phaddsw", { MX, EM } },
5817 { "pmaddubsw", { MX, EM } },
5818 { "phsubw", { MX, EM } },
5819 { "phsubd", { MX, EM } },
5820 { "phsubsw", { MX, EM } },
c0f3af97 5821 /* 08 */
c1e679ec
DR
5822 { "psignb", { MX, EM } },
5823 { "psignw", { MX, EM } },
5824 { "psignd", { MX, EM } },
5825 { "pmulhrsw", { MX, EM } },
592d1631
L
5826 { Bad_Opcode },
5827 { Bad_Opcode },
5828 { Bad_Opcode },
5829 { Bad_Opcode },
f88c9eb0
SP
5830 /* 10 */
5831 { PREFIX_TABLE (PREFIX_0F3810) },
592d1631
L
5832 { Bad_Opcode },
5833 { Bad_Opcode },
5834 { Bad_Opcode },
f88c9eb0
SP
5835 { PREFIX_TABLE (PREFIX_0F3814) },
5836 { PREFIX_TABLE (PREFIX_0F3815) },
592d1631 5837 { Bad_Opcode },
f88c9eb0
SP
5838 { PREFIX_TABLE (PREFIX_0F3817) },
5839 /* 18 */
592d1631
L
5840 { Bad_Opcode },
5841 { Bad_Opcode },
5842 { Bad_Opcode },
5843 { Bad_Opcode },
f88c9eb0
SP
5844 { "pabsb", { MX, EM } },
5845 { "pabsw", { MX, EM } },
5846 { "pabsd", { MX, EM } },
592d1631 5847 { Bad_Opcode },
f88c9eb0
SP
5848 /* 20 */
5849 { PREFIX_TABLE (PREFIX_0F3820) },
5850 { PREFIX_TABLE (PREFIX_0F3821) },
5851 { PREFIX_TABLE (PREFIX_0F3822) },
5852 { PREFIX_TABLE (PREFIX_0F3823) },
5853 { PREFIX_TABLE (PREFIX_0F3824) },
5854 { PREFIX_TABLE (PREFIX_0F3825) },
592d1631
L
5855 { Bad_Opcode },
5856 { Bad_Opcode },
f88c9eb0
SP
5857 /* 28 */
5858 { PREFIX_TABLE (PREFIX_0F3828) },
5859 { PREFIX_TABLE (PREFIX_0F3829) },
5860 { PREFIX_TABLE (PREFIX_0F382A) },
5861 { PREFIX_TABLE (PREFIX_0F382B) },
592d1631
L
5862 { Bad_Opcode },
5863 { Bad_Opcode },
5864 { Bad_Opcode },
5865 { Bad_Opcode },
f88c9eb0
SP
5866 /* 30 */
5867 { PREFIX_TABLE (PREFIX_0F3830) },
5868 { PREFIX_TABLE (PREFIX_0F3831) },
5869 { PREFIX_TABLE (PREFIX_0F3832) },
5870 { PREFIX_TABLE (PREFIX_0F3833) },
5871 { PREFIX_TABLE (PREFIX_0F3834) },
5872 { PREFIX_TABLE (PREFIX_0F3835) },
592d1631 5873 { Bad_Opcode },
f88c9eb0
SP
5874 { PREFIX_TABLE (PREFIX_0F3837) },
5875 /* 38 */
5876 { PREFIX_TABLE (PREFIX_0F3838) },
5877 { PREFIX_TABLE (PREFIX_0F3839) },
5878 { PREFIX_TABLE (PREFIX_0F383A) },
5879 { PREFIX_TABLE (PREFIX_0F383B) },
5880 { PREFIX_TABLE (PREFIX_0F383C) },
5881 { PREFIX_TABLE (PREFIX_0F383D) },
5882 { PREFIX_TABLE (PREFIX_0F383E) },
5883 { PREFIX_TABLE (PREFIX_0F383F) },
5884 /* 40 */
5885 { PREFIX_TABLE (PREFIX_0F3840) },
5886 { PREFIX_TABLE (PREFIX_0F3841) },
592d1631
L
5887 { Bad_Opcode },
5888 { Bad_Opcode },
5889 { Bad_Opcode },
5890 { Bad_Opcode },
5891 { Bad_Opcode },
5892 { Bad_Opcode },
f88c9eb0 5893 /* 48 */
592d1631
L
5894 { Bad_Opcode },
5895 { Bad_Opcode },
5896 { Bad_Opcode },
5897 { Bad_Opcode },
5898 { Bad_Opcode },
5899 { Bad_Opcode },
5900 { Bad_Opcode },
5901 { Bad_Opcode },
f88c9eb0 5902 /* 50 */
592d1631
L
5903 { Bad_Opcode },
5904 { Bad_Opcode },
5905 { Bad_Opcode },
5906 { Bad_Opcode },
5907 { Bad_Opcode },
5908 { Bad_Opcode },
5909 { Bad_Opcode },
5910 { Bad_Opcode },
f88c9eb0 5911 /* 58 */
592d1631
L
5912 { Bad_Opcode },
5913 { Bad_Opcode },
5914 { Bad_Opcode },
5915 { Bad_Opcode },
5916 { Bad_Opcode },
5917 { Bad_Opcode },
5918 { Bad_Opcode },
5919 { Bad_Opcode },
f88c9eb0 5920 /* 60 */
592d1631
L
5921 { Bad_Opcode },
5922 { Bad_Opcode },
5923 { Bad_Opcode },
5924 { Bad_Opcode },
5925 { Bad_Opcode },
5926 { Bad_Opcode },
5927 { Bad_Opcode },
5928 { Bad_Opcode },
f88c9eb0 5929 /* 68 */
592d1631
L
5930 { Bad_Opcode },
5931 { Bad_Opcode },
5932 { Bad_Opcode },
5933 { Bad_Opcode },
5934 { Bad_Opcode },
5935 { Bad_Opcode },
5936 { Bad_Opcode },
5937 { Bad_Opcode },
f88c9eb0 5938 /* 70 */
592d1631
L
5939 { Bad_Opcode },
5940 { Bad_Opcode },
5941 { Bad_Opcode },
5942 { Bad_Opcode },
5943 { Bad_Opcode },
5944 { Bad_Opcode },
5945 { Bad_Opcode },
5946 { Bad_Opcode },
f88c9eb0 5947 /* 78 */
592d1631
L
5948 { Bad_Opcode },
5949 { Bad_Opcode },
5950 { Bad_Opcode },
5951 { Bad_Opcode },
5952 { Bad_Opcode },
5953 { Bad_Opcode },
5954 { Bad_Opcode },
5955 { Bad_Opcode },
f88c9eb0
SP
5956 /* 80 */
5957 { PREFIX_TABLE (PREFIX_0F3880) },
5958 { PREFIX_TABLE (PREFIX_0F3881) },
6c30d220 5959 { PREFIX_TABLE (PREFIX_0F3882) },
592d1631
L
5960 { Bad_Opcode },
5961 { Bad_Opcode },
5962 { Bad_Opcode },
5963 { Bad_Opcode },
5964 { Bad_Opcode },
f88c9eb0 5965 /* 88 */
592d1631
L
5966 { Bad_Opcode },
5967 { Bad_Opcode },
5968 { Bad_Opcode },
5969 { Bad_Opcode },
5970 { Bad_Opcode },
5971 { Bad_Opcode },
5972 { Bad_Opcode },
5973 { Bad_Opcode },
f88c9eb0 5974 /* 90 */
592d1631
L
5975 { Bad_Opcode },
5976 { Bad_Opcode },
5977 { Bad_Opcode },
5978 { Bad_Opcode },
5979 { Bad_Opcode },
5980 { Bad_Opcode },
5981 { Bad_Opcode },
5982 { Bad_Opcode },
f88c9eb0 5983 /* 98 */
592d1631
L
5984 { Bad_Opcode },
5985 { Bad_Opcode },
5986 { Bad_Opcode },
5987 { Bad_Opcode },
5988 { Bad_Opcode },
5989 { Bad_Opcode },
5990 { Bad_Opcode },
5991 { Bad_Opcode },
f88c9eb0 5992 /* a0 */
592d1631
L
5993 { Bad_Opcode },
5994 { Bad_Opcode },
5995 { Bad_Opcode },
5996 { Bad_Opcode },
5997 { Bad_Opcode },
5998 { Bad_Opcode },
5999 { Bad_Opcode },
6000 { Bad_Opcode },
f88c9eb0 6001 /* a8 */
592d1631
L
6002 { Bad_Opcode },
6003 { Bad_Opcode },
6004 { Bad_Opcode },
6005 { Bad_Opcode },
6006 { Bad_Opcode },
6007 { Bad_Opcode },
6008 { Bad_Opcode },
6009 { Bad_Opcode },
f88c9eb0 6010 /* b0 */
592d1631
L
6011 { Bad_Opcode },
6012 { Bad_Opcode },
6013 { Bad_Opcode },
6014 { Bad_Opcode },
6015 { Bad_Opcode },
6016 { Bad_Opcode },
6017 { Bad_Opcode },
6018 { Bad_Opcode },
f88c9eb0 6019 /* b8 */
592d1631
L
6020 { Bad_Opcode },
6021 { Bad_Opcode },
6022 { Bad_Opcode },
6023 { Bad_Opcode },
6024 { Bad_Opcode },
6025 { Bad_Opcode },
6026 { Bad_Opcode },
6027 { Bad_Opcode },
f88c9eb0 6028 /* c0 */
592d1631
L
6029 { Bad_Opcode },
6030 { Bad_Opcode },
6031 { Bad_Opcode },
6032 { Bad_Opcode },
6033 { Bad_Opcode },
6034 { Bad_Opcode },
6035 { Bad_Opcode },
6036 { Bad_Opcode },
f88c9eb0 6037 /* c8 */
592d1631
L
6038 { Bad_Opcode },
6039 { Bad_Opcode },
6040 { Bad_Opcode },
6041 { Bad_Opcode },
6042 { Bad_Opcode },
6043 { Bad_Opcode },
6044 { Bad_Opcode },
6045 { Bad_Opcode },
f88c9eb0 6046 /* d0 */
592d1631
L
6047 { Bad_Opcode },
6048 { Bad_Opcode },
6049 { Bad_Opcode },
6050 { Bad_Opcode },
6051 { Bad_Opcode },
6052 { Bad_Opcode },
6053 { Bad_Opcode },
6054 { Bad_Opcode },
f88c9eb0 6055 /* d8 */
592d1631
L
6056 { Bad_Opcode },
6057 { Bad_Opcode },
6058 { Bad_Opcode },
f88c9eb0
SP
6059 { PREFIX_TABLE (PREFIX_0F38DB) },
6060 { PREFIX_TABLE (PREFIX_0F38DC) },
6061 { PREFIX_TABLE (PREFIX_0F38DD) },
6062 { PREFIX_TABLE (PREFIX_0F38DE) },
6063 { PREFIX_TABLE (PREFIX_0F38DF) },
6064 /* e0 */
592d1631
L
6065 { Bad_Opcode },
6066 { Bad_Opcode },
6067 { Bad_Opcode },
6068 { Bad_Opcode },
6069 { Bad_Opcode },
6070 { Bad_Opcode },
6071 { Bad_Opcode },
6072 { Bad_Opcode },
f88c9eb0 6073 /* e8 */
592d1631
L
6074 { Bad_Opcode },
6075 { Bad_Opcode },
6076 { Bad_Opcode },
6077 { Bad_Opcode },
6078 { Bad_Opcode },
6079 { Bad_Opcode },
6080 { Bad_Opcode },
6081 { Bad_Opcode },
f88c9eb0
SP
6082 /* f0 */
6083 { PREFIX_TABLE (PREFIX_0F38F0) },
6084 { PREFIX_TABLE (PREFIX_0F38F1) },
592d1631
L
6085 { Bad_Opcode },
6086 { Bad_Opcode },
6087 { Bad_Opcode },
6088 { Bad_Opcode },
e2e1fcde 6089 { PREFIX_TABLE (PREFIX_0F38F6) },
592d1631 6090 { Bad_Opcode },
f88c9eb0 6091 /* f8 */
592d1631
L
6092 { Bad_Opcode },
6093 { Bad_Opcode },
6094 { Bad_Opcode },
6095 { Bad_Opcode },
6096 { Bad_Opcode },
6097 { Bad_Opcode },
6098 { Bad_Opcode },
6099 { Bad_Opcode },
f88c9eb0
SP
6100 },
6101 /* THREE_BYTE_0F3A */
6102 {
6103 /* 00 */
592d1631
L
6104 { Bad_Opcode },
6105 { Bad_Opcode },
6106 { Bad_Opcode },
6107 { Bad_Opcode },
6108 { Bad_Opcode },
6109 { Bad_Opcode },
6110 { Bad_Opcode },
6111 { Bad_Opcode },
f88c9eb0
SP
6112 /* 08 */
6113 { PREFIX_TABLE (PREFIX_0F3A08) },
6114 { PREFIX_TABLE (PREFIX_0F3A09) },
6115 { PREFIX_TABLE (PREFIX_0F3A0A) },
6116 { PREFIX_TABLE (PREFIX_0F3A0B) },
6117 { PREFIX_TABLE (PREFIX_0F3A0C) },
6118 { PREFIX_TABLE (PREFIX_0F3A0D) },
6119 { PREFIX_TABLE (PREFIX_0F3A0E) },
6120 { "palignr", { MX, EM, Ib } },
6121 /* 10 */
592d1631
L
6122 { Bad_Opcode },
6123 { Bad_Opcode },
6124 { Bad_Opcode },
6125 { Bad_Opcode },
f88c9eb0
SP
6126 { PREFIX_TABLE (PREFIX_0F3A14) },
6127 { PREFIX_TABLE (PREFIX_0F3A15) },
6128 { PREFIX_TABLE (PREFIX_0F3A16) },
6129 { PREFIX_TABLE (PREFIX_0F3A17) },
6130 /* 18 */
592d1631
L
6131 { Bad_Opcode },
6132 { Bad_Opcode },
6133 { Bad_Opcode },
6134 { Bad_Opcode },
6135 { Bad_Opcode },
6136 { Bad_Opcode },
6137 { Bad_Opcode },
6138 { Bad_Opcode },
f88c9eb0
SP
6139 /* 20 */
6140 { PREFIX_TABLE (PREFIX_0F3A20) },
6141 { PREFIX_TABLE (PREFIX_0F3A21) },
6142 { PREFIX_TABLE (PREFIX_0F3A22) },
592d1631
L
6143 { Bad_Opcode },
6144 { Bad_Opcode },
6145 { Bad_Opcode },
6146 { Bad_Opcode },
6147 { Bad_Opcode },
f88c9eb0 6148 /* 28 */
592d1631
L
6149 { Bad_Opcode },
6150 { Bad_Opcode },
6151 { Bad_Opcode },
6152 { Bad_Opcode },
6153 { Bad_Opcode },
6154 { Bad_Opcode },
6155 { Bad_Opcode },
6156 { Bad_Opcode },
f88c9eb0 6157 /* 30 */
592d1631
L
6158 { Bad_Opcode },
6159 { Bad_Opcode },
6160 { Bad_Opcode },
6161 { Bad_Opcode },
6162 { Bad_Opcode },
6163 { Bad_Opcode },
6164 { Bad_Opcode },
6165 { Bad_Opcode },
f88c9eb0 6166 /* 38 */
592d1631
L
6167 { Bad_Opcode },
6168 { Bad_Opcode },
6169 { Bad_Opcode },
6170 { Bad_Opcode },
6171 { Bad_Opcode },
6172 { Bad_Opcode },
6173 { Bad_Opcode },
6174 { Bad_Opcode },
f88c9eb0
SP
6175 /* 40 */
6176 { PREFIX_TABLE (PREFIX_0F3A40) },
6177 { PREFIX_TABLE (PREFIX_0F3A41) },
6178 { PREFIX_TABLE (PREFIX_0F3A42) },
592d1631 6179 { Bad_Opcode },
f88c9eb0 6180 { PREFIX_TABLE (PREFIX_0F3A44) },
592d1631
L
6181 { Bad_Opcode },
6182 { Bad_Opcode },
6183 { Bad_Opcode },
f88c9eb0 6184 /* 48 */
592d1631
L
6185 { Bad_Opcode },
6186 { Bad_Opcode },
6187 { Bad_Opcode },
6188 { Bad_Opcode },
6189 { Bad_Opcode },
6190 { Bad_Opcode },
6191 { Bad_Opcode },
6192 { Bad_Opcode },
f88c9eb0 6193 /* 50 */
592d1631
L
6194 { Bad_Opcode },
6195 { Bad_Opcode },
6196 { Bad_Opcode },
6197 { Bad_Opcode },
6198 { Bad_Opcode },
6199 { Bad_Opcode },
6200 { Bad_Opcode },
6201 { Bad_Opcode },
f88c9eb0 6202 /* 58 */
592d1631
L
6203 { Bad_Opcode },
6204 { Bad_Opcode },
6205 { Bad_Opcode },
6206 { Bad_Opcode },
6207 { Bad_Opcode },
6208 { Bad_Opcode },
6209 { Bad_Opcode },
6210 { Bad_Opcode },
f88c9eb0
SP
6211 /* 60 */
6212 { PREFIX_TABLE (PREFIX_0F3A60) },
6213 { PREFIX_TABLE (PREFIX_0F3A61) },
6214 { PREFIX_TABLE (PREFIX_0F3A62) },
6215 { PREFIX_TABLE (PREFIX_0F3A63) },
592d1631
L
6216 { Bad_Opcode },
6217 { Bad_Opcode },
6218 { Bad_Opcode },
6219 { Bad_Opcode },
f88c9eb0 6220 /* 68 */
592d1631
L
6221 { Bad_Opcode },
6222 { Bad_Opcode },
6223 { Bad_Opcode },
6224 { Bad_Opcode },
6225 { Bad_Opcode },
6226 { Bad_Opcode },
6227 { Bad_Opcode },
6228 { Bad_Opcode },
f88c9eb0 6229 /* 70 */
592d1631
L
6230 { Bad_Opcode },
6231 { Bad_Opcode },
6232 { Bad_Opcode },
6233 { Bad_Opcode },
6234 { Bad_Opcode },
6235 { Bad_Opcode },
6236 { Bad_Opcode },
6237 { Bad_Opcode },
f88c9eb0 6238 /* 78 */
592d1631
L
6239 { Bad_Opcode },
6240 { Bad_Opcode },
6241 { Bad_Opcode },
6242 { Bad_Opcode },
6243 { Bad_Opcode },
6244 { Bad_Opcode },
6245 { Bad_Opcode },
6246 { Bad_Opcode },
f88c9eb0 6247 /* 80 */
592d1631
L
6248 { Bad_Opcode },
6249 { Bad_Opcode },
6250 { Bad_Opcode },
6251 { Bad_Opcode },
6252 { Bad_Opcode },
6253 { Bad_Opcode },
6254 { Bad_Opcode },
6255 { Bad_Opcode },
f88c9eb0 6256 /* 88 */
592d1631
L
6257 { Bad_Opcode },
6258 { Bad_Opcode },
6259 { Bad_Opcode },
6260 { Bad_Opcode },
6261 { Bad_Opcode },
6262 { Bad_Opcode },
6263 { Bad_Opcode },
6264 { Bad_Opcode },
f88c9eb0 6265 /* 90 */
592d1631
L
6266 { Bad_Opcode },
6267 { Bad_Opcode },
6268 { Bad_Opcode },
6269 { Bad_Opcode },
6270 { Bad_Opcode },
6271 { Bad_Opcode },
6272 { Bad_Opcode },
6273 { Bad_Opcode },
f88c9eb0 6274 /* 98 */
592d1631
L
6275 { Bad_Opcode },
6276 { Bad_Opcode },
6277 { Bad_Opcode },
6278 { Bad_Opcode },
6279 { Bad_Opcode },
6280 { Bad_Opcode },
6281 { Bad_Opcode },
6282 { Bad_Opcode },
f88c9eb0 6283 /* a0 */
592d1631
L
6284 { Bad_Opcode },
6285 { Bad_Opcode },
6286 { Bad_Opcode },
6287 { Bad_Opcode },
6288 { Bad_Opcode },
6289 { Bad_Opcode },
6290 { Bad_Opcode },
6291 { Bad_Opcode },
f88c9eb0 6292 /* a8 */
592d1631
L
6293 { Bad_Opcode },
6294 { Bad_Opcode },
6295 { Bad_Opcode },
6296 { Bad_Opcode },
6297 { Bad_Opcode },
6298 { Bad_Opcode },
6299 { Bad_Opcode },
6300 { Bad_Opcode },
f88c9eb0 6301 /* b0 */
592d1631
L
6302 { Bad_Opcode },
6303 { Bad_Opcode },
6304 { Bad_Opcode },
6305 { Bad_Opcode },
6306 { Bad_Opcode },
6307 { Bad_Opcode },
6308 { Bad_Opcode },
6309 { Bad_Opcode },
f88c9eb0 6310 /* b8 */
592d1631
L
6311 { Bad_Opcode },
6312 { Bad_Opcode },
6313 { Bad_Opcode },
6314 { Bad_Opcode },
6315 { Bad_Opcode },
6316 { Bad_Opcode },
6317 { Bad_Opcode },
6318 { Bad_Opcode },
f88c9eb0 6319 /* c0 */
592d1631
L
6320 { Bad_Opcode },
6321 { Bad_Opcode },
6322 { Bad_Opcode },
6323 { Bad_Opcode },
6324 { Bad_Opcode },
6325 { Bad_Opcode },
6326 { Bad_Opcode },
6327 { Bad_Opcode },
f88c9eb0 6328 /* c8 */
592d1631
L
6329 { Bad_Opcode },
6330 { Bad_Opcode },
6331 { Bad_Opcode },
6332 { Bad_Opcode },
6333 { Bad_Opcode },
6334 { Bad_Opcode },
6335 { Bad_Opcode },
6336 { Bad_Opcode },
f88c9eb0 6337 /* d0 */
592d1631
L
6338 { Bad_Opcode },
6339 { Bad_Opcode },
6340 { Bad_Opcode },
6341 { Bad_Opcode },
6342 { Bad_Opcode },
6343 { Bad_Opcode },
6344 { Bad_Opcode },
6345 { Bad_Opcode },
f88c9eb0 6346 /* d8 */
592d1631
L
6347 { Bad_Opcode },
6348 { Bad_Opcode },
6349 { Bad_Opcode },
6350 { Bad_Opcode },
6351 { Bad_Opcode },
6352 { Bad_Opcode },
6353 { Bad_Opcode },
f88c9eb0
SP
6354 { PREFIX_TABLE (PREFIX_0F3ADF) },
6355 /* e0 */
592d1631
L
6356 { Bad_Opcode },
6357 { Bad_Opcode },
6358 { Bad_Opcode },
6359 { Bad_Opcode },
6360 { Bad_Opcode },
6361 { Bad_Opcode },
6362 { Bad_Opcode },
6363 { Bad_Opcode },
f88c9eb0 6364 /* e8 */
592d1631
L
6365 { Bad_Opcode },
6366 { Bad_Opcode },
6367 { Bad_Opcode },
6368 { Bad_Opcode },
6369 { Bad_Opcode },
6370 { Bad_Opcode },
6371 { Bad_Opcode },
6372 { Bad_Opcode },
f88c9eb0 6373 /* f0 */
592d1631
L
6374 { Bad_Opcode },
6375 { Bad_Opcode },
6376 { Bad_Opcode },
6377 { Bad_Opcode },
6378 { Bad_Opcode },
6379 { Bad_Opcode },
6380 { Bad_Opcode },
6381 { Bad_Opcode },
f88c9eb0 6382 /* f8 */
592d1631
L
6383 { Bad_Opcode },
6384 { Bad_Opcode },
6385 { Bad_Opcode },
6386 { Bad_Opcode },
6387 { Bad_Opcode },
6388 { Bad_Opcode },
6389 { Bad_Opcode },
6390 { Bad_Opcode },
f88c9eb0
SP
6391 },
6392
6393 /* THREE_BYTE_0F7A */
6394 {
6395 /* 00 */
592d1631
L
6396 { Bad_Opcode },
6397 { Bad_Opcode },
6398 { Bad_Opcode },
6399 { Bad_Opcode },
6400 { Bad_Opcode },
6401 { Bad_Opcode },
6402 { Bad_Opcode },
6403 { Bad_Opcode },
f88c9eb0 6404 /* 08 */
592d1631
L
6405 { Bad_Opcode },
6406 { Bad_Opcode },
6407 { Bad_Opcode },
6408 { Bad_Opcode },
6409 { Bad_Opcode },
6410 { Bad_Opcode },
6411 { Bad_Opcode },
6412 { Bad_Opcode },
f88c9eb0 6413 /* 10 */
592d1631
L
6414 { Bad_Opcode },
6415 { Bad_Opcode },
6416 { Bad_Opcode },
6417 { Bad_Opcode },
6418 { Bad_Opcode },
6419 { Bad_Opcode },
6420 { Bad_Opcode },
6421 { Bad_Opcode },
f88c9eb0 6422 /* 18 */
592d1631
L
6423 { Bad_Opcode },
6424 { Bad_Opcode },
6425 { Bad_Opcode },
6426 { Bad_Opcode },
6427 { Bad_Opcode },
6428 { Bad_Opcode },
6429 { Bad_Opcode },
6430 { Bad_Opcode },
f88c9eb0
SP
6431 /* 20 */
6432 { "ptest", { XX } },
592d1631
L
6433 { Bad_Opcode },
6434 { Bad_Opcode },
6435 { Bad_Opcode },
6436 { Bad_Opcode },
6437 { Bad_Opcode },
6438 { Bad_Opcode },
6439 { Bad_Opcode },
f88c9eb0 6440 /* 28 */
592d1631
L
6441 { Bad_Opcode },
6442 { Bad_Opcode },
6443 { Bad_Opcode },
6444 { Bad_Opcode },
6445 { Bad_Opcode },
6446 { Bad_Opcode },
6447 { Bad_Opcode },
6448 { Bad_Opcode },
f88c9eb0 6449 /* 30 */
592d1631
L
6450 { Bad_Opcode },
6451 { Bad_Opcode },
6452 { Bad_Opcode },
6453 { Bad_Opcode },
6454 { Bad_Opcode },
6455 { Bad_Opcode },
6456 { Bad_Opcode },
6457 { Bad_Opcode },
f88c9eb0 6458 /* 38 */
592d1631
L
6459 { Bad_Opcode },
6460 { Bad_Opcode },
6461 { Bad_Opcode },
6462 { Bad_Opcode },
6463 { Bad_Opcode },
6464 { Bad_Opcode },
6465 { Bad_Opcode },
6466 { Bad_Opcode },
f88c9eb0 6467 /* 40 */
592d1631 6468 { Bad_Opcode },
f88c9eb0
SP
6469 { "phaddbw", { XM, EXq } },
6470 { "phaddbd", { XM, EXq } },
6471 { "phaddbq", { XM, EXq } },
592d1631
L
6472 { Bad_Opcode },
6473 { Bad_Opcode },
f88c9eb0
SP
6474 { "phaddwd", { XM, EXq } },
6475 { "phaddwq", { XM, EXq } },
6476 /* 48 */
592d1631
L
6477 { Bad_Opcode },
6478 { Bad_Opcode },
6479 { Bad_Opcode },
f88c9eb0 6480 { "phadddq", { XM, EXq } },
592d1631
L
6481 { Bad_Opcode },
6482 { Bad_Opcode },
6483 { Bad_Opcode },
6484 { Bad_Opcode },
f88c9eb0 6485 /* 50 */
592d1631 6486 { Bad_Opcode },
f88c9eb0
SP
6487 { "phaddubw", { XM, EXq } },
6488 { "phaddubd", { XM, EXq } },
6489 { "phaddubq", { XM, EXq } },
592d1631
L
6490 { Bad_Opcode },
6491 { Bad_Opcode },
f88c9eb0
SP
6492 { "phadduwd", { XM, EXq } },
6493 { "phadduwq", { XM, EXq } },
6494 /* 58 */
592d1631
L
6495 { Bad_Opcode },
6496 { Bad_Opcode },
6497 { Bad_Opcode },
f88c9eb0 6498 { "phaddudq", { XM, EXq } },
592d1631
L
6499 { Bad_Opcode },
6500 { Bad_Opcode },
6501 { Bad_Opcode },
6502 { Bad_Opcode },
f88c9eb0 6503 /* 60 */
592d1631 6504 { Bad_Opcode },
f88c9eb0
SP
6505 { "phsubbw", { XM, EXq } },
6506 { "phsubbd", { XM, EXq } },
6507 { "phsubbq", { XM, EXq } },
592d1631
L
6508 { Bad_Opcode },
6509 { Bad_Opcode },
6510 { Bad_Opcode },
6511 { Bad_Opcode },
4e7d34a6 6512 /* 68 */
592d1631
L
6513 { Bad_Opcode },
6514 { Bad_Opcode },
6515 { Bad_Opcode },
6516 { Bad_Opcode },
6517 { Bad_Opcode },
6518 { Bad_Opcode },
6519 { Bad_Opcode },
6520 { Bad_Opcode },
85f10a01 6521 /* 70 */
592d1631
L
6522 { Bad_Opcode },
6523 { Bad_Opcode },
6524 { Bad_Opcode },
6525 { Bad_Opcode },
6526 { Bad_Opcode },
6527 { Bad_Opcode },
6528 { Bad_Opcode },
6529 { Bad_Opcode },
85f10a01 6530 /* 78 */
592d1631
L
6531 { Bad_Opcode },
6532 { Bad_Opcode },
6533 { Bad_Opcode },
6534 { Bad_Opcode },
6535 { Bad_Opcode },
6536 { Bad_Opcode },
6537 { Bad_Opcode },
6538 { Bad_Opcode },
85f10a01 6539 /* 80 */
592d1631
L
6540 { Bad_Opcode },
6541 { Bad_Opcode },
6542 { Bad_Opcode },
6543 { Bad_Opcode },
6544 { Bad_Opcode },
6545 { Bad_Opcode },
6546 { Bad_Opcode },
6547 { Bad_Opcode },
85f10a01 6548 /* 88 */
592d1631
L
6549 { Bad_Opcode },
6550 { Bad_Opcode },
6551 { Bad_Opcode },
6552 { Bad_Opcode },
6553 { Bad_Opcode },
6554 { Bad_Opcode },
6555 { Bad_Opcode },
6556 { Bad_Opcode },
85f10a01 6557 /* 90 */
592d1631
L
6558 { Bad_Opcode },
6559 { Bad_Opcode },
6560 { Bad_Opcode },
6561 { Bad_Opcode },
6562 { Bad_Opcode },
6563 { Bad_Opcode },
6564 { Bad_Opcode },
6565 { Bad_Opcode },
85f10a01 6566 /* 98 */
592d1631
L
6567 { Bad_Opcode },
6568 { Bad_Opcode },
6569 { Bad_Opcode },
6570 { Bad_Opcode },
6571 { Bad_Opcode },
6572 { Bad_Opcode },
6573 { Bad_Opcode },
6574 { Bad_Opcode },
85f10a01 6575 /* a0 */
592d1631
L
6576 { Bad_Opcode },
6577 { Bad_Opcode },
6578 { Bad_Opcode },
6579 { Bad_Opcode },
6580 { Bad_Opcode },
6581 { Bad_Opcode },
6582 { Bad_Opcode },
6583 { Bad_Opcode },
85f10a01 6584 /* a8 */
592d1631
L
6585 { Bad_Opcode },
6586 { Bad_Opcode },
6587 { Bad_Opcode },
6588 { Bad_Opcode },
6589 { Bad_Opcode },
6590 { Bad_Opcode },
6591 { Bad_Opcode },
6592 { Bad_Opcode },
85f10a01 6593 /* b0 */
592d1631
L
6594 { Bad_Opcode },
6595 { Bad_Opcode },
6596 { Bad_Opcode },
6597 { Bad_Opcode },
6598 { Bad_Opcode },
6599 { Bad_Opcode },
6600 { Bad_Opcode },
6601 { Bad_Opcode },
85f10a01 6602 /* b8 */
592d1631
L
6603 { Bad_Opcode },
6604 { Bad_Opcode },
6605 { Bad_Opcode },
6606 { Bad_Opcode },
6607 { Bad_Opcode },
6608 { Bad_Opcode },
6609 { Bad_Opcode },
6610 { Bad_Opcode },
85f10a01 6611 /* c0 */
592d1631
L
6612 { Bad_Opcode },
6613 { Bad_Opcode },
6614 { Bad_Opcode },
6615 { Bad_Opcode },
6616 { Bad_Opcode },
6617 { Bad_Opcode },
6618 { Bad_Opcode },
6619 { Bad_Opcode },
85f10a01 6620 /* c8 */
592d1631
L
6621 { Bad_Opcode },
6622 { Bad_Opcode },
6623 { Bad_Opcode },
6624 { Bad_Opcode },
6625 { Bad_Opcode },
6626 { Bad_Opcode },
6627 { Bad_Opcode },
6628 { Bad_Opcode },
85f10a01 6629 /* d0 */
592d1631
L
6630 { Bad_Opcode },
6631 { Bad_Opcode },
6632 { Bad_Opcode },
6633 { Bad_Opcode },
6634 { Bad_Opcode },
6635 { Bad_Opcode },
6636 { Bad_Opcode },
6637 { Bad_Opcode },
85f10a01 6638 /* d8 */
592d1631
L
6639 { Bad_Opcode },
6640 { Bad_Opcode },
6641 { Bad_Opcode },
6642 { Bad_Opcode },
6643 { Bad_Opcode },
6644 { Bad_Opcode },
6645 { Bad_Opcode },
6646 { Bad_Opcode },
85f10a01 6647 /* e0 */
592d1631
L
6648 { Bad_Opcode },
6649 { Bad_Opcode },
6650 { Bad_Opcode },
6651 { Bad_Opcode },
6652 { Bad_Opcode },
6653 { Bad_Opcode },
6654 { Bad_Opcode },
6655 { Bad_Opcode },
85f10a01 6656 /* e8 */
592d1631
L
6657 { Bad_Opcode },
6658 { Bad_Opcode },
6659 { Bad_Opcode },
6660 { Bad_Opcode },
6661 { Bad_Opcode },
6662 { Bad_Opcode },
6663 { Bad_Opcode },
6664 { Bad_Opcode },
85f10a01 6665 /* f0 */
592d1631
L
6666 { Bad_Opcode },
6667 { Bad_Opcode },
6668 { Bad_Opcode },
6669 { Bad_Opcode },
6670 { Bad_Opcode },
6671 { Bad_Opcode },
6672 { Bad_Opcode },
6673 { Bad_Opcode },
85f10a01 6674 /* f8 */
592d1631
L
6675 { Bad_Opcode },
6676 { Bad_Opcode },
6677 { Bad_Opcode },
6678 { Bad_Opcode },
6679 { Bad_Opcode },
6680 { Bad_Opcode },
6681 { Bad_Opcode },
6682 { Bad_Opcode },
85f10a01 6683 },
f88c9eb0
SP
6684};
6685
6686static const struct dis386 xop_table[][256] = {
5dd85c99 6687 /* XOP_08 */
85f10a01
MM
6688 {
6689 /* 00 */
592d1631
L
6690 { Bad_Opcode },
6691 { Bad_Opcode },
6692 { Bad_Opcode },
6693 { Bad_Opcode },
6694 { Bad_Opcode },
6695 { Bad_Opcode },
6696 { Bad_Opcode },
6697 { Bad_Opcode },
85f10a01 6698 /* 08 */
592d1631
L
6699 { Bad_Opcode },
6700 { Bad_Opcode },
6701 { Bad_Opcode },
6702 { Bad_Opcode },
6703 { Bad_Opcode },
6704 { Bad_Opcode },
6705 { Bad_Opcode },
6706 { Bad_Opcode },
85f10a01 6707 /* 10 */
3929df09 6708 { Bad_Opcode },
592d1631
L
6709 { Bad_Opcode },
6710 { Bad_Opcode },
6711 { Bad_Opcode },
6712 { Bad_Opcode },
6713 { Bad_Opcode },
6714 { Bad_Opcode },
6715 { Bad_Opcode },
85f10a01 6716 /* 18 */
592d1631
L
6717 { Bad_Opcode },
6718 { Bad_Opcode },
6719 { Bad_Opcode },
6720 { Bad_Opcode },
6721 { Bad_Opcode },
6722 { Bad_Opcode },
6723 { Bad_Opcode },
6724 { Bad_Opcode },
85f10a01 6725 /* 20 */
592d1631
L
6726 { Bad_Opcode },
6727 { Bad_Opcode },
6728 { Bad_Opcode },
6729 { Bad_Opcode },
6730 { Bad_Opcode },
6731 { Bad_Opcode },
6732 { Bad_Opcode },
6733 { Bad_Opcode },
85f10a01 6734 /* 28 */
592d1631
L
6735 { Bad_Opcode },
6736 { Bad_Opcode },
6737 { Bad_Opcode },
6738 { Bad_Opcode },
6739 { Bad_Opcode },
6740 { Bad_Opcode },
6741 { Bad_Opcode },
6742 { Bad_Opcode },
c0f3af97 6743 /* 30 */
592d1631
L
6744 { Bad_Opcode },
6745 { Bad_Opcode },
6746 { Bad_Opcode },
6747 { Bad_Opcode },
6748 { Bad_Opcode },
6749 { Bad_Opcode },
6750 { Bad_Opcode },
6751 { Bad_Opcode },
c0f3af97 6752 /* 38 */
592d1631
L
6753 { Bad_Opcode },
6754 { Bad_Opcode },
6755 { Bad_Opcode },
6756 { Bad_Opcode },
6757 { Bad_Opcode },
6758 { Bad_Opcode },
6759 { Bad_Opcode },
6760 { Bad_Opcode },
c0f3af97 6761 /* 40 */
592d1631
L
6762 { Bad_Opcode },
6763 { Bad_Opcode },
6764 { Bad_Opcode },
6765 { Bad_Opcode },
6766 { Bad_Opcode },
6767 { Bad_Opcode },
6768 { Bad_Opcode },
6769 { Bad_Opcode },
85f10a01 6770 /* 48 */
592d1631
L
6771 { Bad_Opcode },
6772 { Bad_Opcode },
6773 { Bad_Opcode },
6774 { Bad_Opcode },
6775 { Bad_Opcode },
6776 { Bad_Opcode },
6777 { Bad_Opcode },
6778 { Bad_Opcode },
c0f3af97 6779 /* 50 */
592d1631
L
6780 { Bad_Opcode },
6781 { Bad_Opcode },
6782 { Bad_Opcode },
6783 { Bad_Opcode },
6784 { Bad_Opcode },
6785 { Bad_Opcode },
6786 { Bad_Opcode },
6787 { Bad_Opcode },
85f10a01 6788 /* 58 */
592d1631
L
6789 { Bad_Opcode },
6790 { Bad_Opcode },
6791 { Bad_Opcode },
6792 { Bad_Opcode },
6793 { Bad_Opcode },
6794 { Bad_Opcode },
6795 { Bad_Opcode },
6796 { Bad_Opcode },
c1e679ec 6797 /* 60 */
592d1631
L
6798 { Bad_Opcode },
6799 { Bad_Opcode },
6800 { Bad_Opcode },
6801 { Bad_Opcode },
6802 { Bad_Opcode },
6803 { Bad_Opcode },
6804 { Bad_Opcode },
6805 { Bad_Opcode },
c0f3af97 6806 /* 68 */
592d1631
L
6807 { Bad_Opcode },
6808 { Bad_Opcode },
6809 { Bad_Opcode },
6810 { Bad_Opcode },
6811 { Bad_Opcode },
6812 { Bad_Opcode },
6813 { Bad_Opcode },
6814 { Bad_Opcode },
85f10a01 6815 /* 70 */
592d1631
L
6816 { Bad_Opcode },
6817 { Bad_Opcode },
6818 { Bad_Opcode },
6819 { Bad_Opcode },
6820 { Bad_Opcode },
6821 { Bad_Opcode },
6822 { Bad_Opcode },
6823 { Bad_Opcode },
85f10a01 6824 /* 78 */
592d1631
L
6825 { Bad_Opcode },
6826 { Bad_Opcode },
6827 { Bad_Opcode },
6828 { Bad_Opcode },
6829 { Bad_Opcode },
6830 { Bad_Opcode },
6831 { Bad_Opcode },
6832 { Bad_Opcode },
85f10a01 6833 /* 80 */
592d1631
L
6834 { Bad_Opcode },
6835 { Bad_Opcode },
6836 { Bad_Opcode },
6837 { Bad_Opcode },
6838 { Bad_Opcode },
5dd85c99
SP
6839 { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6840 { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6841 { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6842 /* 88 */
592d1631
L
6843 { Bad_Opcode },
6844 { Bad_Opcode },
6845 { Bad_Opcode },
6846 { Bad_Opcode },
6847 { Bad_Opcode },
6848 { Bad_Opcode },
5dd85c99
SP
6849 { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6850 { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6851 /* 90 */
592d1631
L
6852 { Bad_Opcode },
6853 { Bad_Opcode },
6854 { Bad_Opcode },
6855 { Bad_Opcode },
6856 { Bad_Opcode },
5dd85c99
SP
6857 { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6858 { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6859 { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6860 /* 98 */
592d1631
L
6861 { Bad_Opcode },
6862 { Bad_Opcode },
6863 { Bad_Opcode },
6864 { Bad_Opcode },
6865 { Bad_Opcode },
6866 { Bad_Opcode },
5dd85c99
SP
6867 { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6868 { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6869 /* a0 */
592d1631
L
6870 { Bad_Opcode },
6871 { Bad_Opcode },
5dd85c99
SP
6872 { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6873 { "vpperm", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631
L
6874 { Bad_Opcode },
6875 { Bad_Opcode },
5dd85c99 6876 { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631 6877 { Bad_Opcode },
5dd85c99 6878 /* a8 */
592d1631
L
6879 { Bad_Opcode },
6880 { Bad_Opcode },
6881 { Bad_Opcode },
6882 { Bad_Opcode },
6883 { Bad_Opcode },
6884 { Bad_Opcode },
6885 { Bad_Opcode },
6886 { Bad_Opcode },
5dd85c99 6887 /* b0 */
592d1631
L
6888 { Bad_Opcode },
6889 { Bad_Opcode },
6890 { Bad_Opcode },
6891 { Bad_Opcode },
6892 { Bad_Opcode },
6893 { Bad_Opcode },
5dd85c99 6894 { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631 6895 { Bad_Opcode },
5dd85c99 6896 /* b8 */
592d1631
L
6897 { Bad_Opcode },
6898 { Bad_Opcode },
6899 { Bad_Opcode },
6900 { Bad_Opcode },
6901 { Bad_Opcode },
6902 { Bad_Opcode },
6903 { Bad_Opcode },
6904 { Bad_Opcode },
5dd85c99
SP
6905 /* c0 */
6906 { "vprotb", { XM, Vex_2src_1, Ib } },
6907 { "vprotw", { XM, Vex_2src_1, Ib } },
6908 { "vprotd", { XM, Vex_2src_1, Ib } },
6909 { "vprotq", { XM, Vex_2src_1, Ib } },
592d1631
L
6910 { Bad_Opcode },
6911 { Bad_Opcode },
6912 { Bad_Opcode },
6913 { Bad_Opcode },
5dd85c99 6914 /* c8 */
592d1631
L
6915 { Bad_Opcode },
6916 { Bad_Opcode },
6917 { Bad_Opcode },
6918 { Bad_Opcode },
ff688e1f
L
6919 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CC) },
6920 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CD) },
6921 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CE) },
6922 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CF) },
5dd85c99 6923 /* d0 */
592d1631
L
6924 { Bad_Opcode },
6925 { Bad_Opcode },
6926 { Bad_Opcode },
6927 { Bad_Opcode },
6928 { Bad_Opcode },
6929 { Bad_Opcode },
6930 { Bad_Opcode },
6931 { Bad_Opcode },
5dd85c99 6932 /* d8 */
592d1631
L
6933 { Bad_Opcode },
6934 { Bad_Opcode },
6935 { Bad_Opcode },
6936 { Bad_Opcode },
6937 { Bad_Opcode },
6938 { Bad_Opcode },
6939 { Bad_Opcode },
6940 { Bad_Opcode },
5dd85c99 6941 /* e0 */
592d1631
L
6942 { Bad_Opcode },
6943 { Bad_Opcode },
6944 { Bad_Opcode },
6945 { Bad_Opcode },
6946 { Bad_Opcode },
6947 { Bad_Opcode },
6948 { Bad_Opcode },
6949 { Bad_Opcode },
5dd85c99 6950 /* e8 */
592d1631
L
6951 { Bad_Opcode },
6952 { Bad_Opcode },
6953 { Bad_Opcode },
6954 { Bad_Opcode },
ff688e1f
L
6955 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EC) },
6956 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_ED) },
6957 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EE) },
6958 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EF) },
5dd85c99 6959 /* f0 */
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 },
5dd85c99 6968 /* f8 */
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 },
5dd85c99
SP
6977 },
6978 /* XOP_09 */
6979 {
6980 /* 00 */
592d1631 6981 { Bad_Opcode },
2a2a0f38
QN
6982 { REG_TABLE (REG_XOP_TBM_01) },
6983 { REG_TABLE (REG_XOP_TBM_02) },
592d1631
L
6984 { Bad_Opcode },
6985 { Bad_Opcode },
6986 { Bad_Opcode },
6987 { Bad_Opcode },
6988 { Bad_Opcode },
5dd85c99 6989 /* 08 */
592d1631
L
6990 { Bad_Opcode },
6991 { Bad_Opcode },
6992 { Bad_Opcode },
6993 { Bad_Opcode },
6994 { Bad_Opcode },
6995 { Bad_Opcode },
6996 { Bad_Opcode },
6997 { Bad_Opcode },
5dd85c99 6998 /* 10 */
592d1631
L
6999 { Bad_Opcode },
7000 { Bad_Opcode },
5dd85c99 7001 { REG_TABLE (REG_XOP_LWPCB) },
592d1631
L
7002 { Bad_Opcode },
7003 { Bad_Opcode },
7004 { Bad_Opcode },
7005 { Bad_Opcode },
7006 { Bad_Opcode },
5dd85c99 7007 /* 18 */
592d1631
L
7008 { Bad_Opcode },
7009 { Bad_Opcode },
7010 { Bad_Opcode },
7011 { Bad_Opcode },
7012 { Bad_Opcode },
7013 { Bad_Opcode },
7014 { Bad_Opcode },
7015 { Bad_Opcode },
5dd85c99 7016 /* 20 */
592d1631
L
7017 { Bad_Opcode },
7018 { Bad_Opcode },
7019 { Bad_Opcode },
7020 { Bad_Opcode },
7021 { Bad_Opcode },
7022 { Bad_Opcode },
7023 { Bad_Opcode },
7024 { Bad_Opcode },
5dd85c99 7025 /* 28 */
592d1631
L
7026 { Bad_Opcode },
7027 { Bad_Opcode },
7028 { Bad_Opcode },
7029 { Bad_Opcode },
7030 { Bad_Opcode },
7031 { Bad_Opcode },
7032 { Bad_Opcode },
7033 { Bad_Opcode },
5dd85c99 7034 /* 30 */
592d1631
L
7035 { Bad_Opcode },
7036 { Bad_Opcode },
7037 { Bad_Opcode },
7038 { Bad_Opcode },
7039 { Bad_Opcode },
7040 { Bad_Opcode },
7041 { Bad_Opcode },
7042 { Bad_Opcode },
5dd85c99 7043 /* 38 */
592d1631
L
7044 { Bad_Opcode },
7045 { Bad_Opcode },
7046 { Bad_Opcode },
7047 { Bad_Opcode },
7048 { Bad_Opcode },
7049 { Bad_Opcode },
7050 { Bad_Opcode },
7051 { Bad_Opcode },
5dd85c99 7052 /* 40 */
592d1631
L
7053 { Bad_Opcode },
7054 { Bad_Opcode },
7055 { Bad_Opcode },
7056 { Bad_Opcode },
7057 { Bad_Opcode },
7058 { Bad_Opcode },
7059 { Bad_Opcode },
7060 { Bad_Opcode },
5dd85c99 7061 /* 48 */
592d1631
L
7062 { Bad_Opcode },
7063 { Bad_Opcode },
7064 { Bad_Opcode },
7065 { Bad_Opcode },
7066 { Bad_Opcode },
7067 { Bad_Opcode },
7068 { Bad_Opcode },
7069 { Bad_Opcode },
5dd85c99 7070 /* 50 */
592d1631
L
7071 { Bad_Opcode },
7072 { Bad_Opcode },
7073 { Bad_Opcode },
7074 { Bad_Opcode },
7075 { Bad_Opcode },
7076 { Bad_Opcode },
7077 { Bad_Opcode },
7078 { Bad_Opcode },
5dd85c99 7079 /* 58 */
592d1631
L
7080 { Bad_Opcode },
7081 { Bad_Opcode },
7082 { Bad_Opcode },
7083 { Bad_Opcode },
7084 { Bad_Opcode },
7085 { Bad_Opcode },
7086 { Bad_Opcode },
7087 { Bad_Opcode },
5dd85c99 7088 /* 60 */
592d1631
L
7089 { Bad_Opcode },
7090 { Bad_Opcode },
7091 { Bad_Opcode },
7092 { Bad_Opcode },
7093 { Bad_Opcode },
7094 { Bad_Opcode },
7095 { Bad_Opcode },
7096 { Bad_Opcode },
5dd85c99 7097 /* 68 */
592d1631
L
7098 { Bad_Opcode },
7099 { Bad_Opcode },
7100 { Bad_Opcode },
7101 { Bad_Opcode },
7102 { Bad_Opcode },
7103 { Bad_Opcode },
7104 { Bad_Opcode },
7105 { Bad_Opcode },
5dd85c99 7106 /* 70 */
592d1631
L
7107 { Bad_Opcode },
7108 { Bad_Opcode },
7109 { Bad_Opcode },
7110 { Bad_Opcode },
7111 { Bad_Opcode },
7112 { Bad_Opcode },
7113 { Bad_Opcode },
7114 { Bad_Opcode },
5dd85c99 7115 /* 78 */
592d1631
L
7116 { Bad_Opcode },
7117 { Bad_Opcode },
7118 { Bad_Opcode },
7119 { Bad_Opcode },
7120 { Bad_Opcode },
7121 { Bad_Opcode },
7122 { Bad_Opcode },
7123 { Bad_Opcode },
5dd85c99 7124 /* 80 */
592a252b
L
7125 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) },
7126 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) },
5dd85c99
SP
7127 { "vfrczss", { XM, EXd } },
7128 { "vfrczsd", { XM, EXq } },
592d1631
L
7129 { Bad_Opcode },
7130 { Bad_Opcode },
7131 { Bad_Opcode },
7132 { Bad_Opcode },
5dd85c99 7133 /* 88 */
592d1631
L
7134 { Bad_Opcode },
7135 { Bad_Opcode },
7136 { Bad_Opcode },
7137 { Bad_Opcode },
7138 { Bad_Opcode },
7139 { Bad_Opcode },
7140 { Bad_Opcode },
7141 { Bad_Opcode },
5dd85c99
SP
7142 /* 90 */
7143 { "vprotb", { XM, Vex_2src_1, Vex_2src_2 } },
7144 { "vprotw", { XM, Vex_2src_1, Vex_2src_2 } },
7145 { "vprotd", { XM, Vex_2src_1, Vex_2src_2 } },
7146 { "vprotq", { XM, Vex_2src_1, Vex_2src_2 } },
7147 { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 } },
7148 { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 } },
7149 { "vpshld", { XM, Vex_2src_1, Vex_2src_2 } },
7150 { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 } },
7151 /* 98 */
7152 { "vpshab", { XM, Vex_2src_1, Vex_2src_2 } },
7153 { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 } },
7154 { "vpshad", { XM, Vex_2src_1, Vex_2src_2 } },
7155 { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 } },
592d1631
L
7156 { Bad_Opcode },
7157 { Bad_Opcode },
7158 { Bad_Opcode },
7159 { Bad_Opcode },
5dd85c99 7160 /* a0 */
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 },
5dd85c99 7169 /* a8 */
592d1631
L
7170 { Bad_Opcode },
7171 { Bad_Opcode },
7172 { Bad_Opcode },
7173 { Bad_Opcode },
7174 { Bad_Opcode },
7175 { Bad_Opcode },
7176 { Bad_Opcode },
7177 { Bad_Opcode },
5dd85c99 7178 /* b0 */
592d1631
L
7179 { Bad_Opcode },
7180 { Bad_Opcode },
7181 { Bad_Opcode },
7182 { Bad_Opcode },
7183 { Bad_Opcode },
7184 { Bad_Opcode },
7185 { Bad_Opcode },
7186 { Bad_Opcode },
5dd85c99 7187 /* b8 */
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 },
5dd85c99 7196 /* c0 */
592d1631 7197 { Bad_Opcode },
5dd85c99
SP
7198 { "vphaddbw", { XM, EXxmm } },
7199 { "vphaddbd", { XM, EXxmm } },
7200 { "vphaddbq", { XM, EXxmm } },
592d1631
L
7201 { Bad_Opcode },
7202 { Bad_Opcode },
5dd85c99
SP
7203 { "vphaddwd", { XM, EXxmm } },
7204 { "vphaddwq", { XM, EXxmm } },
7205 /* c8 */
592d1631
L
7206 { Bad_Opcode },
7207 { Bad_Opcode },
7208 { Bad_Opcode },
5dd85c99 7209 { "vphadddq", { XM, EXxmm } },
592d1631
L
7210 { Bad_Opcode },
7211 { Bad_Opcode },
7212 { Bad_Opcode },
7213 { Bad_Opcode },
5dd85c99 7214 /* d0 */
592d1631 7215 { Bad_Opcode },
5dd85c99
SP
7216 { "vphaddubw", { XM, EXxmm } },
7217 { "vphaddubd", { XM, EXxmm } },
7218 { "vphaddubq", { XM, EXxmm } },
592d1631
L
7219 { Bad_Opcode },
7220 { Bad_Opcode },
5dd85c99
SP
7221 { "vphadduwd", { XM, EXxmm } },
7222 { "vphadduwq", { XM, EXxmm } },
7223 /* d8 */
592d1631
L
7224 { Bad_Opcode },
7225 { Bad_Opcode },
7226 { Bad_Opcode },
5dd85c99 7227 { "vphaddudq", { XM, EXxmm } },
592d1631
L
7228 { Bad_Opcode },
7229 { Bad_Opcode },
7230 { Bad_Opcode },
7231 { Bad_Opcode },
5dd85c99 7232 /* e0 */
592d1631 7233 { Bad_Opcode },
5dd85c99
SP
7234 { "vphsubbw", { XM, EXxmm } },
7235 { "vphsubwd", { XM, EXxmm } },
7236 { "vphsubdq", { XM, EXxmm } },
592d1631
L
7237 { Bad_Opcode },
7238 { Bad_Opcode },
7239 { Bad_Opcode },
7240 { Bad_Opcode },
4e7d34a6 7241 /* e8 */
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 },
4e7d34a6 7250 /* f0 */
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 },
4e7d34a6 7259 /* f8 */
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 },
4e7d34a6 7268 },
f88c9eb0 7269 /* XOP_0A */
4e7d34a6
L
7270 {
7271 /* 00 */
592d1631
L
7272 { Bad_Opcode },
7273 { Bad_Opcode },
7274 { Bad_Opcode },
7275 { Bad_Opcode },
7276 { Bad_Opcode },
7277 { Bad_Opcode },
7278 { Bad_Opcode },
7279 { Bad_Opcode },
4e7d34a6 7280 /* 08 */
592d1631
L
7281 { Bad_Opcode },
7282 { Bad_Opcode },
7283 { Bad_Opcode },
7284 { Bad_Opcode },
7285 { Bad_Opcode },
7286 { Bad_Opcode },
7287 { Bad_Opcode },
7288 { Bad_Opcode },
4e7d34a6 7289 /* 10 */
2a2a0f38 7290 { "bextr", { Gv, Ev, Iq } },
592d1631 7291 { Bad_Opcode },
f88c9eb0 7292 { REG_TABLE (REG_XOP_LWP) },
592d1631
L
7293 { Bad_Opcode },
7294 { Bad_Opcode },
7295 { Bad_Opcode },
7296 { Bad_Opcode },
7297 { Bad_Opcode },
4e7d34a6 7298 /* 18 */
592d1631
L
7299 { Bad_Opcode },
7300 { Bad_Opcode },
7301 { Bad_Opcode },
7302 { Bad_Opcode },
7303 { Bad_Opcode },
7304 { Bad_Opcode },
7305 { Bad_Opcode },
7306 { Bad_Opcode },
4e7d34a6 7307 /* 20 */
592d1631
L
7308 { Bad_Opcode },
7309 { Bad_Opcode },
7310 { Bad_Opcode },
7311 { Bad_Opcode },
7312 { Bad_Opcode },
7313 { Bad_Opcode },
7314 { Bad_Opcode },
7315 { Bad_Opcode },
4e7d34a6 7316 /* 28 */
592d1631
L
7317 { Bad_Opcode },
7318 { Bad_Opcode },
7319 { Bad_Opcode },
7320 { Bad_Opcode },
7321 { Bad_Opcode },
7322 { Bad_Opcode },
7323 { Bad_Opcode },
7324 { Bad_Opcode },
4e7d34a6 7325 /* 30 */
592d1631
L
7326 { Bad_Opcode },
7327 { Bad_Opcode },
7328 { Bad_Opcode },
7329 { Bad_Opcode },
7330 { Bad_Opcode },
7331 { Bad_Opcode },
7332 { Bad_Opcode },
7333 { Bad_Opcode },
c0f3af97 7334 /* 38 */
592d1631
L
7335 { Bad_Opcode },
7336 { Bad_Opcode },
7337 { Bad_Opcode },
7338 { Bad_Opcode },
7339 { Bad_Opcode },
7340 { Bad_Opcode },
7341 { Bad_Opcode },
7342 { Bad_Opcode },
c0f3af97 7343 /* 40 */
592d1631
L
7344 { Bad_Opcode },
7345 { Bad_Opcode },
7346 { Bad_Opcode },
7347 { Bad_Opcode },
7348 { Bad_Opcode },
7349 { Bad_Opcode },
7350 { Bad_Opcode },
7351 { Bad_Opcode },
c1e679ec 7352 /* 48 */
592d1631
L
7353 { Bad_Opcode },
7354 { Bad_Opcode },
7355 { Bad_Opcode },
7356 { Bad_Opcode },
7357 { Bad_Opcode },
7358 { Bad_Opcode },
7359 { Bad_Opcode },
7360 { Bad_Opcode },
c1e679ec 7361 /* 50 */
592d1631
L
7362 { Bad_Opcode },
7363 { Bad_Opcode },
7364 { Bad_Opcode },
7365 { Bad_Opcode },
7366 { Bad_Opcode },
7367 { Bad_Opcode },
7368 { Bad_Opcode },
7369 { Bad_Opcode },
4e7d34a6 7370 /* 58 */
592d1631
L
7371 { Bad_Opcode },
7372 { Bad_Opcode },
7373 { Bad_Opcode },
7374 { Bad_Opcode },
7375 { Bad_Opcode },
7376 { Bad_Opcode },
7377 { Bad_Opcode },
7378 { Bad_Opcode },
4e7d34a6 7379 /* 60 */
592d1631
L
7380 { Bad_Opcode },
7381 { Bad_Opcode },
7382 { Bad_Opcode },
7383 { Bad_Opcode },
7384 { Bad_Opcode },
7385 { Bad_Opcode },
7386 { Bad_Opcode },
7387 { Bad_Opcode },
4e7d34a6 7388 /* 68 */
592d1631
L
7389 { Bad_Opcode },
7390 { Bad_Opcode },
7391 { Bad_Opcode },
7392 { Bad_Opcode },
7393 { Bad_Opcode },
7394 { Bad_Opcode },
7395 { Bad_Opcode },
7396 { Bad_Opcode },
4e7d34a6 7397 /* 70 */
592d1631
L
7398 { Bad_Opcode },
7399 { Bad_Opcode },
7400 { Bad_Opcode },
7401 { Bad_Opcode },
7402 { Bad_Opcode },
7403 { Bad_Opcode },
7404 { Bad_Opcode },
7405 { Bad_Opcode },
4e7d34a6 7406 /* 78 */
592d1631
L
7407 { Bad_Opcode },
7408 { Bad_Opcode },
7409 { Bad_Opcode },
7410 { Bad_Opcode },
7411 { Bad_Opcode },
7412 { Bad_Opcode },
7413 { Bad_Opcode },
7414 { Bad_Opcode },
4e7d34a6 7415 /* 80 */
592d1631
L
7416 { Bad_Opcode },
7417 { Bad_Opcode },
7418 { Bad_Opcode },
7419 { Bad_Opcode },
7420 { Bad_Opcode },
7421 { Bad_Opcode },
7422 { Bad_Opcode },
7423 { Bad_Opcode },
4e7d34a6 7424 /* 88 */
592d1631
L
7425 { Bad_Opcode },
7426 { Bad_Opcode },
7427 { Bad_Opcode },
7428 { Bad_Opcode },
7429 { Bad_Opcode },
7430 { Bad_Opcode },
7431 { Bad_Opcode },
7432 { Bad_Opcode },
4e7d34a6 7433 /* 90 */
592d1631
L
7434 { Bad_Opcode },
7435 { Bad_Opcode },
7436 { Bad_Opcode },
7437 { Bad_Opcode },
7438 { Bad_Opcode },
7439 { Bad_Opcode },
7440 { Bad_Opcode },
7441 { Bad_Opcode },
4e7d34a6 7442 /* 98 */
592d1631
L
7443 { Bad_Opcode },
7444 { Bad_Opcode },
7445 { Bad_Opcode },
7446 { Bad_Opcode },
7447 { Bad_Opcode },
7448 { Bad_Opcode },
7449 { Bad_Opcode },
7450 { Bad_Opcode },
4e7d34a6 7451 /* a0 */
592d1631
L
7452 { Bad_Opcode },
7453 { Bad_Opcode },
7454 { Bad_Opcode },
7455 { Bad_Opcode },
7456 { Bad_Opcode },
7457 { Bad_Opcode },
7458 { Bad_Opcode },
7459 { Bad_Opcode },
4e7d34a6 7460 /* a8 */
592d1631
L
7461 { Bad_Opcode },
7462 { Bad_Opcode },
7463 { Bad_Opcode },
7464 { Bad_Opcode },
7465 { Bad_Opcode },
7466 { Bad_Opcode },
7467 { Bad_Opcode },
7468 { Bad_Opcode },
d5d7db8e 7469 /* b0 */
592d1631
L
7470 { Bad_Opcode },
7471 { Bad_Opcode },
7472 { Bad_Opcode },
7473 { Bad_Opcode },
7474 { Bad_Opcode },
7475 { Bad_Opcode },
7476 { Bad_Opcode },
7477 { Bad_Opcode },
85f10a01 7478 /* b8 */
592d1631
L
7479 { Bad_Opcode },
7480 { Bad_Opcode },
7481 { Bad_Opcode },
7482 { Bad_Opcode },
7483 { Bad_Opcode },
7484 { Bad_Opcode },
7485 { Bad_Opcode },
7486 { Bad_Opcode },
85f10a01 7487 /* c0 */
592d1631
L
7488 { Bad_Opcode },
7489 { Bad_Opcode },
7490 { Bad_Opcode },
7491 { Bad_Opcode },
7492 { Bad_Opcode },
7493 { Bad_Opcode },
7494 { Bad_Opcode },
7495 { Bad_Opcode },
85f10a01 7496 /* c8 */
592d1631
L
7497 { Bad_Opcode },
7498 { Bad_Opcode },
7499 { Bad_Opcode },
7500 { Bad_Opcode },
7501 { Bad_Opcode },
7502 { Bad_Opcode },
7503 { Bad_Opcode },
7504 { Bad_Opcode },
85f10a01 7505 /* d0 */
592d1631
L
7506 { Bad_Opcode },
7507 { Bad_Opcode },
7508 { Bad_Opcode },
7509 { Bad_Opcode },
7510 { Bad_Opcode },
7511 { Bad_Opcode },
7512 { Bad_Opcode },
7513 { Bad_Opcode },
85f10a01 7514 /* d8 */
592d1631
L
7515 { Bad_Opcode },
7516 { Bad_Opcode },
7517 { Bad_Opcode },
7518 { Bad_Opcode },
7519 { Bad_Opcode },
7520 { Bad_Opcode },
7521 { Bad_Opcode },
7522 { Bad_Opcode },
85f10a01 7523 /* e0 */
592d1631
L
7524 { Bad_Opcode },
7525 { Bad_Opcode },
7526 { Bad_Opcode },
7527 { Bad_Opcode },
7528 { Bad_Opcode },
7529 { Bad_Opcode },
7530 { Bad_Opcode },
7531 { Bad_Opcode },
85f10a01 7532 /* e8 */
592d1631
L
7533 { Bad_Opcode },
7534 { Bad_Opcode },
7535 { Bad_Opcode },
7536 { Bad_Opcode },
7537 { Bad_Opcode },
7538 { Bad_Opcode },
7539 { Bad_Opcode },
7540 { Bad_Opcode },
85f10a01 7541 /* f0 */
592d1631
L
7542 { Bad_Opcode },
7543 { Bad_Opcode },
7544 { Bad_Opcode },
7545 { Bad_Opcode },
7546 { Bad_Opcode },
7547 { Bad_Opcode },
7548 { Bad_Opcode },
7549 { Bad_Opcode },
85f10a01 7550 /* f8 */
592d1631
L
7551 { Bad_Opcode },
7552 { Bad_Opcode },
7553 { Bad_Opcode },
7554 { Bad_Opcode },
7555 { Bad_Opcode },
7556 { Bad_Opcode },
7557 { Bad_Opcode },
7558 { Bad_Opcode },
85f10a01 7559 },
c0f3af97
L
7560};
7561
7562static const struct dis386 vex_table[][256] = {
7563 /* VEX_0F */
85f10a01
MM
7564 {
7565 /* 00 */
592d1631
L
7566 { Bad_Opcode },
7567 { Bad_Opcode },
7568 { Bad_Opcode },
7569 { Bad_Opcode },
7570 { Bad_Opcode },
7571 { Bad_Opcode },
7572 { Bad_Opcode },
7573 { Bad_Opcode },
85f10a01 7574 /* 08 */
592d1631
L
7575 { Bad_Opcode },
7576 { Bad_Opcode },
7577 { Bad_Opcode },
7578 { Bad_Opcode },
7579 { Bad_Opcode },
7580 { Bad_Opcode },
7581 { Bad_Opcode },
7582 { Bad_Opcode },
c0f3af97 7583 /* 10 */
592a252b
L
7584 { PREFIX_TABLE (PREFIX_VEX_0F10) },
7585 { PREFIX_TABLE (PREFIX_VEX_0F11) },
7586 { PREFIX_TABLE (PREFIX_VEX_0F12) },
7587 { MOD_TABLE (MOD_VEX_0F13) },
7588 { VEX_W_TABLE (VEX_W_0F14) },
7589 { VEX_W_TABLE (VEX_W_0F15) },
7590 { PREFIX_TABLE (PREFIX_VEX_0F16) },
7591 { MOD_TABLE (MOD_VEX_0F17) },
c0f3af97 7592 /* 18 */
592d1631
L
7593 { Bad_Opcode },
7594 { Bad_Opcode },
7595 { Bad_Opcode },
7596 { Bad_Opcode },
7597 { Bad_Opcode },
7598 { Bad_Opcode },
7599 { Bad_Opcode },
7600 { Bad_Opcode },
c0f3af97 7601 /* 20 */
592d1631
L
7602 { Bad_Opcode },
7603 { Bad_Opcode },
7604 { Bad_Opcode },
7605 { Bad_Opcode },
7606 { Bad_Opcode },
7607 { Bad_Opcode },
7608 { Bad_Opcode },
7609 { Bad_Opcode },
c0f3af97 7610 /* 28 */
592a252b
L
7611 { VEX_W_TABLE (VEX_W_0F28) },
7612 { VEX_W_TABLE (VEX_W_0F29) },
7613 { PREFIX_TABLE (PREFIX_VEX_0F2A) },
7614 { MOD_TABLE (MOD_VEX_0F2B) },
7615 { PREFIX_TABLE (PREFIX_VEX_0F2C) },
7616 { PREFIX_TABLE (PREFIX_VEX_0F2D) },
7617 { PREFIX_TABLE (PREFIX_VEX_0F2E) },
7618 { PREFIX_TABLE (PREFIX_VEX_0F2F) },
85f10a01 7619 /* 30 */
592d1631
L
7620 { Bad_Opcode },
7621 { Bad_Opcode },
7622 { Bad_Opcode },
7623 { Bad_Opcode },
7624 { Bad_Opcode },
7625 { Bad_Opcode },
7626 { Bad_Opcode },
7627 { Bad_Opcode },
4e7d34a6 7628 /* 38 */
592d1631
L
7629 { Bad_Opcode },
7630 { Bad_Opcode },
7631 { Bad_Opcode },
7632 { Bad_Opcode },
7633 { Bad_Opcode },
7634 { Bad_Opcode },
7635 { Bad_Opcode },
7636 { Bad_Opcode },
d5d7db8e 7637 /* 40 */
592d1631
L
7638 { Bad_Opcode },
7639 { Bad_Opcode },
7640 { Bad_Opcode },
7641 { Bad_Opcode },
7642 { Bad_Opcode },
7643 { Bad_Opcode },
7644 { Bad_Opcode },
7645 { Bad_Opcode },
85f10a01 7646 /* 48 */
592d1631
L
7647 { Bad_Opcode },
7648 { Bad_Opcode },
7649 { Bad_Opcode },
7650 { Bad_Opcode },
7651 { Bad_Opcode },
7652 { Bad_Opcode },
7653 { Bad_Opcode },
7654 { Bad_Opcode },
d5d7db8e 7655 /* 50 */
592a252b
L
7656 { MOD_TABLE (MOD_VEX_0F50) },
7657 { PREFIX_TABLE (PREFIX_VEX_0F51) },
7658 { PREFIX_TABLE (PREFIX_VEX_0F52) },
7659 { PREFIX_TABLE (PREFIX_VEX_0F53) },
c0f3af97
L
7660 { "vandpX", { XM, Vex, EXx } },
7661 { "vandnpX", { XM, Vex, EXx } },
7662 { "vorpX", { XM, Vex, EXx } },
7663 { "vxorpX", { XM, Vex, EXx } },
7664 /* 58 */
592a252b
L
7665 { PREFIX_TABLE (PREFIX_VEX_0F58) },
7666 { PREFIX_TABLE (PREFIX_VEX_0F59) },
7667 { PREFIX_TABLE (PREFIX_VEX_0F5A) },
7668 { PREFIX_TABLE (PREFIX_VEX_0F5B) },
7669 { PREFIX_TABLE (PREFIX_VEX_0F5C) },
7670 { PREFIX_TABLE (PREFIX_VEX_0F5D) },
7671 { PREFIX_TABLE (PREFIX_VEX_0F5E) },
7672 { PREFIX_TABLE (PREFIX_VEX_0F5F) },
c0f3af97 7673 /* 60 */
592a252b
L
7674 { PREFIX_TABLE (PREFIX_VEX_0F60) },
7675 { PREFIX_TABLE (PREFIX_VEX_0F61) },
7676 { PREFIX_TABLE (PREFIX_VEX_0F62) },
7677 { PREFIX_TABLE (PREFIX_VEX_0F63) },
7678 { PREFIX_TABLE (PREFIX_VEX_0F64) },
7679 { PREFIX_TABLE (PREFIX_VEX_0F65) },
7680 { PREFIX_TABLE (PREFIX_VEX_0F66) },
7681 { PREFIX_TABLE (PREFIX_VEX_0F67) },
c0f3af97 7682 /* 68 */
592a252b
L
7683 { PREFIX_TABLE (PREFIX_VEX_0F68) },
7684 { PREFIX_TABLE (PREFIX_VEX_0F69) },
7685 { PREFIX_TABLE (PREFIX_VEX_0F6A) },
7686 { PREFIX_TABLE (PREFIX_VEX_0F6B) },
7687 { PREFIX_TABLE (PREFIX_VEX_0F6C) },
7688 { PREFIX_TABLE (PREFIX_VEX_0F6D) },
7689 { PREFIX_TABLE (PREFIX_VEX_0F6E) },
7690 { PREFIX_TABLE (PREFIX_VEX_0F6F) },
c0f3af97 7691 /* 70 */
592a252b
L
7692 { PREFIX_TABLE (PREFIX_VEX_0F70) },
7693 { REG_TABLE (REG_VEX_0F71) },
7694 { REG_TABLE (REG_VEX_0F72) },
7695 { REG_TABLE (REG_VEX_0F73) },
7696 { PREFIX_TABLE (PREFIX_VEX_0F74) },
7697 { PREFIX_TABLE (PREFIX_VEX_0F75) },
7698 { PREFIX_TABLE (PREFIX_VEX_0F76) },
7699 { PREFIX_TABLE (PREFIX_VEX_0F77) },
c0f3af97 7700 /* 78 */
592d1631
L
7701 { Bad_Opcode },
7702 { Bad_Opcode },
7703 { Bad_Opcode },
7704 { Bad_Opcode },
592a252b
L
7705 { PREFIX_TABLE (PREFIX_VEX_0F7C) },
7706 { PREFIX_TABLE (PREFIX_VEX_0F7D) },
7707 { PREFIX_TABLE (PREFIX_VEX_0F7E) },
7708 { PREFIX_TABLE (PREFIX_VEX_0F7F) },
c0f3af97 7709 /* 80 */
592d1631
L
7710 { Bad_Opcode },
7711 { Bad_Opcode },
7712 { Bad_Opcode },
7713 { Bad_Opcode },
7714 { Bad_Opcode },
7715 { Bad_Opcode },
7716 { Bad_Opcode },
7717 { Bad_Opcode },
c0f3af97 7718 /* 88 */
592d1631
L
7719 { Bad_Opcode },
7720 { Bad_Opcode },
7721 { Bad_Opcode },
7722 { Bad_Opcode },
7723 { Bad_Opcode },
7724 { Bad_Opcode },
7725 { Bad_Opcode },
7726 { Bad_Opcode },
c0f3af97 7727 /* 90 */
592d1631
L
7728 { Bad_Opcode },
7729 { Bad_Opcode },
7730 { Bad_Opcode },
7731 { Bad_Opcode },
7732 { Bad_Opcode },
7733 { Bad_Opcode },
7734 { Bad_Opcode },
7735 { Bad_Opcode },
c0f3af97 7736 /* 98 */
592d1631
L
7737 { Bad_Opcode },
7738 { Bad_Opcode },
7739 { Bad_Opcode },
7740 { Bad_Opcode },
7741 { Bad_Opcode },
7742 { Bad_Opcode },
7743 { Bad_Opcode },
7744 { Bad_Opcode },
c0f3af97 7745 /* a0 */
592d1631
L
7746 { Bad_Opcode },
7747 { Bad_Opcode },
7748 { Bad_Opcode },
7749 { Bad_Opcode },
7750 { Bad_Opcode },
7751 { Bad_Opcode },
7752 { Bad_Opcode },
7753 { Bad_Opcode },
c0f3af97 7754 /* a8 */
592d1631
L
7755 { Bad_Opcode },
7756 { Bad_Opcode },
7757 { Bad_Opcode },
7758 { Bad_Opcode },
7759 { Bad_Opcode },
7760 { Bad_Opcode },
592a252b 7761 { REG_TABLE (REG_VEX_0FAE) },
592d1631 7762 { Bad_Opcode },
c0f3af97 7763 /* b0 */
592d1631
L
7764 { Bad_Opcode },
7765 { Bad_Opcode },
7766 { Bad_Opcode },
7767 { Bad_Opcode },
7768 { Bad_Opcode },
7769 { Bad_Opcode },
7770 { Bad_Opcode },
7771 { Bad_Opcode },
c0f3af97 7772 /* b8 */
592d1631
L
7773 { Bad_Opcode },
7774 { Bad_Opcode },
7775 { Bad_Opcode },
7776 { Bad_Opcode },
7777 { Bad_Opcode },
7778 { Bad_Opcode },
7779 { Bad_Opcode },
7780 { Bad_Opcode },
c0f3af97 7781 /* c0 */
592d1631
L
7782 { Bad_Opcode },
7783 { Bad_Opcode },
592a252b 7784 { PREFIX_TABLE (PREFIX_VEX_0FC2) },
592d1631 7785 { Bad_Opcode },
592a252b
L
7786 { PREFIX_TABLE (PREFIX_VEX_0FC4) },
7787 { PREFIX_TABLE (PREFIX_VEX_0FC5) },
c0f3af97 7788 { "vshufpX", { XM, Vex, EXx, Ib } },
592d1631 7789 { Bad_Opcode },
c0f3af97 7790 /* c8 */
592d1631
L
7791 { Bad_Opcode },
7792 { Bad_Opcode },
7793 { Bad_Opcode },
7794 { Bad_Opcode },
7795 { Bad_Opcode },
7796 { Bad_Opcode },
7797 { Bad_Opcode },
7798 { Bad_Opcode },
c0f3af97 7799 /* d0 */
592a252b
L
7800 { PREFIX_TABLE (PREFIX_VEX_0FD0) },
7801 { PREFIX_TABLE (PREFIX_VEX_0FD1) },
7802 { PREFIX_TABLE (PREFIX_VEX_0FD2) },
7803 { PREFIX_TABLE (PREFIX_VEX_0FD3) },
7804 { PREFIX_TABLE (PREFIX_VEX_0FD4) },
7805 { PREFIX_TABLE (PREFIX_VEX_0FD5) },
7806 { PREFIX_TABLE (PREFIX_VEX_0FD6) },
7807 { PREFIX_TABLE (PREFIX_VEX_0FD7) },
c0f3af97 7808 /* d8 */
592a252b
L
7809 { PREFIX_TABLE (PREFIX_VEX_0FD8) },
7810 { PREFIX_TABLE (PREFIX_VEX_0FD9) },
7811 { PREFIX_TABLE (PREFIX_VEX_0FDA) },
7812 { PREFIX_TABLE (PREFIX_VEX_0FDB) },
7813 { PREFIX_TABLE (PREFIX_VEX_0FDC) },
7814 { PREFIX_TABLE (PREFIX_VEX_0FDD) },
7815 { PREFIX_TABLE (PREFIX_VEX_0FDE) },
7816 { PREFIX_TABLE (PREFIX_VEX_0FDF) },
c0f3af97 7817 /* e0 */
592a252b
L
7818 { PREFIX_TABLE (PREFIX_VEX_0FE0) },
7819 { PREFIX_TABLE (PREFIX_VEX_0FE1) },
7820 { PREFIX_TABLE (PREFIX_VEX_0FE2) },
7821 { PREFIX_TABLE (PREFIX_VEX_0FE3) },
7822 { PREFIX_TABLE (PREFIX_VEX_0FE4) },
7823 { PREFIX_TABLE (PREFIX_VEX_0FE5) },
7824 { PREFIX_TABLE (PREFIX_VEX_0FE6) },
7825 { PREFIX_TABLE (PREFIX_VEX_0FE7) },
c0f3af97 7826 /* e8 */
592a252b
L
7827 { PREFIX_TABLE (PREFIX_VEX_0FE8) },
7828 { PREFIX_TABLE (PREFIX_VEX_0FE9) },
7829 { PREFIX_TABLE (PREFIX_VEX_0FEA) },
7830 { PREFIX_TABLE (PREFIX_VEX_0FEB) },
7831 { PREFIX_TABLE (PREFIX_VEX_0FEC) },
7832 { PREFIX_TABLE (PREFIX_VEX_0FED) },
7833 { PREFIX_TABLE (PREFIX_VEX_0FEE) },
7834 { PREFIX_TABLE (PREFIX_VEX_0FEF) },
c0f3af97 7835 /* f0 */
592a252b
L
7836 { PREFIX_TABLE (PREFIX_VEX_0FF0) },
7837 { PREFIX_TABLE (PREFIX_VEX_0FF1) },
7838 { PREFIX_TABLE (PREFIX_VEX_0FF2) },
7839 { PREFIX_TABLE (PREFIX_VEX_0FF3) },
7840 { PREFIX_TABLE (PREFIX_VEX_0FF4) },
7841 { PREFIX_TABLE (PREFIX_VEX_0FF5) },
7842 { PREFIX_TABLE (PREFIX_VEX_0FF6) },
7843 { PREFIX_TABLE (PREFIX_VEX_0FF7) },
c0f3af97 7844 /* f8 */
592a252b
L
7845 { PREFIX_TABLE (PREFIX_VEX_0FF8) },
7846 { PREFIX_TABLE (PREFIX_VEX_0FF9) },
7847 { PREFIX_TABLE (PREFIX_VEX_0FFA) },
7848 { PREFIX_TABLE (PREFIX_VEX_0FFB) },
7849 { PREFIX_TABLE (PREFIX_VEX_0FFC) },
7850 { PREFIX_TABLE (PREFIX_VEX_0FFD) },
7851 { PREFIX_TABLE (PREFIX_VEX_0FFE) },
592d1631 7852 { Bad_Opcode },
c0f3af97
L
7853 },
7854 /* VEX_0F38 */
7855 {
7856 /* 00 */
592a252b
L
7857 { PREFIX_TABLE (PREFIX_VEX_0F3800) },
7858 { PREFIX_TABLE (PREFIX_VEX_0F3801) },
7859 { PREFIX_TABLE (PREFIX_VEX_0F3802) },
7860 { PREFIX_TABLE (PREFIX_VEX_0F3803) },
7861 { PREFIX_TABLE (PREFIX_VEX_0F3804) },
7862 { PREFIX_TABLE (PREFIX_VEX_0F3805) },
7863 { PREFIX_TABLE (PREFIX_VEX_0F3806) },
7864 { PREFIX_TABLE (PREFIX_VEX_0F3807) },
c0f3af97 7865 /* 08 */
592a252b
L
7866 { PREFIX_TABLE (PREFIX_VEX_0F3808) },
7867 { PREFIX_TABLE (PREFIX_VEX_0F3809) },
7868 { PREFIX_TABLE (PREFIX_VEX_0F380A) },
7869 { PREFIX_TABLE (PREFIX_VEX_0F380B) },
7870 { PREFIX_TABLE (PREFIX_VEX_0F380C) },
7871 { PREFIX_TABLE (PREFIX_VEX_0F380D) },
7872 { PREFIX_TABLE (PREFIX_VEX_0F380E) },
7873 { PREFIX_TABLE (PREFIX_VEX_0F380F) },
c0f3af97 7874 /* 10 */
592d1631
L
7875 { Bad_Opcode },
7876 { Bad_Opcode },
7877 { Bad_Opcode },
592a252b 7878 { PREFIX_TABLE (PREFIX_VEX_0F3813) },
592d1631
L
7879 { Bad_Opcode },
7880 { Bad_Opcode },
6c30d220 7881 { PREFIX_TABLE (PREFIX_VEX_0F3816) },
592a252b 7882 { PREFIX_TABLE (PREFIX_VEX_0F3817) },
c0f3af97 7883 /* 18 */
592a252b
L
7884 { PREFIX_TABLE (PREFIX_VEX_0F3818) },
7885 { PREFIX_TABLE (PREFIX_VEX_0F3819) },
7886 { PREFIX_TABLE (PREFIX_VEX_0F381A) },
592d1631 7887 { Bad_Opcode },
592a252b
L
7888 { PREFIX_TABLE (PREFIX_VEX_0F381C) },
7889 { PREFIX_TABLE (PREFIX_VEX_0F381D) },
7890 { PREFIX_TABLE (PREFIX_VEX_0F381E) },
592d1631 7891 { Bad_Opcode },
c0f3af97 7892 /* 20 */
592a252b
L
7893 { PREFIX_TABLE (PREFIX_VEX_0F3820) },
7894 { PREFIX_TABLE (PREFIX_VEX_0F3821) },
7895 { PREFIX_TABLE (PREFIX_VEX_0F3822) },
7896 { PREFIX_TABLE (PREFIX_VEX_0F3823) },
7897 { PREFIX_TABLE (PREFIX_VEX_0F3824) },
7898 { PREFIX_TABLE (PREFIX_VEX_0F3825) },
592d1631
L
7899 { Bad_Opcode },
7900 { Bad_Opcode },
c0f3af97 7901 /* 28 */
592a252b
L
7902 { PREFIX_TABLE (PREFIX_VEX_0F3828) },
7903 { PREFIX_TABLE (PREFIX_VEX_0F3829) },
7904 { PREFIX_TABLE (PREFIX_VEX_0F382A) },
7905 { PREFIX_TABLE (PREFIX_VEX_0F382B) },
7906 { PREFIX_TABLE (PREFIX_VEX_0F382C) },
7907 { PREFIX_TABLE (PREFIX_VEX_0F382D) },
7908 { PREFIX_TABLE (PREFIX_VEX_0F382E) },
7909 { PREFIX_TABLE (PREFIX_VEX_0F382F) },
c0f3af97 7910 /* 30 */
592a252b
L
7911 { PREFIX_TABLE (PREFIX_VEX_0F3830) },
7912 { PREFIX_TABLE (PREFIX_VEX_0F3831) },
7913 { PREFIX_TABLE (PREFIX_VEX_0F3832) },
7914 { PREFIX_TABLE (PREFIX_VEX_0F3833) },
7915 { PREFIX_TABLE (PREFIX_VEX_0F3834) },
7916 { PREFIX_TABLE (PREFIX_VEX_0F3835) },
6c30d220 7917 { PREFIX_TABLE (PREFIX_VEX_0F3836) },
592a252b 7918 { PREFIX_TABLE (PREFIX_VEX_0F3837) },
c0f3af97 7919 /* 38 */
592a252b
L
7920 { PREFIX_TABLE (PREFIX_VEX_0F3838) },
7921 { PREFIX_TABLE (PREFIX_VEX_0F3839) },
7922 { PREFIX_TABLE (PREFIX_VEX_0F383A) },
7923 { PREFIX_TABLE (PREFIX_VEX_0F383B) },
7924 { PREFIX_TABLE (PREFIX_VEX_0F383C) },
7925 { PREFIX_TABLE (PREFIX_VEX_0F383D) },
7926 { PREFIX_TABLE (PREFIX_VEX_0F383E) },
7927 { PREFIX_TABLE (PREFIX_VEX_0F383F) },
c0f3af97 7928 /* 40 */
592a252b
L
7929 { PREFIX_TABLE (PREFIX_VEX_0F3840) },
7930 { PREFIX_TABLE (PREFIX_VEX_0F3841) },
592d1631
L
7931 { Bad_Opcode },
7932 { Bad_Opcode },
7933 { Bad_Opcode },
6c30d220
L
7934 { PREFIX_TABLE (PREFIX_VEX_0F3845) },
7935 { PREFIX_TABLE (PREFIX_VEX_0F3846) },
7936 { PREFIX_TABLE (PREFIX_VEX_0F3847) },
c0f3af97 7937 /* 48 */
592d1631
L
7938 { Bad_Opcode },
7939 { Bad_Opcode },
7940 { Bad_Opcode },
7941 { Bad_Opcode },
7942 { Bad_Opcode },
7943 { Bad_Opcode },
7944 { Bad_Opcode },
7945 { Bad_Opcode },
c0f3af97 7946 /* 50 */
592d1631
L
7947 { Bad_Opcode },
7948 { Bad_Opcode },
7949 { Bad_Opcode },
7950 { Bad_Opcode },
7951 { Bad_Opcode },
7952 { Bad_Opcode },
7953 { Bad_Opcode },
7954 { Bad_Opcode },
c0f3af97 7955 /* 58 */
6c30d220
L
7956 { PREFIX_TABLE (PREFIX_VEX_0F3858) },
7957 { PREFIX_TABLE (PREFIX_VEX_0F3859) },
7958 { PREFIX_TABLE (PREFIX_VEX_0F385A) },
592d1631
L
7959 { Bad_Opcode },
7960 { Bad_Opcode },
7961 { Bad_Opcode },
7962 { Bad_Opcode },
7963 { Bad_Opcode },
c0f3af97 7964 /* 60 */
592d1631
L
7965 { Bad_Opcode },
7966 { Bad_Opcode },
7967 { Bad_Opcode },
7968 { Bad_Opcode },
7969 { Bad_Opcode },
7970 { Bad_Opcode },
7971 { Bad_Opcode },
7972 { Bad_Opcode },
c0f3af97 7973 /* 68 */
592d1631
L
7974 { Bad_Opcode },
7975 { Bad_Opcode },
7976 { Bad_Opcode },
7977 { Bad_Opcode },
7978 { Bad_Opcode },
7979 { Bad_Opcode },
7980 { Bad_Opcode },
7981 { Bad_Opcode },
c0f3af97 7982 /* 70 */
592d1631
L
7983 { Bad_Opcode },
7984 { Bad_Opcode },
7985 { Bad_Opcode },
7986 { Bad_Opcode },
7987 { Bad_Opcode },
7988 { Bad_Opcode },
7989 { Bad_Opcode },
7990 { Bad_Opcode },
c0f3af97 7991 /* 78 */
6c30d220
L
7992 { PREFIX_TABLE (PREFIX_VEX_0F3878) },
7993 { PREFIX_TABLE (PREFIX_VEX_0F3879) },
592d1631
L
7994 { Bad_Opcode },
7995 { Bad_Opcode },
7996 { Bad_Opcode },
7997 { Bad_Opcode },
7998 { Bad_Opcode },
7999 { Bad_Opcode },
c0f3af97 8000 /* 80 */
592d1631
L
8001 { Bad_Opcode },
8002 { Bad_Opcode },
8003 { Bad_Opcode },
8004 { Bad_Opcode },
8005 { Bad_Opcode },
8006 { Bad_Opcode },
8007 { Bad_Opcode },
8008 { Bad_Opcode },
c0f3af97 8009 /* 88 */
592d1631
L
8010 { Bad_Opcode },
8011 { Bad_Opcode },
8012 { Bad_Opcode },
8013 { Bad_Opcode },
6c30d220 8014 { PREFIX_TABLE (PREFIX_VEX_0F388C) },
592d1631 8015 { Bad_Opcode },
6c30d220 8016 { PREFIX_TABLE (PREFIX_VEX_0F388E) },
592d1631 8017 { Bad_Opcode },
c0f3af97 8018 /* 90 */
6c30d220
L
8019 { PREFIX_TABLE (PREFIX_VEX_0F3890) },
8020 { PREFIX_TABLE (PREFIX_VEX_0F3891) },
8021 { PREFIX_TABLE (PREFIX_VEX_0F3892) },
8022 { PREFIX_TABLE (PREFIX_VEX_0F3893) },
592d1631
L
8023 { Bad_Opcode },
8024 { Bad_Opcode },
592a252b
L
8025 { PREFIX_TABLE (PREFIX_VEX_0F3896) },
8026 { PREFIX_TABLE (PREFIX_VEX_0F3897) },
c0f3af97 8027 /* 98 */
592a252b
L
8028 { PREFIX_TABLE (PREFIX_VEX_0F3898) },
8029 { PREFIX_TABLE (PREFIX_VEX_0F3899) },
8030 { PREFIX_TABLE (PREFIX_VEX_0F389A) },
8031 { PREFIX_TABLE (PREFIX_VEX_0F389B) },
8032 { PREFIX_TABLE (PREFIX_VEX_0F389C) },
8033 { PREFIX_TABLE (PREFIX_VEX_0F389D) },
8034 { PREFIX_TABLE (PREFIX_VEX_0F389E) },
8035 { PREFIX_TABLE (PREFIX_VEX_0F389F) },
c0f3af97 8036 /* a0 */
592d1631
L
8037 { Bad_Opcode },
8038 { Bad_Opcode },
8039 { Bad_Opcode },
8040 { Bad_Opcode },
8041 { Bad_Opcode },
8042 { Bad_Opcode },
592a252b
L
8043 { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
8044 { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
c0f3af97 8045 /* a8 */
592a252b
L
8046 { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
8047 { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
8048 { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
8049 { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
8050 { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
8051 { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
8052 { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
8053 { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
c0f3af97 8054 /* b0 */
592d1631
L
8055 { Bad_Opcode },
8056 { Bad_Opcode },
8057 { Bad_Opcode },
8058 { Bad_Opcode },
8059 { Bad_Opcode },
8060 { Bad_Opcode },
592a252b
L
8061 { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
8062 { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
c0f3af97 8063 /* b8 */
592a252b
L
8064 { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
8065 { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
8066 { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
8067 { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
8068 { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
8069 { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
8070 { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
8071 { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
c0f3af97 8072 /* c0 */
592d1631
L
8073 { Bad_Opcode },
8074 { Bad_Opcode },
8075 { Bad_Opcode },
8076 { Bad_Opcode },
8077 { Bad_Opcode },
8078 { Bad_Opcode },
8079 { Bad_Opcode },
8080 { Bad_Opcode },
c0f3af97 8081 /* c8 */
592d1631
L
8082 { Bad_Opcode },
8083 { Bad_Opcode },
8084 { Bad_Opcode },
8085 { Bad_Opcode },
8086 { Bad_Opcode },
8087 { Bad_Opcode },
8088 { Bad_Opcode },
8089 { Bad_Opcode },
c0f3af97 8090 /* d0 */
592d1631
L
8091 { Bad_Opcode },
8092 { Bad_Opcode },
8093 { Bad_Opcode },
8094 { Bad_Opcode },
8095 { Bad_Opcode },
8096 { Bad_Opcode },
8097 { Bad_Opcode },
8098 { Bad_Opcode },
c0f3af97 8099 /* d8 */
592d1631
L
8100 { Bad_Opcode },
8101 { Bad_Opcode },
8102 { Bad_Opcode },
592a252b
L
8103 { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
8104 { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
8105 { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
8106 { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
8107 { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
c0f3af97 8108 /* e0 */
592d1631
L
8109 { Bad_Opcode },
8110 { Bad_Opcode },
8111 { Bad_Opcode },
8112 { Bad_Opcode },
8113 { Bad_Opcode },
8114 { Bad_Opcode },
8115 { Bad_Opcode },
8116 { Bad_Opcode },
c0f3af97 8117 /* e8 */
592d1631
L
8118 { Bad_Opcode },
8119 { Bad_Opcode },
8120 { Bad_Opcode },
8121 { Bad_Opcode },
8122 { Bad_Opcode },
8123 { Bad_Opcode },
8124 { Bad_Opcode },
8125 { Bad_Opcode },
c0f3af97 8126 /* f0 */
592d1631
L
8127 { Bad_Opcode },
8128 { Bad_Opcode },
f12dc422
L
8129 { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
8130 { REG_TABLE (REG_VEX_0F38F3) },
592d1631 8131 { Bad_Opcode },
6c30d220
L
8132 { PREFIX_TABLE (PREFIX_VEX_0F38F5) },
8133 { PREFIX_TABLE (PREFIX_VEX_0F38F6) },
f12dc422 8134 { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
c0f3af97 8135 /* f8 */
592d1631
L
8136 { Bad_Opcode },
8137 { Bad_Opcode },
8138 { Bad_Opcode },
8139 { Bad_Opcode },
8140 { Bad_Opcode },
8141 { Bad_Opcode },
8142 { Bad_Opcode },
8143 { Bad_Opcode },
c0f3af97
L
8144 },
8145 /* VEX_0F3A */
8146 {
8147 /* 00 */
6c30d220
L
8148 { PREFIX_TABLE (PREFIX_VEX_0F3A00) },
8149 { PREFIX_TABLE (PREFIX_VEX_0F3A01) },
8150 { PREFIX_TABLE (PREFIX_VEX_0F3A02) },
592d1631 8151 { Bad_Opcode },
592a252b
L
8152 { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
8153 { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
8154 { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
592d1631 8155 { Bad_Opcode },
c0f3af97 8156 /* 08 */
592a252b
L
8157 { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
8158 { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
8159 { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
8160 { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
8161 { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
8162 { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
8163 { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
8164 { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
c0f3af97 8165 /* 10 */
592d1631
L
8166 { Bad_Opcode },
8167 { Bad_Opcode },
8168 { Bad_Opcode },
8169 { Bad_Opcode },
592a252b
L
8170 { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
8171 { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
8172 { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
8173 { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
c0f3af97 8174 /* 18 */
592a252b
L
8175 { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
8176 { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
592d1631
L
8177 { Bad_Opcode },
8178 { Bad_Opcode },
8179 { Bad_Opcode },
592a252b 8180 { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
592d1631
L
8181 { Bad_Opcode },
8182 { Bad_Opcode },
c0f3af97 8183 /* 20 */
592a252b
L
8184 { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
8185 { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
8186 { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
592d1631
L
8187 { Bad_Opcode },
8188 { Bad_Opcode },
8189 { Bad_Opcode },
8190 { Bad_Opcode },
8191 { Bad_Opcode },
c0f3af97 8192 /* 28 */
592d1631
L
8193 { Bad_Opcode },
8194 { Bad_Opcode },
8195 { Bad_Opcode },
8196 { Bad_Opcode },
8197 { Bad_Opcode },
8198 { Bad_Opcode },
8199 { Bad_Opcode },
8200 { Bad_Opcode },
c0f3af97 8201 /* 30 */
592d1631
L
8202 { Bad_Opcode },
8203 { Bad_Opcode },
8204 { Bad_Opcode },
8205 { Bad_Opcode },
8206 { Bad_Opcode },
8207 { Bad_Opcode },
8208 { Bad_Opcode },
8209 { Bad_Opcode },
c0f3af97 8210 /* 38 */
6c30d220
L
8211 { PREFIX_TABLE (PREFIX_VEX_0F3A38) },
8212 { PREFIX_TABLE (PREFIX_VEX_0F3A39) },
592d1631
L
8213 { Bad_Opcode },
8214 { Bad_Opcode },
8215 { Bad_Opcode },
8216 { Bad_Opcode },
8217 { Bad_Opcode },
8218 { Bad_Opcode },
c0f3af97 8219 /* 40 */
592a252b
L
8220 { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
8221 { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
8222 { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
592d1631 8223 { Bad_Opcode },
592a252b 8224 { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
592d1631 8225 { Bad_Opcode },
6c30d220 8226 { PREFIX_TABLE (PREFIX_VEX_0F3A46) },
592d1631 8227 { Bad_Opcode },
c0f3af97 8228 /* 48 */
592a252b
L
8229 { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
8230 { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
8231 { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
8232 { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
8233 { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
592d1631
L
8234 { Bad_Opcode },
8235 { Bad_Opcode },
8236 { Bad_Opcode },
c0f3af97 8237 /* 50 */
592d1631
L
8238 { Bad_Opcode },
8239 { Bad_Opcode },
8240 { Bad_Opcode },
8241 { Bad_Opcode },
8242 { Bad_Opcode },
8243 { Bad_Opcode },
8244 { Bad_Opcode },
8245 { Bad_Opcode },
c0f3af97 8246 /* 58 */
592d1631
L
8247 { Bad_Opcode },
8248 { Bad_Opcode },
8249 { Bad_Opcode },
8250 { Bad_Opcode },
592a252b
L
8251 { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
8252 { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
8253 { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
8254 { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
c0f3af97 8255 /* 60 */
592a252b
L
8256 { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
8257 { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
8258 { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
8259 { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
592d1631
L
8260 { Bad_Opcode },
8261 { Bad_Opcode },
8262 { Bad_Opcode },
8263 { Bad_Opcode },
c0f3af97 8264 /* 68 */
592a252b
L
8265 { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
8266 { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
8267 { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
8268 { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
8269 { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
8270 { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
8271 { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
8272 { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
c0f3af97 8273 /* 70 */
592d1631
L
8274 { Bad_Opcode },
8275 { Bad_Opcode },
8276 { Bad_Opcode },
8277 { Bad_Opcode },
8278 { Bad_Opcode },
8279 { Bad_Opcode },
8280 { Bad_Opcode },
8281 { Bad_Opcode },
c0f3af97 8282 /* 78 */
592a252b
L
8283 { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
8284 { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
8285 { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
8286 { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
8287 { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
8288 { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
8289 { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
8290 { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
c0f3af97 8291 /* 80 */
592d1631
L
8292 { Bad_Opcode },
8293 { Bad_Opcode },
8294 { Bad_Opcode },
8295 { Bad_Opcode },
8296 { Bad_Opcode },
8297 { Bad_Opcode },
8298 { Bad_Opcode },
8299 { Bad_Opcode },
c0f3af97 8300 /* 88 */
592d1631
L
8301 { Bad_Opcode },
8302 { Bad_Opcode },
8303 { Bad_Opcode },
8304 { Bad_Opcode },
8305 { Bad_Opcode },
8306 { Bad_Opcode },
8307 { Bad_Opcode },
8308 { Bad_Opcode },
c0f3af97 8309 /* 90 */
592d1631
L
8310 { Bad_Opcode },
8311 { Bad_Opcode },
8312 { Bad_Opcode },
8313 { Bad_Opcode },
8314 { Bad_Opcode },
8315 { Bad_Opcode },
8316 { Bad_Opcode },
8317 { Bad_Opcode },
c0f3af97 8318 /* 98 */
592d1631
L
8319 { Bad_Opcode },
8320 { Bad_Opcode },
8321 { Bad_Opcode },
8322 { Bad_Opcode },
8323 { Bad_Opcode },
8324 { Bad_Opcode },
8325 { Bad_Opcode },
8326 { Bad_Opcode },
c0f3af97 8327 /* a0 */
592d1631
L
8328 { Bad_Opcode },
8329 { Bad_Opcode },
8330 { Bad_Opcode },
8331 { Bad_Opcode },
8332 { Bad_Opcode },
8333 { Bad_Opcode },
8334 { Bad_Opcode },
8335 { Bad_Opcode },
c0f3af97 8336 /* a8 */
592d1631
L
8337 { Bad_Opcode },
8338 { Bad_Opcode },
8339 { Bad_Opcode },
8340 { Bad_Opcode },
8341 { Bad_Opcode },
8342 { Bad_Opcode },
8343 { Bad_Opcode },
8344 { Bad_Opcode },
c0f3af97 8345 /* b0 */
592d1631
L
8346 { Bad_Opcode },
8347 { Bad_Opcode },
8348 { Bad_Opcode },
8349 { Bad_Opcode },
8350 { Bad_Opcode },
8351 { Bad_Opcode },
8352 { Bad_Opcode },
8353 { Bad_Opcode },
c0f3af97 8354 /* b8 */
592d1631
L
8355 { Bad_Opcode },
8356 { Bad_Opcode },
8357 { Bad_Opcode },
8358 { Bad_Opcode },
8359 { Bad_Opcode },
8360 { Bad_Opcode },
8361 { Bad_Opcode },
8362 { Bad_Opcode },
c0f3af97 8363 /* c0 */
592d1631
L
8364 { Bad_Opcode },
8365 { Bad_Opcode },
8366 { Bad_Opcode },
8367 { Bad_Opcode },
8368 { Bad_Opcode },
8369 { Bad_Opcode },
8370 { Bad_Opcode },
8371 { Bad_Opcode },
c0f3af97 8372 /* c8 */
592d1631
L
8373 { Bad_Opcode },
8374 { Bad_Opcode },
8375 { Bad_Opcode },
8376 { Bad_Opcode },
8377 { Bad_Opcode },
8378 { Bad_Opcode },
8379 { Bad_Opcode },
8380 { Bad_Opcode },
c0f3af97 8381 /* d0 */
592d1631
L
8382 { Bad_Opcode },
8383 { Bad_Opcode },
8384 { Bad_Opcode },
8385 { Bad_Opcode },
8386 { Bad_Opcode },
8387 { Bad_Opcode },
8388 { Bad_Opcode },
8389 { Bad_Opcode },
c0f3af97 8390 /* d8 */
592d1631
L
8391 { Bad_Opcode },
8392 { Bad_Opcode },
8393 { Bad_Opcode },
8394 { Bad_Opcode },
8395 { Bad_Opcode },
8396 { Bad_Opcode },
8397 { Bad_Opcode },
592a252b 8398 { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
c0f3af97 8399 /* e0 */
592d1631
L
8400 { Bad_Opcode },
8401 { Bad_Opcode },
8402 { Bad_Opcode },
8403 { Bad_Opcode },
8404 { Bad_Opcode },
8405 { Bad_Opcode },
8406 { Bad_Opcode },
8407 { Bad_Opcode },
c0f3af97 8408 /* e8 */
592d1631
L
8409 { Bad_Opcode },
8410 { Bad_Opcode },
8411 { Bad_Opcode },
8412 { Bad_Opcode },
8413 { Bad_Opcode },
8414 { Bad_Opcode },
8415 { Bad_Opcode },
8416 { Bad_Opcode },
c0f3af97 8417 /* f0 */
6c30d220 8418 { PREFIX_TABLE (PREFIX_VEX_0F3AF0) },
592d1631
L
8419 { Bad_Opcode },
8420 { Bad_Opcode },
8421 { Bad_Opcode },
8422 { Bad_Opcode },
8423 { Bad_Opcode },
8424 { Bad_Opcode },
8425 { Bad_Opcode },
c0f3af97 8426 /* f8 */
592d1631
L
8427 { Bad_Opcode },
8428 { Bad_Opcode },
8429 { Bad_Opcode },
8430 { Bad_Opcode },
8431 { Bad_Opcode },
8432 { Bad_Opcode },
8433 { Bad_Opcode },
8434 { Bad_Opcode },
c0f3af97
L
8435 },
8436};
8437
8438static const struct dis386 vex_len_table[][2] = {
592a252b 8439 /* VEX_LEN_0F10_P_1 */
c0f3af97 8440 {
592a252b
L
8441 { VEX_W_TABLE (VEX_W_0F10_P_1) },
8442 { VEX_W_TABLE (VEX_W_0F10_P_1) },
c0f3af97
L
8443 },
8444
592a252b 8445 /* VEX_LEN_0F10_P_3 */
c0f3af97 8446 {
592a252b
L
8447 { VEX_W_TABLE (VEX_W_0F10_P_3) },
8448 { VEX_W_TABLE (VEX_W_0F10_P_3) },
c0f3af97
L
8449 },
8450
592a252b 8451 /* VEX_LEN_0F11_P_1 */
c0f3af97 8452 {
592a252b
L
8453 { VEX_W_TABLE (VEX_W_0F11_P_1) },
8454 { VEX_W_TABLE (VEX_W_0F11_P_1) },
c0f3af97
L
8455 },
8456
592a252b 8457 /* VEX_LEN_0F11_P_3 */
c0f3af97 8458 {
592a252b
L
8459 { VEX_W_TABLE (VEX_W_0F11_P_3) },
8460 { VEX_W_TABLE (VEX_W_0F11_P_3) },
c0f3af97
L
8461 },
8462
592a252b 8463 /* VEX_LEN_0F12_P_0_M_0 */
c0f3af97 8464 {
592a252b 8465 { VEX_W_TABLE (VEX_W_0F12_P_0_M_0) },
c0f3af97
L
8466 },
8467
592a252b 8468 /* VEX_LEN_0F12_P_0_M_1 */
c0f3af97 8469 {
592a252b 8470 { VEX_W_TABLE (VEX_W_0F12_P_0_M_1) },
c0f3af97
L
8471 },
8472
592a252b 8473 /* VEX_LEN_0F12_P_2 */
c0f3af97 8474 {
592a252b 8475 { VEX_W_TABLE (VEX_W_0F12_P_2) },
c0f3af97
L
8476 },
8477
592a252b 8478 /* VEX_LEN_0F13_M_0 */
c0f3af97 8479 {
592a252b 8480 { VEX_W_TABLE (VEX_W_0F13_M_0) },
c0f3af97
L
8481 },
8482
592a252b 8483 /* VEX_LEN_0F16_P_0_M_0 */
c0f3af97 8484 {
592a252b 8485 { VEX_W_TABLE (VEX_W_0F16_P_0_M_0) },
c0f3af97
L
8486 },
8487
592a252b 8488 /* VEX_LEN_0F16_P_0_M_1 */
c0f3af97 8489 {
592a252b 8490 { VEX_W_TABLE (VEX_W_0F16_P_0_M_1) },
c0f3af97
L
8491 },
8492
592a252b 8493 /* VEX_LEN_0F16_P_2 */
c0f3af97 8494 {
592a252b 8495 { VEX_W_TABLE (VEX_W_0F16_P_2) },
c0f3af97
L
8496 },
8497
592a252b 8498 /* VEX_LEN_0F17_M_0 */
c0f3af97 8499 {
592a252b 8500 { VEX_W_TABLE (VEX_W_0F17_M_0) },
c0f3af97
L
8501 },
8502
592a252b 8503 /* VEX_LEN_0F2A_P_1 */
c0f3af97 8504 {
539f890d
L
8505 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev } },
8506 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev } },
c0f3af97
L
8507 },
8508
592a252b 8509 /* VEX_LEN_0F2A_P_3 */
c0f3af97 8510 {
539f890d
L
8511 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev } },
8512 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev } },
c0f3af97
L
8513 },
8514
592a252b 8515 /* VEX_LEN_0F2C_P_1 */
c0f3af97 8516 {
539f890d
L
8517 { "vcvttss2siY", { Gv, EXdScalar } },
8518 { "vcvttss2siY", { Gv, EXdScalar } },
c0f3af97
L
8519 },
8520
592a252b 8521 /* VEX_LEN_0F2C_P_3 */
c0f3af97 8522 {
539f890d
L
8523 { "vcvttsd2siY", { Gv, EXqScalar } },
8524 { "vcvttsd2siY", { Gv, EXqScalar } },
c0f3af97
L
8525 },
8526
592a252b 8527 /* VEX_LEN_0F2D_P_1 */
c0f3af97 8528 {
539f890d
L
8529 { "vcvtss2siY", { Gv, EXdScalar } },
8530 { "vcvtss2siY", { Gv, EXdScalar } },
c0f3af97
L
8531 },
8532
592a252b 8533 /* VEX_LEN_0F2D_P_3 */
c0f3af97 8534 {
539f890d
L
8535 { "vcvtsd2siY", { Gv, EXqScalar } },
8536 { "vcvtsd2siY", { Gv, EXqScalar } },
c0f3af97
L
8537 },
8538
592a252b 8539 /* VEX_LEN_0F2E_P_0 */
c0f3af97 8540 {
592a252b
L
8541 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
8542 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
c0f3af97
L
8543 },
8544
592a252b 8545 /* VEX_LEN_0F2E_P_2 */
c0f3af97 8546 {
592a252b
L
8547 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
8548 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
c0f3af97
L
8549 },
8550
592a252b 8551 /* VEX_LEN_0F2F_P_0 */
c0f3af97 8552 {
592a252b
L
8553 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
8554 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
c0f3af97
L
8555 },
8556
592a252b 8557 /* VEX_LEN_0F2F_P_2 */
c0f3af97 8558 {
592a252b
L
8559 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
8560 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
c0f3af97
L
8561 },
8562
592a252b 8563 /* VEX_LEN_0F51_P_1 */
c0f3af97 8564 {
592a252b
L
8565 { VEX_W_TABLE (VEX_W_0F51_P_1) },
8566 { VEX_W_TABLE (VEX_W_0F51_P_1) },
c0f3af97
L
8567 },
8568
592a252b 8569 /* VEX_LEN_0F51_P_3 */
c0f3af97 8570 {
592a252b
L
8571 { VEX_W_TABLE (VEX_W_0F51_P_3) },
8572 { VEX_W_TABLE (VEX_W_0F51_P_3) },
c0f3af97
L
8573 },
8574
592a252b 8575 /* VEX_LEN_0F52_P_1 */
c0f3af97 8576 {
592a252b
L
8577 { VEX_W_TABLE (VEX_W_0F52_P_1) },
8578 { VEX_W_TABLE (VEX_W_0F52_P_1) },
c0f3af97
L
8579 },
8580
592a252b 8581 /* VEX_LEN_0F53_P_1 */
c0f3af97 8582 {
592a252b
L
8583 { VEX_W_TABLE (VEX_W_0F53_P_1) },
8584 { VEX_W_TABLE (VEX_W_0F53_P_1) },
c0f3af97
L
8585 },
8586
592a252b 8587 /* VEX_LEN_0F58_P_1 */
c0f3af97 8588 {
592a252b
L
8589 { VEX_W_TABLE (VEX_W_0F58_P_1) },
8590 { VEX_W_TABLE (VEX_W_0F58_P_1) },
c0f3af97
L
8591 },
8592
592a252b 8593 /* VEX_LEN_0F58_P_3 */
c0f3af97 8594 {
592a252b
L
8595 { VEX_W_TABLE (VEX_W_0F58_P_3) },
8596 { VEX_W_TABLE (VEX_W_0F58_P_3) },
c0f3af97
L
8597 },
8598
592a252b 8599 /* VEX_LEN_0F59_P_1 */
c0f3af97 8600 {
592a252b
L
8601 { VEX_W_TABLE (VEX_W_0F59_P_1) },
8602 { VEX_W_TABLE (VEX_W_0F59_P_1) },
c0f3af97
L
8603 },
8604
592a252b 8605 /* VEX_LEN_0F59_P_3 */
c0f3af97 8606 {
592a252b
L
8607 { VEX_W_TABLE (VEX_W_0F59_P_3) },
8608 { VEX_W_TABLE (VEX_W_0F59_P_3) },
c0f3af97
L
8609 },
8610
592a252b 8611 /* VEX_LEN_0F5A_P_1 */
c0f3af97 8612 {
592a252b
L
8613 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
8614 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
c0f3af97
L
8615 },
8616
592a252b 8617 /* VEX_LEN_0F5A_P_3 */
c0f3af97 8618 {
592a252b
L
8619 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
8620 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
c0f3af97
L
8621 },
8622
592a252b 8623 /* VEX_LEN_0F5C_P_1 */
c0f3af97 8624 {
592a252b
L
8625 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
8626 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
c0f3af97
L
8627 },
8628
592a252b 8629 /* VEX_LEN_0F5C_P_3 */
c0f3af97 8630 {
592a252b
L
8631 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
8632 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
c0f3af97
L
8633 },
8634
592a252b 8635 /* VEX_LEN_0F5D_P_1 */
c0f3af97 8636 {
592a252b
L
8637 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
8638 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
c0f3af97
L
8639 },
8640
592a252b 8641 /* VEX_LEN_0F5D_P_3 */
c0f3af97 8642 {
592a252b
L
8643 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
8644 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
c0f3af97
L
8645 },
8646
592a252b 8647 /* VEX_LEN_0F5E_P_1 */
c0f3af97 8648 {
592a252b
L
8649 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
8650 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
c0f3af97
L
8651 },
8652
592a252b 8653 /* VEX_LEN_0F5E_P_3 */
c0f3af97 8654 {
592a252b
L
8655 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
8656 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
c0f3af97
L
8657 },
8658
592a252b 8659 /* VEX_LEN_0F5F_P_1 */
c0f3af97 8660 {
592a252b
L
8661 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
8662 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
c0f3af97
L
8663 },
8664
592a252b 8665 /* VEX_LEN_0F5F_P_3 */
c0f3af97 8666 {
592a252b
L
8667 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
8668 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
c0f3af97
L
8669 },
8670
592a252b 8671 /* VEX_LEN_0F6E_P_2 */
c0f3af97 8672 {
539f890d
L
8673 { "vmovK", { XMScalar, Edq } },
8674 { "vmovK", { XMScalar, Edq } },
c0f3af97
L
8675 },
8676
592a252b 8677 /* VEX_LEN_0F7E_P_1 */
c0f3af97 8678 {
592a252b
L
8679 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
8680 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
c0f3af97
L
8681 },
8682
592a252b 8683 /* VEX_LEN_0F7E_P_2 */
c0f3af97 8684 {
539f890d 8685 { "vmovK", { Edq, XMScalar } },
6c30d220 8686 { "vmovK", { Edq, XMScalar } },
c0f3af97
L
8687 },
8688
6c30d220 8689 /* VEX_LEN_0FAE_R_2_M_0 */
c0f3af97 8690 {
6c30d220 8691 { VEX_W_TABLE (VEX_W_0FAE_R_2_M_0) },
c0f3af97
L
8692 },
8693
6c30d220 8694 /* VEX_LEN_0FAE_R_3_M_0 */
c0f3af97 8695 {
6c30d220 8696 { VEX_W_TABLE (VEX_W_0FAE_R_3_M_0) },
c0f3af97
L
8697 },
8698
6c30d220 8699 /* VEX_LEN_0FC2_P_1 */
c0f3af97 8700 {
6c30d220
L
8701 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
8702 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
c0f3af97
L
8703 },
8704
6c30d220 8705 /* VEX_LEN_0FC2_P_3 */
c0f3af97 8706 {
6c30d220
L
8707 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
8708 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
c0f3af97
L
8709 },
8710
6c30d220 8711 /* VEX_LEN_0FC4_P_2 */
c0f3af97 8712 {
6c30d220 8713 { VEX_W_TABLE (VEX_W_0FC4_P_2) },
c0f3af97
L
8714 },
8715
6c30d220 8716 /* VEX_LEN_0FC5_P_2 */
c0f3af97 8717 {
6c30d220 8718 { VEX_W_TABLE (VEX_W_0FC5_P_2) },
c0f3af97
L
8719 },
8720
6c30d220 8721 /* VEX_LEN_0FD6_P_2 */
c0f3af97 8722 {
6c30d220
L
8723 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
8724 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
c0f3af97
L
8725 },
8726
6c30d220 8727 /* VEX_LEN_0FF7_P_2 */
c0f3af97 8728 {
6c30d220 8729 { VEX_W_TABLE (VEX_W_0FF7_P_2) },
c0f3af97
L
8730 },
8731
6c30d220 8732 /* VEX_LEN_0F3816_P_2 */
c0f3af97 8733 {
6c30d220
L
8734 { Bad_Opcode },
8735 { VEX_W_TABLE (VEX_W_0F3816_P_2) },
c0f3af97
L
8736 },
8737
6c30d220 8738 /* VEX_LEN_0F3819_P_2 */
c0f3af97 8739 {
6c30d220
L
8740 { Bad_Opcode },
8741 { VEX_W_TABLE (VEX_W_0F3819_P_2) },
c0f3af97
L
8742 },
8743
6c30d220 8744 /* VEX_LEN_0F381A_P_2_M_0 */
c0f3af97 8745 {
6c30d220
L
8746 { Bad_Opcode },
8747 { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
c0f3af97
L
8748 },
8749
6c30d220 8750 /* VEX_LEN_0F3836_P_2 */
c0f3af97 8751 {
6c30d220
L
8752 { Bad_Opcode },
8753 { VEX_W_TABLE (VEX_W_0F3836_P_2) },
c0f3af97
L
8754 },
8755
592a252b 8756 /* VEX_LEN_0F3841_P_2 */
c0f3af97 8757 {
592a252b 8758 { VEX_W_TABLE (VEX_W_0F3841_P_2) },
c0f3af97
L
8759 },
8760
6c30d220
L
8761 /* VEX_LEN_0F385A_P_2_M_0 */
8762 {
8763 { Bad_Opcode },
8764 { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) },
8765 },
8766
592a252b 8767 /* VEX_LEN_0F38DB_P_2 */
a5ff0eb2 8768 {
592a252b 8769 { VEX_W_TABLE (VEX_W_0F38DB_P_2) },
a5ff0eb2
L
8770 },
8771
592a252b 8772 /* VEX_LEN_0F38DC_P_2 */
a5ff0eb2 8773 {
592a252b 8774 { VEX_W_TABLE (VEX_W_0F38DC_P_2) },
a5ff0eb2
L
8775 },
8776
592a252b 8777 /* VEX_LEN_0F38DD_P_2 */
a5ff0eb2 8778 {
592a252b 8779 { VEX_W_TABLE (VEX_W_0F38DD_P_2) },
a5ff0eb2
L
8780 },
8781
592a252b 8782 /* VEX_LEN_0F38DE_P_2 */
a5ff0eb2 8783 {
592a252b 8784 { VEX_W_TABLE (VEX_W_0F38DE_P_2) },
a5ff0eb2
L
8785 },
8786
592a252b 8787 /* VEX_LEN_0F38DF_P_2 */
a5ff0eb2 8788 {
592a252b 8789 { VEX_W_TABLE (VEX_W_0F38DF_P_2) },
a5ff0eb2
L
8790 },
8791
f12dc422
L
8792 /* VEX_LEN_0F38F2_P_0 */
8793 {
8794 { "andnS", { Gdq, VexGdq, Edq } },
8795 },
8796
8797 /* VEX_LEN_0F38F3_R_1_P_0 */
8798 {
8799 { "blsrS", { VexGdq, Edq } },
8800 },
8801
8802 /* VEX_LEN_0F38F3_R_2_P_0 */
8803 {
8804 { "blsmskS", { VexGdq, Edq } },
8805 },
8806
8807 /* VEX_LEN_0F38F3_R_3_P_0 */
8808 {
8809 { "blsiS", { VexGdq, Edq } },
8810 },
8811
6c30d220
L
8812 /* VEX_LEN_0F38F5_P_0 */
8813 {
8814 { "bzhiS", { Gdq, Edq, VexGdq } },
8815 },
8816
8817 /* VEX_LEN_0F38F5_P_1 */
8818 {
8819 { "pextS", { Gdq, VexGdq, Edq } },
8820 },
8821
8822 /* VEX_LEN_0F38F5_P_3 */
8823 {
8824 { "pdepS", { Gdq, VexGdq, Edq } },
8825 },
8826
8827 /* VEX_LEN_0F38F6_P_3 */
8828 {
8829 { "mulxS", { Gdq, VexGdq, Edq } },
8830 },
8831
f12dc422
L
8832 /* VEX_LEN_0F38F7_P_0 */
8833 {
8834 { "bextrS", { Gdq, Edq, VexGdq } },
8835 },
8836
6c30d220
L
8837 /* VEX_LEN_0F38F7_P_1 */
8838 {
8839 { "sarxS", { Gdq, Edq, VexGdq } },
8840 },
8841
8842 /* VEX_LEN_0F38F7_P_2 */
8843 {
8844 { "shlxS", { Gdq, Edq, VexGdq } },
8845 },
8846
8847 /* VEX_LEN_0F38F7_P_3 */
8848 {
8849 { "shrxS", { Gdq, Edq, VexGdq } },
8850 },
8851
8852 /* VEX_LEN_0F3A00_P_2 */
8853 {
8854 { Bad_Opcode },
8855 { VEX_W_TABLE (VEX_W_0F3A00_P_2) },
8856 },
8857
8858 /* VEX_LEN_0F3A01_P_2 */
8859 {
8860 { Bad_Opcode },
8861 { VEX_W_TABLE (VEX_W_0F3A01_P_2) },
8862 },
8863
592a252b 8864 /* VEX_LEN_0F3A06_P_2 */
c0f3af97 8865 {
592d1631 8866 { Bad_Opcode },
592a252b 8867 { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
c0f3af97
L
8868 },
8869
592a252b 8870 /* VEX_LEN_0F3A0A_P_2 */
c0f3af97 8871 {
592a252b
L
8872 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
8873 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
c0f3af97
L
8874 },
8875
592a252b 8876 /* VEX_LEN_0F3A0B_P_2 */
c0f3af97 8877 {
592a252b
L
8878 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
8879 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
c0f3af97
L
8880 },
8881
592a252b 8882 /* VEX_LEN_0F3A14_P_2 */
c0f3af97 8883 {
592a252b 8884 { VEX_W_TABLE (VEX_W_0F3A14_P_2) },
c0f3af97
L
8885 },
8886
592a252b 8887 /* VEX_LEN_0F3A15_P_2 */
c0f3af97 8888 {
592a252b 8889 { VEX_W_TABLE (VEX_W_0F3A15_P_2) },
c0f3af97
L
8890 },
8891
592a252b 8892 /* VEX_LEN_0F3A16_P_2 */
c0f3af97
L
8893 {
8894 { "vpextrK", { Edq, XM, Ib } },
c0f3af97
L
8895 },
8896
592a252b 8897 /* VEX_LEN_0F3A17_P_2 */
c0f3af97
L
8898 {
8899 { "vextractps", { Edqd, XM, Ib } },
c0f3af97
L
8900 },
8901
592a252b 8902 /* VEX_LEN_0F3A18_P_2 */
c0f3af97 8903 {
592d1631 8904 { Bad_Opcode },
592a252b 8905 { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
c0f3af97
L
8906 },
8907
592a252b 8908 /* VEX_LEN_0F3A19_P_2 */
c0f3af97 8909 {
592d1631 8910 { Bad_Opcode },
592a252b 8911 { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
c0f3af97
L
8912 },
8913
592a252b 8914 /* VEX_LEN_0F3A20_P_2 */
c0f3af97 8915 {
592a252b 8916 { VEX_W_TABLE (VEX_W_0F3A20_P_2) },
c0f3af97
L
8917 },
8918
592a252b 8919 /* VEX_LEN_0F3A21_P_2 */
c0f3af97 8920 {
592a252b 8921 { VEX_W_TABLE (VEX_W_0F3A21_P_2) },
c0f3af97
L
8922 },
8923
592a252b 8924 /* VEX_LEN_0F3A22_P_2 */
c0f3af97
L
8925 {
8926 { "vpinsrK", { XM, Vex128, Edq, Ib } },
c0f3af97
L
8927 },
8928
6c30d220 8929 /* VEX_LEN_0F3A38_P_2 */
c0f3af97 8930 {
6c30d220
L
8931 { Bad_Opcode },
8932 { VEX_W_TABLE (VEX_W_0F3A38_P_2) },
c0f3af97
L
8933 },
8934
6c30d220 8935 /* VEX_LEN_0F3A39_P_2 */
c0f3af97 8936 {
6c30d220
L
8937 { Bad_Opcode },
8938 { VEX_W_TABLE (VEX_W_0F3A39_P_2) },
8939 },
8940
8941 /* VEX_LEN_0F3A41_P_2 */
8942 {
8943 { VEX_W_TABLE (VEX_W_0F3A41_P_2) },
c0f3af97
L
8944 },
8945
592a252b 8946 /* VEX_LEN_0F3A44_P_2 */
ce2f5b3c 8947 {
592a252b 8948 { VEX_W_TABLE (VEX_W_0F3A44_P_2) },
ce2f5b3c
L
8949 },
8950
6c30d220 8951 /* VEX_LEN_0F3A46_P_2 */
c0f3af97 8952 {
6c30d220
L
8953 { Bad_Opcode },
8954 { VEX_W_TABLE (VEX_W_0F3A46_P_2) },
c0f3af97
L
8955 },
8956
592a252b 8957 /* VEX_LEN_0F3A60_P_2 */
c0f3af97 8958 {
592a252b 8959 { VEX_W_TABLE (VEX_W_0F3A60_P_2) },
c0f3af97
L
8960 },
8961
592a252b 8962 /* VEX_LEN_0F3A61_P_2 */
c0f3af97 8963 {
592a252b 8964 { VEX_W_TABLE (VEX_W_0F3A61_P_2) },
c0f3af97
L
8965 },
8966
592a252b 8967 /* VEX_LEN_0F3A62_P_2 */
c0f3af97 8968 {
592a252b 8969 { VEX_W_TABLE (VEX_W_0F3A62_P_2) },
c0f3af97
L
8970 },
8971
592a252b 8972 /* VEX_LEN_0F3A63_P_2 */
c0f3af97 8973 {
592a252b 8974 { VEX_W_TABLE (VEX_W_0F3A63_P_2) },
c0f3af97
L
8975 },
8976
592a252b 8977 /* VEX_LEN_0F3A6A_P_2 */
922d8de8 8978 {
206c2556 8979 { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
8980 },
8981
592a252b 8982 /* VEX_LEN_0F3A6B_P_2 */
922d8de8 8983 {
206c2556 8984 { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
8985 },
8986
592a252b 8987 /* VEX_LEN_0F3A6E_P_2 */
922d8de8 8988 {
206c2556 8989 { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
8990 },
8991
592a252b 8992 /* VEX_LEN_0F3A6F_P_2 */
922d8de8 8993 {
206c2556 8994 { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
8995 },
8996
592a252b 8997 /* VEX_LEN_0F3A7A_P_2 */
922d8de8 8998 {
206c2556 8999 { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9000 },
9001
592a252b 9002 /* VEX_LEN_0F3A7B_P_2 */
922d8de8 9003 {
206c2556 9004 { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9005 },
9006
592a252b 9007 /* VEX_LEN_0F3A7E_P_2 */
922d8de8 9008 {
206c2556 9009 { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9010 },
9011
592a252b 9012 /* VEX_LEN_0F3A7F_P_2 */
922d8de8 9013 {
206c2556 9014 { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9015 },
9016
592a252b 9017 /* VEX_LEN_0F3ADF_P_2 */
a5ff0eb2 9018 {
592a252b 9019 { VEX_W_TABLE (VEX_W_0F3ADF_P_2) },
a5ff0eb2 9020 },
4c807e72 9021
6c30d220
L
9022 /* VEX_LEN_0F3AF0_P_3 */
9023 {
182ae480 9024 { "rorxS", { Gdq, Edq, Ib } },
6c30d220
L
9025 },
9026
ff688e1f
L
9027 /* VEX_LEN_0FXOP_08_CC */
9028 {
9029 { "vpcomb", { XM, Vex128, EXx, Ib } },
9030 },
9031
9032 /* VEX_LEN_0FXOP_08_CD */
9033 {
9034 { "vpcomw", { XM, Vex128, EXx, Ib } },
9035 },
9036
9037 /* VEX_LEN_0FXOP_08_CE */
9038 {
9039 { "vpcomd", { XM, Vex128, EXx, Ib } },
9040 },
9041
9042 /* VEX_LEN_0FXOP_08_CF */
9043 {
9044 { "vpcomq", { XM, Vex128, EXx, Ib } },
9045 },
9046
9047 /* VEX_LEN_0FXOP_08_EC */
9048 {
9049 { "vpcomub", { XM, Vex128, EXx, Ib } },
9050 },
9051
9052 /* VEX_LEN_0FXOP_08_ED */
9053 {
9054 { "vpcomuw", { XM, Vex128, EXx, Ib } },
9055 },
9056
9057 /* VEX_LEN_0FXOP_08_EE */
9058 {
9059 { "vpcomud", { XM, Vex128, EXx, Ib } },
9060 },
9061
9062 /* VEX_LEN_0FXOP_08_EF */
9063 {
9064 { "vpcomuq", { XM, Vex128, EXx, Ib } },
9065 },
9066
592a252b 9067 /* VEX_LEN_0FXOP_09_80 */
5dd85c99 9068 {
4c807e72
L
9069 { "vfrczps", { XM, EXxmm } },
9070 { "vfrczps", { XM, EXymmq } },
5dd85c99 9071 },
4c807e72 9072
592a252b 9073 /* VEX_LEN_0FXOP_09_81 */
5dd85c99 9074 {
4c807e72
L
9075 { "vfrczpd", { XM, EXxmm } },
9076 { "vfrczpd", { XM, EXymmq } },
5dd85c99 9077 },
331d2d0d
L
9078};
9079
9e30b8e0 9080static const struct dis386 vex_w_table[][2] = {
b844680a 9081 {
592a252b 9082 /* VEX_W_0F10_P_0 */
9e30b8e0 9083 { "vmovups", { XM, EXx } },
d8faab4e
L
9084 },
9085 {
592a252b 9086 /* VEX_W_0F10_P_1 */
539f890d 9087 { "vmovss", { XMVexScalar, VexScalar, EXdScalar } },
d8faab4e
L
9088 },
9089 {
592a252b 9090 /* VEX_W_0F10_P_2 */
9e30b8e0 9091 { "vmovupd", { XM, EXx } },
d8faab4e
L
9092 },
9093 {
592a252b 9094 /* VEX_W_0F10_P_3 */
539f890d 9095 { "vmovsd", { XMVexScalar, VexScalar, EXqScalar } },
d8faab4e
L
9096 },
9097 {
592a252b 9098 /* VEX_W_0F11_P_0 */
9e30b8e0 9099 { "vmovups", { EXxS, XM } },
d8faab4e
L
9100 },
9101 {
592a252b 9102 /* VEX_W_0F11_P_1 */
539f890d 9103 { "vmovss", { EXdVexScalarS, VexScalar, XMScalar } },
b844680a
L
9104 },
9105 {
592a252b 9106 /* VEX_W_0F11_P_2 */
9e30b8e0 9107 { "vmovupd", { EXxS, XM } },
b844680a
L
9108 },
9109 {
592a252b 9110 /* VEX_W_0F11_P_3 */
539f890d 9111 { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar } },
d8faab4e
L
9112 },
9113 {
592a252b 9114 /* VEX_W_0F12_P_0_M_0 */
9e30b8e0 9115 { "vmovlps", { XM, Vex128, EXq } },
b844680a
L
9116 },
9117 {
592a252b 9118 /* VEX_W_0F12_P_0_M_1 */
9e30b8e0 9119 { "vmovhlps", { XM, Vex128, EXq } },
b844680a
L
9120 },
9121 {
592a252b 9122 /* VEX_W_0F12_P_1 */
9e30b8e0 9123 { "vmovsldup", { XM, EXx } },
b844680a
L
9124 },
9125 {
592a252b 9126 /* VEX_W_0F12_P_2 */
9e30b8e0 9127 { "vmovlpd", { XM, Vex128, EXq } },
b844680a
L
9128 },
9129 {
592a252b 9130 /* VEX_W_0F12_P_3 */
9e30b8e0 9131 { "vmovddup", { XM, EXymmq } },
b844680a
L
9132 },
9133 {
592a252b 9134 /* VEX_W_0F13_M_0 */
9e30b8e0 9135 { "vmovlpX", { EXq, XM } },
b844680a
L
9136 },
9137 {
592a252b 9138 /* VEX_W_0F14 */
9e30b8e0 9139 { "vunpcklpX", { XM, Vex, EXx } },
b844680a
L
9140 },
9141 {
592a252b 9142 /* VEX_W_0F15 */
9e30b8e0 9143 { "vunpckhpX", { XM, Vex, EXx } },
b844680a
L
9144 },
9145 {
592a252b 9146 /* VEX_W_0F16_P_0_M_0 */
9e30b8e0 9147 { "vmovhps", { XM, Vex128, EXq } },
9e30b8e0
L
9148 },
9149 {
592a252b 9150 /* VEX_W_0F16_P_0_M_1 */
9e30b8e0 9151 { "vmovlhps", { XM, Vex128, EXq } },
9e30b8e0
L
9152 },
9153 {
592a252b 9154 /* VEX_W_0F16_P_1 */
9e30b8e0 9155 { "vmovshdup", { XM, EXx } },
9e30b8e0
L
9156 },
9157 {
592a252b 9158 /* VEX_W_0F16_P_2 */
9e30b8e0 9159 { "vmovhpd", { XM, Vex128, EXq } },
9e30b8e0
L
9160 },
9161 {
592a252b 9162 /* VEX_W_0F17_M_0 */
9e30b8e0 9163 { "vmovhpX", { EXq, XM } },
9e30b8e0
L
9164 },
9165 {
592a252b 9166 /* VEX_W_0F28 */
9e30b8e0 9167 { "vmovapX", { XM, EXx } },
9e30b8e0
L
9168 },
9169 {
592a252b 9170 /* VEX_W_0F29 */
9e30b8e0 9171 { "vmovapX", { EXxS, XM } },
9e30b8e0
L
9172 },
9173 {
592a252b 9174 /* VEX_W_0F2B_M_0 */
9e30b8e0 9175 { "vmovntpX", { Mx, XM } },
9e30b8e0
L
9176 },
9177 {
592a252b 9178 /* VEX_W_0F2E_P_0 */
7bb15c6f 9179 { "vucomiss", { XMScalar, EXdScalar } },
9e30b8e0
L
9180 },
9181 {
592a252b 9182 /* VEX_W_0F2E_P_2 */
7bb15c6f 9183 { "vucomisd", { XMScalar, EXqScalar } },
9e30b8e0
L
9184 },
9185 {
592a252b 9186 /* VEX_W_0F2F_P_0 */
539f890d 9187 { "vcomiss", { XMScalar, EXdScalar } },
9e30b8e0
L
9188 },
9189 {
592a252b 9190 /* VEX_W_0F2F_P_2 */
539f890d 9191 { "vcomisd", { XMScalar, EXqScalar } },
9e30b8e0
L
9192 },
9193 {
592a252b 9194 /* VEX_W_0F50_M_0 */
9e30b8e0 9195 { "vmovmskpX", { Gdq, XS } },
9e30b8e0
L
9196 },
9197 {
592a252b 9198 /* VEX_W_0F51_P_0 */
9e30b8e0 9199 { "vsqrtps", { XM, EXx } },
9e30b8e0
L
9200 },
9201 {
592a252b 9202 /* VEX_W_0F51_P_1 */
539f890d 9203 { "vsqrtss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9204 },
9205 {
592a252b 9206 /* VEX_W_0F51_P_2 */
9e30b8e0 9207 { "vsqrtpd", { XM, EXx } },
9e30b8e0
L
9208 },
9209 {
592a252b 9210 /* VEX_W_0F51_P_3 */
539f890d 9211 { "vsqrtsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9212 },
9213 {
592a252b 9214 /* VEX_W_0F52_P_0 */
9e30b8e0 9215 { "vrsqrtps", { XM, EXx } },
9e30b8e0
L
9216 },
9217 {
592a252b 9218 /* VEX_W_0F52_P_1 */
539f890d 9219 { "vrsqrtss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9220 },
9221 {
592a252b 9222 /* VEX_W_0F53_P_0 */
9e30b8e0 9223 { "vrcpps", { XM, EXx } },
9e30b8e0
L
9224 },
9225 {
592a252b 9226 /* VEX_W_0F53_P_1 */
539f890d 9227 { "vrcpss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9228 },
9229 {
592a252b 9230 /* VEX_W_0F58_P_0 */
9e30b8e0 9231 { "vaddps", { XM, Vex, EXx } },
9e30b8e0
L
9232 },
9233 {
592a252b 9234 /* VEX_W_0F58_P_1 */
539f890d 9235 { "vaddss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9236 },
9237 {
592a252b 9238 /* VEX_W_0F58_P_2 */
9e30b8e0 9239 { "vaddpd", { XM, Vex, EXx } },
9e30b8e0
L
9240 },
9241 {
592a252b 9242 /* VEX_W_0F58_P_3 */
539f890d 9243 { "vaddsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9244 },
9245 {
592a252b 9246 /* VEX_W_0F59_P_0 */
9e30b8e0 9247 { "vmulps", { XM, Vex, EXx } },
9e30b8e0
L
9248 },
9249 {
592a252b 9250 /* VEX_W_0F59_P_1 */
539f890d 9251 { "vmulss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9252 },
9253 {
592a252b 9254 /* VEX_W_0F59_P_2 */
9e30b8e0 9255 { "vmulpd", { XM, Vex, EXx } },
9e30b8e0
L
9256 },
9257 {
592a252b 9258 /* VEX_W_0F59_P_3 */
539f890d 9259 { "vmulsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9260 },
9261 {
592a252b 9262 /* VEX_W_0F5A_P_0 */
9e30b8e0 9263 { "vcvtps2pd", { XM, EXxmmq } },
9e30b8e0
L
9264 },
9265 {
592a252b 9266 /* VEX_W_0F5A_P_1 */
539f890d 9267 { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9268 },
9269 {
592a252b 9270 /* VEX_W_0F5A_P_3 */
539f890d 9271 { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9272 },
9273 {
592a252b 9274 /* VEX_W_0F5B_P_0 */
9e30b8e0 9275 { "vcvtdq2ps", { XM, EXx } },
9e30b8e0
L
9276 },
9277 {
592a252b 9278 /* VEX_W_0F5B_P_1 */
9e30b8e0 9279 { "vcvttps2dq", { XM, EXx } },
9e30b8e0
L
9280 },
9281 {
592a252b 9282 /* VEX_W_0F5B_P_2 */
9e30b8e0 9283 { "vcvtps2dq", { XM, EXx } },
9e30b8e0
L
9284 },
9285 {
592a252b 9286 /* VEX_W_0F5C_P_0 */
9e30b8e0 9287 { "vsubps", { XM, Vex, EXx } },
9e30b8e0
L
9288 },
9289 {
592a252b 9290 /* VEX_W_0F5C_P_1 */
539f890d 9291 { "vsubss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9292 },
9293 {
592a252b 9294 /* VEX_W_0F5C_P_2 */
9e30b8e0 9295 { "vsubpd", { XM, Vex, EXx } },
9e30b8e0
L
9296 },
9297 {
592a252b 9298 /* VEX_W_0F5C_P_3 */
539f890d 9299 { "vsubsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9300 },
9301 {
592a252b 9302 /* VEX_W_0F5D_P_0 */
9e30b8e0 9303 { "vminps", { XM, Vex, EXx } },
9e30b8e0
L
9304 },
9305 {
592a252b 9306 /* VEX_W_0F5D_P_1 */
539f890d 9307 { "vminss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9308 },
9309 {
592a252b 9310 /* VEX_W_0F5D_P_2 */
9e30b8e0 9311 { "vminpd", { XM, Vex, EXx } },
9e30b8e0
L
9312 },
9313 {
592a252b 9314 /* VEX_W_0F5D_P_3 */
539f890d 9315 { "vminsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9316 },
9317 {
592a252b 9318 /* VEX_W_0F5E_P_0 */
9e30b8e0 9319 { "vdivps", { XM, Vex, EXx } },
9e30b8e0
L
9320 },
9321 {
592a252b 9322 /* VEX_W_0F5E_P_1 */
539f890d 9323 { "vdivss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9324 },
9325 {
592a252b 9326 /* VEX_W_0F5E_P_2 */
9e30b8e0 9327 { "vdivpd", { XM, Vex, EXx } },
9e30b8e0
L
9328 },
9329 {
592a252b 9330 /* VEX_W_0F5E_P_3 */
539f890d 9331 { "vdivsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9332 },
9333 {
592a252b 9334 /* VEX_W_0F5F_P_0 */
9e30b8e0 9335 { "vmaxps", { XM, Vex, EXx } },
9e30b8e0
L
9336 },
9337 {
592a252b 9338 /* VEX_W_0F5F_P_1 */
539f890d 9339 { "vmaxss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9340 },
9341 {
592a252b 9342 /* VEX_W_0F5F_P_2 */
9e30b8e0 9343 { "vmaxpd", { XM, Vex, EXx } },
9e30b8e0
L
9344 },
9345 {
592a252b 9346 /* VEX_W_0F5F_P_3 */
539f890d 9347 { "vmaxsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9348 },
9349 {
592a252b 9350 /* VEX_W_0F60_P_2 */
6c30d220 9351 { "vpunpcklbw", { XM, Vex, EXx } },
9e30b8e0
L
9352 },
9353 {
592a252b 9354 /* VEX_W_0F61_P_2 */
6c30d220 9355 { "vpunpcklwd", { XM, Vex, EXx } },
9e30b8e0
L
9356 },
9357 {
592a252b 9358 /* VEX_W_0F62_P_2 */
6c30d220 9359 { "vpunpckldq", { XM, Vex, EXx } },
9e30b8e0
L
9360 },
9361 {
592a252b 9362 /* VEX_W_0F63_P_2 */
6c30d220 9363 { "vpacksswb", { XM, Vex, EXx } },
9e30b8e0
L
9364 },
9365 {
592a252b 9366 /* VEX_W_0F64_P_2 */
6c30d220 9367 { "vpcmpgtb", { XM, Vex, EXx } },
9e30b8e0
L
9368 },
9369 {
592a252b 9370 /* VEX_W_0F65_P_2 */
6c30d220 9371 { "vpcmpgtw", { XM, Vex, EXx } },
9e30b8e0
L
9372 },
9373 {
592a252b 9374 /* VEX_W_0F66_P_2 */
6c30d220 9375 { "vpcmpgtd", { XM, Vex, EXx } },
9e30b8e0
L
9376 },
9377 {
592a252b 9378 /* VEX_W_0F67_P_2 */
6c30d220 9379 { "vpackuswb", { XM, Vex, EXx } },
9e30b8e0
L
9380 },
9381 {
592a252b 9382 /* VEX_W_0F68_P_2 */
6c30d220 9383 { "vpunpckhbw", { XM, Vex, EXx } },
9e30b8e0
L
9384 },
9385 {
592a252b 9386 /* VEX_W_0F69_P_2 */
6c30d220 9387 { "vpunpckhwd", { XM, Vex, EXx } },
9e30b8e0
L
9388 },
9389 {
592a252b 9390 /* VEX_W_0F6A_P_2 */
6c30d220 9391 { "vpunpckhdq", { XM, Vex, EXx } },
9e30b8e0
L
9392 },
9393 {
592a252b 9394 /* VEX_W_0F6B_P_2 */
6c30d220 9395 { "vpackssdw", { XM, Vex, EXx } },
9e30b8e0
L
9396 },
9397 {
592a252b 9398 /* VEX_W_0F6C_P_2 */
6c30d220 9399 { "vpunpcklqdq", { XM, Vex, EXx } },
9e30b8e0
L
9400 },
9401 {
592a252b 9402 /* VEX_W_0F6D_P_2 */
6c30d220 9403 { "vpunpckhqdq", { XM, Vex, EXx } },
9e30b8e0
L
9404 },
9405 {
592a252b 9406 /* VEX_W_0F6F_P_1 */
efdb52b7 9407 { "vmovdqu", { XM, EXx } },
9e30b8e0
L
9408 },
9409 {
592a252b 9410 /* VEX_W_0F6F_P_2 */
efdb52b7 9411 { "vmovdqa", { XM, EXx } },
9e30b8e0
L
9412 },
9413 {
592a252b 9414 /* VEX_W_0F70_P_1 */
9e30b8e0 9415 { "vpshufhw", { XM, EXx, Ib } },
9e30b8e0
L
9416 },
9417 {
592a252b 9418 /* VEX_W_0F70_P_2 */
9e30b8e0 9419 { "vpshufd", { XM, EXx, Ib } },
9e30b8e0
L
9420 },
9421 {
592a252b 9422 /* VEX_W_0F70_P_3 */
9e30b8e0 9423 { "vpshuflw", { XM, EXx, Ib } },
9e30b8e0
L
9424 },
9425 {
592a252b 9426 /* VEX_W_0F71_R_2_P_2 */
6c30d220 9427 { "vpsrlw", { Vex, XS, Ib } },
9e30b8e0
L
9428 },
9429 {
592a252b 9430 /* VEX_W_0F71_R_4_P_2 */
6c30d220 9431 { "vpsraw", { Vex, XS, Ib } },
9e30b8e0
L
9432 },
9433 {
592a252b 9434 /* VEX_W_0F71_R_6_P_2 */
6c30d220 9435 { "vpsllw", { Vex, XS, Ib } },
9e30b8e0
L
9436 },
9437 {
592a252b 9438 /* VEX_W_0F72_R_2_P_2 */
6c30d220 9439 { "vpsrld", { Vex, XS, Ib } },
9e30b8e0
L
9440 },
9441 {
592a252b 9442 /* VEX_W_0F72_R_4_P_2 */
6c30d220 9443 { "vpsrad", { Vex, XS, Ib } },
9e30b8e0
L
9444 },
9445 {
592a252b 9446 /* VEX_W_0F72_R_6_P_2 */
6c30d220 9447 { "vpslld", { Vex, XS, Ib } },
9e30b8e0
L
9448 },
9449 {
592a252b 9450 /* VEX_W_0F73_R_2_P_2 */
6c30d220 9451 { "vpsrlq", { Vex, XS, Ib } },
9e30b8e0
L
9452 },
9453 {
592a252b 9454 /* VEX_W_0F73_R_3_P_2 */
6c30d220 9455 { "vpsrldq", { Vex, XS, Ib } },
9e30b8e0
L
9456 },
9457 {
592a252b 9458 /* VEX_W_0F73_R_6_P_2 */
6c30d220 9459 { "vpsllq", { Vex, XS, Ib } },
9e30b8e0
L
9460 },
9461 {
592a252b 9462 /* VEX_W_0F73_R_7_P_2 */
6c30d220 9463 { "vpslldq", { Vex, XS, Ib } },
9e30b8e0
L
9464 },
9465 {
592a252b 9466 /* VEX_W_0F74_P_2 */
6c30d220 9467 { "vpcmpeqb", { XM, Vex, EXx } },
9e30b8e0
L
9468 },
9469 {
592a252b 9470 /* VEX_W_0F75_P_2 */
6c30d220 9471 { "vpcmpeqw", { XM, Vex, EXx } },
9e30b8e0
L
9472 },
9473 {
592a252b 9474 /* VEX_W_0F76_P_2 */
6c30d220 9475 { "vpcmpeqd", { XM, Vex, EXx } },
9e30b8e0
L
9476 },
9477 {
592a252b 9478 /* VEX_W_0F77_P_0 */
9e30b8e0 9479 { "", { VZERO } },
9e30b8e0
L
9480 },
9481 {
592a252b 9482 /* VEX_W_0F7C_P_2 */
9e30b8e0 9483 { "vhaddpd", { XM, Vex, EXx } },
9e30b8e0
L
9484 },
9485 {
592a252b 9486 /* VEX_W_0F7C_P_3 */
9e30b8e0 9487 { "vhaddps", { XM, Vex, EXx } },
9e30b8e0
L
9488 },
9489 {
592a252b 9490 /* VEX_W_0F7D_P_2 */
9e30b8e0 9491 { "vhsubpd", { XM, Vex, EXx } },
9e30b8e0
L
9492 },
9493 {
592a252b 9494 /* VEX_W_0F7D_P_3 */
9e30b8e0 9495 { "vhsubps", { XM, Vex, EXx } },
9e30b8e0
L
9496 },
9497 {
592a252b 9498 /* VEX_W_0F7E_P_1 */
539f890d 9499 { "vmovq", { XMScalar, EXqScalar } },
9e30b8e0
L
9500 },
9501 {
592a252b 9502 /* VEX_W_0F7F_P_1 */
9e30b8e0 9503 { "vmovdqu", { EXxS, XM } },
9e30b8e0
L
9504 },
9505 {
592a252b 9506 /* VEX_W_0F7F_P_2 */
9e30b8e0 9507 { "vmovdqa", { EXxS, XM } },
9e30b8e0
L
9508 },
9509 {
592a252b 9510 /* VEX_W_0FAE_R_2_M_0 */
9e30b8e0 9511 { "vldmxcsr", { Md } },
9e30b8e0
L
9512 },
9513 {
592a252b 9514 /* VEX_W_0FAE_R_3_M_0 */
9e30b8e0 9515 { "vstmxcsr", { Md } },
9e30b8e0
L
9516 },
9517 {
592a252b 9518 /* VEX_W_0FC2_P_0 */
9e30b8e0 9519 { "vcmpps", { XM, Vex, EXx, VCMP } },
9e30b8e0
L
9520 },
9521 {
592a252b 9522 /* VEX_W_0FC2_P_1 */
539f890d 9523 { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP } },
9e30b8e0
L
9524 },
9525 {
592a252b 9526 /* VEX_W_0FC2_P_2 */
9e30b8e0 9527 { "vcmppd", { XM, Vex, EXx, VCMP } },
9e30b8e0
L
9528 },
9529 {
592a252b 9530 /* VEX_W_0FC2_P_3 */
539f890d 9531 { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP } },
9e30b8e0
L
9532 },
9533 {
592a252b 9534 /* VEX_W_0FC4_P_2 */
9e30b8e0 9535 { "vpinsrw", { XM, Vex128, Edqw, Ib } },
9e30b8e0
L
9536 },
9537 {
592a252b 9538 /* VEX_W_0FC5_P_2 */
9e30b8e0 9539 { "vpextrw", { Gdq, XS, Ib } },
9e30b8e0
L
9540 },
9541 {
592a252b 9542 /* VEX_W_0FD0_P_2 */
9e30b8e0 9543 { "vaddsubpd", { XM, Vex, EXx } },
9e30b8e0
L
9544 },
9545 {
592a252b 9546 /* VEX_W_0FD0_P_3 */
9e30b8e0 9547 { "vaddsubps", { XM, Vex, EXx } },
9e30b8e0
L
9548 },
9549 {
592a252b 9550 /* VEX_W_0FD1_P_2 */
6c30d220 9551 { "vpsrlw", { XM, Vex, EXxmm } },
9e30b8e0
L
9552 },
9553 {
592a252b 9554 /* VEX_W_0FD2_P_2 */
6c30d220 9555 { "vpsrld", { XM, Vex, EXxmm } },
9e30b8e0
L
9556 },
9557 {
592a252b 9558 /* VEX_W_0FD3_P_2 */
6c30d220 9559 { "vpsrlq", { XM, Vex, EXxmm } },
9e30b8e0
L
9560 },
9561 {
592a252b 9562 /* VEX_W_0FD4_P_2 */
6c30d220 9563 { "vpaddq", { XM, Vex, EXx } },
9e30b8e0
L
9564 },
9565 {
592a252b 9566 /* VEX_W_0FD5_P_2 */
6c30d220 9567 { "vpmullw", { XM, Vex, EXx } },
9e30b8e0
L
9568 },
9569 {
592a252b 9570 /* VEX_W_0FD6_P_2 */
539f890d 9571 { "vmovq", { EXqScalarS, XMScalar } },
9e30b8e0
L
9572 },
9573 {
592a252b 9574 /* VEX_W_0FD7_P_2_M_1 */
9e30b8e0 9575 { "vpmovmskb", { Gdq, XS } },
9e30b8e0
L
9576 },
9577 {
592a252b 9578 /* VEX_W_0FD8_P_2 */
6c30d220 9579 { "vpsubusb", { XM, Vex, EXx } },
9e30b8e0
L
9580 },
9581 {
592a252b 9582 /* VEX_W_0FD9_P_2 */
6c30d220 9583 { "vpsubusw", { XM, Vex, EXx } },
9e30b8e0
L
9584 },
9585 {
592a252b 9586 /* VEX_W_0FDA_P_2 */
6c30d220 9587 { "vpminub", { XM, Vex, EXx } },
9e30b8e0
L
9588 },
9589 {
592a252b 9590 /* VEX_W_0FDB_P_2 */
6c30d220 9591 { "vpand", { XM, Vex, EXx } },
9e30b8e0
L
9592 },
9593 {
592a252b 9594 /* VEX_W_0FDC_P_2 */
6c30d220 9595 { "vpaddusb", { XM, Vex, EXx } },
9e30b8e0
L
9596 },
9597 {
592a252b 9598 /* VEX_W_0FDD_P_2 */
6c30d220 9599 { "vpaddusw", { XM, Vex, EXx } },
9e30b8e0
L
9600 },
9601 {
592a252b 9602 /* VEX_W_0FDE_P_2 */
6c30d220 9603 { "vpmaxub", { XM, Vex, EXx } },
9e30b8e0
L
9604 },
9605 {
592a252b 9606 /* VEX_W_0FDF_P_2 */
6c30d220 9607 { "vpandn", { XM, Vex, EXx } },
9e30b8e0
L
9608 },
9609 {
592a252b 9610 /* VEX_W_0FE0_P_2 */
6c30d220 9611 { "vpavgb", { XM, Vex, EXx } },
9e30b8e0
L
9612 },
9613 {
592a252b 9614 /* VEX_W_0FE1_P_2 */
6c30d220 9615 { "vpsraw", { XM, Vex, EXxmm } },
9e30b8e0
L
9616 },
9617 {
592a252b 9618 /* VEX_W_0FE2_P_2 */
6c30d220 9619 { "vpsrad", { XM, Vex, EXxmm } },
9e30b8e0
L
9620 },
9621 {
592a252b 9622 /* VEX_W_0FE3_P_2 */
6c30d220 9623 { "vpavgw", { XM, Vex, EXx } },
9e30b8e0
L
9624 },
9625 {
592a252b 9626 /* VEX_W_0FE4_P_2 */
6c30d220 9627 { "vpmulhuw", { XM, Vex, EXx } },
9e30b8e0
L
9628 },
9629 {
592a252b 9630 /* VEX_W_0FE5_P_2 */
6c30d220 9631 { "vpmulhw", { XM, Vex, EXx } },
9e30b8e0
L
9632 },
9633 {
592a252b 9634 /* VEX_W_0FE6_P_1 */
efdb52b7 9635 { "vcvtdq2pd", { XM, EXxmmq } },
9e30b8e0
L
9636 },
9637 {
592a252b 9638 /* VEX_W_0FE6_P_2 */
a179a9fd 9639 { "vcvttpd2dq%XY", { XMM, EXx } },
9e30b8e0
L
9640 },
9641 {
592a252b 9642 /* VEX_W_0FE6_P_3 */
a179a9fd 9643 { "vcvtpd2dq%XY", { XMM, EXx } },
9e30b8e0
L
9644 },
9645 {
592a252b 9646 /* VEX_W_0FE7_P_2_M_0 */
9e30b8e0 9647 { "vmovntdq", { Mx, XM } },
9e30b8e0
L
9648 },
9649 {
592a252b 9650 /* VEX_W_0FE8_P_2 */
6c30d220 9651 { "vpsubsb", { XM, Vex, EXx } },
9e30b8e0
L
9652 },
9653 {
592a252b 9654 /* VEX_W_0FE9_P_2 */
6c30d220 9655 { "vpsubsw", { XM, Vex, EXx } },
9e30b8e0
L
9656 },
9657 {
592a252b 9658 /* VEX_W_0FEA_P_2 */
6c30d220 9659 { "vpminsw", { XM, Vex, EXx } },
9e30b8e0
L
9660 },
9661 {
592a252b 9662 /* VEX_W_0FEB_P_2 */
6c30d220 9663 { "vpor", { XM, Vex, EXx } },
9e30b8e0
L
9664 },
9665 {
592a252b 9666 /* VEX_W_0FEC_P_2 */
6c30d220 9667 { "vpaddsb", { XM, Vex, EXx } },
9e30b8e0
L
9668 },
9669 {
592a252b 9670 /* VEX_W_0FED_P_2 */
6c30d220 9671 { "vpaddsw", { XM, Vex, EXx } },
9e30b8e0
L
9672 },
9673 {
592a252b 9674 /* VEX_W_0FEE_P_2 */
6c30d220 9675 { "vpmaxsw", { XM, Vex, EXx } },
9e30b8e0
L
9676 },
9677 {
592a252b 9678 /* VEX_W_0FEF_P_2 */
6c30d220 9679 { "vpxor", { XM, Vex, EXx } },
9e30b8e0
L
9680 },
9681 {
592a252b 9682 /* VEX_W_0FF0_P_3_M_0 */
9e30b8e0 9683 { "vlddqu", { XM, M } },
9e30b8e0
L
9684 },
9685 {
592a252b 9686 /* VEX_W_0FF1_P_2 */
6c30d220 9687 { "vpsllw", { XM, Vex, EXxmm } },
9e30b8e0
L
9688 },
9689 {
592a252b 9690 /* VEX_W_0FF2_P_2 */
6c30d220 9691 { "vpslld", { XM, Vex, EXxmm } },
9e30b8e0
L
9692 },
9693 {
592a252b 9694 /* VEX_W_0FF3_P_2 */
6c30d220 9695 { "vpsllq", { XM, Vex, EXxmm } },
9e30b8e0
L
9696 },
9697 {
592a252b 9698 /* VEX_W_0FF4_P_2 */
6c30d220 9699 { "vpmuludq", { XM, Vex, EXx } },
9e30b8e0
L
9700 },
9701 {
592a252b 9702 /* VEX_W_0FF5_P_2 */
6c30d220 9703 { "vpmaddwd", { XM, Vex, EXx } },
9e30b8e0
L
9704 },
9705 {
592a252b 9706 /* VEX_W_0FF6_P_2 */
6c30d220 9707 { "vpsadbw", { XM, Vex, EXx } },
9e30b8e0
L
9708 },
9709 {
592a252b 9710 /* VEX_W_0FF7_P_2 */
9e30b8e0 9711 { "vmaskmovdqu", { XM, XS } },
9e30b8e0
L
9712 },
9713 {
592a252b 9714 /* VEX_W_0FF8_P_2 */
6c30d220 9715 { "vpsubb", { XM, Vex, EXx } },
9e30b8e0
L
9716 },
9717 {
592a252b 9718 /* VEX_W_0FF9_P_2 */
6c30d220 9719 { "vpsubw", { XM, Vex, EXx } },
9e30b8e0
L
9720 },
9721 {
592a252b 9722 /* VEX_W_0FFA_P_2 */
6c30d220 9723 { "vpsubd", { XM, Vex, EXx } },
9e30b8e0
L
9724 },
9725 {
592a252b 9726 /* VEX_W_0FFB_P_2 */
6c30d220 9727 { "vpsubq", { XM, Vex, EXx } },
9e30b8e0
L
9728 },
9729 {
592a252b 9730 /* VEX_W_0FFC_P_2 */
6c30d220 9731 { "vpaddb", { XM, Vex, EXx } },
9e30b8e0
L
9732 },
9733 {
592a252b 9734 /* VEX_W_0FFD_P_2 */
6c30d220 9735 { "vpaddw", { XM, Vex, EXx } },
9e30b8e0
L
9736 },
9737 {
592a252b 9738 /* VEX_W_0FFE_P_2 */
6c30d220 9739 { "vpaddd", { XM, Vex, EXx } },
9e30b8e0
L
9740 },
9741 {
592a252b 9742 /* VEX_W_0F3800_P_2 */
6c30d220 9743 { "vpshufb", { XM, Vex, EXx } },
9e30b8e0
L
9744 },
9745 {
592a252b 9746 /* VEX_W_0F3801_P_2 */
6c30d220 9747 { "vphaddw", { XM, Vex, EXx } },
9e30b8e0
L
9748 },
9749 {
592a252b 9750 /* VEX_W_0F3802_P_2 */
6c30d220 9751 { "vphaddd", { XM, Vex, EXx } },
9e30b8e0
L
9752 },
9753 {
592a252b 9754 /* VEX_W_0F3803_P_2 */
6c30d220 9755 { "vphaddsw", { XM, Vex, EXx } },
9e30b8e0
L
9756 },
9757 {
592a252b 9758 /* VEX_W_0F3804_P_2 */
6c30d220 9759 { "vpmaddubsw", { XM, Vex, EXx } },
9e30b8e0
L
9760 },
9761 {
592a252b 9762 /* VEX_W_0F3805_P_2 */
6c30d220 9763 { "vphsubw", { XM, Vex, EXx } },
9e30b8e0
L
9764 },
9765 {
592a252b 9766 /* VEX_W_0F3806_P_2 */
6c30d220 9767 { "vphsubd", { XM, Vex, EXx } },
9e30b8e0
L
9768 },
9769 {
592a252b 9770 /* VEX_W_0F3807_P_2 */
6c30d220 9771 { "vphsubsw", { XM, Vex, EXx } },
9e30b8e0
L
9772 },
9773 {
592a252b 9774 /* VEX_W_0F3808_P_2 */
6c30d220 9775 { "vpsignb", { XM, Vex, EXx } },
9e30b8e0
L
9776 },
9777 {
592a252b 9778 /* VEX_W_0F3809_P_2 */
6c30d220 9779 { "vpsignw", { XM, Vex, EXx } },
9e30b8e0
L
9780 },
9781 {
592a252b 9782 /* VEX_W_0F380A_P_2 */
6c30d220 9783 { "vpsignd", { XM, Vex, EXx } },
9e30b8e0
L
9784 },
9785 {
592a252b 9786 /* VEX_W_0F380B_P_2 */
6c30d220 9787 { "vpmulhrsw", { XM, Vex, EXx } },
9e30b8e0
L
9788 },
9789 {
592a252b 9790 /* VEX_W_0F380C_P_2 */
9e30b8e0 9791 { "vpermilps", { XM, Vex, EXx } },
9e30b8e0
L
9792 },
9793 {
592a252b 9794 /* VEX_W_0F380D_P_2 */
9e30b8e0 9795 { "vpermilpd", { XM, Vex, EXx } },
9e30b8e0
L
9796 },
9797 {
592a252b 9798 /* VEX_W_0F380E_P_2 */
9e30b8e0 9799 { "vtestps", { XM, EXx } },
9e30b8e0
L
9800 },
9801 {
592a252b 9802 /* VEX_W_0F380F_P_2 */
9e30b8e0 9803 { "vtestpd", { XM, EXx } },
9e30b8e0 9804 },
6c30d220
L
9805 {
9806 /* VEX_W_0F3816_P_2 */
9807 { "vpermps", { XM, Vex, EXx } },
9808 },
9e30b8e0 9809 {
592a252b 9810 /* VEX_W_0F3817_P_2 */
9e30b8e0 9811 { "vptest", { XM, EXx } },
9e30b8e0 9812 },
bcf2684f 9813 {
6c30d220
L
9814 /* VEX_W_0F3818_P_2 */
9815 { "vbroadcastss", { XM, EXxmm_md } },
bcf2684f 9816 },
9e30b8e0 9817 {
6c30d220
L
9818 /* VEX_W_0F3819_P_2 */
9819 { "vbroadcastsd", { XM, EXxmm_mq } },
9e30b8e0
L
9820 },
9821 {
592a252b 9822 /* VEX_W_0F381A_P_2_M_0 */
9e30b8e0 9823 { "vbroadcastf128", { XM, Mxmm } },
9e30b8e0
L
9824 },
9825 {
592a252b 9826 /* VEX_W_0F381C_P_2 */
9e30b8e0 9827 { "vpabsb", { XM, EXx } },
9e30b8e0
L
9828 },
9829 {
592a252b 9830 /* VEX_W_0F381D_P_2 */
9e30b8e0 9831 { "vpabsw", { XM, EXx } },
9e30b8e0
L
9832 },
9833 {
592a252b 9834 /* VEX_W_0F381E_P_2 */
9e30b8e0 9835 { "vpabsd", { XM, EXx } },
9e30b8e0
L
9836 },
9837 {
592a252b 9838 /* VEX_W_0F3820_P_2 */
6c30d220 9839 { "vpmovsxbw", { XM, EXxmmq } },
9e30b8e0
L
9840 },
9841 {
592a252b 9842 /* VEX_W_0F3821_P_2 */
6c30d220 9843 { "vpmovsxbd", { XM, EXxmmqd } },
9e30b8e0
L
9844 },
9845 {
592a252b 9846 /* VEX_W_0F3822_P_2 */
6c30d220 9847 { "vpmovsxbq", { XM, EXxmmdw } },
9e30b8e0
L
9848 },
9849 {
592a252b 9850 /* VEX_W_0F3823_P_2 */
6c30d220 9851 { "vpmovsxwd", { XM, EXxmmq } },
9e30b8e0
L
9852 },
9853 {
592a252b 9854 /* VEX_W_0F3824_P_2 */
6c30d220 9855 { "vpmovsxwq", { XM, EXxmmqd } },
9e30b8e0
L
9856 },
9857 {
592a252b 9858 /* VEX_W_0F3825_P_2 */
6c30d220 9859 { "vpmovsxdq", { XM, EXxmmq } },
9e30b8e0
L
9860 },
9861 {
592a252b 9862 /* VEX_W_0F3828_P_2 */
6c30d220 9863 { "vpmuldq", { XM, Vex, EXx } },
9e30b8e0
L
9864 },
9865 {
592a252b 9866 /* VEX_W_0F3829_P_2 */
6c30d220 9867 { "vpcmpeqq", { XM, Vex, EXx } },
9e30b8e0
L
9868 },
9869 {
592a252b 9870 /* VEX_W_0F382A_P_2_M_0 */
9e30b8e0 9871 { "vmovntdqa", { XM, Mx } },
9e30b8e0
L
9872 },
9873 {
592a252b 9874 /* VEX_W_0F382B_P_2 */
6c30d220 9875 { "vpackusdw", { XM, Vex, EXx } },
9e30b8e0 9876 },
53aa04a0 9877 {
592a252b 9878 /* VEX_W_0F382C_P_2_M_0 */
53aa04a0 9879 { "vmaskmovps", { XM, Vex, Mx } },
53aa04a0
L
9880 },
9881 {
592a252b 9882 /* VEX_W_0F382D_P_2_M_0 */
53aa04a0 9883 { "vmaskmovpd", { XM, Vex, Mx } },
53aa04a0
L
9884 },
9885 {
592a252b 9886 /* VEX_W_0F382E_P_2_M_0 */
53aa04a0 9887 { "vmaskmovps", { Mx, Vex, XM } },
53aa04a0
L
9888 },
9889 {
592a252b 9890 /* VEX_W_0F382F_P_2_M_0 */
53aa04a0 9891 { "vmaskmovpd", { Mx, Vex, XM } },
53aa04a0 9892 },
9e30b8e0 9893 {
592a252b 9894 /* VEX_W_0F3830_P_2 */
6c30d220 9895 { "vpmovzxbw", { XM, EXxmmq } },
9e30b8e0
L
9896 },
9897 {
592a252b 9898 /* VEX_W_0F3831_P_2 */
6c30d220 9899 { "vpmovzxbd", { XM, EXxmmqd } },
9e30b8e0
L
9900 },
9901 {
592a252b 9902 /* VEX_W_0F3832_P_2 */
6c30d220 9903 { "vpmovzxbq", { XM, EXxmmdw } },
9e30b8e0
L
9904 },
9905 {
592a252b 9906 /* VEX_W_0F3833_P_2 */
6c30d220 9907 { "vpmovzxwd", { XM, EXxmmq } },
9e30b8e0
L
9908 },
9909 {
592a252b 9910 /* VEX_W_0F3834_P_2 */
6c30d220 9911 { "vpmovzxwq", { XM, EXxmmqd } },
9e30b8e0
L
9912 },
9913 {
592a252b 9914 /* VEX_W_0F3835_P_2 */
6c30d220
L
9915 { "vpmovzxdq", { XM, EXxmmq } },
9916 },
9917 {
9918 /* VEX_W_0F3836_P_2 */
9919 { "vpermd", { XM, Vex, EXx } },
9e30b8e0
L
9920 },
9921 {
592a252b 9922 /* VEX_W_0F3837_P_2 */
6c30d220 9923 { "vpcmpgtq", { XM, Vex, EXx } },
9e30b8e0
L
9924 },
9925 {
592a252b 9926 /* VEX_W_0F3838_P_2 */
6c30d220 9927 { "vpminsb", { XM, Vex, EXx } },
9e30b8e0
L
9928 },
9929 {
592a252b 9930 /* VEX_W_0F3839_P_2 */
6c30d220 9931 { "vpminsd", { XM, Vex, EXx } },
9e30b8e0
L
9932 },
9933 {
592a252b 9934 /* VEX_W_0F383A_P_2 */
6c30d220 9935 { "vpminuw", { XM, Vex, EXx } },
9e30b8e0
L
9936 },
9937 {
592a252b 9938 /* VEX_W_0F383B_P_2 */
6c30d220 9939 { "vpminud", { XM, Vex, EXx } },
9e30b8e0
L
9940 },
9941 {
592a252b 9942 /* VEX_W_0F383C_P_2 */
6c30d220 9943 { "vpmaxsb", { XM, Vex, EXx } },
9e30b8e0
L
9944 },
9945 {
592a252b 9946 /* VEX_W_0F383D_P_2 */
6c30d220 9947 { "vpmaxsd", { XM, Vex, EXx } },
9e30b8e0
L
9948 },
9949 {
592a252b 9950 /* VEX_W_0F383E_P_2 */
6c30d220 9951 { "vpmaxuw", { XM, Vex, EXx } },
9e30b8e0
L
9952 },
9953 {
592a252b 9954 /* VEX_W_0F383F_P_2 */
6c30d220 9955 { "vpmaxud", { XM, Vex, EXx } },
9e30b8e0
L
9956 },
9957 {
592a252b 9958 /* VEX_W_0F3840_P_2 */
6c30d220 9959 { "vpmulld", { XM, Vex, EXx } },
9e30b8e0
L
9960 },
9961 {
592a252b 9962 /* VEX_W_0F3841_P_2 */
9e30b8e0 9963 { "vphminposuw", { XM, EXx } },
9e30b8e0 9964 },
6c30d220
L
9965 {
9966 /* VEX_W_0F3846_P_2 */
9967 { "vpsravd", { XM, Vex, EXx } },
9968 },
9969 {
9970 /* VEX_W_0F3858_P_2 */
9971 { "vpbroadcastd", { XM, EXxmm_md } },
9972 },
9973 {
9974 /* VEX_W_0F3859_P_2 */
9975 { "vpbroadcastq", { XM, EXxmm_mq } },
9976 },
9977 {
9978 /* VEX_W_0F385A_P_2_M_0 */
9979 { "vbroadcasti128", { XM, Mxmm } },
9980 },
9981 {
9982 /* VEX_W_0F3878_P_2 */
9983 { "vpbroadcastb", { XM, EXxmm_mb } },
9984 },
9985 {
9986 /* VEX_W_0F3879_P_2 */
9987 { "vpbroadcastw", { XM, EXxmm_mw } },
9988 },
9e30b8e0 9989 {
592a252b 9990 /* VEX_W_0F38DB_P_2 */
9e30b8e0 9991 { "vaesimc", { XM, EXx } },
9e30b8e0
L
9992 },
9993 {
592a252b 9994 /* VEX_W_0F38DC_P_2 */
9e30b8e0 9995 { "vaesenc", { XM, Vex128, EXx } },
9e30b8e0
L
9996 },
9997 {
592a252b 9998 /* VEX_W_0F38DD_P_2 */
9e30b8e0 9999 { "vaesenclast", { XM, Vex128, EXx } },
9e30b8e0
L
10000 },
10001 {
592a252b 10002 /* VEX_W_0F38DE_P_2 */
9e30b8e0 10003 { "vaesdec", { XM, Vex128, EXx } },
9e30b8e0
L
10004 },
10005 {
592a252b 10006 /* VEX_W_0F38DF_P_2 */
9e30b8e0 10007 { "vaesdeclast", { XM, Vex128, EXx } },
9e30b8e0 10008 },
6c30d220
L
10009 {
10010 /* VEX_W_0F3A00_P_2 */
10011 { Bad_Opcode },
10012 { "vpermq", { XM, EXx, Ib } },
10013 },
10014 {
10015 /* VEX_W_0F3A01_P_2 */
10016 { Bad_Opcode },
10017 { "vpermpd", { XM, EXx, Ib } },
10018 },
10019 {
10020 /* VEX_W_0F3A02_P_2 */
10021 { "vpblendd", { XM, Vex, EXx, Ib } },
10022 },
9e30b8e0 10023 {
592a252b 10024 /* VEX_W_0F3A04_P_2 */
9e30b8e0 10025 { "vpermilps", { XM, EXx, Ib } },
9e30b8e0
L
10026 },
10027 {
592a252b 10028 /* VEX_W_0F3A05_P_2 */
9e30b8e0 10029 { "vpermilpd", { XM, EXx, Ib } },
9e30b8e0
L
10030 },
10031 {
592a252b 10032 /* VEX_W_0F3A06_P_2 */
9e30b8e0 10033 { "vperm2f128", { XM, Vex256, EXx, Ib } },
9e30b8e0
L
10034 },
10035 {
592a252b 10036 /* VEX_W_0F3A08_P_2 */
9e30b8e0 10037 { "vroundps", { XM, EXx, Ib } },
9e30b8e0
L
10038 },
10039 {
592a252b 10040 /* VEX_W_0F3A09_P_2 */
9e30b8e0 10041 { "vroundpd", { XM, EXx, Ib } },
9e30b8e0
L
10042 },
10043 {
592a252b 10044 /* VEX_W_0F3A0A_P_2 */
539f890d 10045 { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib } },
9e30b8e0
L
10046 },
10047 {
592a252b 10048 /* VEX_W_0F3A0B_P_2 */
539f890d 10049 { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib } },
9e30b8e0
L
10050 },
10051 {
592a252b 10052 /* VEX_W_0F3A0C_P_2 */
9e30b8e0 10053 { "vblendps", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10054 },
10055 {
592a252b 10056 /* VEX_W_0F3A0D_P_2 */
9e30b8e0 10057 { "vblendpd", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10058 },
10059 {
592a252b 10060 /* VEX_W_0F3A0E_P_2 */
6c30d220 10061 { "vpblendw", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10062 },
10063 {
592a252b 10064 /* VEX_W_0F3A0F_P_2 */
6c30d220 10065 { "vpalignr", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10066 },
10067 {
592a252b 10068 /* VEX_W_0F3A14_P_2 */
9e30b8e0 10069 { "vpextrb", { Edqb, XM, Ib } },
9e30b8e0
L
10070 },
10071 {
592a252b 10072 /* VEX_W_0F3A15_P_2 */
9e30b8e0 10073 { "vpextrw", { Edqw, XM, Ib } },
9e30b8e0
L
10074 },
10075 {
592a252b 10076 /* VEX_W_0F3A18_P_2 */
9e30b8e0 10077 { "vinsertf128", { XM, Vex256, EXxmm, Ib } },
9e30b8e0
L
10078 },
10079 {
592a252b 10080 /* VEX_W_0F3A19_P_2 */
9e30b8e0 10081 { "vextractf128", { EXxmm, XM, Ib } },
9e30b8e0
L
10082 },
10083 {
592a252b 10084 /* VEX_W_0F3A20_P_2 */
9e30b8e0 10085 { "vpinsrb", { XM, Vex128, Edqb, Ib } },
9e30b8e0
L
10086 },
10087 {
592a252b 10088 /* VEX_W_0F3A21_P_2 */
9e30b8e0 10089 { "vinsertps", { XM, Vex128, EXd, Ib } },
9e30b8e0 10090 },
6c30d220
L
10091 {
10092 /* VEX_W_0F3A38_P_2 */
10093 { "vinserti128", { XM, Vex256, EXxmm, Ib } },
10094 },
10095 {
10096 /* VEX_W_0F3A39_P_2 */
10097 { "vextracti128", { EXxmm, XM, Ib } },
10098 },
9e30b8e0 10099 {
592a252b 10100 /* VEX_W_0F3A40_P_2 */
9e30b8e0 10101 { "vdpps", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10102 },
10103 {
592a252b 10104 /* VEX_W_0F3A41_P_2 */
9e30b8e0 10105 { "vdppd", { XM, Vex128, EXx, Ib } },
9e30b8e0
L
10106 },
10107 {
592a252b 10108 /* VEX_W_0F3A42_P_2 */
6c30d220 10109 { "vmpsadbw", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10110 },
10111 {
592a252b 10112 /* VEX_W_0F3A44_P_2 */
9e30b8e0 10113 { "vpclmulqdq", { XM, Vex128, EXx, PCLMUL } },
9e30b8e0 10114 },
6c30d220
L
10115 {
10116 /* VEX_W_0F3A46_P_2 */
10117 { "vperm2i128", { XM, Vex256, EXx, Ib } },
10118 },
a683cc34 10119 {
592a252b 10120 /* VEX_W_0F3A48_P_2 */
a683cc34
SP
10121 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10122 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10123 },
10124 {
592a252b 10125 /* VEX_W_0F3A49_P_2 */
a683cc34
SP
10126 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10127 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10128 },
9e30b8e0 10129 {
592a252b 10130 /* VEX_W_0F3A4A_P_2 */
9e30b8e0 10131 { "vblendvps", { XM, Vex, EXx, XMVexI4 } },
9e30b8e0
L
10132 },
10133 {
592a252b 10134 /* VEX_W_0F3A4B_P_2 */
9e30b8e0 10135 { "vblendvpd", { XM, Vex, EXx, XMVexI4 } },
9e30b8e0
L
10136 },
10137 {
592a252b 10138 /* VEX_W_0F3A4C_P_2 */
6c30d220 10139 { "vpblendvb", { XM, Vex, EXx, XMVexI4 } },
9e30b8e0
L
10140 },
10141 {
592a252b 10142 /* VEX_W_0F3A60_P_2 */
9e30b8e0 10143 { "vpcmpestrm", { XM, EXx, Ib } },
9e30b8e0
L
10144 },
10145 {
592a252b 10146 /* VEX_W_0F3A61_P_2 */
9e30b8e0 10147 { "vpcmpestri", { XM, EXx, Ib } },
9e30b8e0
L
10148 },
10149 {
592a252b 10150 /* VEX_W_0F3A62_P_2 */
9e30b8e0 10151 { "vpcmpistrm", { XM, EXx, Ib } },
9e30b8e0
L
10152 },
10153 {
592a252b 10154 /* VEX_W_0F3A63_P_2 */
9e30b8e0 10155 { "vpcmpistri", { XM, EXx, Ib } },
9e30b8e0
L
10156 },
10157 {
592a252b 10158 /* VEX_W_0F3ADF_P_2 */
9e30b8e0 10159 { "vaeskeygenassist", { XM, EXx, Ib } },
9e30b8e0
L
10160 },
10161};
10162
10163static const struct dis386 mod_table[][2] = {
10164 {
10165 /* MOD_8D */
10166 { "leaS", { Gv, M } },
9e30b8e0 10167 },
42164a71
L
10168 {
10169 /* MOD_C6_REG_7 */
10170 { Bad_Opcode },
10171 { RM_TABLE (RM_C6_REG_7) },
10172 },
10173 {
10174 /* MOD_C7_REG_7 */
10175 { Bad_Opcode },
10176 { RM_TABLE (RM_C7_REG_7) },
10177 },
9e30b8e0
L
10178 {
10179 /* MOD_0F01_REG_0 */
10180 { X86_64_TABLE (X86_64_0F01_REG_0) },
10181 { RM_TABLE (RM_0F01_REG_0) },
10182 },
10183 {
10184 /* MOD_0F01_REG_1 */
10185 { X86_64_TABLE (X86_64_0F01_REG_1) },
10186 { RM_TABLE (RM_0F01_REG_1) },
10187 },
10188 {
10189 /* MOD_0F01_REG_2 */
10190 { X86_64_TABLE (X86_64_0F01_REG_2) },
10191 { RM_TABLE (RM_0F01_REG_2) },
10192 },
10193 {
10194 /* MOD_0F01_REG_3 */
10195 { X86_64_TABLE (X86_64_0F01_REG_3) },
10196 { RM_TABLE (RM_0F01_REG_3) },
10197 },
10198 {
10199 /* MOD_0F01_REG_7 */
10200 { "invlpg", { Mb } },
10201 { RM_TABLE (RM_0F01_REG_7) },
10202 },
10203 {
10204 /* MOD_0F12_PREFIX_0 */
10205 { "movlps", { XM, EXq } },
10206 { "movhlps", { XM, EXq } },
10207 },
10208 {
10209 /* MOD_0F13 */
10210 { "movlpX", { EXq, XM } },
9e30b8e0
L
10211 },
10212 {
10213 /* MOD_0F16_PREFIX_0 */
10214 { "movhps", { XM, EXq } },
10215 { "movlhps", { XM, EXq } },
10216 },
10217 {
10218 /* MOD_0F17 */
10219 { "movhpX", { EXq, XM } },
9e30b8e0
L
10220 },
10221 {
10222 /* MOD_0F18_REG_0 */
10223 { "prefetchnta", { Mb } },
9e30b8e0
L
10224 },
10225 {
10226 /* MOD_0F18_REG_1 */
10227 { "prefetcht0", { Mb } },
9e30b8e0
L
10228 },
10229 {
10230 /* MOD_0F18_REG_2 */
10231 { "prefetcht1", { Mb } },
9e30b8e0
L
10232 },
10233 {
10234 /* MOD_0F18_REG_3 */
10235 { "prefetcht2", { Mb } },
9e30b8e0 10236 },
d7189fa5
RM
10237 {
10238 /* MOD_0F18_REG_4 */
10239 { "nop/reserved", { Mb } },
10240 },
10241 {
10242 /* MOD_0F18_REG_5 */
10243 { "nop/reserved", { Mb } },
10244 },
10245 {
10246 /* MOD_0F18_REG_6 */
10247 { "nop/reserved", { Mb } },
10248 },
10249 {
10250 /* MOD_0F18_REG_7 */
10251 { "nop/reserved", { Mb } },
10252 },
9e30b8e0
L
10253 {
10254 /* MOD_0F20 */
592d1631 10255 { Bad_Opcode },
9e30b8e0
L
10256 { "movZ", { Rm, Cm } },
10257 },
10258 {
10259 /* MOD_0F21 */
592d1631 10260 { Bad_Opcode },
9e30b8e0
L
10261 { "movZ", { Rm, Dm } },
10262 },
10263 {
10264 /* MOD_0F22 */
592d1631 10265 { Bad_Opcode },
9e30b8e0 10266 { "movZ", { Cm, Rm } },
b844680a
L
10267 },
10268 {
92fddf8e 10269 /* MOD_0F23 */
592d1631 10270 { Bad_Opcode },
92fddf8e 10271 { "movZ", { Dm, Rm } },
b844680a
L
10272 },
10273 {
92fddf8e 10274 /* MOD_0F24 */
7bb15c6f 10275 { Bad_Opcode },
92fddf8e 10276 { "movL", { Rd, Td } },
b844680a
L
10277 },
10278 {
92fddf8e 10279 /* MOD_0F26 */
592d1631 10280 { Bad_Opcode },
92fddf8e 10281 { "movL", { Td, Rd } },
b844680a 10282 },
75c135a8
L
10283 {
10284 /* MOD_0F2B_PREFIX_0 */
4ee52178 10285 {"movntps", { Mx, XM } },
75c135a8
L
10286 },
10287 {
10288 /* MOD_0F2B_PREFIX_1 */
4ee52178 10289 {"movntss", { Md, XM } },
75c135a8
L
10290 },
10291 {
10292 /* MOD_0F2B_PREFIX_2 */
4ee52178 10293 {"movntpd", { Mx, XM } },
75c135a8
L
10294 },
10295 {
10296 /* MOD_0F2B_PREFIX_3 */
4ee52178 10297 {"movntsd", { Mq, XM } },
75c135a8
L
10298 },
10299 {
10300 /* MOD_0F51 */
592d1631 10301 { Bad_Opcode },
75c135a8
L
10302 { "movmskpX", { Gdq, XS } },
10303 },
b844680a 10304 {
1ceb70f8 10305 /* MOD_0F71_REG_2 */
592d1631 10306 { Bad_Opcode },
4e7d34a6 10307 { "psrlw", { MS, Ib } },
b844680a
L
10308 },
10309 {
1ceb70f8 10310 /* MOD_0F71_REG_4 */
592d1631 10311 { Bad_Opcode },
4e7d34a6 10312 { "psraw", { MS, Ib } },
b844680a
L
10313 },
10314 {
1ceb70f8 10315 /* MOD_0F71_REG_6 */
592d1631 10316 { Bad_Opcode },
4e7d34a6 10317 { "psllw", { MS, Ib } },
b844680a
L
10318 },
10319 {
1ceb70f8 10320 /* MOD_0F72_REG_2 */
592d1631 10321 { Bad_Opcode },
4e7d34a6 10322 { "psrld", { MS, Ib } },
b844680a
L
10323 },
10324 {
1ceb70f8 10325 /* MOD_0F72_REG_4 */
592d1631 10326 { Bad_Opcode },
4e7d34a6 10327 { "psrad", { MS, Ib } },
b844680a
L
10328 },
10329 {
1ceb70f8 10330 /* MOD_0F72_REG_6 */
592d1631 10331 { Bad_Opcode },
4e7d34a6 10332 { "pslld", { MS, Ib } },
b844680a
L
10333 },
10334 {
1ceb70f8 10335 /* MOD_0F73_REG_2 */
592d1631 10336 { Bad_Opcode },
4e7d34a6 10337 { "psrlq", { MS, Ib } },
b844680a
L
10338 },
10339 {
1ceb70f8 10340 /* MOD_0F73_REG_3 */
592d1631 10341 { Bad_Opcode },
c0f3af97
L
10342 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
10343 },
10344 {
10345 /* MOD_0F73_REG_6 */
592d1631 10346 { Bad_Opcode },
c0f3af97
L
10347 { "psllq", { MS, Ib } },
10348 },
10349 {
10350 /* MOD_0F73_REG_7 */
592d1631 10351 { Bad_Opcode },
c0f3af97
L
10352 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
10353 },
10354 {
10355 /* MOD_0FAE_REG_0 */
eacc9c89 10356 { "fxsave", { FXSAVE } },
c7b8aa3a 10357 { PREFIX_TABLE (PREFIX_0FAE_REG_0) },
c0f3af97
L
10358 },
10359 {
10360 /* MOD_0FAE_REG_1 */
eacc9c89 10361 { "fxrstor", { FXSAVE } },
c7b8aa3a 10362 { PREFIX_TABLE (PREFIX_0FAE_REG_1) },
c0f3af97
L
10363 },
10364 {
10365 /* MOD_0FAE_REG_2 */
10366 { "ldmxcsr", { Md } },
c7b8aa3a 10367 { PREFIX_TABLE (PREFIX_0FAE_REG_2) },
c0f3af97
L
10368 },
10369 {
10370 /* MOD_0FAE_REG_3 */
10371 { "stmxcsr", { Md } },
c7b8aa3a 10372 { PREFIX_TABLE (PREFIX_0FAE_REG_3) },
c0f3af97
L
10373 },
10374 {
10375 /* MOD_0FAE_REG_4 */
73bb6729 10376 { "xsave", { FXSAVE } },
c0f3af97
L
10377 },
10378 {
10379 /* MOD_0FAE_REG_5 */
73bb6729 10380 { "xrstor", { FXSAVE } },
c0f3af97
L
10381 { RM_TABLE (RM_0FAE_REG_5) },
10382 },
10383 {
10384 /* MOD_0FAE_REG_6 */
c7b8aa3a 10385 { "xsaveopt", { FXSAVE } },
c0f3af97
L
10386 { RM_TABLE (RM_0FAE_REG_6) },
10387 },
10388 {
10389 /* MOD_0FAE_REG_7 */
10390 { "clflush", { Mb } },
10391 { RM_TABLE (RM_0FAE_REG_7) },
10392 },
10393 {
10394 /* MOD_0FB2 */
10395 { "lssS", { Gv, Mp } },
c0f3af97
L
10396 },
10397 {
10398 /* MOD_0FB4 */
10399 { "lfsS", { Gv, Mp } },
c0f3af97
L
10400 },
10401 {
10402 /* MOD_0FB5 */
10403 { "lgsS", { Gv, Mp } },
c0f3af97
L
10404 },
10405 {
10406 /* MOD_0FC7_REG_6 */
10407 { PREFIX_TABLE (PREFIX_0FC7_REG_6) },
d7d9a9f8 10408 { "rdrand", { Ev } },
c0f3af97
L
10409 },
10410 {
10411 /* MOD_0FC7_REG_7 */
10412 { "vmptrst", { Mq } },
e2e1fcde 10413 { "rdseed", { Ev } },
c0f3af97
L
10414 },
10415 {
10416 /* MOD_0FD7 */
592d1631 10417 { Bad_Opcode },
c0f3af97
L
10418 { "pmovmskb", { Gdq, MS } },
10419 },
10420 {
10421 /* MOD_0FE7_PREFIX_2 */
10422 { "movntdq", { Mx, XM } },
c0f3af97
L
10423 },
10424 {
10425 /* MOD_0FF0_PREFIX_3 */
10426 { "lddqu", { XM, M } },
c0f3af97
L
10427 },
10428 {
10429 /* MOD_0F382A_PREFIX_2 */
10430 { "movntdqa", { XM, Mx } },
c0f3af97
L
10431 },
10432 {
10433 /* MOD_62_32BIT */
10434 { "bound{S|}", { Gv, Ma } },
c0f3af97
L
10435 },
10436 {
10437 /* MOD_C4_32BIT */
10438 { "lesS", { Gv, Mp } },
10439 { VEX_C4_TABLE (VEX_0F) },
10440 },
10441 {
10442 /* MOD_C5_32BIT */
10443 { "ldsS", { Gv, Mp } },
10444 { VEX_C5_TABLE (VEX_0F) },
10445 },
10446 {
592a252b
L
10447 /* MOD_VEX_0F12_PREFIX_0 */
10448 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
10449 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
c0f3af97
L
10450 },
10451 {
592a252b
L
10452 /* MOD_VEX_0F13 */
10453 { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
c0f3af97
L
10454 },
10455 {
592a252b
L
10456 /* MOD_VEX_0F16_PREFIX_0 */
10457 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
10458 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
c0f3af97
L
10459 },
10460 {
592a252b
L
10461 /* MOD_VEX_0F17 */
10462 { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
c0f3af97
L
10463 },
10464 {
592a252b
L
10465 /* MOD_VEX_0F2B */
10466 { VEX_W_TABLE (VEX_W_0F2B_M_0) },
c0f3af97
L
10467 },
10468 {
592a252b 10469 /* MOD_VEX_0F50 */
592d1631 10470 { Bad_Opcode },
592a252b 10471 { VEX_W_TABLE (VEX_W_0F50_M_0) },
c0f3af97
L
10472 },
10473 {
592a252b 10474 /* MOD_VEX_0F71_REG_2 */
592d1631 10475 { Bad_Opcode },
592a252b 10476 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
b844680a
L
10477 },
10478 {
592a252b 10479 /* MOD_VEX_0F71_REG_4 */
592d1631 10480 { Bad_Opcode },
592a252b 10481 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
b844680a
L
10482 },
10483 {
592a252b 10484 /* MOD_VEX_0F71_REG_6 */
592d1631 10485 { Bad_Opcode },
592a252b 10486 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
b844680a
L
10487 },
10488 {
592a252b 10489 /* MOD_VEX_0F72_REG_2 */
592d1631 10490 { Bad_Opcode },
592a252b 10491 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
b844680a 10492 },
d8faab4e 10493 {
592a252b 10494 /* MOD_VEX_0F72_REG_4 */
592d1631 10495 { Bad_Opcode },
592a252b 10496 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
d8faab4e
L
10497 },
10498 {
592a252b 10499 /* MOD_VEX_0F72_REG_6 */
592d1631 10500 { Bad_Opcode },
592a252b 10501 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
d8faab4e 10502 },
876d4bfa 10503 {
592a252b 10504 /* MOD_VEX_0F73_REG_2 */
592d1631 10505 { Bad_Opcode },
592a252b 10506 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
876d4bfa
L
10507 },
10508 {
592a252b 10509 /* MOD_VEX_0F73_REG_3 */
592d1631 10510 { Bad_Opcode },
592a252b 10511 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
475a2301
L
10512 },
10513 {
592a252b 10514 /* MOD_VEX_0F73_REG_6 */
592d1631 10515 { Bad_Opcode },
592a252b 10516 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
876d4bfa
L
10517 },
10518 {
592a252b 10519 /* MOD_VEX_0F73_REG_7 */
592d1631 10520 { Bad_Opcode },
592a252b 10521 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
876d4bfa
L
10522 },
10523 {
592a252b
L
10524 /* MOD_VEX_0FAE_REG_2 */
10525 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
876d4bfa 10526 },
bbedc832 10527 {
592a252b
L
10528 /* MOD_VEX_0FAE_REG_3 */
10529 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
bbedc832 10530 },
144c41d9 10531 {
592a252b 10532 /* MOD_VEX_0FD7_PREFIX_2 */
592d1631 10533 { Bad_Opcode },
6c30d220 10534 { VEX_W_TABLE (VEX_W_0FD7_P_2_M_1) },
144c41d9 10535 },
1afd85e3 10536 {
592a252b
L
10537 /* MOD_VEX_0FE7_PREFIX_2 */
10538 { VEX_W_TABLE (VEX_W_0FE7_P_2_M_0) },
1afd85e3
L
10539 },
10540 {
592a252b
L
10541 /* MOD_VEX_0FF0_PREFIX_3 */
10542 { VEX_W_TABLE (VEX_W_0FF0_P_3_M_0) },
92fddf8e 10543 },
75c135a8 10544 {
592a252b
L
10545 /* MOD_VEX_0F381A_PREFIX_2 */
10546 { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
75c135a8 10547 },
1afd85e3 10548 {
592a252b 10549 /* MOD_VEX_0F382A_PREFIX_2 */
6c30d220 10550 { VEX_W_TABLE (VEX_W_0F382A_P_2_M_0) },
1afd85e3 10551 },
75c135a8 10552 {
592a252b
L
10553 /* MOD_VEX_0F382C_PREFIX_2 */
10554 { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
75c135a8 10555 },
1afd85e3 10556 {
592a252b
L
10557 /* MOD_VEX_0F382D_PREFIX_2 */
10558 { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
1afd85e3
L
10559 },
10560 {
592a252b
L
10561 /* MOD_VEX_0F382E_PREFIX_2 */
10562 { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
1afd85e3
L
10563 },
10564 {
592a252b
L
10565 /* MOD_VEX_0F382F_PREFIX_2 */
10566 { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
1afd85e3 10567 },
6c30d220
L
10568 {
10569 /* MOD_VEX_0F385A_PREFIX_2 */
10570 { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) },
10571 },
10572 {
10573 /* MOD_VEX_0F388C_PREFIX_2 */
10574 { "vpmaskmov%LW", { XM, Vex, Mx } },
10575 },
10576 {
10577 /* MOD_VEX_0F388E_PREFIX_2 */
10578 { "vpmaskmov%LW", { Mx, Vex, XM } },
10579 },
b844680a
L
10580};
10581
1ceb70f8 10582static const struct dis386 rm_table[][8] = {
42164a71
L
10583 {
10584 /* RM_C6_REG_7 */
10585 { "xabort", { Skip_MODRM, Ib } },
10586 },
10587 {
10588 /* RM_C7_REG_7 */
10589 { "xbeginT", { Skip_MODRM, Jv } },
10590 },
b844680a 10591 {
1ceb70f8 10592 /* RM_0F01_REG_0 */
592d1631 10593 { Bad_Opcode },
b844680a
L
10594 { "vmcall", { Skip_MODRM } },
10595 { "vmlaunch", { Skip_MODRM } },
10596 { "vmresume", { Skip_MODRM } },
10597 { "vmxoff", { Skip_MODRM } },
b844680a
L
10598 },
10599 {
1ceb70f8 10600 /* RM_0F01_REG_1 */
b844680a
L
10601 { "monitor", { { OP_Monitor, 0 } } },
10602 { "mwait", { { OP_Mwait, 0 } } },
b844680a 10603 },
475a2301
L
10604 {
10605 /* RM_0F01_REG_2 */
10606 { "xgetbv", { Skip_MODRM } },
10607 { "xsetbv", { Skip_MODRM } },
8729a6f6
L
10608 { Bad_Opcode },
10609 { Bad_Opcode },
10610 { "vmfunc", { Skip_MODRM } },
42164a71
L
10611 { "xend", { Skip_MODRM } },
10612 { "xtest", { Skip_MODRM } },
10613 { Bad_Opcode },
475a2301 10614 },
b844680a 10615 {
1ceb70f8 10616 /* RM_0F01_REG_3 */
4e7d34a6
L
10617 { "vmrun", { Skip_MODRM } },
10618 { "vmmcall", { Skip_MODRM } },
10619 { "vmload", { Skip_MODRM } },
10620 { "vmsave", { Skip_MODRM } },
10621 { "stgi", { Skip_MODRM } },
10622 { "clgi", { Skip_MODRM } },
10623 { "skinit", { Skip_MODRM } },
10624 { "invlpga", { Skip_MODRM } },
10625 },
10626 {
1ceb70f8 10627 /* RM_0F01_REG_7 */
4e7d34a6
L
10628 { "swapgs", { Skip_MODRM } },
10629 { "rdtscp", { Skip_MODRM } },
b844680a
L
10630 },
10631 {
1ceb70f8 10632 /* RM_0FAE_REG_5 */
4e7d34a6 10633 { "lfence", { Skip_MODRM } },
b844680a
L
10634 },
10635 {
1ceb70f8 10636 /* RM_0FAE_REG_6 */
4e7d34a6 10637 { "mfence", { Skip_MODRM } },
b844680a 10638 },
bbedc832 10639 {
1ceb70f8 10640 /* RM_0FAE_REG_7 */
4e7d34a6 10641 { "sfence", { Skip_MODRM } },
144c41d9 10642 },
b844680a
L
10643};
10644
c608c12e
AM
10645#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
10646
f16cd0d5
L
10647/* We use the high bit to indicate different name for the same
10648 prefix. */
10649#define ADDR16_PREFIX (0x67 | 0x100)
10650#define ADDR32_PREFIX (0x67 | 0x200)
10651#define DATA16_PREFIX (0x66 | 0x100)
10652#define DATA32_PREFIX (0x66 | 0x200)
10653#define REP_PREFIX (0xf3 | 0x100)
42164a71
L
10654#define XACQUIRE_PREFIX (0xf2 | 0x200)
10655#define XRELEASE_PREFIX (0xf3 | 0x400)
f16cd0d5
L
10656
10657static int
26ca5450 10658ckprefix (void)
252b5132 10659{
f16cd0d5 10660 int newrex, i, length;
52b15da3 10661 rex = 0;
c0f3af97 10662 rex_ignored = 0;
252b5132 10663 prefixes = 0;
7d421014 10664 used_prefixes = 0;
52b15da3 10665 rex_used = 0;
f16cd0d5
L
10666 last_lock_prefix = -1;
10667 last_repz_prefix = -1;
10668 last_repnz_prefix = -1;
10669 last_data_prefix = -1;
10670 last_addr_prefix = -1;
10671 last_rex_prefix = -1;
10672 last_seg_prefix = -1;
f310f33d
L
10673 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
10674 all_prefixes[i] = 0;
10675 i = 0;
f16cd0d5
L
10676 length = 0;
10677 /* The maximum instruction length is 15bytes. */
10678 while (length < MAX_CODE_LENGTH - 1)
252b5132
RH
10679 {
10680 FETCH_DATA (the_info, codep + 1);
52b15da3 10681 newrex = 0;
252b5132
RH
10682 switch (*codep)
10683 {
52b15da3
JH
10684 /* REX prefixes family. */
10685 case 0x40:
10686 case 0x41:
10687 case 0x42:
10688 case 0x43:
10689 case 0x44:
10690 case 0x45:
10691 case 0x46:
10692 case 0x47:
10693 case 0x48:
10694 case 0x49:
10695 case 0x4a:
10696 case 0x4b:
10697 case 0x4c:
10698 case 0x4d:
10699 case 0x4e:
10700 case 0x4f:
f16cd0d5
L
10701 if (address_mode == mode_64bit)
10702 newrex = *codep;
10703 else
10704 return 1;
10705 last_rex_prefix = i;
52b15da3 10706 break;
252b5132
RH
10707 case 0xf3:
10708 prefixes |= PREFIX_REPZ;
f16cd0d5 10709 last_repz_prefix = i;
252b5132
RH
10710 break;
10711 case 0xf2:
10712 prefixes |= PREFIX_REPNZ;
f16cd0d5 10713 last_repnz_prefix = i;
252b5132
RH
10714 break;
10715 case 0xf0:
10716 prefixes |= PREFIX_LOCK;
f16cd0d5 10717 last_lock_prefix = i;
252b5132
RH
10718 break;
10719 case 0x2e:
10720 prefixes |= PREFIX_CS;
f16cd0d5 10721 last_seg_prefix = i;
252b5132
RH
10722 break;
10723 case 0x36:
10724 prefixes |= PREFIX_SS;
f16cd0d5 10725 last_seg_prefix = i;
252b5132
RH
10726 break;
10727 case 0x3e:
10728 prefixes |= PREFIX_DS;
f16cd0d5 10729 last_seg_prefix = i;
252b5132
RH
10730 break;
10731 case 0x26:
10732 prefixes |= PREFIX_ES;
f16cd0d5 10733 last_seg_prefix = i;
252b5132
RH
10734 break;
10735 case 0x64:
10736 prefixes |= PREFIX_FS;
f16cd0d5 10737 last_seg_prefix = i;
252b5132
RH
10738 break;
10739 case 0x65:
10740 prefixes |= PREFIX_GS;
f16cd0d5 10741 last_seg_prefix = i;
252b5132
RH
10742 break;
10743 case 0x66:
10744 prefixes |= PREFIX_DATA;
f16cd0d5 10745 last_data_prefix = i;
252b5132
RH
10746 break;
10747 case 0x67:
10748 prefixes |= PREFIX_ADDR;
f16cd0d5 10749 last_addr_prefix = i;
252b5132 10750 break;
5076851f 10751 case FWAIT_OPCODE:
252b5132
RH
10752 /* fwait is really an instruction. If there are prefixes
10753 before the fwait, they belong to the fwait, *not* to the
10754 following instruction. */
3e7d61b2 10755 if (prefixes || rex)
252b5132
RH
10756 {
10757 prefixes |= PREFIX_FWAIT;
10758 codep++;
6c067bbb
RM
10759 /* This ensures that the previous REX prefixes are noticed
10760 as unused prefixes, as in the return case below. */
10761 rex_used = rex;
f16cd0d5 10762 return 1;
252b5132
RH
10763 }
10764 prefixes = PREFIX_FWAIT;
10765 break;
10766 default:
f16cd0d5 10767 return 1;
252b5132 10768 }
52b15da3
JH
10769 /* Rex is ignored when followed by another prefix. */
10770 if (rex)
10771 {
3e7d61b2 10772 rex_used = rex;
f16cd0d5 10773 return 1;
52b15da3 10774 }
f16cd0d5
L
10775 if (*codep != FWAIT_OPCODE)
10776 all_prefixes[i++] = *codep;
52b15da3 10777 rex = newrex;
252b5132 10778 codep++;
f16cd0d5
L
10779 length++;
10780 }
10781 return 0;
10782}
10783
10784static int
10785seg_prefix (int pref)
10786{
10787 switch (pref)
10788 {
10789 case 0x2e:
10790 return PREFIX_CS;
10791 case 0x36:
10792 return PREFIX_SS;
10793 case 0x3e:
10794 return PREFIX_DS;
10795 case 0x26:
10796 return PREFIX_ES;
10797 case 0x64:
10798 return PREFIX_FS;
10799 case 0x65:
10800 return PREFIX_GS;
10801 default:
10802 return 0;
252b5132
RH
10803 }
10804}
10805
7d421014
ILT
10806/* Return the name of the prefix byte PREF, or NULL if PREF is not a
10807 prefix byte. */
10808
10809static const char *
26ca5450 10810prefix_name (int pref, int sizeflag)
7d421014 10811{
0003779b
L
10812 static const char *rexes [16] =
10813 {
10814 "rex", /* 0x40 */
10815 "rex.B", /* 0x41 */
10816 "rex.X", /* 0x42 */
10817 "rex.XB", /* 0x43 */
10818 "rex.R", /* 0x44 */
10819 "rex.RB", /* 0x45 */
10820 "rex.RX", /* 0x46 */
10821 "rex.RXB", /* 0x47 */
10822 "rex.W", /* 0x48 */
10823 "rex.WB", /* 0x49 */
10824 "rex.WX", /* 0x4a */
10825 "rex.WXB", /* 0x4b */
10826 "rex.WR", /* 0x4c */
10827 "rex.WRB", /* 0x4d */
10828 "rex.WRX", /* 0x4e */
10829 "rex.WRXB", /* 0x4f */
10830 };
10831
7d421014
ILT
10832 switch (pref)
10833 {
52b15da3
JH
10834 /* REX prefixes family. */
10835 case 0x40:
52b15da3 10836 case 0x41:
52b15da3 10837 case 0x42:
52b15da3 10838 case 0x43:
52b15da3 10839 case 0x44:
52b15da3 10840 case 0x45:
52b15da3 10841 case 0x46:
52b15da3 10842 case 0x47:
52b15da3 10843 case 0x48:
52b15da3 10844 case 0x49:
52b15da3 10845 case 0x4a:
52b15da3 10846 case 0x4b:
52b15da3 10847 case 0x4c:
52b15da3 10848 case 0x4d:
52b15da3 10849 case 0x4e:
52b15da3 10850 case 0x4f:
0003779b 10851 return rexes [pref - 0x40];
7d421014
ILT
10852 case 0xf3:
10853 return "repz";
10854 case 0xf2:
10855 return "repnz";
10856 case 0xf0:
10857 return "lock";
10858 case 0x2e:
10859 return "cs";
10860 case 0x36:
10861 return "ss";
10862 case 0x3e:
10863 return "ds";
10864 case 0x26:
10865 return "es";
10866 case 0x64:
10867 return "fs";
10868 case 0x65:
10869 return "gs";
10870 case 0x66:
10871 return (sizeflag & DFLAG) ? "data16" : "data32";
10872 case 0x67:
cb712a9e 10873 if (address_mode == mode_64bit)
db6eb5be 10874 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 10875 else
2888cb7a 10876 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
10877 case FWAIT_OPCODE:
10878 return "fwait";
f16cd0d5
L
10879 case ADDR16_PREFIX:
10880 return "addr16";
10881 case ADDR32_PREFIX:
10882 return "addr32";
10883 case DATA16_PREFIX:
10884 return "data16";
10885 case DATA32_PREFIX:
10886 return "data32";
10887 case REP_PREFIX:
10888 return "rep";
42164a71
L
10889 case XACQUIRE_PREFIX:
10890 return "xacquire";
10891 case XRELEASE_PREFIX:
10892 return "xrelease";
7d421014
ILT
10893 default:
10894 return NULL;
10895 }
10896}
10897
ce518a5f
L
10898static char op_out[MAX_OPERANDS][100];
10899static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 10900static int two_source_ops;
ce518a5f
L
10901static bfd_vma op_address[MAX_OPERANDS];
10902static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 10903static bfd_vma start_pc;
ce518a5f 10904
252b5132
RH
10905/*
10906 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
10907 * (see topic "Redundant prefixes" in the "Differences from 8086"
10908 * section of the "Virtual 8086 Mode" chapter.)
10909 * 'pc' should be the address of this instruction, it will
10910 * be used to print the target address if this is a relative jump or call
10911 * The function returns the length of this instruction in bytes.
10912 */
10913
252b5132 10914static char intel_syntax;
9d141669 10915static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
10916static char open_char;
10917static char close_char;
10918static char separator_char;
10919static char scale_char;
10920
e396998b
AM
10921/* Here for backwards compatibility. When gdb stops using
10922 print_insn_i386_att and print_insn_i386_intel these functions can
10923 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 10924int
26ca5450 10925print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
10926{
10927 intel_syntax = 0;
e396998b
AM
10928
10929 return print_insn (pc, info);
252b5132
RH
10930}
10931
10932int
26ca5450 10933print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
10934{
10935 intel_syntax = 1;
e396998b
AM
10936
10937 return print_insn (pc, info);
252b5132
RH
10938}
10939
e396998b 10940int
26ca5450 10941print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
10942{
10943 intel_syntax = -1;
10944
10945 return print_insn (pc, info);
10946}
10947
f59a29b9
L
10948void
10949print_i386_disassembler_options (FILE *stream)
10950{
10951 fprintf (stream, _("\n\
10952The following i386/x86-64 specific disassembler options are supported for use\n\
10953with the -M switch (multiple options should be separated by commas):\n"));
10954
10955 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
10956 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
10957 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
10958 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
10959 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
10960 fprintf (stream, _(" att-mnemonic\n"
10961 " Display instruction in AT&T mnemonic\n"));
10962 fprintf (stream, _(" intel-mnemonic\n"
10963 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
10964 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
10965 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
10966 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
10967 fprintf (stream, _(" data32 Assume 32bit data size\n"));
10968 fprintf (stream, _(" data16 Assume 16bit data size\n"));
10969 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
10970}
10971
592d1631
L
10972/* Bad opcode. */
10973static const struct dis386 bad_opcode = { "(bad)", { XX } };
10974
b844680a
L
10975/* Get a pointer to struct dis386 with a valid name. */
10976
10977static const struct dis386 *
8bb15339 10978get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 10979{
91d6fa6a 10980 int vindex, vex_table_index;
b844680a
L
10981
10982 if (dp->name != NULL)
10983 return dp;
10984
10985 switch (dp->op[0].bytemode)
10986 {
1ceb70f8
L
10987 case USE_REG_TABLE:
10988 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
10989 break;
10990
10991 case USE_MOD_TABLE:
91d6fa6a
NC
10992 vindex = modrm.mod == 0x3 ? 1 : 0;
10993 dp = &mod_table[dp->op[1].bytemode][vindex];
1ceb70f8
L
10994 break;
10995
10996 case USE_RM_TABLE:
10997 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
10998 break;
10999
4e7d34a6 11000 case USE_PREFIX_TABLE:
c0f3af97 11001 if (need_vex)
b844680a 11002 {
c0f3af97
L
11003 /* The prefix in VEX is implicit. */
11004 switch (vex.prefix)
11005 {
11006 case 0:
91d6fa6a 11007 vindex = 0;
c0f3af97
L
11008 break;
11009 case REPE_PREFIX_OPCODE:
91d6fa6a 11010 vindex = 1;
c0f3af97
L
11011 break;
11012 case DATA_PREFIX_OPCODE:
91d6fa6a 11013 vindex = 2;
c0f3af97
L
11014 break;
11015 case REPNE_PREFIX_OPCODE:
91d6fa6a 11016 vindex = 3;
c0f3af97
L
11017 break;
11018 default:
11019 abort ();
11020 break;
11021 }
b844680a 11022 }
7bb15c6f 11023 else
b844680a 11024 {
91d6fa6a 11025 vindex = 0;
c0f3af97
L
11026 used_prefixes |= (prefixes & PREFIX_REPZ);
11027 if (prefixes & PREFIX_REPZ)
b844680a 11028 {
91d6fa6a 11029 vindex = 1;
f16cd0d5 11030 all_prefixes[last_repz_prefix] = 0;
b844680a
L
11031 }
11032 else
11033 {
c0f3af97
L
11034 /* We should check PREFIX_REPNZ and PREFIX_REPZ before
11035 PREFIX_DATA. */
11036 used_prefixes |= (prefixes & PREFIX_REPNZ);
11037 if (prefixes & PREFIX_REPNZ)
11038 {
91d6fa6a 11039 vindex = 3;
f16cd0d5 11040 all_prefixes[last_repnz_prefix] = 0;
c0f3af97
L
11041 }
11042 else
b844680a 11043 {
c0f3af97
L
11044 used_prefixes |= (prefixes & PREFIX_DATA);
11045 if (prefixes & PREFIX_DATA)
11046 {
91d6fa6a 11047 vindex = 2;
f16cd0d5 11048 all_prefixes[last_data_prefix] = 0;
c0f3af97 11049 }
b844680a
L
11050 }
11051 }
11052 }
91d6fa6a 11053 dp = &prefix_table[dp->op[1].bytemode][vindex];
b844680a
L
11054 break;
11055
4e7d34a6 11056 case USE_X86_64_TABLE:
91d6fa6a
NC
11057 vindex = address_mode == mode_64bit ? 1 : 0;
11058 dp = &x86_64_table[dp->op[1].bytemode][vindex];
b844680a
L
11059 break;
11060
4e7d34a6 11061 case USE_3BYTE_TABLE:
8bb15339 11062 FETCH_DATA (info, codep + 2);
91d6fa6a
NC
11063 vindex = *codep++;
11064 dp = &three_byte_table[dp->op[1].bytemode][vindex];
8bb15339
L
11065 modrm.mod = (*codep >> 6) & 3;
11066 modrm.reg = (*codep >> 3) & 7;
11067 modrm.rm = *codep & 7;
11068 break;
11069
c0f3af97
L
11070 case USE_VEX_LEN_TABLE:
11071 if (!need_vex)
11072 abort ();
11073
11074 switch (vex.length)
11075 {
11076 case 128:
91d6fa6a 11077 vindex = 0;
c0f3af97
L
11078 break;
11079 case 256:
91d6fa6a 11080 vindex = 1;
c0f3af97
L
11081 break;
11082 default:
11083 abort ();
11084 break;
11085 }
11086
91d6fa6a 11087 dp = &vex_len_table[dp->op[1].bytemode][vindex];
c0f3af97
L
11088 break;
11089
f88c9eb0
SP
11090 case USE_XOP_8F_TABLE:
11091 FETCH_DATA (info, codep + 3);
11092 /* All bits in the REX prefix are ignored. */
11093 rex_ignored = rex;
11094 rex = ~(*codep >> 5) & 0x7;
11095
11096 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
11097 switch ((*codep & 0x1f))
11098 {
11099 default:
f07af43e
L
11100 dp = &bad_opcode;
11101 return dp;
5dd85c99
SP
11102 case 0x8:
11103 vex_table_index = XOP_08;
11104 break;
f88c9eb0
SP
11105 case 0x9:
11106 vex_table_index = XOP_09;
11107 break;
11108 case 0xa:
11109 vex_table_index = XOP_0A;
11110 break;
11111 }
11112 codep++;
11113 vex.w = *codep & 0x80;
11114 if (vex.w && address_mode == mode_64bit)
11115 rex |= REX_W;
11116
11117 vex.register_specifier = (~(*codep >> 3)) & 0xf;
11118 if (address_mode != mode_64bit
11119 && vex.register_specifier > 0x7)
f07af43e
L
11120 {
11121 dp = &bad_opcode;
11122 return dp;
11123 }
f88c9eb0
SP
11124
11125 vex.length = (*codep & 0x4) ? 256 : 128;
11126 switch ((*codep & 0x3))
11127 {
11128 case 0:
11129 vex.prefix = 0;
11130 break;
11131 case 1:
11132 vex.prefix = DATA_PREFIX_OPCODE;
11133 break;
11134 case 2:
11135 vex.prefix = REPE_PREFIX_OPCODE;
11136 break;
11137 case 3:
11138 vex.prefix = REPNE_PREFIX_OPCODE;
11139 break;
11140 }
11141 need_vex = 1;
11142 need_vex_reg = 1;
11143 codep++;
91d6fa6a
NC
11144 vindex = *codep++;
11145 dp = &xop_table[vex_table_index][vindex];
c48244a5
SP
11146
11147 FETCH_DATA (info, codep + 1);
11148 modrm.mod = (*codep >> 6) & 3;
11149 modrm.reg = (*codep >> 3) & 7;
11150 modrm.rm = *codep & 7;
f88c9eb0
SP
11151 break;
11152
c0f3af97
L
11153 case USE_VEX_C4_TABLE:
11154 FETCH_DATA (info, codep + 3);
11155 /* All bits in the REX prefix are ignored. */
11156 rex_ignored = rex;
11157 rex = ~(*codep >> 5) & 0x7;
11158 switch ((*codep & 0x1f))
11159 {
11160 default:
f07af43e
L
11161 dp = &bad_opcode;
11162 return dp;
c0f3af97 11163 case 0x1:
f88c9eb0 11164 vex_table_index = VEX_0F;
c0f3af97
L
11165 break;
11166 case 0x2:
f88c9eb0 11167 vex_table_index = VEX_0F38;
c0f3af97
L
11168 break;
11169 case 0x3:
f88c9eb0 11170 vex_table_index = VEX_0F3A;
c0f3af97
L
11171 break;
11172 }
11173 codep++;
11174 vex.w = *codep & 0x80;
11175 if (vex.w && address_mode == mode_64bit)
11176 rex |= REX_W;
11177
11178 vex.register_specifier = (~(*codep >> 3)) & 0xf;
11179 if (address_mode != mode_64bit
11180 && vex.register_specifier > 0x7)
f07af43e
L
11181 {
11182 dp = &bad_opcode;
11183 return dp;
11184 }
c0f3af97
L
11185
11186 vex.length = (*codep & 0x4) ? 256 : 128;
11187 switch ((*codep & 0x3))
11188 {
11189 case 0:
11190 vex.prefix = 0;
11191 break;
11192 case 1:
11193 vex.prefix = DATA_PREFIX_OPCODE;
11194 break;
11195 case 2:
11196 vex.prefix = REPE_PREFIX_OPCODE;
11197 break;
11198 case 3:
11199 vex.prefix = REPNE_PREFIX_OPCODE;
11200 break;
11201 }
11202 need_vex = 1;
11203 need_vex_reg = 1;
11204 codep++;
91d6fa6a
NC
11205 vindex = *codep++;
11206 dp = &vex_table[vex_table_index][vindex];
c0f3af97 11207 /* There is no MODRM byte for VEX [82|77]. */
91d6fa6a 11208 if (vindex != 0x77 && vindex != 0x82)
c0f3af97
L
11209 {
11210 FETCH_DATA (info, codep + 1);
11211 modrm.mod = (*codep >> 6) & 3;
11212 modrm.reg = (*codep >> 3) & 7;
11213 modrm.rm = *codep & 7;
11214 }
11215 break;
11216
11217 case USE_VEX_C5_TABLE:
11218 FETCH_DATA (info, codep + 2);
11219 /* All bits in the REX prefix are ignored. */
11220 rex_ignored = rex;
11221 rex = (*codep & 0x80) ? 0 : REX_R;
11222
11223 vex.register_specifier = (~(*codep >> 3)) & 0xf;
11224 if (address_mode != mode_64bit
11225 && vex.register_specifier > 0x7)
f07af43e
L
11226 {
11227 dp = &bad_opcode;
11228 return dp;
11229 }
c0f3af97 11230
759a05ce
L
11231 vex.w = 0;
11232
c0f3af97
L
11233 vex.length = (*codep & 0x4) ? 256 : 128;
11234 switch ((*codep & 0x3))
11235 {
11236 case 0:
11237 vex.prefix = 0;
11238 break;
11239 case 1:
11240 vex.prefix = DATA_PREFIX_OPCODE;
11241 break;
11242 case 2:
11243 vex.prefix = REPE_PREFIX_OPCODE;
11244 break;
11245 case 3:
11246 vex.prefix = REPNE_PREFIX_OPCODE;
11247 break;
11248 }
11249 need_vex = 1;
11250 need_vex_reg = 1;
11251 codep++;
91d6fa6a
NC
11252 vindex = *codep++;
11253 dp = &vex_table[dp->op[1].bytemode][vindex];
c0f3af97 11254 /* There is no MODRM byte for VEX [82|77]. */
91d6fa6a 11255 if (vindex != 0x77 && vindex != 0x82)
c0f3af97
L
11256 {
11257 FETCH_DATA (info, codep + 1);
11258 modrm.mod = (*codep >> 6) & 3;
11259 modrm.reg = (*codep >> 3) & 7;
11260 modrm.rm = *codep & 7;
11261 }
11262 break;
11263
9e30b8e0
L
11264 case USE_VEX_W_TABLE:
11265 if (!need_vex)
11266 abort ();
11267
11268 dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
11269 break;
11270
592d1631
L
11271 case 0:
11272 dp = &bad_opcode;
11273 break;
11274
b844680a 11275 default:
d34b5006 11276 abort ();
b844680a
L
11277 }
11278
11279 if (dp->name != NULL)
11280 return dp;
11281 else
8bb15339 11282 return get_valid_dis386 (dp, info);
b844680a
L
11283}
11284
dfc8cf43
L
11285static void
11286get_sib (disassemble_info *info)
11287{
11288 /* If modrm.mod == 3, operand must be register. */
11289 if (need_modrm
11290 && address_mode != mode_16bit
11291 && modrm.mod != 3
11292 && modrm.rm == 4)
11293 {
11294 FETCH_DATA (info, codep + 2);
11295 sib.index = (codep [1] >> 3) & 7;
11296 sib.scale = (codep [1] >> 6) & 3;
11297 sib.base = codep [1] & 7;
11298 }
11299}
11300
e396998b 11301static int
26ca5450 11302print_insn (bfd_vma pc, disassemble_info *info)
252b5132 11303{
2da11e11 11304 const struct dis386 *dp;
252b5132 11305 int i;
ce518a5f 11306 char *op_txt[MAX_OPERANDS];
252b5132 11307 int needcomma;
e396998b
AM
11308 int sizeflag;
11309 const char *p;
252b5132 11310 struct dis_private priv;
f16cd0d5
L
11311 int prefix_length;
11312 int default_prefixes;
252b5132 11313
d7921315
L
11314 priv.orig_sizeflag = AFLAG | DFLAG;
11315 if ((info->mach & bfd_mach_i386_i386) != 0)
cb712a9e 11316 address_mode = mode_32bit;
2da11e11 11317 else if (info->mach == bfd_mach_i386_i8086)
d7921315
L
11318 {
11319 address_mode = mode_16bit;
11320 priv.orig_sizeflag = 0;
11321 }
2da11e11 11322 else
d7921315
L
11323 address_mode = mode_64bit;
11324
11325 if (intel_syntax == (char) -1)
11326 intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
e396998b
AM
11327
11328 for (p = info->disassembler_options; p != NULL; )
11329 {
0112cd26 11330 if (CONST_STRNEQ (p, "x86-64"))
e396998b 11331 {
cb712a9e 11332 address_mode = mode_64bit;
e396998b
AM
11333 priv.orig_sizeflag = AFLAG | DFLAG;
11334 }
0112cd26 11335 else if (CONST_STRNEQ (p, "i386"))
e396998b 11336 {
cb712a9e 11337 address_mode = mode_32bit;
e396998b
AM
11338 priv.orig_sizeflag = AFLAG | DFLAG;
11339 }
0112cd26 11340 else if (CONST_STRNEQ (p, "i8086"))
e396998b 11341 {
cb712a9e 11342 address_mode = mode_16bit;
e396998b
AM
11343 priv.orig_sizeflag = 0;
11344 }
0112cd26 11345 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
11346 {
11347 intel_syntax = 1;
9d141669
L
11348 if (CONST_STRNEQ (p + 5, "-mnemonic"))
11349 intel_mnemonic = 1;
e396998b 11350 }
0112cd26 11351 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
11352 {
11353 intel_syntax = 0;
9d141669
L
11354 if (CONST_STRNEQ (p + 3, "-mnemonic"))
11355 intel_mnemonic = 0;
e396998b 11356 }
0112cd26 11357 else if (CONST_STRNEQ (p, "addr"))
e396998b 11358 {
f59a29b9
L
11359 if (address_mode == mode_64bit)
11360 {
11361 if (p[4] == '3' && p[5] == '2')
11362 priv.orig_sizeflag &= ~AFLAG;
11363 else if (p[4] == '6' && p[5] == '4')
11364 priv.orig_sizeflag |= AFLAG;
11365 }
11366 else
11367 {
11368 if (p[4] == '1' && p[5] == '6')
11369 priv.orig_sizeflag &= ~AFLAG;
11370 else if (p[4] == '3' && p[5] == '2')
11371 priv.orig_sizeflag |= AFLAG;
11372 }
e396998b 11373 }
0112cd26 11374 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
11375 {
11376 if (p[4] == '1' && p[5] == '6')
11377 priv.orig_sizeflag &= ~DFLAG;
11378 else if (p[4] == '3' && p[5] == '2')
11379 priv.orig_sizeflag |= DFLAG;
11380 }
0112cd26 11381 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
11382 priv.orig_sizeflag |= SUFFIX_ALWAYS;
11383
11384 p = strchr (p, ',');
11385 if (p != NULL)
11386 p++;
11387 }
11388
11389 if (intel_syntax)
11390 {
11391 names64 = intel_names64;
11392 names32 = intel_names32;
11393 names16 = intel_names16;
11394 names8 = intel_names8;
11395 names8rex = intel_names8rex;
11396 names_seg = intel_names_seg;
b9733481
L
11397 names_mm = intel_names_mm;
11398 names_xmm = intel_names_xmm;
11399 names_ymm = intel_names_ymm;
db51cc60
L
11400 index64 = intel_index64;
11401 index32 = intel_index32;
e396998b
AM
11402 index16 = intel_index16;
11403 open_char = '[';
11404 close_char = ']';
11405 separator_char = '+';
11406 scale_char = '*';
11407 }
11408 else
11409 {
11410 names64 = att_names64;
11411 names32 = att_names32;
11412 names16 = att_names16;
11413 names8 = att_names8;
11414 names8rex = att_names8rex;
11415 names_seg = att_names_seg;
b9733481
L
11416 names_mm = att_names_mm;
11417 names_xmm = att_names_xmm;
11418 names_ymm = att_names_ymm;
db51cc60
L
11419 index64 = att_index64;
11420 index32 = att_index32;
e396998b
AM
11421 index16 = att_index16;
11422 open_char = '(';
11423 close_char = ')';
11424 separator_char = ',';
11425 scale_char = ',';
11426 }
2da11e11 11427
4fe53c98 11428 /* The output looks better if we put 7 bytes on a line, since that
8a9036a4
L
11429 puts most long word instructions on a single line. Use 8 bytes
11430 for Intel L1OM. */
d7921315 11431 if ((info->mach & bfd_mach_l1om) != 0)
8a9036a4
L
11432 info->bytes_per_line = 8;
11433 else
11434 info->bytes_per_line = 7;
252b5132 11435
26ca5450 11436 info->private_data = &priv;
252b5132
RH
11437 priv.max_fetched = priv.the_buffer;
11438 priv.insn_start = pc;
252b5132
RH
11439
11440 obuf[0] = 0;
ce518a5f
L
11441 for (i = 0; i < MAX_OPERANDS; ++i)
11442 {
11443 op_out[i][0] = 0;
11444 op_index[i] = -1;
11445 }
252b5132
RH
11446
11447 the_info = info;
11448 start_pc = pc;
e396998b
AM
11449 start_codep = priv.the_buffer;
11450 codep = priv.the_buffer;
252b5132 11451
5076851f
ILT
11452 if (setjmp (priv.bailout) != 0)
11453 {
7d421014
ILT
11454 const char *name;
11455
5076851f 11456 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
11457 means we have an incomplete instruction of some sort. Just
11458 print the first byte as a prefix or a .byte pseudo-op. */
11459 if (codep > priv.the_buffer)
5076851f 11460 {
e396998b 11461 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
11462 if (name != NULL)
11463 (*info->fprintf_func) (info->stream, "%s", name);
11464 else
5076851f 11465 {
7d421014
ILT
11466 /* Just print the first byte as a .byte instruction. */
11467 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 11468 (unsigned int) priv.the_buffer[0]);
5076851f 11469 }
5076851f 11470
7d421014 11471 return 1;
5076851f
ILT
11472 }
11473
11474 return -1;
11475 }
11476
52b15da3 11477 obufp = obuf;
f16cd0d5
L
11478 sizeflag = priv.orig_sizeflag;
11479
11480 if (!ckprefix () || rex_used)
11481 {
11482 /* Too many prefixes or unused REX prefixes. */
11483 for (i = 0;
f6dd4781 11484 i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
f16cd0d5 11485 i++)
de882298 11486 (*info->fprintf_func) (info->stream, "%s%s",
6c067bbb 11487 i == 0 ? "" : " ",
f16cd0d5 11488 prefix_name (all_prefixes[i], sizeflag));
de882298 11489 return i;
f16cd0d5 11490 }
252b5132
RH
11491
11492 insn_codep = codep;
11493
11494 FETCH_DATA (info, codep + 1);
11495 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
11496
3e7d61b2 11497 if (((prefixes & PREFIX_FWAIT)
f16cd0d5 11498 && ((*codep < 0xd8) || (*codep > 0xdf))))
252b5132 11499 {
f16cd0d5 11500 (*info->fprintf_func) (info->stream, "fwait");
7d421014 11501 return 1;
252b5132
RH
11502 }
11503
252b5132
RH
11504 if (*codep == 0x0f)
11505 {
eec0f4ca 11506 unsigned char threebyte;
252b5132 11507 FETCH_DATA (info, codep + 2);
eec0f4ca
L
11508 threebyte = *++codep;
11509 dp = &dis386_twobyte[threebyte];
252b5132 11510 need_modrm = twobyte_has_modrm[*codep];
eec0f4ca 11511 codep++;
252b5132
RH
11512 }
11513 else
11514 {
6439fc28 11515 dp = &dis386[*codep];
252b5132 11516 need_modrm = onebyte_has_modrm[*codep];
eec0f4ca 11517 codep++;
252b5132 11518 }
246c51aa 11519
b844680a 11520 if ((prefixes & PREFIX_REPZ))
f16cd0d5 11521 used_prefixes |= PREFIX_REPZ;
b844680a 11522 if ((prefixes & PREFIX_REPNZ))
f16cd0d5 11523 used_prefixes |= PREFIX_REPNZ;
b844680a 11524 if ((prefixes & PREFIX_LOCK))
f16cd0d5 11525 used_prefixes |= PREFIX_LOCK;
c608c12e 11526
f16cd0d5 11527 default_prefixes = 0;
c608c12e
AM
11528 if (prefixes & PREFIX_ADDR)
11529 {
11530 sizeflag ^= AFLAG;
ce518a5f 11531 if (dp->op[2].bytemode != loop_jcxz_mode || intel_syntax)
3ffd33cf 11532 {
cb712a9e 11533 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
f16cd0d5 11534 all_prefixes[last_addr_prefix] = ADDR32_PREFIX;
3ffd33cf 11535 else
f16cd0d5
L
11536 all_prefixes[last_addr_prefix] = ADDR16_PREFIX;
11537 default_prefixes |= PREFIX_ADDR;
3ffd33cf
AM
11538 }
11539 }
11540
b844680a 11541 if ((prefixes & PREFIX_DATA))
3ffd33cf
AM
11542 {
11543 sizeflag ^= DFLAG;
ce518a5f
L
11544 if (dp->op[2].bytemode == cond_jump_mode
11545 && dp->op[0].bytemode == v_mode
6439fc28 11546 && !intel_syntax)
3ffd33cf
AM
11547 {
11548 if (sizeflag & DFLAG)
f16cd0d5 11549 all_prefixes[last_data_prefix] = DATA32_PREFIX;
3ffd33cf 11550 else
f16cd0d5
L
11551 all_prefixes[last_data_prefix] = DATA16_PREFIX;
11552 default_prefixes |= PREFIX_DATA;
11553 }
11554 else if (rex & REX_W)
11555 {
11556 /* REX_W will override PREFIX_DATA. */
11557 default_prefixes |= PREFIX_DATA;
3ffd33cf
AM
11558 }
11559 }
11560
8bb15339 11561 if (need_modrm)
252b5132
RH
11562 {
11563 FETCH_DATA (info, codep + 1);
7967e09e
L
11564 modrm.mod = (*codep >> 6) & 3;
11565 modrm.reg = (*codep >> 3) & 7;
11566 modrm.rm = *codep & 7;
252b5132
RH
11567 }
11568
42d5f9c6
MS
11569 need_vex = 0;
11570 need_vex_reg = 0;
11571 vex_w_done = 0;
55b126d4 11572
ce518a5f 11573 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132 11574 {
dfc8cf43 11575 get_sib (info);
252b5132
RH
11576 dofloat (sizeflag);
11577 }
11578 else
11579 {
8bb15339 11580 dp = get_valid_dis386 (dp, info);
b844680a 11581 if (dp != NULL && putop (dp->name, sizeflag) == 0)
6c067bbb 11582 {
dfc8cf43 11583 get_sib (info);
ce518a5f
L
11584 for (i = 0; i < MAX_OPERANDS; ++i)
11585 {
246c51aa 11586 obufp = op_out[i];
ce518a5f
L
11587 op_ad = MAX_OPERANDS - 1 - i;
11588 if (dp->op[i].rtn)
11589 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
11590 }
6439fc28 11591 }
252b5132
RH
11592 }
11593
7d421014
ILT
11594 /* See if any prefixes were not used. If so, print the first one
11595 separately. If we don't do this, we'll wind up printing an
11596 instruction stream which does not precisely correspond to the
11597 bytes we are disassembling. */
f16cd0d5 11598 if ((prefixes & ~(used_prefixes | default_prefixes)) != 0)
7d421014 11599 {
f16cd0d5
L
11600 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
11601 if (all_prefixes[i])
11602 {
11603 const char *name;
11604 name = prefix_name (all_prefixes[i], priv.orig_sizeflag);
11605 if (name == NULL)
11606 name = INTERNAL_DISASSEMBLER_ERROR;
11607 (*info->fprintf_func) (info->stream, "%s", name);
11608 return 1;
11609 }
52b15da3 11610 }
7d421014 11611
d869730d 11612 /* Check if the REX prefix is used. */
2a70cca4 11613 if (rex_ignored == 0 && (rex ^ rex_used) == 0)
f16cd0d5
L
11614 all_prefixes[last_rex_prefix] = 0;
11615
5e6718e4 11616 /* Check if the SEG prefix is used. */
f16cd0d5
L
11617 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
11618 | PREFIX_FS | PREFIX_GS)) != 0
11619 && (used_prefixes
11620 & seg_prefix (all_prefixes[last_seg_prefix])) != 0)
11621 all_prefixes[last_seg_prefix] = 0;
11622
5e6718e4 11623 /* Check if the ADDR prefix is used. */
f16cd0d5
L
11624 if ((prefixes & PREFIX_ADDR) != 0
11625 && (used_prefixes & PREFIX_ADDR) != 0)
11626 all_prefixes[last_addr_prefix] = 0;
11627
5e6718e4 11628 /* Check if the DATA prefix is used. */
f16cd0d5
L
11629 if ((prefixes & PREFIX_DATA) != 0
11630 && (used_prefixes & PREFIX_DATA) != 0)
11631 all_prefixes[last_data_prefix] = 0;
11632
11633 prefix_length = 0;
f310f33d 11634 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
f16cd0d5
L
11635 if (all_prefixes[i])
11636 {
11637 const char *name;
11638 name = prefix_name (all_prefixes[i], sizeflag);
11639 if (name == NULL)
11640 abort ();
11641 prefix_length += strlen (name) + 1;
11642 (*info->fprintf_func) (info->stream, "%s ", name);
11643 }
b844680a 11644
f16cd0d5
L
11645 /* Check maximum code length. */
11646 if ((codep - start_codep) > MAX_CODE_LENGTH)
11647 {
11648 (*info->fprintf_func) (info->stream, "(bad)");
11649 return MAX_CODE_LENGTH;
11650 }
b844680a 11651
ea397f5b 11652 obufp = mnemonicendp;
f16cd0d5 11653 for (i = strlen (obuf) + prefix_length; i < 6; i++)
252b5132
RH
11654 oappend (" ");
11655 oappend (" ");
11656 (*info->fprintf_func) (info->stream, "%s", obuf);
11657
11658 /* The enter and bound instructions are printed with operands in the same
11659 order as the intel book; everything else is printed in reverse order. */
2da11e11 11660 if (intel_syntax || two_source_ops)
252b5132 11661 {
185b1163
L
11662 bfd_vma riprel;
11663
ce518a5f 11664 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 11665 op_txt[i] = op_out[i];
246c51aa 11666
ce518a5f
L
11667 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
11668 {
6c067bbb
RM
11669 op_ad = op_index[i];
11670 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
11671 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
11672 riprel = op_riprel[i];
11673 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
11674 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 11675 }
252b5132
RH
11676 }
11677 else
11678 {
ce518a5f 11679 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 11680 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
11681 }
11682
ce518a5f
L
11683 needcomma = 0;
11684 for (i = 0; i < MAX_OPERANDS; ++i)
11685 if (*op_txt[i])
11686 {
11687 if (needcomma)
11688 (*info->fprintf_func) (info->stream, ",");
11689 if (op_index[i] != -1 && !op_riprel[i])
11690 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
11691 else
11692 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
11693 needcomma = 1;
11694 }
050dfa73 11695
ce518a5f 11696 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
11697 if (op_index[i] != -1 && op_riprel[i])
11698 {
11699 (*info->fprintf_func) (info->stream, " # ");
11700 (*info->print_address_func) ((bfd_vma) (start_pc + codep - start_codep
11701 + op_address[op_index[i]]), info);
185b1163 11702 break;
52b15da3 11703 }
e396998b 11704 return codep - priv.the_buffer;
252b5132
RH
11705}
11706
6439fc28 11707static const char *float_mem[] = {
252b5132 11708 /* d8 */
7c52e0e8
L
11709 "fadd{s|}",
11710 "fmul{s|}",
11711 "fcom{s|}",
11712 "fcomp{s|}",
11713 "fsub{s|}",
11714 "fsubr{s|}",
11715 "fdiv{s|}",
11716 "fdivr{s|}",
db6eb5be 11717 /* d9 */
7c52e0e8 11718 "fld{s|}",
252b5132 11719 "(bad)",
7c52e0e8
L
11720 "fst{s|}",
11721 "fstp{s|}",
9306ca4a 11722 "fldenvIC",
252b5132 11723 "fldcw",
9306ca4a 11724 "fNstenvIC",
252b5132
RH
11725 "fNstcw",
11726 /* da */
7c52e0e8
L
11727 "fiadd{l|}",
11728 "fimul{l|}",
11729 "ficom{l|}",
11730 "ficomp{l|}",
11731 "fisub{l|}",
11732 "fisubr{l|}",
11733 "fidiv{l|}",
11734 "fidivr{l|}",
252b5132 11735 /* db */
7c52e0e8
L
11736 "fild{l|}",
11737 "fisttp{l|}",
11738 "fist{l|}",
11739 "fistp{l|}",
252b5132 11740 "(bad)",
6439fc28 11741 "fld{t||t|}",
252b5132 11742 "(bad)",
6439fc28 11743 "fstp{t||t|}",
252b5132 11744 /* dc */
7c52e0e8
L
11745 "fadd{l|}",
11746 "fmul{l|}",
11747 "fcom{l|}",
11748 "fcomp{l|}",
11749 "fsub{l|}",
11750 "fsubr{l|}",
11751 "fdiv{l|}",
11752 "fdivr{l|}",
252b5132 11753 /* dd */
7c52e0e8
L
11754 "fld{l|}",
11755 "fisttp{ll|}",
11756 "fst{l||}",
11757 "fstp{l|}",
9306ca4a 11758 "frstorIC",
252b5132 11759 "(bad)",
9306ca4a 11760 "fNsaveIC",
252b5132
RH
11761 "fNstsw",
11762 /* de */
11763 "fiadd",
11764 "fimul",
11765 "ficom",
11766 "ficomp",
11767 "fisub",
11768 "fisubr",
11769 "fidiv",
11770 "fidivr",
11771 /* df */
11772 "fild",
ca164297 11773 "fisttp",
252b5132
RH
11774 "fist",
11775 "fistp",
11776 "fbld",
7c52e0e8 11777 "fild{ll|}",
252b5132 11778 "fbstp",
7c52e0e8 11779 "fistp{ll|}",
1d9f512f
AM
11780};
11781
11782static const unsigned char float_mem_mode[] = {
11783 /* d8 */
11784 d_mode,
11785 d_mode,
11786 d_mode,
11787 d_mode,
11788 d_mode,
11789 d_mode,
11790 d_mode,
11791 d_mode,
11792 /* d9 */
11793 d_mode,
11794 0,
11795 d_mode,
11796 d_mode,
11797 0,
11798 w_mode,
11799 0,
11800 w_mode,
11801 /* da */
11802 d_mode,
11803 d_mode,
11804 d_mode,
11805 d_mode,
11806 d_mode,
11807 d_mode,
11808 d_mode,
11809 d_mode,
11810 /* db */
11811 d_mode,
11812 d_mode,
11813 d_mode,
11814 d_mode,
11815 0,
9306ca4a 11816 t_mode,
1d9f512f 11817 0,
9306ca4a 11818 t_mode,
1d9f512f
AM
11819 /* dc */
11820 q_mode,
11821 q_mode,
11822 q_mode,
11823 q_mode,
11824 q_mode,
11825 q_mode,
11826 q_mode,
11827 q_mode,
11828 /* dd */
11829 q_mode,
11830 q_mode,
11831 q_mode,
11832 q_mode,
11833 0,
11834 0,
11835 0,
11836 w_mode,
11837 /* de */
11838 w_mode,
11839 w_mode,
11840 w_mode,
11841 w_mode,
11842 w_mode,
11843 w_mode,
11844 w_mode,
11845 w_mode,
11846 /* df */
11847 w_mode,
11848 w_mode,
11849 w_mode,
11850 w_mode,
9306ca4a 11851 t_mode,
1d9f512f 11852 q_mode,
9306ca4a 11853 t_mode,
1d9f512f 11854 q_mode
252b5132
RH
11855};
11856
ce518a5f
L
11857#define ST { OP_ST, 0 }
11858#define STi { OP_STi, 0 }
252b5132 11859
4efba78c
L
11860#define FGRPd9_2 NULL, { { NULL, 0 } }
11861#define FGRPd9_4 NULL, { { NULL, 1 } }
11862#define FGRPd9_5 NULL, { { NULL, 2 } }
11863#define FGRPd9_6 NULL, { { NULL, 3 } }
11864#define FGRPd9_7 NULL, { { NULL, 4 } }
11865#define FGRPda_5 NULL, { { NULL, 5 } }
11866#define FGRPdb_4 NULL, { { NULL, 6 } }
11867#define FGRPde_3 NULL, { { NULL, 7 } }
11868#define FGRPdf_4 NULL, { { NULL, 8 } }
252b5132 11869
2da11e11 11870static const struct dis386 float_reg[][8] = {
252b5132
RH
11871 /* d8 */
11872 {
ce518a5f
L
11873 { "fadd", { ST, STi } },
11874 { "fmul", { ST, STi } },
11875 { "fcom", { STi } },
11876 { "fcomp", { STi } },
11877 { "fsub", { ST, STi } },
11878 { "fsubr", { ST, STi } },
11879 { "fdiv", { ST, STi } },
11880 { "fdivr", { ST, STi } },
252b5132
RH
11881 },
11882 /* d9 */
11883 {
ce518a5f
L
11884 { "fld", { STi } },
11885 { "fxch", { STi } },
252b5132 11886 { FGRPd9_2 },
592d1631 11887 { Bad_Opcode },
252b5132
RH
11888 { FGRPd9_4 },
11889 { FGRPd9_5 },
11890 { FGRPd9_6 },
11891 { FGRPd9_7 },
11892 },
11893 /* da */
11894 {
ce518a5f
L
11895 { "fcmovb", { ST, STi } },
11896 { "fcmove", { ST, STi } },
11897 { "fcmovbe",{ ST, STi } },
11898 { "fcmovu", { ST, STi } },
592d1631 11899 { Bad_Opcode },
252b5132 11900 { FGRPda_5 },
592d1631
L
11901 { Bad_Opcode },
11902 { Bad_Opcode },
252b5132
RH
11903 },
11904 /* db */
11905 {
ce518a5f
L
11906 { "fcmovnb",{ ST, STi } },
11907 { "fcmovne",{ ST, STi } },
11908 { "fcmovnbe",{ ST, STi } },
11909 { "fcmovnu",{ ST, STi } },
252b5132 11910 { FGRPdb_4 },
ce518a5f
L
11911 { "fucomi", { ST, STi } },
11912 { "fcomi", { ST, STi } },
592d1631 11913 { Bad_Opcode },
252b5132
RH
11914 },
11915 /* dc */
11916 {
ce518a5f
L
11917 { "fadd", { STi, ST } },
11918 { "fmul", { STi, ST } },
592d1631
L
11919 { Bad_Opcode },
11920 { Bad_Opcode },
9d141669
L
11921 { "fsub!M", { STi, ST } },
11922 { "fsubM", { STi, ST } },
11923 { "fdiv!M", { STi, ST } },
11924 { "fdivM", { STi, ST } },
252b5132
RH
11925 },
11926 /* dd */
11927 {
ce518a5f 11928 { "ffree", { STi } },
592d1631 11929 { Bad_Opcode },
ce518a5f
L
11930 { "fst", { STi } },
11931 { "fstp", { STi } },
11932 { "fucom", { STi } },
11933 { "fucomp", { STi } },
592d1631
L
11934 { Bad_Opcode },
11935 { Bad_Opcode },
252b5132
RH
11936 },
11937 /* de */
11938 {
ce518a5f
L
11939 { "faddp", { STi, ST } },
11940 { "fmulp", { STi, ST } },
592d1631 11941 { Bad_Opcode },
252b5132 11942 { FGRPde_3 },
9d141669
L
11943 { "fsub!Mp", { STi, ST } },
11944 { "fsubMp", { STi, ST } },
11945 { "fdiv!Mp", { STi, ST } },
11946 { "fdivMp", { STi, ST } },
252b5132
RH
11947 },
11948 /* df */
11949 {
ce518a5f 11950 { "ffreep", { STi } },
592d1631
L
11951 { Bad_Opcode },
11952 { Bad_Opcode },
11953 { Bad_Opcode },
252b5132 11954 { FGRPdf_4 },
ce518a5f
L
11955 { "fucomip", { ST, STi } },
11956 { "fcomip", { ST, STi } },
592d1631 11957 { Bad_Opcode },
252b5132
RH
11958 },
11959};
11960
252b5132
RH
11961static char *fgrps[][8] = {
11962 /* d9_2 0 */
11963 {
11964 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
11965 },
11966
11967 /* d9_4 1 */
11968 {
11969 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
11970 },
11971
11972 /* d9_5 2 */
11973 {
11974 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
11975 },
11976
11977 /* d9_6 3 */
11978 {
11979 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
11980 },
11981
11982 /* d9_7 4 */
11983 {
11984 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
11985 },
11986
11987 /* da_5 5 */
11988 {
11989 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
11990 },
11991
11992 /* db_4 6 */
11993 {
309d3373
JB
11994 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
11995 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
252b5132
RH
11996 },
11997
11998 /* de_3 7 */
11999 {
12000 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12001 },
12002
12003 /* df_4 8 */
12004 {
12005 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12006 },
12007};
12008
b6169b20
L
12009static void
12010swap_operand (void)
12011{
12012 mnemonicendp[0] = '.';
12013 mnemonicendp[1] = 's';
12014 mnemonicendp += 2;
12015}
12016
b844680a
L
12017static void
12018OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
12019 int sizeflag ATTRIBUTE_UNUSED)
12020{
12021 /* Skip mod/rm byte. */
12022 MODRM_CHECK;
12023 codep++;
12024}
12025
252b5132 12026static void
26ca5450 12027dofloat (int sizeflag)
252b5132 12028{
2da11e11 12029 const struct dis386 *dp;
252b5132
RH
12030 unsigned char floatop;
12031
12032 floatop = codep[-1];
12033
7967e09e 12034 if (modrm.mod != 3)
252b5132 12035 {
7967e09e 12036 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
12037
12038 putop (float_mem[fp_indx], sizeflag);
ce518a5f 12039 obufp = op_out[0];
6e50d963 12040 op_ad = 2;
1d9f512f 12041 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
12042 return;
12043 }
6608db57 12044 /* Skip mod/rm byte. */
4bba6815 12045 MODRM_CHECK;
252b5132
RH
12046 codep++;
12047
7967e09e 12048 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
12049 if (dp->name == NULL)
12050 {
7967e09e 12051 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 12052
6608db57 12053 /* Instruction fnstsw is only one with strange arg. */
252b5132 12054 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 12055 strcpy (op_out[0], names16[0]);
252b5132
RH
12056 }
12057 else
12058 {
12059 putop (dp->name, sizeflag);
12060
ce518a5f 12061 obufp = op_out[0];
6e50d963 12062 op_ad = 2;
ce518a5f
L
12063 if (dp->op[0].rtn)
12064 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 12065
ce518a5f 12066 obufp = op_out[1];
6e50d963 12067 op_ad = 1;
ce518a5f
L
12068 if (dp->op[1].rtn)
12069 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
12070 }
12071}
12072
252b5132 12073static void
26ca5450 12074OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 12075{
422673a9 12076 oappend ("%st" + intel_syntax);
252b5132
RH
12077}
12078
252b5132 12079static void
26ca5450 12080OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 12081{
7967e09e 12082 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
d708bcba 12083 oappend (scratchbuf + intel_syntax);
252b5132
RH
12084}
12085
6608db57 12086/* Capital letters in template are macros. */
6439fc28 12087static int
d3ce72d0 12088putop (const char *in_template, int sizeflag)
252b5132 12089{
2da11e11 12090 const char *p;
9306ca4a 12091 int alt = 0;
9d141669 12092 int cond = 1;
98b528ac
L
12093 unsigned int l = 0, len = 1;
12094 char last[4];
12095
12096#define SAVE_LAST(c) \
12097 if (l < len && l < sizeof (last)) \
12098 last[l++] = c; \
12099 else \
12100 abort ();
252b5132 12101
d3ce72d0 12102 for (p = in_template; *p; p++)
252b5132
RH
12103 {
12104 switch (*p)
12105 {
12106 default:
12107 *obufp++ = *p;
12108 break;
98b528ac
L
12109 case '%':
12110 len++;
12111 break;
9d141669
L
12112 case '!':
12113 cond = 0;
12114 break;
6439fc28
AM
12115 case '{':
12116 alt = 0;
12117 if (intel_syntax)
6439fc28
AM
12118 {
12119 while (*++p != '|')
7c52e0e8
L
12120 if (*p == '}' || *p == '\0')
12121 abort ();
6439fc28 12122 }
9306ca4a
JB
12123 /* Fall through. */
12124 case 'I':
12125 alt = 1;
12126 continue;
6439fc28
AM
12127 case '|':
12128 while (*++p != '}')
12129 {
12130 if (*p == '\0')
12131 abort ();
12132 }
12133 break;
12134 case '}':
12135 break;
252b5132 12136 case 'A':
db6eb5be
AM
12137 if (intel_syntax)
12138 break;
7967e09e 12139 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
12140 *obufp++ = 'b';
12141 break;
12142 case 'B':
4b06377f
L
12143 if (l == 0 && len == 1)
12144 {
12145case_B:
12146 if (intel_syntax)
12147 break;
12148 if (sizeflag & SUFFIX_ALWAYS)
12149 *obufp++ = 'b';
12150 }
12151 else
12152 {
12153 if (l != 1
12154 || len != 2
12155 || last[0] != 'L')
12156 {
12157 SAVE_LAST (*p);
12158 break;
12159 }
12160
12161 if (address_mode == mode_64bit
12162 && !(prefixes & PREFIX_ADDR))
12163 {
12164 *obufp++ = 'a';
12165 *obufp++ = 'b';
12166 *obufp++ = 's';
12167 }
12168
12169 goto case_B;
12170 }
252b5132 12171 break;
9306ca4a
JB
12172 case 'C':
12173 if (intel_syntax && !alt)
12174 break;
12175 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
12176 {
12177 if (sizeflag & DFLAG)
12178 *obufp++ = intel_syntax ? 'd' : 'l';
12179 else
12180 *obufp++ = intel_syntax ? 'w' : 's';
12181 used_prefixes |= (prefixes & PREFIX_DATA);
12182 }
12183 break;
ed7841b3
JB
12184 case 'D':
12185 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
12186 break;
161a04f6 12187 USED_REX (REX_W);
7967e09e 12188 if (modrm.mod == 3)
ed7841b3 12189 {
161a04f6 12190 if (rex & REX_W)
ed7841b3 12191 *obufp++ = 'q';
ed7841b3 12192 else
f16cd0d5
L
12193 {
12194 if (sizeflag & DFLAG)
12195 *obufp++ = intel_syntax ? 'd' : 'l';
12196 else
12197 *obufp++ = 'w';
12198 used_prefixes |= (prefixes & PREFIX_DATA);
12199 }
ed7841b3
JB
12200 }
12201 else
12202 *obufp++ = 'w';
12203 break;
252b5132 12204 case 'E': /* For jcxz/jecxz */
cb712a9e 12205 if (address_mode == mode_64bit)
c1a64871
JH
12206 {
12207 if (sizeflag & AFLAG)
12208 *obufp++ = 'r';
12209 else
12210 *obufp++ = 'e';
12211 }
12212 else
12213 if (sizeflag & AFLAG)
12214 *obufp++ = 'e';
3ffd33cf
AM
12215 used_prefixes |= (prefixes & PREFIX_ADDR);
12216 break;
12217 case 'F':
db6eb5be
AM
12218 if (intel_syntax)
12219 break;
e396998b 12220 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
12221 {
12222 if (sizeflag & AFLAG)
cb712a9e 12223 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 12224 else
cb712a9e 12225 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
12226 used_prefixes |= (prefixes & PREFIX_ADDR);
12227 }
252b5132 12228 break;
52fd6d94
JB
12229 case 'G':
12230 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
12231 break;
161a04f6 12232 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
12233 *obufp++ = 'l';
12234 else
12235 *obufp++ = 'w';
161a04f6 12236 if (!(rex & REX_W))
52fd6d94
JB
12237 used_prefixes |= (prefixes & PREFIX_DATA);
12238 break;
5dd0794d 12239 case 'H':
db6eb5be
AM
12240 if (intel_syntax)
12241 break;
5dd0794d
AM
12242 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
12243 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
12244 {
12245 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
12246 *obufp++ = ',';
12247 *obufp++ = 'p';
12248 if (prefixes & PREFIX_DS)
12249 *obufp++ = 't';
12250 else
12251 *obufp++ = 'n';
12252 }
12253 break;
9306ca4a
JB
12254 case 'J':
12255 if (intel_syntax)
12256 break;
12257 *obufp++ = 'l';
12258 break;
42903f7f
L
12259 case 'K':
12260 USED_REX (REX_W);
12261 if (rex & REX_W)
12262 *obufp++ = 'q';
12263 else
12264 *obufp++ = 'd';
12265 break;
6dd5059a
L
12266 case 'Z':
12267 if (intel_syntax)
12268 break;
12269 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
12270 {
12271 *obufp++ = 'q';
12272 break;
12273 }
12274 /* Fall through. */
98b528ac 12275 goto case_L;
252b5132 12276 case 'L':
98b528ac
L
12277 if (l != 0 || len != 1)
12278 {
12279 SAVE_LAST (*p);
12280 break;
12281 }
12282case_L:
db6eb5be
AM
12283 if (intel_syntax)
12284 break;
252b5132
RH
12285 if (sizeflag & SUFFIX_ALWAYS)
12286 *obufp++ = 'l';
252b5132 12287 break;
9d141669
L
12288 case 'M':
12289 if (intel_mnemonic != cond)
12290 *obufp++ = 'r';
12291 break;
252b5132
RH
12292 case 'N':
12293 if ((prefixes & PREFIX_FWAIT) == 0)
12294 *obufp++ = 'n';
7d421014
ILT
12295 else
12296 used_prefixes |= PREFIX_FWAIT;
252b5132 12297 break;
52b15da3 12298 case 'O':
161a04f6
L
12299 USED_REX (REX_W);
12300 if (rex & REX_W)
6439fc28 12301 *obufp++ = 'o';
a35ca55a
JB
12302 else if (intel_syntax && (sizeflag & DFLAG))
12303 *obufp++ = 'q';
52b15da3
JH
12304 else
12305 *obufp++ = 'd';
161a04f6 12306 if (!(rex & REX_W))
a35ca55a 12307 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 12308 break;
6439fc28 12309 case 'T':
d9e3625e
L
12310 if (!intel_syntax
12311 && address_mode == mode_64bit
7bb15c6f 12312 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
12313 {
12314 *obufp++ = 'q';
12315 break;
12316 }
6608db57 12317 /* Fall through. */
252b5132 12318 case 'P':
db6eb5be 12319 if (intel_syntax)
d9e3625e
L
12320 {
12321 if ((rex & REX_W) == 0
12322 && (prefixes & PREFIX_DATA))
12323 {
12324 if ((sizeflag & DFLAG) == 0)
12325 *obufp++ = 'w';
12326 used_prefixes |= (prefixes & PREFIX_DATA);
12327 }
12328 break;
12329 }
252b5132 12330 if ((prefixes & PREFIX_DATA)
161a04f6 12331 || (rex & REX_W)
e396998b 12332 || (sizeflag & SUFFIX_ALWAYS))
252b5132 12333 {
161a04f6
L
12334 USED_REX (REX_W);
12335 if (rex & REX_W)
52b15da3 12336 *obufp++ = 'q';
c2419411 12337 else
52b15da3
JH
12338 {
12339 if (sizeflag & DFLAG)
12340 *obufp++ = 'l';
12341 else
12342 *obufp++ = 'w';
f16cd0d5 12343 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 12344 }
252b5132
RH
12345 }
12346 break;
6439fc28 12347 case 'U':
db6eb5be
AM
12348 if (intel_syntax)
12349 break;
7bb15c6f 12350 if (address_mode == mode_64bit
6c067bbb 12351 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28 12352 {
7967e09e 12353 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 12354 *obufp++ = 'q';
6439fc28
AM
12355 break;
12356 }
6608db57 12357 /* Fall through. */
98b528ac 12358 goto case_Q;
252b5132 12359 case 'Q':
98b528ac 12360 if (l == 0 && len == 1)
252b5132 12361 {
98b528ac
L
12362case_Q:
12363 if (intel_syntax && !alt)
12364 break;
12365 USED_REX (REX_W);
12366 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 12367 {
98b528ac
L
12368 if (rex & REX_W)
12369 *obufp++ = 'q';
52b15da3 12370 else
98b528ac
L
12371 {
12372 if (sizeflag & DFLAG)
12373 *obufp++ = intel_syntax ? 'd' : 'l';
12374 else
12375 *obufp++ = 'w';
f16cd0d5 12376 used_prefixes |= (prefixes & PREFIX_DATA);
98b528ac 12377 }
52b15da3 12378 }
98b528ac
L
12379 }
12380 else
12381 {
12382 if (l != 1 || len != 2 || last[0] != 'L')
12383 {
12384 SAVE_LAST (*p);
12385 break;
12386 }
12387 if (intel_syntax
12388 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
12389 break;
12390 if ((rex & REX_W))
12391 {
12392 USED_REX (REX_W);
12393 *obufp++ = 'q';
12394 }
12395 else
12396 *obufp++ = 'l';
252b5132
RH
12397 }
12398 break;
12399 case 'R':
161a04f6
L
12400 USED_REX (REX_W);
12401 if (rex & REX_W)
a35ca55a
JB
12402 *obufp++ = 'q';
12403 else if (sizeflag & DFLAG)
c608c12e 12404 {
a35ca55a 12405 if (intel_syntax)
c608c12e 12406 *obufp++ = 'd';
c608c12e 12407 else
a35ca55a 12408 *obufp++ = 'l';
c608c12e 12409 }
252b5132 12410 else
a35ca55a
JB
12411 *obufp++ = 'w';
12412 if (intel_syntax && !p[1]
161a04f6 12413 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 12414 *obufp++ = 'e';
161a04f6 12415 if (!(rex & REX_W))
52b15da3 12416 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 12417 break;
1a114b12 12418 case 'V':
4b06377f 12419 if (l == 0 && len == 1)
1a114b12 12420 {
4b06377f
L
12421 if (intel_syntax)
12422 break;
7bb15c6f 12423 if (address_mode == mode_64bit
6c067bbb 12424 && ((sizeflag & DFLAG) || (rex & REX_W)))
4b06377f
L
12425 {
12426 if (sizeflag & SUFFIX_ALWAYS)
12427 *obufp++ = 'q';
12428 break;
12429 }
12430 }
12431 else
12432 {
12433 if (l != 1
12434 || len != 2
12435 || last[0] != 'L')
12436 {
12437 SAVE_LAST (*p);
12438 break;
12439 }
12440
12441 if (rex & REX_W)
12442 {
12443 *obufp++ = 'a';
12444 *obufp++ = 'b';
12445 *obufp++ = 's';
12446 }
1a114b12
JB
12447 }
12448 /* Fall through. */
4b06377f 12449 goto case_S;
252b5132 12450 case 'S':
4b06377f 12451 if (l == 0 && len == 1)
252b5132 12452 {
4b06377f
L
12453case_S:
12454 if (intel_syntax)
12455 break;
12456 if (sizeflag & SUFFIX_ALWAYS)
52b15da3 12457 {
4b06377f
L
12458 if (rex & REX_W)
12459 *obufp++ = 'q';
52b15da3 12460 else
4b06377f
L
12461 {
12462 if (sizeflag & DFLAG)
12463 *obufp++ = 'l';
12464 else
12465 *obufp++ = 'w';
12466 used_prefixes |= (prefixes & PREFIX_DATA);
12467 }
12468 }
12469 }
12470 else
12471 {
12472 if (l != 1
12473 || len != 2
12474 || last[0] != 'L')
12475 {
12476 SAVE_LAST (*p);
12477 break;
52b15da3 12478 }
4b06377f
L
12479
12480 if (address_mode == mode_64bit
12481 && !(prefixes & PREFIX_ADDR))
12482 {
12483 *obufp++ = 'a';
12484 *obufp++ = 'b';
12485 *obufp++ = 's';
12486 }
12487
12488 goto case_S;
252b5132 12489 }
252b5132 12490 break;
041bd2e0 12491 case 'X':
c0f3af97
L
12492 if (l != 0 || len != 1)
12493 {
12494 SAVE_LAST (*p);
12495 break;
12496 }
12497 if (need_vex && vex.prefix)
12498 {
12499 if (vex.prefix == DATA_PREFIX_OPCODE)
12500 *obufp++ = 'd';
12501 else
12502 *obufp++ = 's';
12503 }
041bd2e0 12504 else
f16cd0d5
L
12505 {
12506 if (prefixes & PREFIX_DATA)
12507 *obufp++ = 'd';
12508 else
12509 *obufp++ = 's';
12510 used_prefixes |= (prefixes & PREFIX_DATA);
12511 }
041bd2e0 12512 break;
76f227a5 12513 case 'Y':
c0f3af97 12514 if (l == 0 && len == 1)
76f227a5 12515 {
c0f3af97
L
12516 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
12517 break;
12518 if (rex & REX_W)
12519 {
12520 USED_REX (REX_W);
12521 *obufp++ = 'q';
12522 }
12523 break;
12524 }
12525 else
12526 {
12527 if (l != 1 || len != 2 || last[0] != 'X')
12528 {
12529 SAVE_LAST (*p);
12530 break;
12531 }
12532 if (!need_vex)
12533 abort ();
12534 if (intel_syntax
12535 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
12536 break;
12537 switch (vex.length)
12538 {
12539 case 128:
12540 *obufp++ = 'x';
12541 break;
12542 case 256:
12543 *obufp++ = 'y';
12544 break;
12545 default:
12546 abort ();
12547 }
76f227a5
JH
12548 }
12549 break;
252b5132 12550 case 'W':
0bfee649 12551 if (l == 0 && len == 1)
a35ca55a 12552 {
0bfee649
L
12553 /* operand size flag for cwtl, cbtw */
12554 USED_REX (REX_W);
12555 if (rex & REX_W)
12556 {
12557 if (intel_syntax)
12558 *obufp++ = 'd';
12559 else
12560 *obufp++ = 'l';
12561 }
12562 else if (sizeflag & DFLAG)
12563 *obufp++ = 'w';
a35ca55a 12564 else
0bfee649
L
12565 *obufp++ = 'b';
12566 if (!(rex & REX_W))
12567 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 12568 }
252b5132 12569 else
0bfee649 12570 {
6c30d220
L
12571 if (l != 1
12572 || len != 2
12573 || (last[0] != 'X'
12574 && last[0] != 'L'))
0bfee649
L
12575 {
12576 SAVE_LAST (*p);
12577 break;
12578 }
12579 if (!need_vex)
12580 abort ();
6c30d220
L
12581 if (last[0] == 'X')
12582 *obufp++ = vex.w ? 'd': 's';
12583 else
12584 *obufp++ = vex.w ? 'q': 'd';
0bfee649 12585 }
252b5132
RH
12586 break;
12587 }
9306ca4a 12588 alt = 0;
252b5132
RH
12589 }
12590 *obufp = 0;
ea397f5b 12591 mnemonicendp = obufp;
6439fc28 12592 return 0;
252b5132
RH
12593}
12594
12595static void
26ca5450 12596oappend (const char *s)
252b5132 12597{
ea397f5b 12598 obufp = stpcpy (obufp, s);
252b5132
RH
12599}
12600
12601static void
26ca5450 12602append_seg (void)
252b5132
RH
12603{
12604 if (prefixes & PREFIX_CS)
7d421014 12605 {
7d421014 12606 used_prefixes |= PREFIX_CS;
d708bcba 12607 oappend ("%cs:" + intel_syntax);
7d421014 12608 }
252b5132 12609 if (prefixes & PREFIX_DS)
7d421014 12610 {
7d421014 12611 used_prefixes |= PREFIX_DS;
d708bcba 12612 oappend ("%ds:" + intel_syntax);
7d421014 12613 }
252b5132 12614 if (prefixes & PREFIX_SS)
7d421014 12615 {
7d421014 12616 used_prefixes |= PREFIX_SS;
d708bcba 12617 oappend ("%ss:" + intel_syntax);
7d421014 12618 }
252b5132 12619 if (prefixes & PREFIX_ES)
7d421014 12620 {
7d421014 12621 used_prefixes |= PREFIX_ES;
d708bcba 12622 oappend ("%es:" + intel_syntax);
7d421014 12623 }
252b5132 12624 if (prefixes & PREFIX_FS)
7d421014 12625 {
7d421014 12626 used_prefixes |= PREFIX_FS;
d708bcba 12627 oappend ("%fs:" + intel_syntax);
7d421014 12628 }
252b5132 12629 if (prefixes & PREFIX_GS)
7d421014 12630 {
7d421014 12631 used_prefixes |= PREFIX_GS;
d708bcba 12632 oappend ("%gs:" + intel_syntax);
7d421014 12633 }
252b5132
RH
12634}
12635
12636static void
26ca5450 12637OP_indirE (int bytemode, int sizeflag)
252b5132
RH
12638{
12639 if (!intel_syntax)
12640 oappend ("*");
12641 OP_E (bytemode, sizeflag);
12642}
12643
52b15da3 12644static void
26ca5450 12645print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 12646{
cb712a9e 12647 if (address_mode == mode_64bit)
52b15da3
JH
12648 {
12649 if (hex)
12650 {
12651 char tmp[30];
12652 int i;
12653 buf[0] = '0';
12654 buf[1] = 'x';
12655 sprintf_vma (tmp, disp);
6608db57 12656 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
12657 strcpy (buf + 2, tmp + i);
12658 }
12659 else
12660 {
12661 bfd_signed_vma v = disp;
12662 char tmp[30];
12663 int i;
12664 if (v < 0)
12665 {
12666 *(buf++) = '-';
12667 v = -disp;
6608db57 12668 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
12669 if (v < 0)
12670 {
12671 strcpy (buf, "9223372036854775808");
12672 return;
12673 }
12674 }
12675 if (!v)
12676 {
12677 strcpy (buf, "0");
12678 return;
12679 }
12680
12681 i = 0;
12682 tmp[29] = 0;
12683 while (v)
12684 {
6608db57 12685 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
12686 v /= 10;
12687 i++;
12688 }
12689 strcpy (buf, tmp + 29 - i);
12690 }
12691 }
12692 else
12693 {
12694 if (hex)
12695 sprintf (buf, "0x%x", (unsigned int) disp);
12696 else
12697 sprintf (buf, "%d", (int) disp);
12698 }
12699}
12700
5d669648
L
12701/* Put DISP in BUF as signed hex number. */
12702
12703static void
12704print_displacement (char *buf, bfd_vma disp)
12705{
12706 bfd_signed_vma val = disp;
12707 char tmp[30];
12708 int i, j = 0;
12709
12710 if (val < 0)
12711 {
12712 buf[j++] = '-';
12713 val = -disp;
12714
12715 /* Check for possible overflow. */
12716 if (val < 0)
12717 {
12718 switch (address_mode)
12719 {
12720 case mode_64bit:
12721 strcpy (buf + j, "0x8000000000000000");
12722 break;
12723 case mode_32bit:
12724 strcpy (buf + j, "0x80000000");
12725 break;
12726 case mode_16bit:
12727 strcpy (buf + j, "0x8000");
12728 break;
12729 }
12730 return;
12731 }
12732 }
12733
12734 buf[j++] = '0';
12735 buf[j++] = 'x';
12736
0af1713e 12737 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
12738 for (i = 0; tmp[i] == '0'; i++)
12739 continue;
12740 if (tmp[i] == '\0')
12741 i--;
12742 strcpy (buf + j, tmp + i);
12743}
12744
3f31e633
JB
12745static void
12746intel_operand_size (int bytemode, int sizeflag)
12747{
12748 switch (bytemode)
12749 {
12750 case b_mode:
b6169b20 12751 case b_swap_mode:
42903f7f 12752 case dqb_mode:
3f31e633
JB
12753 oappend ("BYTE PTR ");
12754 break;
12755 case w_mode:
12756 case dqw_mode:
12757 oappend ("WORD PTR ");
12758 break;
1a114b12 12759 case stack_v_mode:
7bb15c6f 12760 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
3f31e633
JB
12761 {
12762 oappend ("QWORD PTR ");
3f31e633
JB
12763 break;
12764 }
12765 /* FALLTHRU */
12766 case v_mode:
b6169b20 12767 case v_swap_mode:
3f31e633 12768 case dq_mode:
161a04f6
L
12769 USED_REX (REX_W);
12770 if (rex & REX_W)
3f31e633 12771 oappend ("QWORD PTR ");
3f31e633 12772 else
f16cd0d5
L
12773 {
12774 if ((sizeflag & DFLAG) || bytemode == dq_mode)
12775 oappend ("DWORD PTR ");
12776 else
12777 oappend ("WORD PTR ");
12778 used_prefixes |= (prefixes & PREFIX_DATA);
12779 }
3f31e633 12780 break;
52fd6d94 12781 case z_mode:
161a04f6 12782 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
12783 *obufp++ = 'D';
12784 oappend ("WORD PTR ");
161a04f6 12785 if (!(rex & REX_W))
52fd6d94
JB
12786 used_prefixes |= (prefixes & PREFIX_DATA);
12787 break;
34b772a6
JB
12788 case a_mode:
12789 if (sizeflag & DFLAG)
12790 oappend ("QWORD PTR ");
12791 else
12792 oappend ("DWORD PTR ");
12793 used_prefixes |= (prefixes & PREFIX_DATA);
12794 break;
3f31e633 12795 case d_mode:
539f890d
L
12796 case d_scalar_mode:
12797 case d_scalar_swap_mode:
fa99fab2 12798 case d_swap_mode:
42903f7f 12799 case dqd_mode:
3f31e633
JB
12800 oappend ("DWORD PTR ");
12801 break;
12802 case q_mode:
539f890d
L
12803 case q_scalar_mode:
12804 case q_scalar_swap_mode:
b6169b20 12805 case q_swap_mode:
3f31e633
JB
12806 oappend ("QWORD PTR ");
12807 break;
12808 case m_mode:
cb712a9e 12809 if (address_mode == mode_64bit)
3f31e633
JB
12810 oappend ("QWORD PTR ");
12811 else
12812 oappend ("DWORD PTR ");
12813 break;
12814 case f_mode:
12815 if (sizeflag & DFLAG)
12816 oappend ("FWORD PTR ");
12817 else
12818 oappend ("DWORD PTR ");
12819 used_prefixes |= (prefixes & PREFIX_DATA);
12820 break;
12821 case t_mode:
12822 oappend ("TBYTE PTR ");
12823 break;
12824 case x_mode:
b6169b20 12825 case x_swap_mode:
c0f3af97
L
12826 if (need_vex)
12827 {
12828 switch (vex.length)
12829 {
12830 case 128:
12831 oappend ("XMMWORD PTR ");
12832 break;
12833 case 256:
12834 oappend ("YMMWORD PTR ");
12835 break;
12836 default:
12837 abort ();
12838 }
12839 }
12840 else
12841 oappend ("XMMWORD PTR ");
12842 break;
12843 case xmm_mode:
3f31e633
JB
12844 oappend ("XMMWORD PTR ");
12845 break;
c0f3af97
L
12846 case xmmq_mode:
12847 if (!need_vex)
12848 abort ();
12849
12850 switch (vex.length)
12851 {
12852 case 128:
12853 oappend ("QWORD PTR ");
12854 break;
12855 case 256:
12856 oappend ("XMMWORD PTR ");
12857 break;
12858 default:
12859 abort ();
12860 }
12861 break;
6c30d220
L
12862 case xmm_mb_mode:
12863 if (!need_vex)
12864 abort ();
12865
12866 switch (vex.length)
12867 {
12868 case 128:
12869 case 256:
12870 oappend ("BYTE PTR ");
12871 break;
12872 default:
12873 abort ();
12874 }
12875 break;
12876 case xmm_mw_mode:
12877 if (!need_vex)
12878 abort ();
12879
12880 switch (vex.length)
12881 {
12882 case 128:
12883 case 256:
12884 oappend ("WORD PTR ");
12885 break;
12886 default:
12887 abort ();
12888 }
12889 break;
12890 case xmm_md_mode:
12891 if (!need_vex)
12892 abort ();
12893
12894 switch (vex.length)
12895 {
12896 case 128:
12897 case 256:
12898 oappend ("DWORD PTR ");
12899 break;
12900 default:
12901 abort ();
12902 }
12903 break;
12904 case xmm_mq_mode:
12905 if (!need_vex)
12906 abort ();
12907
12908 switch (vex.length)
12909 {
12910 case 128:
12911 case 256:
12912 oappend ("QWORD PTR ");
12913 break;
12914 default:
12915 abort ();
12916 }
12917 break;
12918 case xmmdw_mode:
12919 if (!need_vex)
12920 abort ();
12921
12922 switch (vex.length)
12923 {
12924 case 128:
12925 oappend ("WORD PTR ");
12926 break;
12927 case 256:
12928 oappend ("DWORD PTR ");
12929 break;
12930 default:
12931 abort ();
12932 }
12933 break;
12934 case xmmqd_mode:
12935 if (!need_vex)
12936 abort ();
12937
12938 switch (vex.length)
12939 {
12940 case 128:
12941 oappend ("DWORD PTR ");
12942 break;
12943 case 256:
12944 oappend ("QWORD PTR ");
12945 break;
12946 default:
12947 abort ();
12948 }
12949 break;
c0f3af97
L
12950 case ymmq_mode:
12951 if (!need_vex)
12952 abort ();
12953
12954 switch (vex.length)
12955 {
12956 case 128:
12957 oappend ("QWORD PTR ");
12958 break;
12959 case 256:
12960 oappend ("YMMWORD PTR ");
12961 break;
12962 default:
12963 abort ();
12964 }
12965 break;
6c30d220
L
12966 case ymmxmm_mode:
12967 if (!need_vex)
12968 abort ();
12969
12970 switch (vex.length)
12971 {
12972 case 128:
12973 case 256:
12974 oappend ("XMMWORD PTR ");
12975 break;
12976 default:
12977 abort ();
12978 }
12979 break;
fb9c77c7
L
12980 case o_mode:
12981 oappend ("OWORD PTR ");
12982 break;
0bfee649 12983 case vex_w_dq_mode:
1c480963 12984 case vex_scalar_w_dq_mode:
6c30d220
L
12985 case vex_vsib_d_w_dq_mode:
12986 case vex_vsib_q_w_dq_mode:
0bfee649
L
12987 if (!need_vex)
12988 abort ();
12989
12990 if (vex.w)
12991 oappend ("QWORD PTR ");
12992 else
12993 oappend ("DWORD PTR ");
12994 break;
3f31e633
JB
12995 default:
12996 break;
12997 }
12998}
12999
252b5132 13000static void
c0f3af97 13001OP_E_register (int bytemode, int sizeflag)
252b5132 13002{
c0f3af97
L
13003 int reg = modrm.rm;
13004 const char **names;
252b5132 13005
c0f3af97
L
13006 USED_REX (REX_B);
13007 if ((rex & REX_B))
13008 reg += 8;
252b5132 13009
b6169b20
L
13010 if ((sizeflag & SUFFIX_ALWAYS)
13011 && (bytemode == b_swap_mode || bytemode == v_swap_mode))
13012 swap_operand ();
13013
c0f3af97 13014 switch (bytemode)
252b5132 13015 {
c0f3af97 13016 case b_mode:
b6169b20 13017 case b_swap_mode:
c0f3af97
L
13018 USED_REX (0);
13019 if (rex)
13020 names = names8rex;
13021 else
13022 names = names8;
13023 break;
13024 case w_mode:
13025 names = names16;
13026 break;
13027 case d_mode:
13028 names = names32;
13029 break;
13030 case q_mode:
13031 names = names64;
13032 break;
13033 case m_mode:
13034 names = address_mode == mode_64bit ? names64 : names32;
13035 break;
13036 case stack_v_mode:
7bb15c6f 13037 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
252b5132 13038 {
c0f3af97 13039 names = names64;
252b5132 13040 break;
252b5132 13041 }
c0f3af97
L
13042 bytemode = v_mode;
13043 /* FALLTHRU */
13044 case v_mode:
b6169b20 13045 case v_swap_mode:
c0f3af97
L
13046 case dq_mode:
13047 case dqb_mode:
13048 case dqd_mode:
13049 case dqw_mode:
13050 USED_REX (REX_W);
13051 if (rex & REX_W)
13052 names = names64;
c0f3af97 13053 else
f16cd0d5 13054 {
7bb15c6f 13055 if ((sizeflag & DFLAG)
f16cd0d5
L
13056 || (bytemode != v_mode
13057 && bytemode != v_swap_mode))
13058 names = names32;
13059 else
13060 names = names16;
13061 used_prefixes |= (prefixes & PREFIX_DATA);
13062 }
c0f3af97
L
13063 break;
13064 case 0:
13065 return;
13066 default:
13067 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
13068 return;
13069 }
c0f3af97
L
13070 oappend (names[reg]);
13071}
13072
13073static void
c1e679ec 13074OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
13075{
13076 bfd_vma disp = 0;
13077 int add = (rex & REX_B) ? 8 : 0;
13078 int riprel = 0;
252b5132 13079
c0f3af97 13080 USED_REX (REX_B);
3f31e633
JB
13081 if (intel_syntax)
13082 intel_operand_size (bytemode, sizeflag);
252b5132
RH
13083 append_seg ();
13084
5d669648 13085 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 13086 {
5d669648
L
13087 /* 32/64 bit address mode */
13088 int havedisp;
252b5132
RH
13089 int havesib;
13090 int havebase;
0f7da397 13091 int haveindex;
20afcfb7 13092 int needindex;
82c18208 13093 int base, rbase;
91d6fa6a 13094 int vindex = 0;
252b5132 13095 int scale = 0;
6c30d220
L
13096 const char **indexes64 = names64;
13097 const char **indexes32 = names32;
252b5132
RH
13098
13099 havesib = 0;
13100 havebase = 1;
0f7da397 13101 haveindex = 0;
7967e09e 13102 base = modrm.rm;
252b5132
RH
13103
13104 if (base == 4)
13105 {
13106 havesib = 1;
dfc8cf43 13107 vindex = sib.index;
161a04f6
L
13108 USED_REX (REX_X);
13109 if (rex & REX_X)
91d6fa6a 13110 vindex += 8;
6c30d220
L
13111 switch (bytemode)
13112 {
13113 case vex_vsib_d_w_dq_mode:
13114 case vex_vsib_q_w_dq_mode:
13115 if (!need_vex)
13116 abort ();
13117
13118 haveindex = 1;
13119 switch (vex.length)
13120 {
13121 case 128:
7bb15c6f 13122 indexes64 = indexes32 = names_xmm;
6c30d220
L
13123 break;
13124 case 256:
13125 if (!vex.w || bytemode == vex_vsib_q_w_dq_mode)
7bb15c6f 13126 indexes64 = indexes32 = names_ymm;
6c30d220 13127 else
7bb15c6f 13128 indexes64 = indexes32 = names_xmm;
6c30d220
L
13129 break;
13130 default:
13131 abort ();
13132 }
13133 break;
13134 default:
13135 haveindex = vindex != 4;
13136 break;
13137 }
13138 scale = sib.scale;
13139 base = sib.base;
252b5132
RH
13140 codep++;
13141 }
82c18208 13142 rbase = base + add;
252b5132 13143
7967e09e 13144 switch (modrm.mod)
252b5132
RH
13145 {
13146 case 0:
82c18208 13147 if (base == 5)
252b5132
RH
13148 {
13149 havebase = 0;
cb712a9e 13150 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
13151 riprel = 1;
13152 disp = get32s ();
252b5132
RH
13153 }
13154 break;
13155 case 1:
13156 FETCH_DATA (the_info, codep + 1);
13157 disp = *codep++;
13158 if ((disp & 0x80) != 0)
13159 disp -= 0x100;
13160 break;
13161 case 2:
52b15da3 13162 disp = get32s ();
252b5132
RH
13163 break;
13164 }
13165
20afcfb7
L
13166 /* In 32bit mode, we need index register to tell [offset] from
13167 [eiz*1 + offset]. */
13168 needindex = (havesib
13169 && !havebase
13170 && !haveindex
13171 && address_mode == mode_32bit);
13172 havedisp = (havebase
13173 || needindex
13174 || (havesib && (haveindex || scale != 0)));
5d669648 13175
252b5132 13176 if (!intel_syntax)
82c18208 13177 if (modrm.mod != 0 || base == 5)
db6eb5be 13178 {
5d669648
L
13179 if (havedisp || riprel)
13180 print_displacement (scratchbuf, disp);
13181 else
13182 print_operand_value (scratchbuf, 1, disp);
db6eb5be 13183 oappend (scratchbuf);
52b15da3
JH
13184 if (riprel)
13185 {
13186 set_op (disp, 1);
87767711 13187 oappend (sizeflag & AFLAG ? "(%rip)" : "(%eip)");
52b15da3 13188 }
db6eb5be 13189 }
2da11e11 13190
87767711
JB
13191 if (havebase || haveindex || riprel)
13192 used_prefixes |= PREFIX_ADDR;
13193
5d669648 13194 if (havedisp || (intel_syntax && riprel))
252b5132 13195 {
252b5132 13196 *obufp++ = open_char;
52b15da3 13197 if (intel_syntax && riprel)
185b1163
L
13198 {
13199 set_op (disp, 1);
87767711 13200 oappend (sizeflag & AFLAG ? "rip" : "eip");
185b1163 13201 }
db6eb5be 13202 *obufp = '\0';
252b5132 13203 if (havebase)
cb712a9e 13204 oappend (address_mode == mode_64bit && (sizeflag & AFLAG)
82c18208 13205 ? names64[rbase] : names32[rbase]);
252b5132
RH
13206 if (havesib)
13207 {
db51cc60
L
13208 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
13209 print index to tell base + index from base. */
13210 if (scale != 0
20afcfb7 13211 || needindex
db51cc60
L
13212 || haveindex
13213 || (havebase && base != ESP_REG_NUM))
252b5132 13214 {
9306ca4a 13215 if (!intel_syntax || havebase)
db6eb5be 13216 {
9306ca4a
JB
13217 *obufp++ = separator_char;
13218 *obufp = '\0';
db6eb5be 13219 }
db51cc60 13220 if (haveindex)
7bb15c6f 13221 oappend (address_mode == mode_64bit
db51cc60 13222 && (sizeflag & AFLAG)
6c30d220 13223 ? indexes64[vindex] : indexes32[vindex]);
db51cc60 13224 else
7bb15c6f 13225 oappend (address_mode == mode_64bit
db51cc60
L
13226 && (sizeflag & AFLAG)
13227 ? index64 : index32);
13228
db6eb5be
AM
13229 *obufp++ = scale_char;
13230 *obufp = '\0';
13231 sprintf (scratchbuf, "%d", 1 << scale);
13232 oappend (scratchbuf);
13233 }
252b5132 13234 }
185b1163 13235 if (intel_syntax
82c18208 13236 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 13237 {
db51cc60 13238 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
13239 {
13240 *obufp++ = '+';
13241 *obufp = '\0';
13242 }
05203043 13243 else if (modrm.mod != 1 && disp != -disp)
3d456fa1
JB
13244 {
13245 *obufp++ = '-';
13246 *obufp = '\0';
13247 disp = - (bfd_signed_vma) disp;
13248 }
13249
db51cc60
L
13250 if (havedisp)
13251 print_displacement (scratchbuf, disp);
13252 else
13253 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
13254 oappend (scratchbuf);
13255 }
252b5132
RH
13256
13257 *obufp++ = close_char;
db6eb5be 13258 *obufp = '\0';
252b5132
RH
13259 }
13260 else if (intel_syntax)
db6eb5be 13261 {
82c18208 13262 if (modrm.mod != 0 || base == 5)
db6eb5be 13263 {
252b5132
RH
13264 if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
13265 | PREFIX_ES | PREFIX_FS | PREFIX_GS))
13266 ;
13267 else
13268 {
d708bcba 13269 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
13270 oappend (":");
13271 }
52b15da3 13272 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
13273 oappend (scratchbuf);
13274 }
13275 }
252b5132
RH
13276 }
13277 else
f16cd0d5
L
13278 {
13279 /* 16 bit address mode */
13280 used_prefixes |= prefixes & PREFIX_ADDR;
7967e09e 13281 switch (modrm.mod)
252b5132
RH
13282 {
13283 case 0:
7967e09e 13284 if (modrm.rm == 6)
252b5132
RH
13285 {
13286 disp = get16 ();
13287 if ((disp & 0x8000) != 0)
13288 disp -= 0x10000;
13289 }
13290 break;
13291 case 1:
13292 FETCH_DATA (the_info, codep + 1);
13293 disp = *codep++;
13294 if ((disp & 0x80) != 0)
13295 disp -= 0x100;
13296 break;
13297 case 2:
13298 disp = get16 ();
13299 if ((disp & 0x8000) != 0)
13300 disp -= 0x10000;
13301 break;
13302 }
13303
13304 if (!intel_syntax)
7967e09e 13305 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 13306 {
5d669648 13307 print_displacement (scratchbuf, disp);
db6eb5be
AM
13308 oappend (scratchbuf);
13309 }
252b5132 13310
7967e09e 13311 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
13312 {
13313 *obufp++ = open_char;
db6eb5be 13314 *obufp = '\0';
7967e09e 13315 oappend (index16[modrm.rm]);
5d669648
L
13316 if (intel_syntax
13317 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 13318 {
5d669648 13319 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
13320 {
13321 *obufp++ = '+';
13322 *obufp = '\0';
13323 }
7967e09e 13324 else if (modrm.mod != 1)
3d456fa1
JB
13325 {
13326 *obufp++ = '-';
13327 *obufp = '\0';
13328 disp = - (bfd_signed_vma) disp;
13329 }
13330
5d669648 13331 print_displacement (scratchbuf, disp);
3d456fa1
JB
13332 oappend (scratchbuf);
13333 }
13334
db6eb5be
AM
13335 *obufp++ = close_char;
13336 *obufp = '\0';
252b5132 13337 }
3d456fa1
JB
13338 else if (intel_syntax)
13339 {
13340 if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
13341 | PREFIX_ES | PREFIX_FS | PREFIX_GS))
13342 ;
13343 else
13344 {
13345 oappend (names_seg[ds_reg - es_reg]);
13346 oappend (":");
13347 }
13348 print_operand_value (scratchbuf, 1, disp & 0xffff);
13349 oappend (scratchbuf);
13350 }
252b5132
RH
13351 }
13352}
13353
c0f3af97 13354static void
8b3f93e7 13355OP_E (int bytemode, int sizeflag)
c0f3af97
L
13356{
13357 /* Skip mod/rm byte. */
13358 MODRM_CHECK;
13359 codep++;
13360
13361 if (modrm.mod == 3)
13362 OP_E_register (bytemode, sizeflag);
13363 else
c1e679ec 13364 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
13365}
13366
252b5132 13367static void
26ca5450 13368OP_G (int bytemode, int sizeflag)
252b5132 13369{
52b15da3 13370 int add = 0;
161a04f6
L
13371 USED_REX (REX_R);
13372 if (rex & REX_R)
52b15da3 13373 add += 8;
252b5132
RH
13374 switch (bytemode)
13375 {
13376 case b_mode:
52b15da3
JH
13377 USED_REX (0);
13378 if (rex)
7967e09e 13379 oappend (names8rex[modrm.reg + add]);
52b15da3 13380 else
7967e09e 13381 oappend (names8[modrm.reg + add]);
252b5132
RH
13382 break;
13383 case w_mode:
7967e09e 13384 oappend (names16[modrm.reg + add]);
252b5132
RH
13385 break;
13386 case d_mode:
7967e09e 13387 oappend (names32[modrm.reg + add]);
52b15da3
JH
13388 break;
13389 case q_mode:
7967e09e 13390 oappend (names64[modrm.reg + add]);
252b5132
RH
13391 break;
13392 case v_mode:
9306ca4a 13393 case dq_mode:
42903f7f
L
13394 case dqb_mode:
13395 case dqd_mode:
9306ca4a 13396 case dqw_mode:
161a04f6
L
13397 USED_REX (REX_W);
13398 if (rex & REX_W)
7967e09e 13399 oappend (names64[modrm.reg + add]);
252b5132 13400 else
f16cd0d5
L
13401 {
13402 if ((sizeflag & DFLAG) || bytemode != v_mode)
13403 oappend (names32[modrm.reg + add]);
13404 else
13405 oappend (names16[modrm.reg + add]);
13406 used_prefixes |= (prefixes & PREFIX_DATA);
13407 }
252b5132 13408 break;
90700ea2 13409 case m_mode:
cb712a9e 13410 if (address_mode == mode_64bit)
7967e09e 13411 oappend (names64[modrm.reg + add]);
90700ea2 13412 else
7967e09e 13413 oappend (names32[modrm.reg + add]);
90700ea2 13414 break;
252b5132
RH
13415 default:
13416 oappend (INTERNAL_DISASSEMBLER_ERROR);
13417 break;
13418 }
13419}
13420
52b15da3 13421static bfd_vma
26ca5450 13422get64 (void)
52b15da3 13423{
5dd0794d 13424 bfd_vma x;
52b15da3 13425#ifdef BFD64
5dd0794d
AM
13426 unsigned int a;
13427 unsigned int b;
13428
52b15da3
JH
13429 FETCH_DATA (the_info, codep + 8);
13430 a = *codep++ & 0xff;
13431 a |= (*codep++ & 0xff) << 8;
13432 a |= (*codep++ & 0xff) << 16;
13433 a |= (*codep++ & 0xff) << 24;
5dd0794d 13434 b = *codep++ & 0xff;
52b15da3
JH
13435 b |= (*codep++ & 0xff) << 8;
13436 b |= (*codep++ & 0xff) << 16;
13437 b |= (*codep++ & 0xff) << 24;
13438 x = a + ((bfd_vma) b << 32);
13439#else
6608db57 13440 abort ();
5dd0794d 13441 x = 0;
52b15da3
JH
13442#endif
13443 return x;
13444}
13445
13446static bfd_signed_vma
26ca5450 13447get32 (void)
252b5132 13448{
52b15da3 13449 bfd_signed_vma x = 0;
252b5132
RH
13450
13451 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
13452 x = *codep++ & (bfd_signed_vma) 0xff;
13453 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
13454 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
13455 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
13456 return x;
13457}
13458
13459static bfd_signed_vma
26ca5450 13460get32s (void)
52b15da3
JH
13461{
13462 bfd_signed_vma x = 0;
13463
13464 FETCH_DATA (the_info, codep + 4);
13465 x = *codep++ & (bfd_signed_vma) 0xff;
13466 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
13467 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
13468 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
13469
13470 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
13471
252b5132
RH
13472 return x;
13473}
13474
13475static int
26ca5450 13476get16 (void)
252b5132
RH
13477{
13478 int x = 0;
13479
13480 FETCH_DATA (the_info, codep + 2);
13481 x = *codep++ & 0xff;
13482 x |= (*codep++ & 0xff) << 8;
13483 return x;
13484}
13485
13486static void
26ca5450 13487set_op (bfd_vma op, int riprel)
252b5132
RH
13488{
13489 op_index[op_ad] = op_ad;
cb712a9e 13490 if (address_mode == mode_64bit)
7081ff04
AJ
13491 {
13492 op_address[op_ad] = op;
13493 op_riprel[op_ad] = riprel;
13494 }
13495 else
13496 {
13497 /* Mask to get a 32-bit address. */
13498 op_address[op_ad] = op & 0xffffffff;
13499 op_riprel[op_ad] = riprel & 0xffffffff;
13500 }
252b5132
RH
13501}
13502
13503static void
26ca5450 13504OP_REG (int code, int sizeflag)
252b5132 13505{
2da11e11 13506 const char *s;
9b60702d 13507 int add;
de882298
RM
13508
13509 switch (code)
13510 {
13511 case es_reg: case ss_reg: case cs_reg:
13512 case ds_reg: case fs_reg: case gs_reg:
13513 oappend (names_seg[code - es_reg]);
13514 return;
13515 }
13516
161a04f6
L
13517 USED_REX (REX_B);
13518 if (rex & REX_B)
52b15da3 13519 add = 8;
9b60702d
L
13520 else
13521 add = 0;
52b15da3
JH
13522
13523 switch (code)
13524 {
52b15da3
JH
13525 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
13526 case sp_reg: case bp_reg: case si_reg: case di_reg:
13527 s = names16[code - ax_reg + add];
13528 break;
52b15da3
JH
13529 case al_reg: case ah_reg: case cl_reg: case ch_reg:
13530 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
13531 USED_REX (0);
13532 if (rex)
13533 s = names8rex[code - al_reg + add];
13534 else
13535 s = names8[code - al_reg];
13536 break;
6439fc28
AM
13537 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
13538 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
7bb15c6f 13539 if (address_mode == mode_64bit
6c067bbb 13540 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
13541 {
13542 s = names64[code - rAX_reg + add];
13543 break;
13544 }
13545 code += eAX_reg - rAX_reg;
6608db57 13546 /* Fall through. */
52b15da3
JH
13547 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
13548 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
13549 USED_REX (REX_W);
13550 if (rex & REX_W)
52b15da3 13551 s = names64[code - eAX_reg + add];
52b15da3 13552 else
f16cd0d5
L
13553 {
13554 if (sizeflag & DFLAG)
13555 s = names32[code - eAX_reg + add];
13556 else
13557 s = names16[code - eAX_reg + add];
13558 used_prefixes |= (prefixes & PREFIX_DATA);
13559 }
52b15da3 13560 break;
52b15da3
JH
13561 default:
13562 s = INTERNAL_DISASSEMBLER_ERROR;
13563 break;
13564 }
13565 oappend (s);
13566}
13567
13568static void
26ca5450 13569OP_IMREG (int code, int sizeflag)
52b15da3
JH
13570{
13571 const char *s;
252b5132
RH
13572
13573 switch (code)
13574 {
13575 case indir_dx_reg:
d708bcba 13576 if (intel_syntax)
52fd6d94 13577 s = "dx";
d708bcba 13578 else
db6eb5be 13579 s = "(%dx)";
252b5132
RH
13580 break;
13581 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
13582 case sp_reg: case bp_reg: case si_reg: case di_reg:
13583 s = names16[code - ax_reg];
13584 break;
13585 case es_reg: case ss_reg: case cs_reg:
13586 case ds_reg: case fs_reg: case gs_reg:
13587 s = names_seg[code - es_reg];
13588 break;
13589 case al_reg: case ah_reg: case cl_reg: case ch_reg:
13590 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
52b15da3
JH
13591 USED_REX (0);
13592 if (rex)
13593 s = names8rex[code - al_reg];
13594 else
13595 s = names8[code - al_reg];
252b5132
RH
13596 break;
13597 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
13598 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
13599 USED_REX (REX_W);
13600 if (rex & REX_W)
52b15da3 13601 s = names64[code - eAX_reg];
252b5132 13602 else
f16cd0d5
L
13603 {
13604 if (sizeflag & DFLAG)
13605 s = names32[code - eAX_reg];
13606 else
13607 s = names16[code - eAX_reg];
13608 used_prefixes |= (prefixes & PREFIX_DATA);
13609 }
252b5132 13610 break;
52fd6d94 13611 case z_mode_ax_reg:
161a04f6 13612 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
13613 s = *names32;
13614 else
13615 s = *names16;
161a04f6 13616 if (!(rex & REX_W))
52fd6d94
JB
13617 used_prefixes |= (prefixes & PREFIX_DATA);
13618 break;
252b5132
RH
13619 default:
13620 s = INTERNAL_DISASSEMBLER_ERROR;
13621 break;
13622 }
13623 oappend (s);
13624}
13625
13626static void
26ca5450 13627OP_I (int bytemode, int sizeflag)
252b5132 13628{
52b15da3
JH
13629 bfd_signed_vma op;
13630 bfd_signed_vma mask = -1;
252b5132
RH
13631
13632 switch (bytemode)
13633 {
13634 case b_mode:
13635 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
13636 op = *codep++;
13637 mask = 0xff;
13638 break;
13639 case q_mode:
cb712a9e 13640 if (address_mode == mode_64bit)
6439fc28
AM
13641 {
13642 op = get32s ();
13643 break;
13644 }
6608db57 13645 /* Fall through. */
252b5132 13646 case v_mode:
161a04f6
L
13647 USED_REX (REX_W);
13648 if (rex & REX_W)
52b15da3 13649 op = get32s ();
252b5132 13650 else
52b15da3 13651 {
f16cd0d5
L
13652 if (sizeflag & DFLAG)
13653 {
13654 op = get32 ();
13655 mask = 0xffffffff;
13656 }
13657 else
13658 {
13659 op = get16 ();
13660 mask = 0xfffff;
13661 }
13662 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 13663 }
252b5132
RH
13664 break;
13665 case w_mode:
52b15da3 13666 mask = 0xfffff;
252b5132
RH
13667 op = get16 ();
13668 break;
9306ca4a
JB
13669 case const_1_mode:
13670 if (intel_syntax)
6c067bbb 13671 oappend ("1");
9306ca4a 13672 return;
252b5132
RH
13673 default:
13674 oappend (INTERNAL_DISASSEMBLER_ERROR);
13675 return;
13676 }
13677
52b15da3
JH
13678 op &= mask;
13679 scratchbuf[0] = '$';
d708bcba
AM
13680 print_operand_value (scratchbuf + 1, 1, op);
13681 oappend (scratchbuf + intel_syntax);
52b15da3
JH
13682 scratchbuf[0] = '\0';
13683}
13684
13685static void
26ca5450 13686OP_I64 (int bytemode, int sizeflag)
52b15da3
JH
13687{
13688 bfd_signed_vma op;
13689 bfd_signed_vma mask = -1;
13690
cb712a9e 13691 if (address_mode != mode_64bit)
6439fc28
AM
13692 {
13693 OP_I (bytemode, sizeflag);
13694 return;
13695 }
13696
52b15da3
JH
13697 switch (bytemode)
13698 {
13699 case b_mode:
13700 FETCH_DATA (the_info, codep + 1);
13701 op = *codep++;
13702 mask = 0xff;
13703 break;
13704 case v_mode:
161a04f6
L
13705 USED_REX (REX_W);
13706 if (rex & REX_W)
52b15da3 13707 op = get64 ();
52b15da3
JH
13708 else
13709 {
f16cd0d5
L
13710 if (sizeflag & DFLAG)
13711 {
13712 op = get32 ();
13713 mask = 0xffffffff;
13714 }
13715 else
13716 {
13717 op = get16 ();
13718 mask = 0xfffff;
13719 }
13720 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 13721 }
52b15da3
JH
13722 break;
13723 case w_mode:
13724 mask = 0xfffff;
13725 op = get16 ();
13726 break;
13727 default:
13728 oappend (INTERNAL_DISASSEMBLER_ERROR);
13729 return;
13730 }
13731
13732 op &= mask;
13733 scratchbuf[0] = '$';
d708bcba
AM
13734 print_operand_value (scratchbuf + 1, 1, op);
13735 oappend (scratchbuf + intel_syntax);
252b5132
RH
13736 scratchbuf[0] = '\0';
13737}
13738
13739static void
26ca5450 13740OP_sI (int bytemode, int sizeflag)
252b5132 13741{
52b15da3 13742 bfd_signed_vma op;
252b5132
RH
13743
13744 switch (bytemode)
13745 {
13746 case b_mode:
e3949f17 13747 case b_T_mode:
252b5132
RH
13748 FETCH_DATA (the_info, codep + 1);
13749 op = *codep++;
13750 if ((op & 0x80) != 0)
13751 op -= 0x100;
e3949f17
L
13752 if (bytemode == b_T_mode)
13753 {
13754 if (address_mode != mode_64bit
7bb15c6f 13755 || !((sizeflag & DFLAG) || (rex & REX_W)))
e3949f17 13756 {
6c067bbb
RM
13757 /* The operand-size prefix is overridden by a REX prefix. */
13758 if ((sizeflag & DFLAG) || (rex & REX_W))
e3949f17
L
13759 op &= 0xffffffff;
13760 else
13761 op &= 0xffff;
13762 }
13763 }
13764 else
13765 {
13766 if (!(rex & REX_W))
13767 {
13768 if (sizeflag & DFLAG)
13769 op &= 0xffffffff;
13770 else
13771 op &= 0xffff;
13772 }
13773 }
252b5132
RH
13774 break;
13775 case v_mode:
7bb15c6f
RM
13776 /* The operand-size prefix is overridden by a REX prefix. */
13777 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 13778 op = get32s ();
252b5132 13779 else
d9e3625e 13780 op = get16 ();
252b5132
RH
13781 break;
13782 default:
13783 oappend (INTERNAL_DISASSEMBLER_ERROR);
13784 return;
13785 }
52b15da3
JH
13786
13787 scratchbuf[0] = '$';
13788 print_operand_value (scratchbuf + 1, 1, op);
d708bcba 13789 oappend (scratchbuf + intel_syntax);
252b5132
RH
13790}
13791
13792static void
26ca5450 13793OP_J (int bytemode, int sizeflag)
252b5132 13794{
52b15da3 13795 bfd_vma disp;
7081ff04 13796 bfd_vma mask = -1;
65ca155d 13797 bfd_vma segment = 0;
252b5132
RH
13798
13799 switch (bytemode)
13800 {
13801 case b_mode:
13802 FETCH_DATA (the_info, codep + 1);
13803 disp = *codep++;
13804 if ((disp & 0x80) != 0)
13805 disp -= 0x100;
13806 break;
13807 case v_mode:
f16cd0d5 13808 USED_REX (REX_W);
161a04f6 13809 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 13810 disp = get32s ();
252b5132
RH
13811 else
13812 {
13813 disp = get16 ();
206717e8
L
13814 if ((disp & 0x8000) != 0)
13815 disp -= 0x10000;
65ca155d
L
13816 /* In 16bit mode, address is wrapped around at 64k within
13817 the same segment. Otherwise, a data16 prefix on a jump
13818 instruction means that the pc is masked to 16 bits after
13819 the displacement is added! */
13820 mask = 0xffff;
13821 if ((prefixes & PREFIX_DATA) == 0)
13822 segment = ((start_pc + codep - start_codep)
13823 & ~((bfd_vma) 0xffff));
252b5132 13824 }
f16cd0d5
L
13825 if (!(rex & REX_W))
13826 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
13827 break;
13828 default:
13829 oappend (INTERNAL_DISASSEMBLER_ERROR);
13830 return;
13831 }
42d5f9c6 13832 disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
52b15da3
JH
13833 set_op (disp, 0);
13834 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
13835 oappend (scratchbuf);
13836}
13837
252b5132 13838static void
ed7841b3 13839OP_SEG (int bytemode, int sizeflag)
252b5132 13840{
ed7841b3 13841 if (bytemode == w_mode)
7967e09e 13842 oappend (names_seg[modrm.reg]);
ed7841b3 13843 else
7967e09e 13844 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
13845}
13846
13847static void
26ca5450 13848OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
13849{
13850 int seg, offset;
13851
c608c12e 13852 if (sizeflag & DFLAG)
252b5132 13853 {
c608c12e
AM
13854 offset = get32 ();
13855 seg = get16 ();
252b5132 13856 }
c608c12e
AM
13857 else
13858 {
13859 offset = get16 ();
13860 seg = get16 ();
13861 }
7d421014 13862 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 13863 if (intel_syntax)
3f31e633 13864 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
13865 else
13866 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 13867 oappend (scratchbuf);
252b5132
RH
13868}
13869
252b5132 13870static void
3f31e633 13871OP_OFF (int bytemode, int sizeflag)
252b5132 13872{
52b15da3 13873 bfd_vma off;
252b5132 13874
3f31e633
JB
13875 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
13876 intel_operand_size (bytemode, sizeflag);
252b5132
RH
13877 append_seg ();
13878
cb712a9e 13879 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
13880 off = get32 ();
13881 else
13882 off = get16 ();
13883
13884 if (intel_syntax)
13885 {
13886 if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
db6eb5be 13887 | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
252b5132 13888 {
d708bcba 13889 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
13890 oappend (":");
13891 }
13892 }
52b15da3
JH
13893 print_operand_value (scratchbuf, 1, off);
13894 oappend (scratchbuf);
13895}
6439fc28 13896
52b15da3 13897static void
3f31e633 13898OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
13899{
13900 bfd_vma off;
13901
539e75ad
L
13902 if (address_mode != mode_64bit
13903 || (prefixes & PREFIX_ADDR))
6439fc28
AM
13904 {
13905 OP_OFF (bytemode, sizeflag);
13906 return;
13907 }
13908
3f31e633
JB
13909 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
13910 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
13911 append_seg ();
13912
6608db57 13913 off = get64 ();
52b15da3
JH
13914
13915 if (intel_syntax)
13916 {
13917 if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
db6eb5be 13918 | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
52b15da3 13919 {
d708bcba 13920 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
13921 oappend (":");
13922 }
13923 }
13924 print_operand_value (scratchbuf, 1, off);
252b5132
RH
13925 oappend (scratchbuf);
13926}
13927
13928static void
26ca5450 13929ptr_reg (int code, int sizeflag)
252b5132 13930{
2da11e11 13931 const char *s;
d708bcba 13932
1d9f512f 13933 *obufp++ = open_char;
20f0a1fc 13934 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 13935 if (address_mode == mode_64bit)
c1a64871
JH
13936 {
13937 if (!(sizeflag & AFLAG))
db6eb5be 13938 s = names32[code - eAX_reg];
c1a64871 13939 else
db6eb5be 13940 s = names64[code - eAX_reg];
c1a64871 13941 }
52b15da3 13942 else if (sizeflag & AFLAG)
252b5132
RH
13943 s = names32[code - eAX_reg];
13944 else
13945 s = names16[code - eAX_reg];
13946 oappend (s);
1d9f512f
AM
13947 *obufp++ = close_char;
13948 *obufp = 0;
252b5132
RH
13949}
13950
13951static void
26ca5450 13952OP_ESreg (int code, int sizeflag)
252b5132 13953{
9306ca4a 13954 if (intel_syntax)
52fd6d94
JB
13955 {
13956 switch (codep[-1])
13957 {
13958 case 0x6d: /* insw/insl */
13959 intel_operand_size (z_mode, sizeflag);
13960 break;
13961 case 0xa5: /* movsw/movsl/movsq */
13962 case 0xa7: /* cmpsw/cmpsl/cmpsq */
13963 case 0xab: /* stosw/stosl */
13964 case 0xaf: /* scasw/scasl */
13965 intel_operand_size (v_mode, sizeflag);
13966 break;
13967 default:
13968 intel_operand_size (b_mode, sizeflag);
13969 }
13970 }
d708bcba 13971 oappend ("%es:" + intel_syntax);
252b5132
RH
13972 ptr_reg (code, sizeflag);
13973}
13974
13975static void
26ca5450 13976OP_DSreg (int code, int sizeflag)
252b5132 13977{
9306ca4a 13978 if (intel_syntax)
52fd6d94
JB
13979 {
13980 switch (codep[-1])
13981 {
13982 case 0x6f: /* outsw/outsl */
13983 intel_operand_size (z_mode, sizeflag);
13984 break;
13985 case 0xa5: /* movsw/movsl/movsq */
13986 case 0xa7: /* cmpsw/cmpsl/cmpsq */
13987 case 0xad: /* lodsw/lodsl/lodsq */
13988 intel_operand_size (v_mode, sizeflag);
13989 break;
13990 default:
13991 intel_operand_size (b_mode, sizeflag);
13992 }
13993 }
252b5132
RH
13994 if ((prefixes
13995 & (PREFIX_CS
13996 | PREFIX_DS
13997 | PREFIX_SS
13998 | PREFIX_ES
13999 | PREFIX_FS
14000 | PREFIX_GS)) == 0)
14001 prefixes |= PREFIX_DS;
6608db57 14002 append_seg ();
252b5132
RH
14003 ptr_reg (code, sizeflag);
14004}
14005
252b5132 14006static void
26ca5450 14007OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 14008{
9b60702d 14009 int add;
161a04f6 14010 if (rex & REX_R)
c4a530c5 14011 {
161a04f6 14012 USED_REX (REX_R);
c4a530c5
JB
14013 add = 8;
14014 }
cb712a9e 14015 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 14016 {
f16cd0d5 14017 all_prefixes[last_lock_prefix] = 0;
c4a530c5
JB
14018 used_prefixes |= PREFIX_LOCK;
14019 add = 8;
14020 }
9b60702d
L
14021 else
14022 add = 0;
7967e09e 14023 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
d708bcba 14024 oappend (scratchbuf + intel_syntax);
252b5132
RH
14025}
14026
252b5132 14027static void
26ca5450 14028OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 14029{
9b60702d 14030 int add;
161a04f6
L
14031 USED_REX (REX_R);
14032 if (rex & REX_R)
52b15da3 14033 add = 8;
9b60702d
L
14034 else
14035 add = 0;
d708bcba 14036 if (intel_syntax)
7967e09e 14037 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 14038 else
7967e09e 14039 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
14040 oappend (scratchbuf);
14041}
14042
252b5132 14043static void
26ca5450 14044OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 14045{
7967e09e 14046 sprintf (scratchbuf, "%%tr%d", modrm.reg);
d708bcba 14047 oappend (scratchbuf + intel_syntax);
252b5132
RH
14048}
14049
14050static void
6f74c397 14051OP_R (int bytemode, int sizeflag)
252b5132 14052{
7967e09e 14053 if (modrm.mod == 3)
2da11e11
AM
14054 OP_E (bytemode, sizeflag);
14055 else
6608db57 14056 BadOp ();
252b5132
RH
14057}
14058
14059static void
26ca5450 14060OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 14061{
b9733481
L
14062 int reg = modrm.reg;
14063 const char **names;
14064
041bd2e0
JH
14065 used_prefixes |= (prefixes & PREFIX_DATA);
14066 if (prefixes & PREFIX_DATA)
20f0a1fc 14067 {
b9733481 14068 names = names_xmm;
161a04f6
L
14069 USED_REX (REX_R);
14070 if (rex & REX_R)
b9733481 14071 reg += 8;
20f0a1fc 14072 }
041bd2e0 14073 else
b9733481
L
14074 names = names_mm;
14075 oappend (names[reg]);
252b5132
RH
14076}
14077
c608c12e 14078static void
c0f3af97 14079OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 14080{
b9733481
L
14081 int reg = modrm.reg;
14082 const char **names;
14083
161a04f6
L
14084 USED_REX (REX_R);
14085 if (rex & REX_R)
b9733481 14086 reg += 8;
539f890d
L
14087 if (need_vex
14088 && bytemode != xmm_mode
14089 && bytemode != scalar_mode)
c0f3af97
L
14090 {
14091 switch (vex.length)
14092 {
14093 case 128:
b9733481 14094 names = names_xmm;
c0f3af97
L
14095 break;
14096 case 256:
6c30d220
L
14097 if (vex.w || bytemode != vex_vsib_q_w_dq_mode)
14098 names = names_ymm;
14099 else
14100 names = names_xmm;
c0f3af97
L
14101 break;
14102 default:
14103 abort ();
14104 }
14105 }
14106 else
b9733481
L
14107 names = names_xmm;
14108 oappend (names[reg]);
c608c12e
AM
14109}
14110
252b5132 14111static void
26ca5450 14112OP_EM (int bytemode, int sizeflag)
252b5132 14113{
b9733481
L
14114 int reg;
14115 const char **names;
14116
7967e09e 14117 if (modrm.mod != 3)
252b5132 14118 {
b6169b20
L
14119 if (intel_syntax
14120 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
14121 {
14122 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
14123 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 14124 }
252b5132
RH
14125 OP_E (bytemode, sizeflag);
14126 return;
14127 }
14128
b6169b20
L
14129 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
14130 swap_operand ();
14131
6608db57 14132 /* Skip mod/rm byte. */
4bba6815 14133 MODRM_CHECK;
252b5132 14134 codep++;
041bd2e0 14135 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 14136 reg = modrm.rm;
041bd2e0 14137 if (prefixes & PREFIX_DATA)
20f0a1fc 14138 {
b9733481 14139 names = names_xmm;
161a04f6
L
14140 USED_REX (REX_B);
14141 if (rex & REX_B)
b9733481 14142 reg += 8;
20f0a1fc 14143 }
041bd2e0 14144 else
b9733481
L
14145 names = names_mm;
14146 oappend (names[reg]);
252b5132
RH
14147}
14148
246c51aa
L
14149/* cvt* are the only instructions in sse2 which have
14150 both SSE and MMX operands and also have 0x66 prefix
14151 in their opcode. 0x66 was originally used to differentiate
14152 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
14153 cvt* separately using OP_EMC and OP_MXC */
14154static void
14155OP_EMC (int bytemode, int sizeflag)
14156{
7967e09e 14157 if (modrm.mod != 3)
4d9567e0
MM
14158 {
14159 if (intel_syntax && bytemode == v_mode)
14160 {
14161 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
14162 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 14163 }
4d9567e0
MM
14164 OP_E (bytemode, sizeflag);
14165 return;
14166 }
246c51aa 14167
4d9567e0
MM
14168 /* Skip mod/rm byte. */
14169 MODRM_CHECK;
14170 codep++;
14171 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 14172 oappend (names_mm[modrm.rm]);
4d9567e0
MM
14173}
14174
14175static void
14176OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
14177{
14178 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 14179 oappend (names_mm[modrm.reg]);
4d9567e0
MM
14180}
14181
c608c12e 14182static void
26ca5450 14183OP_EX (int bytemode, int sizeflag)
c608c12e 14184{
b9733481
L
14185 int reg;
14186 const char **names;
d6f574e0
L
14187
14188 /* Skip mod/rm byte. */
14189 MODRM_CHECK;
14190 codep++;
14191
7967e09e 14192 if (modrm.mod != 3)
c608c12e 14193 {
c1e679ec 14194 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
14195 return;
14196 }
d6f574e0 14197
b9733481 14198 reg = modrm.rm;
161a04f6
L
14199 USED_REX (REX_B);
14200 if (rex & REX_B)
b9733481 14201 reg += 8;
c608c12e 14202
b6169b20 14203 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
14204 && (bytemode == x_swap_mode
14205 || bytemode == d_swap_mode
7bb15c6f 14206 || bytemode == d_scalar_swap_mode
539f890d
L
14207 || bytemode == q_swap_mode
14208 || bytemode == q_scalar_swap_mode))
b6169b20
L
14209 swap_operand ();
14210
c0f3af97
L
14211 if (need_vex
14212 && bytemode != xmm_mode
6c30d220
L
14213 && bytemode != xmmdw_mode
14214 && bytemode != xmmqd_mode
14215 && bytemode != xmm_mb_mode
14216 && bytemode != xmm_mw_mode
14217 && bytemode != xmm_md_mode
14218 && bytemode != xmm_mq_mode
539f890d
L
14219 && bytemode != xmmq_mode
14220 && bytemode != d_scalar_mode
7bb15c6f 14221 && bytemode != d_scalar_swap_mode
539f890d 14222 && bytemode != q_scalar_mode
1c480963
L
14223 && bytemode != q_scalar_swap_mode
14224 && bytemode != vex_scalar_w_dq_mode)
c0f3af97
L
14225 {
14226 switch (vex.length)
14227 {
14228 case 128:
b9733481 14229 names = names_xmm;
c0f3af97
L
14230 break;
14231 case 256:
b9733481 14232 names = names_ymm;
c0f3af97
L
14233 break;
14234 default:
14235 abort ();
14236 }
14237 }
14238 else
b9733481
L
14239 names = names_xmm;
14240 oappend (names[reg]);
c608c12e
AM
14241}
14242
252b5132 14243static void
26ca5450 14244OP_MS (int bytemode, int sizeflag)
252b5132 14245{
7967e09e 14246 if (modrm.mod == 3)
2da11e11
AM
14247 OP_EM (bytemode, sizeflag);
14248 else
6608db57 14249 BadOp ();
252b5132
RH
14250}
14251
992aaec9 14252static void
26ca5450 14253OP_XS (int bytemode, int sizeflag)
992aaec9 14254{
7967e09e 14255 if (modrm.mod == 3)
992aaec9
AM
14256 OP_EX (bytemode, sizeflag);
14257 else
6608db57 14258 BadOp ();
992aaec9
AM
14259}
14260
cc0ec051
AM
14261static void
14262OP_M (int bytemode, int sizeflag)
14263{
7967e09e 14264 if (modrm.mod == 3)
75413a22
L
14265 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
14266 BadOp ();
cc0ec051
AM
14267 else
14268 OP_E (bytemode, sizeflag);
14269}
14270
14271static void
14272OP_0f07 (int bytemode, int sizeflag)
14273{
7967e09e 14274 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
14275 BadOp ();
14276 else
14277 OP_E (bytemode, sizeflag);
14278}
14279
46e883c5 14280/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 14281 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 14282
cc0ec051 14283static void
46e883c5 14284NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 14285{
8b38ad71
L
14286 if ((prefixes & PREFIX_DATA) != 0
14287 || (rex != 0
14288 && rex != 0x48
14289 && address_mode == mode_64bit))
46e883c5
L
14290 OP_REG (bytemode, sizeflag);
14291 else
14292 strcpy (obuf, "nop");
14293}
14294
14295static void
14296NOP_Fixup2 (int bytemode, int sizeflag)
14297{
8b38ad71
L
14298 if ((prefixes & PREFIX_DATA) != 0
14299 || (rex != 0
14300 && rex != 0x48
14301 && address_mode == mode_64bit))
46e883c5 14302 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
14303}
14304
84037f8c 14305static const char *const Suffix3DNow[] = {
252b5132
RH
14306/* 00 */ NULL, NULL, NULL, NULL,
14307/* 04 */ NULL, NULL, NULL, NULL,
14308/* 08 */ NULL, NULL, NULL, NULL,
9e525108 14309/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
14310/* 10 */ NULL, NULL, NULL, NULL,
14311/* 14 */ NULL, NULL, NULL, NULL,
14312/* 18 */ NULL, NULL, NULL, NULL,
9e525108 14313/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
14314/* 20 */ NULL, NULL, NULL, NULL,
14315/* 24 */ NULL, NULL, NULL, NULL,
14316/* 28 */ NULL, NULL, NULL, NULL,
14317/* 2C */ NULL, NULL, NULL, NULL,
14318/* 30 */ NULL, NULL, NULL, NULL,
14319/* 34 */ NULL, NULL, NULL, NULL,
14320/* 38 */ NULL, NULL, NULL, NULL,
14321/* 3C */ NULL, NULL, NULL, NULL,
14322/* 40 */ NULL, NULL, NULL, NULL,
14323/* 44 */ NULL, NULL, NULL, NULL,
14324/* 48 */ NULL, NULL, NULL, NULL,
14325/* 4C */ NULL, NULL, NULL, NULL,
14326/* 50 */ NULL, NULL, NULL, NULL,
14327/* 54 */ NULL, NULL, NULL, NULL,
14328/* 58 */ NULL, NULL, NULL, NULL,
14329/* 5C */ NULL, NULL, NULL, NULL,
14330/* 60 */ NULL, NULL, NULL, NULL,
14331/* 64 */ NULL, NULL, NULL, NULL,
14332/* 68 */ NULL, NULL, NULL, NULL,
14333/* 6C */ NULL, NULL, NULL, NULL,
14334/* 70 */ NULL, NULL, NULL, NULL,
14335/* 74 */ NULL, NULL, NULL, NULL,
14336/* 78 */ NULL, NULL, NULL, NULL,
14337/* 7C */ NULL, NULL, NULL, NULL,
14338/* 80 */ NULL, NULL, NULL, NULL,
14339/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
14340/* 88 */ NULL, NULL, "pfnacc", NULL,
14341/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
14342/* 90 */ "pfcmpge", NULL, NULL, NULL,
14343/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
14344/* 98 */ NULL, NULL, "pfsub", NULL,
14345/* 9C */ NULL, NULL, "pfadd", NULL,
14346/* A0 */ "pfcmpgt", NULL, NULL, NULL,
14347/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
14348/* A8 */ NULL, NULL, "pfsubr", NULL,
14349/* AC */ NULL, NULL, "pfacc", NULL,
14350/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 14351/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 14352/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
14353/* BC */ NULL, NULL, NULL, "pavgusb",
14354/* C0 */ NULL, NULL, NULL, NULL,
14355/* C4 */ NULL, NULL, NULL, NULL,
14356/* C8 */ NULL, NULL, NULL, NULL,
14357/* CC */ NULL, NULL, NULL, NULL,
14358/* D0 */ NULL, NULL, NULL, NULL,
14359/* D4 */ NULL, NULL, NULL, NULL,
14360/* D8 */ NULL, NULL, NULL, NULL,
14361/* DC */ NULL, NULL, NULL, NULL,
14362/* E0 */ NULL, NULL, NULL, NULL,
14363/* E4 */ NULL, NULL, NULL, NULL,
14364/* E8 */ NULL, NULL, NULL, NULL,
14365/* EC */ NULL, NULL, NULL, NULL,
14366/* F0 */ NULL, NULL, NULL, NULL,
14367/* F4 */ NULL, NULL, NULL, NULL,
14368/* F8 */ NULL, NULL, NULL, NULL,
14369/* FC */ NULL, NULL, NULL, NULL,
14370};
14371
14372static void
26ca5450 14373OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
14374{
14375 const char *mnemonic;
14376
14377 FETCH_DATA (the_info, codep + 1);
14378 /* AMD 3DNow! instructions are specified by an opcode suffix in the
14379 place where an 8-bit immediate would normally go. ie. the last
14380 byte of the instruction. */
ea397f5b 14381 obufp = mnemonicendp;
c608c12e 14382 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 14383 if (mnemonic)
2da11e11 14384 oappend (mnemonic);
252b5132
RH
14385 else
14386 {
14387 /* Since a variable sized modrm/sib chunk is between the start
14388 of the opcode (0x0f0f) and the opcode suffix, we need to do
14389 all the modrm processing first, and don't know until now that
14390 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
14391 op_out[0][0] = '\0';
14392 op_out[1][0] = '\0';
6608db57 14393 BadOp ();
252b5132 14394 }
ea397f5b 14395 mnemonicendp = obufp;
252b5132 14396}
c608c12e 14397
ea397f5b
L
14398static struct op simd_cmp_op[] =
14399{
14400 { STRING_COMMA_LEN ("eq") },
14401 { STRING_COMMA_LEN ("lt") },
14402 { STRING_COMMA_LEN ("le") },
14403 { STRING_COMMA_LEN ("unord") },
14404 { STRING_COMMA_LEN ("neq") },
14405 { STRING_COMMA_LEN ("nlt") },
14406 { STRING_COMMA_LEN ("nle") },
14407 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
14408};
14409
14410static void
ad19981d 14411CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
14412{
14413 unsigned int cmp_type;
14414
14415 FETCH_DATA (the_info, codep + 1);
14416 cmp_type = *codep++ & 0xff;
c0f3af97 14417 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 14418 {
ad19981d 14419 char suffix [3];
ea397f5b 14420 char *p = mnemonicendp - 2;
ad19981d
L
14421 suffix[0] = p[0];
14422 suffix[1] = p[1];
14423 suffix[2] = '\0';
ea397f5b
L
14424 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
14425 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
14426 }
14427 else
14428 {
ad19981d
L
14429 /* We have a reserved extension byte. Output it directly. */
14430 scratchbuf[0] = '$';
14431 print_operand_value (scratchbuf + 1, 1, cmp_type);
14432 oappend (scratchbuf + intel_syntax);
14433 scratchbuf[0] = '\0';
c608c12e
AM
14434 }
14435}
14436
ca164297 14437static void
b844680a
L
14438OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
14439 int sizeflag ATTRIBUTE_UNUSED)
14440{
14441 /* mwait %eax,%ecx */
14442 if (!intel_syntax)
14443 {
14444 const char **names = (address_mode == mode_64bit
14445 ? names64 : names32);
14446 strcpy (op_out[0], names[0]);
14447 strcpy (op_out[1], names[1]);
14448 two_source_ops = 1;
14449 }
14450 /* Skip mod/rm byte. */
14451 MODRM_CHECK;
14452 codep++;
14453}
14454
14455static void
14456OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
14457 int sizeflag ATTRIBUTE_UNUSED)
ca164297 14458{
b844680a
L
14459 /* monitor %eax,%ecx,%edx" */
14460 if (!intel_syntax)
ca164297 14461 {
b844680a 14462 const char **op1_names;
cb712a9e
L
14463 const char **names = (address_mode == mode_64bit
14464 ? names64 : names32);
1d9f512f 14465
b844680a
L
14466 if (!(prefixes & PREFIX_ADDR))
14467 op1_names = (address_mode == mode_16bit
14468 ? names16 : names);
ca164297
L
14469 else
14470 {
b844680a 14471 /* Remove "addr16/addr32". */
f16cd0d5 14472 all_prefixes[last_addr_prefix] = 0;
b844680a
L
14473 op1_names = (address_mode != mode_32bit
14474 ? names32 : names16);
14475 used_prefixes |= PREFIX_ADDR;
ca164297 14476 }
b844680a
L
14477 strcpy (op_out[0], op1_names[0]);
14478 strcpy (op_out[1], names[1]);
14479 strcpy (op_out[2], names[2]);
14480 two_source_ops = 1;
ca164297 14481 }
b844680a
L
14482 /* Skip mod/rm byte. */
14483 MODRM_CHECK;
14484 codep++;
30123838
JB
14485}
14486
6608db57
KH
14487static void
14488BadOp (void)
2da11e11 14489{
6608db57
KH
14490 /* Throw away prefixes and 1st. opcode byte. */
14491 codep = insn_codep + 1;
2da11e11
AM
14492 oappend ("(bad)");
14493}
4cc91dba 14494
35c52694
L
14495static void
14496REP_Fixup (int bytemode, int sizeflag)
14497{
14498 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
14499 lods and stos. */
35c52694 14500 if (prefixes & PREFIX_REPZ)
f16cd0d5 14501 all_prefixes[last_repz_prefix] = REP_PREFIX;
35c52694
L
14502
14503 switch (bytemode)
14504 {
14505 case al_reg:
14506 case eAX_reg:
14507 case indir_dx_reg:
14508 OP_IMREG (bytemode, sizeflag);
14509 break;
14510 case eDI_reg:
14511 OP_ESreg (bytemode, sizeflag);
14512 break;
14513 case eSI_reg:
14514 OP_DSreg (bytemode, sizeflag);
14515 break;
14516 default:
14517 abort ();
14518 break;
14519 }
14520}
f5804c90 14521
42164a71
L
14522/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
14523 "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
14524 */
14525
14526static void
14527HLE_Fixup1 (int bytemode, int sizeflag)
14528{
14529 if (modrm.mod != 3
14530 && (prefixes & PREFIX_LOCK) != 0)
14531 {
14532 if (prefixes & PREFIX_REPZ)
14533 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
14534 if (prefixes & PREFIX_REPNZ)
14535 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
14536 }
14537
14538 OP_E (bytemode, sizeflag);
14539}
14540
14541/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
14542 "xacquire"/"xrelease" for memory operand. No check for LOCK prefix.
14543 */
14544
14545static void
14546HLE_Fixup2 (int bytemode, int sizeflag)
14547{
14548 if (modrm.mod != 3)
14549 {
14550 if (prefixes & PREFIX_REPZ)
14551 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
14552 if (prefixes & PREFIX_REPNZ)
14553 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
14554 }
14555
14556 OP_E (bytemode, sizeflag);
14557}
14558
14559/* Similar to OP_E. But the 0xf3 prefixes should be displayed as
14560 "xrelease" for memory operand. No check for LOCK prefix. */
14561
14562static void
14563HLE_Fixup3 (int bytemode, int sizeflag)
14564{
14565 if (modrm.mod != 3
14566 && last_repz_prefix > last_repnz_prefix
14567 && (prefixes & PREFIX_REPZ) != 0)
14568 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
14569
14570 OP_E (bytemode, sizeflag);
14571}
14572
f5804c90
L
14573static void
14574CMPXCHG8B_Fixup (int bytemode, int sizeflag)
14575{
161a04f6
L
14576 USED_REX (REX_W);
14577 if (rex & REX_W)
f5804c90
L
14578 {
14579 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
14580 char *p = mnemonicendp - 2;
14581 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 14582 bytemode = o_mode;
f5804c90 14583 }
42164a71
L
14584 else if ((prefixes & PREFIX_LOCK) != 0)
14585 {
14586 if (prefixes & PREFIX_REPZ)
14587 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
14588 if (prefixes & PREFIX_REPNZ)
14589 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
14590 }
14591
f5804c90
L
14592 OP_M (bytemode, sizeflag);
14593}
42903f7f
L
14594
14595static void
14596XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
14597{
b9733481
L
14598 const char **names;
14599
c0f3af97
L
14600 if (need_vex)
14601 {
14602 switch (vex.length)
14603 {
14604 case 128:
b9733481 14605 names = names_xmm;
c0f3af97
L
14606 break;
14607 case 256:
b9733481 14608 names = names_ymm;
c0f3af97
L
14609 break;
14610 default:
14611 abort ();
14612 }
14613 }
14614 else
b9733481
L
14615 names = names_xmm;
14616 oappend (names[reg]);
42903f7f 14617}
381d071f
L
14618
14619static void
14620CRC32_Fixup (int bytemode, int sizeflag)
14621{
14622 /* Add proper suffix to "crc32". */
ea397f5b 14623 char *p = mnemonicendp;
381d071f
L
14624
14625 switch (bytemode)
14626 {
14627 case b_mode:
20592a94 14628 if (intel_syntax)
ea397f5b 14629 goto skip;
20592a94 14630
381d071f
L
14631 *p++ = 'b';
14632 break;
14633 case v_mode:
20592a94 14634 if (intel_syntax)
ea397f5b 14635 goto skip;
20592a94 14636
381d071f
L
14637 USED_REX (REX_W);
14638 if (rex & REX_W)
14639 *p++ = 'q';
7bb15c6f 14640 else
f16cd0d5
L
14641 {
14642 if (sizeflag & DFLAG)
14643 *p++ = 'l';
14644 else
14645 *p++ = 'w';
14646 used_prefixes |= (prefixes & PREFIX_DATA);
14647 }
381d071f
L
14648 break;
14649 default:
14650 oappend (INTERNAL_DISASSEMBLER_ERROR);
14651 break;
14652 }
ea397f5b 14653 mnemonicendp = p;
381d071f
L
14654 *p = '\0';
14655
ea397f5b 14656skip:
381d071f
L
14657 if (modrm.mod == 3)
14658 {
14659 int add;
14660
14661 /* Skip mod/rm byte. */
14662 MODRM_CHECK;
14663 codep++;
14664
14665 USED_REX (REX_B);
14666 add = (rex & REX_B) ? 8 : 0;
14667 if (bytemode == b_mode)
14668 {
14669 USED_REX (0);
14670 if (rex)
14671 oappend (names8rex[modrm.rm + add]);
14672 else
14673 oappend (names8[modrm.rm + add]);
14674 }
14675 else
14676 {
14677 USED_REX (REX_W);
14678 if (rex & REX_W)
14679 oappend (names64[modrm.rm + add]);
14680 else if ((prefixes & PREFIX_DATA))
14681 oappend (names16[modrm.rm + add]);
14682 else
14683 oappend (names32[modrm.rm + add]);
14684 }
14685 }
14686 else
9344ff29 14687 OP_E (bytemode, sizeflag);
381d071f 14688}
85f10a01 14689
eacc9c89
L
14690static void
14691FXSAVE_Fixup (int bytemode, int sizeflag)
14692{
14693 /* Add proper suffix to "fxsave" and "fxrstor". */
14694 USED_REX (REX_W);
14695 if (rex & REX_W)
14696 {
14697 char *p = mnemonicendp;
14698 *p++ = '6';
14699 *p++ = '4';
14700 *p = '\0';
14701 mnemonicendp = p;
14702 }
14703 OP_M (bytemode, sizeflag);
14704}
14705
c0f3af97
L
14706/* Display the destination register operand for instructions with
14707 VEX. */
14708
14709static void
14710OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
14711{
539f890d 14712 int reg;
b9733481
L
14713 const char **names;
14714
c0f3af97
L
14715 if (!need_vex)
14716 abort ();
14717
14718 if (!need_vex_reg)
14719 return;
14720
539f890d
L
14721 reg = vex.register_specifier;
14722 if (bytemode == vex_scalar_mode)
14723 {
14724 oappend (names_xmm[reg]);
14725 return;
14726 }
14727
c0f3af97
L
14728 switch (vex.length)
14729 {
14730 case 128:
14731 switch (bytemode)
14732 {
14733 case vex_mode:
14734 case vex128_mode:
6c30d220 14735 case vex_vsib_q_w_dq_mode:
cb21baef
L
14736 names = names_xmm;
14737 break;
14738 case dq_mode:
14739 if (vex.w)
14740 names = names64;
14741 else
14742 names = names32;
c0f3af97
L
14743 break;
14744 default:
14745 abort ();
14746 return;
14747 }
c0f3af97
L
14748 break;
14749 case 256:
14750 switch (bytemode)
14751 {
14752 case vex_mode:
14753 case vex256_mode:
6c30d220
L
14754 names = names_ymm;
14755 break;
14756 case vex_vsib_q_w_dq_mode:
14757 names = vex.w ? names_ymm : names_xmm;
c0f3af97
L
14758 break;
14759 default:
14760 abort ();
14761 return;
14762 }
c0f3af97
L
14763 break;
14764 default:
14765 abort ();
14766 break;
14767 }
539f890d 14768 oappend (names[reg]);
c0f3af97
L
14769}
14770
922d8de8
DR
14771/* Get the VEX immediate byte without moving codep. */
14772
14773static unsigned char
ccc5981b 14774get_vex_imm8 (int sizeflag, int opnum)
922d8de8
DR
14775{
14776 int bytes_before_imm = 0;
14777
922d8de8
DR
14778 if (modrm.mod != 3)
14779 {
14780 /* There are SIB/displacement bytes. */
14781 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
6c067bbb 14782 {
922d8de8 14783 /* 32/64 bit address mode */
6c067bbb 14784 int base = modrm.rm;
922d8de8
DR
14785
14786 /* Check SIB byte. */
6c067bbb
RM
14787 if (base == 4)
14788 {
14789 FETCH_DATA (the_info, codep + 1);
14790 base = *codep & 7;
14791 /* When decoding the third source, don't increase
14792 bytes_before_imm as this has already been incremented
14793 by one in OP_E_memory while decoding the second
14794 source operand. */
14795 if (opnum == 0)
14796 bytes_before_imm++;
14797 }
14798
14799 /* Don't increase bytes_before_imm when decoding the third source,
14800 it has already been incremented by OP_E_memory while decoding
14801 the second source operand. */
14802 if (opnum == 0)
14803 {
14804 switch (modrm.mod)
14805 {
14806 case 0:
14807 /* When modrm.rm == 5 or modrm.rm == 4 and base in
14808 SIB == 5, there is a 4 byte displacement. */
14809 if (base != 5)
14810 /* No displacement. */
14811 break;
14812 case 2:
14813 /* 4 byte displacement. */
14814 bytes_before_imm += 4;
14815 break;
14816 case 1:
14817 /* 1 byte displacement. */
14818 bytes_before_imm++;
14819 break;
14820 }
14821 }
14822 }
922d8de8 14823 else
02e647f9
SP
14824 {
14825 /* 16 bit address mode */
6c067bbb
RM
14826 /* Don't increase bytes_before_imm when decoding the third source,
14827 it has already been incremented by OP_E_memory while decoding
14828 the second source operand. */
14829 if (opnum == 0)
14830 {
02e647f9
SP
14831 switch (modrm.mod)
14832 {
14833 case 0:
14834 /* When modrm.rm == 6, there is a 2 byte displacement. */
14835 if (modrm.rm != 6)
14836 /* No displacement. */
14837 break;
14838 case 2:
14839 /* 2 byte displacement. */
14840 bytes_before_imm += 2;
14841 break;
14842 case 1:
14843 /* 1 byte displacement: when decoding the third source,
14844 don't increase bytes_before_imm as this has already
14845 been incremented by one in OP_E_memory while decoding
14846 the second source operand. */
14847 if (opnum == 0)
14848 bytes_before_imm++;
ccc5981b 14849
02e647f9
SP
14850 break;
14851 }
922d8de8
DR
14852 }
14853 }
14854 }
14855
14856 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
14857 return codep [bytes_before_imm];
14858}
14859
14860static void
14861OP_EX_VexReg (int bytemode, int sizeflag, int reg)
14862{
b9733481
L
14863 const char **names;
14864
922d8de8
DR
14865 if (reg == -1 && modrm.mod != 3)
14866 {
14867 OP_E_memory (bytemode, sizeflag);
14868 return;
14869 }
14870 else
14871 {
14872 if (reg == -1)
14873 {
14874 reg = modrm.rm;
14875 USED_REX (REX_B);
14876 if (rex & REX_B)
14877 reg += 8;
14878 }
14879 else if (reg > 7 && address_mode != mode_64bit)
14880 BadOp ();
14881 }
14882
14883 switch (vex.length)
14884 {
14885 case 128:
b9733481 14886 names = names_xmm;
922d8de8
DR
14887 break;
14888 case 256:
b9733481 14889 names = names_ymm;
922d8de8
DR
14890 break;
14891 default:
14892 abort ();
14893 }
b9733481 14894 oappend (names[reg]);
922d8de8
DR
14895}
14896
a683cc34
SP
14897static void
14898OP_EX_VexImmW (int bytemode, int sizeflag)
14899{
14900 int reg = -1;
14901 static unsigned char vex_imm8;
14902
14903 if (vex_w_done == 0)
14904 {
14905 vex_w_done = 1;
14906
14907 /* Skip mod/rm byte. */
14908 MODRM_CHECK;
14909 codep++;
14910
14911 vex_imm8 = get_vex_imm8 (sizeflag, 0);
14912
14913 if (vex.w)
14914 reg = vex_imm8 >> 4;
14915
14916 OP_EX_VexReg (bytemode, sizeflag, reg);
14917 }
14918 else if (vex_w_done == 1)
14919 {
14920 vex_w_done = 2;
14921
14922 if (!vex.w)
14923 reg = vex_imm8 >> 4;
14924
14925 OP_EX_VexReg (bytemode, sizeflag, reg);
14926 }
14927 else
14928 {
14929 /* Output the imm8 directly. */
14930 scratchbuf[0] = '$';
14931 print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
14932 oappend (scratchbuf + intel_syntax);
14933 scratchbuf[0] = '\0';
14934 codep++;
14935 }
14936}
14937
5dd85c99
SP
14938static void
14939OP_Vex_2src (int bytemode, int sizeflag)
14940{
14941 if (modrm.mod == 3)
14942 {
b9733481 14943 int reg = modrm.rm;
5dd85c99 14944 USED_REX (REX_B);
b9733481
L
14945 if (rex & REX_B)
14946 reg += 8;
14947 oappend (names_xmm[reg]);
5dd85c99
SP
14948 }
14949 else
14950 {
14951 if (intel_syntax
14952 && (bytemode == v_mode || bytemode == v_swap_mode))
14953 {
14954 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
14955 used_prefixes |= (prefixes & PREFIX_DATA);
14956 }
14957 OP_E (bytemode, sizeflag);
14958 }
14959}
14960
14961static void
14962OP_Vex_2src_1 (int bytemode, int sizeflag)
14963{
14964 if (modrm.mod == 3)
14965 {
14966 /* Skip mod/rm byte. */
14967 MODRM_CHECK;
14968 codep++;
14969 }
14970
14971 if (vex.w)
b9733481 14972 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
14973 else
14974 OP_Vex_2src (bytemode, sizeflag);
14975}
14976
14977static void
14978OP_Vex_2src_2 (int bytemode, int sizeflag)
14979{
14980 if (vex.w)
14981 OP_Vex_2src (bytemode, sizeflag);
14982 else
b9733481 14983 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
14984}
14985
922d8de8
DR
14986static void
14987OP_EX_VexW (int bytemode, int sizeflag)
14988{
14989 int reg = -1;
14990
14991 if (!vex_w_done)
14992 {
14993 vex_w_done = 1;
41effecb
SP
14994
14995 /* Skip mod/rm byte. */
14996 MODRM_CHECK;
14997 codep++;
14998
922d8de8 14999 if (vex.w)
ccc5981b 15000 reg = get_vex_imm8 (sizeflag, 0) >> 4;
922d8de8
DR
15001 }
15002 else
15003 {
15004 if (!vex.w)
ccc5981b 15005 reg = get_vex_imm8 (sizeflag, 1) >> 4;
922d8de8
DR
15006 }
15007
15008 OP_EX_VexReg (bytemode, sizeflag, reg);
15009}
15010
922d8de8
DR
15011static void
15012VEXI4_Fixup (int bytemode ATTRIBUTE_UNUSED,
15013 int sizeflag ATTRIBUTE_UNUSED)
15014{
15015 /* Skip the immediate byte and check for invalid bits. */
15016 FETCH_DATA (the_info, codep + 1);
15017 if (*codep++ & 0xf)
15018 BadOp ();
15019}
15020
c0f3af97
L
15021static void
15022OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
15023{
15024 int reg;
b9733481
L
15025 const char **names;
15026
c0f3af97
L
15027 FETCH_DATA (the_info, codep + 1);
15028 reg = *codep++;
15029
15030 if (bytemode != x_mode)
15031 abort ();
15032
15033 if (reg & 0xf)
15034 BadOp ();
15035
15036 reg >>= 4;
dae39acc
L
15037 if (reg > 7 && address_mode != mode_64bit)
15038 BadOp ();
15039
c0f3af97
L
15040 switch (vex.length)
15041 {
15042 case 128:
b9733481 15043 names = names_xmm;
c0f3af97
L
15044 break;
15045 case 256:
b9733481 15046 names = names_ymm;
c0f3af97
L
15047 break;
15048 default:
15049 abort ();
15050 }
b9733481 15051 oappend (names[reg]);
c0f3af97
L
15052}
15053
922d8de8
DR
15054static void
15055OP_XMM_VexW (int bytemode, int sizeflag)
15056{
15057 /* Turn off the REX.W bit since it is used for swapping operands
15058 now. */
15059 rex &= ~REX_W;
15060 OP_XMM (bytemode, sizeflag);
15061}
15062
c0f3af97
L
15063static void
15064OP_EX_Vex (int bytemode, int sizeflag)
15065{
15066 if (modrm.mod != 3)
15067 {
15068 if (vex.register_specifier != 0)
15069 BadOp ();
15070 need_vex_reg = 0;
15071 }
15072 OP_EX (bytemode, sizeflag);
15073}
15074
15075static void
15076OP_XMM_Vex (int bytemode, int sizeflag)
15077{
15078 if (modrm.mod != 3)
15079 {
15080 if (vex.register_specifier != 0)
15081 BadOp ();
15082 need_vex_reg = 0;
15083 }
15084 OP_XMM (bytemode, sizeflag);
15085}
15086
15087static void
15088VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15089{
15090 switch (vex.length)
15091 {
15092 case 128:
ea397f5b 15093 mnemonicendp = stpcpy (obuf, "vzeroupper");
c0f3af97
L
15094 break;
15095 case 256:
ea397f5b 15096 mnemonicendp = stpcpy (obuf, "vzeroall");
c0f3af97
L
15097 break;
15098 default:
15099 abort ();
15100 }
15101}
15102
ea397f5b
L
15103static struct op vex_cmp_op[] =
15104{
15105 { STRING_COMMA_LEN ("eq") },
15106 { STRING_COMMA_LEN ("lt") },
15107 { STRING_COMMA_LEN ("le") },
15108 { STRING_COMMA_LEN ("unord") },
15109 { STRING_COMMA_LEN ("neq") },
15110 { STRING_COMMA_LEN ("nlt") },
15111 { STRING_COMMA_LEN ("nle") },
15112 { STRING_COMMA_LEN ("ord") },
15113 { STRING_COMMA_LEN ("eq_uq") },
15114 { STRING_COMMA_LEN ("nge") },
15115 { STRING_COMMA_LEN ("ngt") },
15116 { STRING_COMMA_LEN ("false") },
15117 { STRING_COMMA_LEN ("neq_oq") },
15118 { STRING_COMMA_LEN ("ge") },
15119 { STRING_COMMA_LEN ("gt") },
15120 { STRING_COMMA_LEN ("true") },
15121 { STRING_COMMA_LEN ("eq_os") },
15122 { STRING_COMMA_LEN ("lt_oq") },
15123 { STRING_COMMA_LEN ("le_oq") },
15124 { STRING_COMMA_LEN ("unord_s") },
15125 { STRING_COMMA_LEN ("neq_us") },
15126 { STRING_COMMA_LEN ("nlt_uq") },
15127 { STRING_COMMA_LEN ("nle_uq") },
15128 { STRING_COMMA_LEN ("ord_s") },
15129 { STRING_COMMA_LEN ("eq_us") },
15130 { STRING_COMMA_LEN ("nge_uq") },
15131 { STRING_COMMA_LEN ("ngt_uq") },
15132 { STRING_COMMA_LEN ("false_os") },
15133 { STRING_COMMA_LEN ("neq_os") },
15134 { STRING_COMMA_LEN ("ge_oq") },
15135 { STRING_COMMA_LEN ("gt_oq") },
15136 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
15137};
15138
15139static void
15140VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15141{
15142 unsigned int cmp_type;
15143
15144 FETCH_DATA (the_info, codep + 1);
15145 cmp_type = *codep++ & 0xff;
15146 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
15147 {
15148 char suffix [3];
ea397f5b 15149 char *p = mnemonicendp - 2;
c0f3af97
L
15150 suffix[0] = p[0];
15151 suffix[1] = p[1];
15152 suffix[2] = '\0';
ea397f5b
L
15153 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
15154 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
15155 }
15156 else
15157 {
15158 /* We have a reserved extension byte. Output it directly. */
15159 scratchbuf[0] = '$';
15160 print_operand_value (scratchbuf + 1, 1, cmp_type);
15161 oappend (scratchbuf + intel_syntax);
15162 scratchbuf[0] = '\0';
15163 }
15164}
15165
ea397f5b
L
15166static const struct op pclmul_op[] =
15167{
15168 { STRING_COMMA_LEN ("lql") },
15169 { STRING_COMMA_LEN ("hql") },
15170 { STRING_COMMA_LEN ("lqh") },
15171 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
15172};
15173
15174static void
15175PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
15176 int sizeflag ATTRIBUTE_UNUSED)
15177{
15178 unsigned int pclmul_type;
15179
15180 FETCH_DATA (the_info, codep + 1);
15181 pclmul_type = *codep++ & 0xff;
15182 switch (pclmul_type)
15183 {
15184 case 0x10:
15185 pclmul_type = 2;
15186 break;
15187 case 0x11:
15188 pclmul_type = 3;
15189 break;
15190 default:
15191 break;
7bb15c6f 15192 }
c0f3af97
L
15193 if (pclmul_type < ARRAY_SIZE (pclmul_op))
15194 {
15195 char suffix [4];
ea397f5b 15196 char *p = mnemonicendp - 3;
c0f3af97
L
15197 suffix[0] = p[0];
15198 suffix[1] = p[1];
15199 suffix[2] = p[2];
15200 suffix[3] = '\0';
ea397f5b
L
15201 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
15202 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
15203 }
15204 else
15205 {
15206 /* We have a reserved extension byte. Output it directly. */
15207 scratchbuf[0] = '$';
15208 print_operand_value (scratchbuf + 1, 1, pclmul_type);
15209 oappend (scratchbuf + intel_syntax);
15210 scratchbuf[0] = '\0';
15211 }
15212}
15213
f1f8f695
L
15214static void
15215MOVBE_Fixup (int bytemode, int sizeflag)
15216{
15217 /* Add proper suffix to "movbe". */
ea397f5b 15218 char *p = mnemonicendp;
f1f8f695
L
15219
15220 switch (bytemode)
15221 {
15222 case v_mode:
15223 if (intel_syntax)
ea397f5b 15224 goto skip;
f1f8f695
L
15225
15226 USED_REX (REX_W);
15227 if (sizeflag & SUFFIX_ALWAYS)
15228 {
15229 if (rex & REX_W)
15230 *p++ = 'q';
f1f8f695 15231 else
f16cd0d5
L
15232 {
15233 if (sizeflag & DFLAG)
15234 *p++ = 'l';
15235 else
15236 *p++ = 'w';
15237 used_prefixes |= (prefixes & PREFIX_DATA);
15238 }
f1f8f695 15239 }
f1f8f695
L
15240 break;
15241 default:
15242 oappend (INTERNAL_DISASSEMBLER_ERROR);
15243 break;
15244 }
ea397f5b 15245 mnemonicendp = p;
f1f8f695
L
15246 *p = '\0';
15247
ea397f5b 15248skip:
f1f8f695
L
15249 OP_M (bytemode, sizeflag);
15250}
f88c9eb0
SP
15251
15252static void
15253OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15254{
15255 int reg;
15256 const char **names;
15257
15258 /* Skip mod/rm byte. */
15259 MODRM_CHECK;
15260 codep++;
15261
15262 if (vex.w)
15263 names = names64;
f88c9eb0 15264 else
ce7d077e 15265 names = names32;
f88c9eb0
SP
15266
15267 reg = modrm.rm;
15268 USED_REX (REX_B);
15269 if (rex & REX_B)
15270 reg += 8;
15271
15272 oappend (names[reg]);
15273}
15274
15275static void
15276OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15277{
15278 const char **names;
15279
15280 if (vex.w)
15281 names = names64;
f88c9eb0 15282 else
ce7d077e 15283 names = names32;
f88c9eb0
SP
15284
15285 oappend (names[vex.register_specifier]);
15286}
This page took 1.694904 seconds and 4 git commands to generate.