Allow VL=1 on scalar FMA instructions.
[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,
0bfee649 3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
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);
c0f3af97 94static void OP_XMM_Vex (int, int);
922d8de8 95static void OP_XMM_VexW (int, int);
c0f3af97
L
96static void OP_REG_VexI4 (int, int);
97static void PCLMUL_Fixup (int, int);
922d8de8 98static void VEXI4_Fixup (int, int);
c0f3af97
L
99static void VZERO_Fixup (int, int);
100static void VCMP_Fixup (int, int);
cc0ec051 101static void OP_0f07 (int, int);
b844680a
L
102static void OP_Monitor (int, int);
103static void OP_Mwait (int, int);
46e883c5
L
104static void NOP_Fixup1 (int, int);
105static void NOP_Fixup2 (int, int);
26ca5450 106static void OP_3DNowSuffix (int, int);
ad19981d 107static void CMP_Fixup (int, int);
26ca5450 108static void BadOp (void);
35c52694 109static void REP_Fixup (int, int);
f5804c90 110static void CMPXCHG8B_Fixup (int, int);
42903f7f 111static void XMM_Fixup (int, int);
381d071f 112static void CRC32_Fixup (int, int);
eacc9c89 113static void FXSAVE_Fixup (int, int);
f88c9eb0
SP
114static void OP_LWPCB_E (int, int);
115static void OP_LWP_E (int, int);
116static void OP_LWP_I (int, int);
5dd85c99
SP
117static void OP_Vex_2src_1 (int, int);
118static void OP_Vex_2src_2 (int, int);
c1e679ec 119
f1f8f695 120static void MOVBE_Fixup (int, int);
252b5132 121
6608db57 122struct dis_private {
252b5132
RH
123 /* Points to first byte not fetched. */
124 bfd_byte *max_fetched;
0b1cf022 125 bfd_byte the_buffer[MAX_MNEM_SIZE];
252b5132 126 bfd_vma insn_start;
e396998b 127 int orig_sizeflag;
252b5132
RH
128 jmp_buf bailout;
129};
130
cb712a9e
L
131enum address_mode
132{
133 mode_16bit,
134 mode_32bit,
135 mode_64bit
136};
137
138enum address_mode address_mode;
52b15da3 139
5076851f
ILT
140/* Flags for the prefixes for the current instruction. See below. */
141static int prefixes;
142
52b15da3
JH
143/* REX prefix the current instruction. See below. */
144static int rex;
145/* Bits of REX we've already used. */
146static int rex_used;
d869730d 147/* REX bits in original REX prefix ignored. */
c0f3af97 148static int rex_ignored;
52b15da3
JH
149/* Mark parts used in the REX prefix. When we are testing for
150 empty prefix (for 8bit register REX extension), just mask it
151 out. Otherwise test for REX bit is excuse for existence of REX
152 only in case value is nonzero. */
153#define USED_REX(value) \
154 { \
155 if (value) \
161a04f6
L
156 { \
157 if ((rex & value)) \
158 rex_used |= (value) | REX_OPCODE; \
159 } \
52b15da3 160 else \
161a04f6 161 rex_used |= REX_OPCODE; \
52b15da3
JH
162 }
163
7d421014
ILT
164/* Flags for prefixes which we somehow handled when printing the
165 current instruction. */
166static int used_prefixes;
167
5076851f
ILT
168/* Flags stored in PREFIXES. */
169#define PREFIX_REPZ 1
170#define PREFIX_REPNZ 2
171#define PREFIX_LOCK 4
172#define PREFIX_CS 8
173#define PREFIX_SS 0x10
174#define PREFIX_DS 0x20
175#define PREFIX_ES 0x40
176#define PREFIX_FS 0x80
177#define PREFIX_GS 0x100
178#define PREFIX_DATA 0x200
179#define PREFIX_ADDR 0x400
180#define PREFIX_FWAIT 0x800
181
252b5132
RH
182/* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
183 to ADDR (exclusive) are valid. Returns 1 for success, longjmps
184 on error. */
185#define FETCH_DATA(info, addr) \
6608db57 186 ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
252b5132
RH
187 ? 1 : fetch_data ((info), (addr)))
188
189static int
26ca5450 190fetch_data (struct disassemble_info *info, bfd_byte *addr)
252b5132
RH
191{
192 int status;
6608db57 193 struct dis_private *priv = (struct dis_private *) info->private_data;
252b5132
RH
194 bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
195
0b1cf022 196 if (addr <= priv->the_buffer + MAX_MNEM_SIZE)
272c9217
JB
197 status = (*info->read_memory_func) (start,
198 priv->max_fetched,
199 addr - priv->max_fetched,
200 info);
201 else
202 status = -1;
252b5132
RH
203 if (status != 0)
204 {
7d421014 205 /* If we did manage to read at least one byte, then
db6eb5be
AM
206 print_insn_i386 will do something sensible. Otherwise, print
207 an error. We do that here because this is where we know
208 STATUS. */
7d421014 209 if (priv->max_fetched == priv->the_buffer)
5076851f 210 (*info->memory_error_func) (status, start, info);
252b5132
RH
211 longjmp (priv->bailout, 1);
212 }
213 else
214 priv->max_fetched = addr;
215 return 1;
216}
217
ce518a5f 218#define XX { NULL, 0 }
592d1631 219#define Bad_Opcode NULL, { { NULL, 0 } }
ce518a5f
L
220
221#define Eb { OP_E, b_mode }
b6169b20 222#define EbS { OP_E, b_swap_mode }
ce518a5f 223#define Ev { OP_E, v_mode }
b6169b20 224#define EvS { OP_E, v_swap_mode }
ce518a5f
L
225#define Ed { OP_E, d_mode }
226#define Edq { OP_E, dq_mode }
227#define Edqw { OP_E, dqw_mode }
42903f7f
L
228#define Edqb { OP_E, dqb_mode }
229#define Edqd { OP_E, dqd_mode }
09335d05 230#define Eq { OP_E, q_mode }
ce518a5f
L
231#define indirEv { OP_indirE, stack_v_mode }
232#define indirEp { OP_indirE, f_mode }
233#define stackEv { OP_E, stack_v_mode }
234#define Em { OP_E, m_mode }
235#define Ew { OP_E, w_mode }
236#define M { OP_M, 0 } /* lea, lgdt, etc. */
34b772a6 237#define Ma { OP_M, a_mode }
b844680a 238#define Mb { OP_M, b_mode }
d9a5e5e5 239#define Md { OP_M, d_mode }
f1f8f695 240#define Mo { OP_M, o_mode }
ce518a5f
L
241#define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for LDS, LES etc */
242#define Mq { OP_M, q_mode }
4ee52178 243#define Mx { OP_M, x_mode }
c0f3af97 244#define Mxmm { OP_M, xmm_mode }
ce518a5f
L
245#define Gb { OP_G, b_mode }
246#define Gv { OP_G, v_mode }
247#define Gd { OP_G, d_mode }
248#define Gdq { OP_G, dq_mode }
249#define Gm { OP_G, m_mode }
250#define Gw { OP_G, w_mode }
6f74c397
L
251#define Rd { OP_R, d_mode }
252#define Rm { OP_R, m_mode }
ce518a5f
L
253#define Ib { OP_I, b_mode }
254#define sIb { OP_sI, b_mode } /* sign extened byte */
255#define Iv { OP_I, v_mode }
256#define Iq { OP_I, q_mode }
257#define Iv64 { OP_I64, v_mode }
258#define Iw { OP_I, w_mode }
259#define I1 { OP_I, const_1_mode }
260#define Jb { OP_J, b_mode }
261#define Jv { OP_J, v_mode }
262#define Cm { OP_C, m_mode }
263#define Dm { OP_D, m_mode }
264#define Td { OP_T, d_mode }
b844680a 265#define Skip_MODRM { OP_Skip_MODRM, 0 }
ce518a5f
L
266
267#define RMeAX { OP_REG, eAX_reg }
268#define RMeBX { OP_REG, eBX_reg }
269#define RMeCX { OP_REG, eCX_reg }
270#define RMeDX { OP_REG, eDX_reg }
271#define RMeSP { OP_REG, eSP_reg }
272#define RMeBP { OP_REG, eBP_reg }
273#define RMeSI { OP_REG, eSI_reg }
274#define RMeDI { OP_REG, eDI_reg }
275#define RMrAX { OP_REG, rAX_reg }
276#define RMrBX { OP_REG, rBX_reg }
277#define RMrCX { OP_REG, rCX_reg }
278#define RMrDX { OP_REG, rDX_reg }
279#define RMrSP { OP_REG, rSP_reg }
280#define RMrBP { OP_REG, rBP_reg }
281#define RMrSI { OP_REG, rSI_reg }
282#define RMrDI { OP_REG, rDI_reg }
283#define RMAL { OP_REG, al_reg }
284#define RMAL { OP_REG, al_reg }
285#define RMCL { OP_REG, cl_reg }
286#define RMDL { OP_REG, dl_reg }
287#define RMBL { OP_REG, bl_reg }
288#define RMAH { OP_REG, ah_reg }
289#define RMCH { OP_REG, ch_reg }
290#define RMDH { OP_REG, dh_reg }
291#define RMBH { OP_REG, bh_reg }
292#define RMAX { OP_REG, ax_reg }
293#define RMDX { OP_REG, dx_reg }
294
295#define eAX { OP_IMREG, eAX_reg }
296#define eBX { OP_IMREG, eBX_reg }
297#define eCX { OP_IMREG, eCX_reg }
298#define eDX { OP_IMREG, eDX_reg }
299#define eSP { OP_IMREG, eSP_reg }
300#define eBP { OP_IMREG, eBP_reg }
301#define eSI { OP_IMREG, eSI_reg }
302#define eDI { OP_IMREG, eDI_reg }
303#define AL { OP_IMREG, al_reg }
304#define CL { OP_IMREG, cl_reg }
305#define DL { OP_IMREG, dl_reg }
306#define BL { OP_IMREG, bl_reg }
307#define AH { OP_IMREG, ah_reg }
308#define CH { OP_IMREG, ch_reg }
309#define DH { OP_IMREG, dh_reg }
310#define BH { OP_IMREG, bh_reg }
311#define AX { OP_IMREG, ax_reg }
312#define DX { OP_IMREG, dx_reg }
313#define zAX { OP_IMREG, z_mode_ax_reg }
314#define indirDX { OP_IMREG, indir_dx_reg }
315
316#define Sw { OP_SEG, w_mode }
317#define Sv { OP_SEG, v_mode }
318#define Ap { OP_DIR, 0 }
319#define Ob { OP_OFF64, b_mode }
320#define Ov { OP_OFF64, v_mode }
321#define Xb { OP_DSreg, eSI_reg }
322#define Xv { OP_DSreg, eSI_reg }
323#define Xz { OP_DSreg, eSI_reg }
324#define Yb { OP_ESreg, eDI_reg }
325#define Yv { OP_ESreg, eDI_reg }
326#define DSBX { OP_DSreg, eBX_reg }
327
328#define es { OP_REG, es_reg }
329#define ss { OP_REG, ss_reg }
330#define cs { OP_REG, cs_reg }
331#define ds { OP_REG, ds_reg }
332#define fs { OP_REG, fs_reg }
333#define gs { OP_REG, gs_reg }
334
335#define MX { OP_MMX, 0 }
336#define XM { OP_XMM, 0 }
539f890d 337#define XMScalar { OP_XMM, scalar_mode }
c0f3af97 338#define XMM { OP_XMM, xmm_mode }
ce518a5f 339#define EM { OP_EM, v_mode }
b6169b20 340#define EMS { OP_EM, v_swap_mode }
09a2c6cf 341#define EMd { OP_EM, d_mode }
14051056 342#define EMx { OP_EM, x_mode }
8976381e 343#define EXw { OP_EX, w_mode }
09a2c6cf 344#define EXd { OP_EX, d_mode }
539f890d 345#define EXdScalar { OP_EX, d_scalar_mode }
fa99fab2 346#define EXdS { OP_EX, d_swap_mode }
09a2c6cf 347#define EXq { OP_EX, q_mode }
539f890d
L
348#define EXqScalar { OP_EX, q_scalar_mode }
349#define EXqScalarS { OP_EX, q_scalar_swap_mode }
b6169b20 350#define EXqS { OP_EX, q_swap_mode }
09a2c6cf 351#define EXx { OP_EX, x_mode }
b6169b20 352#define EXxS { OP_EX, x_swap_mode }
c0f3af97
L
353#define EXxmm { OP_EX, xmm_mode }
354#define EXxmmq { OP_EX, xmmq_mode }
355#define EXymmq { OP_EX, ymmq_mode }
0bfee649 356#define EXVexWdq { OP_EX, vex_w_dq_mode }
1c480963 357#define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
ce518a5f
L
358#define MS { OP_MS, v_mode }
359#define XS { OP_XS, v_mode }
09335d05 360#define EMCq { OP_EMC, q_mode }
ce518a5f 361#define MXC { OP_MXC, 0 }
ce518a5f 362#define OPSUF { OP_3DNowSuffix, 0 }
ad19981d 363#define CMP { CMP_Fixup, 0 }
42903f7f 364#define XMM0 { XMM_Fixup, 0 }
eacc9c89 365#define FXSAVE { FXSAVE_Fixup, 0 }
5dd85c99
SP
366#define Vex_2src_1 { OP_Vex_2src_1, 0 }
367#define Vex_2src_2 { OP_Vex_2src_2, 0 }
252b5132 368
c0f3af97 369#define Vex { OP_VEX, vex_mode }
539f890d 370#define VexScalar { OP_VEX, vex_scalar_mode }
c0f3af97
L
371#define Vex128 { OP_VEX, vex128_mode }
372#define Vex256 { OP_VEX, vex256_mode }
922d8de8 373#define VexI4 { VEXI4_Fixup, 0}
c0f3af97 374#define EXdVex { OP_EX_Vex, d_mode }
fa99fab2 375#define EXdVexS { OP_EX_Vex, d_swap_mode }
539f890d 376#define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode }
c0f3af97 377#define EXqVex { OP_EX_Vex, q_mode }
fa99fab2 378#define EXqVexS { OP_EX_Vex, q_swap_mode }
539f890d 379#define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode }
922d8de8
DR
380#define EXVexW { OP_EX_VexW, x_mode }
381#define EXdVexW { OP_EX_VexW, d_mode }
382#define EXqVexW { OP_EX_VexW, q_mode }
c0f3af97 383#define XMVex { OP_XMM_Vex, 0 }
539f890d 384#define XMVexScalar { OP_XMM_Vex, scalar_mode }
922d8de8 385#define XMVexW { OP_XMM_VexW, 0 }
c0f3af97
L
386#define XMVexI4 { OP_REG_VexI4, x_mode }
387#define PCLMUL { PCLMUL_Fixup, 0 }
388#define VZERO { VZERO_Fixup, 0 }
389#define VCMP { VCMP_Fixup, 0 }
c0f3af97 390
35c52694 391/* Used handle "rep" prefix for string instructions. */
ce518a5f
L
392#define Xbr { REP_Fixup, eSI_reg }
393#define Xvr { REP_Fixup, eSI_reg }
394#define Ybr { REP_Fixup, eDI_reg }
395#define Yvr { REP_Fixup, eDI_reg }
396#define Yzr { REP_Fixup, eDI_reg }
397#define indirDXr { REP_Fixup, indir_dx_reg }
398#define ALr { REP_Fixup, al_reg }
399#define eAXr { REP_Fixup, eAX_reg }
400
401#define cond_jump_flag { NULL, cond_jump_mode }
402#define loop_jcxz_flag { NULL, loop_jcxz_mode }
3ffd33cf 403
252b5132 404/* bits in sizeflag */
252b5132 405#define SUFFIX_ALWAYS 4
252b5132
RH
406#define AFLAG 2
407#define DFLAG 1
408
51e7da1b
L
409enum
410{
411 /* byte operand */
412 b_mode = 1,
413 /* byte operand with operand swapped */
3873ba12 414 b_swap_mode,
51e7da1b 415 /* operand size depends on prefixes */
3873ba12 416 v_mode,
51e7da1b 417 /* operand size depends on prefixes with operand swapped */
3873ba12 418 v_swap_mode,
51e7da1b 419 /* word operand */
3873ba12 420 w_mode,
51e7da1b 421 /* double word operand */
3873ba12 422 d_mode,
51e7da1b 423 /* double word operand with operand swapped */
3873ba12 424 d_swap_mode,
51e7da1b 425 /* quad word operand */
3873ba12 426 q_mode,
51e7da1b 427 /* quad word operand with operand swapped */
3873ba12 428 q_swap_mode,
51e7da1b 429 /* ten-byte operand */
3873ba12 430 t_mode,
51e7da1b 431 /* 16-byte XMM or 32-byte YMM operand */
3873ba12 432 x_mode,
51e7da1b 433 /* 16-byte XMM or 32-byte YMM operand with operand swapped */
3873ba12 434 x_swap_mode,
51e7da1b 435 /* 16-byte XMM operand */
3873ba12 436 xmm_mode,
51e7da1b 437 /* 16-byte XMM or quad word operand */
3873ba12 438 xmmq_mode,
51e7da1b 439 /* 32-byte YMM or quad word operand */
3873ba12 440 ymmq_mode,
51e7da1b 441 /* d_mode in 32bit, q_mode in 64bit mode. */
3873ba12 442 m_mode,
51e7da1b 443 /* pair of v_mode operands */
3873ba12
L
444 a_mode,
445 cond_jump_mode,
446 loop_jcxz_mode,
51e7da1b 447 /* operand size depends on REX prefixes. */
3873ba12 448 dq_mode,
51e7da1b 449 /* registers like dq_mode, memory like w_mode. */
3873ba12 450 dqw_mode,
51e7da1b 451 /* 4- or 6-byte pointer operand */
3873ba12
L
452 f_mode,
453 const_1_mode,
51e7da1b 454 /* v_mode for stack-related opcodes. */
3873ba12 455 stack_v_mode,
51e7da1b 456 /* non-quad operand size depends on prefixes */
3873ba12 457 z_mode,
51e7da1b 458 /* 16-byte operand */
3873ba12 459 o_mode,
51e7da1b 460 /* registers like dq_mode, memory like b_mode. */
3873ba12 461 dqb_mode,
51e7da1b 462 /* registers like dq_mode, memory like d_mode. */
3873ba12 463 dqd_mode,
51e7da1b 464 /* normal vex mode */
3873ba12 465 vex_mode,
51e7da1b 466 /* 128bit vex mode */
3873ba12 467 vex128_mode,
51e7da1b 468 /* 256bit vex mode */
3873ba12 469 vex256_mode,
51e7da1b 470 /* operand size depends on the VEX.W bit. */
3873ba12 471 vex_w_dq_mode,
d55ee72f 472
539f890d
L
473 /* scalar, ignore vector length. */
474 scalar_mode,
475 /* like d_mode, ignore vector length. */
476 d_scalar_mode,
477 /* like d_swap_mode, ignore vector length. */
478 d_scalar_swap_mode,
479 /* like q_mode, ignore vector length. */
480 q_scalar_mode,
481 /* like q_swap_mode, ignore vector length. */
482 q_scalar_swap_mode,
483 /* like vex_mode, ignore vector length. */
484 vex_scalar_mode,
1c480963
L
485 /* like vex_w_dq_mode, ignore vector length. */
486 vex_scalar_w_dq_mode,
539f890d 487
3873ba12
L
488 es_reg,
489 cs_reg,
490 ss_reg,
491 ds_reg,
492 fs_reg,
493 gs_reg,
d55ee72f 494
3873ba12
L
495 eAX_reg,
496 eCX_reg,
497 eDX_reg,
498 eBX_reg,
499 eSP_reg,
500 eBP_reg,
501 eSI_reg,
502 eDI_reg,
d55ee72f 503
3873ba12
L
504 al_reg,
505 cl_reg,
506 dl_reg,
507 bl_reg,
508 ah_reg,
509 ch_reg,
510 dh_reg,
511 bh_reg,
d55ee72f 512
3873ba12
L
513 ax_reg,
514 cx_reg,
515 dx_reg,
516 bx_reg,
517 sp_reg,
518 bp_reg,
519 si_reg,
520 di_reg,
d55ee72f 521
3873ba12
L
522 rAX_reg,
523 rCX_reg,
524 rDX_reg,
525 rBX_reg,
526 rSP_reg,
527 rBP_reg,
528 rSI_reg,
529 rDI_reg,
d55ee72f 530
3873ba12
L
531 z_mode_ax_reg,
532 indir_dx_reg
51e7da1b 533};
252b5132 534
51e7da1b
L
535enum
536{
537 FLOATCODE = 1,
3873ba12
L
538 USE_REG_TABLE,
539 USE_MOD_TABLE,
540 USE_RM_TABLE,
541 USE_PREFIX_TABLE,
542 USE_X86_64_TABLE,
543 USE_3BYTE_TABLE,
f88c9eb0 544 USE_XOP_8F_TABLE,
3873ba12
L
545 USE_VEX_C4_TABLE,
546 USE_VEX_C5_TABLE,
9e30b8e0
L
547 USE_VEX_LEN_TABLE,
548 USE_VEX_W_TABLE
51e7da1b 549};
6439fc28 550
1ceb70f8 551#define FLOAT NULL, { { NULL, FLOATCODE } }
4efba78c 552
4e7d34a6 553#define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }
1ceb70f8
L
554#define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
555#define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
556#define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
557#define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
4e7d34a6
L
558#define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
559#define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
f88c9eb0 560#define XOP_8F_TABLE(I) DIS386 (USE_XOP_8F_TABLE, (I))
c0f3af97
L
561#define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
562#define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
563#define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
9e30b8e0 564#define VEX_W_TABLE(I) DIS386 (USE_VEX_W_TABLE, (I))
1ceb70f8 565
51e7da1b
L
566enum
567{
568 REG_80 = 0,
3873ba12
L
569 REG_81,
570 REG_82,
571 REG_8F,
572 REG_C0,
573 REG_C1,
574 REG_C6,
575 REG_C7,
576 REG_D0,
577 REG_D1,
578 REG_D2,
579 REG_D3,
580 REG_F6,
581 REG_F7,
582 REG_FE,
583 REG_FF,
584 REG_0F00,
585 REG_0F01,
586 REG_0F0D,
587 REG_0F18,
588 REG_0F71,
589 REG_0F72,
590 REG_0F73,
591 REG_0FA6,
592 REG_0FA7,
593 REG_0FAE,
594 REG_0FBA,
595 REG_0FC7,
596 REG_VEX_71,
597 REG_VEX_72,
598 REG_VEX_73,
f88c9eb0
SP
599 REG_VEX_AE,
600 REG_XOP_LWPCB,
601 REG_XOP_LWP
51e7da1b 602};
1ceb70f8 603
51e7da1b
L
604enum
605{
606 MOD_8D = 0,
3873ba12
L
607 MOD_0F01_REG_0,
608 MOD_0F01_REG_1,
609 MOD_0F01_REG_2,
610 MOD_0F01_REG_3,
611 MOD_0F01_REG_7,
612 MOD_0F12_PREFIX_0,
613 MOD_0F13,
614 MOD_0F16_PREFIX_0,
615 MOD_0F17,
616 MOD_0F18_REG_0,
617 MOD_0F18_REG_1,
618 MOD_0F18_REG_2,
619 MOD_0F18_REG_3,
620 MOD_0F20,
621 MOD_0F21,
622 MOD_0F22,
623 MOD_0F23,
624 MOD_0F24,
625 MOD_0F26,
626 MOD_0F2B_PREFIX_0,
627 MOD_0F2B_PREFIX_1,
628 MOD_0F2B_PREFIX_2,
629 MOD_0F2B_PREFIX_3,
630 MOD_0F51,
631 MOD_0F71_REG_2,
632 MOD_0F71_REG_4,
633 MOD_0F71_REG_6,
634 MOD_0F72_REG_2,
635 MOD_0F72_REG_4,
636 MOD_0F72_REG_6,
637 MOD_0F73_REG_2,
638 MOD_0F73_REG_3,
639 MOD_0F73_REG_6,
640 MOD_0F73_REG_7,
641 MOD_0FAE_REG_0,
642 MOD_0FAE_REG_1,
643 MOD_0FAE_REG_2,
644 MOD_0FAE_REG_3,
645 MOD_0FAE_REG_4,
646 MOD_0FAE_REG_5,
647 MOD_0FAE_REG_6,
648 MOD_0FAE_REG_7,
649 MOD_0FB2,
650 MOD_0FB4,
651 MOD_0FB5,
652 MOD_0FC7_REG_6,
653 MOD_0FC7_REG_7,
654 MOD_0FD7,
655 MOD_0FE7_PREFIX_2,
656 MOD_0FF0_PREFIX_3,
657 MOD_0F382A_PREFIX_2,
658 MOD_62_32BIT,
659 MOD_C4_32BIT,
660 MOD_C5_32BIT,
661 MOD_VEX_12_PREFIX_0,
662 MOD_VEX_13,
663 MOD_VEX_16_PREFIX_0,
664 MOD_VEX_17,
665 MOD_VEX_2B,
976f1fde 666 MOD_VEX_50,
3873ba12
L
667 MOD_VEX_71_REG_2,
668 MOD_VEX_71_REG_4,
669 MOD_VEX_71_REG_6,
670 MOD_VEX_72_REG_2,
671 MOD_VEX_72_REG_4,
672 MOD_VEX_72_REG_6,
673 MOD_VEX_73_REG_2,
674 MOD_VEX_73_REG_3,
675 MOD_VEX_73_REG_6,
676 MOD_VEX_73_REG_7,
677 MOD_VEX_AE_REG_2,
678 MOD_VEX_AE_REG_3,
679 MOD_VEX_D7_PREFIX_2,
680 MOD_VEX_E7_PREFIX_2,
681 MOD_VEX_F0_PREFIX_3,
682 MOD_VEX_3818_PREFIX_2,
683 MOD_VEX_3819_PREFIX_2,
684 MOD_VEX_381A_PREFIX_2,
685 MOD_VEX_382A_PREFIX_2,
686 MOD_VEX_382C_PREFIX_2,
687 MOD_VEX_382D_PREFIX_2,
688 MOD_VEX_382E_PREFIX_2,
689 MOD_VEX_382F_PREFIX_2
51e7da1b 690};
1ceb70f8 691
51e7da1b
L
692enum
693{
694 RM_0F01_REG_0 = 0,
3873ba12
L
695 RM_0F01_REG_1,
696 RM_0F01_REG_2,
697 RM_0F01_REG_3,
698 RM_0F01_REG_7,
699 RM_0FAE_REG_5,
700 RM_0FAE_REG_6,
701 RM_0FAE_REG_7
51e7da1b 702};
1ceb70f8 703
51e7da1b
L
704enum
705{
706 PREFIX_90 = 0,
3873ba12
L
707 PREFIX_0F10,
708 PREFIX_0F11,
709 PREFIX_0F12,
710 PREFIX_0F16,
711 PREFIX_0F2A,
712 PREFIX_0F2B,
713 PREFIX_0F2C,
714 PREFIX_0F2D,
715 PREFIX_0F2E,
716 PREFIX_0F2F,
717 PREFIX_0F51,
718 PREFIX_0F52,
719 PREFIX_0F53,
720 PREFIX_0F58,
721 PREFIX_0F59,
722 PREFIX_0F5A,
723 PREFIX_0F5B,
724 PREFIX_0F5C,
725 PREFIX_0F5D,
726 PREFIX_0F5E,
727 PREFIX_0F5F,
728 PREFIX_0F60,
729 PREFIX_0F61,
730 PREFIX_0F62,
731 PREFIX_0F6C,
732 PREFIX_0F6D,
733 PREFIX_0F6F,
734 PREFIX_0F70,
735 PREFIX_0F73_REG_3,
736 PREFIX_0F73_REG_7,
737 PREFIX_0F78,
738 PREFIX_0F79,
739 PREFIX_0F7C,
740 PREFIX_0F7D,
741 PREFIX_0F7E,
742 PREFIX_0F7F,
743 PREFIX_0FB8,
744 PREFIX_0FBD,
745 PREFIX_0FC2,
746 PREFIX_0FC3,
747 PREFIX_0FC7_REG_6,
748 PREFIX_0FD0,
749 PREFIX_0FD6,
750 PREFIX_0FE6,
751 PREFIX_0FE7,
752 PREFIX_0FF0,
753 PREFIX_0FF7,
754 PREFIX_0F3810,
755 PREFIX_0F3814,
756 PREFIX_0F3815,
757 PREFIX_0F3817,
758 PREFIX_0F3820,
759 PREFIX_0F3821,
760 PREFIX_0F3822,
761 PREFIX_0F3823,
762 PREFIX_0F3824,
763 PREFIX_0F3825,
764 PREFIX_0F3828,
765 PREFIX_0F3829,
766 PREFIX_0F382A,
767 PREFIX_0F382B,
768 PREFIX_0F3830,
769 PREFIX_0F3831,
770 PREFIX_0F3832,
771 PREFIX_0F3833,
772 PREFIX_0F3834,
773 PREFIX_0F3835,
774 PREFIX_0F3837,
775 PREFIX_0F3838,
776 PREFIX_0F3839,
777 PREFIX_0F383A,
778 PREFIX_0F383B,
779 PREFIX_0F383C,
780 PREFIX_0F383D,
781 PREFIX_0F383E,
782 PREFIX_0F383F,
783 PREFIX_0F3840,
784 PREFIX_0F3841,
785 PREFIX_0F3880,
786 PREFIX_0F3881,
787 PREFIX_0F38DB,
788 PREFIX_0F38DC,
789 PREFIX_0F38DD,
790 PREFIX_0F38DE,
791 PREFIX_0F38DF,
792 PREFIX_0F38F0,
793 PREFIX_0F38F1,
794 PREFIX_0F3A08,
795 PREFIX_0F3A09,
796 PREFIX_0F3A0A,
797 PREFIX_0F3A0B,
798 PREFIX_0F3A0C,
799 PREFIX_0F3A0D,
800 PREFIX_0F3A0E,
801 PREFIX_0F3A14,
802 PREFIX_0F3A15,
803 PREFIX_0F3A16,
804 PREFIX_0F3A17,
805 PREFIX_0F3A20,
806 PREFIX_0F3A21,
807 PREFIX_0F3A22,
808 PREFIX_0F3A40,
809 PREFIX_0F3A41,
810 PREFIX_0F3A42,
811 PREFIX_0F3A44,
812 PREFIX_0F3A60,
813 PREFIX_0F3A61,
814 PREFIX_0F3A62,
815 PREFIX_0F3A63,
816 PREFIX_0F3ADF,
817 PREFIX_VEX_10,
818 PREFIX_VEX_11,
819 PREFIX_VEX_12,
820 PREFIX_VEX_16,
821 PREFIX_VEX_2A,
822 PREFIX_VEX_2C,
823 PREFIX_VEX_2D,
824 PREFIX_VEX_2E,
825 PREFIX_VEX_2F,
826 PREFIX_VEX_51,
827 PREFIX_VEX_52,
828 PREFIX_VEX_53,
829 PREFIX_VEX_58,
830 PREFIX_VEX_59,
831 PREFIX_VEX_5A,
832 PREFIX_VEX_5B,
833 PREFIX_VEX_5C,
834 PREFIX_VEX_5D,
835 PREFIX_VEX_5E,
836 PREFIX_VEX_5F,
837 PREFIX_VEX_60,
838 PREFIX_VEX_61,
839 PREFIX_VEX_62,
840 PREFIX_VEX_63,
841 PREFIX_VEX_64,
842 PREFIX_VEX_65,
843 PREFIX_VEX_66,
844 PREFIX_VEX_67,
845 PREFIX_VEX_68,
846 PREFIX_VEX_69,
847 PREFIX_VEX_6A,
848 PREFIX_VEX_6B,
849 PREFIX_VEX_6C,
850 PREFIX_VEX_6D,
851 PREFIX_VEX_6E,
852 PREFIX_VEX_6F,
853 PREFIX_VEX_70,
854 PREFIX_VEX_71_REG_2,
855 PREFIX_VEX_71_REG_4,
856 PREFIX_VEX_71_REG_6,
857 PREFIX_VEX_72_REG_2,
858 PREFIX_VEX_72_REG_4,
859 PREFIX_VEX_72_REG_6,
860 PREFIX_VEX_73_REG_2,
861 PREFIX_VEX_73_REG_3,
862 PREFIX_VEX_73_REG_6,
863 PREFIX_VEX_73_REG_7,
864 PREFIX_VEX_74,
865 PREFIX_VEX_75,
866 PREFIX_VEX_76,
867 PREFIX_VEX_77,
868 PREFIX_VEX_7C,
869 PREFIX_VEX_7D,
870 PREFIX_VEX_7E,
871 PREFIX_VEX_7F,
872 PREFIX_VEX_C2,
873 PREFIX_VEX_C4,
874 PREFIX_VEX_C5,
875 PREFIX_VEX_D0,
876 PREFIX_VEX_D1,
877 PREFIX_VEX_D2,
878 PREFIX_VEX_D3,
879 PREFIX_VEX_D4,
880 PREFIX_VEX_D5,
881 PREFIX_VEX_D6,
882 PREFIX_VEX_D7,
883 PREFIX_VEX_D8,
884 PREFIX_VEX_D9,
885 PREFIX_VEX_DA,
886 PREFIX_VEX_DB,
887 PREFIX_VEX_DC,
888 PREFIX_VEX_DD,
889 PREFIX_VEX_DE,
890 PREFIX_VEX_DF,
891 PREFIX_VEX_E0,
892 PREFIX_VEX_E1,
893 PREFIX_VEX_E2,
894 PREFIX_VEX_E3,
895 PREFIX_VEX_E4,
896 PREFIX_VEX_E5,
897 PREFIX_VEX_E6,
898 PREFIX_VEX_E7,
899 PREFIX_VEX_E8,
900 PREFIX_VEX_E9,
901 PREFIX_VEX_EA,
902 PREFIX_VEX_EB,
903 PREFIX_VEX_EC,
904 PREFIX_VEX_ED,
905 PREFIX_VEX_EE,
906 PREFIX_VEX_EF,
907 PREFIX_VEX_F0,
908 PREFIX_VEX_F1,
909 PREFIX_VEX_F2,
910 PREFIX_VEX_F3,
911 PREFIX_VEX_F4,
912 PREFIX_VEX_F5,
913 PREFIX_VEX_F6,
914 PREFIX_VEX_F7,
915 PREFIX_VEX_F8,
916 PREFIX_VEX_F9,
917 PREFIX_VEX_FA,
918 PREFIX_VEX_FB,
919 PREFIX_VEX_FC,
920 PREFIX_VEX_FD,
921 PREFIX_VEX_FE,
922 PREFIX_VEX_3800,
923 PREFIX_VEX_3801,
924 PREFIX_VEX_3802,
925 PREFIX_VEX_3803,
926 PREFIX_VEX_3804,
927 PREFIX_VEX_3805,
928 PREFIX_VEX_3806,
929 PREFIX_VEX_3807,
930 PREFIX_VEX_3808,
931 PREFIX_VEX_3809,
932 PREFIX_VEX_380A,
933 PREFIX_VEX_380B,
934 PREFIX_VEX_380C,
935 PREFIX_VEX_380D,
936 PREFIX_VEX_380E,
937 PREFIX_VEX_380F,
938 PREFIX_VEX_3817,
939 PREFIX_VEX_3818,
940 PREFIX_VEX_3819,
941 PREFIX_VEX_381A,
942 PREFIX_VEX_381C,
943 PREFIX_VEX_381D,
944 PREFIX_VEX_381E,
945 PREFIX_VEX_3820,
946 PREFIX_VEX_3821,
947 PREFIX_VEX_3822,
948 PREFIX_VEX_3823,
949 PREFIX_VEX_3824,
950 PREFIX_VEX_3825,
951 PREFIX_VEX_3828,
952 PREFIX_VEX_3829,
953 PREFIX_VEX_382A,
954 PREFIX_VEX_382B,
955 PREFIX_VEX_382C,
956 PREFIX_VEX_382D,
957 PREFIX_VEX_382E,
958 PREFIX_VEX_382F,
959 PREFIX_VEX_3830,
960 PREFIX_VEX_3831,
961 PREFIX_VEX_3832,
962 PREFIX_VEX_3833,
963 PREFIX_VEX_3834,
964 PREFIX_VEX_3835,
965 PREFIX_VEX_3837,
966 PREFIX_VEX_3838,
967 PREFIX_VEX_3839,
968 PREFIX_VEX_383A,
969 PREFIX_VEX_383B,
970 PREFIX_VEX_383C,
971 PREFIX_VEX_383D,
972 PREFIX_VEX_383E,
973 PREFIX_VEX_383F,
974 PREFIX_VEX_3840,
975 PREFIX_VEX_3841,
976 PREFIX_VEX_3896,
977 PREFIX_VEX_3897,
978 PREFIX_VEX_3898,
979 PREFIX_VEX_3899,
980 PREFIX_VEX_389A,
981 PREFIX_VEX_389B,
982 PREFIX_VEX_389C,
983 PREFIX_VEX_389D,
984 PREFIX_VEX_389E,
985 PREFIX_VEX_389F,
986 PREFIX_VEX_38A6,
987 PREFIX_VEX_38A7,
988 PREFIX_VEX_38A8,
989 PREFIX_VEX_38A9,
990 PREFIX_VEX_38AA,
991 PREFIX_VEX_38AB,
992 PREFIX_VEX_38AC,
993 PREFIX_VEX_38AD,
994 PREFIX_VEX_38AE,
995 PREFIX_VEX_38AF,
996 PREFIX_VEX_38B6,
997 PREFIX_VEX_38B7,
998 PREFIX_VEX_38B8,
999 PREFIX_VEX_38B9,
1000 PREFIX_VEX_38BA,
1001 PREFIX_VEX_38BB,
1002 PREFIX_VEX_38BC,
1003 PREFIX_VEX_38BD,
1004 PREFIX_VEX_38BE,
1005 PREFIX_VEX_38BF,
1006 PREFIX_VEX_38DB,
1007 PREFIX_VEX_38DC,
1008 PREFIX_VEX_38DD,
1009 PREFIX_VEX_38DE,
1010 PREFIX_VEX_38DF,
1011 PREFIX_VEX_3A04,
1012 PREFIX_VEX_3A05,
1013 PREFIX_VEX_3A06,
1014 PREFIX_VEX_3A08,
1015 PREFIX_VEX_3A09,
1016 PREFIX_VEX_3A0A,
1017 PREFIX_VEX_3A0B,
1018 PREFIX_VEX_3A0C,
1019 PREFIX_VEX_3A0D,
1020 PREFIX_VEX_3A0E,
1021 PREFIX_VEX_3A0F,
1022 PREFIX_VEX_3A14,
1023 PREFIX_VEX_3A15,
1024 PREFIX_VEX_3A16,
1025 PREFIX_VEX_3A17,
1026 PREFIX_VEX_3A18,
1027 PREFIX_VEX_3A19,
1028 PREFIX_VEX_3A20,
1029 PREFIX_VEX_3A21,
1030 PREFIX_VEX_3A22,
1031 PREFIX_VEX_3A40,
1032 PREFIX_VEX_3A41,
1033 PREFIX_VEX_3A42,
1034 PREFIX_VEX_3A44,
1035 PREFIX_VEX_3A4A,
1036 PREFIX_VEX_3A4B,
1037 PREFIX_VEX_3A4C,
1038 PREFIX_VEX_3A5C,
1039 PREFIX_VEX_3A5D,
1040 PREFIX_VEX_3A5E,
1041 PREFIX_VEX_3A5F,
1042 PREFIX_VEX_3A60,
1043 PREFIX_VEX_3A61,
1044 PREFIX_VEX_3A62,
1045 PREFIX_VEX_3A63,
1046 PREFIX_VEX_3A68,
1047 PREFIX_VEX_3A69,
1048 PREFIX_VEX_3A6A,
1049 PREFIX_VEX_3A6B,
1050 PREFIX_VEX_3A6C,
1051 PREFIX_VEX_3A6D,
1052 PREFIX_VEX_3A6E,
1053 PREFIX_VEX_3A6F,
1054 PREFIX_VEX_3A78,
1055 PREFIX_VEX_3A79,
1056 PREFIX_VEX_3A7A,
1057 PREFIX_VEX_3A7B,
1058 PREFIX_VEX_3A7C,
1059 PREFIX_VEX_3A7D,
1060 PREFIX_VEX_3A7E,
1061 PREFIX_VEX_3A7F,
1062 PREFIX_VEX_3ADF
51e7da1b 1063};
4e7d34a6 1064
51e7da1b
L
1065enum
1066{
1067 X86_64_06 = 0,
3873ba12
L
1068 X86_64_07,
1069 X86_64_0D,
1070 X86_64_16,
1071 X86_64_17,
1072 X86_64_1E,
1073 X86_64_1F,
1074 X86_64_27,
1075 X86_64_2F,
1076 X86_64_37,
1077 X86_64_3F,
1078 X86_64_60,
1079 X86_64_61,
1080 X86_64_62,
1081 X86_64_63,
1082 X86_64_6D,
1083 X86_64_6F,
1084 X86_64_9A,
1085 X86_64_C4,
1086 X86_64_C5,
1087 X86_64_CE,
1088 X86_64_D4,
1089 X86_64_D5,
1090 X86_64_EA,
1091 X86_64_0F01_REG_0,
1092 X86_64_0F01_REG_1,
1093 X86_64_0F01_REG_2,
1094 X86_64_0F01_REG_3
51e7da1b 1095};
4e7d34a6 1096
51e7da1b
L
1097enum
1098{
1099 THREE_BYTE_0F38 = 0,
3873ba12
L
1100 THREE_BYTE_0F3A,
1101 THREE_BYTE_0F7A
51e7da1b 1102};
4e7d34a6 1103
f88c9eb0
SP
1104enum
1105{
5dd85c99
SP
1106 XOP_08 = 0,
1107 XOP_09,
f88c9eb0
SP
1108 XOP_0A
1109};
1110
51e7da1b
L
1111enum
1112{
1113 VEX_0F = 0,
3873ba12
L
1114 VEX_0F38,
1115 VEX_0F3A
51e7da1b 1116};
c0f3af97 1117
51e7da1b
L
1118enum
1119{
1120 VEX_LEN_10_P_1 = 0,
3873ba12
L
1121 VEX_LEN_10_P_3,
1122 VEX_LEN_11_P_1,
1123 VEX_LEN_11_P_3,
1124 VEX_LEN_12_P_0_M_0,
1125 VEX_LEN_12_P_0_M_1,
1126 VEX_LEN_12_P_2,
1127 VEX_LEN_13_M_0,
1128 VEX_LEN_16_P_0_M_0,
1129 VEX_LEN_16_P_0_M_1,
1130 VEX_LEN_16_P_2,
1131 VEX_LEN_17_M_0,
1132 VEX_LEN_2A_P_1,
1133 VEX_LEN_2A_P_3,
1134 VEX_LEN_2C_P_1,
1135 VEX_LEN_2C_P_3,
1136 VEX_LEN_2D_P_1,
1137 VEX_LEN_2D_P_3,
1138 VEX_LEN_2E_P_0,
1139 VEX_LEN_2E_P_2,
1140 VEX_LEN_2F_P_0,
1141 VEX_LEN_2F_P_2,
1142 VEX_LEN_51_P_1,
1143 VEX_LEN_51_P_3,
1144 VEX_LEN_52_P_1,
1145 VEX_LEN_53_P_1,
1146 VEX_LEN_58_P_1,
1147 VEX_LEN_58_P_3,
1148 VEX_LEN_59_P_1,
1149 VEX_LEN_59_P_3,
1150 VEX_LEN_5A_P_1,
1151 VEX_LEN_5A_P_3,
1152 VEX_LEN_5C_P_1,
1153 VEX_LEN_5C_P_3,
1154 VEX_LEN_5D_P_1,
1155 VEX_LEN_5D_P_3,
1156 VEX_LEN_5E_P_1,
1157 VEX_LEN_5E_P_3,
1158 VEX_LEN_5F_P_1,
1159 VEX_LEN_5F_P_3,
1160 VEX_LEN_60_P_2,
1161 VEX_LEN_61_P_2,
1162 VEX_LEN_62_P_2,
1163 VEX_LEN_63_P_2,
1164 VEX_LEN_64_P_2,
1165 VEX_LEN_65_P_2,
1166 VEX_LEN_66_P_2,
1167 VEX_LEN_67_P_2,
1168 VEX_LEN_68_P_2,
1169 VEX_LEN_69_P_2,
1170 VEX_LEN_6A_P_2,
1171 VEX_LEN_6B_P_2,
1172 VEX_LEN_6C_P_2,
1173 VEX_LEN_6D_P_2,
1174 VEX_LEN_6E_P_2,
1175 VEX_LEN_70_P_1,
1176 VEX_LEN_70_P_2,
1177 VEX_LEN_70_P_3,
1178 VEX_LEN_71_R_2_P_2,
1179 VEX_LEN_71_R_4_P_2,
1180 VEX_LEN_71_R_6_P_2,
1181 VEX_LEN_72_R_2_P_2,
1182 VEX_LEN_72_R_4_P_2,
1183 VEX_LEN_72_R_6_P_2,
1184 VEX_LEN_73_R_2_P_2,
1185 VEX_LEN_73_R_3_P_2,
1186 VEX_LEN_73_R_6_P_2,
1187 VEX_LEN_73_R_7_P_2,
1188 VEX_LEN_74_P_2,
1189 VEX_LEN_75_P_2,
1190 VEX_LEN_76_P_2,
1191 VEX_LEN_7E_P_1,
1192 VEX_LEN_7E_P_2,
1193 VEX_LEN_AE_R_2_M_0,
1194 VEX_LEN_AE_R_3_M_0,
1195 VEX_LEN_C2_P_1,
1196 VEX_LEN_C2_P_3,
1197 VEX_LEN_C4_P_2,
1198 VEX_LEN_C5_P_2,
1199 VEX_LEN_D1_P_2,
1200 VEX_LEN_D2_P_2,
1201 VEX_LEN_D3_P_2,
1202 VEX_LEN_D4_P_2,
1203 VEX_LEN_D5_P_2,
1204 VEX_LEN_D6_P_2,
1205 VEX_LEN_D7_P_2_M_1,
1206 VEX_LEN_D8_P_2,
1207 VEX_LEN_D9_P_2,
1208 VEX_LEN_DA_P_2,
1209 VEX_LEN_DB_P_2,
1210 VEX_LEN_DC_P_2,
1211 VEX_LEN_DD_P_2,
1212 VEX_LEN_DE_P_2,
1213 VEX_LEN_DF_P_2,
1214 VEX_LEN_E0_P_2,
1215 VEX_LEN_E1_P_2,
1216 VEX_LEN_E2_P_2,
1217 VEX_LEN_E3_P_2,
1218 VEX_LEN_E4_P_2,
1219 VEX_LEN_E5_P_2,
1220 VEX_LEN_E8_P_2,
1221 VEX_LEN_E9_P_2,
1222 VEX_LEN_EA_P_2,
1223 VEX_LEN_EB_P_2,
1224 VEX_LEN_EC_P_2,
1225 VEX_LEN_ED_P_2,
1226 VEX_LEN_EE_P_2,
1227 VEX_LEN_EF_P_2,
1228 VEX_LEN_F1_P_2,
1229 VEX_LEN_F2_P_2,
1230 VEX_LEN_F3_P_2,
1231 VEX_LEN_F4_P_2,
1232 VEX_LEN_F5_P_2,
1233 VEX_LEN_F6_P_2,
1234 VEX_LEN_F7_P_2,
1235 VEX_LEN_F8_P_2,
1236 VEX_LEN_F9_P_2,
1237 VEX_LEN_FA_P_2,
1238 VEX_LEN_FB_P_2,
1239 VEX_LEN_FC_P_2,
1240 VEX_LEN_FD_P_2,
1241 VEX_LEN_FE_P_2,
1242 VEX_LEN_3800_P_2,
1243 VEX_LEN_3801_P_2,
1244 VEX_LEN_3802_P_2,
1245 VEX_LEN_3803_P_2,
1246 VEX_LEN_3804_P_2,
1247 VEX_LEN_3805_P_2,
1248 VEX_LEN_3806_P_2,
1249 VEX_LEN_3807_P_2,
1250 VEX_LEN_3808_P_2,
1251 VEX_LEN_3809_P_2,
1252 VEX_LEN_380A_P_2,
1253 VEX_LEN_380B_P_2,
1254 VEX_LEN_3819_P_2_M_0,
1255 VEX_LEN_381A_P_2_M_0,
1256 VEX_LEN_381C_P_2,
1257 VEX_LEN_381D_P_2,
1258 VEX_LEN_381E_P_2,
1259 VEX_LEN_3820_P_2,
1260 VEX_LEN_3821_P_2,
1261 VEX_LEN_3822_P_2,
1262 VEX_LEN_3823_P_2,
1263 VEX_LEN_3824_P_2,
1264 VEX_LEN_3825_P_2,
1265 VEX_LEN_3828_P_2,
1266 VEX_LEN_3829_P_2,
1267 VEX_LEN_382A_P_2_M_0,
1268 VEX_LEN_382B_P_2,
1269 VEX_LEN_3830_P_2,
1270 VEX_LEN_3831_P_2,
1271 VEX_LEN_3832_P_2,
1272 VEX_LEN_3833_P_2,
1273 VEX_LEN_3834_P_2,
1274 VEX_LEN_3835_P_2,
1275 VEX_LEN_3837_P_2,
1276 VEX_LEN_3838_P_2,
1277 VEX_LEN_3839_P_2,
1278 VEX_LEN_383A_P_2,
1279 VEX_LEN_383B_P_2,
1280 VEX_LEN_383C_P_2,
1281 VEX_LEN_383D_P_2,
1282 VEX_LEN_383E_P_2,
1283 VEX_LEN_383F_P_2,
1284 VEX_LEN_3840_P_2,
1285 VEX_LEN_3841_P_2,
1286 VEX_LEN_38DB_P_2,
1287 VEX_LEN_38DC_P_2,
1288 VEX_LEN_38DD_P_2,
1289 VEX_LEN_38DE_P_2,
1290 VEX_LEN_38DF_P_2,
1291 VEX_LEN_3A06_P_2,
1292 VEX_LEN_3A0A_P_2,
1293 VEX_LEN_3A0B_P_2,
1294 VEX_LEN_3A0E_P_2,
1295 VEX_LEN_3A0F_P_2,
1296 VEX_LEN_3A14_P_2,
1297 VEX_LEN_3A15_P_2,
1298 VEX_LEN_3A16_P_2,
1299 VEX_LEN_3A17_P_2,
1300 VEX_LEN_3A18_P_2,
1301 VEX_LEN_3A19_P_2,
1302 VEX_LEN_3A20_P_2,
1303 VEX_LEN_3A21_P_2,
1304 VEX_LEN_3A22_P_2,
1305 VEX_LEN_3A41_P_2,
1306 VEX_LEN_3A42_P_2,
1307 VEX_LEN_3A44_P_2,
1308 VEX_LEN_3A4C_P_2,
1309 VEX_LEN_3A60_P_2,
1310 VEX_LEN_3A61_P_2,
1311 VEX_LEN_3A62_P_2,
1312 VEX_LEN_3A63_P_2,
1313 VEX_LEN_3A6A_P_2,
1314 VEX_LEN_3A6B_P_2,
1315 VEX_LEN_3A6E_P_2,
1316 VEX_LEN_3A6F_P_2,
1317 VEX_LEN_3A7A_P_2,
1318 VEX_LEN_3A7B_P_2,
1319 VEX_LEN_3A7E_P_2,
1320 VEX_LEN_3A7F_P_2,
5dd85c99 1321 VEX_LEN_3ADF_P_2,
5dd85c99
SP
1322 VEX_LEN_XOP_09_80,
1323 VEX_LEN_XOP_09_81
51e7da1b 1324};
c0f3af97 1325
9e30b8e0
L
1326enum
1327{
1328 VEX_W_10_P_0 = 0,
1329 VEX_W_10_P_1,
1330 VEX_W_10_P_2,
1331 VEX_W_10_P_3,
1332 VEX_W_11_P_0,
1333 VEX_W_11_P_1,
1334 VEX_W_11_P_2,
1335 VEX_W_11_P_3,
1336 VEX_W_12_P_0_M_0,
1337 VEX_W_12_P_0_M_1,
1338 VEX_W_12_P_1,
1339 VEX_W_12_P_2,
1340 VEX_W_12_P_3,
1341 VEX_W_13_M_0,
1342 VEX_W_14,
1343 VEX_W_15,
1344 VEX_W_16_P_0_M_0,
1345 VEX_W_16_P_0_M_1,
1346 VEX_W_16_P_1,
1347 VEX_W_16_P_2,
1348 VEX_W_17_M_0,
1349 VEX_W_28,
1350 VEX_W_29,
1351 VEX_W_2B_M_0,
1352 VEX_W_2E_P_0,
1353 VEX_W_2E_P_2,
1354 VEX_W_2F_P_0,
1355 VEX_W_2F_P_2,
1356 VEX_W_50_M_0,
1357 VEX_W_51_P_0,
1358 VEX_W_51_P_1,
1359 VEX_W_51_P_2,
1360 VEX_W_51_P_3,
1361 VEX_W_52_P_0,
1362 VEX_W_52_P_1,
1363 VEX_W_53_P_0,
1364 VEX_W_53_P_1,
1365 VEX_W_58_P_0,
1366 VEX_W_58_P_1,
1367 VEX_W_58_P_2,
1368 VEX_W_58_P_3,
1369 VEX_W_59_P_0,
1370 VEX_W_59_P_1,
1371 VEX_W_59_P_2,
1372 VEX_W_59_P_3,
1373 VEX_W_5A_P_0,
1374 VEX_W_5A_P_1,
1375 VEX_W_5A_P_3,
1376 VEX_W_5B_P_0,
1377 VEX_W_5B_P_1,
1378 VEX_W_5B_P_2,
1379 VEX_W_5C_P_0,
1380 VEX_W_5C_P_1,
1381 VEX_W_5C_P_2,
1382 VEX_W_5C_P_3,
1383 VEX_W_5D_P_0,
1384 VEX_W_5D_P_1,
1385 VEX_W_5D_P_2,
1386 VEX_W_5D_P_3,
1387 VEX_W_5E_P_0,
1388 VEX_W_5E_P_1,
1389 VEX_W_5E_P_2,
1390 VEX_W_5E_P_3,
1391 VEX_W_5F_P_0,
1392 VEX_W_5F_P_1,
1393 VEX_W_5F_P_2,
1394 VEX_W_5F_P_3,
1395 VEX_W_60_P_2,
1396 VEX_W_61_P_2,
1397 VEX_W_62_P_2,
1398 VEX_W_63_P_2,
1399 VEX_W_64_P_2,
1400 VEX_W_65_P_2,
1401 VEX_W_66_P_2,
1402 VEX_W_67_P_2,
1403 VEX_W_68_P_2,
1404 VEX_W_69_P_2,
1405 VEX_W_6A_P_2,
1406 VEX_W_6B_P_2,
1407 VEX_W_6C_P_2,
1408 VEX_W_6D_P_2,
1409 VEX_W_6F_P_1,
1410 VEX_W_6F_P_2,
1411 VEX_W_70_P_1,
1412 VEX_W_70_P_2,
1413 VEX_W_70_P_3,
1414 VEX_W_71_R_2_P_2,
1415 VEX_W_71_R_4_P_2,
1416 VEX_W_71_R_6_P_2,
1417 VEX_W_72_R_2_P_2,
1418 VEX_W_72_R_4_P_2,
1419 VEX_W_72_R_6_P_2,
1420 VEX_W_73_R_2_P_2,
1421 VEX_W_73_R_3_P_2,
1422 VEX_W_73_R_6_P_2,
1423 VEX_W_73_R_7_P_2,
1424 VEX_W_74_P_2,
1425 VEX_W_75_P_2,
1426 VEX_W_76_P_2,
1427 VEX_W_77_P_0,
1428 VEX_W_7C_P_2,
1429 VEX_W_7C_P_3,
1430 VEX_W_7D_P_2,
1431 VEX_W_7D_P_3,
1432 VEX_W_7E_P_1,
1433 VEX_W_7F_P_1,
1434 VEX_W_7F_P_2,
1435 VEX_W_AE_R_2_M_0,
1436 VEX_W_AE_R_3_M_0,
1437 VEX_W_C2_P_0,
1438 VEX_W_C2_P_1,
1439 VEX_W_C2_P_2,
1440 VEX_W_C2_P_3,
1441 VEX_W_C4_P_2,
1442 VEX_W_C5_P_2,
1443 VEX_W_D0_P_2,
1444 VEX_W_D0_P_3,
1445 VEX_W_D1_P_2,
1446 VEX_W_D2_P_2,
1447 VEX_W_D3_P_2,
1448 VEX_W_D4_P_2,
1449 VEX_W_D5_P_2,
1450 VEX_W_D6_P_2,
1451 VEX_W_D7_P_2_M_1,
1452 VEX_W_D8_P_2,
1453 VEX_W_D9_P_2,
1454 VEX_W_DA_P_2,
1455 VEX_W_DB_P_2,
1456 VEX_W_DC_P_2,
1457 VEX_W_DD_P_2,
1458 VEX_W_DE_P_2,
1459 VEX_W_DF_P_2,
1460 VEX_W_E0_P_2,
1461 VEX_W_E1_P_2,
1462 VEX_W_E2_P_2,
1463 VEX_W_E3_P_2,
1464 VEX_W_E4_P_2,
1465 VEX_W_E5_P_2,
1466 VEX_W_E6_P_1,
1467 VEX_W_E6_P_2,
1468 VEX_W_E6_P_3,
1469 VEX_W_E7_P_2_M_0,
1470 VEX_W_E8_P_2,
1471 VEX_W_E9_P_2,
1472 VEX_W_EA_P_2,
1473 VEX_W_EB_P_2,
1474 VEX_W_EC_P_2,
1475 VEX_W_ED_P_2,
1476 VEX_W_EE_P_2,
1477 VEX_W_EF_P_2,
1478 VEX_W_F0_P_3_M_0,
1479 VEX_W_F1_P_2,
1480 VEX_W_F2_P_2,
1481 VEX_W_F3_P_2,
1482 VEX_W_F4_P_2,
1483 VEX_W_F5_P_2,
1484 VEX_W_F6_P_2,
1485 VEX_W_F7_P_2,
1486 VEX_W_F8_P_2,
1487 VEX_W_F9_P_2,
1488 VEX_W_FA_P_2,
1489 VEX_W_FB_P_2,
1490 VEX_W_FC_P_2,
1491 VEX_W_FD_P_2,
1492 VEX_W_FE_P_2,
1493 VEX_W_3800_P_2,
1494 VEX_W_3801_P_2,
1495 VEX_W_3802_P_2,
1496 VEX_W_3803_P_2,
1497 VEX_W_3804_P_2,
1498 VEX_W_3805_P_2,
1499 VEX_W_3806_P_2,
1500 VEX_W_3807_P_2,
1501 VEX_W_3808_P_2,
1502 VEX_W_3809_P_2,
1503 VEX_W_380A_P_2,
1504 VEX_W_380B_P_2,
1505 VEX_W_380C_P_2,
1506 VEX_W_380D_P_2,
1507 VEX_W_380E_P_2,
1508 VEX_W_380F_P_2,
1509 VEX_W_3817_P_2,
bcf2684f 1510 VEX_W_3818_P_2_M_0,
9e30b8e0
L
1511 VEX_W_3819_P_2_M_0,
1512 VEX_W_381A_P_2_M_0,
1513 VEX_W_381C_P_2,
1514 VEX_W_381D_P_2,
1515 VEX_W_381E_P_2,
1516 VEX_W_3820_P_2,
1517 VEX_W_3821_P_2,
1518 VEX_W_3822_P_2,
1519 VEX_W_3823_P_2,
1520 VEX_W_3824_P_2,
1521 VEX_W_3825_P_2,
1522 VEX_W_3828_P_2,
1523 VEX_W_3829_P_2,
1524 VEX_W_382A_P_2_M_0,
1525 VEX_W_382B_P_2,
53aa04a0
L
1526 VEX_W_382C_P_2_M_0,
1527 VEX_W_382D_P_2_M_0,
1528 VEX_W_382E_P_2_M_0,
1529 VEX_W_382F_P_2_M_0,
9e30b8e0
L
1530 VEX_W_3830_P_2,
1531 VEX_W_3831_P_2,
1532 VEX_W_3832_P_2,
1533 VEX_W_3833_P_2,
1534 VEX_W_3834_P_2,
1535 VEX_W_3835_P_2,
1536 VEX_W_3837_P_2,
1537 VEX_W_3838_P_2,
1538 VEX_W_3839_P_2,
1539 VEX_W_383A_P_2,
1540 VEX_W_383B_P_2,
1541 VEX_W_383C_P_2,
1542 VEX_W_383D_P_2,
1543 VEX_W_383E_P_2,
1544 VEX_W_383F_P_2,
1545 VEX_W_3840_P_2,
1546 VEX_W_3841_P_2,
1547 VEX_W_38DB_P_2,
1548 VEX_W_38DC_P_2,
1549 VEX_W_38DD_P_2,
1550 VEX_W_38DE_P_2,
1551 VEX_W_38DF_P_2,
1552 VEX_W_3A04_P_2,
1553 VEX_W_3A05_P_2,
1554 VEX_W_3A06_P_2,
1555 VEX_W_3A08_P_2,
1556 VEX_W_3A09_P_2,
1557 VEX_W_3A0A_P_2,
1558 VEX_W_3A0B_P_2,
1559 VEX_W_3A0C_P_2,
1560 VEX_W_3A0D_P_2,
1561 VEX_W_3A0E_P_2,
1562 VEX_W_3A0F_P_2,
1563 VEX_W_3A14_P_2,
1564 VEX_W_3A15_P_2,
1565 VEX_W_3A18_P_2,
1566 VEX_W_3A19_P_2,
1567 VEX_W_3A20_P_2,
1568 VEX_W_3A21_P_2,
1569 VEX_W_3A40_P_2,
1570 VEX_W_3A41_P_2,
1571 VEX_W_3A42_P_2,
1572 VEX_W_3A44_P_2,
1573 VEX_W_3A4A_P_2,
1574 VEX_W_3A4B_P_2,
1575 VEX_W_3A4C_P_2,
1576 VEX_W_3A60_P_2,
1577 VEX_W_3A61_P_2,
1578 VEX_W_3A62_P_2,
1579 VEX_W_3A63_P_2,
1580 VEX_W_3ADF_P_2
1581};
1582
26ca5450 1583typedef void (*op_rtn) (int bytemode, int sizeflag);
252b5132
RH
1584
1585struct dis386 {
2da11e11 1586 const char *name;
ce518a5f
L
1587 struct
1588 {
1589 op_rtn rtn;
1590 int bytemode;
1591 } op[MAX_OPERANDS];
252b5132
RH
1592};
1593
1594/* Upper case letters in the instruction names here are macros.
1595 'A' => print 'b' if no register operands or suffix_always is true
1596 'B' => print 'b' if suffix_always is true
9306ca4a 1597 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
98b528ac 1598 size prefix
ed7841b3 1599 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
98b528ac 1600 suffix_always is true
252b5132 1601 'E' => print 'e' if 32-bit form of jcxz
3ffd33cf 1602 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
52fd6d94 1603 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
5dd0794d 1604 'H' => print ",pt" or ",pn" branch hint
9306ca4a 1605 'I' => honor following macro letter even in Intel mode (implemented only
98b528ac 1606 for some of the macro letters)
9306ca4a 1607 'J' => print 'l'
42903f7f 1608 'K' => print 'd' or 'q' if rex prefix is present.
252b5132 1609 'L' => print 'l' if suffix_always is true
9d141669 1610 'M' => print 'r' if intel_mnemonic is false.
252b5132 1611 'N' => print 'n' if instruction has no wait "prefix"
a35ca55a 1612 'O' => print 'd' or 'o' (or 'q' in Intel mode)
52b15da3 1613 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
98b528ac
L
1614 or suffix_always is true. print 'q' if rex prefix is present.
1615 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
1616 is true
a35ca55a 1617 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
52b15da3 1618 'S' => print 'w', 'l' or 'q' if suffix_always is true
6439fc28
AM
1619 'T' => print 'q' in 64bit mode and behave as 'P' otherwise
1620 'U' => print 'q' in 64bit mode and behave as 'Q' otherwise
1a114b12 1621 'V' => print 'q' in 64bit mode and behave as 'S' otherwise
a35ca55a 1622 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
9306ca4a 1623 'X' => print 's', 'd' depending on data16 prefix (for XMM)
8a72226a
L
1624 'Y' => 'q' if instruction has an REX 64bit overwrite prefix and
1625 suffix_always is true.
6dd5059a 1626 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
9d141669 1627 '!' => change condition from true to false or from false to true.
98b528ac
L
1628 '%' => add 1 upper case letter to the macro.
1629
1630 2 upper case letter macros:
c0f3af97
L
1631 "XY" => print 'x' or 'y' if no register operands or suffix_always
1632 is true.
4b06377f
L
1633 "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
1634 "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
98b528ac 1635 or suffix_always is true
4b06377f
L
1636 "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
1637 "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
1638 "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
52b15da3 1639
6439fc28
AM
1640 Many of the above letters print nothing in Intel mode. See "putop"
1641 for the details.
52b15da3 1642
6439fc28 1643 Braces '{' and '}', and vertical bars '|', indicate alternative
7c52e0e8 1644 mnemonic strings for AT&T and Intel. */
252b5132 1645
6439fc28 1646static const struct dis386 dis386[] = {
252b5132 1647 /* 00 */
ce518a5f
L
1648 { "addB", { Eb, Gb } },
1649 { "addS", { Ev, Gv } },
c7532693
L
1650 { "addB", { Gb, EbS } },
1651 { "addS", { Gv, EvS } },
ce518a5f
L
1652 { "addB", { AL, Ib } },
1653 { "addS", { eAX, Iv } },
4e7d34a6
L
1654 { X86_64_TABLE (X86_64_06) },
1655 { X86_64_TABLE (X86_64_07) },
252b5132 1656 /* 08 */
ce518a5f
L
1657 { "orB", { Eb, Gb } },
1658 { "orS", { Ev, Gv } },
c7532693
L
1659 { "orB", { Gb, EbS } },
1660 { "orS", { Gv, EvS } },
ce518a5f
L
1661 { "orB", { AL, Ib } },
1662 { "orS", { eAX, Iv } },
4e7d34a6 1663 { X86_64_TABLE (X86_64_0D) },
592d1631 1664 { Bad_Opcode }, /* 0x0f extended opcode escape */
252b5132 1665 /* 10 */
ce518a5f
L
1666 { "adcB", { Eb, Gb } },
1667 { "adcS", { Ev, Gv } },
c7532693
L
1668 { "adcB", { Gb, EbS } },
1669 { "adcS", { Gv, EvS } },
ce518a5f
L
1670 { "adcB", { AL, Ib } },
1671 { "adcS", { eAX, Iv } },
4e7d34a6
L
1672 { X86_64_TABLE (X86_64_16) },
1673 { X86_64_TABLE (X86_64_17) },
252b5132 1674 /* 18 */
ce518a5f
L
1675 { "sbbB", { Eb, Gb } },
1676 { "sbbS", { Ev, Gv } },
c7532693
L
1677 { "sbbB", { Gb, EbS } },
1678 { "sbbS", { Gv, EvS } },
ce518a5f
L
1679 { "sbbB", { AL, Ib } },
1680 { "sbbS", { eAX, Iv } },
4e7d34a6
L
1681 { X86_64_TABLE (X86_64_1E) },
1682 { X86_64_TABLE (X86_64_1F) },
252b5132 1683 /* 20 */
ce518a5f
L
1684 { "andB", { Eb, Gb } },
1685 { "andS", { Ev, Gv } },
c7532693
L
1686 { "andB", { Gb, EbS } },
1687 { "andS", { Gv, EvS } },
ce518a5f
L
1688 { "andB", { AL, Ib } },
1689 { "andS", { eAX, Iv } },
592d1631 1690 { Bad_Opcode }, /* SEG ES prefix */
4e7d34a6 1691 { X86_64_TABLE (X86_64_27) },
252b5132 1692 /* 28 */
ce518a5f
L
1693 { "subB", { Eb, Gb } },
1694 { "subS", { Ev, Gv } },
c7532693
L
1695 { "subB", { Gb, EbS } },
1696 { "subS", { Gv, EvS } },
ce518a5f
L
1697 { "subB", { AL, Ib } },
1698 { "subS", { eAX, Iv } },
592d1631 1699 { Bad_Opcode }, /* SEG CS prefix */
4e7d34a6 1700 { X86_64_TABLE (X86_64_2F) },
252b5132 1701 /* 30 */
ce518a5f
L
1702 { "xorB", { Eb, Gb } },
1703 { "xorS", { Ev, Gv } },
c7532693
L
1704 { "xorB", { Gb, EbS } },
1705 { "xorS", { Gv, EvS } },
ce518a5f
L
1706 { "xorB", { AL, Ib } },
1707 { "xorS", { eAX, Iv } },
592d1631 1708 { Bad_Opcode }, /* SEG SS prefix */
4e7d34a6 1709 { X86_64_TABLE (X86_64_37) },
252b5132 1710 /* 38 */
ce518a5f
L
1711 { "cmpB", { Eb, Gb } },
1712 { "cmpS", { Ev, Gv } },
c7532693
L
1713 { "cmpB", { Gb, EbS } },
1714 { "cmpS", { Gv, EvS } },
ce518a5f
L
1715 { "cmpB", { AL, Ib } },
1716 { "cmpS", { eAX, Iv } },
592d1631 1717 { Bad_Opcode }, /* SEG DS prefix */
4e7d34a6 1718 { X86_64_TABLE (X86_64_3F) },
252b5132 1719 /* 40 */
ce518a5f
L
1720 { "inc{S|}", { RMeAX } },
1721 { "inc{S|}", { RMeCX } },
1722 { "inc{S|}", { RMeDX } },
1723 { "inc{S|}", { RMeBX } },
1724 { "inc{S|}", { RMeSP } },
1725 { "inc{S|}", { RMeBP } },
1726 { "inc{S|}", { RMeSI } },
1727 { "inc{S|}", { RMeDI } },
252b5132 1728 /* 48 */
ce518a5f
L
1729 { "dec{S|}", { RMeAX } },
1730 { "dec{S|}", { RMeCX } },
1731 { "dec{S|}", { RMeDX } },
1732 { "dec{S|}", { RMeBX } },
1733 { "dec{S|}", { RMeSP } },
1734 { "dec{S|}", { RMeBP } },
1735 { "dec{S|}", { RMeSI } },
1736 { "dec{S|}", { RMeDI } },
252b5132 1737 /* 50 */
ce518a5f
L
1738 { "pushV", { RMrAX } },
1739 { "pushV", { RMrCX } },
1740 { "pushV", { RMrDX } },
1741 { "pushV", { RMrBX } },
1742 { "pushV", { RMrSP } },
1743 { "pushV", { RMrBP } },
1744 { "pushV", { RMrSI } },
1745 { "pushV", { RMrDI } },
252b5132 1746 /* 58 */
ce518a5f
L
1747 { "popV", { RMrAX } },
1748 { "popV", { RMrCX } },
1749 { "popV", { RMrDX } },
1750 { "popV", { RMrBX } },
1751 { "popV", { RMrSP } },
1752 { "popV", { RMrBP } },
1753 { "popV", { RMrSI } },
1754 { "popV", { RMrDI } },
252b5132 1755 /* 60 */
4e7d34a6
L
1756 { X86_64_TABLE (X86_64_60) },
1757 { X86_64_TABLE (X86_64_61) },
1758 { X86_64_TABLE (X86_64_62) },
1759 { X86_64_TABLE (X86_64_63) },
592d1631
L
1760 { Bad_Opcode }, /* seg fs */
1761 { Bad_Opcode }, /* seg gs */
1762 { Bad_Opcode }, /* op size prefix */
1763 { Bad_Opcode }, /* adr size prefix */
252b5132 1764 /* 68 */
ce518a5f
L
1765 { "pushT", { Iq } },
1766 { "imulS", { Gv, Ev, Iv } },
1767 { "pushT", { sIb } },
1768 { "imulS", { Gv, Ev, sIb } },
7c52e0e8 1769 { "ins{b|}", { Ybr, indirDX } },
4e7d34a6 1770 { X86_64_TABLE (X86_64_6D) },
7c52e0e8 1771 { "outs{b|}", { indirDXr, Xb } },
4e7d34a6 1772 { X86_64_TABLE (X86_64_6F) },
252b5132 1773 /* 70 */
ce518a5f
L
1774 { "joH", { Jb, XX, cond_jump_flag } },
1775 { "jnoH", { Jb, XX, cond_jump_flag } },
1776 { "jbH", { Jb, XX, cond_jump_flag } },
1777 { "jaeH", { Jb, XX, cond_jump_flag } },
1778 { "jeH", { Jb, XX, cond_jump_flag } },
1779 { "jneH", { Jb, XX, cond_jump_flag } },
1780 { "jbeH", { Jb, XX, cond_jump_flag } },
1781 { "jaH", { Jb, XX, cond_jump_flag } },
252b5132 1782 /* 78 */
ce518a5f
L
1783 { "jsH", { Jb, XX, cond_jump_flag } },
1784 { "jnsH", { Jb, XX, cond_jump_flag } },
1785 { "jpH", { Jb, XX, cond_jump_flag } },
1786 { "jnpH", { Jb, XX, cond_jump_flag } },
1787 { "jlH", { Jb, XX, cond_jump_flag } },
1788 { "jgeH", { Jb, XX, cond_jump_flag } },
1789 { "jleH", { Jb, XX, cond_jump_flag } },
1790 { "jgH", { Jb, XX, cond_jump_flag } },
252b5132 1791 /* 80 */
1ceb70f8
L
1792 { REG_TABLE (REG_80) },
1793 { REG_TABLE (REG_81) },
592d1631 1794 { Bad_Opcode },
1ceb70f8 1795 { REG_TABLE (REG_82) },
ce518a5f
L
1796 { "testB", { Eb, Gb } },
1797 { "testS", { Ev, Gv } },
1798 { "xchgB", { Eb, Gb } },
1799 { "xchgS", { Ev, Gv } },
252b5132 1800 /* 88 */
ce518a5f
L
1801 { "movB", { Eb, Gb } },
1802 { "movS", { Ev, Gv } },
b6169b20
L
1803 { "movB", { Gb, EbS } },
1804 { "movS", { Gv, EvS } },
ce518a5f 1805 { "movD", { Sv, Sw } },
1ceb70f8 1806 { MOD_TABLE (MOD_8D) },
ce518a5f 1807 { "movD", { Sw, Sv } },
1ceb70f8 1808 { REG_TABLE (REG_8F) },
252b5132 1809 /* 90 */
1ceb70f8 1810 { PREFIX_TABLE (PREFIX_90) },
ce518a5f
L
1811 { "xchgS", { RMeCX, eAX } },
1812 { "xchgS", { RMeDX, eAX } },
1813 { "xchgS", { RMeBX, eAX } },
1814 { "xchgS", { RMeSP, eAX } },
1815 { "xchgS", { RMeBP, eAX } },
1816 { "xchgS", { RMeSI, eAX } },
1817 { "xchgS", { RMeDI, eAX } },
252b5132 1818 /* 98 */
7c52e0e8
L
1819 { "cW{t|}R", { XX } },
1820 { "cR{t|}O", { XX } },
4e7d34a6 1821 { X86_64_TABLE (X86_64_9A) },
592d1631 1822 { Bad_Opcode }, /* fwait */
ce518a5f
L
1823 { "pushfT", { XX } },
1824 { "popfT", { XX } },
7c52e0e8
L
1825 { "sahf", { XX } },
1826 { "lahf", { XX } },
252b5132 1827 /* a0 */
4b06377f
L
1828 { "mov%LB", { AL, Ob } },
1829 { "mov%LS", { eAX, Ov } },
1830 { "mov%LB", { Ob, AL } },
1831 { "mov%LS", { Ov, eAX } },
7c52e0e8
L
1832 { "movs{b|}", { Ybr, Xb } },
1833 { "movs{R|}", { Yvr, Xv } },
1834 { "cmps{b|}", { Xb, Yb } },
1835 { "cmps{R|}", { Xv, Yv } },
252b5132 1836 /* a8 */
ce518a5f
L
1837 { "testB", { AL, Ib } },
1838 { "testS", { eAX, Iv } },
1839 { "stosB", { Ybr, AL } },
1840 { "stosS", { Yvr, eAX } },
1841 { "lodsB", { ALr, Xb } },
1842 { "lodsS", { eAXr, Xv } },
1843 { "scasB", { AL, Yb } },
1844 { "scasS", { eAX, Yv } },
252b5132 1845 /* b0 */
ce518a5f
L
1846 { "movB", { RMAL, Ib } },
1847 { "movB", { RMCL, Ib } },
1848 { "movB", { RMDL, Ib } },
1849 { "movB", { RMBL, Ib } },
1850 { "movB", { RMAH, Ib } },
1851 { "movB", { RMCH, Ib } },
1852 { "movB", { RMDH, Ib } },
1853 { "movB", { RMBH, Ib } },
252b5132 1854 /* b8 */
4b06377f
L
1855 { "mov%LV", { RMeAX, Iv64 } },
1856 { "mov%LV", { RMeCX, Iv64 } },
1857 { "mov%LV", { RMeDX, Iv64 } },
1858 { "mov%LV", { RMeBX, Iv64 } },
1859 { "mov%LV", { RMeSP, Iv64 } },
1860 { "mov%LV", { RMeBP, Iv64 } },
1861 { "mov%LV", { RMeSI, Iv64 } },
1862 { "mov%LV", { RMeDI, Iv64 } },
252b5132 1863 /* c0 */
1ceb70f8
L
1864 { REG_TABLE (REG_C0) },
1865 { REG_TABLE (REG_C1) },
ce518a5f
L
1866 { "retT", { Iw } },
1867 { "retT", { XX } },
4e7d34a6
L
1868 { X86_64_TABLE (X86_64_C4) },
1869 { X86_64_TABLE (X86_64_C5) },
1ceb70f8
L
1870 { REG_TABLE (REG_C6) },
1871 { REG_TABLE (REG_C7) },
252b5132 1872 /* c8 */
ce518a5f
L
1873 { "enterT", { Iw, Ib } },
1874 { "leaveT", { XX } },
ddab3d59
JB
1875 { "Jret{|f}P", { Iw } },
1876 { "Jret{|f}P", { XX } },
ce518a5f
L
1877 { "int3", { XX } },
1878 { "int", { Ib } },
4e7d34a6 1879 { X86_64_TABLE (X86_64_CE) },
ce518a5f 1880 { "iretP", { XX } },
252b5132 1881 /* d0 */
1ceb70f8
L
1882 { REG_TABLE (REG_D0) },
1883 { REG_TABLE (REG_D1) },
1884 { REG_TABLE (REG_D2) },
1885 { REG_TABLE (REG_D3) },
4e7d34a6
L
1886 { X86_64_TABLE (X86_64_D4) },
1887 { X86_64_TABLE (X86_64_D5) },
592d1631 1888 { Bad_Opcode },
ce518a5f 1889 { "xlat", { DSBX } },
252b5132
RH
1890 /* d8 */
1891 { FLOAT },
1892 { FLOAT },
1893 { FLOAT },
1894 { FLOAT },
1895 { FLOAT },
1896 { FLOAT },
1897 { FLOAT },
1898 { FLOAT },
1899 /* e0 */
ce518a5f
L
1900 { "loopneFH", { Jb, XX, loop_jcxz_flag } },
1901 { "loopeFH", { Jb, XX, loop_jcxz_flag } },
1902 { "loopFH", { Jb, XX, loop_jcxz_flag } },
1903 { "jEcxzH", { Jb, XX, loop_jcxz_flag } },
1904 { "inB", { AL, Ib } },
1905 { "inG", { zAX, Ib } },
1906 { "outB", { Ib, AL } },
1907 { "outG", { Ib, zAX } },
252b5132 1908 /* e8 */
ce518a5f
L
1909 { "callT", { Jv } },
1910 { "jmpT", { Jv } },
4e7d34a6 1911 { X86_64_TABLE (X86_64_EA) },
ce518a5f
L
1912 { "jmp", { Jb } },
1913 { "inB", { AL, indirDX } },
1914 { "inG", { zAX, indirDX } },
1915 { "outB", { indirDX, AL } },
1916 { "outG", { indirDX, zAX } },
252b5132 1917 /* f0 */
592d1631 1918 { Bad_Opcode }, /* lock prefix */
ce518a5f 1919 { "icebp", { XX } },
592d1631
L
1920 { Bad_Opcode }, /* repne */
1921 { Bad_Opcode }, /* repz */
ce518a5f
L
1922 { "hlt", { XX } },
1923 { "cmc", { XX } },
1ceb70f8
L
1924 { REG_TABLE (REG_F6) },
1925 { REG_TABLE (REG_F7) },
252b5132 1926 /* f8 */
ce518a5f
L
1927 { "clc", { XX } },
1928 { "stc", { XX } },
1929 { "cli", { XX } },
1930 { "sti", { XX } },
1931 { "cld", { XX } },
1932 { "std", { XX } },
1ceb70f8
L
1933 { REG_TABLE (REG_FE) },
1934 { REG_TABLE (REG_FF) },
252b5132
RH
1935};
1936
6439fc28 1937static const struct dis386 dis386_twobyte[] = {
252b5132 1938 /* 00 */
1ceb70f8
L
1939 { REG_TABLE (REG_0F00 ) },
1940 { REG_TABLE (REG_0F01 ) },
ce518a5f
L
1941 { "larS", { Gv, Ew } },
1942 { "lslS", { Gv, Ew } },
592d1631 1943 { Bad_Opcode },
ce518a5f
L
1944 { "syscall", { XX } },
1945 { "clts", { XX } },
1946 { "sysretP", { XX } },
252b5132 1947 /* 08 */
ce518a5f
L
1948 { "invd", { XX } },
1949 { "wbinvd", { XX } },
592d1631 1950 { Bad_Opcode },
ce518a5f 1951 { "ud2a", { XX } },
592d1631 1952 { Bad_Opcode },
b5b1fc4f 1953 { REG_TABLE (REG_0F0D) },
ce518a5f
L
1954 { "femms", { XX } },
1955 { "", { MX, EM, OPSUF } }, /* See OP_3DNowSuffix. */
252b5132 1956 /* 10 */
1ceb70f8
L
1957 { PREFIX_TABLE (PREFIX_0F10) },
1958 { PREFIX_TABLE (PREFIX_0F11) },
1959 { PREFIX_TABLE (PREFIX_0F12) },
1960 { MOD_TABLE (MOD_0F13) },
f2a421c4
L
1961 { "unpcklpX", { XM, EXx } },
1962 { "unpckhpX", { XM, EXx } },
1ceb70f8
L
1963 { PREFIX_TABLE (PREFIX_0F16) },
1964 { MOD_TABLE (MOD_0F17) },
252b5132 1965 /* 18 */
1ceb70f8 1966 { REG_TABLE (REG_0F18) },
b5b1fc4f
L
1967 { "nopQ", { Ev } },
1968 { "nopQ", { Ev } },
1969 { "nopQ", { Ev } },
1970 { "nopQ", { Ev } },
1971 { "nopQ", { Ev } },
1972 { "nopQ", { Ev } },
ce518a5f 1973 { "nopQ", { Ev } },
252b5132 1974 /* 20 */
1ceb70f8
L
1975 { MOD_TABLE (MOD_0F20) },
1976 { MOD_TABLE (MOD_0F21) },
1977 { MOD_TABLE (MOD_0F22) },
1978 { MOD_TABLE (MOD_0F23) },
1979 { MOD_TABLE (MOD_0F24) },
592d1631 1980 { Bad_Opcode },
1ceb70f8 1981 { MOD_TABLE (MOD_0F26) },
592d1631 1982 { Bad_Opcode },
252b5132 1983 /* 28 */
09a2c6cf 1984 { "movapX", { XM, EXx } },
b6169b20 1985 { "movapX", { EXxS, XM } },
1ceb70f8
L
1986 { PREFIX_TABLE (PREFIX_0F2A) },
1987 { PREFIX_TABLE (PREFIX_0F2B) },
1988 { PREFIX_TABLE (PREFIX_0F2C) },
1989 { PREFIX_TABLE (PREFIX_0F2D) },
1990 { PREFIX_TABLE (PREFIX_0F2E) },
1991 { PREFIX_TABLE (PREFIX_0F2F) },
252b5132 1992 /* 30 */
ce518a5f
L
1993 { "wrmsr", { XX } },
1994 { "rdtsc", { XX } },
1995 { "rdmsr", { XX } },
1996 { "rdpmc", { XX } },
1997 { "sysenter", { XX } },
1998 { "sysexit", { XX } },
592d1631 1999 { Bad_Opcode },
47dd174c 2000 { "getsec", { XX } },
252b5132 2001 /* 38 */
4e7d34a6 2002 { THREE_BYTE_TABLE (THREE_BYTE_0F38) },
592d1631 2003 { Bad_Opcode },
4e7d34a6 2004 { THREE_BYTE_TABLE (THREE_BYTE_0F3A) },
592d1631
L
2005 { Bad_Opcode },
2006 { Bad_Opcode },
2007 { Bad_Opcode },
2008 { Bad_Opcode },
2009 { Bad_Opcode },
252b5132 2010 /* 40 */
b19d5385
JB
2011 { "cmovoS", { Gv, Ev } },
2012 { "cmovnoS", { Gv, Ev } },
2013 { "cmovbS", { Gv, Ev } },
2014 { "cmovaeS", { Gv, Ev } },
2015 { "cmoveS", { Gv, Ev } },
2016 { "cmovneS", { Gv, Ev } },
2017 { "cmovbeS", { Gv, Ev } },
2018 { "cmovaS", { Gv, Ev } },
252b5132 2019 /* 48 */
b19d5385
JB
2020 { "cmovsS", { Gv, Ev } },
2021 { "cmovnsS", { Gv, Ev } },
2022 { "cmovpS", { Gv, Ev } },
2023 { "cmovnpS", { Gv, Ev } },
2024 { "cmovlS", { Gv, Ev } },
2025 { "cmovgeS", { Gv, Ev } },
2026 { "cmovleS", { Gv, Ev } },
2027 { "cmovgS", { Gv, Ev } },
252b5132 2028 /* 50 */
75c135a8 2029 { MOD_TABLE (MOD_0F51) },
1ceb70f8
L
2030 { PREFIX_TABLE (PREFIX_0F51) },
2031 { PREFIX_TABLE (PREFIX_0F52) },
2032 { PREFIX_TABLE (PREFIX_0F53) },
09a2c6cf
L
2033 { "andpX", { XM, EXx } },
2034 { "andnpX", { XM, EXx } },
2035 { "orpX", { XM, EXx } },
2036 { "xorpX", { XM, EXx } },
252b5132 2037 /* 58 */
1ceb70f8
L
2038 { PREFIX_TABLE (PREFIX_0F58) },
2039 { PREFIX_TABLE (PREFIX_0F59) },
2040 { PREFIX_TABLE (PREFIX_0F5A) },
2041 { PREFIX_TABLE (PREFIX_0F5B) },
2042 { PREFIX_TABLE (PREFIX_0F5C) },
2043 { PREFIX_TABLE (PREFIX_0F5D) },
2044 { PREFIX_TABLE (PREFIX_0F5E) },
2045 { PREFIX_TABLE (PREFIX_0F5F) },
252b5132 2046 /* 60 */
1ceb70f8
L
2047 { PREFIX_TABLE (PREFIX_0F60) },
2048 { PREFIX_TABLE (PREFIX_0F61) },
2049 { PREFIX_TABLE (PREFIX_0F62) },
ce518a5f
L
2050 { "packsswb", { MX, EM } },
2051 { "pcmpgtb", { MX, EM } },
2052 { "pcmpgtw", { MX, EM } },
2053 { "pcmpgtd", { MX, EM } },
2054 { "packuswb", { MX, EM } },
252b5132 2055 /* 68 */
ce518a5f
L
2056 { "punpckhbw", { MX, EM } },
2057 { "punpckhwd", { MX, EM } },
2058 { "punpckhdq", { MX, EM } },
2059 { "packssdw", { MX, EM } },
1ceb70f8
L
2060 { PREFIX_TABLE (PREFIX_0F6C) },
2061 { PREFIX_TABLE (PREFIX_0F6D) },
231af070 2062 { "movK", { MX, Edq } },
1ceb70f8 2063 { PREFIX_TABLE (PREFIX_0F6F) },
252b5132 2064 /* 70 */
1ceb70f8
L
2065 { PREFIX_TABLE (PREFIX_0F70) },
2066 { REG_TABLE (REG_0F71) },
2067 { REG_TABLE (REG_0F72) },
2068 { REG_TABLE (REG_0F73) },
ce518a5f
L
2069 { "pcmpeqb", { MX, EM } },
2070 { "pcmpeqw", { MX, EM } },
2071 { "pcmpeqd", { MX, EM } },
2072 { "emms", { XX } },
252b5132 2073 /* 78 */
1ceb70f8
L
2074 { PREFIX_TABLE (PREFIX_0F78) },
2075 { PREFIX_TABLE (PREFIX_0F79) },
4e7d34a6 2076 { THREE_BYTE_TABLE (THREE_BYTE_0F7A) },
592d1631 2077 { Bad_Opcode },
1ceb70f8
L
2078 { PREFIX_TABLE (PREFIX_0F7C) },
2079 { PREFIX_TABLE (PREFIX_0F7D) },
2080 { PREFIX_TABLE (PREFIX_0F7E) },
2081 { PREFIX_TABLE (PREFIX_0F7F) },
252b5132 2082 /* 80 */
ce518a5f
L
2083 { "joH", { Jv, XX, cond_jump_flag } },
2084 { "jnoH", { Jv, XX, cond_jump_flag } },
2085 { "jbH", { Jv, XX, cond_jump_flag } },
2086 { "jaeH", { Jv, XX, cond_jump_flag } },
2087 { "jeH", { Jv, XX, cond_jump_flag } },
2088 { "jneH", { Jv, XX, cond_jump_flag } },
2089 { "jbeH", { Jv, XX, cond_jump_flag } },
2090 { "jaH", { Jv, XX, cond_jump_flag } },
252b5132 2091 /* 88 */
ce518a5f
L
2092 { "jsH", { Jv, XX, cond_jump_flag } },
2093 { "jnsH", { Jv, XX, cond_jump_flag } },
2094 { "jpH", { Jv, XX, cond_jump_flag } },
2095 { "jnpH", { Jv, XX, cond_jump_flag } },
2096 { "jlH", { Jv, XX, cond_jump_flag } },
2097 { "jgeH", { Jv, XX, cond_jump_flag } },
2098 { "jleH", { Jv, XX, cond_jump_flag } },
2099 { "jgH", { Jv, XX, cond_jump_flag } },
252b5132 2100 /* 90 */
ce518a5f
L
2101 { "seto", { Eb } },
2102 { "setno", { Eb } },
2103 { "setb", { Eb } },
2104 { "setae", { Eb } },
2105 { "sete", { Eb } },
2106 { "setne", { Eb } },
2107 { "setbe", { Eb } },
2108 { "seta", { Eb } },
252b5132 2109 /* 98 */
ce518a5f
L
2110 { "sets", { Eb } },
2111 { "setns", { Eb } },
2112 { "setp", { Eb } },
2113 { "setnp", { Eb } },
2114 { "setl", { Eb } },
2115 { "setge", { Eb } },
2116 { "setle", { Eb } },
2117 { "setg", { Eb } },
252b5132 2118 /* a0 */
ce518a5f
L
2119 { "pushT", { fs } },
2120 { "popT", { fs } },
2121 { "cpuid", { XX } },
2122 { "btS", { Ev, Gv } },
2123 { "shldS", { Ev, Gv, Ib } },
2124 { "shldS", { Ev, Gv, CL } },
1ceb70f8
L
2125 { REG_TABLE (REG_0FA6) },
2126 { REG_TABLE (REG_0FA7) },
252b5132 2127 /* a8 */
ce518a5f
L
2128 { "pushT", { gs } },
2129 { "popT", { gs } },
2130 { "rsm", { XX } },
2131 { "btsS", { Ev, Gv } },
2132 { "shrdS", { Ev, Gv, Ib } },
2133 { "shrdS", { Ev, Gv, CL } },
1ceb70f8 2134 { REG_TABLE (REG_0FAE) },
ce518a5f 2135 { "imulS", { Gv, Ev } },
252b5132 2136 /* b0 */
ce518a5f
L
2137 { "cmpxchgB", { Eb, Gb } },
2138 { "cmpxchgS", { Ev, Gv } },
1ceb70f8 2139 { MOD_TABLE (MOD_0FB2) },
ce518a5f 2140 { "btrS", { Ev, Gv } },
1ceb70f8
L
2141 { MOD_TABLE (MOD_0FB4) },
2142 { MOD_TABLE (MOD_0FB5) },
7c52e0e8
L
2143 { "movz{bR|x}", { Gv, Eb } },
2144 { "movz{wR|x}", { Gv, Ew } }, /* yes, there really is movzww ! */
252b5132 2145 /* b8 */
1ceb70f8 2146 { PREFIX_TABLE (PREFIX_0FB8) },
ce518a5f 2147 { "ud2b", { XX } },
1ceb70f8 2148 { REG_TABLE (REG_0FBA) },
ce518a5f
L
2149 { "btcS", { Ev, Gv } },
2150 { "bsfS", { Gv, Ev } },
1ceb70f8 2151 { PREFIX_TABLE (PREFIX_0FBD) },
7c52e0e8
L
2152 { "movs{bR|x}", { Gv, Eb } },
2153 { "movs{wR|x}", { Gv, Ew } }, /* yes, there really is movsww ! */
252b5132 2154 /* c0 */
ce518a5f
L
2155 { "xaddB", { Eb, Gb } },
2156 { "xaddS", { Ev, Gv } },
1ceb70f8 2157 { PREFIX_TABLE (PREFIX_0FC2) },
4ee52178 2158 { PREFIX_TABLE (PREFIX_0FC3) },
ce518a5f
L
2159 { "pinsrw", { MX, Edqw, Ib } },
2160 { "pextrw", { Gdq, MS, Ib } },
09a2c6cf 2161 { "shufpX", { XM, EXx, Ib } },
1ceb70f8 2162 { REG_TABLE (REG_0FC7) },
252b5132 2163 /* c8 */
ce518a5f
L
2164 { "bswap", { RMeAX } },
2165 { "bswap", { RMeCX } },
2166 { "bswap", { RMeDX } },
2167 { "bswap", { RMeBX } },
2168 { "bswap", { RMeSP } },
2169 { "bswap", { RMeBP } },
2170 { "bswap", { RMeSI } },
2171 { "bswap", { RMeDI } },
252b5132 2172 /* d0 */
1ceb70f8 2173 { PREFIX_TABLE (PREFIX_0FD0) },
ce518a5f
L
2174 { "psrlw", { MX, EM } },
2175 { "psrld", { MX, EM } },
2176 { "psrlq", { MX, EM } },
2177 { "paddq", { MX, EM } },
2178 { "pmullw", { MX, EM } },
1ceb70f8 2179 { PREFIX_TABLE (PREFIX_0FD6) },
75c135a8 2180 { MOD_TABLE (MOD_0FD7) },
252b5132 2181 /* d8 */
ce518a5f
L
2182 { "psubusb", { MX, EM } },
2183 { "psubusw", { MX, EM } },
2184 { "pminub", { MX, EM } },
2185 { "pand", { MX, EM } },
2186 { "paddusb", { MX, EM } },
2187 { "paddusw", { MX, EM } },
2188 { "pmaxub", { MX, EM } },
2189 { "pandn", { MX, EM } },
252b5132 2190 /* e0 */
ce518a5f
L
2191 { "pavgb", { MX, EM } },
2192 { "psraw", { MX, EM } },
2193 { "psrad", { MX, EM } },
2194 { "pavgw", { MX, EM } },
2195 { "pmulhuw", { MX, EM } },
2196 { "pmulhw", { MX, EM } },
1ceb70f8
L
2197 { PREFIX_TABLE (PREFIX_0FE6) },
2198 { PREFIX_TABLE (PREFIX_0FE7) },
252b5132 2199 /* e8 */
ce518a5f
L
2200 { "psubsb", { MX, EM } },
2201 { "psubsw", { MX, EM } },
2202 { "pminsw", { MX, EM } },
2203 { "por", { MX, EM } },
2204 { "paddsb", { MX, EM } },
2205 { "paddsw", { MX, EM } },
2206 { "pmaxsw", { MX, EM } },
2207 { "pxor", { MX, EM } },
252b5132 2208 /* f0 */
1ceb70f8 2209 { PREFIX_TABLE (PREFIX_0FF0) },
ce518a5f
L
2210 { "psllw", { MX, EM } },
2211 { "pslld", { MX, EM } },
2212 { "psllq", { MX, EM } },
2213 { "pmuludq", { MX, EM } },
2214 { "pmaddwd", { MX, EM } },
2215 { "psadbw", { MX, EM } },
1ceb70f8 2216 { PREFIX_TABLE (PREFIX_0FF7) },
252b5132 2217 /* f8 */
ce518a5f
L
2218 { "psubb", { MX, EM } },
2219 { "psubw", { MX, EM } },
2220 { "psubd", { MX, EM } },
2221 { "psubq", { MX, EM } },
2222 { "paddb", { MX, EM } },
2223 { "paddw", { MX, EM } },
2224 { "paddd", { MX, EM } },
592d1631 2225 { Bad_Opcode },
252b5132
RH
2226};
2227
2228static const unsigned char onebyte_has_modrm[256] = {
c608c12e
AM
2229 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2230 /* ------------------------------- */
2231 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
2232 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
2233 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
2234 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
2235 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
2236 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
2237 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
2238 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
2239 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
2240 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
2241 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
2242 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
2243 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
2244 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
2245 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
2246 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
2247 /* ------------------------------- */
2248 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
252b5132
RH
2249};
2250
2251static const unsigned char twobyte_has_modrm[256] = {
c608c12e
AM
2252 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2253 /* ------------------------------- */
252b5132 2254 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
b5b1fc4f 2255 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
85f10a01 2256 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
331d2d0d 2257 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
252b5132 2258 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
4bba6815
AM
2259 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
2260 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
85f10a01 2261 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
252b5132
RH
2262 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
2263 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
30d1c836 2264 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
050dfa73 2265 /* b0 */ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* bf */
252b5132 2266 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
ca164297 2267 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
4bba6815 2268 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
ca164297 2269 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* ff */
c608c12e
AM
2270 /* ------------------------------- */
2271 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2272};
2273
252b5132
RH
2274static char obuf[100];
2275static char *obufp;
ea397f5b 2276static char *mnemonicendp;
252b5132
RH
2277static char scratchbuf[100];
2278static unsigned char *start_codep;
2279static unsigned char *insn_codep;
2280static unsigned char *codep;
f16cd0d5
L
2281static int last_lock_prefix;
2282static int last_repz_prefix;
2283static int last_repnz_prefix;
2284static int last_data_prefix;
2285static int last_addr_prefix;
2286static int last_rex_prefix;
2287static int last_seg_prefix;
2288#define MAX_CODE_LENGTH 15
2289/* We can up to 14 prefixes since the maximum instruction length is
2290 15bytes. */
2291static int all_prefixes[MAX_CODE_LENGTH - 1];
252b5132 2292static disassemble_info *the_info;
7967e09e
L
2293static struct
2294 {
2295 int mod;
7967e09e 2296 int reg;
484c222e 2297 int rm;
7967e09e
L
2298 }
2299modrm;
4bba6815 2300static unsigned char need_modrm;
c0f3af97
L
2301static struct
2302 {
2303 int register_specifier;
2304 int length;
2305 int prefix;
2306 int w;
2307 }
2308vex;
2309static unsigned char need_vex;
2310static unsigned char need_vex_reg;
dae39acc 2311static unsigned char vex_w_done;
252b5132 2312
ea397f5b
L
2313struct op
2314 {
2315 const char *name;
2316 unsigned int len;
2317 };
2318
4bba6815
AM
2319/* If we are accessing mod/rm/reg without need_modrm set, then the
2320 values are stale. Hitting this abort likely indicates that you
2321 need to update onebyte_has_modrm or twobyte_has_modrm. */
2322#define MODRM_CHECK if (!need_modrm) abort ()
2323
d708bcba
AM
2324static const char **names64;
2325static const char **names32;
2326static const char **names16;
2327static const char **names8;
2328static const char **names8rex;
2329static const char **names_seg;
db51cc60
L
2330static const char *index64;
2331static const char *index32;
d708bcba
AM
2332static const char **index16;
2333
2334static const char *intel_names64[] = {
2335 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
2336 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
2337};
2338static const char *intel_names32[] = {
2339 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
2340 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
2341};
2342static const char *intel_names16[] = {
2343 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
2344 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
2345};
2346static const char *intel_names8[] = {
2347 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
2348};
2349static const char *intel_names8rex[] = {
2350 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
2351 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
2352};
2353static const char *intel_names_seg[] = {
2354 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
2355};
db51cc60
L
2356static const char *intel_index64 = "riz";
2357static const char *intel_index32 = "eiz";
d708bcba
AM
2358static const char *intel_index16[] = {
2359 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
2360};
2361
2362static const char *att_names64[] = {
2363 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
52b15da3
JH
2364 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
2365};
d708bcba
AM
2366static const char *att_names32[] = {
2367 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
52b15da3 2368 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
252b5132 2369};
d708bcba
AM
2370static const char *att_names16[] = {
2371 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
52b15da3 2372 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
252b5132 2373};
d708bcba
AM
2374static const char *att_names8[] = {
2375 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
252b5132 2376};
d708bcba
AM
2377static const char *att_names8rex[] = {
2378 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
52b15da3
JH
2379 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
2380};
d708bcba
AM
2381static const char *att_names_seg[] = {
2382 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
252b5132 2383};
db51cc60
L
2384static const char *att_index64 = "%riz";
2385static const char *att_index32 = "%eiz";
d708bcba
AM
2386static const char *att_index16[] = {
2387 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
252b5132
RH
2388};
2389
b9733481
L
2390static const char **names_mm;
2391static const char *intel_names_mm[] = {
2392 "mm0", "mm1", "mm2", "mm3",
2393 "mm4", "mm5", "mm6", "mm7"
2394};
2395static const char *att_names_mm[] = {
2396 "%mm0", "%mm1", "%mm2", "%mm3",
2397 "%mm4", "%mm5", "%mm6", "%mm7"
2398};
2399
2400static const char **names_xmm;
2401static const char *intel_names_xmm[] = {
2402 "xmm0", "xmm1", "xmm2", "xmm3",
2403 "xmm4", "xmm5", "xmm6", "xmm7",
2404 "xmm8", "xmm9", "xmm10", "xmm11",
2405 "xmm12", "xmm13", "xmm14", "xmm15"
2406};
2407static const char *att_names_xmm[] = {
2408 "%xmm0", "%xmm1", "%xmm2", "%xmm3",
2409 "%xmm4", "%xmm5", "%xmm6", "%xmm7",
2410 "%xmm8", "%xmm9", "%xmm10", "%xmm11",
2411 "%xmm12", "%xmm13", "%xmm14", "%xmm15"
2412};
2413
2414static const char **names_ymm;
2415static const char *intel_names_ymm[] = {
2416 "ymm0", "ymm1", "ymm2", "ymm3",
2417 "ymm4", "ymm5", "ymm6", "ymm7",
2418 "ymm8", "ymm9", "ymm10", "ymm11",
2419 "ymm12", "ymm13", "ymm14", "ymm15"
2420};
2421static const char *att_names_ymm[] = {
2422 "%ymm0", "%ymm1", "%ymm2", "%ymm3",
2423 "%ymm4", "%ymm5", "%ymm6", "%ymm7",
2424 "%ymm8", "%ymm9", "%ymm10", "%ymm11",
2425 "%ymm12", "%ymm13", "%ymm14", "%ymm15"
2426};
2427
1ceb70f8
L
2428static const struct dis386 reg_table[][8] = {
2429 /* REG_80 */
252b5132 2430 {
ce518a5f
L
2431 { "addA", { Eb, Ib } },
2432 { "orA", { Eb, Ib } },
2433 { "adcA", { Eb, Ib } },
2434 { "sbbA", { Eb, Ib } },
2435 { "andA", { Eb, Ib } },
2436 { "subA", { Eb, Ib } },
2437 { "xorA", { Eb, Ib } },
2438 { "cmpA", { Eb, Ib } },
252b5132 2439 },
1ceb70f8 2440 /* REG_81 */
252b5132 2441 {
ce518a5f
L
2442 { "addQ", { Ev, Iv } },
2443 { "orQ", { Ev, Iv } },
2444 { "adcQ", { Ev, Iv } },
2445 { "sbbQ", { Ev, Iv } },
2446 { "andQ", { Ev, Iv } },
2447 { "subQ", { Ev, Iv } },
2448 { "xorQ", { Ev, Iv } },
2449 { "cmpQ", { Ev, Iv } },
252b5132 2450 },
1ceb70f8 2451 /* REG_82 */
252b5132 2452 {
ce518a5f
L
2453 { "addQ", { Ev, sIb } },
2454 { "orQ", { Ev, sIb } },
2455 { "adcQ", { Ev, sIb } },
2456 { "sbbQ", { Ev, sIb } },
2457 { "andQ", { Ev, sIb } },
2458 { "subQ", { Ev, sIb } },
2459 { "xorQ", { Ev, sIb } },
2460 { "cmpQ", { Ev, sIb } },
252b5132 2461 },
1ceb70f8 2462 /* REG_8F */
4e7d34a6
L
2463 {
2464 { "popU", { stackEv } },
c48244a5 2465 { XOP_8F_TABLE (XOP_09) },
592d1631
L
2466 { Bad_Opcode },
2467 { Bad_Opcode },
2468 { Bad_Opcode },
f88c9eb0 2469 { XOP_8F_TABLE (XOP_09) },
4e7d34a6 2470 },
1ceb70f8 2471 /* REG_C0 */
252b5132 2472 {
ce518a5f
L
2473 { "rolA", { Eb, Ib } },
2474 { "rorA", { Eb, Ib } },
2475 { "rclA", { Eb, Ib } },
2476 { "rcrA", { Eb, Ib } },
2477 { "shlA", { Eb, Ib } },
2478 { "shrA", { Eb, Ib } },
592d1631 2479 { Bad_Opcode },
ce518a5f 2480 { "sarA", { Eb, Ib } },
252b5132 2481 },
1ceb70f8 2482 /* REG_C1 */
252b5132 2483 {
ce518a5f
L
2484 { "rolQ", { Ev, Ib } },
2485 { "rorQ", { Ev, Ib } },
2486 { "rclQ", { Ev, Ib } },
2487 { "rcrQ", { Ev, Ib } },
2488 { "shlQ", { Ev, Ib } },
2489 { "shrQ", { Ev, Ib } },
592d1631 2490 { Bad_Opcode },
ce518a5f 2491 { "sarQ", { Ev, Ib } },
252b5132 2492 },
1ceb70f8 2493 /* REG_C6 */
4e7d34a6
L
2494 {
2495 { "movA", { Eb, Ib } },
4e7d34a6 2496 },
1ceb70f8 2497 /* REG_C7 */
4e7d34a6
L
2498 {
2499 { "movQ", { Ev, Iv } },
4e7d34a6 2500 },
1ceb70f8 2501 /* REG_D0 */
252b5132 2502 {
ce518a5f
L
2503 { "rolA", { Eb, I1 } },
2504 { "rorA", { Eb, I1 } },
2505 { "rclA", { Eb, I1 } },
2506 { "rcrA", { Eb, I1 } },
2507 { "shlA", { Eb, I1 } },
2508 { "shrA", { Eb, I1 } },
592d1631 2509 { Bad_Opcode },
ce518a5f 2510 { "sarA", { Eb, I1 } },
252b5132 2511 },
1ceb70f8 2512 /* REG_D1 */
252b5132 2513 {
ce518a5f
L
2514 { "rolQ", { Ev, I1 } },
2515 { "rorQ", { Ev, I1 } },
2516 { "rclQ", { Ev, I1 } },
2517 { "rcrQ", { Ev, I1 } },
2518 { "shlQ", { Ev, I1 } },
2519 { "shrQ", { Ev, I1 } },
592d1631 2520 { Bad_Opcode },
ce518a5f 2521 { "sarQ", { Ev, I1 } },
252b5132 2522 },
1ceb70f8 2523 /* REG_D2 */
252b5132 2524 {
ce518a5f
L
2525 { "rolA", { Eb, CL } },
2526 { "rorA", { Eb, CL } },
2527 { "rclA", { Eb, CL } },
2528 { "rcrA", { Eb, CL } },
2529 { "shlA", { Eb, CL } },
2530 { "shrA", { Eb, CL } },
592d1631 2531 { Bad_Opcode },
ce518a5f 2532 { "sarA", { Eb, CL } },
252b5132 2533 },
1ceb70f8 2534 /* REG_D3 */
252b5132 2535 {
ce518a5f
L
2536 { "rolQ", { Ev, CL } },
2537 { "rorQ", { Ev, CL } },
2538 { "rclQ", { Ev, CL } },
2539 { "rcrQ", { Ev, CL } },
2540 { "shlQ", { Ev, CL } },
2541 { "shrQ", { Ev, CL } },
592d1631 2542 { Bad_Opcode },
ce518a5f 2543 { "sarQ", { Ev, CL } },
252b5132 2544 },
1ceb70f8 2545 /* REG_F6 */
252b5132 2546 {
ce518a5f 2547 { "testA", { Eb, Ib } },
592d1631 2548 { Bad_Opcode },
ce518a5f
L
2549 { "notA", { Eb } },
2550 { "negA", { Eb } },
2551 { "mulA", { Eb } }, /* Don't print the implicit %al register, */
2552 { "imulA", { Eb } }, /* to distinguish these opcodes from other */
2553 { "divA", { Eb } }, /* mul/imul opcodes. Do the same for div */
2554 { "idivA", { Eb } }, /* and idiv for consistency. */
252b5132 2555 },
1ceb70f8 2556 /* REG_F7 */
252b5132 2557 {
ce518a5f 2558 { "testQ", { Ev, Iv } },
592d1631 2559 { Bad_Opcode },
ce518a5f
L
2560 { "notQ", { Ev } },
2561 { "negQ", { Ev } },
2562 { "mulQ", { Ev } }, /* Don't print the implicit register. */
2563 { "imulQ", { Ev } },
2564 { "divQ", { Ev } },
2565 { "idivQ", { Ev } },
252b5132 2566 },
1ceb70f8 2567 /* REG_FE */
252b5132 2568 {
ce518a5f
L
2569 { "incA", { Eb } },
2570 { "decA", { Eb } },
252b5132 2571 },
1ceb70f8 2572 /* REG_FF */
252b5132 2573 {
ce518a5f
L
2574 { "incQ", { Ev } },
2575 { "decQ", { Ev } },
2576 { "callT", { indirEv } },
2577 { "JcallT", { indirEp } },
2578 { "jmpT", { indirEv } },
2579 { "JjmpT", { indirEp } },
2580 { "pushU", { stackEv } },
592d1631 2581 { Bad_Opcode },
252b5132 2582 },
1ceb70f8 2583 /* REG_0F00 */
252b5132 2584 {
ce518a5f
L
2585 { "sldtD", { Sv } },
2586 { "strD", { Sv } },
2587 { "lldt", { Ew } },
2588 { "ltr", { Ew } },
2589 { "verr", { Ew } },
2590 { "verw", { Ew } },
592d1631
L
2591 { Bad_Opcode },
2592 { Bad_Opcode },
252b5132 2593 },
1ceb70f8 2594 /* REG_0F01 */
252b5132 2595 {
1ceb70f8
L
2596 { MOD_TABLE (MOD_0F01_REG_0) },
2597 { MOD_TABLE (MOD_0F01_REG_1) },
2598 { MOD_TABLE (MOD_0F01_REG_2) },
2599 { MOD_TABLE (MOD_0F01_REG_3) },
ce518a5f 2600 { "smswD", { Sv } },
592d1631 2601 { Bad_Opcode },
ce518a5f 2602 { "lmsw", { Ew } },
1ceb70f8 2603 { MOD_TABLE (MOD_0F01_REG_7) },
252b5132 2604 },
b5b1fc4f 2605 /* REG_0F0D */
252b5132 2606 {
4e7d34a6
L
2607 { "prefetch", { Eb } },
2608 { "prefetchw", { Eb } },
252b5132 2609 },
1ceb70f8 2610 /* REG_0F18 */
252b5132 2611 {
1ceb70f8
L
2612 { MOD_TABLE (MOD_0F18_REG_0) },
2613 { MOD_TABLE (MOD_0F18_REG_1) },
2614 { MOD_TABLE (MOD_0F18_REG_2) },
2615 { MOD_TABLE (MOD_0F18_REG_3) },
252b5132 2616 },
1ceb70f8 2617 /* REG_0F71 */
a6bd098c 2618 {
592d1631
L
2619 { Bad_Opcode },
2620 { Bad_Opcode },
1ceb70f8 2621 { MOD_TABLE (MOD_0F71_REG_2) },
592d1631 2622 { Bad_Opcode },
1ceb70f8 2623 { MOD_TABLE (MOD_0F71_REG_4) },
592d1631 2624 { Bad_Opcode },
1ceb70f8 2625 { MOD_TABLE (MOD_0F71_REG_6) },
a6bd098c 2626 },
1ceb70f8 2627 /* REG_0F72 */
a6bd098c 2628 {
592d1631
L
2629 { Bad_Opcode },
2630 { Bad_Opcode },
1ceb70f8 2631 { MOD_TABLE (MOD_0F72_REG_2) },
592d1631 2632 { Bad_Opcode },
1ceb70f8 2633 { MOD_TABLE (MOD_0F72_REG_4) },
592d1631 2634 { Bad_Opcode },
1ceb70f8 2635 { MOD_TABLE (MOD_0F72_REG_6) },
a6bd098c 2636 },
1ceb70f8 2637 /* REG_0F73 */
252b5132 2638 {
592d1631
L
2639 { Bad_Opcode },
2640 { Bad_Opcode },
1ceb70f8
L
2641 { MOD_TABLE (MOD_0F73_REG_2) },
2642 { MOD_TABLE (MOD_0F73_REG_3) },
592d1631
L
2643 { Bad_Opcode },
2644 { Bad_Opcode },
1ceb70f8
L
2645 { MOD_TABLE (MOD_0F73_REG_6) },
2646 { MOD_TABLE (MOD_0F73_REG_7) },
252b5132 2647 },
1ceb70f8 2648 /* REG_0FA6 */
252b5132 2649 {
4e7d34a6
L
2650 { "montmul", { { OP_0f07, 0 } } },
2651 { "xsha1", { { OP_0f07, 0 } } },
2652 { "xsha256", { { OP_0f07, 0 } } },
4e7d34a6 2653 },
1ceb70f8 2654 /* REG_0FA7 */
4e7d34a6
L
2655 {
2656 { "xstore-rng", { { OP_0f07, 0 } } },
2657 { "xcrypt-ecb", { { OP_0f07, 0 } } },
2658 { "xcrypt-cbc", { { OP_0f07, 0 } } },
2659 { "xcrypt-ctr", { { OP_0f07, 0 } } },
2660 { "xcrypt-cfb", { { OP_0f07, 0 } } },
2661 { "xcrypt-ofb", { { OP_0f07, 0 } } },
4e7d34a6 2662 },
1ceb70f8 2663 /* REG_0FAE */
4e7d34a6 2664 {
1ceb70f8
L
2665 { MOD_TABLE (MOD_0FAE_REG_0) },
2666 { MOD_TABLE (MOD_0FAE_REG_1) },
2667 { MOD_TABLE (MOD_0FAE_REG_2) },
2668 { MOD_TABLE (MOD_0FAE_REG_3) },
475a2301 2669 { MOD_TABLE (MOD_0FAE_REG_4) },
1ceb70f8
L
2670 { MOD_TABLE (MOD_0FAE_REG_5) },
2671 { MOD_TABLE (MOD_0FAE_REG_6) },
2672 { MOD_TABLE (MOD_0FAE_REG_7) },
252b5132 2673 },
1ceb70f8 2674 /* REG_0FBA */
252b5132 2675 {
592d1631
L
2676 { Bad_Opcode },
2677 { Bad_Opcode },
2678 { Bad_Opcode },
2679 { Bad_Opcode },
4e7d34a6
L
2680 { "btQ", { Ev, Ib } },
2681 { "btsQ", { Ev, Ib } },
2682 { "btrQ", { Ev, Ib } },
2683 { "btcQ", { Ev, Ib } },
c608c12e 2684 },
1ceb70f8 2685 /* REG_0FC7 */
c608c12e 2686 {
592d1631 2687 { Bad_Opcode },
4e7d34a6 2688 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } } },
592d1631
L
2689 { Bad_Opcode },
2690 { Bad_Opcode },
2691 { Bad_Opcode },
2692 { Bad_Opcode },
1ceb70f8
L
2693 { MOD_TABLE (MOD_0FC7_REG_6) },
2694 { MOD_TABLE (MOD_0FC7_REG_7) },
252b5132 2695 },
c0f3af97
L
2696 /* REG_VEX_71 */
2697 {
592d1631
L
2698 { Bad_Opcode },
2699 { Bad_Opcode },
c0f3af97 2700 { MOD_TABLE (MOD_VEX_71_REG_2) },
592d1631 2701 { Bad_Opcode },
c0f3af97 2702 { MOD_TABLE (MOD_VEX_71_REG_4) },
592d1631 2703 { Bad_Opcode },
c0f3af97 2704 { MOD_TABLE (MOD_VEX_71_REG_6) },
c0f3af97
L
2705 },
2706 /* REG_VEX_72 */
2707 {
592d1631
L
2708 { Bad_Opcode },
2709 { Bad_Opcode },
c0f3af97 2710 { MOD_TABLE (MOD_VEX_72_REG_2) },
592d1631 2711 { Bad_Opcode },
c0f3af97 2712 { MOD_TABLE (MOD_VEX_72_REG_4) },
592d1631 2713 { Bad_Opcode },
c0f3af97 2714 { MOD_TABLE (MOD_VEX_72_REG_6) },
c0f3af97
L
2715 },
2716 /* REG_VEX_73 */
2717 {
592d1631
L
2718 { Bad_Opcode },
2719 { Bad_Opcode },
c0f3af97
L
2720 { MOD_TABLE (MOD_VEX_73_REG_2) },
2721 { MOD_TABLE (MOD_VEX_73_REG_3) },
592d1631
L
2722 { Bad_Opcode },
2723 { Bad_Opcode },
c0f3af97
L
2724 { MOD_TABLE (MOD_VEX_73_REG_6) },
2725 { MOD_TABLE (MOD_VEX_73_REG_7) },
2726 },
2727 /* REG_VEX_AE */
2728 {
592d1631
L
2729 { Bad_Opcode },
2730 { Bad_Opcode },
c0f3af97
L
2731 { MOD_TABLE (MOD_VEX_AE_REG_2) },
2732 { MOD_TABLE (MOD_VEX_AE_REG_3) },
c0f3af97 2733 },
f88c9eb0
SP
2734 /* REG_XOP_LWPCB */
2735 {
2736 { "llwpcb", { { OP_LWPCB_E, 0 } } },
2737 { "slwpcb", { { OP_LWPCB_E, 0 } } },
f88c9eb0
SP
2738 },
2739 /* REG_XOP_LWP */
2740 {
2741 { "lwpins", { { OP_LWP_E, 0 }, Ed, { OP_LWP_I, 0 } } },
2742 { "lwpval", { { OP_LWP_E, 0 }, Ed, { OP_LWP_I, 0 } } },
f88c9eb0 2743 },
4e7d34a6
L
2744};
2745
1ceb70f8
L
2746static const struct dis386 prefix_table[][4] = {
2747 /* PREFIX_90 */
252b5132 2748 {
4e7d34a6
L
2749 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
2750 { "pause", { XX } },
2751 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
0f10071e 2752 },
4e7d34a6 2753
1ceb70f8 2754 /* PREFIX_0F10 */
cc0ec051 2755 {
4e7d34a6
L
2756 { "movups", { XM, EXx } },
2757 { "movss", { XM, EXd } },
2758 { "movupd", { XM, EXx } },
2759 { "movsd", { XM, EXq } },
30d1c836 2760 },
4e7d34a6 2761
1ceb70f8 2762 /* PREFIX_0F11 */
30d1c836 2763 {
b6169b20 2764 { "movups", { EXxS, XM } },
fa99fab2 2765 { "movss", { EXdS, XM } },
b6169b20 2766 { "movupd", { EXxS, XM } },
fa99fab2 2767 { "movsd", { EXqS, XM } },
4e7d34a6 2768 },
252b5132 2769
1ceb70f8 2770 /* PREFIX_0F12 */
c608c12e 2771 {
1ceb70f8 2772 { MOD_TABLE (MOD_0F12_PREFIX_0) },
4e7d34a6
L
2773 { "movsldup", { XM, EXx } },
2774 { "movlpd", { XM, EXq } },
2775 { "movddup", { XM, EXq } },
c608c12e 2776 },
4e7d34a6 2777
1ceb70f8 2778 /* PREFIX_0F16 */
c608c12e 2779 {
1ceb70f8 2780 { MOD_TABLE (MOD_0F16_PREFIX_0) },
4e7d34a6
L
2781 { "movshdup", { XM, EXx } },
2782 { "movhpd", { XM, EXq } },
c608c12e 2783 },
4e7d34a6 2784
1ceb70f8 2785 /* PREFIX_0F2A */
c608c12e 2786 {
09335d05 2787 { "cvtpi2ps", { XM, EMCq } },
98b528ac 2788 { "cvtsi2ss%LQ", { XM, Ev } },
09335d05 2789 { "cvtpi2pd", { XM, EMCq } },
98b528ac 2790 { "cvtsi2sd%LQ", { XM, Ev } },
c608c12e 2791 },
4e7d34a6 2792
1ceb70f8 2793 /* PREFIX_0F2B */
c608c12e 2794 {
75c135a8
L
2795 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
2796 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
2797 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
2798 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
c608c12e 2799 },
4e7d34a6 2800
1ceb70f8 2801 /* PREFIX_0F2C */
c608c12e 2802 {
09335d05
L
2803 { "cvttps2pi", { MXC, EXq } },
2804 { "cvttss2siY", { Gv, EXd } },
09a2c6cf 2805 { "cvttpd2pi", { MXC, EXx } },
09335d05 2806 { "cvttsd2siY", { Gv, EXq } },
c608c12e 2807 },
4e7d34a6 2808
1ceb70f8 2809 /* PREFIX_0F2D */
c608c12e 2810 {
4e7d34a6
L
2811 { "cvtps2pi", { MXC, EXq } },
2812 { "cvtss2siY", { Gv, EXd } },
2813 { "cvtpd2pi", { MXC, EXx } },
2814 { "cvtsd2siY", { Gv, EXq } },
c608c12e 2815 },
4e7d34a6 2816
1ceb70f8 2817 /* PREFIX_0F2E */
c608c12e 2818 {
4e7d34a6 2819 { "ucomiss",{ XM, EXd } },
592d1631 2820 { Bad_Opcode },
4e7d34a6 2821 { "ucomisd",{ XM, EXq } },
c608c12e 2822 },
4e7d34a6 2823
1ceb70f8 2824 /* PREFIX_0F2F */
c608c12e 2825 {
4e7d34a6 2826 { "comiss", { XM, EXd } },
592d1631 2827 { Bad_Opcode },
4e7d34a6 2828 { "comisd", { XM, EXq } },
c608c12e 2829 },
4e7d34a6 2830
1ceb70f8 2831 /* PREFIX_0F51 */
c608c12e 2832 {
4e7d34a6
L
2833 { "sqrtps", { XM, EXx } },
2834 { "sqrtss", { XM, EXd } },
2835 { "sqrtpd", { XM, EXx } },
2836 { "sqrtsd", { XM, EXq } },
c608c12e 2837 },
4e7d34a6 2838
1ceb70f8 2839 /* PREFIX_0F52 */
c608c12e 2840 {
4e7d34a6
L
2841 { "rsqrtps",{ XM, EXx } },
2842 { "rsqrtss",{ XM, EXd } },
c608c12e 2843 },
4e7d34a6 2844
1ceb70f8 2845 /* PREFIX_0F53 */
c608c12e 2846 {
4e7d34a6
L
2847 { "rcpps", { XM, EXx } },
2848 { "rcpss", { XM, EXd } },
c608c12e 2849 },
4e7d34a6 2850
1ceb70f8 2851 /* PREFIX_0F58 */
c608c12e 2852 {
4e7d34a6
L
2853 { "addps", { XM, EXx } },
2854 { "addss", { XM, EXd } },
2855 { "addpd", { XM, EXx } },
2856 { "addsd", { XM, EXq } },
c608c12e 2857 },
4e7d34a6 2858
1ceb70f8 2859 /* PREFIX_0F59 */
c608c12e 2860 {
4e7d34a6
L
2861 { "mulps", { XM, EXx } },
2862 { "mulss", { XM, EXd } },
2863 { "mulpd", { XM, EXx } },
2864 { "mulsd", { XM, EXq } },
041bd2e0 2865 },
4e7d34a6 2866
1ceb70f8 2867 /* PREFIX_0F5A */
041bd2e0 2868 {
4e7d34a6
L
2869 { "cvtps2pd", { XM, EXq } },
2870 { "cvtss2sd", { XM, EXd } },
2871 { "cvtpd2ps", { XM, EXx } },
2872 { "cvtsd2ss", { XM, EXq } },
041bd2e0 2873 },
4e7d34a6 2874
1ceb70f8 2875 /* PREFIX_0F5B */
041bd2e0 2876 {
09a2c6cf
L
2877 { "cvtdq2ps", { XM, EXx } },
2878 { "cvttps2dq", { XM, EXx } },
2879 { "cvtps2dq", { XM, EXx } },
041bd2e0 2880 },
4e7d34a6 2881
1ceb70f8 2882 /* PREFIX_0F5C */
041bd2e0 2883 {
4e7d34a6
L
2884 { "subps", { XM, EXx } },
2885 { "subss", { XM, EXd } },
2886 { "subpd", { XM, EXx } },
2887 { "subsd", { XM, EXq } },
041bd2e0 2888 },
4e7d34a6 2889
1ceb70f8 2890 /* PREFIX_0F5D */
041bd2e0 2891 {
4e7d34a6
L
2892 { "minps", { XM, EXx } },
2893 { "minss", { XM, EXd } },
2894 { "minpd", { XM, EXx } },
2895 { "minsd", { XM, EXq } },
041bd2e0 2896 },
4e7d34a6 2897
1ceb70f8 2898 /* PREFIX_0F5E */
041bd2e0 2899 {
4e7d34a6
L
2900 { "divps", { XM, EXx } },
2901 { "divss", { XM, EXd } },
2902 { "divpd", { XM, EXx } },
2903 { "divsd", { XM, EXq } },
041bd2e0 2904 },
4e7d34a6 2905
1ceb70f8 2906 /* PREFIX_0F5F */
041bd2e0 2907 {
4e7d34a6
L
2908 { "maxps", { XM, EXx } },
2909 { "maxss", { XM, EXd } },
2910 { "maxpd", { XM, EXx } },
2911 { "maxsd", { XM, EXq } },
041bd2e0 2912 },
4e7d34a6 2913
1ceb70f8 2914 /* PREFIX_0F60 */
041bd2e0 2915 {
4e7d34a6 2916 { "punpcklbw",{ MX, EMd } },
592d1631 2917 { Bad_Opcode },
4e7d34a6 2918 { "punpcklbw",{ MX, EMx } },
041bd2e0 2919 },
4e7d34a6 2920
1ceb70f8 2921 /* PREFIX_0F61 */
041bd2e0 2922 {
4e7d34a6 2923 { "punpcklwd",{ MX, EMd } },
592d1631 2924 { Bad_Opcode },
4e7d34a6 2925 { "punpcklwd",{ MX, EMx } },
041bd2e0 2926 },
4e7d34a6 2927
1ceb70f8 2928 /* PREFIX_0F62 */
041bd2e0 2929 {
4e7d34a6 2930 { "punpckldq",{ MX, EMd } },
592d1631 2931 { Bad_Opcode },
4e7d34a6 2932 { "punpckldq",{ MX, EMx } },
041bd2e0 2933 },
4e7d34a6 2934
1ceb70f8 2935 /* PREFIX_0F6C */
041bd2e0 2936 {
592d1631
L
2937 { Bad_Opcode },
2938 { Bad_Opcode },
4e7d34a6 2939 { "punpcklqdq", { XM, EXx } },
0f17484f 2940 },
4e7d34a6 2941
1ceb70f8 2942 /* PREFIX_0F6D */
0f17484f 2943 {
592d1631
L
2944 { Bad_Opcode },
2945 { Bad_Opcode },
4e7d34a6 2946 { "punpckhqdq", { XM, EXx } },
041bd2e0 2947 },
4e7d34a6 2948
1ceb70f8 2949 /* PREFIX_0F6F */
ca164297 2950 {
4e7d34a6
L
2951 { "movq", { MX, EM } },
2952 { "movdqu", { XM, EXx } },
2953 { "movdqa", { XM, EXx } },
ca164297 2954 },
4e7d34a6 2955
1ceb70f8 2956 /* PREFIX_0F70 */
4e7d34a6
L
2957 {
2958 { "pshufw", { MX, EM, Ib } },
2959 { "pshufhw",{ XM, EXx, Ib } },
2960 { "pshufd", { XM, EXx, Ib } },
2961 { "pshuflw",{ XM, EXx, Ib } },
2962 },
2963
92fddf8e
L
2964 /* PREFIX_0F73_REG_3 */
2965 {
592d1631
L
2966 { Bad_Opcode },
2967 { Bad_Opcode },
92fddf8e 2968 { "psrldq", { XS, Ib } },
92fddf8e
L
2969 },
2970
2971 /* PREFIX_0F73_REG_7 */
2972 {
592d1631
L
2973 { Bad_Opcode },
2974 { Bad_Opcode },
92fddf8e 2975 { "pslldq", { XS, Ib } },
92fddf8e
L
2976 },
2977
1ceb70f8 2978 /* PREFIX_0F78 */
4e7d34a6
L
2979 {
2980 {"vmread", { Em, Gm } },
592d1631 2981 { Bad_Opcode },
4e7d34a6
L
2982 {"extrq", { XS, Ib, Ib } },
2983 {"insertq", { XM, XS, Ib, Ib } },
2984 },
2985
1ceb70f8 2986 /* PREFIX_0F79 */
4e7d34a6
L
2987 {
2988 {"vmwrite", { Gm, Em } },
592d1631 2989 { Bad_Opcode },
4e7d34a6
L
2990 {"extrq", { XM, XS } },
2991 {"insertq", { XM, XS } },
2992 },
2993
1ceb70f8 2994 /* PREFIX_0F7C */
ca164297 2995 {
592d1631
L
2996 { Bad_Opcode },
2997 { Bad_Opcode },
09a2c6cf
L
2998 { "haddpd", { XM, EXx } },
2999 { "haddps", { XM, EXx } },
ca164297 3000 },
4e7d34a6 3001
1ceb70f8 3002 /* PREFIX_0F7D */
ca164297 3003 {
592d1631
L
3004 { Bad_Opcode },
3005 { Bad_Opcode },
09a2c6cf
L
3006 { "hsubpd", { XM, EXx } },
3007 { "hsubps", { XM, EXx } },
ca164297 3008 },
4e7d34a6 3009
1ceb70f8 3010 /* PREFIX_0F7E */
ca164297 3011 {
4e7d34a6
L
3012 { "movK", { Edq, MX } },
3013 { "movq", { XM, EXq } },
3014 { "movK", { Edq, XM } },
ca164297 3015 },
4e7d34a6 3016
1ceb70f8 3017 /* PREFIX_0F7F */
ca164297 3018 {
b6169b20
L
3019 { "movq", { EMS, MX } },
3020 { "movdqu", { EXxS, XM } },
3021 { "movdqa", { EXxS, XM } },
ca164297 3022 },
4e7d34a6 3023
1ceb70f8 3024 /* PREFIX_0FB8 */
ca164297 3025 {
592d1631 3026 { Bad_Opcode },
4e7d34a6 3027 { "popcntS", { Gv, Ev } },
ca164297 3028 },
4e7d34a6 3029
1ceb70f8 3030 /* PREFIX_0FBD */
050dfa73 3031 {
4e7d34a6
L
3032 { "bsrS", { Gv, Ev } },
3033 { "lzcntS", { Gv, Ev } },
3034 { "bsrS", { Gv, Ev } },
050dfa73
MM
3035 },
3036
1ceb70f8 3037 /* PREFIX_0FC2 */
050dfa73 3038 {
ad19981d
L
3039 { "cmpps", { XM, EXx, CMP } },
3040 { "cmpss", { XM, EXd, CMP } },
3041 { "cmppd", { XM, EXx, CMP } },
3042 { "cmpsd", { XM, EXq, CMP } },
050dfa73 3043 },
246c51aa 3044
4ee52178
L
3045 /* PREFIX_0FC3 */
3046 {
3047 { "movntiS", { Ma, Gv } },
4ee52178
L
3048 },
3049
92fddf8e
L
3050 /* PREFIX_0FC7_REG_6 */
3051 {
3052 { "vmptrld",{ Mq } },
3053 { "vmxon", { Mq } },
3054 { "vmclear",{ Mq } },
92fddf8e
L
3055 },
3056
1ceb70f8 3057 /* PREFIX_0FD0 */
050dfa73 3058 {
592d1631
L
3059 { Bad_Opcode },
3060 { Bad_Opcode },
4e7d34a6
L
3061 { "addsubpd", { XM, EXx } },
3062 { "addsubps", { XM, EXx } },
246c51aa 3063 },
050dfa73 3064
1ceb70f8 3065 /* PREFIX_0FD6 */
050dfa73 3066 {
592d1631 3067 { Bad_Opcode },
4e7d34a6 3068 { "movq2dq",{ XM, MS } },
b6169b20 3069 { "movq", { EXqS, XM } },
4e7d34a6 3070 { "movdq2q",{ MX, XS } },
050dfa73
MM
3071 },
3072
1ceb70f8 3073 /* PREFIX_0FE6 */
7918206c 3074 {
592d1631 3075 { Bad_Opcode },
4e7d34a6
L
3076 { "cvtdq2pd", { XM, EXq } },
3077 { "cvttpd2dq", { XM, EXx } },
3078 { "cvtpd2dq", { XM, EXx } },
7918206c 3079 },
8b38ad71 3080
1ceb70f8 3081 /* PREFIX_0FE7 */
8b38ad71 3082 {
4ee52178 3083 { "movntq", { Mq, MX } },
592d1631 3084 { Bad_Opcode },
75c135a8 3085 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
4e7d34a6
L
3086 },
3087
1ceb70f8 3088 /* PREFIX_0FF0 */
4e7d34a6 3089 {
592d1631
L
3090 { Bad_Opcode },
3091 { Bad_Opcode },
3092 { Bad_Opcode },
1ceb70f8 3093 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4e7d34a6
L
3094 },
3095
1ceb70f8 3096 /* PREFIX_0FF7 */
4e7d34a6
L
3097 {
3098 { "maskmovq", { MX, MS } },
592d1631 3099 { Bad_Opcode },
4e7d34a6 3100 { "maskmovdqu", { XM, XS } },
8b38ad71 3101 },
42903f7f 3102
1ceb70f8 3103 /* PREFIX_0F3810 */
42903f7f 3104 {
592d1631
L
3105 { Bad_Opcode },
3106 { Bad_Opcode },
88a94849 3107 { "pblendvb", { XM, EXx, XMM0 } },
42903f7f
L
3108 },
3109
1ceb70f8 3110 /* PREFIX_0F3814 */
42903f7f 3111 {
592d1631
L
3112 { Bad_Opcode },
3113 { Bad_Opcode },
88a94849 3114 { "blendvps", { XM, EXx, XMM0 } },
42903f7f
L
3115 },
3116
1ceb70f8 3117 /* PREFIX_0F3815 */
42903f7f 3118 {
592d1631
L
3119 { Bad_Opcode },
3120 { Bad_Opcode },
09a2c6cf 3121 { "blendvpd", { XM, EXx, XMM0 } },
42903f7f
L
3122 },
3123
1ceb70f8 3124 /* PREFIX_0F3817 */
42903f7f 3125 {
592d1631
L
3126 { Bad_Opcode },
3127 { Bad_Opcode },
09a2c6cf 3128 { "ptest", { XM, EXx } },
42903f7f
L
3129 },
3130
1ceb70f8 3131 /* PREFIX_0F3820 */
42903f7f 3132 {
592d1631
L
3133 { Bad_Opcode },
3134 { Bad_Opcode },
8976381e 3135 { "pmovsxbw", { XM, EXq } },
42903f7f
L
3136 },
3137
1ceb70f8 3138 /* PREFIX_0F3821 */
42903f7f 3139 {
592d1631
L
3140 { Bad_Opcode },
3141 { Bad_Opcode },
8976381e 3142 { "pmovsxbd", { XM, EXd } },
42903f7f
L
3143 },
3144
1ceb70f8 3145 /* PREFIX_0F3822 */
42903f7f 3146 {
592d1631
L
3147 { Bad_Opcode },
3148 { Bad_Opcode },
8976381e 3149 { "pmovsxbq", { XM, EXw } },
42903f7f
L
3150 },
3151
1ceb70f8 3152 /* PREFIX_0F3823 */
42903f7f 3153 {
592d1631
L
3154 { Bad_Opcode },
3155 { Bad_Opcode },
8976381e 3156 { "pmovsxwd", { XM, EXq } },
42903f7f
L
3157 },
3158
1ceb70f8 3159 /* PREFIX_0F3824 */
42903f7f 3160 {
592d1631
L
3161 { Bad_Opcode },
3162 { Bad_Opcode },
8976381e 3163 { "pmovsxwq", { XM, EXd } },
42903f7f
L
3164 },
3165
1ceb70f8 3166 /* PREFIX_0F3825 */
42903f7f 3167 {
592d1631
L
3168 { Bad_Opcode },
3169 { Bad_Opcode },
8976381e 3170 { "pmovsxdq", { XM, EXq } },
42903f7f
L
3171 },
3172
1ceb70f8 3173 /* PREFIX_0F3828 */
42903f7f 3174 {
592d1631
L
3175 { Bad_Opcode },
3176 { Bad_Opcode },
09a2c6cf 3177 { "pmuldq", { XM, EXx } },
42903f7f
L
3178 },
3179
1ceb70f8 3180 /* PREFIX_0F3829 */
42903f7f 3181 {
592d1631
L
3182 { Bad_Opcode },
3183 { Bad_Opcode },
09a2c6cf 3184 { "pcmpeqq", { XM, EXx } },
42903f7f
L
3185 },
3186
1ceb70f8 3187 /* PREFIX_0F382A */
42903f7f 3188 {
592d1631
L
3189 { Bad_Opcode },
3190 { Bad_Opcode },
75c135a8 3191 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
42903f7f
L
3192 },
3193
1ceb70f8 3194 /* PREFIX_0F382B */
42903f7f 3195 {
592d1631
L
3196 { Bad_Opcode },
3197 { Bad_Opcode },
09a2c6cf 3198 { "packusdw", { XM, EXx } },
42903f7f
L
3199 },
3200
1ceb70f8 3201 /* PREFIX_0F3830 */
42903f7f 3202 {
592d1631
L
3203 { Bad_Opcode },
3204 { Bad_Opcode },
8976381e 3205 { "pmovzxbw", { XM, EXq } },
42903f7f
L
3206 },
3207
1ceb70f8 3208 /* PREFIX_0F3831 */
42903f7f 3209 {
592d1631
L
3210 { Bad_Opcode },
3211 { Bad_Opcode },
8976381e 3212 { "pmovzxbd", { XM, EXd } },
42903f7f
L
3213 },
3214
1ceb70f8 3215 /* PREFIX_0F3832 */
42903f7f 3216 {
592d1631
L
3217 { Bad_Opcode },
3218 { Bad_Opcode },
8976381e 3219 { "pmovzxbq", { XM, EXw } },
42903f7f
L
3220 },
3221
1ceb70f8 3222 /* PREFIX_0F3833 */
42903f7f 3223 {
592d1631
L
3224 { Bad_Opcode },
3225 { Bad_Opcode },
8976381e 3226 { "pmovzxwd", { XM, EXq } },
42903f7f
L
3227 },
3228
1ceb70f8 3229 /* PREFIX_0F3834 */
42903f7f 3230 {
592d1631
L
3231 { Bad_Opcode },
3232 { Bad_Opcode },
8976381e 3233 { "pmovzxwq", { XM, EXd } },
42903f7f
L
3234 },
3235
1ceb70f8 3236 /* PREFIX_0F3835 */
42903f7f 3237 {
592d1631
L
3238 { Bad_Opcode },
3239 { Bad_Opcode },
8976381e 3240 { "pmovzxdq", { XM, EXq } },
42903f7f
L
3241 },
3242
1ceb70f8 3243 /* PREFIX_0F3837 */
4e7d34a6 3244 {
592d1631
L
3245 { Bad_Opcode },
3246 { Bad_Opcode },
4e7d34a6 3247 { "pcmpgtq", { XM, EXx } },
4e7d34a6
L
3248 },
3249
1ceb70f8 3250 /* PREFIX_0F3838 */
42903f7f 3251 {
592d1631
L
3252 { Bad_Opcode },
3253 { Bad_Opcode },
09a2c6cf 3254 { "pminsb", { XM, EXx } },
42903f7f
L
3255 },
3256
1ceb70f8 3257 /* PREFIX_0F3839 */
42903f7f 3258 {
592d1631
L
3259 { Bad_Opcode },
3260 { Bad_Opcode },
09a2c6cf 3261 { "pminsd", { XM, EXx } },
42903f7f
L
3262 },
3263
1ceb70f8 3264 /* PREFIX_0F383A */
42903f7f 3265 {
592d1631
L
3266 { Bad_Opcode },
3267 { Bad_Opcode },
09a2c6cf 3268 { "pminuw", { XM, EXx } },
42903f7f
L
3269 },
3270
1ceb70f8 3271 /* PREFIX_0F383B */
42903f7f 3272 {
592d1631
L
3273 { Bad_Opcode },
3274 { Bad_Opcode },
09a2c6cf 3275 { "pminud", { XM, EXx } },
42903f7f
L
3276 },
3277
1ceb70f8 3278 /* PREFIX_0F383C */
42903f7f 3279 {
592d1631
L
3280 { Bad_Opcode },
3281 { Bad_Opcode },
09a2c6cf 3282 { "pmaxsb", { XM, EXx } },
42903f7f
L
3283 },
3284
1ceb70f8 3285 /* PREFIX_0F383D */
42903f7f 3286 {
592d1631
L
3287 { Bad_Opcode },
3288 { Bad_Opcode },
09a2c6cf 3289 { "pmaxsd", { XM, EXx } },
42903f7f
L
3290 },
3291
1ceb70f8 3292 /* PREFIX_0F383E */
42903f7f 3293 {
592d1631
L
3294 { Bad_Opcode },
3295 { Bad_Opcode },
09a2c6cf 3296 { "pmaxuw", { XM, EXx } },
42903f7f
L
3297 },
3298
1ceb70f8 3299 /* PREFIX_0F383F */
42903f7f 3300 {
592d1631
L
3301 { Bad_Opcode },
3302 { Bad_Opcode },
09a2c6cf 3303 { "pmaxud", { XM, EXx } },
42903f7f
L
3304 },
3305
1ceb70f8 3306 /* PREFIX_0F3840 */
42903f7f 3307 {
592d1631
L
3308 { Bad_Opcode },
3309 { Bad_Opcode },
09a2c6cf 3310 { "pmulld", { XM, EXx } },
42903f7f
L
3311 },
3312
1ceb70f8 3313 /* PREFIX_0F3841 */
42903f7f 3314 {
592d1631
L
3315 { Bad_Opcode },
3316 { Bad_Opcode },
09a2c6cf 3317 { "phminposuw", { XM, EXx } },
42903f7f
L
3318 },
3319
f1f8f695
L
3320 /* PREFIX_0F3880 */
3321 {
592d1631
L
3322 { Bad_Opcode },
3323 { Bad_Opcode },
f1f8f695 3324 { "invept", { Gm, Mo } },
f1f8f695
L
3325 },
3326
3327 /* PREFIX_0F3881 */
3328 {
592d1631
L
3329 { Bad_Opcode },
3330 { Bad_Opcode },
f1f8f695 3331 { "invvpid", { Gm, Mo } },
f1f8f695
L
3332 },
3333
c0f3af97
L
3334 /* PREFIX_0F38DB */
3335 {
592d1631
L
3336 { Bad_Opcode },
3337 { Bad_Opcode },
c0f3af97 3338 { "aesimc", { XM, EXx } },
c0f3af97
L
3339 },
3340
3341 /* PREFIX_0F38DC */
3342 {
592d1631
L
3343 { Bad_Opcode },
3344 { Bad_Opcode },
c0f3af97 3345 { "aesenc", { XM, EXx } },
c0f3af97
L
3346 },
3347
3348 /* PREFIX_0F38DD */
3349 {
592d1631
L
3350 { Bad_Opcode },
3351 { Bad_Opcode },
c0f3af97 3352 { "aesenclast", { XM, EXx } },
c0f3af97
L
3353 },
3354
3355 /* PREFIX_0F38DE */
3356 {
592d1631
L
3357 { Bad_Opcode },
3358 { Bad_Opcode },
c0f3af97 3359 { "aesdec", { XM, EXx } },
c0f3af97
L
3360 },
3361
3362 /* PREFIX_0F38DF */
3363 {
592d1631
L
3364 { Bad_Opcode },
3365 { Bad_Opcode },
c0f3af97 3366 { "aesdeclast", { XM, EXx } },
c0f3af97
L
3367 },
3368
1ceb70f8 3369 /* PREFIX_0F38F0 */
4e7d34a6 3370 {
f1f8f695 3371 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
592d1631 3372 { Bad_Opcode },
f1f8f695 3373 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
4e7d34a6
L
3374 { "crc32", { Gdq, { CRC32_Fixup, b_mode } } },
3375 },
3376
1ceb70f8 3377 /* PREFIX_0F38F1 */
4e7d34a6 3378 {
f1f8f695 3379 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
592d1631 3380 { Bad_Opcode },
f1f8f695 3381 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
4e7d34a6
L
3382 { "crc32", { Gdq, { CRC32_Fixup, v_mode } } },
3383 },
3384
1ceb70f8 3385 /* PREFIX_0F3A08 */
42903f7f 3386 {
592d1631
L
3387 { Bad_Opcode },
3388 { Bad_Opcode },
09a2c6cf 3389 { "roundps", { XM, EXx, Ib } },
42903f7f
L
3390 },
3391
1ceb70f8 3392 /* PREFIX_0F3A09 */
42903f7f 3393 {
592d1631
L
3394 { Bad_Opcode },
3395 { Bad_Opcode },
09a2c6cf 3396 { "roundpd", { XM, EXx, Ib } },
42903f7f
L
3397 },
3398
1ceb70f8 3399 /* PREFIX_0F3A0A */
42903f7f 3400 {
592d1631
L
3401 { Bad_Opcode },
3402 { Bad_Opcode },
09335d05 3403 { "roundss", { XM, EXd, Ib } },
42903f7f
L
3404 },
3405
1ceb70f8 3406 /* PREFIX_0F3A0B */
42903f7f 3407 {
592d1631
L
3408 { Bad_Opcode },
3409 { Bad_Opcode },
09335d05 3410 { "roundsd", { XM, EXq, Ib } },
42903f7f
L
3411 },
3412
1ceb70f8 3413 /* PREFIX_0F3A0C */
42903f7f 3414 {
592d1631
L
3415 { Bad_Opcode },
3416 { Bad_Opcode },
09a2c6cf 3417 { "blendps", { XM, EXx, Ib } },
42903f7f
L
3418 },
3419
1ceb70f8 3420 /* PREFIX_0F3A0D */
42903f7f 3421 {
592d1631
L
3422 { Bad_Opcode },
3423 { Bad_Opcode },
09a2c6cf 3424 { "blendpd", { XM, EXx, Ib } },
42903f7f
L
3425 },
3426
1ceb70f8 3427 /* PREFIX_0F3A0E */
42903f7f 3428 {
592d1631
L
3429 { Bad_Opcode },
3430 { Bad_Opcode },
09a2c6cf 3431 { "pblendw", { XM, EXx, Ib } },
42903f7f
L
3432 },
3433
1ceb70f8 3434 /* PREFIX_0F3A14 */
42903f7f 3435 {
592d1631
L
3436 { Bad_Opcode },
3437 { Bad_Opcode },
42903f7f 3438 { "pextrb", { Edqb, XM, Ib } },
42903f7f
L
3439 },
3440
1ceb70f8 3441 /* PREFIX_0F3A15 */
42903f7f 3442 {
592d1631
L
3443 { Bad_Opcode },
3444 { Bad_Opcode },
42903f7f 3445 { "pextrw", { Edqw, XM, Ib } },
42903f7f
L
3446 },
3447
1ceb70f8 3448 /* PREFIX_0F3A16 */
42903f7f 3449 {
592d1631
L
3450 { Bad_Opcode },
3451 { Bad_Opcode },
42903f7f 3452 { "pextrK", { Edq, XM, Ib } },
42903f7f
L
3453 },
3454
1ceb70f8 3455 /* PREFIX_0F3A17 */
42903f7f 3456 {
592d1631
L
3457 { Bad_Opcode },
3458 { Bad_Opcode },
42903f7f 3459 { "extractps", { Edqd, XM, Ib } },
42903f7f
L
3460 },
3461
1ceb70f8 3462 /* PREFIX_0F3A20 */
42903f7f 3463 {
592d1631
L
3464 { Bad_Opcode },
3465 { Bad_Opcode },
42903f7f 3466 { "pinsrb", { XM, Edqb, Ib } },
42903f7f
L
3467 },
3468
1ceb70f8 3469 /* PREFIX_0F3A21 */
42903f7f 3470 {
592d1631
L
3471 { Bad_Opcode },
3472 { Bad_Opcode },
8976381e 3473 { "insertps", { XM, EXd, Ib } },
42903f7f
L
3474 },
3475
1ceb70f8 3476 /* PREFIX_0F3A22 */
42903f7f 3477 {
592d1631
L
3478 { Bad_Opcode },
3479 { Bad_Opcode },
42903f7f 3480 { "pinsrK", { XM, Edq, Ib } },
42903f7f
L
3481 },
3482
1ceb70f8 3483 /* PREFIX_0F3A40 */
42903f7f 3484 {
592d1631
L
3485 { Bad_Opcode },
3486 { Bad_Opcode },
09a2c6cf 3487 { "dpps", { XM, EXx, Ib } },
42903f7f
L
3488 },
3489
1ceb70f8 3490 /* PREFIX_0F3A41 */
42903f7f 3491 {
592d1631
L
3492 { Bad_Opcode },
3493 { Bad_Opcode },
09a2c6cf 3494 { "dppd", { XM, EXx, Ib } },
42903f7f
L
3495 },
3496
1ceb70f8 3497 /* PREFIX_0F3A42 */
42903f7f 3498 {
592d1631
L
3499 { Bad_Opcode },
3500 { Bad_Opcode },
09a2c6cf 3501 { "mpsadbw", { XM, EXx, Ib } },
42903f7f 3502 },
381d071f 3503
c0f3af97
L
3504 /* PREFIX_0F3A44 */
3505 {
592d1631
L
3506 { Bad_Opcode },
3507 { Bad_Opcode },
c0f3af97 3508 { "pclmulqdq", { XM, EXx, PCLMUL } },
c0f3af97
L
3509 },
3510
1ceb70f8 3511 /* PREFIX_0F3A60 */
381d071f 3512 {
592d1631
L
3513 { Bad_Opcode },
3514 { Bad_Opcode },
4e7d34a6 3515 { "pcmpestrm", { XM, EXx, Ib } },
381d071f
L
3516 },
3517
1ceb70f8 3518 /* PREFIX_0F3A61 */
381d071f 3519 {
592d1631
L
3520 { Bad_Opcode },
3521 { Bad_Opcode },
4e7d34a6 3522 { "pcmpestri", { XM, EXx, Ib } },
381d071f
L
3523 },
3524
1ceb70f8 3525 /* PREFIX_0F3A62 */
381d071f 3526 {
592d1631
L
3527 { Bad_Opcode },
3528 { Bad_Opcode },
4e7d34a6 3529 { "pcmpistrm", { XM, EXx, Ib } },
381d071f
L
3530 },
3531
1ceb70f8 3532 /* PREFIX_0F3A63 */
381d071f 3533 {
592d1631
L
3534 { Bad_Opcode },
3535 { Bad_Opcode },
4e7d34a6 3536 { "pcmpistri", { XM, EXx, Ib } },
381d071f 3537 },
09a2c6cf 3538
c0f3af97 3539 /* PREFIX_0F3ADF */
09a2c6cf 3540 {
592d1631
L
3541 { Bad_Opcode },
3542 { Bad_Opcode },
c0f3af97 3543 { "aeskeygenassist", { XM, EXx, Ib } },
09a2c6cf
L
3544 },
3545
c0f3af97 3546 /* PREFIX_VEX_10 */
09a2c6cf 3547 {
9e30b8e0 3548 { VEX_W_TABLE (VEX_W_10_P_0) },
c0f3af97 3549 { VEX_LEN_TABLE (VEX_LEN_10_P_1) },
9e30b8e0 3550 { VEX_W_TABLE (VEX_W_10_P_2) },
c0f3af97 3551 { VEX_LEN_TABLE (VEX_LEN_10_P_3) },
09a2c6cf
L
3552 },
3553
c0f3af97 3554 /* PREFIX_VEX_11 */
09a2c6cf 3555 {
9e30b8e0 3556 { VEX_W_TABLE (VEX_W_11_P_0) },
c0f3af97 3557 { VEX_LEN_TABLE (VEX_LEN_11_P_1) },
9e30b8e0 3558 { VEX_W_TABLE (VEX_W_11_P_2) },
c0f3af97 3559 { VEX_LEN_TABLE (VEX_LEN_11_P_3) },
09a2c6cf
L
3560 },
3561
c0f3af97 3562 /* PREFIX_VEX_12 */
09a2c6cf 3563 {
c0f3af97 3564 { MOD_TABLE (MOD_VEX_12_PREFIX_0) },
9e30b8e0 3565 { VEX_W_TABLE (VEX_W_12_P_1) },
c0f3af97 3566 { VEX_LEN_TABLE (VEX_LEN_12_P_2) },
9e30b8e0 3567 { VEX_W_TABLE (VEX_W_12_P_3) },
09a2c6cf
L
3568 },
3569
c0f3af97 3570 /* PREFIX_VEX_16 */
09a2c6cf 3571 {
c0f3af97 3572 { MOD_TABLE (MOD_VEX_16_PREFIX_0) },
9e30b8e0 3573 { VEX_W_TABLE (VEX_W_16_P_1) },
c0f3af97 3574 { VEX_LEN_TABLE (VEX_LEN_16_P_2) },
5f754f58 3575 },
7c52e0e8 3576
c0f3af97 3577 /* PREFIX_VEX_2A */
5f754f58 3578 {
592d1631 3579 { Bad_Opcode },
c0f3af97 3580 { VEX_LEN_TABLE (VEX_LEN_2A_P_1) },
592d1631 3581 { Bad_Opcode },
c0f3af97 3582 { VEX_LEN_TABLE (VEX_LEN_2A_P_3) },
5f754f58 3583 },
7c52e0e8 3584
c0f3af97 3585 /* PREFIX_VEX_2C */
5f754f58 3586 {
592d1631 3587 { Bad_Opcode },
c0f3af97 3588 { VEX_LEN_TABLE (VEX_LEN_2C_P_1) },
592d1631 3589 { Bad_Opcode },
c0f3af97 3590 { VEX_LEN_TABLE (VEX_LEN_2C_P_3) },
5f754f58 3591 },
7c52e0e8 3592
c0f3af97 3593 /* PREFIX_VEX_2D */
7c52e0e8 3594 {
592d1631 3595 { Bad_Opcode },
c0f3af97 3596 { VEX_LEN_TABLE (VEX_LEN_2D_P_1) },
592d1631 3597 { Bad_Opcode },
c0f3af97 3598 { VEX_LEN_TABLE (VEX_LEN_2D_P_3) },
7c52e0e8
L
3599 },
3600
c0f3af97 3601 /* PREFIX_VEX_2E */
7c52e0e8 3602 {
c0f3af97 3603 { VEX_LEN_TABLE (VEX_LEN_2E_P_0) },
592d1631 3604 { Bad_Opcode },
c0f3af97 3605 { VEX_LEN_TABLE (VEX_LEN_2E_P_2) },
7c52e0e8
L
3606 },
3607
c0f3af97 3608 /* PREFIX_VEX_2F */
7c52e0e8 3609 {
c0f3af97 3610 { VEX_LEN_TABLE (VEX_LEN_2F_P_0) },
592d1631 3611 { Bad_Opcode },
c0f3af97 3612 { VEX_LEN_TABLE (VEX_LEN_2F_P_2) },
7c52e0e8
L
3613 },
3614
c0f3af97 3615 /* PREFIX_VEX_51 */
7c52e0e8 3616 {
9e30b8e0 3617 { VEX_W_TABLE (VEX_W_51_P_0) },
c0f3af97 3618 { VEX_LEN_TABLE (VEX_LEN_51_P_1) },
9e30b8e0 3619 { VEX_W_TABLE (VEX_W_51_P_2) },
c0f3af97 3620 { VEX_LEN_TABLE (VEX_LEN_51_P_3) },
7c52e0e8
L
3621 },
3622
c0f3af97 3623 /* PREFIX_VEX_52 */
7c52e0e8 3624 {
9e30b8e0 3625 { VEX_W_TABLE (VEX_W_52_P_0) },
c0f3af97 3626 { VEX_LEN_TABLE (VEX_LEN_52_P_1) },
7c52e0e8
L
3627 },
3628
c0f3af97 3629 /* PREFIX_VEX_53 */
7c52e0e8 3630 {
9e30b8e0 3631 { VEX_W_TABLE (VEX_W_53_P_0) },
c0f3af97 3632 { VEX_LEN_TABLE (VEX_LEN_53_P_1) },
7c52e0e8
L
3633 },
3634
c0f3af97 3635 /* PREFIX_VEX_58 */
7c52e0e8 3636 {
9e30b8e0 3637 { VEX_W_TABLE (VEX_W_58_P_0) },
c0f3af97 3638 { VEX_LEN_TABLE (VEX_LEN_58_P_1) },
9e30b8e0 3639 { VEX_W_TABLE (VEX_W_58_P_2) },
c0f3af97 3640 { VEX_LEN_TABLE (VEX_LEN_58_P_3) },
7c52e0e8
L
3641 },
3642
c0f3af97 3643 /* PREFIX_VEX_59 */
7c52e0e8 3644 {
9e30b8e0 3645 { VEX_W_TABLE (VEX_W_59_P_0) },
c0f3af97 3646 { VEX_LEN_TABLE (VEX_LEN_59_P_1) },
9e30b8e0 3647 { VEX_W_TABLE (VEX_W_59_P_2) },
c0f3af97 3648 { VEX_LEN_TABLE (VEX_LEN_59_P_3) },
7c52e0e8
L
3649 },
3650
c0f3af97 3651 /* PREFIX_VEX_5A */
7c52e0e8 3652 {
9e30b8e0 3653 { VEX_W_TABLE (VEX_W_5A_P_0) },
c0f3af97
L
3654 { VEX_LEN_TABLE (VEX_LEN_5A_P_1) },
3655 { "vcvtpd2ps%XY", { XMM, EXx } },
3656 { VEX_LEN_TABLE (VEX_LEN_5A_P_3) },
7c52e0e8
L
3657 },
3658
c0f3af97 3659 /* PREFIX_VEX_5B */
7c52e0e8 3660 {
9e30b8e0
L
3661 { VEX_W_TABLE (VEX_W_5B_P_0) },
3662 { VEX_W_TABLE (VEX_W_5B_P_1) },
3663 { VEX_W_TABLE (VEX_W_5B_P_2) },
7c52e0e8
L
3664 },
3665
c0f3af97 3666 /* PREFIX_VEX_5C */
7c52e0e8 3667 {
9e30b8e0 3668 { VEX_W_TABLE (VEX_W_5C_P_0) },
c0f3af97 3669 { VEX_LEN_TABLE (VEX_LEN_5C_P_1) },
9e30b8e0 3670 { VEX_W_TABLE (VEX_W_5C_P_2) },
c0f3af97 3671 { VEX_LEN_TABLE (VEX_LEN_5C_P_3) },
7c52e0e8
L
3672 },
3673
c0f3af97 3674 /* PREFIX_VEX_5D */
7c52e0e8 3675 {
9e30b8e0 3676 { VEX_W_TABLE (VEX_W_5D_P_0) },
c0f3af97 3677 { VEX_LEN_TABLE (VEX_LEN_5D_P_1) },
9e30b8e0 3678 { VEX_W_TABLE (VEX_W_5D_P_2) },
c0f3af97 3679 { VEX_LEN_TABLE (VEX_LEN_5D_P_3) },
7c52e0e8
L
3680 },
3681
c0f3af97 3682 /* PREFIX_VEX_5E */
7c52e0e8 3683 {
9e30b8e0 3684 { VEX_W_TABLE (VEX_W_5E_P_0) },
c0f3af97 3685 { VEX_LEN_TABLE (VEX_LEN_5E_P_1) },
9e30b8e0 3686 { VEX_W_TABLE (VEX_W_5E_P_2) },
c0f3af97 3687 { VEX_LEN_TABLE (VEX_LEN_5E_P_3) },
7c52e0e8
L
3688 },
3689
c0f3af97 3690 /* PREFIX_VEX_5F */
7c52e0e8 3691 {
9e30b8e0 3692 { VEX_W_TABLE (VEX_W_5F_P_0) },
c0f3af97 3693 { VEX_LEN_TABLE (VEX_LEN_5F_P_1) },
9e30b8e0 3694 { VEX_W_TABLE (VEX_W_5F_P_2) },
c0f3af97 3695 { VEX_LEN_TABLE (VEX_LEN_5F_P_3) },
7c52e0e8
L
3696 },
3697
c0f3af97 3698 /* PREFIX_VEX_60 */
7c52e0e8 3699 {
592d1631
L
3700 { Bad_Opcode },
3701 { Bad_Opcode },
c0f3af97 3702 { VEX_LEN_TABLE (VEX_LEN_60_P_2) },
7c52e0e8
L
3703 },
3704
c0f3af97 3705 /* PREFIX_VEX_61 */
7c52e0e8 3706 {
592d1631
L
3707 { Bad_Opcode },
3708 { Bad_Opcode },
c0f3af97 3709 { VEX_LEN_TABLE (VEX_LEN_61_P_2) },
7c52e0e8
L
3710 },
3711
c0f3af97 3712 /* PREFIX_VEX_62 */
7c52e0e8 3713 {
592d1631
L
3714 { Bad_Opcode },
3715 { Bad_Opcode },
c0f3af97 3716 { VEX_LEN_TABLE (VEX_LEN_62_P_2) },
7c52e0e8
L
3717 },
3718
c0f3af97 3719 /* PREFIX_VEX_63 */
7c52e0e8 3720 {
592d1631
L
3721 { Bad_Opcode },
3722 { Bad_Opcode },
c0f3af97 3723 { VEX_LEN_TABLE (VEX_LEN_63_P_2) },
7c52e0e8
L
3724 },
3725
c0f3af97 3726 /* PREFIX_VEX_64 */
7c52e0e8 3727 {
592d1631
L
3728 { Bad_Opcode },
3729 { Bad_Opcode },
c0f3af97 3730 { VEX_LEN_TABLE (VEX_LEN_64_P_2) },
7c52e0e8
L
3731 },
3732
c0f3af97 3733 /* PREFIX_VEX_65 */
7c52e0e8 3734 {
592d1631
L
3735 { Bad_Opcode },
3736 { Bad_Opcode },
c0f3af97 3737 { VEX_LEN_TABLE (VEX_LEN_65_P_2) },
7c52e0e8
L
3738 },
3739
c0f3af97 3740 /* PREFIX_VEX_66 */
7c52e0e8 3741 {
592d1631
L
3742 { Bad_Opcode },
3743 { Bad_Opcode },
c0f3af97 3744 { VEX_LEN_TABLE (VEX_LEN_66_P_2) },
7c52e0e8 3745 },
6439fc28 3746
c0f3af97 3747 /* PREFIX_VEX_67 */
331d2d0d 3748 {
592d1631
L
3749 { Bad_Opcode },
3750 { Bad_Opcode },
c0f3af97 3751 { VEX_LEN_TABLE (VEX_LEN_67_P_2) },
c0f3af97
L
3752 },
3753
3754 /* PREFIX_VEX_68 */
3755 {
592d1631
L
3756 { Bad_Opcode },
3757 { Bad_Opcode },
c0f3af97 3758 { VEX_LEN_TABLE (VEX_LEN_68_P_2) },
c0f3af97
L
3759 },
3760
3761 /* PREFIX_VEX_69 */
3762 {
592d1631
L
3763 { Bad_Opcode },
3764 { Bad_Opcode },
c0f3af97 3765 { VEX_LEN_TABLE (VEX_LEN_69_P_2) },
c0f3af97
L
3766 },
3767
3768 /* PREFIX_VEX_6A */
3769 {
592d1631
L
3770 { Bad_Opcode },
3771 { Bad_Opcode },
c0f3af97 3772 { VEX_LEN_TABLE (VEX_LEN_6A_P_2) },
c0f3af97
L
3773 },
3774
3775 /* PREFIX_VEX_6B */
3776 {
592d1631
L
3777 { Bad_Opcode },
3778 { Bad_Opcode },
c0f3af97 3779 { VEX_LEN_TABLE (VEX_LEN_6B_P_2) },
c0f3af97
L
3780 },
3781
3782 /* PREFIX_VEX_6C */
3783 {
592d1631
L
3784 { Bad_Opcode },
3785 { Bad_Opcode },
c0f3af97 3786 { VEX_LEN_TABLE (VEX_LEN_6C_P_2) },
c0f3af97
L
3787 },
3788
3789 /* PREFIX_VEX_6D */
3790 {
592d1631
L
3791 { Bad_Opcode },
3792 { Bad_Opcode },
c0f3af97 3793 { VEX_LEN_TABLE (VEX_LEN_6D_P_2) },
c0f3af97
L
3794 },
3795
3796 /* PREFIX_VEX_6E */
3797 {
592d1631
L
3798 { Bad_Opcode },
3799 { Bad_Opcode },
c0f3af97 3800 { VEX_LEN_TABLE (VEX_LEN_6E_P_2) },
c0f3af97
L
3801 },
3802
3803 /* PREFIX_VEX_6F */
3804 {
592d1631 3805 { Bad_Opcode },
9e30b8e0
L
3806 { VEX_W_TABLE (VEX_W_6F_P_1) },
3807 { VEX_W_TABLE (VEX_W_6F_P_2) },
c0f3af97
L
3808 },
3809
3810 /* PREFIX_VEX_70 */
3811 {
592d1631 3812 { Bad_Opcode },
c0f3af97
L
3813 { VEX_LEN_TABLE (VEX_LEN_70_P_1) },
3814 { VEX_LEN_TABLE (VEX_LEN_70_P_2) },
3815 { VEX_LEN_TABLE (VEX_LEN_70_P_3) },
3816 },
3817
3818 /* PREFIX_VEX_71_REG_2 */
3819 {
592d1631
L
3820 { Bad_Opcode },
3821 { Bad_Opcode },
c0f3af97 3822 { VEX_LEN_TABLE (VEX_LEN_71_R_2_P_2) },
c0f3af97
L
3823 },
3824
3825 /* PREFIX_VEX_71_REG_4 */
3826 {
592d1631
L
3827 { Bad_Opcode },
3828 { Bad_Opcode },
c0f3af97 3829 { VEX_LEN_TABLE (VEX_LEN_71_R_4_P_2) },
c0f3af97
L
3830 },
3831
3832 /* PREFIX_VEX_71_REG_6 */
3833 {
592d1631
L
3834 { Bad_Opcode },
3835 { Bad_Opcode },
c0f3af97 3836 { VEX_LEN_TABLE (VEX_LEN_71_R_6_P_2) },
c0f3af97
L
3837 },
3838
3839 /* PREFIX_VEX_72_REG_2 */
3840 {
592d1631
L
3841 { Bad_Opcode },
3842 { Bad_Opcode },
c0f3af97 3843 { VEX_LEN_TABLE (VEX_LEN_72_R_2_P_2) },
c0f3af97
L
3844 },
3845
3846 /* PREFIX_VEX_72_REG_4 */
3847 {
592d1631
L
3848 { Bad_Opcode },
3849 { Bad_Opcode },
c0f3af97 3850 { VEX_LEN_TABLE (VEX_LEN_72_R_4_P_2) },
c0f3af97
L
3851 },
3852
3853 /* PREFIX_VEX_72_REG_6 */
3854 {
592d1631
L
3855 { Bad_Opcode },
3856 { Bad_Opcode },
c0f3af97 3857 { VEX_LEN_TABLE (VEX_LEN_72_R_6_P_2) },
c0f3af97
L
3858 },
3859
3860 /* PREFIX_VEX_73_REG_2 */
3861 {
592d1631
L
3862 { Bad_Opcode },
3863 { Bad_Opcode },
c0f3af97 3864 { VEX_LEN_TABLE (VEX_LEN_73_R_2_P_2) },
c0f3af97
L
3865 },
3866
3867 /* PREFIX_VEX_73_REG_3 */
3868 {
592d1631
L
3869 { Bad_Opcode },
3870 { Bad_Opcode },
c0f3af97 3871 { VEX_LEN_TABLE (VEX_LEN_73_R_3_P_2) },
c0f3af97
L
3872 },
3873
3874 /* PREFIX_VEX_73_REG_6 */
3875 {
592d1631
L
3876 { Bad_Opcode },
3877 { Bad_Opcode },
c0f3af97 3878 { VEX_LEN_TABLE (VEX_LEN_73_R_6_P_2) },
c0f3af97
L
3879 },
3880
3881 /* PREFIX_VEX_73_REG_7 */
3882 {
592d1631
L
3883 { Bad_Opcode },
3884 { Bad_Opcode },
c0f3af97 3885 { VEX_LEN_TABLE (VEX_LEN_73_R_7_P_2) },
c0f3af97
L
3886 },
3887
3888 /* PREFIX_VEX_74 */
3889 {
592d1631
L
3890 { Bad_Opcode },
3891 { Bad_Opcode },
c0f3af97 3892 { VEX_LEN_TABLE (VEX_LEN_74_P_2) },
c0f3af97
L
3893 },
3894
3895 /* PREFIX_VEX_75 */
3896 {
592d1631
L
3897 { Bad_Opcode },
3898 { Bad_Opcode },
c0f3af97 3899 { VEX_LEN_TABLE (VEX_LEN_75_P_2) },
c0f3af97
L
3900 },
3901
3902 /* PREFIX_VEX_76 */
3903 {
592d1631
L
3904 { Bad_Opcode },
3905 { Bad_Opcode },
c0f3af97 3906 { VEX_LEN_TABLE (VEX_LEN_76_P_2) },
c0f3af97
L
3907 },
3908
3909 /* PREFIX_VEX_77 */
3910 {
9e30b8e0 3911 { VEX_W_TABLE (VEX_W_77_P_0) },
c0f3af97
L
3912 },
3913
3914 /* PREFIX_VEX_7C */
3915 {
592d1631
L
3916 { Bad_Opcode },
3917 { Bad_Opcode },
9e30b8e0
L
3918 { VEX_W_TABLE (VEX_W_7C_P_2) },
3919 { VEX_W_TABLE (VEX_W_7C_P_3) },
c0f3af97
L
3920 },
3921
3922 /* PREFIX_VEX_7D */
3923 {
592d1631
L
3924 { Bad_Opcode },
3925 { Bad_Opcode },
9e30b8e0
L
3926 { VEX_W_TABLE (VEX_W_7D_P_2) },
3927 { VEX_W_TABLE (VEX_W_7D_P_3) },
c0f3af97
L
3928 },
3929
3930 /* PREFIX_VEX_7E */
3931 {
592d1631 3932 { Bad_Opcode },
c0f3af97
L
3933 { VEX_LEN_TABLE (VEX_LEN_7E_P_1) },
3934 { VEX_LEN_TABLE (VEX_LEN_7E_P_2) },
c0f3af97
L
3935 },
3936
3937 /* PREFIX_VEX_7F */
3938 {
592d1631 3939 { Bad_Opcode },
9e30b8e0
L
3940 { VEX_W_TABLE (VEX_W_7F_P_1) },
3941 { VEX_W_TABLE (VEX_W_7F_P_2) },
c0f3af97
L
3942 },
3943
3944 /* PREFIX_VEX_C2 */
3945 {
9e30b8e0 3946 { VEX_W_TABLE (VEX_W_C2_P_0) },
c0f3af97 3947 { VEX_LEN_TABLE (VEX_LEN_C2_P_1) },
9e30b8e0 3948 { VEX_W_TABLE (VEX_W_C2_P_2) },
c0f3af97
L
3949 { VEX_LEN_TABLE (VEX_LEN_C2_P_3) },
3950 },
3951
3952 /* PREFIX_VEX_C4 */
3953 {
592d1631
L
3954 { Bad_Opcode },
3955 { Bad_Opcode },
c0f3af97 3956 { VEX_LEN_TABLE (VEX_LEN_C4_P_2) },
c0f3af97
L
3957 },
3958
3959 /* PREFIX_VEX_C5 */
3960 {
592d1631
L
3961 { Bad_Opcode },
3962 { Bad_Opcode },
c0f3af97 3963 { VEX_LEN_TABLE (VEX_LEN_C5_P_2) },
c0f3af97
L
3964 },
3965
3966 /* PREFIX_VEX_D0 */
3967 {
592d1631
L
3968 { Bad_Opcode },
3969 { Bad_Opcode },
9e30b8e0
L
3970 { VEX_W_TABLE (VEX_W_D0_P_2) },
3971 { VEX_W_TABLE (VEX_W_D0_P_3) },
c0f3af97
L
3972 },
3973
3974 /* PREFIX_VEX_D1 */
3975 {
592d1631
L
3976 { Bad_Opcode },
3977 { Bad_Opcode },
c0f3af97 3978 { VEX_LEN_TABLE (VEX_LEN_D1_P_2) },
c0f3af97
L
3979 },
3980
3981 /* PREFIX_VEX_D2 */
3982 {
592d1631
L
3983 { Bad_Opcode },
3984 { Bad_Opcode },
c0f3af97 3985 { VEX_LEN_TABLE (VEX_LEN_D2_P_2) },
c0f3af97
L
3986 },
3987
3988 /* PREFIX_VEX_D3 */
3989 {
592d1631
L
3990 { Bad_Opcode },
3991 { Bad_Opcode },
c0f3af97 3992 { VEX_LEN_TABLE (VEX_LEN_D3_P_2) },
c0f3af97
L
3993 },
3994
3995 /* PREFIX_VEX_D4 */
3996 {
592d1631
L
3997 { Bad_Opcode },
3998 { Bad_Opcode },
c0f3af97 3999 { VEX_LEN_TABLE (VEX_LEN_D4_P_2) },
c0f3af97
L
4000 },
4001
4002 /* PREFIX_VEX_D5 */
4003 {
592d1631
L
4004 { Bad_Opcode },
4005 { Bad_Opcode },
c0f3af97 4006 { VEX_LEN_TABLE (VEX_LEN_D5_P_2) },
c0f3af97
L
4007 },
4008
4009 /* PREFIX_VEX_D6 */
4010 {
592d1631
L
4011 { Bad_Opcode },
4012 { Bad_Opcode },
c0f3af97 4013 { VEX_LEN_TABLE (VEX_LEN_D6_P_2) },
c0f3af97
L
4014 },
4015
4016 /* PREFIX_VEX_D7 */
4017 {
592d1631
L
4018 { Bad_Opcode },
4019 { Bad_Opcode },
c0f3af97 4020 { MOD_TABLE (MOD_VEX_D7_PREFIX_2) },
c0f3af97
L
4021 },
4022
4023 /* PREFIX_VEX_D8 */
4024 {
592d1631
L
4025 { Bad_Opcode },
4026 { Bad_Opcode },
c0f3af97 4027 { VEX_LEN_TABLE (VEX_LEN_D8_P_2) },
c0f3af97
L
4028 },
4029
4030 /* PREFIX_VEX_D9 */
4031 {
592d1631
L
4032 { Bad_Opcode },
4033 { Bad_Opcode },
c0f3af97 4034 { VEX_LEN_TABLE (VEX_LEN_D9_P_2) },
c0f3af97
L
4035 },
4036
4037 /* PREFIX_VEX_DA */
4038 {
592d1631
L
4039 { Bad_Opcode },
4040 { Bad_Opcode },
c0f3af97 4041 { VEX_LEN_TABLE (VEX_LEN_DA_P_2) },
c0f3af97
L
4042 },
4043
4044 /* PREFIX_VEX_DB */
4045 {
592d1631
L
4046 { Bad_Opcode },
4047 { Bad_Opcode },
c0f3af97 4048 { VEX_LEN_TABLE (VEX_LEN_DB_P_2) },
c0f3af97
L
4049 },
4050
4051 /* PREFIX_VEX_DC */
4052 {
592d1631
L
4053 { Bad_Opcode },
4054 { Bad_Opcode },
c0f3af97 4055 { VEX_LEN_TABLE (VEX_LEN_DC_P_2) },
c0f3af97
L
4056 },
4057
4058 /* PREFIX_VEX_DD */
4059 {
592d1631
L
4060 { Bad_Opcode },
4061 { Bad_Opcode },
c0f3af97 4062 { VEX_LEN_TABLE (VEX_LEN_DD_P_2) },
c0f3af97
L
4063 },
4064
4065 /* PREFIX_VEX_DE */
4066 {
592d1631
L
4067 { Bad_Opcode },
4068 { Bad_Opcode },
c0f3af97 4069 { VEX_LEN_TABLE (VEX_LEN_DE_P_2) },
c0f3af97
L
4070 },
4071
4072 /* PREFIX_VEX_DF */
4073 {
592d1631
L
4074 { Bad_Opcode },
4075 { Bad_Opcode },
c0f3af97 4076 { VEX_LEN_TABLE (VEX_LEN_DF_P_2) },
c0f3af97
L
4077 },
4078
4079 /* PREFIX_VEX_E0 */
4080 {
592d1631
L
4081 { Bad_Opcode },
4082 { Bad_Opcode },
c0f3af97 4083 { VEX_LEN_TABLE (VEX_LEN_E0_P_2) },
c0f3af97
L
4084 },
4085
4086 /* PREFIX_VEX_E1 */
4087 {
592d1631
L
4088 { Bad_Opcode },
4089 { Bad_Opcode },
c0f3af97 4090 { VEX_LEN_TABLE (VEX_LEN_E1_P_2) },
c0f3af97
L
4091 },
4092
4093 /* PREFIX_VEX_E2 */
4094 {
592d1631
L
4095 { Bad_Opcode },
4096 { Bad_Opcode },
c0f3af97 4097 { VEX_LEN_TABLE (VEX_LEN_E2_P_2) },
c0f3af97
L
4098 },
4099
4100 /* PREFIX_VEX_E3 */
4101 {
592d1631
L
4102 { Bad_Opcode },
4103 { Bad_Opcode },
c0f3af97 4104 { VEX_LEN_TABLE (VEX_LEN_E3_P_2) },
c0f3af97
L
4105 },
4106
4107 /* PREFIX_VEX_E4 */
4108 {
592d1631
L
4109 { Bad_Opcode },
4110 { Bad_Opcode },
c0f3af97 4111 { VEX_LEN_TABLE (VEX_LEN_E4_P_2) },
c0f3af97
L
4112 },
4113
4114 /* PREFIX_VEX_E5 */
4115 {
592d1631
L
4116 { Bad_Opcode },
4117 { Bad_Opcode },
c0f3af97 4118 { VEX_LEN_TABLE (VEX_LEN_E5_P_2) },
c0f3af97
L
4119 },
4120
4121 /* PREFIX_VEX_E6 */
4122 {
592d1631 4123 { Bad_Opcode },
9e30b8e0
L
4124 { VEX_W_TABLE (VEX_W_E6_P_1) },
4125 { VEX_W_TABLE (VEX_W_E6_P_2) },
4126 { VEX_W_TABLE (VEX_W_E6_P_3) },
c0f3af97
L
4127 },
4128
4129 /* PREFIX_VEX_E7 */
4130 {
592d1631
L
4131 { Bad_Opcode },
4132 { Bad_Opcode },
c0f3af97 4133 { MOD_TABLE (MOD_VEX_E7_PREFIX_2) },
c0f3af97
L
4134 },
4135
4136 /* PREFIX_VEX_E8 */
4137 {
592d1631
L
4138 { Bad_Opcode },
4139 { Bad_Opcode },
c0f3af97 4140 { VEX_LEN_TABLE (VEX_LEN_E8_P_2) },
c0f3af97
L
4141 },
4142
4143 /* PREFIX_VEX_E9 */
4144 {
592d1631
L
4145 { Bad_Opcode },
4146 { Bad_Opcode },
c0f3af97 4147 { VEX_LEN_TABLE (VEX_LEN_E9_P_2) },
c0f3af97
L
4148 },
4149
4150 /* PREFIX_VEX_EA */
4151 {
592d1631
L
4152 { Bad_Opcode },
4153 { Bad_Opcode },
c0f3af97 4154 { VEX_LEN_TABLE (VEX_LEN_EA_P_2) },
c0f3af97
L
4155 },
4156
4157 /* PREFIX_VEX_EB */
4158 {
592d1631
L
4159 { Bad_Opcode },
4160 { Bad_Opcode },
c0f3af97 4161 { VEX_LEN_TABLE (VEX_LEN_EB_P_2) },
c0f3af97
L
4162 },
4163
4164 /* PREFIX_VEX_EC */
4165 {
592d1631
L
4166 { Bad_Opcode },
4167 { Bad_Opcode },
c0f3af97 4168 { VEX_LEN_TABLE (VEX_LEN_EC_P_2) },
c0f3af97
L
4169 },
4170
4171 /* PREFIX_VEX_ED */
4172 {
592d1631
L
4173 { Bad_Opcode },
4174 { Bad_Opcode },
c0f3af97 4175 { VEX_LEN_TABLE (VEX_LEN_ED_P_2) },
c0f3af97
L
4176 },
4177
4178 /* PREFIX_VEX_EE */
4179 {
592d1631
L
4180 { Bad_Opcode },
4181 { Bad_Opcode },
c0f3af97 4182 { VEX_LEN_TABLE (VEX_LEN_EE_P_2) },
c0f3af97
L
4183 },
4184
4185 /* PREFIX_VEX_EF */
4186 {
592d1631
L
4187 { Bad_Opcode },
4188 { Bad_Opcode },
c0f3af97 4189 { VEX_LEN_TABLE (VEX_LEN_EF_P_2) },
c0f3af97
L
4190 },
4191
4192 /* PREFIX_VEX_F0 */
4193 {
592d1631
L
4194 { Bad_Opcode },
4195 { Bad_Opcode },
4196 { Bad_Opcode },
c0f3af97
L
4197 { MOD_TABLE (MOD_VEX_F0_PREFIX_3) },
4198 },
4199
4200 /* PREFIX_VEX_F1 */
4201 {
592d1631
L
4202 { Bad_Opcode },
4203 { Bad_Opcode },
c0f3af97 4204 { VEX_LEN_TABLE (VEX_LEN_F1_P_2) },
c0f3af97
L
4205 },
4206
4207 /* PREFIX_VEX_F2 */
4208 {
592d1631
L
4209 { Bad_Opcode },
4210 { Bad_Opcode },
c0f3af97 4211 { VEX_LEN_TABLE (VEX_LEN_F2_P_2) },
c0f3af97
L
4212 },
4213
4214 /* PREFIX_VEX_F3 */
4215 {
592d1631
L
4216 { Bad_Opcode },
4217 { Bad_Opcode },
c0f3af97 4218 { VEX_LEN_TABLE (VEX_LEN_F3_P_2) },
c0f3af97
L
4219 },
4220
4221 /* PREFIX_VEX_F4 */
4222 {
592d1631
L
4223 { Bad_Opcode },
4224 { Bad_Opcode },
c0f3af97 4225 { VEX_LEN_TABLE (VEX_LEN_F4_P_2) },
c0f3af97
L
4226 },
4227
4228 /* PREFIX_VEX_F5 */
4229 {
592d1631
L
4230 { Bad_Opcode },
4231 { Bad_Opcode },
c0f3af97 4232 { VEX_LEN_TABLE (VEX_LEN_F5_P_2) },
c0f3af97
L
4233 },
4234
4235 /* PREFIX_VEX_F6 */
4236 {
592d1631
L
4237 { Bad_Opcode },
4238 { Bad_Opcode },
c0f3af97 4239 { VEX_LEN_TABLE (VEX_LEN_F6_P_2) },
c0f3af97
L
4240 },
4241
4242 /* PREFIX_VEX_F7 */
4243 {
592d1631
L
4244 { Bad_Opcode },
4245 { Bad_Opcode },
c0f3af97 4246 { VEX_LEN_TABLE (VEX_LEN_F7_P_2) },
c0f3af97
L
4247 },
4248
4249 /* PREFIX_VEX_F8 */
4250 {
592d1631
L
4251 { Bad_Opcode },
4252 { Bad_Opcode },
c0f3af97 4253 { VEX_LEN_TABLE (VEX_LEN_F8_P_2) },
c0f3af97
L
4254 },
4255
4256 /* PREFIX_VEX_F9 */
4257 {
592d1631
L
4258 { Bad_Opcode },
4259 { Bad_Opcode },
c0f3af97 4260 { VEX_LEN_TABLE (VEX_LEN_F9_P_2) },
c0f3af97
L
4261 },
4262
4263 /* PREFIX_VEX_FA */
4264 {
592d1631
L
4265 { Bad_Opcode },
4266 { Bad_Opcode },
c0f3af97 4267 { VEX_LEN_TABLE (VEX_LEN_FA_P_2) },
c0f3af97
L
4268 },
4269
4270 /* PREFIX_VEX_FB */
4271 {
592d1631
L
4272 { Bad_Opcode },
4273 { Bad_Opcode },
c0f3af97 4274 { VEX_LEN_TABLE (VEX_LEN_FB_P_2) },
c0f3af97
L
4275 },
4276
4277 /* PREFIX_VEX_FC */
4278 {
592d1631
L
4279 { Bad_Opcode },
4280 { Bad_Opcode },
c0f3af97 4281 { VEX_LEN_TABLE (VEX_LEN_FC_P_2) },
c0f3af97
L
4282 },
4283
4284 /* PREFIX_VEX_FD */
4285 {
592d1631
L
4286 { Bad_Opcode },
4287 { Bad_Opcode },
c0f3af97 4288 { VEX_LEN_TABLE (VEX_LEN_FD_P_2) },
c0f3af97
L
4289 },
4290
4291 /* PREFIX_VEX_FE */
4292 {
592d1631
L
4293 { Bad_Opcode },
4294 { Bad_Opcode },
c0f3af97 4295 { VEX_LEN_TABLE (VEX_LEN_FE_P_2) },
c0f3af97
L
4296 },
4297
4298 /* PREFIX_VEX_3800 */
4299 {
592d1631
L
4300 { Bad_Opcode },
4301 { Bad_Opcode },
c0f3af97 4302 { VEX_LEN_TABLE (VEX_LEN_3800_P_2) },
c0f3af97
L
4303 },
4304
4305 /* PREFIX_VEX_3801 */
4306 {
592d1631
L
4307 { Bad_Opcode },
4308 { Bad_Opcode },
c0f3af97 4309 { VEX_LEN_TABLE (VEX_LEN_3801_P_2) },
c0f3af97
L
4310 },
4311
4312 /* PREFIX_VEX_3802 */
4313 {
592d1631
L
4314 { Bad_Opcode },
4315 { Bad_Opcode },
c0f3af97 4316 { VEX_LEN_TABLE (VEX_LEN_3802_P_2) },
c0f3af97
L
4317 },
4318
4319 /* PREFIX_VEX_3803 */
4320 {
592d1631
L
4321 { Bad_Opcode },
4322 { Bad_Opcode },
c0f3af97 4323 { VEX_LEN_TABLE (VEX_LEN_3803_P_2) },
c0f3af97
L
4324 },
4325
4326 /* PREFIX_VEX_3804 */
4327 {
592d1631
L
4328 { Bad_Opcode },
4329 { Bad_Opcode },
c0f3af97 4330 { VEX_LEN_TABLE (VEX_LEN_3804_P_2) },
c0f3af97
L
4331 },
4332
4333 /* PREFIX_VEX_3805 */
4334 {
592d1631
L
4335 { Bad_Opcode },
4336 { Bad_Opcode },
c0f3af97 4337 { VEX_LEN_TABLE (VEX_LEN_3805_P_2) },
c0f3af97
L
4338 },
4339
4340 /* PREFIX_VEX_3806 */
4341 {
592d1631
L
4342 { Bad_Opcode },
4343 { Bad_Opcode },
c0f3af97 4344 { VEX_LEN_TABLE (VEX_LEN_3806_P_2) },
c0f3af97
L
4345 },
4346
4347 /* PREFIX_VEX_3807 */
4348 {
592d1631
L
4349 { Bad_Opcode },
4350 { Bad_Opcode },
c0f3af97 4351 { VEX_LEN_TABLE (VEX_LEN_3807_P_2) },
c0f3af97
L
4352 },
4353
4354 /* PREFIX_VEX_3808 */
4355 {
592d1631
L
4356 { Bad_Opcode },
4357 { Bad_Opcode },
c0f3af97 4358 { VEX_LEN_TABLE (VEX_LEN_3808_P_2) },
c0f3af97
L
4359 },
4360
4361 /* PREFIX_VEX_3809 */
4362 {
592d1631
L
4363 { Bad_Opcode },
4364 { Bad_Opcode },
c0f3af97 4365 { VEX_LEN_TABLE (VEX_LEN_3809_P_2) },
c0f3af97
L
4366 },
4367
4368 /* PREFIX_VEX_380A */
4369 {
592d1631
L
4370 { Bad_Opcode },
4371 { Bad_Opcode },
c0f3af97 4372 { VEX_LEN_TABLE (VEX_LEN_380A_P_2) },
c0f3af97
L
4373 },
4374
4375 /* PREFIX_VEX_380B */
4376 {
592d1631
L
4377 { Bad_Opcode },
4378 { Bad_Opcode },
c0f3af97 4379 { VEX_LEN_TABLE (VEX_LEN_380B_P_2) },
c0f3af97
L
4380 },
4381
4382 /* PREFIX_VEX_380C */
4383 {
592d1631
L
4384 { Bad_Opcode },
4385 { Bad_Opcode },
9e30b8e0 4386 { VEX_W_TABLE (VEX_W_380C_P_2) },
c0f3af97
L
4387 },
4388
4389 /* PREFIX_VEX_380D */
4390 {
592d1631
L
4391 { Bad_Opcode },
4392 { Bad_Opcode },
9e30b8e0 4393 { VEX_W_TABLE (VEX_W_380D_P_2) },
c0f3af97
L
4394 },
4395
4396 /* PREFIX_VEX_380E */
4397 {
592d1631
L
4398 { Bad_Opcode },
4399 { Bad_Opcode },
9e30b8e0 4400 { VEX_W_TABLE (VEX_W_380E_P_2) },
c0f3af97
L
4401 },
4402
4403 /* PREFIX_VEX_380F */
4404 {
592d1631
L
4405 { Bad_Opcode },
4406 { Bad_Opcode },
9e30b8e0 4407 { VEX_W_TABLE (VEX_W_380F_P_2) },
c0f3af97
L
4408 },
4409
4410 /* PREFIX_VEX_3817 */
4411 {
592d1631
L
4412 { Bad_Opcode },
4413 { Bad_Opcode },
9e30b8e0 4414 { VEX_W_TABLE (VEX_W_3817_P_2) },
c0f3af97
L
4415 },
4416
4417 /* PREFIX_VEX_3818 */
4418 {
592d1631
L
4419 { Bad_Opcode },
4420 { Bad_Opcode },
c0f3af97 4421 { MOD_TABLE (MOD_VEX_3818_PREFIX_2) },
c0f3af97
L
4422 },
4423
4424 /* PREFIX_VEX_3819 */
4425 {
592d1631
L
4426 { Bad_Opcode },
4427 { Bad_Opcode },
c0f3af97 4428 { MOD_TABLE (MOD_VEX_3819_PREFIX_2) },
c0f3af97
L
4429 },
4430
4431 /* PREFIX_VEX_381A */
4432 {
592d1631
L
4433 { Bad_Opcode },
4434 { Bad_Opcode },
c0f3af97 4435 { MOD_TABLE (MOD_VEX_381A_PREFIX_2) },
c0f3af97
L
4436 },
4437
4438 /* PREFIX_VEX_381C */
4439 {
592d1631
L
4440 { Bad_Opcode },
4441 { Bad_Opcode },
c0f3af97 4442 { VEX_LEN_TABLE (VEX_LEN_381C_P_2) },
c0f3af97
L
4443 },
4444
4445 /* PREFIX_VEX_381D */
4446 {
592d1631
L
4447 { Bad_Opcode },
4448 { Bad_Opcode },
c0f3af97 4449 { VEX_LEN_TABLE (VEX_LEN_381D_P_2) },
c0f3af97
L
4450 },
4451
4452 /* PREFIX_VEX_381E */
4453 {
592d1631
L
4454 { Bad_Opcode },
4455 { Bad_Opcode },
c0f3af97 4456 { VEX_LEN_TABLE (VEX_LEN_381E_P_2) },
c0f3af97
L
4457 },
4458
4459 /* PREFIX_VEX_3820 */
4460 {
592d1631
L
4461 { Bad_Opcode },
4462 { Bad_Opcode },
c0f3af97 4463 { VEX_LEN_TABLE (VEX_LEN_3820_P_2) },
c0f3af97
L
4464 },
4465
4466 /* PREFIX_VEX_3821 */
4467 {
592d1631
L
4468 { Bad_Opcode },
4469 { Bad_Opcode },
c0f3af97 4470 { VEX_LEN_TABLE (VEX_LEN_3821_P_2) },
c0f3af97
L
4471 },
4472
4473 /* PREFIX_VEX_3822 */
4474 {
592d1631
L
4475 { Bad_Opcode },
4476 { Bad_Opcode },
c0f3af97 4477 { VEX_LEN_TABLE (VEX_LEN_3822_P_2) },
c0f3af97
L
4478 },
4479
4480 /* PREFIX_VEX_3823 */
4481 {
592d1631
L
4482 { Bad_Opcode },
4483 { Bad_Opcode },
c0f3af97 4484 { VEX_LEN_TABLE (VEX_LEN_3823_P_2) },
c0f3af97
L
4485 },
4486
4487 /* PREFIX_VEX_3824 */
4488 {
592d1631
L
4489 { Bad_Opcode },
4490 { Bad_Opcode },
c0f3af97 4491 { VEX_LEN_TABLE (VEX_LEN_3824_P_2) },
c0f3af97
L
4492 },
4493
4494 /* PREFIX_VEX_3825 */
4495 {
592d1631
L
4496 { Bad_Opcode },
4497 { Bad_Opcode },
c0f3af97 4498 { VEX_LEN_TABLE (VEX_LEN_3825_P_2) },
c0f3af97
L
4499 },
4500
4501 /* PREFIX_VEX_3828 */
4502 {
592d1631
L
4503 { Bad_Opcode },
4504 { Bad_Opcode },
c0f3af97 4505 { VEX_LEN_TABLE (VEX_LEN_3828_P_2) },
c0f3af97
L
4506 },
4507
4508 /* PREFIX_VEX_3829 */
4509 {
592d1631
L
4510 { Bad_Opcode },
4511 { Bad_Opcode },
c0f3af97 4512 { VEX_LEN_TABLE (VEX_LEN_3829_P_2) },
c0f3af97
L
4513 },
4514
4515 /* PREFIX_VEX_382A */
4516 {
592d1631
L
4517 { Bad_Opcode },
4518 { Bad_Opcode },
c0f3af97 4519 { MOD_TABLE (MOD_VEX_382A_PREFIX_2) },
c0f3af97
L
4520 },
4521
4522 /* PREFIX_VEX_382B */
4523 {
592d1631
L
4524 { Bad_Opcode },
4525 { Bad_Opcode },
c0f3af97 4526 { VEX_LEN_TABLE (VEX_LEN_382B_P_2) },
c0f3af97
L
4527 },
4528
4529 /* PREFIX_VEX_382C */
4530 {
592d1631
L
4531 { Bad_Opcode },
4532 { Bad_Opcode },
c0f3af97 4533 { MOD_TABLE (MOD_VEX_382C_PREFIX_2) },
c0f3af97
L
4534 },
4535
4536 /* PREFIX_VEX_382D */
4537 {
592d1631
L
4538 { Bad_Opcode },
4539 { Bad_Opcode },
c0f3af97 4540 { MOD_TABLE (MOD_VEX_382D_PREFIX_2) },
c0f3af97
L
4541 },
4542
4543 /* PREFIX_VEX_382E */
4544 {
592d1631
L
4545 { Bad_Opcode },
4546 { Bad_Opcode },
c0f3af97 4547 { MOD_TABLE (MOD_VEX_382E_PREFIX_2) },
c0f3af97
L
4548 },
4549
4550 /* PREFIX_VEX_382F */
4551 {
592d1631
L
4552 { Bad_Opcode },
4553 { Bad_Opcode },
c0f3af97 4554 { MOD_TABLE (MOD_VEX_382F_PREFIX_2) },
c0f3af97
L
4555 },
4556
4557 /* PREFIX_VEX_3830 */
4558 {
592d1631
L
4559 { Bad_Opcode },
4560 { Bad_Opcode },
c0f3af97 4561 { VEX_LEN_TABLE (VEX_LEN_3830_P_2) },
c0f3af97
L
4562 },
4563
4564 /* PREFIX_VEX_3831 */
4565 {
592d1631
L
4566 { Bad_Opcode },
4567 { Bad_Opcode },
c0f3af97 4568 { VEX_LEN_TABLE (VEX_LEN_3831_P_2) },
c0f3af97
L
4569 },
4570
4571 /* PREFIX_VEX_3832 */
4572 {
592d1631
L
4573 { Bad_Opcode },
4574 { Bad_Opcode },
c0f3af97 4575 { VEX_LEN_TABLE (VEX_LEN_3832_P_2) },
c0f3af97
L
4576 },
4577
4578 /* PREFIX_VEX_3833 */
4579 {
592d1631
L
4580 { Bad_Opcode },
4581 { Bad_Opcode },
c0f3af97 4582 { VEX_LEN_TABLE (VEX_LEN_3833_P_2) },
c0f3af97
L
4583 },
4584
4585 /* PREFIX_VEX_3834 */
4586 {
592d1631
L
4587 { Bad_Opcode },
4588 { Bad_Opcode },
c0f3af97 4589 { VEX_LEN_TABLE (VEX_LEN_3834_P_2) },
c0f3af97
L
4590 },
4591
4592 /* PREFIX_VEX_3835 */
4593 {
592d1631
L
4594 { Bad_Opcode },
4595 { Bad_Opcode },
c0f3af97 4596 { VEX_LEN_TABLE (VEX_LEN_3835_P_2) },
c0f3af97
L
4597 },
4598
4599 /* PREFIX_VEX_3837 */
4600 {
592d1631
L
4601 { Bad_Opcode },
4602 { Bad_Opcode },
c0f3af97 4603 { VEX_LEN_TABLE (VEX_LEN_3837_P_2) },
c0f3af97
L
4604 },
4605
4606 /* PREFIX_VEX_3838 */
4607 {
592d1631
L
4608 { Bad_Opcode },
4609 { Bad_Opcode },
c0f3af97 4610 { VEX_LEN_TABLE (VEX_LEN_3838_P_2) },
c0f3af97
L
4611 },
4612
4613 /* PREFIX_VEX_3839 */
4614 {
592d1631
L
4615 { Bad_Opcode },
4616 { Bad_Opcode },
c0f3af97 4617 { VEX_LEN_TABLE (VEX_LEN_3839_P_2) },
c0f3af97
L
4618 },
4619
4620 /* PREFIX_VEX_383A */
4621 {
592d1631
L
4622 { Bad_Opcode },
4623 { Bad_Opcode },
c0f3af97 4624 { VEX_LEN_TABLE (VEX_LEN_383A_P_2) },
c0f3af97
L
4625 },
4626
4627 /* PREFIX_VEX_383B */
4628 {
592d1631
L
4629 { Bad_Opcode },
4630 { Bad_Opcode },
c0f3af97 4631 { VEX_LEN_TABLE (VEX_LEN_383B_P_2) },
c0f3af97
L
4632 },
4633
4634 /* PREFIX_VEX_383C */
4635 {
592d1631
L
4636 { Bad_Opcode },
4637 { Bad_Opcode },
c0f3af97 4638 { VEX_LEN_TABLE (VEX_LEN_383C_P_2) },
c0f3af97
L
4639 },
4640
4641 /* PREFIX_VEX_383D */
4642 {
592d1631
L
4643 { Bad_Opcode },
4644 { Bad_Opcode },
c0f3af97 4645 { VEX_LEN_TABLE (VEX_LEN_383D_P_2) },
c0f3af97
L
4646 },
4647
4648 /* PREFIX_VEX_383E */
4649 {
592d1631
L
4650 { Bad_Opcode },
4651 { Bad_Opcode },
c0f3af97 4652 { VEX_LEN_TABLE (VEX_LEN_383E_P_2) },
c0f3af97
L
4653 },
4654
4655 /* PREFIX_VEX_383F */
4656 {
592d1631
L
4657 { Bad_Opcode },
4658 { Bad_Opcode },
c0f3af97 4659 { VEX_LEN_TABLE (VEX_LEN_383F_P_2) },
c0f3af97
L
4660 },
4661
4662 /* PREFIX_VEX_3840 */
4663 {
592d1631
L
4664 { Bad_Opcode },
4665 { Bad_Opcode },
c0f3af97 4666 { VEX_LEN_TABLE (VEX_LEN_3840_P_2) },
c0f3af97
L
4667 },
4668
4669 /* PREFIX_VEX_3841 */
4670 {
592d1631
L
4671 { Bad_Opcode },
4672 { Bad_Opcode },
c0f3af97 4673 { VEX_LEN_TABLE (VEX_LEN_3841_P_2) },
c0f3af97
L
4674 },
4675
0bfee649 4676 /* PREFIX_VEX_3896 */
a5ff0eb2 4677 {
592d1631
L
4678 { Bad_Opcode },
4679 { Bad_Opcode },
0bfee649 4680 { "vfmaddsub132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4681 },
4682
0bfee649 4683 /* PREFIX_VEX_3897 */
a5ff0eb2 4684 {
592d1631
L
4685 { Bad_Opcode },
4686 { Bad_Opcode },
0bfee649 4687 { "vfmsubadd132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4688 },
4689
0bfee649 4690 /* PREFIX_VEX_3898 */
a5ff0eb2 4691 {
592d1631
L
4692 { Bad_Opcode },
4693 { Bad_Opcode },
0bfee649 4694 { "vfmadd132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4695 },
4696
0bfee649 4697 /* PREFIX_VEX_3899 */
a5ff0eb2 4698 {
592d1631
L
4699 { Bad_Opcode },
4700 { Bad_Opcode },
1c480963 4701 { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
a5ff0eb2
L
4702 },
4703
0bfee649 4704 /* PREFIX_VEX_389A */
a5ff0eb2 4705 {
592d1631
L
4706 { Bad_Opcode },
4707 { Bad_Opcode },
0bfee649 4708 { "vfmsub132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4709 },
4710
0bfee649 4711 /* PREFIX_VEX_389B */
c0f3af97 4712 {
592d1631
L
4713 { Bad_Opcode },
4714 { Bad_Opcode },
1c480963 4715 { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4716 },
4717
0bfee649 4718 /* PREFIX_VEX_389C */
c0f3af97 4719 {
592d1631
L
4720 { Bad_Opcode },
4721 { Bad_Opcode },
0bfee649 4722 { "vfnmadd132p%XW", { XM, Vex, EXx } },
c0f3af97
L
4723 },
4724
0bfee649 4725 /* PREFIX_VEX_389D */
c0f3af97 4726 {
592d1631
L
4727 { Bad_Opcode },
4728 { Bad_Opcode },
1c480963 4729 { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4730 },
4731
0bfee649 4732 /* PREFIX_VEX_389E */
c0f3af97 4733 {
592d1631
L
4734 { Bad_Opcode },
4735 { Bad_Opcode },
0bfee649 4736 { "vfnmsub132p%XW", { XM, Vex, EXx } },
c0f3af97
L
4737 },
4738
0bfee649 4739 /* PREFIX_VEX_389F */
c0f3af97 4740 {
592d1631
L
4741 { Bad_Opcode },
4742 { Bad_Opcode },
1c480963 4743 { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4744 },
4745
0bfee649 4746 /* PREFIX_VEX_38A6 */
c0f3af97 4747 {
592d1631
L
4748 { Bad_Opcode },
4749 { Bad_Opcode },
0bfee649 4750 { "vfmaddsub213p%XW", { XM, Vex, EXx } },
592d1631 4751 { Bad_Opcode },
c0f3af97
L
4752 },
4753
0bfee649 4754 /* PREFIX_VEX_38A7 */
c0f3af97 4755 {
592d1631
L
4756 { Bad_Opcode },
4757 { Bad_Opcode },
0bfee649 4758 { "vfmsubadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4759 },
4760
0bfee649 4761 /* PREFIX_VEX_38A8 */
c0f3af97 4762 {
592d1631
L
4763 { Bad_Opcode },
4764 { Bad_Opcode },
0bfee649 4765 { "vfmadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4766 },
4767
0bfee649 4768 /* PREFIX_VEX_38A9 */
c0f3af97 4769 {
592d1631
L
4770 { Bad_Opcode },
4771 { Bad_Opcode },
1c480963 4772 { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4773 },
4774
0bfee649 4775 /* PREFIX_VEX_38AA */
c0f3af97 4776 {
592d1631
L
4777 { Bad_Opcode },
4778 { Bad_Opcode },
0bfee649 4779 { "vfmsub213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4780 },
4781
0bfee649 4782 /* PREFIX_VEX_38AB */
c0f3af97 4783 {
592d1631
L
4784 { Bad_Opcode },
4785 { Bad_Opcode },
1c480963 4786 { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4787 },
4788
0bfee649 4789 /* PREFIX_VEX_38AC */
c0f3af97 4790 {
592d1631
L
4791 { Bad_Opcode },
4792 { Bad_Opcode },
0bfee649 4793 { "vfnmadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4794 },
4795
0bfee649 4796 /* PREFIX_VEX_38AD */
c0f3af97 4797 {
592d1631
L
4798 { Bad_Opcode },
4799 { Bad_Opcode },
1c480963 4800 { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4801 },
4802
0bfee649 4803 /* PREFIX_VEX_38AE */
c0f3af97 4804 {
592d1631
L
4805 { Bad_Opcode },
4806 { Bad_Opcode },
0bfee649 4807 { "vfnmsub213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4808 },
4809
0bfee649 4810 /* PREFIX_VEX_38AF */
c0f3af97 4811 {
592d1631
L
4812 { Bad_Opcode },
4813 { Bad_Opcode },
1c480963 4814 { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4815 },
4816
0bfee649 4817 /* PREFIX_VEX_38B6 */
c0f3af97 4818 {
592d1631
L
4819 { Bad_Opcode },
4820 { Bad_Opcode },
0bfee649 4821 { "vfmaddsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4822 },
4823
0bfee649 4824 /* PREFIX_VEX_38B7 */
c0f3af97 4825 {
592d1631
L
4826 { Bad_Opcode },
4827 { Bad_Opcode },
0bfee649 4828 { "vfmsubadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4829 },
4830
0bfee649 4831 /* PREFIX_VEX_38B8 */
c0f3af97 4832 {
592d1631
L
4833 { Bad_Opcode },
4834 { Bad_Opcode },
0bfee649 4835 { "vfmadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4836 },
4837
0bfee649 4838 /* PREFIX_VEX_38B9 */
c0f3af97 4839 {
592d1631
L
4840 { Bad_Opcode },
4841 { Bad_Opcode },
1c480963 4842 { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4843 },
4844
0bfee649 4845 /* PREFIX_VEX_38BA */
c0f3af97 4846 {
592d1631
L
4847 { Bad_Opcode },
4848 { Bad_Opcode },
0bfee649 4849 { "vfmsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4850 },
4851
0bfee649 4852 /* PREFIX_VEX_38BB */
c0f3af97 4853 {
592d1631
L
4854 { Bad_Opcode },
4855 { Bad_Opcode },
1c480963 4856 { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4857 },
4858
0bfee649 4859 /* PREFIX_VEX_38BC */
c0f3af97 4860 {
592d1631
L
4861 { Bad_Opcode },
4862 { Bad_Opcode },
0bfee649 4863 { "vfnmadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4864 },
4865
0bfee649 4866 /* PREFIX_VEX_38BD */
c0f3af97 4867 {
592d1631
L
4868 { Bad_Opcode },
4869 { Bad_Opcode },
1c480963 4870 { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4871 },
4872
0bfee649 4873 /* PREFIX_VEX_38BE */
c0f3af97 4874 {
592d1631
L
4875 { Bad_Opcode },
4876 { Bad_Opcode },
0bfee649 4877 { "vfnmsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4878 },
4879
0bfee649 4880 /* PREFIX_VEX_38BF */
c0f3af97 4881 {
592d1631
L
4882 { Bad_Opcode },
4883 { Bad_Opcode },
1c480963 4884 { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4885 },
4886
0bfee649 4887 /* PREFIX_VEX_38DB */
c0f3af97 4888 {
592d1631
L
4889 { Bad_Opcode },
4890 { Bad_Opcode },
0bfee649 4891 { VEX_LEN_TABLE (VEX_LEN_38DB_P_2) },
c0f3af97
L
4892 },
4893
0bfee649 4894 /* PREFIX_VEX_38DC */
c0f3af97 4895 {
592d1631
L
4896 { Bad_Opcode },
4897 { Bad_Opcode },
0bfee649 4898 { VEX_LEN_TABLE (VEX_LEN_38DC_P_2) },
c0f3af97
L
4899 },
4900
0bfee649 4901 /* PREFIX_VEX_38DD */
c0f3af97 4902 {
592d1631
L
4903 { Bad_Opcode },
4904 { Bad_Opcode },
0bfee649 4905 { VEX_LEN_TABLE (VEX_LEN_38DD_P_2) },
c0f3af97
L
4906 },
4907
0bfee649 4908 /* PREFIX_VEX_38DE */
c0f3af97 4909 {
592d1631
L
4910 { Bad_Opcode },
4911 { Bad_Opcode },
0bfee649 4912 { VEX_LEN_TABLE (VEX_LEN_38DE_P_2) },
c0f3af97
L
4913 },
4914
0bfee649 4915 /* PREFIX_VEX_38DF */
c0f3af97 4916 {
592d1631
L
4917 { Bad_Opcode },
4918 { Bad_Opcode },
0bfee649 4919 { VEX_LEN_TABLE (VEX_LEN_38DF_P_2) },
c0f3af97
L
4920 },
4921
0bfee649 4922 /* PREFIX_VEX_3A04 */
c0f3af97 4923 {
592d1631
L
4924 { Bad_Opcode },
4925 { Bad_Opcode },
9e30b8e0 4926 { VEX_W_TABLE (VEX_W_3A04_P_2) },
c0f3af97
L
4927 },
4928
0bfee649 4929 /* PREFIX_VEX_3A05 */
c0f3af97 4930 {
592d1631
L
4931 { Bad_Opcode },
4932 { Bad_Opcode },
9e30b8e0 4933 { VEX_W_TABLE (VEX_W_3A05_P_2) },
c0f3af97
L
4934 },
4935
0bfee649 4936 /* PREFIX_VEX_3A06 */
c0f3af97 4937 {
592d1631
L
4938 { Bad_Opcode },
4939 { Bad_Opcode },
0bfee649 4940 { VEX_LEN_TABLE (VEX_LEN_3A06_P_2) },
c0f3af97
L
4941 },
4942
0bfee649 4943 /* PREFIX_VEX_3A08 */
c0f3af97 4944 {
592d1631
L
4945 { Bad_Opcode },
4946 { Bad_Opcode },
9e30b8e0 4947 { VEX_W_TABLE (VEX_W_3A08_P_2) },
c0f3af97
L
4948 },
4949
0bfee649 4950 /* PREFIX_VEX_3A09 */
c0f3af97 4951 {
592d1631
L
4952 { Bad_Opcode },
4953 { Bad_Opcode },
9e30b8e0 4954 { VEX_W_TABLE (VEX_W_3A09_P_2) },
c0f3af97
L
4955 },
4956
0bfee649 4957 /* PREFIX_VEX_3A0A */
c0f3af97 4958 {
592d1631
L
4959 { Bad_Opcode },
4960 { Bad_Opcode },
0bfee649 4961 { VEX_LEN_TABLE (VEX_LEN_3A0A_P_2) },
0bfee649
L
4962 },
4963
4964 /* PREFIX_VEX_3A0B */
4965 {
592d1631
L
4966 { Bad_Opcode },
4967 { Bad_Opcode },
0bfee649 4968 { VEX_LEN_TABLE (VEX_LEN_3A0B_P_2) },
0bfee649
L
4969 },
4970
4971 /* PREFIX_VEX_3A0C */
4972 {
592d1631
L
4973 { Bad_Opcode },
4974 { Bad_Opcode },
9e30b8e0 4975 { VEX_W_TABLE (VEX_W_3A0C_P_2) },
0bfee649
L
4976 },
4977
4978 /* PREFIX_VEX_3A0D */
4979 {
592d1631
L
4980 { Bad_Opcode },
4981 { Bad_Opcode },
9e30b8e0 4982 { VEX_W_TABLE (VEX_W_3A0D_P_2) },
c0f3af97
L
4983 },
4984
0bfee649
L
4985 /* PREFIX_VEX_3A0E */
4986 {
592d1631
L
4987 { Bad_Opcode },
4988 { Bad_Opcode },
0bfee649 4989 { VEX_LEN_TABLE (VEX_LEN_3A0E_P_2) },
0bfee649
L
4990 },
4991
4992 /* PREFIX_VEX_3A0F */
4993 {
592d1631
L
4994 { Bad_Opcode },
4995 { Bad_Opcode },
0bfee649 4996 { VEX_LEN_TABLE (VEX_LEN_3A0F_P_2) },
0bfee649
L
4997 },
4998
4999 /* PREFIX_VEX_3A14 */
5000 {
592d1631
L
5001 { Bad_Opcode },
5002 { Bad_Opcode },
0bfee649 5003 { VEX_LEN_TABLE (VEX_LEN_3A14_P_2) },
0bfee649
L
5004 },
5005
5006 /* PREFIX_VEX_3A15 */
5007 {
592d1631
L
5008 { Bad_Opcode },
5009 { Bad_Opcode },
0bfee649 5010 { VEX_LEN_TABLE (VEX_LEN_3A15_P_2) },
0bfee649
L
5011 },
5012
5013 /* PREFIX_VEX_3A16 */
c0f3af97 5014 {
592d1631
L
5015 { Bad_Opcode },
5016 { Bad_Opcode },
0bfee649 5017 { VEX_LEN_TABLE (VEX_LEN_3A16_P_2) },
c0f3af97
L
5018 },
5019
0bfee649 5020 /* PREFIX_VEX_3A17 */
c0f3af97 5021 {
592d1631
L
5022 { Bad_Opcode },
5023 { Bad_Opcode },
0bfee649 5024 { VEX_LEN_TABLE (VEX_LEN_3A17_P_2) },
c0f3af97
L
5025 },
5026
0bfee649 5027 /* PREFIX_VEX_3A18 */
c0f3af97 5028 {
592d1631
L
5029 { Bad_Opcode },
5030 { Bad_Opcode },
0bfee649 5031 { VEX_LEN_TABLE (VEX_LEN_3A18_P_2) },
c0f3af97
L
5032 },
5033
0bfee649 5034 /* PREFIX_VEX_3A19 */
c0f3af97 5035 {
592d1631
L
5036 { Bad_Opcode },
5037 { Bad_Opcode },
0bfee649 5038 { VEX_LEN_TABLE (VEX_LEN_3A19_P_2) },
c0f3af97
L
5039 },
5040
0bfee649 5041 /* PREFIX_VEX_3A20 */
c0f3af97 5042 {
592d1631
L
5043 { Bad_Opcode },
5044 { Bad_Opcode },
0bfee649 5045 { VEX_LEN_TABLE (VEX_LEN_3A20_P_2) },
c0f3af97
L
5046 },
5047
0bfee649 5048 /* PREFIX_VEX_3A21 */
c0f3af97 5049 {
592d1631
L
5050 { Bad_Opcode },
5051 { Bad_Opcode },
0bfee649 5052 { VEX_LEN_TABLE (VEX_LEN_3A21_P_2) },
c0f3af97
L
5053 },
5054
0bfee649
L
5055 /* PREFIX_VEX_3A22 */
5056 {
592d1631
L
5057 { Bad_Opcode },
5058 { Bad_Opcode },
0bfee649 5059 { VEX_LEN_TABLE (VEX_LEN_3A22_P_2) },
0bfee649
L
5060 },
5061
5062 /* PREFIX_VEX_3A40 */
c0f3af97 5063 {
592d1631
L
5064 { Bad_Opcode },
5065 { Bad_Opcode },
9e30b8e0 5066 { VEX_W_TABLE (VEX_W_3A40_P_2) },
c0f3af97
L
5067 },
5068
0bfee649 5069 /* PREFIX_VEX_3A41 */
c0f3af97 5070 {
592d1631
L
5071 { Bad_Opcode },
5072 { Bad_Opcode },
0bfee649 5073 { VEX_LEN_TABLE (VEX_LEN_3A41_P_2) },
c0f3af97
L
5074 },
5075
0bfee649 5076 /* PREFIX_VEX_3A42 */
c0f3af97 5077 {
592d1631
L
5078 { Bad_Opcode },
5079 { Bad_Opcode },
0bfee649 5080 { VEX_LEN_TABLE (VEX_LEN_3A42_P_2) },
c0f3af97
L
5081 },
5082
ce2f5b3c
L
5083 /* PREFIX_VEX_3A44 */
5084 {
592d1631
L
5085 { Bad_Opcode },
5086 { Bad_Opcode },
ce2f5b3c 5087 { VEX_LEN_TABLE (VEX_LEN_3A44_P_2) },
ce2f5b3c
L
5088 },
5089
0bfee649 5090 /* PREFIX_VEX_3A4A */
c0f3af97 5091 {
592d1631
L
5092 { Bad_Opcode },
5093 { Bad_Opcode },
9e30b8e0 5094 { VEX_W_TABLE (VEX_W_3A4A_P_2) },
c0f3af97
L
5095 },
5096
0bfee649 5097 /* PREFIX_VEX_3A4B */
c0f3af97 5098 {
592d1631
L
5099 { Bad_Opcode },
5100 { Bad_Opcode },
9e30b8e0 5101 { VEX_W_TABLE (VEX_W_3A4B_P_2) },
c0f3af97
L
5102 },
5103
0bfee649 5104 /* PREFIX_VEX_3A4C */
c0f3af97 5105 {
592d1631
L
5106 { Bad_Opcode },
5107 { Bad_Opcode },
0bfee649 5108 { VEX_LEN_TABLE (VEX_LEN_3A4C_P_2) },
c0f3af97
L
5109 },
5110
922d8de8
DR
5111 /* PREFIX_VEX_3A5C */
5112 {
592d1631
L
5113 { Bad_Opcode },
5114 { Bad_Opcode },
206c2556 5115 { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5116 },
5117
5118 /* PREFIX_VEX_3A5D */
5119 {
592d1631
L
5120 { Bad_Opcode },
5121 { Bad_Opcode },
206c2556 5122 { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5123 },
5124
5125 /* PREFIX_VEX_3A5E */
5126 {
592d1631
L
5127 { Bad_Opcode },
5128 { Bad_Opcode },
206c2556 5129 { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5130 },
5131
5132 /* PREFIX_VEX_3A5F */
5133 {
592d1631
L
5134 { Bad_Opcode },
5135 { Bad_Opcode },
206c2556 5136 { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5137 },
5138
0bfee649 5139 /* PREFIX_VEX_3A60 */
c0f3af97 5140 {
592d1631
L
5141 { Bad_Opcode },
5142 { Bad_Opcode },
0bfee649 5143 { VEX_LEN_TABLE (VEX_LEN_3A60_P_2) },
592d1631 5144 { Bad_Opcode },
c0f3af97
L
5145 },
5146
0bfee649 5147 /* PREFIX_VEX_3A61 */
c0f3af97 5148 {
592d1631
L
5149 { Bad_Opcode },
5150 { Bad_Opcode },
0bfee649 5151 { VEX_LEN_TABLE (VEX_LEN_3A61_P_2) },
c0f3af97
L
5152 },
5153
0bfee649 5154 /* PREFIX_VEX_3A62 */
c0f3af97 5155 {
592d1631
L
5156 { Bad_Opcode },
5157 { Bad_Opcode },
0bfee649 5158 { VEX_LEN_TABLE (VEX_LEN_3A62_P_2) },
c0f3af97
L
5159 },
5160
0bfee649 5161 /* PREFIX_VEX_3A63 */
c0f3af97 5162 {
592d1631
L
5163 { Bad_Opcode },
5164 { Bad_Opcode },
0bfee649 5165 { VEX_LEN_TABLE (VEX_LEN_3A63_P_2) },
c0f3af97 5166 },
a5ff0eb2 5167
922d8de8
DR
5168 /* PREFIX_VEX_3A68 */
5169 {
592d1631
L
5170 { Bad_Opcode },
5171 { Bad_Opcode },
206c2556 5172 { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5173 },
5174
5175 /* PREFIX_VEX_3A69 */
5176 {
592d1631
L
5177 { Bad_Opcode },
5178 { Bad_Opcode },
206c2556 5179 { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5180 },
5181
5182 /* PREFIX_VEX_3A6A */
5183 {
592d1631
L
5184 { Bad_Opcode },
5185 { Bad_Opcode },
922d8de8 5186 { VEX_LEN_TABLE (VEX_LEN_3A6A_P_2) },
922d8de8
DR
5187 },
5188
5189 /* PREFIX_VEX_3A6B */
5190 {
592d1631
L
5191 { Bad_Opcode },
5192 { Bad_Opcode },
922d8de8 5193 { VEX_LEN_TABLE (VEX_LEN_3A6B_P_2) },
922d8de8
DR
5194 },
5195
5196 /* PREFIX_VEX_3A6C */
5197 {
592d1631
L
5198 { Bad_Opcode },
5199 { Bad_Opcode },
206c2556 5200 { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5201 },
5202
5203 /* PREFIX_VEX_3A6D */
5204 {
592d1631
L
5205 { Bad_Opcode },
5206 { Bad_Opcode },
206c2556 5207 { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5208 },
5209
5210 /* PREFIX_VEX_3A6E */
5211 {
592d1631
L
5212 { Bad_Opcode },
5213 { Bad_Opcode },
922d8de8 5214 { VEX_LEN_TABLE (VEX_LEN_3A6E_P_2) },
922d8de8
DR
5215 },
5216
5217 /* PREFIX_VEX_3A6F */
5218 {
592d1631
L
5219 { Bad_Opcode },
5220 { Bad_Opcode },
922d8de8 5221 { VEX_LEN_TABLE (VEX_LEN_3A6F_P_2) },
922d8de8
DR
5222 },
5223
5224 /* PREFIX_VEX_3A78 */
5225 {
592d1631
L
5226 { Bad_Opcode },
5227 { Bad_Opcode },
206c2556 5228 { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5229 },
5230
5231 /* PREFIX_VEX_3A79 */
5232 {
592d1631
L
5233 { Bad_Opcode },
5234 { Bad_Opcode },
206c2556 5235 { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5236 },
5237
5238 /* PREFIX_VEX_3A7A */
5239 {
592d1631
L
5240 { Bad_Opcode },
5241 { Bad_Opcode },
922d8de8 5242 { VEX_LEN_TABLE (VEX_LEN_3A7A_P_2) },
922d8de8
DR
5243 },
5244
5245 /* PREFIX_VEX_3A7B */
5246 {
592d1631
L
5247 { Bad_Opcode },
5248 { Bad_Opcode },
922d8de8 5249 { VEX_LEN_TABLE (VEX_LEN_3A7B_P_2) },
922d8de8
DR
5250 },
5251
5252 /* PREFIX_VEX_3A7C */
5253 {
592d1631
L
5254 { Bad_Opcode },
5255 { Bad_Opcode },
206c2556 5256 { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631 5257 { Bad_Opcode },
922d8de8
DR
5258 },
5259
5260 /* PREFIX_VEX_3A7D */
5261 {
592d1631
L
5262 { Bad_Opcode },
5263 { Bad_Opcode },
206c2556 5264 { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5265 },
5266
5267 /* PREFIX_VEX_3A7E */
5268 {
592d1631
L
5269 { Bad_Opcode },
5270 { Bad_Opcode },
922d8de8 5271 { VEX_LEN_TABLE (VEX_LEN_3A7E_P_2) },
922d8de8
DR
5272 },
5273
5274 /* PREFIX_VEX_3A7F */
5275 {
592d1631
L
5276 { Bad_Opcode },
5277 { Bad_Opcode },
922d8de8 5278 { VEX_LEN_TABLE (VEX_LEN_3A7F_P_2) },
922d8de8
DR
5279 },
5280
a5ff0eb2
L
5281 /* PREFIX_VEX_3ADF */
5282 {
592d1631
L
5283 { Bad_Opcode },
5284 { Bad_Opcode },
a5ff0eb2 5285 { VEX_LEN_TABLE (VEX_LEN_3ADF_P_2) },
a5ff0eb2 5286 },
c0f3af97
L
5287};
5288
5289static const struct dis386 x86_64_table[][2] = {
5290 /* X86_64_06 */
5291 {
5292 { "push{T|}", { es } },
c0f3af97
L
5293 },
5294
5295 /* X86_64_07 */
5296 {
5297 { "pop{T|}", { es } },
c0f3af97
L
5298 },
5299
5300 /* X86_64_0D */
5301 {
5302 { "push{T|}", { cs } },
c0f3af97
L
5303 },
5304
5305 /* X86_64_16 */
5306 {
5307 { "push{T|}", { ss } },
c0f3af97
L
5308 },
5309
5310 /* X86_64_17 */
5311 {
5312 { "pop{T|}", { ss } },
c0f3af97
L
5313 },
5314
5315 /* X86_64_1E */
5316 {
5317 { "push{T|}", { ds } },
c0f3af97
L
5318 },
5319
5320 /* X86_64_1F */
5321 {
5322 { "pop{T|}", { ds } },
c0f3af97
L
5323 },
5324
5325 /* X86_64_27 */
5326 {
5327 { "daa", { XX } },
c0f3af97
L
5328 },
5329
5330 /* X86_64_2F */
5331 {
5332 { "das", { XX } },
c0f3af97
L
5333 },
5334
5335 /* X86_64_37 */
5336 {
5337 { "aaa", { XX } },
c0f3af97
L
5338 },
5339
5340 /* X86_64_3F */
5341 {
5342 { "aas", { XX } },
c0f3af97
L
5343 },
5344
5345 /* X86_64_60 */
5346 {
5347 { "pusha{P|}", { XX } },
c0f3af97
L
5348 },
5349
5350 /* X86_64_61 */
5351 {
5352 { "popa{P|}", { XX } },
c0f3af97
L
5353 },
5354
5355 /* X86_64_62 */
5356 {
5357 { MOD_TABLE (MOD_62_32BIT) },
c0f3af97
L
5358 },
5359
5360 /* X86_64_63 */
5361 {
5362 { "arpl", { Ew, Gw } },
5363 { "movs{lq|xd}", { Gv, Ed } },
5364 },
5365
5366 /* X86_64_6D */
5367 {
5368 { "ins{R|}", { Yzr, indirDX } },
5369 { "ins{G|}", { Yzr, indirDX } },
5370 },
5371
5372 /* X86_64_6F */
5373 {
5374 { "outs{R|}", { indirDXr, Xz } },
5375 { "outs{G|}", { indirDXr, Xz } },
5376 },
5377
5378 /* X86_64_9A */
5379 {
5380 { "Jcall{T|}", { Ap } },
c0f3af97
L
5381 },
5382
5383 /* X86_64_C4 */
5384 {
5385 { MOD_TABLE (MOD_C4_32BIT) },
5386 { VEX_C4_TABLE (VEX_0F) },
5387 },
5388
5389 /* X86_64_C5 */
5390 {
5391 { MOD_TABLE (MOD_C5_32BIT) },
5392 { VEX_C5_TABLE (VEX_0F) },
5393 },
5394
5395 /* X86_64_CE */
5396 {
5397 { "into", { XX } },
c0f3af97
L
5398 },
5399
5400 /* X86_64_D4 */
5401 {
5402 { "aam", { sIb } },
c0f3af97
L
5403 },
5404
5405 /* X86_64_D5 */
5406 {
5407 { "aad", { sIb } },
c0f3af97
L
5408 },
5409
5410 /* X86_64_EA */
5411 {
5412 { "Jjmp{T|}", { Ap } },
c0f3af97
L
5413 },
5414
5415 /* X86_64_0F01_REG_0 */
5416 {
5417 { "sgdt{Q|IQ}", { M } },
5418 { "sgdt", { M } },
5419 },
5420
5421 /* X86_64_0F01_REG_1 */
5422 {
5423 { "sidt{Q|IQ}", { M } },
5424 { "sidt", { M } },
5425 },
5426
5427 /* X86_64_0F01_REG_2 */
5428 {
5429 { "lgdt{Q|Q}", { M } },
5430 { "lgdt", { M } },
5431 },
5432
5433 /* X86_64_0F01_REG_3 */
5434 {
5435 { "lidt{Q|Q}", { M } },
5436 { "lidt", { M } },
5437 },
5438};
5439
5440static const struct dis386 three_byte_table[][256] = {
c1e679ec
DR
5441
5442 /* THREE_BYTE_0F38 */
c0f3af97
L
5443 {
5444 /* 00 */
c1e679ec
DR
5445 { "pshufb", { MX, EM } },
5446 { "phaddw", { MX, EM } },
5447 { "phaddd", { MX, EM } },
5448 { "phaddsw", { MX, EM } },
5449 { "pmaddubsw", { MX, EM } },
5450 { "phsubw", { MX, EM } },
5451 { "phsubd", { MX, EM } },
5452 { "phsubsw", { MX, EM } },
c0f3af97 5453 /* 08 */
c1e679ec
DR
5454 { "psignb", { MX, EM } },
5455 { "psignw", { MX, EM } },
5456 { "psignd", { MX, EM } },
5457 { "pmulhrsw", { MX, EM } },
592d1631
L
5458 { Bad_Opcode },
5459 { Bad_Opcode },
5460 { Bad_Opcode },
5461 { Bad_Opcode },
f88c9eb0
SP
5462 /* 10 */
5463 { PREFIX_TABLE (PREFIX_0F3810) },
592d1631
L
5464 { Bad_Opcode },
5465 { Bad_Opcode },
5466 { Bad_Opcode },
f88c9eb0
SP
5467 { PREFIX_TABLE (PREFIX_0F3814) },
5468 { PREFIX_TABLE (PREFIX_0F3815) },
592d1631 5469 { Bad_Opcode },
f88c9eb0
SP
5470 { PREFIX_TABLE (PREFIX_0F3817) },
5471 /* 18 */
592d1631
L
5472 { Bad_Opcode },
5473 { Bad_Opcode },
5474 { Bad_Opcode },
5475 { Bad_Opcode },
f88c9eb0
SP
5476 { "pabsb", { MX, EM } },
5477 { "pabsw", { MX, EM } },
5478 { "pabsd", { MX, EM } },
592d1631 5479 { Bad_Opcode },
f88c9eb0
SP
5480 /* 20 */
5481 { PREFIX_TABLE (PREFIX_0F3820) },
5482 { PREFIX_TABLE (PREFIX_0F3821) },
5483 { PREFIX_TABLE (PREFIX_0F3822) },
5484 { PREFIX_TABLE (PREFIX_0F3823) },
5485 { PREFIX_TABLE (PREFIX_0F3824) },
5486 { PREFIX_TABLE (PREFIX_0F3825) },
592d1631
L
5487 { Bad_Opcode },
5488 { Bad_Opcode },
f88c9eb0
SP
5489 /* 28 */
5490 { PREFIX_TABLE (PREFIX_0F3828) },
5491 { PREFIX_TABLE (PREFIX_0F3829) },
5492 { PREFIX_TABLE (PREFIX_0F382A) },
5493 { PREFIX_TABLE (PREFIX_0F382B) },
592d1631
L
5494 { Bad_Opcode },
5495 { Bad_Opcode },
5496 { Bad_Opcode },
5497 { Bad_Opcode },
f88c9eb0
SP
5498 /* 30 */
5499 { PREFIX_TABLE (PREFIX_0F3830) },
5500 { PREFIX_TABLE (PREFIX_0F3831) },
5501 { PREFIX_TABLE (PREFIX_0F3832) },
5502 { PREFIX_TABLE (PREFIX_0F3833) },
5503 { PREFIX_TABLE (PREFIX_0F3834) },
5504 { PREFIX_TABLE (PREFIX_0F3835) },
592d1631 5505 { Bad_Opcode },
f88c9eb0
SP
5506 { PREFIX_TABLE (PREFIX_0F3837) },
5507 /* 38 */
5508 { PREFIX_TABLE (PREFIX_0F3838) },
5509 { PREFIX_TABLE (PREFIX_0F3839) },
5510 { PREFIX_TABLE (PREFIX_0F383A) },
5511 { PREFIX_TABLE (PREFIX_0F383B) },
5512 { PREFIX_TABLE (PREFIX_0F383C) },
5513 { PREFIX_TABLE (PREFIX_0F383D) },
5514 { PREFIX_TABLE (PREFIX_0F383E) },
5515 { PREFIX_TABLE (PREFIX_0F383F) },
5516 /* 40 */
5517 { PREFIX_TABLE (PREFIX_0F3840) },
5518 { PREFIX_TABLE (PREFIX_0F3841) },
592d1631
L
5519 { Bad_Opcode },
5520 { Bad_Opcode },
5521 { Bad_Opcode },
5522 { Bad_Opcode },
5523 { Bad_Opcode },
5524 { Bad_Opcode },
f88c9eb0 5525 /* 48 */
592d1631
L
5526 { Bad_Opcode },
5527 { Bad_Opcode },
5528 { Bad_Opcode },
5529 { Bad_Opcode },
5530 { Bad_Opcode },
5531 { Bad_Opcode },
5532 { Bad_Opcode },
5533 { Bad_Opcode },
f88c9eb0 5534 /* 50 */
592d1631
L
5535 { Bad_Opcode },
5536 { Bad_Opcode },
5537 { Bad_Opcode },
5538 { Bad_Opcode },
5539 { Bad_Opcode },
5540 { Bad_Opcode },
5541 { Bad_Opcode },
5542 { Bad_Opcode },
f88c9eb0 5543 /* 58 */
592d1631
L
5544 { Bad_Opcode },
5545 { Bad_Opcode },
5546 { Bad_Opcode },
5547 { Bad_Opcode },
5548 { Bad_Opcode },
5549 { Bad_Opcode },
5550 { Bad_Opcode },
5551 { Bad_Opcode },
f88c9eb0 5552 /* 60 */
592d1631
L
5553 { Bad_Opcode },
5554 { Bad_Opcode },
5555 { Bad_Opcode },
5556 { Bad_Opcode },
5557 { Bad_Opcode },
5558 { Bad_Opcode },
5559 { Bad_Opcode },
5560 { Bad_Opcode },
f88c9eb0 5561 /* 68 */
592d1631
L
5562 { Bad_Opcode },
5563 { Bad_Opcode },
5564 { Bad_Opcode },
5565 { Bad_Opcode },
5566 { Bad_Opcode },
5567 { Bad_Opcode },
5568 { Bad_Opcode },
5569 { Bad_Opcode },
f88c9eb0 5570 /* 70 */
592d1631
L
5571 { Bad_Opcode },
5572 { Bad_Opcode },
5573 { Bad_Opcode },
5574 { Bad_Opcode },
5575 { Bad_Opcode },
5576 { Bad_Opcode },
5577 { Bad_Opcode },
5578 { Bad_Opcode },
f88c9eb0 5579 /* 78 */
592d1631
L
5580 { Bad_Opcode },
5581 { Bad_Opcode },
5582 { Bad_Opcode },
5583 { Bad_Opcode },
5584 { Bad_Opcode },
5585 { Bad_Opcode },
5586 { Bad_Opcode },
5587 { Bad_Opcode },
f88c9eb0
SP
5588 /* 80 */
5589 { PREFIX_TABLE (PREFIX_0F3880) },
5590 { PREFIX_TABLE (PREFIX_0F3881) },
592d1631
L
5591 { Bad_Opcode },
5592 { Bad_Opcode },
5593 { Bad_Opcode },
5594 { Bad_Opcode },
5595 { Bad_Opcode },
5596 { Bad_Opcode },
f88c9eb0 5597 /* 88 */
592d1631
L
5598 { Bad_Opcode },
5599 { Bad_Opcode },
5600 { Bad_Opcode },
5601 { Bad_Opcode },
5602 { Bad_Opcode },
5603 { Bad_Opcode },
5604 { Bad_Opcode },
5605 { Bad_Opcode },
f88c9eb0 5606 /* 90 */
592d1631
L
5607 { Bad_Opcode },
5608 { Bad_Opcode },
5609 { Bad_Opcode },
5610 { Bad_Opcode },
5611 { Bad_Opcode },
5612 { Bad_Opcode },
5613 { Bad_Opcode },
5614 { Bad_Opcode },
f88c9eb0 5615 /* 98 */
592d1631
L
5616 { Bad_Opcode },
5617 { Bad_Opcode },
5618 { Bad_Opcode },
5619 { Bad_Opcode },
5620 { Bad_Opcode },
5621 { Bad_Opcode },
5622 { Bad_Opcode },
5623 { Bad_Opcode },
f88c9eb0 5624 /* a0 */
592d1631
L
5625 { Bad_Opcode },
5626 { Bad_Opcode },
5627 { Bad_Opcode },
5628 { Bad_Opcode },
5629 { Bad_Opcode },
5630 { Bad_Opcode },
5631 { Bad_Opcode },
5632 { Bad_Opcode },
f88c9eb0 5633 /* a8 */
592d1631
L
5634 { Bad_Opcode },
5635 { Bad_Opcode },
5636 { Bad_Opcode },
5637 { Bad_Opcode },
5638 { Bad_Opcode },
5639 { Bad_Opcode },
5640 { Bad_Opcode },
5641 { Bad_Opcode },
f88c9eb0 5642 /* b0 */
592d1631
L
5643 { Bad_Opcode },
5644 { Bad_Opcode },
5645 { Bad_Opcode },
5646 { Bad_Opcode },
5647 { Bad_Opcode },
5648 { Bad_Opcode },
5649 { Bad_Opcode },
5650 { Bad_Opcode },
f88c9eb0 5651 /* b8 */
592d1631
L
5652 { Bad_Opcode },
5653 { Bad_Opcode },
5654 { Bad_Opcode },
5655 { Bad_Opcode },
5656 { Bad_Opcode },
5657 { Bad_Opcode },
5658 { Bad_Opcode },
5659 { Bad_Opcode },
f88c9eb0 5660 /* c0 */
592d1631
L
5661 { Bad_Opcode },
5662 { Bad_Opcode },
5663 { Bad_Opcode },
5664 { Bad_Opcode },
5665 { Bad_Opcode },
5666 { Bad_Opcode },
5667 { Bad_Opcode },
5668 { Bad_Opcode },
f88c9eb0 5669 /* c8 */
592d1631
L
5670 { Bad_Opcode },
5671 { Bad_Opcode },
5672 { Bad_Opcode },
5673 { Bad_Opcode },
5674 { Bad_Opcode },
5675 { Bad_Opcode },
5676 { Bad_Opcode },
5677 { Bad_Opcode },
f88c9eb0 5678 /* d0 */
592d1631
L
5679 { Bad_Opcode },
5680 { Bad_Opcode },
5681 { Bad_Opcode },
5682 { Bad_Opcode },
5683 { Bad_Opcode },
5684 { Bad_Opcode },
5685 { Bad_Opcode },
5686 { Bad_Opcode },
f88c9eb0 5687 /* d8 */
592d1631
L
5688 { Bad_Opcode },
5689 { Bad_Opcode },
5690 { Bad_Opcode },
f88c9eb0
SP
5691 { PREFIX_TABLE (PREFIX_0F38DB) },
5692 { PREFIX_TABLE (PREFIX_0F38DC) },
5693 { PREFIX_TABLE (PREFIX_0F38DD) },
5694 { PREFIX_TABLE (PREFIX_0F38DE) },
5695 { PREFIX_TABLE (PREFIX_0F38DF) },
5696 /* e0 */
592d1631
L
5697 { Bad_Opcode },
5698 { Bad_Opcode },
5699 { Bad_Opcode },
5700 { Bad_Opcode },
5701 { Bad_Opcode },
5702 { Bad_Opcode },
5703 { Bad_Opcode },
5704 { Bad_Opcode },
f88c9eb0 5705 /* e8 */
592d1631
L
5706 { Bad_Opcode },
5707 { Bad_Opcode },
5708 { Bad_Opcode },
5709 { Bad_Opcode },
5710 { Bad_Opcode },
5711 { Bad_Opcode },
5712 { Bad_Opcode },
5713 { Bad_Opcode },
f88c9eb0
SP
5714 /* f0 */
5715 { PREFIX_TABLE (PREFIX_0F38F0) },
5716 { PREFIX_TABLE (PREFIX_0F38F1) },
592d1631
L
5717 { Bad_Opcode },
5718 { Bad_Opcode },
5719 { Bad_Opcode },
5720 { Bad_Opcode },
5721 { Bad_Opcode },
5722 { Bad_Opcode },
f88c9eb0 5723 /* f8 */
592d1631
L
5724 { Bad_Opcode },
5725 { Bad_Opcode },
5726 { Bad_Opcode },
5727 { Bad_Opcode },
5728 { Bad_Opcode },
5729 { Bad_Opcode },
5730 { Bad_Opcode },
5731 { Bad_Opcode },
f88c9eb0
SP
5732 },
5733 /* THREE_BYTE_0F3A */
5734 {
5735 /* 00 */
592d1631
L
5736 { Bad_Opcode },
5737 { Bad_Opcode },
5738 { Bad_Opcode },
5739 { Bad_Opcode },
5740 { Bad_Opcode },
5741 { Bad_Opcode },
5742 { Bad_Opcode },
5743 { Bad_Opcode },
f88c9eb0
SP
5744 /* 08 */
5745 { PREFIX_TABLE (PREFIX_0F3A08) },
5746 { PREFIX_TABLE (PREFIX_0F3A09) },
5747 { PREFIX_TABLE (PREFIX_0F3A0A) },
5748 { PREFIX_TABLE (PREFIX_0F3A0B) },
5749 { PREFIX_TABLE (PREFIX_0F3A0C) },
5750 { PREFIX_TABLE (PREFIX_0F3A0D) },
5751 { PREFIX_TABLE (PREFIX_0F3A0E) },
5752 { "palignr", { MX, EM, Ib } },
5753 /* 10 */
592d1631
L
5754 { Bad_Opcode },
5755 { Bad_Opcode },
5756 { Bad_Opcode },
5757 { Bad_Opcode },
f88c9eb0
SP
5758 { PREFIX_TABLE (PREFIX_0F3A14) },
5759 { PREFIX_TABLE (PREFIX_0F3A15) },
5760 { PREFIX_TABLE (PREFIX_0F3A16) },
5761 { PREFIX_TABLE (PREFIX_0F3A17) },
5762 /* 18 */
592d1631
L
5763 { Bad_Opcode },
5764 { Bad_Opcode },
5765 { Bad_Opcode },
5766 { Bad_Opcode },
5767 { Bad_Opcode },
5768 { Bad_Opcode },
5769 { Bad_Opcode },
5770 { Bad_Opcode },
f88c9eb0
SP
5771 /* 20 */
5772 { PREFIX_TABLE (PREFIX_0F3A20) },
5773 { PREFIX_TABLE (PREFIX_0F3A21) },
5774 { PREFIX_TABLE (PREFIX_0F3A22) },
592d1631
L
5775 { Bad_Opcode },
5776 { Bad_Opcode },
5777 { Bad_Opcode },
5778 { Bad_Opcode },
5779 { Bad_Opcode },
f88c9eb0 5780 /* 28 */
592d1631
L
5781 { Bad_Opcode },
5782 { Bad_Opcode },
5783 { Bad_Opcode },
5784 { Bad_Opcode },
5785 { Bad_Opcode },
5786 { Bad_Opcode },
5787 { Bad_Opcode },
5788 { Bad_Opcode },
f88c9eb0 5789 /* 30 */
592d1631
L
5790 { Bad_Opcode },
5791 { Bad_Opcode },
5792 { Bad_Opcode },
5793 { Bad_Opcode },
5794 { Bad_Opcode },
5795 { Bad_Opcode },
5796 { Bad_Opcode },
5797 { Bad_Opcode },
f88c9eb0 5798 /* 38 */
592d1631
L
5799 { Bad_Opcode },
5800 { Bad_Opcode },
5801 { Bad_Opcode },
5802 { Bad_Opcode },
5803 { Bad_Opcode },
5804 { Bad_Opcode },
5805 { Bad_Opcode },
5806 { Bad_Opcode },
f88c9eb0
SP
5807 /* 40 */
5808 { PREFIX_TABLE (PREFIX_0F3A40) },
5809 { PREFIX_TABLE (PREFIX_0F3A41) },
5810 { PREFIX_TABLE (PREFIX_0F3A42) },
592d1631 5811 { Bad_Opcode },
f88c9eb0 5812 { PREFIX_TABLE (PREFIX_0F3A44) },
592d1631
L
5813 { Bad_Opcode },
5814 { Bad_Opcode },
5815 { Bad_Opcode },
f88c9eb0 5816 /* 48 */
592d1631
L
5817 { Bad_Opcode },
5818 { Bad_Opcode },
5819 { Bad_Opcode },
5820 { Bad_Opcode },
5821 { Bad_Opcode },
5822 { Bad_Opcode },
5823 { Bad_Opcode },
5824 { Bad_Opcode },
f88c9eb0 5825 /* 50 */
592d1631
L
5826 { Bad_Opcode },
5827 { Bad_Opcode },
5828 { Bad_Opcode },
5829 { Bad_Opcode },
5830 { Bad_Opcode },
5831 { Bad_Opcode },
5832 { Bad_Opcode },
5833 { Bad_Opcode },
f88c9eb0 5834 /* 58 */
592d1631
L
5835 { Bad_Opcode },
5836 { Bad_Opcode },
5837 { Bad_Opcode },
5838 { Bad_Opcode },
5839 { Bad_Opcode },
5840 { Bad_Opcode },
5841 { Bad_Opcode },
5842 { Bad_Opcode },
f88c9eb0
SP
5843 /* 60 */
5844 { PREFIX_TABLE (PREFIX_0F3A60) },
5845 { PREFIX_TABLE (PREFIX_0F3A61) },
5846 { PREFIX_TABLE (PREFIX_0F3A62) },
5847 { PREFIX_TABLE (PREFIX_0F3A63) },
592d1631
L
5848 { Bad_Opcode },
5849 { Bad_Opcode },
5850 { Bad_Opcode },
5851 { Bad_Opcode },
f88c9eb0 5852 /* 68 */
592d1631
L
5853 { Bad_Opcode },
5854 { Bad_Opcode },
5855 { Bad_Opcode },
5856 { Bad_Opcode },
5857 { Bad_Opcode },
5858 { Bad_Opcode },
5859 { Bad_Opcode },
5860 { Bad_Opcode },
f88c9eb0 5861 /* 70 */
592d1631
L
5862 { Bad_Opcode },
5863 { Bad_Opcode },
5864 { Bad_Opcode },
5865 { Bad_Opcode },
5866 { Bad_Opcode },
5867 { Bad_Opcode },
5868 { Bad_Opcode },
5869 { Bad_Opcode },
f88c9eb0 5870 /* 78 */
592d1631
L
5871 { Bad_Opcode },
5872 { Bad_Opcode },
5873 { Bad_Opcode },
5874 { Bad_Opcode },
5875 { Bad_Opcode },
5876 { Bad_Opcode },
5877 { Bad_Opcode },
5878 { Bad_Opcode },
f88c9eb0 5879 /* 80 */
592d1631
L
5880 { Bad_Opcode },
5881 { Bad_Opcode },
5882 { Bad_Opcode },
5883 { Bad_Opcode },
5884 { Bad_Opcode },
5885 { Bad_Opcode },
5886 { Bad_Opcode },
5887 { Bad_Opcode },
f88c9eb0 5888 /* 88 */
592d1631
L
5889 { Bad_Opcode },
5890 { Bad_Opcode },
5891 { Bad_Opcode },
5892 { Bad_Opcode },
5893 { Bad_Opcode },
5894 { Bad_Opcode },
5895 { Bad_Opcode },
5896 { Bad_Opcode },
f88c9eb0 5897 /* 90 */
592d1631
L
5898 { Bad_Opcode },
5899 { Bad_Opcode },
5900 { Bad_Opcode },
5901 { Bad_Opcode },
5902 { Bad_Opcode },
5903 { Bad_Opcode },
5904 { Bad_Opcode },
5905 { Bad_Opcode },
f88c9eb0 5906 /* 98 */
592d1631
L
5907 { Bad_Opcode },
5908 { Bad_Opcode },
5909 { Bad_Opcode },
5910 { Bad_Opcode },
5911 { Bad_Opcode },
5912 { Bad_Opcode },
5913 { Bad_Opcode },
5914 { Bad_Opcode },
f88c9eb0 5915 /* a0 */
592d1631
L
5916 { Bad_Opcode },
5917 { Bad_Opcode },
5918 { Bad_Opcode },
5919 { Bad_Opcode },
5920 { Bad_Opcode },
5921 { Bad_Opcode },
5922 { Bad_Opcode },
5923 { Bad_Opcode },
f88c9eb0 5924 /* a8 */
592d1631
L
5925 { Bad_Opcode },
5926 { Bad_Opcode },
5927 { Bad_Opcode },
5928 { Bad_Opcode },
5929 { Bad_Opcode },
5930 { Bad_Opcode },
5931 { Bad_Opcode },
5932 { Bad_Opcode },
f88c9eb0 5933 /* b0 */
592d1631
L
5934 { Bad_Opcode },
5935 { Bad_Opcode },
5936 { Bad_Opcode },
5937 { Bad_Opcode },
5938 { Bad_Opcode },
5939 { Bad_Opcode },
5940 { Bad_Opcode },
5941 { Bad_Opcode },
f88c9eb0 5942 /* b8 */
592d1631
L
5943 { Bad_Opcode },
5944 { Bad_Opcode },
5945 { Bad_Opcode },
5946 { Bad_Opcode },
5947 { Bad_Opcode },
5948 { Bad_Opcode },
5949 { Bad_Opcode },
5950 { Bad_Opcode },
f88c9eb0 5951 /* c0 */
592d1631
L
5952 { Bad_Opcode },
5953 { Bad_Opcode },
5954 { Bad_Opcode },
5955 { Bad_Opcode },
5956 { Bad_Opcode },
5957 { Bad_Opcode },
5958 { Bad_Opcode },
5959 { Bad_Opcode },
f88c9eb0 5960 /* c8 */
592d1631
L
5961 { Bad_Opcode },
5962 { Bad_Opcode },
5963 { Bad_Opcode },
5964 { Bad_Opcode },
5965 { Bad_Opcode },
5966 { Bad_Opcode },
5967 { Bad_Opcode },
5968 { Bad_Opcode },
f88c9eb0 5969 /* d0 */
592d1631
L
5970 { Bad_Opcode },
5971 { Bad_Opcode },
5972 { Bad_Opcode },
5973 { Bad_Opcode },
5974 { Bad_Opcode },
5975 { Bad_Opcode },
5976 { Bad_Opcode },
5977 { Bad_Opcode },
f88c9eb0 5978 /* d8 */
592d1631
L
5979 { Bad_Opcode },
5980 { Bad_Opcode },
5981 { Bad_Opcode },
5982 { Bad_Opcode },
5983 { Bad_Opcode },
5984 { Bad_Opcode },
5985 { Bad_Opcode },
f88c9eb0
SP
5986 { PREFIX_TABLE (PREFIX_0F3ADF) },
5987 /* e0 */
592d1631
L
5988 { Bad_Opcode },
5989 { Bad_Opcode },
5990 { Bad_Opcode },
5991 { Bad_Opcode },
5992 { Bad_Opcode },
5993 { Bad_Opcode },
5994 { Bad_Opcode },
5995 { Bad_Opcode },
f88c9eb0 5996 /* e8 */
592d1631
L
5997 { Bad_Opcode },
5998 { Bad_Opcode },
5999 { Bad_Opcode },
6000 { Bad_Opcode },
6001 { Bad_Opcode },
6002 { Bad_Opcode },
6003 { Bad_Opcode },
6004 { Bad_Opcode },
f88c9eb0 6005 /* f0 */
592d1631
L
6006 { Bad_Opcode },
6007 { Bad_Opcode },
6008 { Bad_Opcode },
6009 { Bad_Opcode },
6010 { Bad_Opcode },
6011 { Bad_Opcode },
6012 { Bad_Opcode },
6013 { Bad_Opcode },
f88c9eb0 6014 /* f8 */
592d1631
L
6015 { Bad_Opcode },
6016 { Bad_Opcode },
6017 { Bad_Opcode },
6018 { Bad_Opcode },
6019 { Bad_Opcode },
6020 { Bad_Opcode },
6021 { Bad_Opcode },
6022 { Bad_Opcode },
f88c9eb0
SP
6023 },
6024
6025 /* THREE_BYTE_0F7A */
6026 {
6027 /* 00 */
592d1631
L
6028 { Bad_Opcode },
6029 { Bad_Opcode },
6030 { Bad_Opcode },
6031 { Bad_Opcode },
6032 { Bad_Opcode },
6033 { Bad_Opcode },
6034 { Bad_Opcode },
6035 { Bad_Opcode },
f88c9eb0 6036 /* 08 */
592d1631
L
6037 { Bad_Opcode },
6038 { Bad_Opcode },
6039 { Bad_Opcode },
6040 { Bad_Opcode },
6041 { Bad_Opcode },
6042 { Bad_Opcode },
6043 { Bad_Opcode },
6044 { Bad_Opcode },
f88c9eb0 6045 /* 10 */
592d1631
L
6046 { Bad_Opcode },
6047 { Bad_Opcode },
6048 { Bad_Opcode },
6049 { Bad_Opcode },
6050 { Bad_Opcode },
6051 { Bad_Opcode },
6052 { Bad_Opcode },
6053 { Bad_Opcode },
f88c9eb0 6054 /* 18 */
592d1631
L
6055 { Bad_Opcode },
6056 { Bad_Opcode },
6057 { Bad_Opcode },
6058 { Bad_Opcode },
6059 { Bad_Opcode },
6060 { Bad_Opcode },
6061 { Bad_Opcode },
6062 { Bad_Opcode },
f88c9eb0
SP
6063 /* 20 */
6064 { "ptest", { XX } },
592d1631
L
6065 { Bad_Opcode },
6066 { Bad_Opcode },
6067 { Bad_Opcode },
6068 { Bad_Opcode },
6069 { Bad_Opcode },
6070 { Bad_Opcode },
6071 { Bad_Opcode },
f88c9eb0 6072 /* 28 */
592d1631
L
6073 { Bad_Opcode },
6074 { Bad_Opcode },
6075 { Bad_Opcode },
6076 { Bad_Opcode },
6077 { Bad_Opcode },
6078 { Bad_Opcode },
6079 { Bad_Opcode },
6080 { Bad_Opcode },
f88c9eb0 6081 /* 30 */
592d1631
L
6082 { Bad_Opcode },
6083 { Bad_Opcode },
6084 { Bad_Opcode },
6085 { Bad_Opcode },
6086 { Bad_Opcode },
6087 { Bad_Opcode },
6088 { Bad_Opcode },
6089 { Bad_Opcode },
f88c9eb0 6090 /* 38 */
592d1631
L
6091 { Bad_Opcode },
6092 { Bad_Opcode },
6093 { Bad_Opcode },
6094 { Bad_Opcode },
6095 { Bad_Opcode },
6096 { Bad_Opcode },
6097 { Bad_Opcode },
6098 { Bad_Opcode },
f88c9eb0 6099 /* 40 */
592d1631 6100 { Bad_Opcode },
f88c9eb0
SP
6101 { "phaddbw", { XM, EXq } },
6102 { "phaddbd", { XM, EXq } },
6103 { "phaddbq", { XM, EXq } },
592d1631
L
6104 { Bad_Opcode },
6105 { Bad_Opcode },
f88c9eb0
SP
6106 { "phaddwd", { XM, EXq } },
6107 { "phaddwq", { XM, EXq } },
6108 /* 48 */
592d1631
L
6109 { Bad_Opcode },
6110 { Bad_Opcode },
6111 { Bad_Opcode },
f88c9eb0 6112 { "phadddq", { XM, EXq } },
592d1631
L
6113 { Bad_Opcode },
6114 { Bad_Opcode },
6115 { Bad_Opcode },
6116 { Bad_Opcode },
f88c9eb0 6117 /* 50 */
592d1631 6118 { Bad_Opcode },
f88c9eb0
SP
6119 { "phaddubw", { XM, EXq } },
6120 { "phaddubd", { XM, EXq } },
6121 { "phaddubq", { XM, EXq } },
592d1631
L
6122 { Bad_Opcode },
6123 { Bad_Opcode },
f88c9eb0
SP
6124 { "phadduwd", { XM, EXq } },
6125 { "phadduwq", { XM, EXq } },
6126 /* 58 */
592d1631
L
6127 { Bad_Opcode },
6128 { Bad_Opcode },
6129 { Bad_Opcode },
f88c9eb0 6130 { "phaddudq", { XM, EXq } },
592d1631
L
6131 { Bad_Opcode },
6132 { Bad_Opcode },
6133 { Bad_Opcode },
6134 { Bad_Opcode },
f88c9eb0 6135 /* 60 */
592d1631 6136 { Bad_Opcode },
f88c9eb0
SP
6137 { "phsubbw", { XM, EXq } },
6138 { "phsubbd", { XM, EXq } },
6139 { "phsubbq", { XM, EXq } },
592d1631
L
6140 { Bad_Opcode },
6141 { Bad_Opcode },
6142 { Bad_Opcode },
6143 { Bad_Opcode },
4e7d34a6 6144 /* 68 */
592d1631
L
6145 { Bad_Opcode },
6146 { Bad_Opcode },
6147 { Bad_Opcode },
6148 { Bad_Opcode },
6149 { Bad_Opcode },
6150 { Bad_Opcode },
6151 { Bad_Opcode },
6152 { Bad_Opcode },
85f10a01 6153 /* 70 */
592d1631
L
6154 { Bad_Opcode },
6155 { Bad_Opcode },
6156 { Bad_Opcode },
6157 { Bad_Opcode },
6158 { Bad_Opcode },
6159 { Bad_Opcode },
6160 { Bad_Opcode },
6161 { Bad_Opcode },
85f10a01 6162 /* 78 */
592d1631
L
6163 { Bad_Opcode },
6164 { Bad_Opcode },
6165 { Bad_Opcode },
6166 { Bad_Opcode },
6167 { Bad_Opcode },
6168 { Bad_Opcode },
6169 { Bad_Opcode },
6170 { Bad_Opcode },
85f10a01 6171 /* 80 */
592d1631
L
6172 { Bad_Opcode },
6173 { Bad_Opcode },
6174 { Bad_Opcode },
6175 { Bad_Opcode },
6176 { Bad_Opcode },
6177 { Bad_Opcode },
6178 { Bad_Opcode },
6179 { Bad_Opcode },
85f10a01 6180 /* 88 */
592d1631
L
6181 { Bad_Opcode },
6182 { Bad_Opcode },
6183 { Bad_Opcode },
6184 { Bad_Opcode },
6185 { Bad_Opcode },
6186 { Bad_Opcode },
6187 { Bad_Opcode },
6188 { Bad_Opcode },
85f10a01 6189 /* 90 */
592d1631
L
6190 { Bad_Opcode },
6191 { Bad_Opcode },
6192 { Bad_Opcode },
6193 { Bad_Opcode },
6194 { Bad_Opcode },
6195 { Bad_Opcode },
6196 { Bad_Opcode },
6197 { Bad_Opcode },
85f10a01 6198 /* 98 */
592d1631
L
6199 { Bad_Opcode },
6200 { Bad_Opcode },
6201 { Bad_Opcode },
6202 { Bad_Opcode },
6203 { Bad_Opcode },
6204 { Bad_Opcode },
6205 { Bad_Opcode },
6206 { Bad_Opcode },
85f10a01 6207 /* a0 */
592d1631
L
6208 { Bad_Opcode },
6209 { Bad_Opcode },
6210 { Bad_Opcode },
6211 { Bad_Opcode },
6212 { Bad_Opcode },
6213 { Bad_Opcode },
6214 { Bad_Opcode },
6215 { Bad_Opcode },
85f10a01 6216 /* a8 */
592d1631
L
6217 { Bad_Opcode },
6218 { Bad_Opcode },
6219 { Bad_Opcode },
6220 { Bad_Opcode },
6221 { Bad_Opcode },
6222 { Bad_Opcode },
6223 { Bad_Opcode },
6224 { Bad_Opcode },
85f10a01 6225 /* b0 */
592d1631
L
6226 { Bad_Opcode },
6227 { Bad_Opcode },
6228 { Bad_Opcode },
6229 { Bad_Opcode },
6230 { Bad_Opcode },
6231 { Bad_Opcode },
6232 { Bad_Opcode },
6233 { Bad_Opcode },
85f10a01 6234 /* b8 */
592d1631
L
6235 { Bad_Opcode },
6236 { Bad_Opcode },
6237 { Bad_Opcode },
6238 { Bad_Opcode },
6239 { Bad_Opcode },
6240 { Bad_Opcode },
6241 { Bad_Opcode },
6242 { Bad_Opcode },
85f10a01 6243 /* c0 */
592d1631
L
6244 { Bad_Opcode },
6245 { Bad_Opcode },
6246 { Bad_Opcode },
6247 { Bad_Opcode },
6248 { Bad_Opcode },
6249 { Bad_Opcode },
6250 { Bad_Opcode },
6251 { Bad_Opcode },
85f10a01 6252 /* c8 */
592d1631
L
6253 { Bad_Opcode },
6254 { Bad_Opcode },
6255 { Bad_Opcode },
6256 { Bad_Opcode },
6257 { Bad_Opcode },
6258 { Bad_Opcode },
6259 { Bad_Opcode },
6260 { Bad_Opcode },
85f10a01 6261 /* d0 */
592d1631
L
6262 { Bad_Opcode },
6263 { Bad_Opcode },
6264 { Bad_Opcode },
6265 { Bad_Opcode },
6266 { Bad_Opcode },
6267 { Bad_Opcode },
6268 { Bad_Opcode },
6269 { Bad_Opcode },
85f10a01 6270 /* d8 */
592d1631
L
6271 { Bad_Opcode },
6272 { Bad_Opcode },
6273 { Bad_Opcode },
6274 { Bad_Opcode },
6275 { Bad_Opcode },
6276 { Bad_Opcode },
6277 { Bad_Opcode },
6278 { Bad_Opcode },
85f10a01 6279 /* e0 */
592d1631
L
6280 { Bad_Opcode },
6281 { Bad_Opcode },
6282 { Bad_Opcode },
6283 { Bad_Opcode },
6284 { Bad_Opcode },
6285 { Bad_Opcode },
6286 { Bad_Opcode },
6287 { Bad_Opcode },
85f10a01 6288 /* e8 */
592d1631
L
6289 { Bad_Opcode },
6290 { Bad_Opcode },
6291 { Bad_Opcode },
6292 { Bad_Opcode },
6293 { Bad_Opcode },
6294 { Bad_Opcode },
6295 { Bad_Opcode },
6296 { Bad_Opcode },
85f10a01 6297 /* f0 */
592d1631
L
6298 { Bad_Opcode },
6299 { Bad_Opcode },
6300 { Bad_Opcode },
6301 { Bad_Opcode },
6302 { Bad_Opcode },
6303 { Bad_Opcode },
6304 { Bad_Opcode },
6305 { Bad_Opcode },
85f10a01 6306 /* f8 */
592d1631
L
6307 { Bad_Opcode },
6308 { Bad_Opcode },
6309 { Bad_Opcode },
6310 { Bad_Opcode },
6311 { Bad_Opcode },
6312 { Bad_Opcode },
6313 { Bad_Opcode },
6314 { Bad_Opcode },
85f10a01 6315 },
f88c9eb0
SP
6316};
6317
6318static const struct dis386 xop_table[][256] = {
5dd85c99 6319 /* XOP_08 */
85f10a01
MM
6320 {
6321 /* 00 */
592d1631
L
6322 { Bad_Opcode },
6323 { Bad_Opcode },
6324 { Bad_Opcode },
6325 { Bad_Opcode },
6326 { Bad_Opcode },
6327 { Bad_Opcode },
6328 { Bad_Opcode },
6329 { Bad_Opcode },
85f10a01 6330 /* 08 */
592d1631
L
6331 { Bad_Opcode },
6332 { Bad_Opcode },
6333 { Bad_Opcode },
6334 { Bad_Opcode },
6335 { Bad_Opcode },
6336 { Bad_Opcode },
6337 { Bad_Opcode },
6338 { Bad_Opcode },
85f10a01 6339 /* 10 */
592d1631
L
6340 { Bad_Opcode },
6341 { Bad_Opcode },
6342 { Bad_Opcode },
6343 { Bad_Opcode },
6344 { Bad_Opcode },
6345 { Bad_Opcode },
6346 { Bad_Opcode },
6347 { Bad_Opcode },
85f10a01 6348 /* 18 */
592d1631
L
6349 { Bad_Opcode },
6350 { Bad_Opcode },
6351 { Bad_Opcode },
6352 { Bad_Opcode },
6353 { Bad_Opcode },
6354 { Bad_Opcode },
6355 { Bad_Opcode },
6356 { Bad_Opcode },
85f10a01 6357 /* 20 */
592d1631
L
6358 { Bad_Opcode },
6359 { Bad_Opcode },
6360 { Bad_Opcode },
6361 { Bad_Opcode },
6362 { Bad_Opcode },
6363 { Bad_Opcode },
6364 { Bad_Opcode },
6365 { Bad_Opcode },
85f10a01 6366 /* 28 */
592d1631
L
6367 { Bad_Opcode },
6368 { Bad_Opcode },
6369 { Bad_Opcode },
6370 { Bad_Opcode },
6371 { Bad_Opcode },
6372 { Bad_Opcode },
6373 { Bad_Opcode },
6374 { Bad_Opcode },
c0f3af97 6375 /* 30 */
592d1631
L
6376 { Bad_Opcode },
6377 { Bad_Opcode },
6378 { Bad_Opcode },
6379 { Bad_Opcode },
6380 { Bad_Opcode },
6381 { Bad_Opcode },
6382 { Bad_Opcode },
6383 { Bad_Opcode },
c0f3af97 6384 /* 38 */
592d1631
L
6385 { Bad_Opcode },
6386 { Bad_Opcode },
6387 { Bad_Opcode },
6388 { Bad_Opcode },
6389 { Bad_Opcode },
6390 { Bad_Opcode },
6391 { Bad_Opcode },
6392 { Bad_Opcode },
c0f3af97 6393 /* 40 */
592d1631
L
6394 { Bad_Opcode },
6395 { Bad_Opcode },
6396 { Bad_Opcode },
6397 { Bad_Opcode },
6398 { Bad_Opcode },
6399 { Bad_Opcode },
6400 { Bad_Opcode },
6401 { Bad_Opcode },
85f10a01 6402 /* 48 */
592d1631
L
6403 { Bad_Opcode },
6404 { Bad_Opcode },
6405 { Bad_Opcode },
6406 { Bad_Opcode },
6407 { Bad_Opcode },
6408 { Bad_Opcode },
6409 { Bad_Opcode },
6410 { Bad_Opcode },
c0f3af97 6411 /* 50 */
592d1631
L
6412 { Bad_Opcode },
6413 { Bad_Opcode },
6414 { Bad_Opcode },
6415 { Bad_Opcode },
6416 { Bad_Opcode },
6417 { Bad_Opcode },
6418 { Bad_Opcode },
6419 { Bad_Opcode },
85f10a01 6420 /* 58 */
592d1631
L
6421 { Bad_Opcode },
6422 { Bad_Opcode },
6423 { Bad_Opcode },
6424 { Bad_Opcode },
6425 { Bad_Opcode },
6426 { Bad_Opcode },
6427 { Bad_Opcode },
6428 { Bad_Opcode },
c1e679ec 6429 /* 60 */
592d1631
L
6430 { Bad_Opcode },
6431 { Bad_Opcode },
6432 { Bad_Opcode },
6433 { Bad_Opcode },
6434 { Bad_Opcode },
6435 { Bad_Opcode },
6436 { Bad_Opcode },
6437 { Bad_Opcode },
c0f3af97 6438 /* 68 */
592d1631
L
6439 { Bad_Opcode },
6440 { Bad_Opcode },
6441 { Bad_Opcode },
6442 { Bad_Opcode },
6443 { Bad_Opcode },
6444 { Bad_Opcode },
6445 { Bad_Opcode },
6446 { Bad_Opcode },
85f10a01 6447 /* 70 */
592d1631
L
6448 { Bad_Opcode },
6449 { Bad_Opcode },
6450 { Bad_Opcode },
6451 { Bad_Opcode },
6452 { Bad_Opcode },
6453 { Bad_Opcode },
6454 { Bad_Opcode },
6455 { Bad_Opcode },
85f10a01 6456 /* 78 */
592d1631
L
6457 { Bad_Opcode },
6458 { Bad_Opcode },
6459 { Bad_Opcode },
6460 { Bad_Opcode },
6461 { Bad_Opcode },
6462 { Bad_Opcode },
6463 { Bad_Opcode },
6464 { Bad_Opcode },
85f10a01 6465 /* 80 */
592d1631
L
6466 { Bad_Opcode },
6467 { Bad_Opcode },
6468 { Bad_Opcode },
6469 { Bad_Opcode },
6470 { Bad_Opcode },
5dd85c99
SP
6471 { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6472 { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6473 { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6474 /* 88 */
592d1631
L
6475 { Bad_Opcode },
6476 { Bad_Opcode },
6477 { Bad_Opcode },
6478 { Bad_Opcode },
6479 { Bad_Opcode },
6480 { Bad_Opcode },
5dd85c99
SP
6481 { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6482 { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6483 /* 90 */
592d1631
L
6484 { Bad_Opcode },
6485 { Bad_Opcode },
6486 { Bad_Opcode },
6487 { Bad_Opcode },
6488 { Bad_Opcode },
5dd85c99
SP
6489 { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6490 { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6491 { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6492 /* 98 */
592d1631
L
6493 { Bad_Opcode },
6494 { Bad_Opcode },
6495 { Bad_Opcode },
6496 { Bad_Opcode },
6497 { Bad_Opcode },
6498 { Bad_Opcode },
5dd85c99
SP
6499 { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6500 { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6501 /* a0 */
592d1631
L
6502 { Bad_Opcode },
6503 { Bad_Opcode },
5dd85c99
SP
6504 { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6505 { "vpperm", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631
L
6506 { Bad_Opcode },
6507 { Bad_Opcode },
5dd85c99 6508 { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631 6509 { Bad_Opcode },
5dd85c99 6510 /* a8 */
592d1631
L
6511 { Bad_Opcode },
6512 { Bad_Opcode },
6513 { Bad_Opcode },
6514 { Bad_Opcode },
6515 { Bad_Opcode },
6516 { Bad_Opcode },
6517 { Bad_Opcode },
6518 { Bad_Opcode },
5dd85c99 6519 /* b0 */
592d1631
L
6520 { Bad_Opcode },
6521 { Bad_Opcode },
6522 { Bad_Opcode },
6523 { Bad_Opcode },
6524 { Bad_Opcode },
6525 { Bad_Opcode },
5dd85c99 6526 { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631 6527 { Bad_Opcode },
5dd85c99 6528 /* b8 */
592d1631
L
6529 { Bad_Opcode },
6530 { Bad_Opcode },
6531 { Bad_Opcode },
6532 { Bad_Opcode },
6533 { Bad_Opcode },
6534 { Bad_Opcode },
6535 { Bad_Opcode },
6536 { Bad_Opcode },
5dd85c99
SP
6537 /* c0 */
6538 { "vprotb", { XM, Vex_2src_1, Ib } },
6539 { "vprotw", { XM, Vex_2src_1, Ib } },
6540 { "vprotd", { XM, Vex_2src_1, Ib } },
6541 { "vprotq", { XM, Vex_2src_1, Ib } },
592d1631
L
6542 { Bad_Opcode },
6543 { Bad_Opcode },
6544 { Bad_Opcode },
6545 { Bad_Opcode },
5dd85c99 6546 /* c8 */
592d1631
L
6547 { Bad_Opcode },
6548 { Bad_Opcode },
6549 { Bad_Opcode },
6550 { Bad_Opcode },
5dd85c99
SP
6551 { "vpcomb", { XM, Vex128, EXx, Ib } },
6552 { "vpcomw", { XM, Vex128, EXx, Ib } },
6553 { "vpcomd", { XM, Vex128, EXx, Ib } },
6554 { "vpcomq", { XM, Vex128, EXx, Ib } },
6555 /* d0 */
592d1631
L
6556 { Bad_Opcode },
6557 { Bad_Opcode },
6558 { Bad_Opcode },
6559 { Bad_Opcode },
6560 { Bad_Opcode },
6561 { Bad_Opcode },
6562 { Bad_Opcode },
6563 { Bad_Opcode },
5dd85c99 6564 /* d8 */
592d1631
L
6565 { Bad_Opcode },
6566 { Bad_Opcode },
6567 { Bad_Opcode },
6568 { Bad_Opcode },
6569 { Bad_Opcode },
6570 { Bad_Opcode },
6571 { Bad_Opcode },
6572 { Bad_Opcode },
5dd85c99 6573 /* e0 */
592d1631
L
6574 { Bad_Opcode },
6575 { Bad_Opcode },
6576 { Bad_Opcode },
6577 { Bad_Opcode },
6578 { Bad_Opcode },
6579 { Bad_Opcode },
6580 { Bad_Opcode },
6581 { Bad_Opcode },
5dd85c99 6582 /* e8 */
592d1631
L
6583 { Bad_Opcode },
6584 { Bad_Opcode },
6585 { Bad_Opcode },
6586 { Bad_Opcode },
5dd85c99
SP
6587 { "vpcomub", { XM, Vex128, EXx, Ib } },
6588 { "vpcomuw", { XM, Vex128, EXx, Ib } },
6589 { "vpcomud", { XM, Vex128, EXx, Ib } },
6590 { "vpcomuq", { XM, Vex128, EXx, Ib } },
6591 /* f0 */
592d1631
L
6592 { Bad_Opcode },
6593 { Bad_Opcode },
6594 { Bad_Opcode },
6595 { Bad_Opcode },
6596 { Bad_Opcode },
6597 { Bad_Opcode },
6598 { Bad_Opcode },
6599 { Bad_Opcode },
5dd85c99 6600 /* f8 */
592d1631
L
6601 { Bad_Opcode },
6602 { Bad_Opcode },
6603 { Bad_Opcode },
6604 { Bad_Opcode },
6605 { Bad_Opcode },
6606 { Bad_Opcode },
6607 { Bad_Opcode },
6608 { Bad_Opcode },
5dd85c99
SP
6609 },
6610 /* XOP_09 */
6611 {
6612 /* 00 */
592d1631
L
6613 { Bad_Opcode },
6614 { Bad_Opcode },
6615 { Bad_Opcode },
6616 { Bad_Opcode },
6617 { Bad_Opcode },
6618 { Bad_Opcode },
6619 { Bad_Opcode },
6620 { Bad_Opcode },
5dd85c99 6621 /* 08 */
592d1631
L
6622 { Bad_Opcode },
6623 { Bad_Opcode },
6624 { Bad_Opcode },
6625 { Bad_Opcode },
6626 { Bad_Opcode },
6627 { Bad_Opcode },
6628 { Bad_Opcode },
6629 { Bad_Opcode },
5dd85c99 6630 /* 10 */
592d1631
L
6631 { Bad_Opcode },
6632 { Bad_Opcode },
5dd85c99 6633 { REG_TABLE (REG_XOP_LWPCB) },
592d1631
L
6634 { Bad_Opcode },
6635 { Bad_Opcode },
6636 { Bad_Opcode },
6637 { Bad_Opcode },
6638 { Bad_Opcode },
5dd85c99 6639 /* 18 */
592d1631
L
6640 { Bad_Opcode },
6641 { Bad_Opcode },
6642 { Bad_Opcode },
6643 { Bad_Opcode },
6644 { Bad_Opcode },
6645 { Bad_Opcode },
6646 { Bad_Opcode },
6647 { Bad_Opcode },
5dd85c99 6648 /* 20 */
592d1631
L
6649 { Bad_Opcode },
6650 { Bad_Opcode },
6651 { Bad_Opcode },
6652 { Bad_Opcode },
6653 { Bad_Opcode },
6654 { Bad_Opcode },
6655 { Bad_Opcode },
6656 { Bad_Opcode },
5dd85c99 6657 /* 28 */
592d1631
L
6658 { Bad_Opcode },
6659 { Bad_Opcode },
6660 { Bad_Opcode },
6661 { Bad_Opcode },
6662 { Bad_Opcode },
6663 { Bad_Opcode },
6664 { Bad_Opcode },
6665 { Bad_Opcode },
5dd85c99 6666 /* 30 */
592d1631
L
6667 { Bad_Opcode },
6668 { Bad_Opcode },
6669 { Bad_Opcode },
6670 { Bad_Opcode },
6671 { Bad_Opcode },
6672 { Bad_Opcode },
6673 { Bad_Opcode },
6674 { Bad_Opcode },
5dd85c99 6675 /* 38 */
592d1631
L
6676 { Bad_Opcode },
6677 { Bad_Opcode },
6678 { Bad_Opcode },
6679 { Bad_Opcode },
6680 { Bad_Opcode },
6681 { Bad_Opcode },
6682 { Bad_Opcode },
6683 { Bad_Opcode },
5dd85c99 6684 /* 40 */
592d1631
L
6685 { Bad_Opcode },
6686 { Bad_Opcode },
6687 { Bad_Opcode },
6688 { Bad_Opcode },
6689 { Bad_Opcode },
6690 { Bad_Opcode },
6691 { Bad_Opcode },
6692 { Bad_Opcode },
5dd85c99 6693 /* 48 */
592d1631
L
6694 { Bad_Opcode },
6695 { Bad_Opcode },
6696 { Bad_Opcode },
6697 { Bad_Opcode },
6698 { Bad_Opcode },
6699 { Bad_Opcode },
6700 { Bad_Opcode },
6701 { Bad_Opcode },
5dd85c99 6702 /* 50 */
592d1631
L
6703 { Bad_Opcode },
6704 { Bad_Opcode },
6705 { Bad_Opcode },
6706 { Bad_Opcode },
6707 { Bad_Opcode },
6708 { Bad_Opcode },
6709 { Bad_Opcode },
6710 { Bad_Opcode },
5dd85c99 6711 /* 58 */
592d1631
L
6712 { Bad_Opcode },
6713 { Bad_Opcode },
6714 { Bad_Opcode },
6715 { Bad_Opcode },
6716 { Bad_Opcode },
6717 { Bad_Opcode },
6718 { Bad_Opcode },
6719 { Bad_Opcode },
5dd85c99 6720 /* 60 */
592d1631
L
6721 { Bad_Opcode },
6722 { Bad_Opcode },
6723 { Bad_Opcode },
6724 { Bad_Opcode },
6725 { Bad_Opcode },
6726 { Bad_Opcode },
6727 { Bad_Opcode },
6728 { Bad_Opcode },
5dd85c99 6729 /* 68 */
592d1631
L
6730 { Bad_Opcode },
6731 { Bad_Opcode },
6732 { Bad_Opcode },
6733 { Bad_Opcode },
6734 { Bad_Opcode },
6735 { Bad_Opcode },
6736 { Bad_Opcode },
6737 { Bad_Opcode },
5dd85c99 6738 /* 70 */
592d1631
L
6739 { Bad_Opcode },
6740 { Bad_Opcode },
6741 { Bad_Opcode },
6742 { Bad_Opcode },
6743 { Bad_Opcode },
6744 { Bad_Opcode },
6745 { Bad_Opcode },
6746 { Bad_Opcode },
5dd85c99 6747 /* 78 */
592d1631
L
6748 { Bad_Opcode },
6749 { Bad_Opcode },
6750 { Bad_Opcode },
6751 { Bad_Opcode },
6752 { Bad_Opcode },
6753 { Bad_Opcode },
6754 { Bad_Opcode },
6755 { Bad_Opcode },
5dd85c99
SP
6756 /* 80 */
6757 { VEX_LEN_TABLE (VEX_LEN_XOP_09_80) },
6758 { VEX_LEN_TABLE (VEX_LEN_XOP_09_81) },
6759 { "vfrczss", { XM, EXd } },
6760 { "vfrczsd", { XM, EXq } },
592d1631
L
6761 { Bad_Opcode },
6762 { Bad_Opcode },
6763 { Bad_Opcode },
6764 { Bad_Opcode },
5dd85c99 6765 /* 88 */
592d1631
L
6766 { Bad_Opcode },
6767 { Bad_Opcode },
6768 { Bad_Opcode },
6769 { Bad_Opcode },
6770 { Bad_Opcode },
6771 { Bad_Opcode },
6772 { Bad_Opcode },
6773 { Bad_Opcode },
5dd85c99
SP
6774 /* 90 */
6775 { "vprotb", { XM, Vex_2src_1, Vex_2src_2 } },
6776 { "vprotw", { XM, Vex_2src_1, Vex_2src_2 } },
6777 { "vprotd", { XM, Vex_2src_1, Vex_2src_2 } },
6778 { "vprotq", { XM, Vex_2src_1, Vex_2src_2 } },
6779 { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 } },
6780 { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 } },
6781 { "vpshld", { XM, Vex_2src_1, Vex_2src_2 } },
6782 { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 } },
6783 /* 98 */
6784 { "vpshab", { XM, Vex_2src_1, Vex_2src_2 } },
6785 { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 } },
6786 { "vpshad", { XM, Vex_2src_1, Vex_2src_2 } },
6787 { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 } },
592d1631
L
6788 { Bad_Opcode },
6789 { Bad_Opcode },
6790 { Bad_Opcode },
6791 { Bad_Opcode },
5dd85c99 6792 /* a0 */
592d1631
L
6793 { Bad_Opcode },
6794 { Bad_Opcode },
6795 { Bad_Opcode },
6796 { Bad_Opcode },
6797 { Bad_Opcode },
6798 { Bad_Opcode },
6799 { Bad_Opcode },
6800 { Bad_Opcode },
5dd85c99 6801 /* a8 */
592d1631
L
6802 { Bad_Opcode },
6803 { Bad_Opcode },
6804 { Bad_Opcode },
6805 { Bad_Opcode },
6806 { Bad_Opcode },
6807 { Bad_Opcode },
6808 { Bad_Opcode },
6809 { Bad_Opcode },
5dd85c99 6810 /* b0 */
592d1631
L
6811 { Bad_Opcode },
6812 { Bad_Opcode },
6813 { Bad_Opcode },
6814 { Bad_Opcode },
6815 { Bad_Opcode },
6816 { Bad_Opcode },
6817 { Bad_Opcode },
6818 { Bad_Opcode },
5dd85c99 6819 /* b8 */
592d1631
L
6820 { Bad_Opcode },
6821 { Bad_Opcode },
6822 { Bad_Opcode },
6823 { Bad_Opcode },
6824 { Bad_Opcode },
6825 { Bad_Opcode },
6826 { Bad_Opcode },
6827 { Bad_Opcode },
5dd85c99 6828 /* c0 */
592d1631 6829 { Bad_Opcode },
5dd85c99
SP
6830 { "vphaddbw", { XM, EXxmm } },
6831 { "vphaddbd", { XM, EXxmm } },
6832 { "vphaddbq", { XM, EXxmm } },
592d1631
L
6833 { Bad_Opcode },
6834 { Bad_Opcode },
5dd85c99
SP
6835 { "vphaddwd", { XM, EXxmm } },
6836 { "vphaddwq", { XM, EXxmm } },
6837 /* c8 */
592d1631
L
6838 { Bad_Opcode },
6839 { Bad_Opcode },
6840 { Bad_Opcode },
5dd85c99 6841 { "vphadddq", { XM, EXxmm } },
592d1631
L
6842 { Bad_Opcode },
6843 { Bad_Opcode },
6844 { Bad_Opcode },
6845 { Bad_Opcode },
5dd85c99 6846 /* d0 */
592d1631 6847 { Bad_Opcode },
5dd85c99
SP
6848 { "vphaddubw", { XM, EXxmm } },
6849 { "vphaddubd", { XM, EXxmm } },
6850 { "vphaddubq", { XM, EXxmm } },
592d1631
L
6851 { Bad_Opcode },
6852 { Bad_Opcode },
5dd85c99
SP
6853 { "vphadduwd", { XM, EXxmm } },
6854 { "vphadduwq", { XM, EXxmm } },
6855 /* d8 */
592d1631
L
6856 { Bad_Opcode },
6857 { Bad_Opcode },
6858 { Bad_Opcode },
5dd85c99 6859 { "vphaddudq", { XM, EXxmm } },
592d1631
L
6860 { Bad_Opcode },
6861 { Bad_Opcode },
6862 { Bad_Opcode },
6863 { Bad_Opcode },
5dd85c99 6864 /* e0 */
592d1631 6865 { Bad_Opcode },
5dd85c99
SP
6866 { "vphsubbw", { XM, EXxmm } },
6867 { "vphsubwd", { XM, EXxmm } },
6868 { "vphsubdq", { XM, EXxmm } },
592d1631
L
6869 { Bad_Opcode },
6870 { Bad_Opcode },
6871 { Bad_Opcode },
6872 { Bad_Opcode },
4e7d34a6 6873 /* e8 */
592d1631
L
6874 { Bad_Opcode },
6875 { Bad_Opcode },
6876 { Bad_Opcode },
6877 { Bad_Opcode },
6878 { Bad_Opcode },
6879 { Bad_Opcode },
6880 { Bad_Opcode },
6881 { Bad_Opcode },
4e7d34a6 6882 /* f0 */
592d1631
L
6883 { Bad_Opcode },
6884 { Bad_Opcode },
6885 { Bad_Opcode },
6886 { Bad_Opcode },
6887 { Bad_Opcode },
6888 { Bad_Opcode },
6889 { Bad_Opcode },
6890 { Bad_Opcode },
4e7d34a6 6891 /* f8 */
592d1631
L
6892 { Bad_Opcode },
6893 { Bad_Opcode },
6894 { Bad_Opcode },
6895 { Bad_Opcode },
6896 { Bad_Opcode },
6897 { Bad_Opcode },
6898 { Bad_Opcode },
6899 { Bad_Opcode },
4e7d34a6 6900 },
f88c9eb0 6901 /* XOP_0A */
4e7d34a6
L
6902 {
6903 /* 00 */
592d1631
L
6904 { Bad_Opcode },
6905 { Bad_Opcode },
6906 { Bad_Opcode },
6907 { Bad_Opcode },
6908 { Bad_Opcode },
6909 { Bad_Opcode },
6910 { Bad_Opcode },
6911 { Bad_Opcode },
4e7d34a6 6912 /* 08 */
592d1631
L
6913 { Bad_Opcode },
6914 { Bad_Opcode },
6915 { Bad_Opcode },
6916 { Bad_Opcode },
6917 { Bad_Opcode },
6918 { Bad_Opcode },
6919 { Bad_Opcode },
6920 { Bad_Opcode },
4e7d34a6 6921 /* 10 */
592d1631
L
6922 { Bad_Opcode },
6923 { Bad_Opcode },
f88c9eb0 6924 { REG_TABLE (REG_XOP_LWP) },
592d1631
L
6925 { Bad_Opcode },
6926 { Bad_Opcode },
6927 { Bad_Opcode },
6928 { Bad_Opcode },
6929 { Bad_Opcode },
4e7d34a6 6930 /* 18 */
592d1631
L
6931 { Bad_Opcode },
6932 { Bad_Opcode },
6933 { Bad_Opcode },
6934 { Bad_Opcode },
6935 { Bad_Opcode },
6936 { Bad_Opcode },
6937 { Bad_Opcode },
6938 { Bad_Opcode },
4e7d34a6 6939 /* 20 */
592d1631
L
6940 { Bad_Opcode },
6941 { Bad_Opcode },
6942 { Bad_Opcode },
6943 { Bad_Opcode },
6944 { Bad_Opcode },
6945 { Bad_Opcode },
6946 { Bad_Opcode },
6947 { Bad_Opcode },
4e7d34a6 6948 /* 28 */
592d1631
L
6949 { Bad_Opcode },
6950 { Bad_Opcode },
6951 { Bad_Opcode },
6952 { Bad_Opcode },
6953 { Bad_Opcode },
6954 { Bad_Opcode },
6955 { Bad_Opcode },
6956 { Bad_Opcode },
4e7d34a6 6957 /* 30 */
592d1631
L
6958 { Bad_Opcode },
6959 { Bad_Opcode },
6960 { Bad_Opcode },
6961 { Bad_Opcode },
6962 { Bad_Opcode },
6963 { Bad_Opcode },
6964 { Bad_Opcode },
6965 { Bad_Opcode },
c0f3af97 6966 /* 38 */
592d1631
L
6967 { Bad_Opcode },
6968 { Bad_Opcode },
6969 { Bad_Opcode },
6970 { Bad_Opcode },
6971 { Bad_Opcode },
6972 { Bad_Opcode },
6973 { Bad_Opcode },
6974 { Bad_Opcode },
c0f3af97 6975 /* 40 */
592d1631
L
6976 { Bad_Opcode },
6977 { Bad_Opcode },
6978 { Bad_Opcode },
6979 { Bad_Opcode },
6980 { Bad_Opcode },
6981 { Bad_Opcode },
6982 { Bad_Opcode },
6983 { Bad_Opcode },
c1e679ec 6984 /* 48 */
592d1631
L
6985 { Bad_Opcode },
6986 { Bad_Opcode },
6987 { Bad_Opcode },
6988 { Bad_Opcode },
6989 { Bad_Opcode },
6990 { Bad_Opcode },
6991 { Bad_Opcode },
6992 { Bad_Opcode },
c1e679ec 6993 /* 50 */
592d1631
L
6994 { Bad_Opcode },
6995 { Bad_Opcode },
6996 { Bad_Opcode },
6997 { Bad_Opcode },
6998 { Bad_Opcode },
6999 { Bad_Opcode },
7000 { Bad_Opcode },
7001 { Bad_Opcode },
4e7d34a6 7002 /* 58 */
592d1631
L
7003 { Bad_Opcode },
7004 { Bad_Opcode },
7005 { Bad_Opcode },
7006 { Bad_Opcode },
7007 { Bad_Opcode },
7008 { Bad_Opcode },
7009 { Bad_Opcode },
7010 { Bad_Opcode },
4e7d34a6 7011 /* 60 */
592d1631
L
7012 { Bad_Opcode },
7013 { Bad_Opcode },
7014 { Bad_Opcode },
7015 { Bad_Opcode },
7016 { Bad_Opcode },
7017 { Bad_Opcode },
7018 { Bad_Opcode },
7019 { Bad_Opcode },
4e7d34a6 7020 /* 68 */
592d1631
L
7021 { Bad_Opcode },
7022 { Bad_Opcode },
7023 { Bad_Opcode },
7024 { Bad_Opcode },
7025 { Bad_Opcode },
7026 { Bad_Opcode },
7027 { Bad_Opcode },
7028 { Bad_Opcode },
4e7d34a6 7029 /* 70 */
592d1631
L
7030 { Bad_Opcode },
7031 { Bad_Opcode },
7032 { Bad_Opcode },
7033 { Bad_Opcode },
7034 { Bad_Opcode },
7035 { Bad_Opcode },
7036 { Bad_Opcode },
7037 { Bad_Opcode },
4e7d34a6 7038 /* 78 */
592d1631
L
7039 { Bad_Opcode },
7040 { Bad_Opcode },
7041 { Bad_Opcode },
7042 { Bad_Opcode },
7043 { Bad_Opcode },
7044 { Bad_Opcode },
7045 { Bad_Opcode },
7046 { Bad_Opcode },
4e7d34a6 7047 /* 80 */
592d1631
L
7048 { Bad_Opcode },
7049 { Bad_Opcode },
7050 { Bad_Opcode },
7051 { Bad_Opcode },
7052 { Bad_Opcode },
7053 { Bad_Opcode },
7054 { Bad_Opcode },
7055 { Bad_Opcode },
4e7d34a6 7056 /* 88 */
592d1631
L
7057 { Bad_Opcode },
7058 { Bad_Opcode },
7059 { Bad_Opcode },
7060 { Bad_Opcode },
7061 { Bad_Opcode },
7062 { Bad_Opcode },
7063 { Bad_Opcode },
7064 { Bad_Opcode },
4e7d34a6 7065 /* 90 */
592d1631
L
7066 { Bad_Opcode },
7067 { Bad_Opcode },
7068 { Bad_Opcode },
7069 { Bad_Opcode },
7070 { Bad_Opcode },
7071 { Bad_Opcode },
7072 { Bad_Opcode },
7073 { Bad_Opcode },
4e7d34a6 7074 /* 98 */
592d1631
L
7075 { Bad_Opcode },
7076 { Bad_Opcode },
7077 { Bad_Opcode },
7078 { Bad_Opcode },
7079 { Bad_Opcode },
7080 { Bad_Opcode },
7081 { Bad_Opcode },
7082 { Bad_Opcode },
4e7d34a6 7083 /* a0 */
592d1631
L
7084 { Bad_Opcode },
7085 { Bad_Opcode },
7086 { Bad_Opcode },
7087 { Bad_Opcode },
7088 { Bad_Opcode },
7089 { Bad_Opcode },
7090 { Bad_Opcode },
7091 { Bad_Opcode },
4e7d34a6 7092 /* a8 */
592d1631
L
7093 { Bad_Opcode },
7094 { Bad_Opcode },
7095 { Bad_Opcode },
7096 { Bad_Opcode },
7097 { Bad_Opcode },
7098 { Bad_Opcode },
7099 { Bad_Opcode },
7100 { Bad_Opcode },
d5d7db8e 7101 /* b0 */
592d1631
L
7102 { Bad_Opcode },
7103 { Bad_Opcode },
7104 { Bad_Opcode },
7105 { Bad_Opcode },
7106 { Bad_Opcode },
7107 { Bad_Opcode },
7108 { Bad_Opcode },
7109 { Bad_Opcode },
85f10a01 7110 /* b8 */
592d1631
L
7111 { Bad_Opcode },
7112 { Bad_Opcode },
7113 { Bad_Opcode },
7114 { Bad_Opcode },
7115 { Bad_Opcode },
7116 { Bad_Opcode },
7117 { Bad_Opcode },
7118 { Bad_Opcode },
85f10a01 7119 /* c0 */
592d1631
L
7120 { Bad_Opcode },
7121 { Bad_Opcode },
7122 { Bad_Opcode },
7123 { Bad_Opcode },
7124 { Bad_Opcode },
7125 { Bad_Opcode },
7126 { Bad_Opcode },
7127 { Bad_Opcode },
85f10a01 7128 /* c8 */
592d1631
L
7129 { Bad_Opcode },
7130 { Bad_Opcode },
7131 { Bad_Opcode },
7132 { Bad_Opcode },
7133 { Bad_Opcode },
7134 { Bad_Opcode },
7135 { Bad_Opcode },
7136 { Bad_Opcode },
85f10a01 7137 /* d0 */
592d1631
L
7138 { Bad_Opcode },
7139 { Bad_Opcode },
7140 { Bad_Opcode },
7141 { Bad_Opcode },
7142 { Bad_Opcode },
7143 { Bad_Opcode },
7144 { Bad_Opcode },
7145 { Bad_Opcode },
85f10a01 7146 /* d8 */
592d1631
L
7147 { Bad_Opcode },
7148 { Bad_Opcode },
7149 { Bad_Opcode },
7150 { Bad_Opcode },
7151 { Bad_Opcode },
7152 { Bad_Opcode },
7153 { Bad_Opcode },
7154 { Bad_Opcode },
85f10a01 7155 /* e0 */
592d1631
L
7156 { Bad_Opcode },
7157 { Bad_Opcode },
7158 { Bad_Opcode },
7159 { Bad_Opcode },
7160 { Bad_Opcode },
7161 { Bad_Opcode },
7162 { Bad_Opcode },
7163 { Bad_Opcode },
85f10a01 7164 /* e8 */
592d1631
L
7165 { Bad_Opcode },
7166 { Bad_Opcode },
7167 { Bad_Opcode },
7168 { Bad_Opcode },
7169 { Bad_Opcode },
7170 { Bad_Opcode },
7171 { Bad_Opcode },
7172 { Bad_Opcode },
85f10a01 7173 /* f0 */
592d1631
L
7174 { Bad_Opcode },
7175 { Bad_Opcode },
7176 { Bad_Opcode },
7177 { Bad_Opcode },
7178 { Bad_Opcode },
7179 { Bad_Opcode },
7180 { Bad_Opcode },
7181 { Bad_Opcode },
85f10a01 7182 /* f8 */
592d1631
L
7183 { Bad_Opcode },
7184 { Bad_Opcode },
7185 { Bad_Opcode },
7186 { Bad_Opcode },
7187 { Bad_Opcode },
7188 { Bad_Opcode },
7189 { Bad_Opcode },
7190 { Bad_Opcode },
85f10a01 7191 },
c0f3af97
L
7192};
7193
7194static const struct dis386 vex_table[][256] = {
7195 /* VEX_0F */
85f10a01
MM
7196 {
7197 /* 00 */
592d1631
L
7198 { Bad_Opcode },
7199 { Bad_Opcode },
7200 { Bad_Opcode },
7201 { Bad_Opcode },
7202 { Bad_Opcode },
7203 { Bad_Opcode },
7204 { Bad_Opcode },
7205 { Bad_Opcode },
85f10a01 7206 /* 08 */
592d1631
L
7207 { Bad_Opcode },
7208 { Bad_Opcode },
7209 { Bad_Opcode },
7210 { Bad_Opcode },
7211 { Bad_Opcode },
7212 { Bad_Opcode },
7213 { Bad_Opcode },
7214 { Bad_Opcode },
c0f3af97
L
7215 /* 10 */
7216 { PREFIX_TABLE (PREFIX_VEX_10) },
7217 { PREFIX_TABLE (PREFIX_VEX_11) },
7218 { PREFIX_TABLE (PREFIX_VEX_12) },
7219 { MOD_TABLE (MOD_VEX_13) },
9e30b8e0
L
7220 { VEX_W_TABLE (VEX_W_14) },
7221 { VEX_W_TABLE (VEX_W_15) },
c0f3af97
L
7222 { PREFIX_TABLE (PREFIX_VEX_16) },
7223 { MOD_TABLE (MOD_VEX_17) },
7224 /* 18 */
592d1631
L
7225 { Bad_Opcode },
7226 { Bad_Opcode },
7227 { Bad_Opcode },
7228 { Bad_Opcode },
7229 { Bad_Opcode },
7230 { Bad_Opcode },
7231 { Bad_Opcode },
7232 { Bad_Opcode },
c0f3af97 7233 /* 20 */
592d1631
L
7234 { Bad_Opcode },
7235 { Bad_Opcode },
7236 { Bad_Opcode },
7237 { Bad_Opcode },
7238 { Bad_Opcode },
7239 { Bad_Opcode },
7240 { Bad_Opcode },
7241 { Bad_Opcode },
c0f3af97 7242 /* 28 */
9e30b8e0
L
7243 { VEX_W_TABLE (VEX_W_28) },
7244 { VEX_W_TABLE (VEX_W_29) },
c0f3af97
L
7245 { PREFIX_TABLE (PREFIX_VEX_2A) },
7246 { MOD_TABLE (MOD_VEX_2B) },
7247 { PREFIX_TABLE (PREFIX_VEX_2C) },
7248 { PREFIX_TABLE (PREFIX_VEX_2D) },
7249 { PREFIX_TABLE (PREFIX_VEX_2E) },
7250 { PREFIX_TABLE (PREFIX_VEX_2F) },
85f10a01 7251 /* 30 */
592d1631
L
7252 { Bad_Opcode },
7253 { Bad_Opcode },
7254 { Bad_Opcode },
7255 { Bad_Opcode },
7256 { Bad_Opcode },
7257 { Bad_Opcode },
7258 { Bad_Opcode },
7259 { Bad_Opcode },
4e7d34a6 7260 /* 38 */
592d1631
L
7261 { Bad_Opcode },
7262 { Bad_Opcode },
7263 { Bad_Opcode },
7264 { Bad_Opcode },
7265 { Bad_Opcode },
7266 { Bad_Opcode },
7267 { Bad_Opcode },
7268 { Bad_Opcode },
d5d7db8e 7269 /* 40 */
592d1631
L
7270 { Bad_Opcode },
7271 { Bad_Opcode },
7272 { Bad_Opcode },
7273 { Bad_Opcode },
7274 { Bad_Opcode },
7275 { Bad_Opcode },
7276 { Bad_Opcode },
7277 { Bad_Opcode },
85f10a01 7278 /* 48 */
592d1631
L
7279 { Bad_Opcode },
7280 { Bad_Opcode },
7281 { Bad_Opcode },
7282 { Bad_Opcode },
7283 { Bad_Opcode },
7284 { Bad_Opcode },
7285 { Bad_Opcode },
7286 { Bad_Opcode },
d5d7db8e 7287 /* 50 */
976f1fde 7288 { MOD_TABLE (MOD_VEX_50) },
c0f3af97
L
7289 { PREFIX_TABLE (PREFIX_VEX_51) },
7290 { PREFIX_TABLE (PREFIX_VEX_52) },
7291 { PREFIX_TABLE (PREFIX_VEX_53) },
7292 { "vandpX", { XM, Vex, EXx } },
7293 { "vandnpX", { XM, Vex, EXx } },
7294 { "vorpX", { XM, Vex, EXx } },
7295 { "vxorpX", { XM, Vex, EXx } },
7296 /* 58 */
7297 { PREFIX_TABLE (PREFIX_VEX_58) },
7298 { PREFIX_TABLE (PREFIX_VEX_59) },
7299 { PREFIX_TABLE (PREFIX_VEX_5A) },
7300 { PREFIX_TABLE (PREFIX_VEX_5B) },
7301 { PREFIX_TABLE (PREFIX_VEX_5C) },
7302 { PREFIX_TABLE (PREFIX_VEX_5D) },
7303 { PREFIX_TABLE (PREFIX_VEX_5E) },
7304 { PREFIX_TABLE (PREFIX_VEX_5F) },
7305 /* 60 */
7306 { PREFIX_TABLE (PREFIX_VEX_60) },
7307 { PREFIX_TABLE (PREFIX_VEX_61) },
7308 { PREFIX_TABLE (PREFIX_VEX_62) },
7309 { PREFIX_TABLE (PREFIX_VEX_63) },
7310 { PREFIX_TABLE (PREFIX_VEX_64) },
7311 { PREFIX_TABLE (PREFIX_VEX_65) },
7312 { PREFIX_TABLE (PREFIX_VEX_66) },
7313 { PREFIX_TABLE (PREFIX_VEX_67) },
7314 /* 68 */
7315 { PREFIX_TABLE (PREFIX_VEX_68) },
7316 { PREFIX_TABLE (PREFIX_VEX_69) },
7317 { PREFIX_TABLE (PREFIX_VEX_6A) },
7318 { PREFIX_TABLE (PREFIX_VEX_6B) },
7319 { PREFIX_TABLE (PREFIX_VEX_6C) },
7320 { PREFIX_TABLE (PREFIX_VEX_6D) },
7321 { PREFIX_TABLE (PREFIX_VEX_6E) },
7322 { PREFIX_TABLE (PREFIX_VEX_6F) },
7323 /* 70 */
7324 { PREFIX_TABLE (PREFIX_VEX_70) },
7325 { REG_TABLE (REG_VEX_71) },
7326 { REG_TABLE (REG_VEX_72) },
7327 { REG_TABLE (REG_VEX_73) },
7328 { PREFIX_TABLE (PREFIX_VEX_74) },
7329 { PREFIX_TABLE (PREFIX_VEX_75) },
7330 { PREFIX_TABLE (PREFIX_VEX_76) },
7331 { PREFIX_TABLE (PREFIX_VEX_77) },
7332 /* 78 */
592d1631
L
7333 { Bad_Opcode },
7334 { Bad_Opcode },
7335 { Bad_Opcode },
7336 { Bad_Opcode },
c0f3af97
L
7337 { PREFIX_TABLE (PREFIX_VEX_7C) },
7338 { PREFIX_TABLE (PREFIX_VEX_7D) },
7339 { PREFIX_TABLE (PREFIX_VEX_7E) },
7340 { PREFIX_TABLE (PREFIX_VEX_7F) },
7341 /* 80 */
592d1631
L
7342 { Bad_Opcode },
7343 { Bad_Opcode },
7344 { Bad_Opcode },
7345 { Bad_Opcode },
7346 { Bad_Opcode },
7347 { Bad_Opcode },
7348 { Bad_Opcode },
7349 { Bad_Opcode },
c0f3af97 7350 /* 88 */
592d1631
L
7351 { Bad_Opcode },
7352 { Bad_Opcode },
7353 { Bad_Opcode },
7354 { Bad_Opcode },
7355 { Bad_Opcode },
7356 { Bad_Opcode },
7357 { Bad_Opcode },
7358 { Bad_Opcode },
c0f3af97 7359 /* 90 */
592d1631
L
7360 { Bad_Opcode },
7361 { Bad_Opcode },
7362 { Bad_Opcode },
7363 { Bad_Opcode },
7364 { Bad_Opcode },
7365 { Bad_Opcode },
7366 { Bad_Opcode },
7367 { Bad_Opcode },
c0f3af97 7368 /* 98 */
592d1631
L
7369 { Bad_Opcode },
7370 { Bad_Opcode },
7371 { Bad_Opcode },
7372 { Bad_Opcode },
7373 { Bad_Opcode },
7374 { Bad_Opcode },
7375 { Bad_Opcode },
7376 { Bad_Opcode },
c0f3af97 7377 /* a0 */
592d1631
L
7378 { Bad_Opcode },
7379 { Bad_Opcode },
7380 { Bad_Opcode },
7381 { Bad_Opcode },
7382 { Bad_Opcode },
7383 { Bad_Opcode },
7384 { Bad_Opcode },
7385 { Bad_Opcode },
c0f3af97 7386 /* a8 */
592d1631
L
7387 { Bad_Opcode },
7388 { Bad_Opcode },
7389 { Bad_Opcode },
7390 { Bad_Opcode },
7391 { Bad_Opcode },
7392 { Bad_Opcode },
c0f3af97 7393 { REG_TABLE (REG_VEX_AE) },
592d1631 7394 { Bad_Opcode },
c0f3af97 7395 /* b0 */
592d1631
L
7396 { Bad_Opcode },
7397 { Bad_Opcode },
7398 { Bad_Opcode },
7399 { Bad_Opcode },
7400 { Bad_Opcode },
7401 { Bad_Opcode },
7402 { Bad_Opcode },
7403 { Bad_Opcode },
c0f3af97 7404 /* b8 */
592d1631
L
7405 { Bad_Opcode },
7406 { Bad_Opcode },
7407 { Bad_Opcode },
7408 { Bad_Opcode },
7409 { Bad_Opcode },
7410 { Bad_Opcode },
7411 { Bad_Opcode },
7412 { Bad_Opcode },
c0f3af97 7413 /* c0 */
592d1631
L
7414 { Bad_Opcode },
7415 { Bad_Opcode },
c0f3af97 7416 { PREFIX_TABLE (PREFIX_VEX_C2) },
592d1631 7417 { Bad_Opcode },
c0f3af97
L
7418 { PREFIX_TABLE (PREFIX_VEX_C4) },
7419 { PREFIX_TABLE (PREFIX_VEX_C5) },
7420 { "vshufpX", { XM, Vex, EXx, Ib } },
592d1631 7421 { Bad_Opcode },
c0f3af97 7422 /* c8 */
592d1631
L
7423 { Bad_Opcode },
7424 { Bad_Opcode },
7425 { Bad_Opcode },
7426 { Bad_Opcode },
7427 { Bad_Opcode },
7428 { Bad_Opcode },
7429 { Bad_Opcode },
7430 { Bad_Opcode },
c0f3af97
L
7431 /* d0 */
7432 { PREFIX_TABLE (PREFIX_VEX_D0) },
7433 { PREFIX_TABLE (PREFIX_VEX_D1) },
7434 { PREFIX_TABLE (PREFIX_VEX_D2) },
7435 { PREFIX_TABLE (PREFIX_VEX_D3) },
7436 { PREFIX_TABLE (PREFIX_VEX_D4) },
7437 { PREFIX_TABLE (PREFIX_VEX_D5) },
7438 { PREFIX_TABLE (PREFIX_VEX_D6) },
7439 { PREFIX_TABLE (PREFIX_VEX_D7) },
7440 /* d8 */
7441 { PREFIX_TABLE (PREFIX_VEX_D8) },
7442 { PREFIX_TABLE (PREFIX_VEX_D9) },
7443 { PREFIX_TABLE (PREFIX_VEX_DA) },
7444 { PREFIX_TABLE (PREFIX_VEX_DB) },
7445 { PREFIX_TABLE (PREFIX_VEX_DC) },
7446 { PREFIX_TABLE (PREFIX_VEX_DD) },
7447 { PREFIX_TABLE (PREFIX_VEX_DE) },
7448 { PREFIX_TABLE (PREFIX_VEX_DF) },
7449 /* e0 */
7450 { PREFIX_TABLE (PREFIX_VEX_E0) },
7451 { PREFIX_TABLE (PREFIX_VEX_E1) },
7452 { PREFIX_TABLE (PREFIX_VEX_E2) },
7453 { PREFIX_TABLE (PREFIX_VEX_E3) },
7454 { PREFIX_TABLE (PREFIX_VEX_E4) },
7455 { PREFIX_TABLE (PREFIX_VEX_E5) },
7456 { PREFIX_TABLE (PREFIX_VEX_E6) },
7457 { PREFIX_TABLE (PREFIX_VEX_E7) },
7458 /* e8 */
7459 { PREFIX_TABLE (PREFIX_VEX_E8) },
7460 { PREFIX_TABLE (PREFIX_VEX_E9) },
7461 { PREFIX_TABLE (PREFIX_VEX_EA) },
7462 { PREFIX_TABLE (PREFIX_VEX_EB) },
7463 { PREFIX_TABLE (PREFIX_VEX_EC) },
7464 { PREFIX_TABLE (PREFIX_VEX_ED) },
7465 { PREFIX_TABLE (PREFIX_VEX_EE) },
7466 { PREFIX_TABLE (PREFIX_VEX_EF) },
7467 /* f0 */
7468 { PREFIX_TABLE (PREFIX_VEX_F0) },
7469 { PREFIX_TABLE (PREFIX_VEX_F1) },
7470 { PREFIX_TABLE (PREFIX_VEX_F2) },
7471 { PREFIX_TABLE (PREFIX_VEX_F3) },
7472 { PREFIX_TABLE (PREFIX_VEX_F4) },
7473 { PREFIX_TABLE (PREFIX_VEX_F5) },
7474 { PREFIX_TABLE (PREFIX_VEX_F6) },
7475 { PREFIX_TABLE (PREFIX_VEX_F7) },
7476 /* f8 */
7477 { PREFIX_TABLE (PREFIX_VEX_F8) },
7478 { PREFIX_TABLE (PREFIX_VEX_F9) },
7479 { PREFIX_TABLE (PREFIX_VEX_FA) },
7480 { PREFIX_TABLE (PREFIX_VEX_FB) },
7481 { PREFIX_TABLE (PREFIX_VEX_FC) },
7482 { PREFIX_TABLE (PREFIX_VEX_FD) },
7483 { PREFIX_TABLE (PREFIX_VEX_FE) },
592d1631 7484 { Bad_Opcode },
c0f3af97
L
7485 },
7486 /* VEX_0F38 */
7487 {
7488 /* 00 */
7489 { PREFIX_TABLE (PREFIX_VEX_3800) },
7490 { PREFIX_TABLE (PREFIX_VEX_3801) },
7491 { PREFIX_TABLE (PREFIX_VEX_3802) },
7492 { PREFIX_TABLE (PREFIX_VEX_3803) },
7493 { PREFIX_TABLE (PREFIX_VEX_3804) },
7494 { PREFIX_TABLE (PREFIX_VEX_3805) },
7495 { PREFIX_TABLE (PREFIX_VEX_3806) },
7496 { PREFIX_TABLE (PREFIX_VEX_3807) },
7497 /* 08 */
7498 { PREFIX_TABLE (PREFIX_VEX_3808) },
7499 { PREFIX_TABLE (PREFIX_VEX_3809) },
7500 { PREFIX_TABLE (PREFIX_VEX_380A) },
7501 { PREFIX_TABLE (PREFIX_VEX_380B) },
7502 { PREFIX_TABLE (PREFIX_VEX_380C) },
7503 { PREFIX_TABLE (PREFIX_VEX_380D) },
7504 { PREFIX_TABLE (PREFIX_VEX_380E) },
7505 { PREFIX_TABLE (PREFIX_VEX_380F) },
7506 /* 10 */
592d1631
L
7507 { Bad_Opcode },
7508 { Bad_Opcode },
7509 { Bad_Opcode },
7510 { Bad_Opcode },
7511 { Bad_Opcode },
7512 { Bad_Opcode },
7513 { Bad_Opcode },
c0f3af97
L
7514 { PREFIX_TABLE (PREFIX_VEX_3817) },
7515 /* 18 */
7516 { PREFIX_TABLE (PREFIX_VEX_3818) },
7517 { PREFIX_TABLE (PREFIX_VEX_3819) },
7518 { PREFIX_TABLE (PREFIX_VEX_381A) },
592d1631 7519 { Bad_Opcode },
c0f3af97
L
7520 { PREFIX_TABLE (PREFIX_VEX_381C) },
7521 { PREFIX_TABLE (PREFIX_VEX_381D) },
7522 { PREFIX_TABLE (PREFIX_VEX_381E) },
592d1631 7523 { Bad_Opcode },
c0f3af97
L
7524 /* 20 */
7525 { PREFIX_TABLE (PREFIX_VEX_3820) },
7526 { PREFIX_TABLE (PREFIX_VEX_3821) },
7527 { PREFIX_TABLE (PREFIX_VEX_3822) },
7528 { PREFIX_TABLE (PREFIX_VEX_3823) },
7529 { PREFIX_TABLE (PREFIX_VEX_3824) },
7530 { PREFIX_TABLE (PREFIX_VEX_3825) },
592d1631
L
7531 { Bad_Opcode },
7532 { Bad_Opcode },
c0f3af97
L
7533 /* 28 */
7534 { PREFIX_TABLE (PREFIX_VEX_3828) },
7535 { PREFIX_TABLE (PREFIX_VEX_3829) },
7536 { PREFIX_TABLE (PREFIX_VEX_382A) },
7537 { PREFIX_TABLE (PREFIX_VEX_382B) },
7538 { PREFIX_TABLE (PREFIX_VEX_382C) },
7539 { PREFIX_TABLE (PREFIX_VEX_382D) },
7540 { PREFIX_TABLE (PREFIX_VEX_382E) },
7541 { PREFIX_TABLE (PREFIX_VEX_382F) },
7542 /* 30 */
7543 { PREFIX_TABLE (PREFIX_VEX_3830) },
7544 { PREFIX_TABLE (PREFIX_VEX_3831) },
7545 { PREFIX_TABLE (PREFIX_VEX_3832) },
7546 { PREFIX_TABLE (PREFIX_VEX_3833) },
7547 { PREFIX_TABLE (PREFIX_VEX_3834) },
7548 { PREFIX_TABLE (PREFIX_VEX_3835) },
592d1631 7549 { Bad_Opcode },
c0f3af97
L
7550 { PREFIX_TABLE (PREFIX_VEX_3837) },
7551 /* 38 */
7552 { PREFIX_TABLE (PREFIX_VEX_3838) },
7553 { PREFIX_TABLE (PREFIX_VEX_3839) },
7554 { PREFIX_TABLE (PREFIX_VEX_383A) },
7555 { PREFIX_TABLE (PREFIX_VEX_383B) },
7556 { PREFIX_TABLE (PREFIX_VEX_383C) },
7557 { PREFIX_TABLE (PREFIX_VEX_383D) },
7558 { PREFIX_TABLE (PREFIX_VEX_383E) },
7559 { PREFIX_TABLE (PREFIX_VEX_383F) },
7560 /* 40 */
7561 { PREFIX_TABLE (PREFIX_VEX_3840) },
7562 { PREFIX_TABLE (PREFIX_VEX_3841) },
592d1631
L
7563 { Bad_Opcode },
7564 { Bad_Opcode },
7565 { Bad_Opcode },
7566 { Bad_Opcode },
7567 { Bad_Opcode },
7568 { Bad_Opcode },
c0f3af97 7569 /* 48 */
592d1631
L
7570 { Bad_Opcode },
7571 { Bad_Opcode },
7572 { Bad_Opcode },
7573 { Bad_Opcode },
7574 { Bad_Opcode },
7575 { Bad_Opcode },
7576 { Bad_Opcode },
7577 { Bad_Opcode },
c0f3af97 7578 /* 50 */
592d1631
L
7579 { Bad_Opcode },
7580 { Bad_Opcode },
7581 { Bad_Opcode },
7582 { Bad_Opcode },
7583 { Bad_Opcode },
7584 { Bad_Opcode },
7585 { Bad_Opcode },
7586 { Bad_Opcode },
c0f3af97 7587 /* 58 */
592d1631
L
7588 { Bad_Opcode },
7589 { Bad_Opcode },
7590 { Bad_Opcode },
7591 { Bad_Opcode },
7592 { Bad_Opcode },
7593 { Bad_Opcode },
7594 { Bad_Opcode },
7595 { Bad_Opcode },
c0f3af97 7596 /* 60 */
592d1631
L
7597 { Bad_Opcode },
7598 { Bad_Opcode },
7599 { Bad_Opcode },
7600 { Bad_Opcode },
7601 { Bad_Opcode },
7602 { Bad_Opcode },
7603 { Bad_Opcode },
7604 { Bad_Opcode },
c0f3af97 7605 /* 68 */
592d1631
L
7606 { Bad_Opcode },
7607 { Bad_Opcode },
7608 { Bad_Opcode },
7609 { Bad_Opcode },
7610 { Bad_Opcode },
7611 { Bad_Opcode },
7612 { Bad_Opcode },
7613 { Bad_Opcode },
c0f3af97 7614 /* 70 */
592d1631
L
7615 { Bad_Opcode },
7616 { Bad_Opcode },
7617 { Bad_Opcode },
7618 { Bad_Opcode },
7619 { Bad_Opcode },
7620 { Bad_Opcode },
7621 { Bad_Opcode },
7622 { Bad_Opcode },
c0f3af97 7623 /* 78 */
592d1631
L
7624 { Bad_Opcode },
7625 { Bad_Opcode },
7626 { Bad_Opcode },
7627 { Bad_Opcode },
7628 { Bad_Opcode },
7629 { Bad_Opcode },
7630 { Bad_Opcode },
7631 { Bad_Opcode },
c0f3af97 7632 /* 80 */
592d1631
L
7633 { Bad_Opcode },
7634 { Bad_Opcode },
7635 { Bad_Opcode },
7636 { Bad_Opcode },
7637 { Bad_Opcode },
7638 { Bad_Opcode },
7639 { Bad_Opcode },
7640 { Bad_Opcode },
c0f3af97 7641 /* 88 */
592d1631
L
7642 { Bad_Opcode },
7643 { Bad_Opcode },
7644 { Bad_Opcode },
7645 { Bad_Opcode },
7646 { Bad_Opcode },
7647 { Bad_Opcode },
7648 { Bad_Opcode },
7649 { Bad_Opcode },
c0f3af97 7650 /* 90 */
592d1631
L
7651 { Bad_Opcode },
7652 { Bad_Opcode },
7653 { Bad_Opcode },
7654 { Bad_Opcode },
7655 { Bad_Opcode },
7656 { Bad_Opcode },
0bfee649
L
7657 { PREFIX_TABLE (PREFIX_VEX_3896) },
7658 { PREFIX_TABLE (PREFIX_VEX_3897) },
c0f3af97 7659 /* 98 */
0bfee649
L
7660 { PREFIX_TABLE (PREFIX_VEX_3898) },
7661 { PREFIX_TABLE (PREFIX_VEX_3899) },
7662 { PREFIX_TABLE (PREFIX_VEX_389A) },
7663 { PREFIX_TABLE (PREFIX_VEX_389B) },
7664 { PREFIX_TABLE (PREFIX_VEX_389C) },
7665 { PREFIX_TABLE (PREFIX_VEX_389D) },
7666 { PREFIX_TABLE (PREFIX_VEX_389E) },
7667 { PREFIX_TABLE (PREFIX_VEX_389F) },
c0f3af97 7668 /* a0 */
592d1631
L
7669 { Bad_Opcode },
7670 { Bad_Opcode },
7671 { Bad_Opcode },
7672 { Bad_Opcode },
7673 { Bad_Opcode },
7674 { Bad_Opcode },
0bfee649
L
7675 { PREFIX_TABLE (PREFIX_VEX_38A6) },
7676 { PREFIX_TABLE (PREFIX_VEX_38A7) },
c0f3af97 7677 /* a8 */
0bfee649
L
7678 { PREFIX_TABLE (PREFIX_VEX_38A8) },
7679 { PREFIX_TABLE (PREFIX_VEX_38A9) },
7680 { PREFIX_TABLE (PREFIX_VEX_38AA) },
7681 { PREFIX_TABLE (PREFIX_VEX_38AB) },
7682 { PREFIX_TABLE (PREFIX_VEX_38AC) },
7683 { PREFIX_TABLE (PREFIX_VEX_38AD) },
7684 { PREFIX_TABLE (PREFIX_VEX_38AE) },
7685 { PREFIX_TABLE (PREFIX_VEX_38AF) },
c0f3af97 7686 /* b0 */
592d1631
L
7687 { Bad_Opcode },
7688 { Bad_Opcode },
7689 { Bad_Opcode },
7690 { Bad_Opcode },
7691 { Bad_Opcode },
7692 { Bad_Opcode },
0bfee649
L
7693 { PREFIX_TABLE (PREFIX_VEX_38B6) },
7694 { PREFIX_TABLE (PREFIX_VEX_38B7) },
c0f3af97 7695 /* b8 */
0bfee649
L
7696 { PREFIX_TABLE (PREFIX_VEX_38B8) },
7697 { PREFIX_TABLE (PREFIX_VEX_38B9) },
7698 { PREFIX_TABLE (PREFIX_VEX_38BA) },
7699 { PREFIX_TABLE (PREFIX_VEX_38BB) },
7700 { PREFIX_TABLE (PREFIX_VEX_38BC) },
7701 { PREFIX_TABLE (PREFIX_VEX_38BD) },
7702 { PREFIX_TABLE (PREFIX_VEX_38BE) },
7703 { PREFIX_TABLE (PREFIX_VEX_38BF) },
c0f3af97 7704 /* c0 */
592d1631
L
7705 { Bad_Opcode },
7706 { Bad_Opcode },
7707 { Bad_Opcode },
7708 { Bad_Opcode },
7709 { Bad_Opcode },
7710 { Bad_Opcode },
7711 { Bad_Opcode },
7712 { Bad_Opcode },
c0f3af97 7713 /* c8 */
592d1631
L
7714 { Bad_Opcode },
7715 { Bad_Opcode },
7716 { Bad_Opcode },
7717 { Bad_Opcode },
7718 { Bad_Opcode },
7719 { Bad_Opcode },
7720 { Bad_Opcode },
7721 { Bad_Opcode },
c0f3af97 7722 /* d0 */
592d1631
L
7723 { Bad_Opcode },
7724 { Bad_Opcode },
7725 { Bad_Opcode },
7726 { Bad_Opcode },
7727 { Bad_Opcode },
7728 { Bad_Opcode },
7729 { Bad_Opcode },
7730 { Bad_Opcode },
c0f3af97 7731 /* d8 */
592d1631
L
7732 { Bad_Opcode },
7733 { Bad_Opcode },
7734 { Bad_Opcode },
a5ff0eb2
L
7735 { PREFIX_TABLE (PREFIX_VEX_38DB) },
7736 { PREFIX_TABLE (PREFIX_VEX_38DC) },
7737 { PREFIX_TABLE (PREFIX_VEX_38DD) },
7738 { PREFIX_TABLE (PREFIX_VEX_38DE) },
7739 { PREFIX_TABLE (PREFIX_VEX_38DF) },
c0f3af97 7740 /* e0 */
592d1631
L
7741 { Bad_Opcode },
7742 { Bad_Opcode },
7743 { Bad_Opcode },
7744 { Bad_Opcode },
7745 { Bad_Opcode },
7746 { Bad_Opcode },
7747 { Bad_Opcode },
7748 { Bad_Opcode },
c0f3af97 7749 /* e8 */
592d1631
L
7750 { Bad_Opcode },
7751 { Bad_Opcode },
7752 { Bad_Opcode },
7753 { Bad_Opcode },
7754 { Bad_Opcode },
7755 { Bad_Opcode },
7756 { Bad_Opcode },
7757 { Bad_Opcode },
c0f3af97 7758 /* f0 */
592d1631
L
7759 { Bad_Opcode },
7760 { Bad_Opcode },
7761 { Bad_Opcode },
7762 { Bad_Opcode },
7763 { Bad_Opcode },
7764 { Bad_Opcode },
7765 { Bad_Opcode },
7766 { Bad_Opcode },
c0f3af97 7767 /* f8 */
592d1631
L
7768 { Bad_Opcode },
7769 { Bad_Opcode },
7770 { Bad_Opcode },
7771 { Bad_Opcode },
7772 { Bad_Opcode },
7773 { Bad_Opcode },
7774 { Bad_Opcode },
7775 { Bad_Opcode },
c0f3af97
L
7776 },
7777 /* VEX_0F3A */
7778 {
7779 /* 00 */
592d1631
L
7780 { Bad_Opcode },
7781 { Bad_Opcode },
7782 { Bad_Opcode },
7783 { Bad_Opcode },
c0f3af97
L
7784 { PREFIX_TABLE (PREFIX_VEX_3A04) },
7785 { PREFIX_TABLE (PREFIX_VEX_3A05) },
7786 { PREFIX_TABLE (PREFIX_VEX_3A06) },
592d1631 7787 { Bad_Opcode },
c0f3af97
L
7788 /* 08 */
7789 { PREFIX_TABLE (PREFIX_VEX_3A08) },
7790 { PREFIX_TABLE (PREFIX_VEX_3A09) },
7791 { PREFIX_TABLE (PREFIX_VEX_3A0A) },
7792 { PREFIX_TABLE (PREFIX_VEX_3A0B) },
7793 { PREFIX_TABLE (PREFIX_VEX_3A0C) },
7794 { PREFIX_TABLE (PREFIX_VEX_3A0D) },
7795 { PREFIX_TABLE (PREFIX_VEX_3A0E) },
7796 { PREFIX_TABLE (PREFIX_VEX_3A0F) },
7797 /* 10 */
592d1631
L
7798 { Bad_Opcode },
7799 { Bad_Opcode },
7800 { Bad_Opcode },
7801 { Bad_Opcode },
c0f3af97
L
7802 { PREFIX_TABLE (PREFIX_VEX_3A14) },
7803 { PREFIX_TABLE (PREFIX_VEX_3A15) },
7804 { PREFIX_TABLE (PREFIX_VEX_3A16) },
7805 { PREFIX_TABLE (PREFIX_VEX_3A17) },
7806 /* 18 */
7807 { PREFIX_TABLE (PREFIX_VEX_3A18) },
7808 { PREFIX_TABLE (PREFIX_VEX_3A19) },
592d1631
L
7809 { Bad_Opcode },
7810 { Bad_Opcode },
7811 { Bad_Opcode },
7812 { Bad_Opcode },
7813 { Bad_Opcode },
7814 { Bad_Opcode },
c0f3af97
L
7815 /* 20 */
7816 { PREFIX_TABLE (PREFIX_VEX_3A20) },
7817 { PREFIX_TABLE (PREFIX_VEX_3A21) },
7818 { PREFIX_TABLE (PREFIX_VEX_3A22) },
592d1631
L
7819 { Bad_Opcode },
7820 { Bad_Opcode },
7821 { Bad_Opcode },
7822 { Bad_Opcode },
7823 { Bad_Opcode },
c0f3af97 7824 /* 28 */
592d1631
L
7825 { Bad_Opcode },
7826 { Bad_Opcode },
7827 { Bad_Opcode },
7828 { Bad_Opcode },
7829 { Bad_Opcode },
7830 { Bad_Opcode },
7831 { Bad_Opcode },
7832 { Bad_Opcode },
c0f3af97 7833 /* 30 */
592d1631
L
7834 { Bad_Opcode },
7835 { Bad_Opcode },
7836 { Bad_Opcode },
7837 { Bad_Opcode },
7838 { Bad_Opcode },
7839 { Bad_Opcode },
7840 { Bad_Opcode },
7841 { Bad_Opcode },
c0f3af97 7842 /* 38 */
592d1631
L
7843 { Bad_Opcode },
7844 { Bad_Opcode },
7845 { Bad_Opcode },
7846 { Bad_Opcode },
7847 { Bad_Opcode },
7848 { Bad_Opcode },
7849 { Bad_Opcode },
7850 { Bad_Opcode },
c0f3af97
L
7851 /* 40 */
7852 { PREFIX_TABLE (PREFIX_VEX_3A40) },
7853 { PREFIX_TABLE (PREFIX_VEX_3A41) },
7854 { PREFIX_TABLE (PREFIX_VEX_3A42) },
592d1631 7855 { Bad_Opcode },
ce2f5b3c 7856 { PREFIX_TABLE (PREFIX_VEX_3A44) },
592d1631
L
7857 { Bad_Opcode },
7858 { Bad_Opcode },
7859 { Bad_Opcode },
c0f3af97 7860 /* 48 */
592d1631
L
7861 { Bad_Opcode },
7862 { Bad_Opcode },
c0f3af97
L
7863 { PREFIX_TABLE (PREFIX_VEX_3A4A) },
7864 { PREFIX_TABLE (PREFIX_VEX_3A4B) },
7865 { PREFIX_TABLE (PREFIX_VEX_3A4C) },
592d1631
L
7866 { Bad_Opcode },
7867 { Bad_Opcode },
7868 { Bad_Opcode },
c0f3af97 7869 /* 50 */
592d1631
L
7870 { Bad_Opcode },
7871 { Bad_Opcode },
7872 { Bad_Opcode },
7873 { Bad_Opcode },
7874 { Bad_Opcode },
7875 { Bad_Opcode },
7876 { Bad_Opcode },
7877 { Bad_Opcode },
c0f3af97 7878 /* 58 */
592d1631
L
7879 { Bad_Opcode },
7880 { Bad_Opcode },
7881 { Bad_Opcode },
7882 { Bad_Opcode },
922d8de8
DR
7883 { PREFIX_TABLE (PREFIX_VEX_3A5C) },
7884 { PREFIX_TABLE (PREFIX_VEX_3A5D) },
7885 { PREFIX_TABLE (PREFIX_VEX_3A5E) },
7886 { PREFIX_TABLE (PREFIX_VEX_3A5F) },
c0f3af97
L
7887 /* 60 */
7888 { PREFIX_TABLE (PREFIX_VEX_3A60) },
7889 { PREFIX_TABLE (PREFIX_VEX_3A61) },
7890 { PREFIX_TABLE (PREFIX_VEX_3A62) },
7891 { PREFIX_TABLE (PREFIX_VEX_3A63) },
592d1631
L
7892 { Bad_Opcode },
7893 { Bad_Opcode },
7894 { Bad_Opcode },
7895 { Bad_Opcode },
c0f3af97 7896 /* 68 */
922d8de8
DR
7897 { PREFIX_TABLE (PREFIX_VEX_3A68) },
7898 { PREFIX_TABLE (PREFIX_VEX_3A69) },
7899 { PREFIX_TABLE (PREFIX_VEX_3A6A) },
7900 { PREFIX_TABLE (PREFIX_VEX_3A6B) },
7901 { PREFIX_TABLE (PREFIX_VEX_3A6C) },
7902 { PREFIX_TABLE (PREFIX_VEX_3A6D) },
7903 { PREFIX_TABLE (PREFIX_VEX_3A6E) },
7904 { PREFIX_TABLE (PREFIX_VEX_3A6F) },
c0f3af97 7905 /* 70 */
592d1631
L
7906 { Bad_Opcode },
7907 { Bad_Opcode },
7908 { Bad_Opcode },
7909 { Bad_Opcode },
7910 { Bad_Opcode },
7911 { Bad_Opcode },
7912 { Bad_Opcode },
7913 { Bad_Opcode },
c0f3af97 7914 /* 78 */
922d8de8
DR
7915 { PREFIX_TABLE (PREFIX_VEX_3A78) },
7916 { PREFIX_TABLE (PREFIX_VEX_3A79) },
7917 { PREFIX_TABLE (PREFIX_VEX_3A7A) },
7918 { PREFIX_TABLE (PREFIX_VEX_3A7B) },
7919 { PREFIX_TABLE (PREFIX_VEX_3A7C) },
7920 { PREFIX_TABLE (PREFIX_VEX_3A7D) },
7921 { PREFIX_TABLE (PREFIX_VEX_3A7E) },
7922 { PREFIX_TABLE (PREFIX_VEX_3A7F) },
c0f3af97 7923 /* 80 */
592d1631
L
7924 { Bad_Opcode },
7925 { Bad_Opcode },
7926 { Bad_Opcode },
7927 { Bad_Opcode },
7928 { Bad_Opcode },
7929 { Bad_Opcode },
7930 { Bad_Opcode },
7931 { Bad_Opcode },
c0f3af97 7932 /* 88 */
592d1631
L
7933 { Bad_Opcode },
7934 { Bad_Opcode },
7935 { Bad_Opcode },
7936 { Bad_Opcode },
7937 { Bad_Opcode },
7938 { Bad_Opcode },
7939 { Bad_Opcode },
7940 { Bad_Opcode },
c0f3af97 7941 /* 90 */
592d1631
L
7942 { Bad_Opcode },
7943 { Bad_Opcode },
7944 { Bad_Opcode },
7945 { Bad_Opcode },
7946 { Bad_Opcode },
7947 { Bad_Opcode },
7948 { Bad_Opcode },
7949 { Bad_Opcode },
c0f3af97 7950 /* 98 */
592d1631
L
7951 { Bad_Opcode },
7952 { Bad_Opcode },
7953 { Bad_Opcode },
7954 { Bad_Opcode },
7955 { Bad_Opcode },
7956 { Bad_Opcode },
7957 { Bad_Opcode },
7958 { Bad_Opcode },
c0f3af97 7959 /* a0 */
592d1631
L
7960 { Bad_Opcode },
7961 { Bad_Opcode },
7962 { Bad_Opcode },
7963 { Bad_Opcode },
7964 { Bad_Opcode },
7965 { Bad_Opcode },
7966 { Bad_Opcode },
7967 { Bad_Opcode },
c0f3af97 7968 /* a8 */
592d1631
L
7969 { Bad_Opcode },
7970 { Bad_Opcode },
7971 { Bad_Opcode },
7972 { Bad_Opcode },
7973 { Bad_Opcode },
7974 { Bad_Opcode },
7975 { Bad_Opcode },
7976 { Bad_Opcode },
c0f3af97 7977 /* b0 */
592d1631
L
7978 { Bad_Opcode },
7979 { Bad_Opcode },
7980 { Bad_Opcode },
7981 { Bad_Opcode },
7982 { Bad_Opcode },
7983 { Bad_Opcode },
7984 { Bad_Opcode },
7985 { Bad_Opcode },
c0f3af97 7986 /* b8 */
592d1631
L
7987 { Bad_Opcode },
7988 { Bad_Opcode },
7989 { Bad_Opcode },
7990 { Bad_Opcode },
7991 { Bad_Opcode },
7992 { Bad_Opcode },
7993 { Bad_Opcode },
7994 { Bad_Opcode },
c0f3af97 7995 /* c0 */
592d1631
L
7996 { Bad_Opcode },
7997 { Bad_Opcode },
7998 { Bad_Opcode },
7999 { Bad_Opcode },
8000 { Bad_Opcode },
8001 { Bad_Opcode },
8002 { Bad_Opcode },
8003 { Bad_Opcode },
c0f3af97 8004 /* c8 */
592d1631
L
8005 { Bad_Opcode },
8006 { Bad_Opcode },
8007 { Bad_Opcode },
8008 { Bad_Opcode },
8009 { Bad_Opcode },
8010 { Bad_Opcode },
8011 { Bad_Opcode },
8012 { Bad_Opcode },
c0f3af97 8013 /* d0 */
592d1631
L
8014 { Bad_Opcode },
8015 { Bad_Opcode },
8016 { Bad_Opcode },
8017 { Bad_Opcode },
8018 { Bad_Opcode },
8019 { Bad_Opcode },
8020 { Bad_Opcode },
8021 { Bad_Opcode },
c0f3af97 8022 /* d8 */
592d1631
L
8023 { Bad_Opcode },
8024 { Bad_Opcode },
8025 { Bad_Opcode },
8026 { Bad_Opcode },
8027 { Bad_Opcode },
8028 { Bad_Opcode },
8029 { Bad_Opcode },
a5ff0eb2 8030 { PREFIX_TABLE (PREFIX_VEX_3ADF) },
c0f3af97 8031 /* e0 */
592d1631
L
8032 { Bad_Opcode },
8033 { Bad_Opcode },
8034 { Bad_Opcode },
8035 { Bad_Opcode },
8036 { Bad_Opcode },
8037 { Bad_Opcode },
8038 { Bad_Opcode },
8039 { Bad_Opcode },
c0f3af97 8040 /* e8 */
592d1631
L
8041 { Bad_Opcode },
8042 { Bad_Opcode },
8043 { Bad_Opcode },
8044 { Bad_Opcode },
8045 { Bad_Opcode },
8046 { Bad_Opcode },
8047 { Bad_Opcode },
8048 { Bad_Opcode },
c0f3af97 8049 /* f0 */
592d1631
L
8050 { Bad_Opcode },
8051 { Bad_Opcode },
8052 { Bad_Opcode },
8053 { Bad_Opcode },
8054 { Bad_Opcode },
8055 { Bad_Opcode },
8056 { Bad_Opcode },
8057 { Bad_Opcode },
c0f3af97 8058 /* f8 */
592d1631
L
8059 { Bad_Opcode },
8060 { Bad_Opcode },
8061 { Bad_Opcode },
8062 { Bad_Opcode },
8063 { Bad_Opcode },
8064 { Bad_Opcode },
8065 { Bad_Opcode },
8066 { Bad_Opcode },
c0f3af97
L
8067 },
8068};
8069
8070static const struct dis386 vex_len_table[][2] = {
8071 /* VEX_LEN_10_P_1 */
8072 {
9e30b8e0 8073 { VEX_W_TABLE (VEX_W_10_P_1) },
539f890d 8074 { VEX_W_TABLE (VEX_W_10_P_1) },
c0f3af97
L
8075 },
8076
8077 /* VEX_LEN_10_P_3 */
8078 {
9e30b8e0 8079 { VEX_W_TABLE (VEX_W_10_P_3) },
539f890d 8080 { VEX_W_TABLE (VEX_W_10_P_3) },
c0f3af97
L
8081 },
8082
8083 /* VEX_LEN_11_P_1 */
8084 {
9e30b8e0 8085 { VEX_W_TABLE (VEX_W_11_P_1) },
539f890d 8086 { VEX_W_TABLE (VEX_W_11_P_1) },
c0f3af97
L
8087 },
8088
8089 /* VEX_LEN_11_P_3 */
8090 {
9e30b8e0 8091 { VEX_W_TABLE (VEX_W_11_P_3) },
539f890d 8092 { VEX_W_TABLE (VEX_W_11_P_3) },
c0f3af97
L
8093 },
8094
8095 /* VEX_LEN_12_P_0_M_0 */
8096 {
9e30b8e0 8097 { VEX_W_TABLE (VEX_W_12_P_0_M_0) },
c0f3af97
L
8098 },
8099
8100 /* VEX_LEN_12_P_0_M_1 */
8101 {
9e30b8e0 8102 { VEX_W_TABLE (VEX_W_12_P_0_M_1) },
c0f3af97
L
8103 },
8104
8105 /* VEX_LEN_12_P_2 */
8106 {
9e30b8e0 8107 { VEX_W_TABLE (VEX_W_12_P_2) },
c0f3af97
L
8108 },
8109
8110 /* VEX_LEN_13_M_0 */
8111 {
9e30b8e0 8112 { VEX_W_TABLE (VEX_W_13_M_0) },
c0f3af97
L
8113 },
8114
8115 /* VEX_LEN_16_P_0_M_0 */
8116 {
9e30b8e0 8117 { VEX_W_TABLE (VEX_W_16_P_0_M_0) },
c0f3af97
L
8118 },
8119
8120 /* VEX_LEN_16_P_0_M_1 */
8121 {
9e30b8e0 8122 { VEX_W_TABLE (VEX_W_16_P_0_M_1) },
c0f3af97
L
8123 },
8124
8125 /* VEX_LEN_16_P_2 */
8126 {
9e30b8e0 8127 { VEX_W_TABLE (VEX_W_16_P_2) },
c0f3af97
L
8128 },
8129
8130 /* VEX_LEN_17_M_0 */
8131 {
9e30b8e0 8132 { VEX_W_TABLE (VEX_W_17_M_0) },
c0f3af97
L
8133 },
8134
8135 /* VEX_LEN_2A_P_1 */
8136 {
539f890d
L
8137 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev } },
8138 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev } },
c0f3af97
L
8139 },
8140
8141 /* VEX_LEN_2A_P_3 */
8142 {
539f890d
L
8143 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev } },
8144 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev } },
c0f3af97
L
8145 },
8146
c0f3af97
L
8147 /* VEX_LEN_2C_P_1 */
8148 {
539f890d
L
8149 { "vcvttss2siY", { Gv, EXdScalar } },
8150 { "vcvttss2siY", { Gv, EXdScalar } },
c0f3af97
L
8151 },
8152
8153 /* VEX_LEN_2C_P_3 */
8154 {
539f890d
L
8155 { "vcvttsd2siY", { Gv, EXqScalar } },
8156 { "vcvttsd2siY", { Gv, EXqScalar } },
c0f3af97
L
8157 },
8158
8159 /* VEX_LEN_2D_P_1 */
8160 {
539f890d
L
8161 { "vcvtss2siY", { Gv, EXdScalar } },
8162 { "vcvtss2siY", { Gv, EXdScalar } },
c0f3af97
L
8163 },
8164
8165 /* VEX_LEN_2D_P_3 */
8166 {
539f890d
L
8167 { "vcvtsd2siY", { Gv, EXqScalar } },
8168 { "vcvtsd2siY", { Gv, EXqScalar } },
c0f3af97
L
8169 },
8170
8171 /* VEX_LEN_2E_P_0 */
8172 {
9e30b8e0 8173 { VEX_W_TABLE (VEX_W_2E_P_0) },
539f890d 8174 { VEX_W_TABLE (VEX_W_2E_P_0) },
c0f3af97
L
8175 },
8176
8177 /* VEX_LEN_2E_P_2 */
8178 {
9e30b8e0 8179 { VEX_W_TABLE (VEX_W_2E_P_2) },
539f890d 8180 { VEX_W_TABLE (VEX_W_2E_P_2) },
c0f3af97
L
8181 },
8182
8183 /* VEX_LEN_2F_P_0 */
8184 {
9e30b8e0 8185 { VEX_W_TABLE (VEX_W_2F_P_0) },
539f890d 8186 { VEX_W_TABLE (VEX_W_2F_P_0) },
c0f3af97
L
8187 },
8188
8189 /* VEX_LEN_2F_P_2 */
8190 {
9e30b8e0 8191 { VEX_W_TABLE (VEX_W_2F_P_2) },
539f890d 8192 { VEX_W_TABLE (VEX_W_2F_P_2) },
c0f3af97
L
8193 },
8194
8195 /* VEX_LEN_51_P_1 */
8196 {
9e30b8e0 8197 { VEX_W_TABLE (VEX_W_51_P_1) },
539f890d 8198 { VEX_W_TABLE (VEX_W_51_P_1) },
c0f3af97
L
8199 },
8200
8201 /* VEX_LEN_51_P_3 */
8202 {
9e30b8e0 8203 { VEX_W_TABLE (VEX_W_51_P_3) },
539f890d 8204 { VEX_W_TABLE (VEX_W_51_P_3) },
c0f3af97
L
8205 },
8206
8207 /* VEX_LEN_52_P_1 */
8208 {
9e30b8e0 8209 { VEX_W_TABLE (VEX_W_52_P_1) },
539f890d 8210 { VEX_W_TABLE (VEX_W_52_P_1) },
c0f3af97
L
8211 },
8212
8213 /* VEX_LEN_53_P_1 */
8214 {
9e30b8e0 8215 { VEX_W_TABLE (VEX_W_53_P_1) },
539f890d 8216 { VEX_W_TABLE (VEX_W_53_P_1) },
c0f3af97
L
8217 },
8218
8219 /* VEX_LEN_58_P_1 */
8220 {
9e30b8e0 8221 { VEX_W_TABLE (VEX_W_58_P_1) },
539f890d 8222 { VEX_W_TABLE (VEX_W_58_P_1) },
c0f3af97
L
8223 },
8224
8225 /* VEX_LEN_58_P_3 */
8226 {
9e30b8e0 8227 { VEX_W_TABLE (VEX_W_58_P_3) },
539f890d 8228 { VEX_W_TABLE (VEX_W_58_P_3) },
c0f3af97
L
8229 },
8230
8231 /* VEX_LEN_59_P_1 */
8232 {
9e30b8e0 8233 { VEX_W_TABLE (VEX_W_59_P_1) },
539f890d 8234 { VEX_W_TABLE (VEX_W_59_P_1) },
c0f3af97
L
8235 },
8236
8237 /* VEX_LEN_59_P_3 */
8238 {
9e30b8e0 8239 { VEX_W_TABLE (VEX_W_59_P_3) },
539f890d 8240 { VEX_W_TABLE (VEX_W_59_P_3) },
c0f3af97
L
8241 },
8242
8243 /* VEX_LEN_5A_P_1 */
8244 {
9e30b8e0 8245 { VEX_W_TABLE (VEX_W_5A_P_1) },
539f890d 8246 { VEX_W_TABLE (VEX_W_5A_P_1) },
c0f3af97
L
8247 },
8248
8249 /* VEX_LEN_5A_P_3 */
8250 {
9e30b8e0 8251 { VEX_W_TABLE (VEX_W_5A_P_3) },
539f890d 8252 { VEX_W_TABLE (VEX_W_5A_P_3) },
c0f3af97
L
8253 },
8254
8255 /* VEX_LEN_5C_P_1 */
8256 {
9e30b8e0 8257 { VEX_W_TABLE (VEX_W_5C_P_1) },
539f890d 8258 { VEX_W_TABLE (VEX_W_5C_P_1) },
c0f3af97
L
8259 },
8260
8261 /* VEX_LEN_5C_P_3 */
8262 {
9e30b8e0 8263 { VEX_W_TABLE (VEX_W_5C_P_3) },
539f890d 8264 { VEX_W_TABLE (VEX_W_5C_P_3) },
c0f3af97
L
8265 },
8266
8267 /* VEX_LEN_5D_P_1 */
8268 {
9e30b8e0 8269 { VEX_W_TABLE (VEX_W_5D_P_1) },
539f890d 8270 { VEX_W_TABLE (VEX_W_5D_P_1) },
c0f3af97
L
8271 },
8272
8273 /* VEX_LEN_5D_P_3 */
8274 {
9e30b8e0 8275 { VEX_W_TABLE (VEX_W_5D_P_3) },
539f890d 8276 { VEX_W_TABLE (VEX_W_5D_P_3) },
c0f3af97
L
8277 },
8278
8279 /* VEX_LEN_5E_P_1 */
8280 {
9e30b8e0 8281 { VEX_W_TABLE (VEX_W_5E_P_1) },
539f890d 8282 { VEX_W_TABLE (VEX_W_5E_P_1) },
c0f3af97
L
8283 },
8284
8285 /* VEX_LEN_5E_P_3 */
8286 {
9e30b8e0 8287 { VEX_W_TABLE (VEX_W_5E_P_3) },
539f890d 8288 { VEX_W_TABLE (VEX_W_5E_P_3) },
c0f3af97
L
8289 },
8290
8291 /* VEX_LEN_5F_P_1 */
8292 {
9e30b8e0 8293 { VEX_W_TABLE (VEX_W_5F_P_1) },
539f890d 8294 { VEX_W_TABLE (VEX_W_5F_P_1) },
c0f3af97
L
8295 },
8296
8297 /* VEX_LEN_5F_P_3 */
8298 {
9e30b8e0 8299 { VEX_W_TABLE (VEX_W_5F_P_3) },
539f890d 8300 { VEX_W_TABLE (VEX_W_5F_P_3) },
c0f3af97
L
8301 },
8302
8303 /* VEX_LEN_60_P_2 */
8304 {
9e30b8e0 8305 { VEX_W_TABLE (VEX_W_60_P_2) },
c0f3af97
L
8306 },
8307
8308 /* VEX_LEN_61_P_2 */
8309 {
9e30b8e0 8310 { VEX_W_TABLE (VEX_W_61_P_2) },
c0f3af97
L
8311 },
8312
8313 /* VEX_LEN_62_P_2 */
8314 {
9e30b8e0 8315 { VEX_W_TABLE (VEX_W_62_P_2) },
c0f3af97
L
8316 },
8317
8318 /* VEX_LEN_63_P_2 */
8319 {
9e30b8e0 8320 { VEX_W_TABLE (VEX_W_63_P_2) },
c0f3af97
L
8321 },
8322
8323 /* VEX_LEN_64_P_2 */
8324 {
9e30b8e0 8325 { VEX_W_TABLE (VEX_W_64_P_2) },
c0f3af97
L
8326 },
8327
8328 /* VEX_LEN_65_P_2 */
8329 {
9e30b8e0 8330 { VEX_W_TABLE (VEX_W_65_P_2) },
c0f3af97
L
8331 },
8332
8333 /* VEX_LEN_66_P_2 */
8334 {
9e30b8e0 8335 { VEX_W_TABLE (VEX_W_66_P_2) },
c0f3af97
L
8336 },
8337
8338 /* VEX_LEN_67_P_2 */
8339 {
9e30b8e0 8340 { VEX_W_TABLE (VEX_W_67_P_2) },
c0f3af97
L
8341 },
8342
8343 /* VEX_LEN_68_P_2 */
8344 {
9e30b8e0 8345 { VEX_W_TABLE (VEX_W_68_P_2) },
c0f3af97
L
8346 },
8347
8348 /* VEX_LEN_69_P_2 */
8349 {
9e30b8e0 8350 { VEX_W_TABLE (VEX_W_69_P_2) },
c0f3af97
L
8351 },
8352
8353 /* VEX_LEN_6A_P_2 */
8354 {
9e30b8e0 8355 { VEX_W_TABLE (VEX_W_6A_P_2) },
c0f3af97
L
8356 },
8357
8358 /* VEX_LEN_6B_P_2 */
8359 {
9e30b8e0 8360 { VEX_W_TABLE (VEX_W_6B_P_2) },
c0f3af97
L
8361 },
8362
8363 /* VEX_LEN_6C_P_2 */
8364 {
9e30b8e0 8365 { VEX_W_TABLE (VEX_W_6C_P_2) },
c0f3af97
L
8366 },
8367
8368 /* VEX_LEN_6D_P_2 */
8369 {
9e30b8e0 8370 { VEX_W_TABLE (VEX_W_6D_P_2) },
c0f3af97
L
8371 },
8372
8373 /* VEX_LEN_6E_P_2 */
8374 {
539f890d
L
8375 { "vmovK", { XMScalar, Edq } },
8376 { "vmovK", { XMScalar, Edq } },
c0f3af97
L
8377 },
8378
8379 /* VEX_LEN_70_P_1 */
8380 {
9e30b8e0 8381 { VEX_W_TABLE (VEX_W_70_P_1) },
c0f3af97
L
8382 },
8383
8384 /* VEX_LEN_70_P_2 */
8385 {
9e30b8e0 8386 { VEX_W_TABLE (VEX_W_70_P_2) },
c0f3af97
L
8387 },
8388
8389 /* VEX_LEN_70_P_3 */
8390 {
9e30b8e0 8391 { VEX_W_TABLE (VEX_W_70_P_3) },
c0f3af97
L
8392 },
8393
8394 /* VEX_LEN_71_R_2_P_2 */
8395 {
9e30b8e0 8396 { VEX_W_TABLE (VEX_W_71_R_2_P_2) },
c0f3af97
L
8397 },
8398
8399 /* VEX_LEN_71_R_4_P_2 */
8400 {
9e30b8e0 8401 { VEX_W_TABLE (VEX_W_71_R_4_P_2) },
c0f3af97
L
8402 },
8403
8404 /* VEX_LEN_71_R_6_P_2 */
8405 {
9e30b8e0 8406 { VEX_W_TABLE (VEX_W_71_R_6_P_2) },
c0f3af97
L
8407 },
8408
8409 /* VEX_LEN_72_R_2_P_2 */
8410 {
9e30b8e0 8411 { VEX_W_TABLE (VEX_W_72_R_2_P_2) },
c0f3af97
L
8412 },
8413
8414 /* VEX_LEN_72_R_4_P_2 */
8415 {
9e30b8e0 8416 { VEX_W_TABLE (VEX_W_72_R_4_P_2) },
c0f3af97
L
8417 },
8418
8419 /* VEX_LEN_72_R_6_P_2 */
8420 {
9e30b8e0 8421 { VEX_W_TABLE (VEX_W_72_R_6_P_2) },
c0f3af97
L
8422 },
8423
8424 /* VEX_LEN_73_R_2_P_2 */
8425 {
9e30b8e0 8426 { VEX_W_TABLE (VEX_W_73_R_2_P_2) },
c0f3af97
L
8427 },
8428
8429 /* VEX_LEN_73_R_3_P_2 */
8430 {
9e30b8e0 8431 { VEX_W_TABLE (VEX_W_73_R_3_P_2) },
c0f3af97
L
8432 },
8433
8434 /* VEX_LEN_73_R_6_P_2 */
8435 {
9e30b8e0 8436 { VEX_W_TABLE (VEX_W_73_R_6_P_2) },
c0f3af97
L
8437 },
8438
8439 /* VEX_LEN_73_R_7_P_2 */
8440 {
9e30b8e0 8441 { VEX_W_TABLE (VEX_W_73_R_7_P_2) },
c0f3af97
L
8442 },
8443
8444 /* VEX_LEN_74_P_2 */
8445 {
9e30b8e0 8446 { VEX_W_TABLE (VEX_W_74_P_2) },
c0f3af97
L
8447 },
8448
8449 /* VEX_LEN_75_P_2 */
8450 {
9e30b8e0 8451 { VEX_W_TABLE (VEX_W_75_P_2) },
c0f3af97
L
8452 },
8453
8454 /* VEX_LEN_76_P_2 */
8455 {
9e30b8e0 8456 { VEX_W_TABLE (VEX_W_76_P_2) },
c0f3af97
L
8457 },
8458
8459 /* VEX_LEN_7E_P_1 */
8460 {
9e30b8e0 8461 { VEX_W_TABLE (VEX_W_7E_P_1) },
539f890d 8462 { VEX_W_TABLE (VEX_W_7E_P_1) },
c0f3af97
L
8463 },
8464
8465 /* VEX_LEN_7E_P_2 */
8466 {
539f890d
L
8467 { "vmovK", { Edq, XMScalar } },
8468 { "vmovK", { Edq, XMScalar } },
c0f3af97
L
8469 },
8470
9daa0d29 8471 /* VEX_LEN_AE_R_2_M_0 */
c0f3af97 8472 {
9e30b8e0 8473 { VEX_W_TABLE (VEX_W_AE_R_2_M_0) },
c0f3af97
L
8474 },
8475
9daa0d29 8476 /* VEX_LEN_AE_R_3_M_0 */
c0f3af97 8477 {
9e30b8e0 8478 { VEX_W_TABLE (VEX_W_AE_R_3_M_0) },
c0f3af97
L
8479 },
8480
8481 /* VEX_LEN_C2_P_1 */
8482 {
9e30b8e0 8483 { VEX_W_TABLE (VEX_W_C2_P_1) },
539f890d 8484 { VEX_W_TABLE (VEX_W_C2_P_1) },
c0f3af97
L
8485 },
8486
8487 /* VEX_LEN_C2_P_3 */
8488 {
9e30b8e0 8489 { VEX_W_TABLE (VEX_W_C2_P_3) },
539f890d 8490 { VEX_W_TABLE (VEX_W_C2_P_3) },
c0f3af97
L
8491 },
8492
8493 /* VEX_LEN_C4_P_2 */
8494 {
9e30b8e0 8495 { VEX_W_TABLE (VEX_W_C4_P_2) },
c0f3af97
L
8496 },
8497
8498 /* VEX_LEN_C5_P_2 */
8499 {
9e30b8e0 8500 { VEX_W_TABLE (VEX_W_C5_P_2) },
c0f3af97
L
8501 },
8502
8503 /* VEX_LEN_D1_P_2 */
8504 {
9e30b8e0 8505 { VEX_W_TABLE (VEX_W_D1_P_2) },
c0f3af97
L
8506 },
8507
8508 /* VEX_LEN_D2_P_2 */
8509 {
9e30b8e0 8510 { VEX_W_TABLE (VEX_W_D2_P_2) },
c0f3af97
L
8511 },
8512
8513 /* VEX_LEN_D3_P_2 */
8514 {
9e30b8e0 8515 { VEX_W_TABLE (VEX_W_D3_P_2) },
c0f3af97
L
8516 },
8517
8518 /* VEX_LEN_D4_P_2 */
8519 {
9e30b8e0 8520 { VEX_W_TABLE (VEX_W_D4_P_2) },
c0f3af97
L
8521 },
8522
8523 /* VEX_LEN_D5_P_2 */
8524 {
9e30b8e0 8525 { VEX_W_TABLE (VEX_W_D5_P_2) },
c0f3af97
L
8526 },
8527
8528 /* VEX_LEN_D6_P_2 */
8529 {
9e30b8e0 8530 { VEX_W_TABLE (VEX_W_D6_P_2) },
539f890d 8531 { VEX_W_TABLE (VEX_W_D6_P_2) },
c0f3af97
L
8532 },
8533
8534 /* VEX_LEN_D7_P_2_M_1 */
8535 {
9e30b8e0 8536 { VEX_W_TABLE (VEX_W_D7_P_2_M_1) },
c0f3af97
L
8537 },
8538
8539 /* VEX_LEN_D8_P_2 */
8540 {
9e30b8e0 8541 { VEX_W_TABLE (VEX_W_D8_P_2) },
c0f3af97
L
8542 },
8543
8544 /* VEX_LEN_D9_P_2 */
8545 {
9e30b8e0 8546 { VEX_W_TABLE (VEX_W_D9_P_2) },
c0f3af97
L
8547 },
8548
8549 /* VEX_LEN_DA_P_2 */
8550 {
9e30b8e0 8551 { VEX_W_TABLE (VEX_W_DA_P_2) },
c0f3af97
L
8552 },
8553
8554 /* VEX_LEN_DB_P_2 */
8555 {
9e30b8e0 8556 { VEX_W_TABLE (VEX_W_DB_P_2) },
c0f3af97
L
8557 },
8558
8559 /* VEX_LEN_DC_P_2 */
8560 {
9e30b8e0 8561 { VEX_W_TABLE (VEX_W_DC_P_2) },
c0f3af97
L
8562 },
8563
8564 /* VEX_LEN_DD_P_2 */
8565 {
9e30b8e0 8566 { VEX_W_TABLE (VEX_W_DD_P_2) },
c0f3af97
L
8567 },
8568
8569 /* VEX_LEN_DE_P_2 */
8570 {
9e30b8e0 8571 { VEX_W_TABLE (VEX_W_DE_P_2) },
c0f3af97
L
8572 },
8573
8574 /* VEX_LEN_DF_P_2 */
8575 {
9e30b8e0 8576 { VEX_W_TABLE (VEX_W_DF_P_2) },
c0f3af97
L
8577 },
8578
8579 /* VEX_LEN_E0_P_2 */
8580 {
9e30b8e0 8581 { VEX_W_TABLE (VEX_W_E0_P_2) },
c0f3af97
L
8582 },
8583
8584 /* VEX_LEN_E1_P_2 */
8585 {
9e30b8e0 8586 { VEX_W_TABLE (VEX_W_E1_P_2) },
c0f3af97
L
8587 },
8588
8589 /* VEX_LEN_E2_P_2 */
8590 {
9e30b8e0 8591 { VEX_W_TABLE (VEX_W_E2_P_2) },
c0f3af97
L
8592 },
8593
8594 /* VEX_LEN_E3_P_2 */
8595 {
9e30b8e0 8596 { VEX_W_TABLE (VEX_W_E3_P_2) },
c0f3af97
L
8597 },
8598
8599 /* VEX_LEN_E4_P_2 */
8600 {
9e30b8e0 8601 { VEX_W_TABLE (VEX_W_E4_P_2) },
c0f3af97
L
8602 },
8603
8604 /* VEX_LEN_E5_P_2 */
8605 {
9e30b8e0 8606 { VEX_W_TABLE (VEX_W_E5_P_2) },
c0f3af97
L
8607 },
8608
c0f3af97
L
8609 /* VEX_LEN_E8_P_2 */
8610 {
9e30b8e0 8611 { VEX_W_TABLE (VEX_W_E8_P_2) },
c0f3af97
L
8612 },
8613
8614 /* VEX_LEN_E9_P_2 */
8615 {
9e30b8e0 8616 { VEX_W_TABLE (VEX_W_E9_P_2) },
c0f3af97
L
8617 },
8618
8619 /* VEX_LEN_EA_P_2 */
8620 {
9e30b8e0 8621 { VEX_W_TABLE (VEX_W_EA_P_2) },
c0f3af97
L
8622 },
8623
8624 /* VEX_LEN_EB_P_2 */
8625 {
9e30b8e0 8626 { VEX_W_TABLE (VEX_W_EB_P_2) },
c0f3af97
L
8627 },
8628
8629 /* VEX_LEN_EC_P_2 */
8630 {
9e30b8e0 8631 { VEX_W_TABLE (VEX_W_EC_P_2) },
c0f3af97
L
8632 },
8633
8634 /* VEX_LEN_ED_P_2 */
8635 {
9e30b8e0 8636 { VEX_W_TABLE (VEX_W_ED_P_2) },
c0f3af97
L
8637 },
8638
8639 /* VEX_LEN_EE_P_2 */
8640 {
9e30b8e0 8641 { VEX_W_TABLE (VEX_W_EE_P_2) },
c0f3af97
L
8642 },
8643
8644 /* VEX_LEN_EF_P_2 */
8645 {
9e30b8e0 8646 { VEX_W_TABLE (VEX_W_EF_P_2) },
c0f3af97
L
8647 },
8648
8649 /* VEX_LEN_F1_P_2 */
8650 {
9e30b8e0 8651 { VEX_W_TABLE (VEX_W_F1_P_2) },
c0f3af97
L
8652 },
8653
8654 /* VEX_LEN_F2_P_2 */
8655 {
9e30b8e0 8656 { VEX_W_TABLE (VEX_W_F2_P_2) },
c0f3af97
L
8657 },
8658
8659 /* VEX_LEN_F3_P_2 */
8660 {
9e30b8e0 8661 { VEX_W_TABLE (VEX_W_F3_P_2) },
c0f3af97
L
8662 },
8663
8664 /* VEX_LEN_F4_P_2 */
8665 {
9e30b8e0 8666 { VEX_W_TABLE (VEX_W_F4_P_2) },
c0f3af97
L
8667 },
8668
8669 /* VEX_LEN_F5_P_2 */
8670 {
9e30b8e0 8671 { VEX_W_TABLE (VEX_W_F5_P_2) },
c0f3af97
L
8672 },
8673
8674 /* VEX_LEN_F6_P_2 */
8675 {
9e30b8e0 8676 { VEX_W_TABLE (VEX_W_F6_P_2) },
c0f3af97
L
8677 },
8678
8679 /* VEX_LEN_F7_P_2 */
8680 {
9e30b8e0 8681 { VEX_W_TABLE (VEX_W_F7_P_2) },
c0f3af97
L
8682 },
8683
8684 /* VEX_LEN_F8_P_2 */
8685 {
9e30b8e0 8686 { VEX_W_TABLE (VEX_W_F8_P_2) },
c0f3af97
L
8687 },
8688
8689 /* VEX_LEN_F9_P_2 */
8690 {
9e30b8e0 8691 { VEX_W_TABLE (VEX_W_F9_P_2) },
c0f3af97
L
8692 },
8693
8694 /* VEX_LEN_FA_P_2 */
8695 {
9e30b8e0 8696 { VEX_W_TABLE (VEX_W_FA_P_2) },
c0f3af97
L
8697 },
8698
8699 /* VEX_LEN_FB_P_2 */
8700 {
9e30b8e0 8701 { VEX_W_TABLE (VEX_W_FB_P_2) },
c0f3af97
L
8702 },
8703
8704 /* VEX_LEN_FC_P_2 */
8705 {
9e30b8e0 8706 { VEX_W_TABLE (VEX_W_FC_P_2) },
c0f3af97
L
8707 },
8708
8709 /* VEX_LEN_FD_P_2 */
8710 {
9e30b8e0 8711 { VEX_W_TABLE (VEX_W_FD_P_2) },
c0f3af97
L
8712 },
8713
8714 /* VEX_LEN_FE_P_2 */
8715 {
9e30b8e0 8716 { VEX_W_TABLE (VEX_W_FE_P_2) },
c0f3af97
L
8717 },
8718
8719 /* VEX_LEN_3800_P_2 */
8720 {
9e30b8e0 8721 { VEX_W_TABLE (VEX_W_3800_P_2) },
c0f3af97
L
8722 },
8723
8724 /* VEX_LEN_3801_P_2 */
8725 {
9e30b8e0 8726 { VEX_W_TABLE (VEX_W_3801_P_2) },
c0f3af97
L
8727 },
8728
8729 /* VEX_LEN_3802_P_2 */
8730 {
9e30b8e0 8731 { VEX_W_TABLE (VEX_W_3802_P_2) },
c0f3af97
L
8732 },
8733
8734 /* VEX_LEN_3803_P_2 */
8735 {
9e30b8e0 8736 { VEX_W_TABLE (VEX_W_3803_P_2) },
c0f3af97
L
8737 },
8738
8739 /* VEX_LEN_3804_P_2 */
8740 {
9e30b8e0 8741 { VEX_W_TABLE (VEX_W_3804_P_2) },
c0f3af97
L
8742 },
8743
8744 /* VEX_LEN_3805_P_2 */
8745 {
9e30b8e0 8746 { VEX_W_TABLE (VEX_W_3805_P_2) },
c0f3af97
L
8747 },
8748
8749 /* VEX_LEN_3806_P_2 */
8750 {
9e30b8e0 8751 { VEX_W_TABLE (VEX_W_3806_P_2) },
c0f3af97
L
8752 },
8753
8754 /* VEX_LEN_3807_P_2 */
8755 {
9e30b8e0 8756 { VEX_W_TABLE (VEX_W_3807_P_2) },
c0f3af97
L
8757 },
8758
8759 /* VEX_LEN_3808_P_2 */
8760 {
9e30b8e0 8761 { VEX_W_TABLE (VEX_W_3808_P_2) },
c0f3af97
L
8762 },
8763
8764 /* VEX_LEN_3809_P_2 */
8765 {
9e30b8e0 8766 { VEX_W_TABLE (VEX_W_3809_P_2) },
c0f3af97
L
8767 },
8768
8769 /* VEX_LEN_380A_P_2 */
8770 {
9e30b8e0 8771 { VEX_W_TABLE (VEX_W_380A_P_2) },
c0f3af97
L
8772 },
8773
8774 /* VEX_LEN_380B_P_2 */
8775 {
9e30b8e0 8776 { VEX_W_TABLE (VEX_W_380B_P_2) },
c0f3af97
L
8777 },
8778
8779 /* VEX_LEN_3819_P_2_M_0 */
8780 {
592d1631 8781 { Bad_Opcode },
9e30b8e0 8782 { VEX_W_TABLE (VEX_W_3819_P_2_M_0) },
c0f3af97
L
8783 },
8784
8785 /* VEX_LEN_381A_P_2_M_0 */
8786 {
592d1631 8787 { Bad_Opcode },
9e30b8e0 8788 { VEX_W_TABLE (VEX_W_381A_P_2_M_0) },
c0f3af97
L
8789 },
8790
8791 /* VEX_LEN_381C_P_2 */
8792 {
9e30b8e0 8793 { VEX_W_TABLE (VEX_W_381C_P_2) },
c0f3af97
L
8794 },
8795
8796 /* VEX_LEN_381D_P_2 */
8797 {
9e30b8e0 8798 { VEX_W_TABLE (VEX_W_381D_P_2) },
c0f3af97
L
8799 },
8800
8801 /* VEX_LEN_381E_P_2 */
8802 {
9e30b8e0 8803 { VEX_W_TABLE (VEX_W_381E_P_2) },
c0f3af97
L
8804 },
8805
8806 /* VEX_LEN_3820_P_2 */
8807 {
9e30b8e0 8808 { VEX_W_TABLE (VEX_W_3820_P_2) },
c0f3af97
L
8809 },
8810
8811 /* VEX_LEN_3821_P_2 */
8812 {
9e30b8e0 8813 { VEX_W_TABLE (VEX_W_3821_P_2) },
c0f3af97
L
8814 },
8815
8816 /* VEX_LEN_3822_P_2 */
8817 {
9e30b8e0 8818 { VEX_W_TABLE (VEX_W_3822_P_2) },
c0f3af97
L
8819 },
8820
8821 /* VEX_LEN_3823_P_2 */
8822 {
9e30b8e0 8823 { VEX_W_TABLE (VEX_W_3823_P_2) },
c0f3af97
L
8824 },
8825
8826 /* VEX_LEN_3824_P_2 */
8827 {
9e30b8e0 8828 { VEX_W_TABLE (VEX_W_3824_P_2) },
c0f3af97
L
8829 },
8830
8831 /* VEX_LEN_3825_P_2 */
8832 {
9e30b8e0 8833 { VEX_W_TABLE (VEX_W_3825_P_2) },
c0f3af97
L
8834 },
8835
8836 /* VEX_LEN_3828_P_2 */
8837 {
9e30b8e0 8838 { VEX_W_TABLE (VEX_W_3828_P_2) },
c0f3af97
L
8839 },
8840
8841 /* VEX_LEN_3829_P_2 */
8842 {
9e30b8e0 8843 { VEX_W_TABLE (VEX_W_3829_P_2) },
c0f3af97
L
8844 },
8845
8846 /* VEX_LEN_382A_P_2_M_0 */
8847 {
9e30b8e0 8848 { VEX_W_TABLE (VEX_W_382A_P_2_M_0) },
c0f3af97
L
8849 },
8850
8851 /* VEX_LEN_382B_P_2 */
8852 {
9e30b8e0 8853 { VEX_W_TABLE (VEX_W_382B_P_2) },
c0f3af97
L
8854 },
8855
8856 /* VEX_LEN_3830_P_2 */
8857 {
9e30b8e0 8858 { VEX_W_TABLE (VEX_W_3830_P_2) },
c0f3af97
L
8859 },
8860
8861 /* VEX_LEN_3831_P_2 */
8862 {
9e30b8e0 8863 { VEX_W_TABLE (VEX_W_3831_P_2) },
c0f3af97
L
8864 },
8865
8866 /* VEX_LEN_3832_P_2 */
8867 {
9e30b8e0 8868 { VEX_W_TABLE (VEX_W_3832_P_2) },
c0f3af97
L
8869 },
8870
8871 /* VEX_LEN_3833_P_2 */
8872 {
9e30b8e0 8873 { VEX_W_TABLE (VEX_W_3833_P_2) },
c0f3af97
L
8874 },
8875
8876 /* VEX_LEN_3834_P_2 */
8877 {
9e30b8e0 8878 { VEX_W_TABLE (VEX_W_3834_P_2) },
c0f3af97
L
8879 },
8880
8881 /* VEX_LEN_3835_P_2 */
8882 {
9e30b8e0 8883 { VEX_W_TABLE (VEX_W_3835_P_2) },
c0f3af97
L
8884 },
8885
8886 /* VEX_LEN_3837_P_2 */
8887 {
9e30b8e0 8888 { VEX_W_TABLE (VEX_W_3837_P_2) },
c0f3af97
L
8889 },
8890
8891 /* VEX_LEN_3838_P_2 */
8892 {
9e30b8e0 8893 { VEX_W_TABLE (VEX_W_3838_P_2) },
c0f3af97
L
8894 },
8895
8896 /* VEX_LEN_3839_P_2 */
8897 {
9e30b8e0 8898 { VEX_W_TABLE (VEX_W_3839_P_2) },
c0f3af97
L
8899 },
8900
8901 /* VEX_LEN_383A_P_2 */
8902 {
9e30b8e0 8903 { VEX_W_TABLE (VEX_W_383A_P_2) },
c0f3af97
L
8904 },
8905
8906 /* VEX_LEN_383B_P_2 */
8907 {
9e30b8e0 8908 { VEX_W_TABLE (VEX_W_383B_P_2) },
c0f3af97
L
8909 },
8910
8911 /* VEX_LEN_383C_P_2 */
8912 {
9e30b8e0 8913 { VEX_W_TABLE (VEX_W_383C_P_2) },
c0f3af97
L
8914 },
8915
8916 /* VEX_LEN_383D_P_2 */
8917 {
9e30b8e0 8918 { VEX_W_TABLE (VEX_W_383D_P_2) },
c0f3af97
L
8919 },
8920
8921 /* VEX_LEN_383E_P_2 */
8922 {
9e30b8e0 8923 { VEX_W_TABLE (VEX_W_383E_P_2) },
c0f3af97
L
8924 },
8925
8926 /* VEX_LEN_383F_P_2 */
8927 {
9e30b8e0 8928 { VEX_W_TABLE (VEX_W_383F_P_2) },
c0f3af97
L
8929 },
8930
8931 /* VEX_LEN_3840_P_2 */
8932 {
9e30b8e0 8933 { VEX_W_TABLE (VEX_W_3840_P_2) },
c0f3af97
L
8934 },
8935
8936 /* VEX_LEN_3841_P_2 */
8937 {
9e30b8e0 8938 { VEX_W_TABLE (VEX_W_3841_P_2) },
c0f3af97
L
8939 },
8940
a5ff0eb2
L
8941 /* VEX_LEN_38DB_P_2 */
8942 {
9e30b8e0 8943 { VEX_W_TABLE (VEX_W_38DB_P_2) },
a5ff0eb2
L
8944 },
8945
8946 /* VEX_LEN_38DC_P_2 */
8947 {
9e30b8e0 8948 { VEX_W_TABLE (VEX_W_38DC_P_2) },
a5ff0eb2
L
8949 },
8950
8951 /* VEX_LEN_38DD_P_2 */
8952 {
9e30b8e0 8953 { VEX_W_TABLE (VEX_W_38DD_P_2) },
a5ff0eb2
L
8954 },
8955
8956 /* VEX_LEN_38DE_P_2 */
8957 {
9e30b8e0 8958 { VEX_W_TABLE (VEX_W_38DE_P_2) },
a5ff0eb2
L
8959 },
8960
8961 /* VEX_LEN_38DF_P_2 */
8962 {
9e30b8e0 8963 { VEX_W_TABLE (VEX_W_38DF_P_2) },
a5ff0eb2
L
8964 },
8965
c0f3af97
L
8966 /* VEX_LEN_3A06_P_2 */
8967 {
592d1631 8968 { Bad_Opcode },
9e30b8e0 8969 { VEX_W_TABLE (VEX_W_3A06_P_2) },
c0f3af97
L
8970 },
8971
8972 /* VEX_LEN_3A0A_P_2 */
8973 {
9e30b8e0 8974 { VEX_W_TABLE (VEX_W_3A0A_P_2) },
539f890d 8975 { VEX_W_TABLE (VEX_W_3A0A_P_2) },
c0f3af97
L
8976 },
8977
8978 /* VEX_LEN_3A0B_P_2 */
8979 {
9e30b8e0 8980 { VEX_W_TABLE (VEX_W_3A0B_P_2) },
539f890d 8981 { VEX_W_TABLE (VEX_W_3A0B_P_2) },
c0f3af97
L
8982 },
8983
8984 /* VEX_LEN_3A0E_P_2 */
8985 {
9e30b8e0 8986 { VEX_W_TABLE (VEX_W_3A0E_P_2) },
c0f3af97
L
8987 },
8988
8989 /* VEX_LEN_3A0F_P_2 */
8990 {
9e30b8e0 8991 { VEX_W_TABLE (VEX_W_3A0F_P_2) },
c0f3af97
L
8992 },
8993
8994 /* VEX_LEN_3A14_P_2 */
8995 {
9e30b8e0 8996 { VEX_W_TABLE (VEX_W_3A14_P_2) },
c0f3af97
L
8997 },
8998
8999 /* VEX_LEN_3A15_P_2 */
9000 {
9e30b8e0 9001 { VEX_W_TABLE (VEX_W_3A15_P_2) },
c0f3af97
L
9002 },
9003
9004 /* VEX_LEN_3A16_P_2 */
9005 {
9006 { "vpextrK", { Edq, XM, Ib } },
c0f3af97
L
9007 },
9008
9009 /* VEX_LEN_3A17_P_2 */
9010 {
9011 { "vextractps", { Edqd, XM, Ib } },
c0f3af97
L
9012 },
9013
9014 /* VEX_LEN_3A18_P_2 */
9015 {
592d1631 9016 { Bad_Opcode },
9e30b8e0 9017 { VEX_W_TABLE (VEX_W_3A18_P_2) },
c0f3af97
L
9018 },
9019
9020 /* VEX_LEN_3A19_P_2 */
9021 {
592d1631 9022 { Bad_Opcode },
9e30b8e0 9023 { VEX_W_TABLE (VEX_W_3A19_P_2) },
c0f3af97
L
9024 },
9025
9026 /* VEX_LEN_3A20_P_2 */
9027 {
9e30b8e0 9028 { VEX_W_TABLE (VEX_W_3A20_P_2) },
c0f3af97
L
9029 },
9030
9031 /* VEX_LEN_3A21_P_2 */
9032 {
9e30b8e0 9033 { VEX_W_TABLE (VEX_W_3A21_P_2) },
c0f3af97
L
9034 },
9035
9036 /* VEX_LEN_3A22_P_2 */
9037 {
9038 { "vpinsrK", { XM, Vex128, Edq, Ib } },
c0f3af97
L
9039 },
9040
9041 /* VEX_LEN_3A41_P_2 */
9042 {
9e30b8e0 9043 { VEX_W_TABLE (VEX_W_3A41_P_2) },
c0f3af97
L
9044 },
9045
9046 /* VEX_LEN_3A42_P_2 */
9047 {
9e30b8e0 9048 { VEX_W_TABLE (VEX_W_3A42_P_2) },
c0f3af97
L
9049 },
9050
ce2f5b3c
L
9051 /* VEX_LEN_3A44_P_2 */
9052 {
9e30b8e0 9053 { VEX_W_TABLE (VEX_W_3A44_P_2) },
ce2f5b3c
L
9054 },
9055
c0f3af97
L
9056 /* VEX_LEN_3A4C_P_2 */
9057 {
9e30b8e0 9058 { VEX_W_TABLE (VEX_W_3A4C_P_2) },
c0f3af97
L
9059 },
9060
9061 /* VEX_LEN_3A60_P_2 */
9062 {
9e30b8e0 9063 { VEX_W_TABLE (VEX_W_3A60_P_2) },
c0f3af97
L
9064 },
9065
9066 /* VEX_LEN_3A61_P_2 */
9067 {
9e30b8e0 9068 { VEX_W_TABLE (VEX_W_3A61_P_2) },
c0f3af97
L
9069 },
9070
9071 /* VEX_LEN_3A62_P_2 */
9072 {
9e30b8e0 9073 { VEX_W_TABLE (VEX_W_3A62_P_2) },
c0f3af97
L
9074 },
9075
9076 /* VEX_LEN_3A63_P_2 */
9077 {
9e30b8e0 9078 { VEX_W_TABLE (VEX_W_3A63_P_2) },
c0f3af97
L
9079 },
9080
922d8de8
DR
9081 /* VEX_LEN_3A6A_P_2 */
9082 {
206c2556 9083 { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9084 },
9085
9086 /* VEX_LEN_3A6B_P_2 */
9087 {
206c2556 9088 { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9089 },
9090
9091 /* VEX_LEN_3A6E_P_2 */
9092 {
206c2556 9093 { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9094 },
9095
9096 /* VEX_LEN_3A6F_P_2 */
9097 {
206c2556 9098 { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9099 },
9100
9101 /* VEX_LEN_3A7A_P_2 */
9102 {
206c2556 9103 { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9104 },
9105
9106 /* VEX_LEN_3A7B_P_2 */
9107 {
206c2556 9108 { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9109 },
9110
9111 /* VEX_LEN_3A7E_P_2 */
9112 {
206c2556 9113 { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9114 },
9115
9116 /* VEX_LEN_3A7F_P_2 */
9117 {
206c2556 9118 { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9119 },
9120
a5ff0eb2
L
9121 /* VEX_LEN_3ADF_P_2 */
9122 {
9e30b8e0 9123 { VEX_W_TABLE (VEX_W_3ADF_P_2) },
a5ff0eb2 9124 },
4c807e72 9125
5dd85c99
SP
9126 /* VEX_LEN_XOP_09_80 */
9127 {
4c807e72
L
9128 { "vfrczps", { XM, EXxmm } },
9129 { "vfrczps", { XM, EXymmq } },
5dd85c99 9130 },
4c807e72 9131
5dd85c99
SP
9132 /* VEX_LEN_XOP_09_81 */
9133 {
4c807e72
L
9134 { "vfrczpd", { XM, EXxmm } },
9135 { "vfrczpd", { XM, EXymmq } },
5dd85c99 9136 },
331d2d0d
L
9137};
9138
9e30b8e0 9139static const struct dis386 vex_w_table[][2] = {
b844680a 9140 {
9e30b8e0
L
9141 /* VEX_W_10_P_0 */
9142 { "vmovups", { XM, EXx } },
d8faab4e
L
9143 },
9144 {
9e30b8e0 9145 /* VEX_W_10_P_1 */
539f890d 9146 { "vmovss", { XMVexScalar, VexScalar, EXdScalar } },
d8faab4e
L
9147 },
9148 {
9e30b8e0
L
9149 /* VEX_W_10_P_2 */
9150 { "vmovupd", { XM, EXx } },
d8faab4e
L
9151 },
9152 {
9e30b8e0 9153 /* VEX_W_10_P_3 */
539f890d 9154 { "vmovsd", { XMVexScalar, VexScalar, EXqScalar } },
d8faab4e
L
9155 },
9156 {
9e30b8e0
L
9157 /* VEX_W_11_P_0 */
9158 { "vmovups", { EXxS, XM } },
d8faab4e
L
9159 },
9160 {
9e30b8e0 9161 /* VEX_W_11_P_1 */
539f890d 9162 { "vmovss", { EXdVexScalarS, VexScalar, XMScalar } },
b844680a
L
9163 },
9164 {
9e30b8e0
L
9165 /* VEX_W_11_P_2 */
9166 { "vmovupd", { EXxS, XM } },
b844680a
L
9167 },
9168 {
9e30b8e0 9169 /* VEX_W_11_P_3 */
539f890d 9170 { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar } },
d8faab4e
L
9171 },
9172 {
9e30b8e0
L
9173 /* VEX_W_12_P_0_M_0 */
9174 { "vmovlps", { XM, Vex128, EXq } },
b844680a
L
9175 },
9176 {
9e30b8e0
L
9177 /* VEX_W_12_P_0_M_1 */
9178 { "vmovhlps", { XM, Vex128, EXq } },
b844680a
L
9179 },
9180 {
9e30b8e0
L
9181 /* VEX_W_12_P_1 */
9182 { "vmovsldup", { XM, EXx } },
b844680a
L
9183 },
9184 {
9e30b8e0
L
9185 /* VEX_W_12_P_2 */
9186 { "vmovlpd", { XM, Vex128, EXq } },
b844680a
L
9187 },
9188 {
9e30b8e0
L
9189 /* VEX_W_12_P_3 */
9190 { "vmovddup", { XM, EXymmq } },
b844680a
L
9191 },
9192 {
9e30b8e0
L
9193 /* VEX_W_13_M_0 */
9194 { "vmovlpX", { EXq, XM } },
b844680a
L
9195 },
9196 {
9e30b8e0
L
9197 /* VEX_W_14 */
9198 { "vunpcklpX", { XM, Vex, EXx } },
b844680a
L
9199 },
9200 {
9e30b8e0
L
9201 /* VEX_W_15 */
9202 { "vunpckhpX", { XM, Vex, EXx } },
b844680a
L
9203 },
9204 {
9e30b8e0
L
9205 /* VEX_W_16_P_0_M_0 */
9206 { "vmovhps", { XM, Vex128, EXq } },
9e30b8e0
L
9207 },
9208 {
9209 /* VEX_W_16_P_0_M_1 */
9210 { "vmovlhps", { XM, Vex128, EXq } },
9e30b8e0
L
9211 },
9212 {
9213 /* VEX_W_16_P_1 */
9214 { "vmovshdup", { XM, EXx } },
9e30b8e0
L
9215 },
9216 {
9217 /* VEX_W_16_P_2 */
9218 { "vmovhpd", { XM, Vex128, EXq } },
9e30b8e0
L
9219 },
9220 {
9221 /* VEX_W_17_M_0 */
9222 { "vmovhpX", { EXq, XM } },
9e30b8e0
L
9223 },
9224 {
9225 /* VEX_W_28 */
9226 { "vmovapX", { XM, EXx } },
9e30b8e0
L
9227 },
9228 {
9229 /* VEX_W_29 */
9230 { "vmovapX", { EXxS, XM } },
9e30b8e0
L
9231 },
9232 {
9233 /* VEX_W_2B_M_0 */
9234 { "vmovntpX", { Mx, XM } },
9e30b8e0
L
9235 },
9236 {
9237 /* VEX_W_2E_P_0 */
539f890d 9238 { "vucomiss", { XMScalar, EXdScalar } },
9e30b8e0
L
9239 },
9240 {
9241 /* VEX_W_2E_P_2 */
539f890d 9242 { "vucomisd", { XMScalar, EXqScalar } },
9e30b8e0
L
9243 },
9244 {
9245 /* VEX_W_2F_P_0 */
539f890d 9246 { "vcomiss", { XMScalar, EXdScalar } },
9e30b8e0
L
9247 },
9248 {
9249 /* VEX_W_2F_P_2 */
539f890d 9250 { "vcomisd", { XMScalar, EXqScalar } },
9e30b8e0
L
9251 },
9252 {
9253 /* VEX_W_50_M_0 */
9254 { "vmovmskpX", { Gdq, XS } },
9e30b8e0
L
9255 },
9256 {
9257 /* VEX_W_51_P_0 */
9258 { "vsqrtps", { XM, EXx } },
9e30b8e0
L
9259 },
9260 {
9261 /* VEX_W_51_P_1 */
539f890d 9262 { "vsqrtss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9263 },
9264 {
9265 /* VEX_W_51_P_2 */
9266 { "vsqrtpd", { XM, EXx } },
9e30b8e0
L
9267 },
9268 {
9269 /* VEX_W_51_P_3 */
539f890d 9270 { "vsqrtsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9271 },
9272 {
9273 /* VEX_W_52_P_0 */
9274 { "vrsqrtps", { XM, EXx } },
9e30b8e0
L
9275 },
9276 {
9277 /* VEX_W_52_P_1 */
539f890d 9278 { "vrsqrtss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9279 },
9280 {
9281 /* VEX_W_53_P_0 */
9282 { "vrcpps", { XM, EXx } },
9e30b8e0
L
9283 },
9284 {
9285 /* VEX_W_53_P_1 */
539f890d 9286 { "vrcpss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9287 },
9288 {
9289 /* VEX_W_58_P_0 */
9290 { "vaddps", { XM, Vex, EXx } },
9e30b8e0
L
9291 },
9292 {
9293 /* VEX_W_58_P_1 */
539f890d 9294 { "vaddss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9295 },
9296 {
9297 /* VEX_W_58_P_2 */
9298 { "vaddpd", { XM, Vex, EXx } },
9e30b8e0
L
9299 },
9300 {
9301 /* VEX_W_58_P_3 */
539f890d 9302 { "vaddsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9303 },
9304 {
9305 /* VEX_W_59_P_0 */
9306 { "vmulps", { XM, Vex, EXx } },
9e30b8e0
L
9307 },
9308 {
9309 /* VEX_W_59_P_1 */
539f890d 9310 { "vmulss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9311 },
9312 {
9313 /* VEX_W_59_P_2 */
9314 { "vmulpd", { XM, Vex, EXx } },
9e30b8e0
L
9315 },
9316 {
9317 /* VEX_W_59_P_3 */
539f890d 9318 { "vmulsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9319 },
9320 {
9321 /* VEX_W_5A_P_0 */
9322 { "vcvtps2pd", { XM, EXxmmq } },
9e30b8e0
L
9323 },
9324 {
9325 /* VEX_W_5A_P_1 */
539f890d 9326 { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9327 },
9328 {
9329 /* VEX_W_5A_P_3 */
539f890d 9330 { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9331 },
9332 {
9333 /* VEX_W_5B_P_0 */
9334 { "vcvtdq2ps", { XM, EXx } },
9e30b8e0
L
9335 },
9336 {
9337 /* VEX_W_5B_P_1 */
9338 { "vcvttps2dq", { XM, EXx } },
9e30b8e0
L
9339 },
9340 {
9341 /* VEX_W_5B_P_2 */
9342 { "vcvtps2dq", { XM, EXx } },
9e30b8e0
L
9343 },
9344 {
9345 /* VEX_W_5C_P_0 */
9346 { "vsubps", { XM, Vex, EXx } },
9e30b8e0
L
9347 },
9348 {
9349 /* VEX_W_5C_P_1 */
539f890d 9350 { "vsubss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9351 },
9352 {
9353 /* VEX_W_5C_P_2 */
9354 { "vsubpd", { XM, Vex, EXx } },
9e30b8e0
L
9355 },
9356 {
9357 /* VEX_W_5C_P_3 */
539f890d 9358 { "vsubsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9359 },
9360 {
9361 /* VEX_W_5D_P_0 */
9362 { "vminps", { XM, Vex, EXx } },
9e30b8e0
L
9363 },
9364 {
9365 /* VEX_W_5D_P_1 */
539f890d 9366 { "vminss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9367 },
9368 {
9369 /* VEX_W_5D_P_2 */
9370 { "vminpd", { XM, Vex, EXx } },
9e30b8e0
L
9371 },
9372 {
9373 /* VEX_W_5D_P_3 */
539f890d 9374 { "vminsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9375 },
9376 {
9377 /* VEX_W_5E_P_0 */
9378 { "vdivps", { XM, Vex, EXx } },
9e30b8e0
L
9379 },
9380 {
9381 /* VEX_W_5E_P_1 */
539f890d 9382 { "vdivss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9383 },
9384 {
9385 /* VEX_W_5E_P_2 */
9386 { "vdivpd", { XM, Vex, EXx } },
9e30b8e0
L
9387 },
9388 {
9389 /* VEX_W_5E_P_3 */
539f890d 9390 { "vdivsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9391 },
9392 {
9393 /* VEX_W_5F_P_0 */
9394 { "vmaxps", { XM, Vex, EXx } },
9e30b8e0
L
9395 },
9396 {
9397 /* VEX_W_5F_P_1 */
539f890d 9398 { "vmaxss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9399 },
9400 {
9401 /* VEX_W_5F_P_2 */
9402 { "vmaxpd", { XM, Vex, EXx } },
9e30b8e0
L
9403 },
9404 {
9405 /* VEX_W_5F_P_3 */
539f890d 9406 { "vmaxsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9407 },
9408 {
9409 /* VEX_W_60_P_2 */
9410 { "vpunpcklbw", { XM, Vex128, EXx } },
9e30b8e0
L
9411 },
9412 {
9413 /* VEX_W_61_P_2 */
9414 { "vpunpcklwd", { XM, Vex128, EXx } },
9e30b8e0
L
9415 },
9416 {
9417 /* VEX_W_62_P_2 */
9418 { "vpunpckldq", { XM, Vex128, EXx } },
9e30b8e0
L
9419 },
9420 {
9421 /* VEX_W_63_P_2 */
9422 { "vpacksswb", { XM, Vex128, EXx } },
9e30b8e0
L
9423 },
9424 {
9425 /* VEX_W_64_P_2 */
9426 { "vpcmpgtb", { XM, Vex128, EXx } },
9e30b8e0
L
9427 },
9428 {
9429 /* VEX_W_65_P_2 */
9430 { "vpcmpgtw", { XM, Vex128, EXx } },
9e30b8e0
L
9431 },
9432 {
9433 /* VEX_W_66_P_2 */
9434 { "vpcmpgtd", { XM, Vex128, EXx } },
9e30b8e0
L
9435 },
9436 {
9437 /* VEX_W_67_P_2 */
9438 { "vpackuswb", { XM, Vex128, EXx } },
9e30b8e0
L
9439 },
9440 {
9441 /* VEX_W_68_P_2 */
9442 { "vpunpckhbw", { XM, Vex128, EXx } },
9e30b8e0
L
9443 },
9444 {
9445 /* VEX_W_69_P_2 */
9446 { "vpunpckhwd", { XM, Vex128, EXx } },
9e30b8e0
L
9447 },
9448 {
9449 /* VEX_W_6A_P_2 */
9450 { "vpunpckhdq", { XM, Vex128, EXx } },
9e30b8e0
L
9451 },
9452 {
9453 /* VEX_W_6B_P_2 */
9454 { "vpackssdw", { XM, Vex128, EXx } },
9e30b8e0
L
9455 },
9456 {
9457 /* VEX_W_6C_P_2 */
9458 { "vpunpcklqdq", { XM, Vex128, EXx } },
9e30b8e0
L
9459 },
9460 {
9461 /* VEX_W_6D_P_2 */
9462 { "vpunpckhqdq", { XM, Vex128, EXx } },
9e30b8e0
L
9463 },
9464 {
9465 /* VEX_W_6F_P_1 */
efdb52b7 9466 { "vmovdqu", { XM, EXx } },
9e30b8e0
L
9467 },
9468 {
9469 /* VEX_W_6F_P_2 */
efdb52b7 9470 { "vmovdqa", { XM, EXx } },
9e30b8e0
L
9471 },
9472 {
9473 /* VEX_W_70_P_1 */
9474 { "vpshufhw", { XM, EXx, Ib } },
9e30b8e0
L
9475 },
9476 {
9477 /* VEX_W_70_P_2 */
9478 { "vpshufd", { XM, EXx, Ib } },
9e30b8e0
L
9479 },
9480 {
9481 /* VEX_W_70_P_3 */
9482 { "vpshuflw", { XM, EXx, Ib } },
9e30b8e0
L
9483 },
9484 {
9485 /* VEX_W_71_R_2_P_2 */
9486 { "vpsrlw", { Vex128, XS, Ib } },
9e30b8e0
L
9487 },
9488 {
9489 /* VEX_W_71_R_4_P_2 */
9490 { "vpsraw", { Vex128, XS, Ib } },
9e30b8e0
L
9491 },
9492 {
9493 /* VEX_W_71_R_6_P_2 */
9494 { "vpsllw", { Vex128, XS, Ib } },
9e30b8e0
L
9495 },
9496 {
9497 /* VEX_W_72_R_2_P_2 */
9498 { "vpsrld", { Vex128, XS, Ib } },
9e30b8e0
L
9499 },
9500 {
9501 /* VEX_W_72_R_4_P_2 */
9502 { "vpsrad", { Vex128, XS, Ib } },
9e30b8e0
L
9503 },
9504 {
9505 /* VEX_W_72_R_6_P_2 */
9506 { "vpslld", { Vex128, XS, Ib } },
9e30b8e0
L
9507 },
9508 {
9509 /* VEX_W_73_R_2_P_2 */
9510 { "vpsrlq", { Vex128, XS, Ib } },
9e30b8e0
L
9511 },
9512 {
9513 /* VEX_W_73_R_3_P_2 */
9514 { "vpsrldq", { Vex128, XS, Ib } },
9e30b8e0
L
9515 },
9516 {
9517 /* VEX_W_73_R_6_P_2 */
9518 { "vpsllq", { Vex128, XS, Ib } },
9e30b8e0
L
9519 },
9520 {
9521 /* VEX_W_73_R_7_P_2 */
9522 { "vpslldq", { Vex128, XS, Ib } },
9e30b8e0
L
9523 },
9524 {
9525 /* VEX_W_74_P_2 */
9526 { "vpcmpeqb", { XM, Vex128, EXx } },
9e30b8e0
L
9527 },
9528 {
9529 /* VEX_W_75_P_2 */
9530 { "vpcmpeqw", { XM, Vex128, EXx } },
9e30b8e0
L
9531 },
9532 {
9533 /* VEX_W_76_P_2 */
9534 { "vpcmpeqd", { XM, Vex128, EXx } },
9e30b8e0
L
9535 },
9536 {
9537 /* VEX_W_77_P_0 */
9538 { "", { VZERO } },
9e30b8e0
L
9539 },
9540 {
9541 /* VEX_W_7C_P_2 */
9542 { "vhaddpd", { XM, Vex, EXx } },
9e30b8e0
L
9543 },
9544 {
9545 /* VEX_W_7C_P_3 */
9546 { "vhaddps", { XM, Vex, EXx } },
9e30b8e0
L
9547 },
9548 {
9549 /* VEX_W_7D_P_2 */
9550 { "vhsubpd", { XM, Vex, EXx } },
9e30b8e0
L
9551 },
9552 {
9553 /* VEX_W_7D_P_3 */
9554 { "vhsubps", { XM, Vex, EXx } },
9e30b8e0
L
9555 },
9556 {
9557 /* VEX_W_7E_P_1 */
539f890d 9558 { "vmovq", { XMScalar, EXqScalar } },
9e30b8e0
L
9559 },
9560 {
9561 /* VEX_W_7F_P_1 */
9562 { "vmovdqu", { EXxS, XM } },
9e30b8e0
L
9563 },
9564 {
9565 /* VEX_W_7F_P_2 */
9566 { "vmovdqa", { EXxS, XM } },
9e30b8e0
L
9567 },
9568 {
9569 /* VEX_W_AE_R_2_M_0 */
9570 { "vldmxcsr", { Md } },
9e30b8e0
L
9571 },
9572 {
9573 /* VEX_W_AE_R_3_M_0 */
9574 { "vstmxcsr", { Md } },
9e30b8e0
L
9575 },
9576 {
9577 /* VEX_W_C2_P_0 */
9578 { "vcmpps", { XM, Vex, EXx, VCMP } },
9e30b8e0
L
9579 },
9580 {
9581 /* VEX_W_C2_P_1 */
539f890d 9582 { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP } },
9e30b8e0
L
9583 },
9584 {
9585 /* VEX_W_C2_P_2 */
9586 { "vcmppd", { XM, Vex, EXx, VCMP } },
9e30b8e0
L
9587 },
9588 {
9589 /* VEX_W_C2_P_3 */
539f890d 9590 { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP } },
9e30b8e0
L
9591 },
9592 {
9593 /* VEX_W_C4_P_2 */
9594 { "vpinsrw", { XM, Vex128, Edqw, Ib } },
9e30b8e0
L
9595 },
9596 {
9597 /* VEX_W_C5_P_2 */
9598 { "vpextrw", { Gdq, XS, Ib } },
9e30b8e0
L
9599 },
9600 {
9601 /* VEX_W_D0_P_2 */
9602 { "vaddsubpd", { XM, Vex, EXx } },
9e30b8e0
L
9603 },
9604 {
9605 /* VEX_W_D0_P_3 */
9606 { "vaddsubps", { XM, Vex, EXx } },
9e30b8e0
L
9607 },
9608 {
9609 /* VEX_W_D1_P_2 */
9610 { "vpsrlw", { XM, Vex128, EXx } },
9e30b8e0
L
9611 },
9612 {
9613 /* VEX_W_D2_P_2 */
9614 { "vpsrld", { XM, Vex128, EXx } },
9e30b8e0
L
9615 },
9616 {
9617 /* VEX_W_D3_P_2 */
9618 { "vpsrlq", { XM, Vex128, EXx } },
9e30b8e0
L
9619 },
9620 {
9621 /* VEX_W_D4_P_2 */
9622 { "vpaddq", { XM, Vex128, EXx } },
9e30b8e0
L
9623 },
9624 {
9625 /* VEX_W_D5_P_2 */
9626 { "vpmullw", { XM, Vex128, EXx } },
9e30b8e0
L
9627 },
9628 {
9629 /* VEX_W_D6_P_2 */
539f890d 9630 { "vmovq", { EXqScalarS, XMScalar } },
9e30b8e0
L
9631 },
9632 {
9633 /* VEX_W_D7_P_2_M_1 */
9634 { "vpmovmskb", { Gdq, XS } },
9e30b8e0
L
9635 },
9636 {
9637 /* VEX_W_D8_P_2 */
9638 { "vpsubusb", { XM, Vex128, EXx } },
9e30b8e0
L
9639 },
9640 {
9641 /* VEX_W_D9_P_2 */
9642 { "vpsubusw", { XM, Vex128, EXx } },
9e30b8e0
L
9643 },
9644 {
9645 /* VEX_W_DA_P_2 */
9646 { "vpminub", { XM, Vex128, EXx } },
9e30b8e0
L
9647 },
9648 {
9649 /* VEX_W_DB_P_2 */
9650 { "vpand", { XM, Vex128, EXx } },
9e30b8e0
L
9651 },
9652 {
9653 /* VEX_W_DC_P_2 */
9654 { "vpaddusb", { XM, Vex128, EXx } },
9e30b8e0
L
9655 },
9656 {
9657 /* VEX_W_DD_P_2 */
9658 { "vpaddusw", { XM, Vex128, EXx } },
9e30b8e0
L
9659 },
9660 {
9661 /* VEX_W_DE_P_2 */
9662 { "vpmaxub", { XM, Vex128, EXx } },
9e30b8e0
L
9663 },
9664 {
9665 /* VEX_W_DF_P_2 */
9666 { "vpandn", { XM, Vex128, EXx } },
9e30b8e0
L
9667 },
9668 {
9669 /* VEX_W_E0_P_2 */
9670 { "vpavgb", { XM, Vex128, EXx } },
9e30b8e0
L
9671 },
9672 {
9673 /* VEX_W_E1_P_2 */
9674 { "vpsraw", { XM, Vex128, EXx } },
9e30b8e0
L
9675 },
9676 {
9677 /* VEX_W_E2_P_2 */
9678 { "vpsrad", { XM, Vex128, EXx } },
9e30b8e0
L
9679 },
9680 {
9681 /* VEX_W_E3_P_2 */
9682 { "vpavgw", { XM, Vex128, EXx } },
9e30b8e0
L
9683 },
9684 {
9685 /* VEX_W_E4_P_2 */
9686 { "vpmulhuw", { XM, Vex128, EXx } },
9e30b8e0
L
9687 },
9688 {
9689 /* VEX_W_E5_P_2 */
9690 { "vpmulhw", { XM, Vex128, EXx } },
9e30b8e0
L
9691 },
9692 {
9693 /* VEX_W_E6_P_1 */
efdb52b7 9694 { "vcvtdq2pd", { XM, EXxmmq } },
9e30b8e0
L
9695 },
9696 {
9697 /* VEX_W_E6_P_2 */
a179a9fd 9698 { "vcvttpd2dq%XY", { XMM, EXx } },
9e30b8e0
L
9699 },
9700 {
9701 /* VEX_W_E6_P_3 */
a179a9fd 9702 { "vcvtpd2dq%XY", { XMM, EXx } },
9e30b8e0
L
9703 },
9704 {
9705 /* VEX_W_E7_P_2_M_0 */
9706 { "vmovntdq", { Mx, XM } },
9e30b8e0
L
9707 },
9708 {
9709 /* VEX_W_E8_P_2 */
9710 { "vpsubsb", { XM, Vex128, EXx } },
9e30b8e0
L
9711 },
9712 {
9713 /* VEX_W_E9_P_2 */
9714 { "vpsubsw", { XM, Vex128, EXx } },
9e30b8e0
L
9715 },
9716 {
9717 /* VEX_W_EA_P_2 */
9718 { "vpminsw", { XM, Vex128, EXx } },
9e30b8e0
L
9719 },
9720 {
9721 /* VEX_W_EB_P_2 */
9722 { "vpor", { XM, Vex128, EXx } },
9e30b8e0
L
9723 },
9724 {
9725 /* VEX_W_EC_P_2 */
9726 { "vpaddsb", { XM, Vex128, EXx } },
9e30b8e0
L
9727 },
9728 {
9729 /* VEX_W_ED_P_2 */
9730 { "vpaddsw", { XM, Vex128, EXx } },
9e30b8e0
L
9731 },
9732 {
9733 /* VEX_W_EE_P_2 */
9734 { "vpmaxsw", { XM, Vex128, EXx } },
9e30b8e0
L
9735 },
9736 {
9737 /* VEX_W_EF_P_2 */
9738 { "vpxor", { XM, Vex128, EXx } },
9e30b8e0
L
9739 },
9740 {
9741 /* VEX_W_F0_P_3_M_0 */
9742 { "vlddqu", { XM, M } },
9e30b8e0
L
9743 },
9744 {
9745 /* VEX_W_F1_P_2 */
9746 { "vpsllw", { XM, Vex128, EXx } },
9e30b8e0
L
9747 },
9748 {
9749 /* VEX_W_F2_P_2 */
9750 { "vpslld", { XM, Vex128, EXx } },
9e30b8e0
L
9751 },
9752 {
9753 /* VEX_W_F3_P_2 */
9754 { "vpsllq", { XM, Vex128, EXx } },
9e30b8e0
L
9755 },
9756 {
9757 /* VEX_W_F4_P_2 */
9758 { "vpmuludq", { XM, Vex128, EXx } },
9e30b8e0
L
9759 },
9760 {
9761 /* VEX_W_F5_P_2 */
9762 { "vpmaddwd", { XM, Vex128, EXx } },
9e30b8e0
L
9763 },
9764 {
9765 /* VEX_W_F6_P_2 */
9766 { "vpsadbw", { XM, Vex128, EXx } },
9e30b8e0
L
9767 },
9768 {
9769 /* VEX_W_F7_P_2 */
9770 { "vmaskmovdqu", { XM, XS } },
9e30b8e0
L
9771 },
9772 {
9773 /* VEX_W_F8_P_2 */
9774 { "vpsubb", { XM, Vex128, EXx } },
9e30b8e0
L
9775 },
9776 {
9777 /* VEX_W_F9_P_2 */
9778 { "vpsubw", { XM, Vex128, EXx } },
9e30b8e0
L
9779 },
9780 {
9781 /* VEX_W_FA_P_2 */
9782 { "vpsubd", { XM, Vex128, EXx } },
9e30b8e0
L
9783 },
9784 {
9785 /* VEX_W_FB_P_2 */
9786 { "vpsubq", { XM, Vex128, EXx } },
9e30b8e0
L
9787 },
9788 {
9789 /* VEX_W_FC_P_2 */
9790 { "vpaddb", { XM, Vex128, EXx } },
9e30b8e0
L
9791 },
9792 {
9793 /* VEX_W_FD_P_2 */
9794 { "vpaddw", { XM, Vex128, EXx } },
9e30b8e0
L
9795 },
9796 {
9797 /* VEX_W_FE_P_2 */
9798 { "vpaddd", { XM, Vex128, EXx } },
9e30b8e0
L
9799 },
9800 {
9801 /* VEX_W_3800_P_2 */
9802 { "vpshufb", { XM, Vex128, EXx } },
9e30b8e0
L
9803 },
9804 {
9805 /* VEX_W_3801_P_2 */
9806 { "vphaddw", { XM, Vex128, EXx } },
9e30b8e0
L
9807 },
9808 {
9809 /* VEX_W_3802_P_2 */
9810 { "vphaddd", { XM, Vex128, EXx } },
9e30b8e0
L
9811 },
9812 {
9813 /* VEX_W_3803_P_2 */
9814 { "vphaddsw", { XM, Vex128, EXx } },
9e30b8e0
L
9815 },
9816 {
9817 /* VEX_W_3804_P_2 */
9818 { "vpmaddubsw", { XM, Vex128, EXx } },
9e30b8e0
L
9819 },
9820 {
9821 /* VEX_W_3805_P_2 */
9822 { "vphsubw", { XM, Vex128, EXx } },
9e30b8e0
L
9823 },
9824 {
9825 /* VEX_W_3806_P_2 */
9826 { "vphsubd", { XM, Vex128, EXx } },
9e30b8e0
L
9827 },
9828 {
9829 /* VEX_W_3807_P_2 */
9830 { "vphsubsw", { XM, Vex128, EXx } },
9e30b8e0
L
9831 },
9832 {
9833 /* VEX_W_3808_P_2 */
9834 { "vpsignb", { XM, Vex128, EXx } },
9e30b8e0
L
9835 },
9836 {
9837 /* VEX_W_3809_P_2 */
9838 { "vpsignw", { XM, Vex128, EXx } },
9e30b8e0
L
9839 },
9840 {
9841 /* VEX_W_380A_P_2 */
9842 { "vpsignd", { XM, Vex128, EXx } },
9e30b8e0
L
9843 },
9844 {
9845 /* VEX_W_380B_P_2 */
9846 { "vpmulhrsw", { XM, Vex128, EXx } },
9e30b8e0
L
9847 },
9848 {
9849 /* VEX_W_380C_P_2 */
9850 { "vpermilps", { XM, Vex, EXx } },
9e30b8e0
L
9851 },
9852 {
9853 /* VEX_W_380D_P_2 */
9854 { "vpermilpd", { XM, Vex, EXx } },
9e30b8e0
L
9855 },
9856 {
9857 /* VEX_W_380E_P_2 */
9858 { "vtestps", { XM, EXx } },
9e30b8e0
L
9859 },
9860 {
9861 /* VEX_W_380F_P_2 */
9862 { "vtestpd", { XM, EXx } },
9e30b8e0
L
9863 },
9864 {
9865 /* VEX_W_3817_P_2 */
9866 { "vptest", { XM, EXx } },
9e30b8e0 9867 },
bcf2684f
L
9868 {
9869 /* VEX_W_3818_P_2_M_0 */
9870 { "vbroadcastss", { XM, Md } },
bcf2684f 9871 },
9e30b8e0
L
9872 {
9873 /* VEX_W_3819_P_2_M_0 */
9874 { "vbroadcastsd", { XM, Mq } },
9e30b8e0
L
9875 },
9876 {
9877 /* VEX_W_381A_P_2_M_0 */
9878 { "vbroadcastf128", { XM, Mxmm } },
9e30b8e0
L
9879 },
9880 {
9881 /* VEX_W_381C_P_2 */
9882 { "vpabsb", { XM, EXx } },
9e30b8e0
L
9883 },
9884 {
9885 /* VEX_W_381D_P_2 */
9886 { "vpabsw", { XM, EXx } },
9e30b8e0
L
9887 },
9888 {
9889 /* VEX_W_381E_P_2 */
9890 { "vpabsd", { XM, EXx } },
9e30b8e0
L
9891 },
9892 {
9893 /* VEX_W_3820_P_2 */
9894 { "vpmovsxbw", { XM, EXq } },
9e30b8e0
L
9895 },
9896 {
9897 /* VEX_W_3821_P_2 */
9898 { "vpmovsxbd", { XM, EXd } },
9e30b8e0
L
9899 },
9900 {
9901 /* VEX_W_3822_P_2 */
9902 { "vpmovsxbq", { XM, EXw } },
9e30b8e0
L
9903 },
9904 {
9905 /* VEX_W_3823_P_2 */
9906 { "vpmovsxwd", { XM, EXq } },
9e30b8e0
L
9907 },
9908 {
9909 /* VEX_W_3824_P_2 */
9910 { "vpmovsxwq", { XM, EXd } },
9e30b8e0
L
9911 },
9912 {
9913 /* VEX_W_3825_P_2 */
9914 { "vpmovsxdq", { XM, EXq } },
9e30b8e0
L
9915 },
9916 {
9917 /* VEX_W_3828_P_2 */
9918 { "vpmuldq", { XM, Vex128, EXx } },
9e30b8e0
L
9919 },
9920 {
9921 /* VEX_W_3829_P_2 */
9922 { "vpcmpeqq", { XM, Vex128, EXx } },
9e30b8e0
L
9923 },
9924 {
9925 /* VEX_W_382A_P_2_M_0 */
9926 { "vmovntdqa", { XM, Mx } },
9e30b8e0
L
9927 },
9928 {
9929 /* VEX_W_382B_P_2 */
9930 { "vpackusdw", { XM, Vex128, EXx } },
9e30b8e0 9931 },
53aa04a0
L
9932 {
9933 /* VEX_W_382C_P_2_M_0 */
9934 { "vmaskmovps", { XM, Vex, Mx } },
53aa04a0
L
9935 },
9936 {
9937 /* VEX_W_382D_P_2_M_0 */
9938 { "vmaskmovpd", { XM, Vex, Mx } },
53aa04a0
L
9939 },
9940 {
9941 /* VEX_W_382E_P_2_M_0 */
9942 { "vmaskmovps", { Mx, Vex, XM } },
53aa04a0
L
9943 },
9944 {
9945 /* VEX_W_382F_P_2_M_0 */
9946 { "vmaskmovpd", { Mx, Vex, XM } },
53aa04a0 9947 },
9e30b8e0
L
9948 {
9949 /* VEX_W_3830_P_2 */
9950 { "vpmovzxbw", { XM, EXq } },
9e30b8e0
L
9951 },
9952 {
9953 /* VEX_W_3831_P_2 */
9954 { "vpmovzxbd", { XM, EXd } },
9e30b8e0
L
9955 },
9956 {
9957 /* VEX_W_3832_P_2 */
9958 { "vpmovzxbq", { XM, EXw } },
9e30b8e0
L
9959 },
9960 {
9961 /* VEX_W_3833_P_2 */
9962 { "vpmovzxwd", { XM, EXq } },
9e30b8e0
L
9963 },
9964 {
9965 /* VEX_W_3834_P_2 */
9966 { "vpmovzxwq", { XM, EXd } },
9e30b8e0
L
9967 },
9968 {
9969 /* VEX_W_3835_P_2 */
9970 { "vpmovzxdq", { XM, EXq } },
9e30b8e0
L
9971 },
9972 {
9973 /* VEX_W_3837_P_2 */
9974 { "vpcmpgtq", { XM, Vex128, EXx } },
9e30b8e0
L
9975 },
9976 {
9977 /* VEX_W_3838_P_2 */
9978 { "vpminsb", { XM, Vex128, EXx } },
9e30b8e0
L
9979 },
9980 {
9981 /* VEX_W_3839_P_2 */
9982 { "vpminsd", { XM, Vex128, EXx } },
9e30b8e0
L
9983 },
9984 {
9985 /* VEX_W_383A_P_2 */
9986 { "vpminuw", { XM, Vex128, EXx } },
9e30b8e0
L
9987 },
9988 {
9989 /* VEX_W_383B_P_2 */
9990 { "vpminud", { XM, Vex128, EXx } },
9e30b8e0
L
9991 },
9992 {
9993 /* VEX_W_383C_P_2 */
9994 { "vpmaxsb", { XM, Vex128, EXx } },
9e30b8e0
L
9995 },
9996 {
9997 /* VEX_W_383D_P_2 */
9998 { "vpmaxsd", { XM, Vex128, EXx } },
9e30b8e0
L
9999 },
10000 {
10001 /* VEX_W_383E_P_2 */
10002 { "vpmaxuw", { XM, Vex128, EXx } },
9e30b8e0
L
10003 },
10004 {
10005 /* VEX_W_383F_P_2 */
10006 { "vpmaxud", { XM, Vex128, EXx } },
9e30b8e0
L
10007 },
10008 {
10009 /* VEX_W_3840_P_2 */
10010 { "vpmulld", { XM, Vex128, EXx } },
9e30b8e0
L
10011 },
10012 {
10013 /* VEX_W_3841_P_2 */
10014 { "vphminposuw", { XM, EXx } },
9e30b8e0
L
10015 },
10016 {
10017 /* VEX_W_38DB_P_2 */
10018 { "vaesimc", { XM, EXx } },
9e30b8e0
L
10019 },
10020 {
10021 /* VEX_W_38DC_P_2 */
10022 { "vaesenc", { XM, Vex128, EXx } },
9e30b8e0
L
10023 },
10024 {
10025 /* VEX_W_38DD_P_2 */
10026 { "vaesenclast", { XM, Vex128, EXx } },
9e30b8e0
L
10027 },
10028 {
10029 /* VEX_W_38DE_P_2 */
10030 { "vaesdec", { XM, Vex128, EXx } },
9e30b8e0
L
10031 },
10032 {
10033 /* VEX_W_38DF_P_2 */
10034 { "vaesdeclast", { XM, Vex128, EXx } },
9e30b8e0
L
10035 },
10036 {
10037 /* VEX_W_3A04_P_2 */
10038 { "vpermilps", { XM, EXx, Ib } },
9e30b8e0
L
10039 },
10040 {
10041 /* VEX_W_3A05_P_2 */
10042 { "vpermilpd", { XM, EXx, Ib } },
9e30b8e0
L
10043 },
10044 {
10045 /* VEX_W_3A06_P_2 */
10046 { "vperm2f128", { XM, Vex256, EXx, Ib } },
9e30b8e0
L
10047 },
10048 {
10049 /* VEX_W_3A08_P_2 */
10050 { "vroundps", { XM, EXx, Ib } },
9e30b8e0
L
10051 },
10052 {
10053 /* VEX_W_3A09_P_2 */
10054 { "vroundpd", { XM, EXx, Ib } },
9e30b8e0
L
10055 },
10056 {
10057 /* VEX_W_3A0A_P_2 */
539f890d 10058 { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib } },
9e30b8e0
L
10059 },
10060 {
10061 /* VEX_W_3A0B_P_2 */
539f890d 10062 { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib } },
9e30b8e0
L
10063 },
10064 {
10065 /* VEX_W_3A0C_P_2 */
10066 { "vblendps", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10067 },
10068 {
10069 /* VEX_W_3A0D_P_2 */
10070 { "vblendpd", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10071 },
10072 {
10073 /* VEX_W_3A0E_P_2 */
10074 { "vpblendw", { XM, Vex128, EXx, Ib } },
9e30b8e0
L
10075 },
10076 {
10077 /* VEX_W_3A0F_P_2 */
10078 { "vpalignr", { XM, Vex128, EXx, Ib } },
9e30b8e0
L
10079 },
10080 {
10081 /* VEX_W_3A14_P_2 */
10082 { "vpextrb", { Edqb, XM, Ib } },
9e30b8e0
L
10083 },
10084 {
10085 /* VEX_W_3A15_P_2 */
10086 { "vpextrw", { Edqw, XM, Ib } },
9e30b8e0
L
10087 },
10088 {
10089 /* VEX_W_3A18_P_2 */
10090 { "vinsertf128", { XM, Vex256, EXxmm, Ib } },
9e30b8e0
L
10091 },
10092 {
10093 /* VEX_W_3A19_P_2 */
10094 { "vextractf128", { EXxmm, XM, Ib } },
9e30b8e0
L
10095 },
10096 {
10097 /* VEX_W_3A20_P_2 */
10098 { "vpinsrb", { XM, Vex128, Edqb, Ib } },
9e30b8e0
L
10099 },
10100 {
10101 /* VEX_W_3A21_P_2 */
10102 { "vinsertps", { XM, Vex128, EXd, Ib } },
9e30b8e0
L
10103 },
10104 {
10105 /* VEX_W_3A40_P_2 */
10106 { "vdpps", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10107 },
10108 {
10109 /* VEX_W_3A41_P_2 */
10110 { "vdppd", { XM, Vex128, EXx, Ib } },
9e30b8e0
L
10111 },
10112 {
10113 /* VEX_W_3A42_P_2 */
10114 { "vmpsadbw", { XM, Vex128, EXx, Ib } },
9e30b8e0
L
10115 },
10116 {
10117 /* VEX_W_3A44_P_2 */
10118 { "vpclmulqdq", { XM, Vex128, EXx, PCLMUL } },
9e30b8e0
L
10119 },
10120 {
10121 /* VEX_W_3A4A_P_2 */
10122 { "vblendvps", { XM, Vex, EXx, XMVexI4 } },
9e30b8e0
L
10123 },
10124 {
10125 /* VEX_W_3A4B_P_2 */
10126 { "vblendvpd", { XM, Vex, EXx, XMVexI4 } },
9e30b8e0
L
10127 },
10128 {
10129 /* VEX_W_3A4C_P_2 */
10130 { "vpblendvb", { XM, Vex128, EXx, XMVexI4 } },
9e30b8e0
L
10131 },
10132 {
10133 /* VEX_W_3A60_P_2 */
10134 { "vpcmpestrm", { XM, EXx, Ib } },
9e30b8e0
L
10135 },
10136 {
10137 /* VEX_W_3A61_P_2 */
10138 { "vpcmpestri", { XM, EXx, Ib } },
9e30b8e0
L
10139 },
10140 {
10141 /* VEX_W_3A62_P_2 */
10142 { "vpcmpistrm", { XM, EXx, Ib } },
9e30b8e0
L
10143 },
10144 {
10145 /* VEX_W_3A63_P_2 */
10146 { "vpcmpistri", { XM, EXx, Ib } },
9e30b8e0
L
10147 },
10148 {
10149 /* VEX_W_3ADF_P_2 */
10150 { "vaeskeygenassist", { XM, EXx, Ib } },
9e30b8e0
L
10151 },
10152};
10153
10154static const struct dis386 mod_table[][2] = {
10155 {
10156 /* MOD_8D */
10157 { "leaS", { Gv, M } },
9e30b8e0
L
10158 },
10159 {
10160 /* MOD_0F01_REG_0 */
10161 { X86_64_TABLE (X86_64_0F01_REG_0) },
10162 { RM_TABLE (RM_0F01_REG_0) },
10163 },
10164 {
10165 /* MOD_0F01_REG_1 */
10166 { X86_64_TABLE (X86_64_0F01_REG_1) },
10167 { RM_TABLE (RM_0F01_REG_1) },
10168 },
10169 {
10170 /* MOD_0F01_REG_2 */
10171 { X86_64_TABLE (X86_64_0F01_REG_2) },
10172 { RM_TABLE (RM_0F01_REG_2) },
10173 },
10174 {
10175 /* MOD_0F01_REG_3 */
10176 { X86_64_TABLE (X86_64_0F01_REG_3) },
10177 { RM_TABLE (RM_0F01_REG_3) },
10178 },
10179 {
10180 /* MOD_0F01_REG_7 */
10181 { "invlpg", { Mb } },
10182 { RM_TABLE (RM_0F01_REG_7) },
10183 },
10184 {
10185 /* MOD_0F12_PREFIX_0 */
10186 { "movlps", { XM, EXq } },
10187 { "movhlps", { XM, EXq } },
10188 },
10189 {
10190 /* MOD_0F13 */
10191 { "movlpX", { EXq, XM } },
9e30b8e0
L
10192 },
10193 {
10194 /* MOD_0F16_PREFIX_0 */
10195 { "movhps", { XM, EXq } },
10196 { "movlhps", { XM, EXq } },
10197 },
10198 {
10199 /* MOD_0F17 */
10200 { "movhpX", { EXq, XM } },
9e30b8e0
L
10201 },
10202 {
10203 /* MOD_0F18_REG_0 */
10204 { "prefetchnta", { Mb } },
9e30b8e0
L
10205 },
10206 {
10207 /* MOD_0F18_REG_1 */
10208 { "prefetcht0", { Mb } },
9e30b8e0
L
10209 },
10210 {
10211 /* MOD_0F18_REG_2 */
10212 { "prefetcht1", { Mb } },
9e30b8e0
L
10213 },
10214 {
10215 /* MOD_0F18_REG_3 */
10216 { "prefetcht2", { Mb } },
9e30b8e0
L
10217 },
10218 {
10219 /* MOD_0F20 */
592d1631 10220 { Bad_Opcode },
9e30b8e0
L
10221 { "movZ", { Rm, Cm } },
10222 },
10223 {
10224 /* MOD_0F21 */
592d1631 10225 { Bad_Opcode },
9e30b8e0
L
10226 { "movZ", { Rm, Dm } },
10227 },
10228 {
10229 /* MOD_0F22 */
592d1631 10230 { Bad_Opcode },
9e30b8e0 10231 { "movZ", { Cm, Rm } },
b844680a
L
10232 },
10233 {
92fddf8e 10234 /* MOD_0F23 */
592d1631 10235 { Bad_Opcode },
92fddf8e 10236 { "movZ", { Dm, Rm } },
b844680a
L
10237 },
10238 {
92fddf8e 10239 /* MOD_0F24 */
592d1631 10240 { Bad_Opcode },
92fddf8e 10241 { "movL", { Rd, Td } },
b844680a
L
10242 },
10243 {
92fddf8e 10244 /* MOD_0F26 */
592d1631 10245 { Bad_Opcode },
92fddf8e 10246 { "movL", { Td, Rd } },
b844680a 10247 },
75c135a8
L
10248 {
10249 /* MOD_0F2B_PREFIX_0 */
4ee52178 10250 {"movntps", { Mx, XM } },
75c135a8
L
10251 },
10252 {
10253 /* MOD_0F2B_PREFIX_1 */
4ee52178 10254 {"movntss", { Md, XM } },
75c135a8
L
10255 },
10256 {
10257 /* MOD_0F2B_PREFIX_2 */
4ee52178 10258 {"movntpd", { Mx, XM } },
75c135a8
L
10259 },
10260 {
10261 /* MOD_0F2B_PREFIX_3 */
4ee52178 10262 {"movntsd", { Mq, XM } },
75c135a8
L
10263 },
10264 {
10265 /* MOD_0F51 */
592d1631 10266 { Bad_Opcode },
75c135a8
L
10267 { "movmskpX", { Gdq, XS } },
10268 },
b844680a 10269 {
1ceb70f8 10270 /* MOD_0F71_REG_2 */
592d1631 10271 { Bad_Opcode },
4e7d34a6 10272 { "psrlw", { MS, Ib } },
b844680a
L
10273 },
10274 {
1ceb70f8 10275 /* MOD_0F71_REG_4 */
592d1631 10276 { Bad_Opcode },
4e7d34a6 10277 { "psraw", { MS, Ib } },
b844680a
L
10278 },
10279 {
1ceb70f8 10280 /* MOD_0F71_REG_6 */
592d1631 10281 { Bad_Opcode },
4e7d34a6 10282 { "psllw", { MS, Ib } },
b844680a
L
10283 },
10284 {
1ceb70f8 10285 /* MOD_0F72_REG_2 */
592d1631 10286 { Bad_Opcode },
4e7d34a6 10287 { "psrld", { MS, Ib } },
b844680a
L
10288 },
10289 {
1ceb70f8 10290 /* MOD_0F72_REG_4 */
592d1631 10291 { Bad_Opcode },
4e7d34a6 10292 { "psrad", { MS, Ib } },
b844680a
L
10293 },
10294 {
1ceb70f8 10295 /* MOD_0F72_REG_6 */
592d1631 10296 { Bad_Opcode },
4e7d34a6 10297 { "pslld", { MS, Ib } },
b844680a
L
10298 },
10299 {
1ceb70f8 10300 /* MOD_0F73_REG_2 */
592d1631 10301 { Bad_Opcode },
4e7d34a6 10302 { "psrlq", { MS, Ib } },
b844680a
L
10303 },
10304 {
1ceb70f8 10305 /* MOD_0F73_REG_3 */
592d1631 10306 { Bad_Opcode },
c0f3af97
L
10307 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
10308 },
10309 {
10310 /* MOD_0F73_REG_6 */
592d1631 10311 { Bad_Opcode },
c0f3af97
L
10312 { "psllq", { MS, Ib } },
10313 },
10314 {
10315 /* MOD_0F73_REG_7 */
592d1631 10316 { Bad_Opcode },
c0f3af97
L
10317 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
10318 },
10319 {
10320 /* MOD_0FAE_REG_0 */
eacc9c89 10321 { "fxsave", { FXSAVE } },
c0f3af97
L
10322 },
10323 {
10324 /* MOD_0FAE_REG_1 */
eacc9c89 10325 { "fxrstor", { FXSAVE } },
c0f3af97
L
10326 },
10327 {
10328 /* MOD_0FAE_REG_2 */
10329 { "ldmxcsr", { Md } },
c0f3af97
L
10330 },
10331 {
10332 /* MOD_0FAE_REG_3 */
10333 { "stmxcsr", { Md } },
c0f3af97
L
10334 },
10335 {
10336 /* MOD_0FAE_REG_4 */
73bb6729 10337 { "xsave", { FXSAVE } },
c0f3af97
L
10338 },
10339 {
10340 /* MOD_0FAE_REG_5 */
73bb6729 10341 { "xrstor", { FXSAVE } },
c0f3af97
L
10342 { RM_TABLE (RM_0FAE_REG_5) },
10343 },
10344 {
10345 /* MOD_0FAE_REG_6 */
592d1631 10346 { Bad_Opcode },
c0f3af97
L
10347 { RM_TABLE (RM_0FAE_REG_6) },
10348 },
10349 {
10350 /* MOD_0FAE_REG_7 */
10351 { "clflush", { Mb } },
10352 { RM_TABLE (RM_0FAE_REG_7) },
10353 },
10354 {
10355 /* MOD_0FB2 */
10356 { "lssS", { Gv, Mp } },
c0f3af97
L
10357 },
10358 {
10359 /* MOD_0FB4 */
10360 { "lfsS", { Gv, Mp } },
c0f3af97
L
10361 },
10362 {
10363 /* MOD_0FB5 */
10364 { "lgsS", { Gv, Mp } },
c0f3af97
L
10365 },
10366 {
10367 /* MOD_0FC7_REG_6 */
10368 { PREFIX_TABLE (PREFIX_0FC7_REG_6) },
c0f3af97
L
10369 },
10370 {
10371 /* MOD_0FC7_REG_7 */
10372 { "vmptrst", { Mq } },
c0f3af97
L
10373 },
10374 {
10375 /* MOD_0FD7 */
592d1631 10376 { Bad_Opcode },
c0f3af97
L
10377 { "pmovmskb", { Gdq, MS } },
10378 },
10379 {
10380 /* MOD_0FE7_PREFIX_2 */
10381 { "movntdq", { Mx, XM } },
c0f3af97
L
10382 },
10383 {
10384 /* MOD_0FF0_PREFIX_3 */
10385 { "lddqu", { XM, M } },
c0f3af97
L
10386 },
10387 {
10388 /* MOD_0F382A_PREFIX_2 */
10389 { "movntdqa", { XM, Mx } },
c0f3af97
L
10390 },
10391 {
10392 /* MOD_62_32BIT */
10393 { "bound{S|}", { Gv, Ma } },
c0f3af97
L
10394 },
10395 {
10396 /* MOD_C4_32BIT */
10397 { "lesS", { Gv, Mp } },
10398 { VEX_C4_TABLE (VEX_0F) },
10399 },
10400 {
10401 /* MOD_C5_32BIT */
10402 { "ldsS", { Gv, Mp } },
10403 { VEX_C5_TABLE (VEX_0F) },
10404 },
10405 {
10406 /* MOD_VEX_12_PREFIX_0 */
10407 { VEX_LEN_TABLE (VEX_LEN_12_P_0_M_0) },
10408 { VEX_LEN_TABLE (VEX_LEN_12_P_0_M_1) },
10409 },
10410 {
10411 /* MOD_VEX_13 */
10412 { VEX_LEN_TABLE (VEX_LEN_13_M_0) },
c0f3af97
L
10413 },
10414 {
10415 /* MOD_VEX_16_PREFIX_0 */
10416 { VEX_LEN_TABLE (VEX_LEN_16_P_0_M_0) },
10417 { VEX_LEN_TABLE (VEX_LEN_16_P_0_M_1) },
10418 },
10419 {
10420 /* MOD_VEX_17 */
10421 { VEX_LEN_TABLE (VEX_LEN_17_M_0) },
c0f3af97
L
10422 },
10423 {
10424 /* MOD_VEX_2B */
9e30b8e0 10425 { VEX_W_TABLE (VEX_W_2B_M_0) },
c0f3af97
L
10426 },
10427 {
976f1fde 10428 /* MOD_VEX_50 */
592d1631 10429 { Bad_Opcode },
9e30b8e0 10430 { VEX_W_TABLE (VEX_W_50_M_0) },
c0f3af97
L
10431 },
10432 {
10433 /* MOD_VEX_71_REG_2 */
592d1631 10434 { Bad_Opcode },
c0f3af97 10435 { PREFIX_TABLE (PREFIX_VEX_71_REG_2) },
b844680a
L
10436 },
10437 {
c0f3af97 10438 /* MOD_VEX_71_REG_4 */
592d1631 10439 { Bad_Opcode },
c0f3af97 10440 { PREFIX_TABLE (PREFIX_VEX_71_REG_4) },
b844680a
L
10441 },
10442 {
c0f3af97 10443 /* MOD_VEX_71_REG_6 */
592d1631 10444 { Bad_Opcode },
c0f3af97 10445 { PREFIX_TABLE (PREFIX_VEX_71_REG_6) },
b844680a
L
10446 },
10447 {
c0f3af97 10448 /* MOD_VEX_72_REG_2 */
592d1631 10449 { Bad_Opcode },
c0f3af97 10450 { PREFIX_TABLE (PREFIX_VEX_72_REG_2) },
b844680a 10451 },
d8faab4e 10452 {
c0f3af97 10453 /* MOD_VEX_72_REG_4 */
592d1631 10454 { Bad_Opcode },
c0f3af97 10455 { PREFIX_TABLE (PREFIX_VEX_72_REG_4) },
d8faab4e
L
10456 },
10457 {
c0f3af97 10458 /* MOD_VEX_72_REG_6 */
592d1631 10459 { Bad_Opcode },
c0f3af97 10460 { PREFIX_TABLE (PREFIX_VEX_72_REG_6) },
d8faab4e 10461 },
876d4bfa 10462 {
c0f3af97 10463 /* MOD_VEX_73_REG_2 */
592d1631 10464 { Bad_Opcode },
c0f3af97 10465 { PREFIX_TABLE (PREFIX_VEX_73_REG_2) },
876d4bfa
L
10466 },
10467 {
c0f3af97 10468 /* MOD_VEX_73_REG_3 */
592d1631 10469 { Bad_Opcode },
c0f3af97 10470 { PREFIX_TABLE (PREFIX_VEX_73_REG_3) },
475a2301
L
10471 },
10472 {
c0f3af97 10473 /* MOD_VEX_73_REG_6 */
592d1631 10474 { Bad_Opcode },
c0f3af97 10475 { PREFIX_TABLE (PREFIX_VEX_73_REG_6) },
876d4bfa
L
10476 },
10477 {
c0f3af97 10478 /* MOD_VEX_73_REG_7 */
592d1631 10479 { Bad_Opcode },
c0f3af97 10480 { PREFIX_TABLE (PREFIX_VEX_73_REG_7) },
876d4bfa
L
10481 },
10482 {
c0f3af97
L
10483 /* MOD_VEX_AE_REG_2 */
10484 { VEX_LEN_TABLE (VEX_LEN_AE_R_2_M_0) },
876d4bfa 10485 },
bbedc832 10486 {
c0f3af97
L
10487 /* MOD_VEX_AE_REG_3 */
10488 { VEX_LEN_TABLE (VEX_LEN_AE_R_3_M_0) },
bbedc832 10489 },
144c41d9 10490 {
c0f3af97 10491 /* MOD_VEX_D7_PREFIX_2 */
592d1631 10492 { Bad_Opcode },
c0f3af97 10493 { VEX_LEN_TABLE (VEX_LEN_D7_P_2_M_1) },
144c41d9 10494 },
1afd85e3 10495 {
c0f3af97 10496 /* MOD_VEX_E7_PREFIX_2 */
9e30b8e0 10497 { VEX_W_TABLE (VEX_W_E7_P_2_M_0) },
1afd85e3
L
10498 },
10499 {
c0f3af97 10500 /* MOD_VEX_F0_PREFIX_3 */
9e30b8e0 10501 { VEX_W_TABLE (VEX_W_F0_P_3_M_0) },
92fddf8e
L
10502 },
10503 {
c0f3af97 10504 /* MOD_VEX_3818_PREFIX_2 */
bcf2684f 10505 { VEX_W_TABLE (VEX_W_3818_P_2_M_0) },
1afd85e3 10506 },
75c135a8 10507 {
c0f3af97
L
10508 /* MOD_VEX_3819_PREFIX_2 */
10509 { VEX_LEN_TABLE (VEX_LEN_3819_P_2_M_0) },
75c135a8
L
10510 },
10511 {
c0f3af97
L
10512 /* MOD_VEX_381A_PREFIX_2 */
10513 { VEX_LEN_TABLE (VEX_LEN_381A_P_2_M_0) },
75c135a8 10514 },
1afd85e3 10515 {
c0f3af97
L
10516 /* MOD_VEX_382A_PREFIX_2 */
10517 { VEX_LEN_TABLE (VEX_LEN_382A_P_2_M_0) },
1afd85e3 10518 },
75c135a8 10519 {
c0f3af97 10520 /* MOD_VEX_382C_PREFIX_2 */
53aa04a0 10521 { VEX_W_TABLE (VEX_W_382C_P_2_M_0) },
75c135a8 10522 },
1afd85e3 10523 {
c0f3af97 10524 /* MOD_VEX_382D_PREFIX_2 */
53aa04a0 10525 { VEX_W_TABLE (VEX_W_382D_P_2_M_0) },
1afd85e3
L
10526 },
10527 {
c0f3af97 10528 /* MOD_VEX_382E_PREFIX_2 */
53aa04a0 10529 { VEX_W_TABLE (VEX_W_382E_P_2_M_0) },
1afd85e3
L
10530 },
10531 {
c0f3af97 10532 /* MOD_VEX_382F_PREFIX_2 */
53aa04a0 10533 { VEX_W_TABLE (VEX_W_382F_P_2_M_0) },
1afd85e3 10534 },
b844680a
L
10535};
10536
1ceb70f8 10537static const struct dis386 rm_table[][8] = {
b844680a 10538 {
1ceb70f8 10539 /* RM_0F01_REG_0 */
592d1631 10540 { Bad_Opcode },
b844680a
L
10541 { "vmcall", { Skip_MODRM } },
10542 { "vmlaunch", { Skip_MODRM } },
10543 { "vmresume", { Skip_MODRM } },
10544 { "vmxoff", { Skip_MODRM } },
b844680a
L
10545 },
10546 {
1ceb70f8 10547 /* RM_0F01_REG_1 */
b844680a
L
10548 { "monitor", { { OP_Monitor, 0 } } },
10549 { "mwait", { { OP_Mwait, 0 } } },
b844680a 10550 },
475a2301
L
10551 {
10552 /* RM_0F01_REG_2 */
10553 { "xgetbv", { Skip_MODRM } },
10554 { "xsetbv", { Skip_MODRM } },
475a2301 10555 },
b844680a 10556 {
1ceb70f8 10557 /* RM_0F01_REG_3 */
4e7d34a6
L
10558 { "vmrun", { Skip_MODRM } },
10559 { "vmmcall", { Skip_MODRM } },
10560 { "vmload", { Skip_MODRM } },
10561 { "vmsave", { Skip_MODRM } },
10562 { "stgi", { Skip_MODRM } },
10563 { "clgi", { Skip_MODRM } },
10564 { "skinit", { Skip_MODRM } },
10565 { "invlpga", { Skip_MODRM } },
10566 },
10567 {
1ceb70f8 10568 /* RM_0F01_REG_7 */
4e7d34a6
L
10569 { "swapgs", { Skip_MODRM } },
10570 { "rdtscp", { Skip_MODRM } },
b844680a
L
10571 },
10572 {
1ceb70f8 10573 /* RM_0FAE_REG_5 */
4e7d34a6 10574 { "lfence", { Skip_MODRM } },
b844680a
L
10575 },
10576 {
1ceb70f8 10577 /* RM_0FAE_REG_6 */
4e7d34a6 10578 { "mfence", { Skip_MODRM } },
b844680a 10579 },
bbedc832 10580 {
1ceb70f8 10581 /* RM_0FAE_REG_7 */
4e7d34a6 10582 { "sfence", { Skip_MODRM } },
144c41d9 10583 },
b844680a
L
10584};
10585
c608c12e
AM
10586#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
10587
f16cd0d5
L
10588/* We use the high bit to indicate different name for the same
10589 prefix. */
10590#define ADDR16_PREFIX (0x67 | 0x100)
10591#define ADDR32_PREFIX (0x67 | 0x200)
10592#define DATA16_PREFIX (0x66 | 0x100)
10593#define DATA32_PREFIX (0x66 | 0x200)
10594#define REP_PREFIX (0xf3 | 0x100)
10595
10596static int
26ca5450 10597ckprefix (void)
252b5132 10598{
f16cd0d5 10599 int newrex, i, length;
52b15da3 10600 rex = 0;
c0f3af97 10601 rex_ignored = 0;
252b5132 10602 prefixes = 0;
7d421014 10603 used_prefixes = 0;
52b15da3 10604 rex_used = 0;
f16cd0d5
L
10605 last_lock_prefix = -1;
10606 last_repz_prefix = -1;
10607 last_repnz_prefix = -1;
10608 last_data_prefix = -1;
10609 last_addr_prefix = -1;
10610 last_rex_prefix = -1;
10611 last_seg_prefix = -1;
f310f33d
L
10612 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
10613 all_prefixes[i] = 0;
10614 i = 0;
f16cd0d5
L
10615 length = 0;
10616 /* The maximum instruction length is 15bytes. */
10617 while (length < MAX_CODE_LENGTH - 1)
252b5132
RH
10618 {
10619 FETCH_DATA (the_info, codep + 1);
52b15da3 10620 newrex = 0;
252b5132
RH
10621 switch (*codep)
10622 {
52b15da3
JH
10623 /* REX prefixes family. */
10624 case 0x40:
10625 case 0x41:
10626 case 0x42:
10627 case 0x43:
10628 case 0x44:
10629 case 0x45:
10630 case 0x46:
10631 case 0x47:
10632 case 0x48:
10633 case 0x49:
10634 case 0x4a:
10635 case 0x4b:
10636 case 0x4c:
10637 case 0x4d:
10638 case 0x4e:
10639 case 0x4f:
f16cd0d5
L
10640 if (address_mode == mode_64bit)
10641 newrex = *codep;
10642 else
10643 return 1;
10644 last_rex_prefix = i;
52b15da3 10645 break;
252b5132
RH
10646 case 0xf3:
10647 prefixes |= PREFIX_REPZ;
f16cd0d5 10648 last_repz_prefix = i;
252b5132
RH
10649 break;
10650 case 0xf2:
10651 prefixes |= PREFIX_REPNZ;
f16cd0d5 10652 last_repnz_prefix = i;
252b5132
RH
10653 break;
10654 case 0xf0:
10655 prefixes |= PREFIX_LOCK;
f16cd0d5 10656 last_lock_prefix = i;
252b5132
RH
10657 break;
10658 case 0x2e:
10659 prefixes |= PREFIX_CS;
f16cd0d5 10660 last_seg_prefix = i;
252b5132
RH
10661 break;
10662 case 0x36:
10663 prefixes |= PREFIX_SS;
f16cd0d5 10664 last_seg_prefix = i;
252b5132
RH
10665 break;
10666 case 0x3e:
10667 prefixes |= PREFIX_DS;
f16cd0d5 10668 last_seg_prefix = i;
252b5132
RH
10669 break;
10670 case 0x26:
10671 prefixes |= PREFIX_ES;
f16cd0d5 10672 last_seg_prefix = i;
252b5132
RH
10673 break;
10674 case 0x64:
10675 prefixes |= PREFIX_FS;
f16cd0d5 10676 last_seg_prefix = i;
252b5132
RH
10677 break;
10678 case 0x65:
10679 prefixes |= PREFIX_GS;
f16cd0d5 10680 last_seg_prefix = i;
252b5132
RH
10681 break;
10682 case 0x66:
10683 prefixes |= PREFIX_DATA;
f16cd0d5 10684 last_data_prefix = i;
252b5132
RH
10685 break;
10686 case 0x67:
10687 prefixes |= PREFIX_ADDR;
f16cd0d5 10688 last_addr_prefix = i;
252b5132 10689 break;
5076851f 10690 case FWAIT_OPCODE:
252b5132
RH
10691 /* fwait is really an instruction. If there are prefixes
10692 before the fwait, they belong to the fwait, *not* to the
10693 following instruction. */
3e7d61b2 10694 if (prefixes || rex)
252b5132
RH
10695 {
10696 prefixes |= PREFIX_FWAIT;
10697 codep++;
f16cd0d5 10698 return 1;
252b5132
RH
10699 }
10700 prefixes = PREFIX_FWAIT;
10701 break;
10702 default:
f16cd0d5 10703 return 1;
252b5132 10704 }
52b15da3
JH
10705 /* Rex is ignored when followed by another prefix. */
10706 if (rex)
10707 {
3e7d61b2 10708 rex_used = rex;
f16cd0d5 10709 return 1;
52b15da3 10710 }
f16cd0d5
L
10711 if (*codep != FWAIT_OPCODE)
10712 all_prefixes[i++] = *codep;
52b15da3 10713 rex = newrex;
252b5132 10714 codep++;
f16cd0d5
L
10715 length++;
10716 }
10717 return 0;
10718}
10719
10720static int
10721seg_prefix (int pref)
10722{
10723 switch (pref)
10724 {
10725 case 0x2e:
10726 return PREFIX_CS;
10727 case 0x36:
10728 return PREFIX_SS;
10729 case 0x3e:
10730 return PREFIX_DS;
10731 case 0x26:
10732 return PREFIX_ES;
10733 case 0x64:
10734 return PREFIX_FS;
10735 case 0x65:
10736 return PREFIX_GS;
10737 default:
10738 return 0;
252b5132
RH
10739 }
10740}
10741
7d421014
ILT
10742/* Return the name of the prefix byte PREF, or NULL if PREF is not a
10743 prefix byte. */
10744
10745static const char *
26ca5450 10746prefix_name (int pref, int sizeflag)
7d421014 10747{
0003779b
L
10748 static const char *rexes [16] =
10749 {
10750 "rex", /* 0x40 */
10751 "rex.B", /* 0x41 */
10752 "rex.X", /* 0x42 */
10753 "rex.XB", /* 0x43 */
10754 "rex.R", /* 0x44 */
10755 "rex.RB", /* 0x45 */
10756 "rex.RX", /* 0x46 */
10757 "rex.RXB", /* 0x47 */
10758 "rex.W", /* 0x48 */
10759 "rex.WB", /* 0x49 */
10760 "rex.WX", /* 0x4a */
10761 "rex.WXB", /* 0x4b */
10762 "rex.WR", /* 0x4c */
10763 "rex.WRB", /* 0x4d */
10764 "rex.WRX", /* 0x4e */
10765 "rex.WRXB", /* 0x4f */
10766 };
10767
7d421014
ILT
10768 switch (pref)
10769 {
52b15da3
JH
10770 /* REX prefixes family. */
10771 case 0x40:
52b15da3 10772 case 0x41:
52b15da3 10773 case 0x42:
52b15da3 10774 case 0x43:
52b15da3 10775 case 0x44:
52b15da3 10776 case 0x45:
52b15da3 10777 case 0x46:
52b15da3 10778 case 0x47:
52b15da3 10779 case 0x48:
52b15da3 10780 case 0x49:
52b15da3 10781 case 0x4a:
52b15da3 10782 case 0x4b:
52b15da3 10783 case 0x4c:
52b15da3 10784 case 0x4d:
52b15da3 10785 case 0x4e:
52b15da3 10786 case 0x4f:
0003779b 10787 return rexes [pref - 0x40];
7d421014
ILT
10788 case 0xf3:
10789 return "repz";
10790 case 0xf2:
10791 return "repnz";
10792 case 0xf0:
10793 return "lock";
10794 case 0x2e:
10795 return "cs";
10796 case 0x36:
10797 return "ss";
10798 case 0x3e:
10799 return "ds";
10800 case 0x26:
10801 return "es";
10802 case 0x64:
10803 return "fs";
10804 case 0x65:
10805 return "gs";
10806 case 0x66:
10807 return (sizeflag & DFLAG) ? "data16" : "data32";
10808 case 0x67:
cb712a9e 10809 if (address_mode == mode_64bit)
db6eb5be 10810 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 10811 else
2888cb7a 10812 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
10813 case FWAIT_OPCODE:
10814 return "fwait";
f16cd0d5
L
10815 case ADDR16_PREFIX:
10816 return "addr16";
10817 case ADDR32_PREFIX:
10818 return "addr32";
10819 case DATA16_PREFIX:
10820 return "data16";
10821 case DATA32_PREFIX:
10822 return "data32";
10823 case REP_PREFIX:
10824 return "rep";
7d421014
ILT
10825 default:
10826 return NULL;
10827 }
10828}
10829
ce518a5f
L
10830static char op_out[MAX_OPERANDS][100];
10831static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 10832static int two_source_ops;
ce518a5f
L
10833static bfd_vma op_address[MAX_OPERANDS];
10834static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 10835static bfd_vma start_pc;
ce518a5f 10836
252b5132
RH
10837/*
10838 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
10839 * (see topic "Redundant prefixes" in the "Differences from 8086"
10840 * section of the "Virtual 8086 Mode" chapter.)
10841 * 'pc' should be the address of this instruction, it will
10842 * be used to print the target address if this is a relative jump or call
10843 * The function returns the length of this instruction in bytes.
10844 */
10845
252b5132 10846static char intel_syntax;
9d141669 10847static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
10848static char open_char;
10849static char close_char;
10850static char separator_char;
10851static char scale_char;
10852
e396998b
AM
10853/* Here for backwards compatibility. When gdb stops using
10854 print_insn_i386_att and print_insn_i386_intel these functions can
10855 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 10856int
26ca5450 10857print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
10858{
10859 intel_syntax = 0;
e396998b
AM
10860
10861 return print_insn (pc, info);
252b5132
RH
10862}
10863
10864int
26ca5450 10865print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
10866{
10867 intel_syntax = 1;
e396998b
AM
10868
10869 return print_insn (pc, info);
252b5132
RH
10870}
10871
e396998b 10872int
26ca5450 10873print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
10874{
10875 intel_syntax = -1;
10876
10877 return print_insn (pc, info);
10878}
10879
f59a29b9
L
10880void
10881print_i386_disassembler_options (FILE *stream)
10882{
10883 fprintf (stream, _("\n\
10884The following i386/x86-64 specific disassembler options are supported for use\n\
10885with the -M switch (multiple options should be separated by commas):\n"));
10886
10887 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
10888 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
10889 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
10890 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
10891 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
10892 fprintf (stream, _(" att-mnemonic\n"
10893 " Display instruction in AT&T mnemonic\n"));
10894 fprintf (stream, _(" intel-mnemonic\n"
10895 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
10896 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
10897 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
10898 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
10899 fprintf (stream, _(" data32 Assume 32bit data size\n"));
10900 fprintf (stream, _(" data16 Assume 16bit data size\n"));
10901 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
10902}
10903
592d1631
L
10904/* Bad opcode. */
10905static const struct dis386 bad_opcode = { "(bad)", { XX } };
10906
b844680a
L
10907/* Get a pointer to struct dis386 with a valid name. */
10908
10909static const struct dis386 *
8bb15339 10910get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 10911{
91d6fa6a 10912 int vindex, vex_table_index;
b844680a
L
10913
10914 if (dp->name != NULL)
10915 return dp;
10916
10917 switch (dp->op[0].bytemode)
10918 {
1ceb70f8
L
10919 case USE_REG_TABLE:
10920 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
10921 break;
10922
10923 case USE_MOD_TABLE:
91d6fa6a
NC
10924 vindex = modrm.mod == 0x3 ? 1 : 0;
10925 dp = &mod_table[dp->op[1].bytemode][vindex];
1ceb70f8
L
10926 break;
10927
10928 case USE_RM_TABLE:
10929 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
10930 break;
10931
4e7d34a6 10932 case USE_PREFIX_TABLE:
c0f3af97 10933 if (need_vex)
b844680a 10934 {
c0f3af97
L
10935 /* The prefix in VEX is implicit. */
10936 switch (vex.prefix)
10937 {
10938 case 0:
91d6fa6a 10939 vindex = 0;
c0f3af97
L
10940 break;
10941 case REPE_PREFIX_OPCODE:
91d6fa6a 10942 vindex = 1;
c0f3af97
L
10943 break;
10944 case DATA_PREFIX_OPCODE:
91d6fa6a 10945 vindex = 2;
c0f3af97
L
10946 break;
10947 case REPNE_PREFIX_OPCODE:
91d6fa6a 10948 vindex = 3;
c0f3af97
L
10949 break;
10950 default:
10951 abort ();
10952 break;
10953 }
b844680a 10954 }
c0f3af97 10955 else
b844680a 10956 {
91d6fa6a 10957 vindex = 0;
c0f3af97
L
10958 used_prefixes |= (prefixes & PREFIX_REPZ);
10959 if (prefixes & PREFIX_REPZ)
b844680a 10960 {
91d6fa6a 10961 vindex = 1;
f16cd0d5 10962 all_prefixes[last_repz_prefix] = 0;
b844680a
L
10963 }
10964 else
10965 {
c0f3af97
L
10966 /* We should check PREFIX_REPNZ and PREFIX_REPZ before
10967 PREFIX_DATA. */
10968 used_prefixes |= (prefixes & PREFIX_REPNZ);
10969 if (prefixes & PREFIX_REPNZ)
10970 {
91d6fa6a 10971 vindex = 3;
f16cd0d5 10972 all_prefixes[last_repnz_prefix] = 0;
c0f3af97
L
10973 }
10974 else
b844680a 10975 {
c0f3af97
L
10976 used_prefixes |= (prefixes & PREFIX_DATA);
10977 if (prefixes & PREFIX_DATA)
10978 {
91d6fa6a 10979 vindex = 2;
f16cd0d5 10980 all_prefixes[last_data_prefix] = 0;
c0f3af97 10981 }
b844680a
L
10982 }
10983 }
10984 }
91d6fa6a 10985 dp = &prefix_table[dp->op[1].bytemode][vindex];
b844680a
L
10986 break;
10987
4e7d34a6 10988 case USE_X86_64_TABLE:
91d6fa6a
NC
10989 vindex = address_mode == mode_64bit ? 1 : 0;
10990 dp = &x86_64_table[dp->op[1].bytemode][vindex];
b844680a
L
10991 break;
10992
4e7d34a6 10993 case USE_3BYTE_TABLE:
8bb15339 10994 FETCH_DATA (info, codep + 2);
91d6fa6a
NC
10995 vindex = *codep++;
10996 dp = &three_byte_table[dp->op[1].bytemode][vindex];
8bb15339
L
10997 modrm.mod = (*codep >> 6) & 3;
10998 modrm.reg = (*codep >> 3) & 7;
10999 modrm.rm = *codep & 7;
11000 break;
11001
c0f3af97
L
11002 case USE_VEX_LEN_TABLE:
11003 if (!need_vex)
11004 abort ();
11005
11006 switch (vex.length)
11007 {
11008 case 128:
91d6fa6a 11009 vindex = 0;
c0f3af97
L
11010 break;
11011 case 256:
91d6fa6a 11012 vindex = 1;
c0f3af97
L
11013 break;
11014 default:
11015 abort ();
11016 break;
11017 }
11018
91d6fa6a 11019 dp = &vex_len_table[dp->op[1].bytemode][vindex];
c0f3af97
L
11020 break;
11021
f88c9eb0
SP
11022 case USE_XOP_8F_TABLE:
11023 FETCH_DATA (info, codep + 3);
11024 /* All bits in the REX prefix are ignored. */
11025 rex_ignored = rex;
11026 rex = ~(*codep >> 5) & 0x7;
11027
11028 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
11029 switch ((*codep & 0x1f))
11030 {
11031 default:
11032 BadOp ();
5dd85c99
SP
11033 case 0x8:
11034 vex_table_index = XOP_08;
11035 break;
f88c9eb0
SP
11036 case 0x9:
11037 vex_table_index = XOP_09;
11038 break;
11039 case 0xa:
11040 vex_table_index = XOP_0A;
11041 break;
11042 }
11043 codep++;
11044 vex.w = *codep & 0x80;
11045 if (vex.w && address_mode == mode_64bit)
11046 rex |= REX_W;
11047
11048 vex.register_specifier = (~(*codep >> 3)) & 0xf;
11049 if (address_mode != mode_64bit
11050 && vex.register_specifier > 0x7)
11051 BadOp ();
11052
11053 vex.length = (*codep & 0x4) ? 256 : 128;
11054 switch ((*codep & 0x3))
11055 {
11056 case 0:
11057 vex.prefix = 0;
11058 break;
11059 case 1:
11060 vex.prefix = DATA_PREFIX_OPCODE;
11061 break;
11062 case 2:
11063 vex.prefix = REPE_PREFIX_OPCODE;
11064 break;
11065 case 3:
11066 vex.prefix = REPNE_PREFIX_OPCODE;
11067 break;
11068 }
11069 need_vex = 1;
11070 need_vex_reg = 1;
11071 codep++;
91d6fa6a
NC
11072 vindex = *codep++;
11073 dp = &xop_table[vex_table_index][vindex];
c48244a5
SP
11074
11075 FETCH_DATA (info, codep + 1);
11076 modrm.mod = (*codep >> 6) & 3;
11077 modrm.reg = (*codep >> 3) & 7;
11078 modrm.rm = *codep & 7;
f88c9eb0
SP
11079 break;
11080
c0f3af97
L
11081 case USE_VEX_C4_TABLE:
11082 FETCH_DATA (info, codep + 3);
11083 /* All bits in the REX prefix are ignored. */
11084 rex_ignored = rex;
11085 rex = ~(*codep >> 5) & 0x7;
11086 switch ((*codep & 0x1f))
11087 {
11088 default:
11089 BadOp ();
11090 case 0x1:
f88c9eb0 11091 vex_table_index = VEX_0F;
c0f3af97
L
11092 break;
11093 case 0x2:
f88c9eb0 11094 vex_table_index = VEX_0F38;
c0f3af97
L
11095 break;
11096 case 0x3:
f88c9eb0 11097 vex_table_index = VEX_0F3A;
c0f3af97
L
11098 break;
11099 }
11100 codep++;
11101 vex.w = *codep & 0x80;
11102 if (vex.w && address_mode == mode_64bit)
11103 rex |= REX_W;
11104
11105 vex.register_specifier = (~(*codep >> 3)) & 0xf;
11106 if (address_mode != mode_64bit
11107 && vex.register_specifier > 0x7)
11108 BadOp ();
11109
11110 vex.length = (*codep & 0x4) ? 256 : 128;
11111 switch ((*codep & 0x3))
11112 {
11113 case 0:
11114 vex.prefix = 0;
11115 break;
11116 case 1:
11117 vex.prefix = DATA_PREFIX_OPCODE;
11118 break;
11119 case 2:
11120 vex.prefix = REPE_PREFIX_OPCODE;
11121 break;
11122 case 3:
11123 vex.prefix = REPNE_PREFIX_OPCODE;
11124 break;
11125 }
11126 need_vex = 1;
11127 need_vex_reg = 1;
11128 codep++;
91d6fa6a
NC
11129 vindex = *codep++;
11130 dp = &vex_table[vex_table_index][vindex];
c0f3af97 11131 /* There is no MODRM byte for VEX [82|77]. */
91d6fa6a 11132 if (vindex != 0x77 && vindex != 0x82)
c0f3af97
L
11133 {
11134 FETCH_DATA (info, codep + 1);
11135 modrm.mod = (*codep >> 6) & 3;
11136 modrm.reg = (*codep >> 3) & 7;
11137 modrm.rm = *codep & 7;
11138 }
11139 break;
11140
11141 case USE_VEX_C5_TABLE:
11142 FETCH_DATA (info, codep + 2);
11143 /* All bits in the REX prefix are ignored. */
11144 rex_ignored = rex;
11145 rex = (*codep & 0x80) ? 0 : REX_R;
11146
11147 vex.register_specifier = (~(*codep >> 3)) & 0xf;
11148 if (address_mode != mode_64bit
11149 && vex.register_specifier > 0x7)
11150 BadOp ();
11151
759a05ce
L
11152 vex.w = 0;
11153
c0f3af97
L
11154 vex.length = (*codep & 0x4) ? 256 : 128;
11155 switch ((*codep & 0x3))
11156 {
11157 case 0:
11158 vex.prefix = 0;
11159 break;
11160 case 1:
11161 vex.prefix = DATA_PREFIX_OPCODE;
11162 break;
11163 case 2:
11164 vex.prefix = REPE_PREFIX_OPCODE;
11165 break;
11166 case 3:
11167 vex.prefix = REPNE_PREFIX_OPCODE;
11168 break;
11169 }
11170 need_vex = 1;
11171 need_vex_reg = 1;
11172 codep++;
91d6fa6a
NC
11173 vindex = *codep++;
11174 dp = &vex_table[dp->op[1].bytemode][vindex];
c0f3af97 11175 /* There is no MODRM byte for VEX [82|77]. */
91d6fa6a 11176 if (vindex != 0x77 && vindex != 0x82)
c0f3af97
L
11177 {
11178 FETCH_DATA (info, codep + 1);
11179 modrm.mod = (*codep >> 6) & 3;
11180 modrm.reg = (*codep >> 3) & 7;
11181 modrm.rm = *codep & 7;
11182 }
11183 break;
11184
9e30b8e0
L
11185 case USE_VEX_W_TABLE:
11186 if (!need_vex)
11187 abort ();
11188
11189 dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
11190 break;
11191
592d1631
L
11192 case 0:
11193 dp = &bad_opcode;
11194 break;
11195
b844680a 11196 default:
d34b5006 11197 abort ();
b844680a
L
11198 }
11199
11200 if (dp->name != NULL)
11201 return dp;
11202 else
8bb15339 11203 return get_valid_dis386 (dp, info);
b844680a
L
11204}
11205
e396998b 11206static int
26ca5450 11207print_insn (bfd_vma pc, disassemble_info *info)
252b5132 11208{
2da11e11 11209 const struct dis386 *dp;
252b5132 11210 int i;
ce518a5f 11211 char *op_txt[MAX_OPERANDS];
252b5132 11212 int needcomma;
e396998b
AM
11213 int sizeflag;
11214 const char *p;
252b5132 11215 struct dis_private priv;
eec0f4ca 11216 unsigned char op;
f16cd0d5
L
11217 int prefix_length;
11218 int default_prefixes;
252b5132 11219
cb712a9e 11220 if (info->mach == bfd_mach_x86_64_intel_syntax
8a9036a4
L
11221 || info->mach == bfd_mach_x86_64
11222 || info->mach == bfd_mach_l1om
11223 || info->mach == bfd_mach_l1om_intel_syntax)
cb712a9e
L
11224 address_mode = mode_64bit;
11225 else
11226 address_mode = mode_32bit;
52b15da3 11227
8373f971 11228 if (intel_syntax == (char) -1)
e396998b 11229 intel_syntax = (info->mach == bfd_mach_i386_i386_intel_syntax
8a9036a4
L
11230 || info->mach == bfd_mach_x86_64_intel_syntax
11231 || info->mach == bfd_mach_l1om_intel_syntax);
e396998b 11232
2da11e11 11233 if (info->mach == bfd_mach_i386_i386
52b15da3 11234 || info->mach == bfd_mach_x86_64
8a9036a4 11235 || info->mach == bfd_mach_l1om
52b15da3 11236 || info->mach == bfd_mach_i386_i386_intel_syntax
8a9036a4
L
11237 || info->mach == bfd_mach_x86_64_intel_syntax
11238 || info->mach == bfd_mach_l1om_intel_syntax)
e396998b 11239 priv.orig_sizeflag = AFLAG | DFLAG;
2da11e11 11240 else if (info->mach == bfd_mach_i386_i8086)
e396998b 11241 priv.orig_sizeflag = 0;
2da11e11
AM
11242 else
11243 abort ();
e396998b
AM
11244
11245 for (p = info->disassembler_options; p != NULL; )
11246 {
0112cd26 11247 if (CONST_STRNEQ (p, "x86-64"))
e396998b 11248 {
cb712a9e 11249 address_mode = mode_64bit;
e396998b
AM
11250 priv.orig_sizeflag = AFLAG | DFLAG;
11251 }
0112cd26 11252 else if (CONST_STRNEQ (p, "i386"))
e396998b 11253 {
cb712a9e 11254 address_mode = mode_32bit;
e396998b
AM
11255 priv.orig_sizeflag = AFLAG | DFLAG;
11256 }
0112cd26 11257 else if (CONST_STRNEQ (p, "i8086"))
e396998b 11258 {
cb712a9e 11259 address_mode = mode_16bit;
e396998b
AM
11260 priv.orig_sizeflag = 0;
11261 }
0112cd26 11262 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
11263 {
11264 intel_syntax = 1;
9d141669
L
11265 if (CONST_STRNEQ (p + 5, "-mnemonic"))
11266 intel_mnemonic = 1;
e396998b 11267 }
0112cd26 11268 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
11269 {
11270 intel_syntax = 0;
9d141669
L
11271 if (CONST_STRNEQ (p + 3, "-mnemonic"))
11272 intel_mnemonic = 0;
e396998b 11273 }
0112cd26 11274 else if (CONST_STRNEQ (p, "addr"))
e396998b 11275 {
f59a29b9
L
11276 if (address_mode == mode_64bit)
11277 {
11278 if (p[4] == '3' && p[5] == '2')
11279 priv.orig_sizeflag &= ~AFLAG;
11280 else if (p[4] == '6' && p[5] == '4')
11281 priv.orig_sizeflag |= AFLAG;
11282 }
11283 else
11284 {
11285 if (p[4] == '1' && p[5] == '6')
11286 priv.orig_sizeflag &= ~AFLAG;
11287 else if (p[4] == '3' && p[5] == '2')
11288 priv.orig_sizeflag |= AFLAG;
11289 }
e396998b 11290 }
0112cd26 11291 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
11292 {
11293 if (p[4] == '1' && p[5] == '6')
11294 priv.orig_sizeflag &= ~DFLAG;
11295 else if (p[4] == '3' && p[5] == '2')
11296 priv.orig_sizeflag |= DFLAG;
11297 }
0112cd26 11298 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
11299 priv.orig_sizeflag |= SUFFIX_ALWAYS;
11300
11301 p = strchr (p, ',');
11302 if (p != NULL)
11303 p++;
11304 }
11305
11306 if (intel_syntax)
11307 {
11308 names64 = intel_names64;
11309 names32 = intel_names32;
11310 names16 = intel_names16;
11311 names8 = intel_names8;
11312 names8rex = intel_names8rex;
11313 names_seg = intel_names_seg;
b9733481
L
11314 names_mm = intel_names_mm;
11315 names_xmm = intel_names_xmm;
11316 names_ymm = intel_names_ymm;
db51cc60
L
11317 index64 = intel_index64;
11318 index32 = intel_index32;
e396998b
AM
11319 index16 = intel_index16;
11320 open_char = '[';
11321 close_char = ']';
11322 separator_char = '+';
11323 scale_char = '*';
11324 }
11325 else
11326 {
11327 names64 = att_names64;
11328 names32 = att_names32;
11329 names16 = att_names16;
11330 names8 = att_names8;
11331 names8rex = att_names8rex;
11332 names_seg = att_names_seg;
b9733481
L
11333 names_mm = att_names_mm;
11334 names_xmm = att_names_xmm;
11335 names_ymm = att_names_ymm;
db51cc60
L
11336 index64 = att_index64;
11337 index32 = att_index32;
e396998b
AM
11338 index16 = att_index16;
11339 open_char = '(';
11340 close_char = ')';
11341 separator_char = ',';
11342 scale_char = ',';
11343 }
2da11e11 11344
4fe53c98 11345 /* The output looks better if we put 7 bytes on a line, since that
8a9036a4
L
11346 puts most long word instructions on a single line. Use 8 bytes
11347 for Intel L1OM. */
11348 if (info->mach == bfd_mach_l1om
11349 || info->mach == bfd_mach_l1om_intel_syntax)
11350 info->bytes_per_line = 8;
11351 else
11352 info->bytes_per_line = 7;
252b5132 11353
26ca5450 11354 info->private_data = &priv;
252b5132
RH
11355 priv.max_fetched = priv.the_buffer;
11356 priv.insn_start = pc;
252b5132
RH
11357
11358 obuf[0] = 0;
ce518a5f
L
11359 for (i = 0; i < MAX_OPERANDS; ++i)
11360 {
11361 op_out[i][0] = 0;
11362 op_index[i] = -1;
11363 }
252b5132
RH
11364
11365 the_info = info;
11366 start_pc = pc;
e396998b
AM
11367 start_codep = priv.the_buffer;
11368 codep = priv.the_buffer;
252b5132 11369
5076851f
ILT
11370 if (setjmp (priv.bailout) != 0)
11371 {
7d421014
ILT
11372 const char *name;
11373
5076851f 11374 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
11375 means we have an incomplete instruction of some sort. Just
11376 print the first byte as a prefix or a .byte pseudo-op. */
11377 if (codep > priv.the_buffer)
5076851f 11378 {
e396998b 11379 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
11380 if (name != NULL)
11381 (*info->fprintf_func) (info->stream, "%s", name);
11382 else
5076851f 11383 {
7d421014
ILT
11384 /* Just print the first byte as a .byte instruction. */
11385 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 11386 (unsigned int) priv.the_buffer[0]);
5076851f 11387 }
5076851f 11388
7d421014 11389 return 1;
5076851f
ILT
11390 }
11391
11392 return -1;
11393 }
11394
52b15da3 11395 obufp = obuf;
f16cd0d5
L
11396 sizeflag = priv.orig_sizeflag;
11397
11398 if (!ckprefix () || rex_used)
11399 {
11400 /* Too many prefixes or unused REX prefixes. */
11401 for (i = 0;
11402 all_prefixes[i] && i < (int) ARRAY_SIZE (all_prefixes);
11403 i++)
11404 (*info->fprintf_func) (info->stream, "%s",
11405 prefix_name (all_prefixes[i], sizeflag));
11406 return 1;
11407 }
252b5132
RH
11408
11409 insn_codep = codep;
11410
11411 FETCH_DATA (info, codep + 1);
11412 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
11413
3e7d61b2 11414 if (((prefixes & PREFIX_FWAIT)
f16cd0d5 11415 && ((*codep < 0xd8) || (*codep > 0xdf))))
252b5132 11416 {
f16cd0d5 11417 (*info->fprintf_func) (info->stream, "fwait");
7d421014 11418 return 1;
252b5132
RH
11419 }
11420
eec0f4ca 11421 op = 0;
c1e679ec 11422
252b5132
RH
11423 if (*codep == 0x0f)
11424 {
eec0f4ca 11425 unsigned char threebyte;
252b5132 11426 FETCH_DATA (info, codep + 2);
eec0f4ca
L
11427 threebyte = *++codep;
11428 dp = &dis386_twobyte[threebyte];
252b5132 11429 need_modrm = twobyte_has_modrm[*codep];
eec0f4ca 11430 codep++;
252b5132
RH
11431 }
11432 else
11433 {
6439fc28 11434 dp = &dis386[*codep];
252b5132 11435 need_modrm = onebyte_has_modrm[*codep];
eec0f4ca 11436 codep++;
252b5132 11437 }
246c51aa 11438
b844680a 11439 if ((prefixes & PREFIX_REPZ))
f16cd0d5 11440 used_prefixes |= PREFIX_REPZ;
b844680a 11441 if ((prefixes & PREFIX_REPNZ))
f16cd0d5 11442 used_prefixes |= PREFIX_REPNZ;
b844680a 11443 if ((prefixes & PREFIX_LOCK))
f16cd0d5 11444 used_prefixes |= PREFIX_LOCK;
c608c12e 11445
f16cd0d5 11446 default_prefixes = 0;
c608c12e
AM
11447 if (prefixes & PREFIX_ADDR)
11448 {
11449 sizeflag ^= AFLAG;
ce518a5f 11450 if (dp->op[2].bytemode != loop_jcxz_mode || intel_syntax)
3ffd33cf 11451 {
cb712a9e 11452 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
f16cd0d5 11453 all_prefixes[last_addr_prefix] = ADDR32_PREFIX;
3ffd33cf 11454 else
f16cd0d5
L
11455 all_prefixes[last_addr_prefix] = ADDR16_PREFIX;
11456 default_prefixes |= PREFIX_ADDR;
3ffd33cf
AM
11457 }
11458 }
11459
b844680a 11460 if ((prefixes & PREFIX_DATA))
3ffd33cf
AM
11461 {
11462 sizeflag ^= DFLAG;
ce518a5f
L
11463 if (dp->op[2].bytemode == cond_jump_mode
11464 && dp->op[0].bytemode == v_mode
6439fc28 11465 && !intel_syntax)
3ffd33cf
AM
11466 {
11467 if (sizeflag & DFLAG)
f16cd0d5 11468 all_prefixes[last_data_prefix] = DATA32_PREFIX;
3ffd33cf 11469 else
f16cd0d5
L
11470 all_prefixes[last_data_prefix] = DATA16_PREFIX;
11471 default_prefixes |= PREFIX_DATA;
11472 }
11473 else if (rex & REX_W)
11474 {
11475 /* REX_W will override PREFIX_DATA. */
11476 default_prefixes |= PREFIX_DATA;
3ffd33cf
AM
11477 }
11478 }
11479
8bb15339 11480 if (need_modrm)
252b5132
RH
11481 {
11482 FETCH_DATA (info, codep + 1);
7967e09e
L
11483 modrm.mod = (*codep >> 6) & 3;
11484 modrm.reg = (*codep >> 3) & 7;
11485 modrm.rm = *codep & 7;
252b5132
RH
11486 }
11487
55b126d4
L
11488 need_vex = 0;
11489 need_vex_reg = 0;
11490 vex_w_done = 0;
11491
ce518a5f 11492 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132
RH
11493 {
11494 dofloat (sizeflag);
11495 }
11496 else
11497 {
8bb15339 11498 dp = get_valid_dis386 (dp, info);
b844680a 11499 if (dp != NULL && putop (dp->name, sizeflag) == 0)
ce518a5f
L
11500 {
11501 for (i = 0; i < MAX_OPERANDS; ++i)
11502 {
246c51aa 11503 obufp = op_out[i];
ce518a5f
L
11504 op_ad = MAX_OPERANDS - 1 - i;
11505 if (dp->op[i].rtn)
11506 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
11507 }
6439fc28 11508 }
252b5132
RH
11509 }
11510
7d421014
ILT
11511 /* See if any prefixes were not used. If so, print the first one
11512 separately. If we don't do this, we'll wind up printing an
11513 instruction stream which does not precisely correspond to the
11514 bytes we are disassembling. */
f16cd0d5 11515 if ((prefixes & ~(used_prefixes | default_prefixes)) != 0)
7d421014 11516 {
f16cd0d5
L
11517 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
11518 if (all_prefixes[i])
11519 {
11520 const char *name;
11521 name = prefix_name (all_prefixes[i], priv.orig_sizeflag);
11522 if (name == NULL)
11523 name = INTERNAL_DISASSEMBLER_ERROR;
11524 (*info->fprintf_func) (info->stream, "%s", name);
11525 return 1;
11526 }
52b15da3 11527 }
7d421014 11528
d869730d 11529 /* Check if the REX prefix is used. */
2a70cca4 11530 if (rex_ignored == 0 && (rex ^ rex_used) == 0)
f16cd0d5
L
11531 all_prefixes[last_rex_prefix] = 0;
11532
5e6718e4 11533 /* Check if the SEG prefix is used. */
f16cd0d5
L
11534 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
11535 | PREFIX_FS | PREFIX_GS)) != 0
11536 && (used_prefixes
11537 & seg_prefix (all_prefixes[last_seg_prefix])) != 0)
11538 all_prefixes[last_seg_prefix] = 0;
11539
5e6718e4 11540 /* Check if the ADDR prefix is used. */
f16cd0d5
L
11541 if ((prefixes & PREFIX_ADDR) != 0
11542 && (used_prefixes & PREFIX_ADDR) != 0)
11543 all_prefixes[last_addr_prefix] = 0;
11544
5e6718e4 11545 /* Check if the DATA prefix is used. */
f16cd0d5
L
11546 if ((prefixes & PREFIX_DATA) != 0
11547 && (used_prefixes & PREFIX_DATA) != 0)
11548 all_prefixes[last_data_prefix] = 0;
11549
11550 prefix_length = 0;
f310f33d 11551 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
f16cd0d5
L
11552 if (all_prefixes[i])
11553 {
11554 const char *name;
11555 name = prefix_name (all_prefixes[i], sizeflag);
11556 if (name == NULL)
11557 abort ();
11558 prefix_length += strlen (name) + 1;
11559 (*info->fprintf_func) (info->stream, "%s ", name);
11560 }
b844680a 11561
f16cd0d5
L
11562 /* Check maximum code length. */
11563 if ((codep - start_codep) > MAX_CODE_LENGTH)
11564 {
11565 (*info->fprintf_func) (info->stream, "(bad)");
11566 return MAX_CODE_LENGTH;
11567 }
b844680a 11568
ea397f5b 11569 obufp = mnemonicendp;
f16cd0d5 11570 for (i = strlen (obuf) + prefix_length; i < 6; i++)
252b5132
RH
11571 oappend (" ");
11572 oappend (" ");
11573 (*info->fprintf_func) (info->stream, "%s", obuf);
11574
11575 /* The enter and bound instructions are printed with operands in the same
11576 order as the intel book; everything else is printed in reverse order. */
2da11e11 11577 if (intel_syntax || two_source_ops)
252b5132 11578 {
185b1163
L
11579 bfd_vma riprel;
11580
ce518a5f
L
11581 for (i = 0; i < MAX_OPERANDS; ++i)
11582 op_txt[i] = op_out[i];
246c51aa 11583
ce518a5f
L
11584 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
11585 {
11586 op_ad = op_index[i];
11587 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
11588 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
11589 riprel = op_riprel[i];
11590 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
11591 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 11592 }
252b5132
RH
11593 }
11594 else
11595 {
ce518a5f
L
11596 for (i = 0; i < MAX_OPERANDS; ++i)
11597 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
11598 }
11599
ce518a5f
L
11600 needcomma = 0;
11601 for (i = 0; i < MAX_OPERANDS; ++i)
11602 if (*op_txt[i])
11603 {
11604 if (needcomma)
11605 (*info->fprintf_func) (info->stream, ",");
11606 if (op_index[i] != -1 && !op_riprel[i])
11607 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
11608 else
11609 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
11610 needcomma = 1;
11611 }
050dfa73 11612
ce518a5f 11613 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
11614 if (op_index[i] != -1 && op_riprel[i])
11615 {
11616 (*info->fprintf_func) (info->stream, " # ");
11617 (*info->print_address_func) ((bfd_vma) (start_pc + codep - start_codep
11618 + op_address[op_index[i]]), info);
185b1163 11619 break;
52b15da3 11620 }
e396998b 11621 return codep - priv.the_buffer;
252b5132
RH
11622}
11623
6439fc28 11624static const char *float_mem[] = {
252b5132 11625 /* d8 */
7c52e0e8
L
11626 "fadd{s|}",
11627 "fmul{s|}",
11628 "fcom{s|}",
11629 "fcomp{s|}",
11630 "fsub{s|}",
11631 "fsubr{s|}",
11632 "fdiv{s|}",
11633 "fdivr{s|}",
db6eb5be 11634 /* d9 */
7c52e0e8 11635 "fld{s|}",
252b5132 11636 "(bad)",
7c52e0e8
L
11637 "fst{s|}",
11638 "fstp{s|}",
9306ca4a 11639 "fldenvIC",
252b5132 11640 "fldcw",
9306ca4a 11641 "fNstenvIC",
252b5132
RH
11642 "fNstcw",
11643 /* da */
7c52e0e8
L
11644 "fiadd{l|}",
11645 "fimul{l|}",
11646 "ficom{l|}",
11647 "ficomp{l|}",
11648 "fisub{l|}",
11649 "fisubr{l|}",
11650 "fidiv{l|}",
11651 "fidivr{l|}",
252b5132 11652 /* db */
7c52e0e8
L
11653 "fild{l|}",
11654 "fisttp{l|}",
11655 "fist{l|}",
11656 "fistp{l|}",
252b5132 11657 "(bad)",
6439fc28 11658 "fld{t||t|}",
252b5132 11659 "(bad)",
6439fc28 11660 "fstp{t||t|}",
252b5132 11661 /* dc */
7c52e0e8
L
11662 "fadd{l|}",
11663 "fmul{l|}",
11664 "fcom{l|}",
11665 "fcomp{l|}",
11666 "fsub{l|}",
11667 "fsubr{l|}",
11668 "fdiv{l|}",
11669 "fdivr{l|}",
252b5132 11670 /* dd */
7c52e0e8
L
11671 "fld{l|}",
11672 "fisttp{ll|}",
11673 "fst{l||}",
11674 "fstp{l|}",
9306ca4a 11675 "frstorIC",
252b5132 11676 "(bad)",
9306ca4a 11677 "fNsaveIC",
252b5132
RH
11678 "fNstsw",
11679 /* de */
11680 "fiadd",
11681 "fimul",
11682 "ficom",
11683 "ficomp",
11684 "fisub",
11685 "fisubr",
11686 "fidiv",
11687 "fidivr",
11688 /* df */
11689 "fild",
ca164297 11690 "fisttp",
252b5132
RH
11691 "fist",
11692 "fistp",
11693 "fbld",
7c52e0e8 11694 "fild{ll|}",
252b5132 11695 "fbstp",
7c52e0e8 11696 "fistp{ll|}",
1d9f512f
AM
11697};
11698
11699static const unsigned char float_mem_mode[] = {
11700 /* d8 */
11701 d_mode,
11702 d_mode,
11703 d_mode,
11704 d_mode,
11705 d_mode,
11706 d_mode,
11707 d_mode,
11708 d_mode,
11709 /* d9 */
11710 d_mode,
11711 0,
11712 d_mode,
11713 d_mode,
11714 0,
11715 w_mode,
11716 0,
11717 w_mode,
11718 /* da */
11719 d_mode,
11720 d_mode,
11721 d_mode,
11722 d_mode,
11723 d_mode,
11724 d_mode,
11725 d_mode,
11726 d_mode,
11727 /* db */
11728 d_mode,
11729 d_mode,
11730 d_mode,
11731 d_mode,
11732 0,
9306ca4a 11733 t_mode,
1d9f512f 11734 0,
9306ca4a 11735 t_mode,
1d9f512f
AM
11736 /* dc */
11737 q_mode,
11738 q_mode,
11739 q_mode,
11740 q_mode,
11741 q_mode,
11742 q_mode,
11743 q_mode,
11744 q_mode,
11745 /* dd */
11746 q_mode,
11747 q_mode,
11748 q_mode,
11749 q_mode,
11750 0,
11751 0,
11752 0,
11753 w_mode,
11754 /* de */
11755 w_mode,
11756 w_mode,
11757 w_mode,
11758 w_mode,
11759 w_mode,
11760 w_mode,
11761 w_mode,
11762 w_mode,
11763 /* df */
11764 w_mode,
11765 w_mode,
11766 w_mode,
11767 w_mode,
9306ca4a 11768 t_mode,
1d9f512f 11769 q_mode,
9306ca4a 11770 t_mode,
1d9f512f 11771 q_mode
252b5132
RH
11772};
11773
ce518a5f
L
11774#define ST { OP_ST, 0 }
11775#define STi { OP_STi, 0 }
252b5132 11776
4efba78c
L
11777#define FGRPd9_2 NULL, { { NULL, 0 } }
11778#define FGRPd9_4 NULL, { { NULL, 1 } }
11779#define FGRPd9_5 NULL, { { NULL, 2 } }
11780#define FGRPd9_6 NULL, { { NULL, 3 } }
11781#define FGRPd9_7 NULL, { { NULL, 4 } }
11782#define FGRPda_5 NULL, { { NULL, 5 } }
11783#define FGRPdb_4 NULL, { { NULL, 6 } }
11784#define FGRPde_3 NULL, { { NULL, 7 } }
11785#define FGRPdf_4 NULL, { { NULL, 8 } }
252b5132 11786
2da11e11 11787static const struct dis386 float_reg[][8] = {
252b5132
RH
11788 /* d8 */
11789 {
ce518a5f
L
11790 { "fadd", { ST, STi } },
11791 { "fmul", { ST, STi } },
11792 { "fcom", { STi } },
11793 { "fcomp", { STi } },
11794 { "fsub", { ST, STi } },
11795 { "fsubr", { ST, STi } },
11796 { "fdiv", { ST, STi } },
11797 { "fdivr", { ST, STi } },
252b5132
RH
11798 },
11799 /* d9 */
11800 {
ce518a5f
L
11801 { "fld", { STi } },
11802 { "fxch", { STi } },
252b5132 11803 { FGRPd9_2 },
592d1631 11804 { Bad_Opcode },
252b5132
RH
11805 { FGRPd9_4 },
11806 { FGRPd9_5 },
11807 { FGRPd9_6 },
11808 { FGRPd9_7 },
11809 },
11810 /* da */
11811 {
ce518a5f
L
11812 { "fcmovb", { ST, STi } },
11813 { "fcmove", { ST, STi } },
11814 { "fcmovbe",{ ST, STi } },
11815 { "fcmovu", { ST, STi } },
592d1631 11816 { Bad_Opcode },
252b5132 11817 { FGRPda_5 },
592d1631
L
11818 { Bad_Opcode },
11819 { Bad_Opcode },
252b5132
RH
11820 },
11821 /* db */
11822 {
ce518a5f
L
11823 { "fcmovnb",{ ST, STi } },
11824 { "fcmovne",{ ST, STi } },
11825 { "fcmovnbe",{ ST, STi } },
11826 { "fcmovnu",{ ST, STi } },
252b5132 11827 { FGRPdb_4 },
ce518a5f
L
11828 { "fucomi", { ST, STi } },
11829 { "fcomi", { ST, STi } },
592d1631 11830 { Bad_Opcode },
252b5132
RH
11831 },
11832 /* dc */
11833 {
ce518a5f
L
11834 { "fadd", { STi, ST } },
11835 { "fmul", { STi, ST } },
592d1631
L
11836 { Bad_Opcode },
11837 { Bad_Opcode },
9d141669
L
11838 { "fsub!M", { STi, ST } },
11839 { "fsubM", { STi, ST } },
11840 { "fdiv!M", { STi, ST } },
11841 { "fdivM", { STi, ST } },
252b5132
RH
11842 },
11843 /* dd */
11844 {
ce518a5f 11845 { "ffree", { STi } },
592d1631 11846 { Bad_Opcode },
ce518a5f
L
11847 { "fst", { STi } },
11848 { "fstp", { STi } },
11849 { "fucom", { STi } },
11850 { "fucomp", { STi } },
592d1631
L
11851 { Bad_Opcode },
11852 { Bad_Opcode },
252b5132
RH
11853 },
11854 /* de */
11855 {
ce518a5f
L
11856 { "faddp", { STi, ST } },
11857 { "fmulp", { STi, ST } },
592d1631 11858 { Bad_Opcode },
252b5132 11859 { FGRPde_3 },
9d141669
L
11860 { "fsub!Mp", { STi, ST } },
11861 { "fsubMp", { STi, ST } },
11862 { "fdiv!Mp", { STi, ST } },
11863 { "fdivMp", { STi, ST } },
252b5132
RH
11864 },
11865 /* df */
11866 {
ce518a5f 11867 { "ffreep", { STi } },
592d1631
L
11868 { Bad_Opcode },
11869 { Bad_Opcode },
11870 { Bad_Opcode },
252b5132 11871 { FGRPdf_4 },
ce518a5f
L
11872 { "fucomip", { ST, STi } },
11873 { "fcomip", { ST, STi } },
592d1631 11874 { Bad_Opcode },
252b5132
RH
11875 },
11876};
11877
252b5132
RH
11878static char *fgrps[][8] = {
11879 /* d9_2 0 */
11880 {
11881 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
11882 },
11883
11884 /* d9_4 1 */
11885 {
11886 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
11887 },
11888
11889 /* d9_5 2 */
11890 {
11891 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
11892 },
11893
11894 /* d9_6 3 */
11895 {
11896 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
11897 },
11898
11899 /* d9_7 4 */
11900 {
11901 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
11902 },
11903
11904 /* da_5 5 */
11905 {
11906 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
11907 },
11908
11909 /* db_4 6 */
11910 {
309d3373
JB
11911 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
11912 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
252b5132
RH
11913 },
11914
11915 /* de_3 7 */
11916 {
11917 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
11918 },
11919
11920 /* df_4 8 */
11921 {
11922 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
11923 },
11924};
11925
b6169b20
L
11926static void
11927swap_operand (void)
11928{
11929 mnemonicendp[0] = '.';
11930 mnemonicendp[1] = 's';
11931 mnemonicendp += 2;
11932}
11933
b844680a
L
11934static void
11935OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
11936 int sizeflag ATTRIBUTE_UNUSED)
11937{
11938 /* Skip mod/rm byte. */
11939 MODRM_CHECK;
11940 codep++;
11941}
11942
252b5132 11943static void
26ca5450 11944dofloat (int sizeflag)
252b5132 11945{
2da11e11 11946 const struct dis386 *dp;
252b5132
RH
11947 unsigned char floatop;
11948
11949 floatop = codep[-1];
11950
7967e09e 11951 if (modrm.mod != 3)
252b5132 11952 {
7967e09e 11953 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
11954
11955 putop (float_mem[fp_indx], sizeflag);
ce518a5f 11956 obufp = op_out[0];
6e50d963 11957 op_ad = 2;
1d9f512f 11958 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
11959 return;
11960 }
6608db57 11961 /* Skip mod/rm byte. */
4bba6815 11962 MODRM_CHECK;
252b5132
RH
11963 codep++;
11964
7967e09e 11965 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
11966 if (dp->name == NULL)
11967 {
7967e09e 11968 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 11969
6608db57 11970 /* Instruction fnstsw is only one with strange arg. */
252b5132 11971 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 11972 strcpy (op_out[0], names16[0]);
252b5132
RH
11973 }
11974 else
11975 {
11976 putop (dp->name, sizeflag);
11977
ce518a5f 11978 obufp = op_out[0];
6e50d963 11979 op_ad = 2;
ce518a5f
L
11980 if (dp->op[0].rtn)
11981 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 11982
ce518a5f 11983 obufp = op_out[1];
6e50d963 11984 op_ad = 1;
ce518a5f
L
11985 if (dp->op[1].rtn)
11986 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
11987 }
11988}
11989
252b5132 11990static void
26ca5450 11991OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 11992{
422673a9 11993 oappend ("%st" + intel_syntax);
252b5132
RH
11994}
11995
252b5132 11996static void
26ca5450 11997OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 11998{
7967e09e 11999 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
d708bcba 12000 oappend (scratchbuf + intel_syntax);
252b5132
RH
12001}
12002
6608db57 12003/* Capital letters in template are macros. */
6439fc28 12004static int
d3ce72d0 12005putop (const char *in_template, int sizeflag)
252b5132 12006{
2da11e11 12007 const char *p;
9306ca4a 12008 int alt = 0;
9d141669 12009 int cond = 1;
98b528ac
L
12010 unsigned int l = 0, len = 1;
12011 char last[4];
12012
12013#define SAVE_LAST(c) \
12014 if (l < len && l < sizeof (last)) \
12015 last[l++] = c; \
12016 else \
12017 abort ();
252b5132 12018
d3ce72d0 12019 for (p = in_template; *p; p++)
252b5132
RH
12020 {
12021 switch (*p)
12022 {
12023 default:
12024 *obufp++ = *p;
12025 break;
98b528ac
L
12026 case '%':
12027 len++;
12028 break;
9d141669
L
12029 case '!':
12030 cond = 0;
12031 break;
6439fc28
AM
12032 case '{':
12033 alt = 0;
12034 if (intel_syntax)
6439fc28
AM
12035 {
12036 while (*++p != '|')
7c52e0e8
L
12037 if (*p == '}' || *p == '\0')
12038 abort ();
6439fc28 12039 }
9306ca4a
JB
12040 /* Fall through. */
12041 case 'I':
12042 alt = 1;
12043 continue;
6439fc28
AM
12044 case '|':
12045 while (*++p != '}')
12046 {
12047 if (*p == '\0')
12048 abort ();
12049 }
12050 break;
12051 case '}':
12052 break;
252b5132 12053 case 'A':
db6eb5be
AM
12054 if (intel_syntax)
12055 break;
7967e09e 12056 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
12057 *obufp++ = 'b';
12058 break;
12059 case 'B':
4b06377f
L
12060 if (l == 0 && len == 1)
12061 {
12062case_B:
12063 if (intel_syntax)
12064 break;
12065 if (sizeflag & SUFFIX_ALWAYS)
12066 *obufp++ = 'b';
12067 }
12068 else
12069 {
12070 if (l != 1
12071 || len != 2
12072 || last[0] != 'L')
12073 {
12074 SAVE_LAST (*p);
12075 break;
12076 }
12077
12078 if (address_mode == mode_64bit
12079 && !(prefixes & PREFIX_ADDR))
12080 {
12081 *obufp++ = 'a';
12082 *obufp++ = 'b';
12083 *obufp++ = 's';
12084 }
12085
12086 goto case_B;
12087 }
252b5132 12088 break;
9306ca4a
JB
12089 case 'C':
12090 if (intel_syntax && !alt)
12091 break;
12092 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
12093 {
12094 if (sizeflag & DFLAG)
12095 *obufp++ = intel_syntax ? 'd' : 'l';
12096 else
12097 *obufp++ = intel_syntax ? 'w' : 's';
12098 used_prefixes |= (prefixes & PREFIX_DATA);
12099 }
12100 break;
ed7841b3
JB
12101 case 'D':
12102 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
12103 break;
161a04f6 12104 USED_REX (REX_W);
7967e09e 12105 if (modrm.mod == 3)
ed7841b3 12106 {
161a04f6 12107 if (rex & REX_W)
ed7841b3 12108 *obufp++ = 'q';
ed7841b3 12109 else
f16cd0d5
L
12110 {
12111 if (sizeflag & DFLAG)
12112 *obufp++ = intel_syntax ? 'd' : 'l';
12113 else
12114 *obufp++ = 'w';
12115 used_prefixes |= (prefixes & PREFIX_DATA);
12116 }
ed7841b3
JB
12117 }
12118 else
12119 *obufp++ = 'w';
12120 break;
252b5132 12121 case 'E': /* For jcxz/jecxz */
cb712a9e 12122 if (address_mode == mode_64bit)
c1a64871
JH
12123 {
12124 if (sizeflag & AFLAG)
12125 *obufp++ = 'r';
12126 else
12127 *obufp++ = 'e';
12128 }
12129 else
12130 if (sizeflag & AFLAG)
12131 *obufp++ = 'e';
3ffd33cf
AM
12132 used_prefixes |= (prefixes & PREFIX_ADDR);
12133 break;
12134 case 'F':
db6eb5be
AM
12135 if (intel_syntax)
12136 break;
e396998b 12137 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
12138 {
12139 if (sizeflag & AFLAG)
cb712a9e 12140 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 12141 else
cb712a9e 12142 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
12143 used_prefixes |= (prefixes & PREFIX_ADDR);
12144 }
252b5132 12145 break;
52fd6d94
JB
12146 case 'G':
12147 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
12148 break;
161a04f6 12149 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
12150 *obufp++ = 'l';
12151 else
12152 *obufp++ = 'w';
161a04f6 12153 if (!(rex & REX_W))
52fd6d94
JB
12154 used_prefixes |= (prefixes & PREFIX_DATA);
12155 break;
5dd0794d 12156 case 'H':
db6eb5be
AM
12157 if (intel_syntax)
12158 break;
5dd0794d
AM
12159 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
12160 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
12161 {
12162 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
12163 *obufp++ = ',';
12164 *obufp++ = 'p';
12165 if (prefixes & PREFIX_DS)
12166 *obufp++ = 't';
12167 else
12168 *obufp++ = 'n';
12169 }
12170 break;
9306ca4a
JB
12171 case 'J':
12172 if (intel_syntax)
12173 break;
12174 *obufp++ = 'l';
12175 break;
42903f7f
L
12176 case 'K':
12177 USED_REX (REX_W);
12178 if (rex & REX_W)
12179 *obufp++ = 'q';
12180 else
12181 *obufp++ = 'd';
12182 break;
6dd5059a
L
12183 case 'Z':
12184 if (intel_syntax)
12185 break;
12186 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
12187 {
12188 *obufp++ = 'q';
12189 break;
12190 }
12191 /* Fall through. */
98b528ac 12192 goto case_L;
252b5132 12193 case 'L':
98b528ac
L
12194 if (l != 0 || len != 1)
12195 {
12196 SAVE_LAST (*p);
12197 break;
12198 }
12199case_L:
db6eb5be
AM
12200 if (intel_syntax)
12201 break;
252b5132
RH
12202 if (sizeflag & SUFFIX_ALWAYS)
12203 *obufp++ = 'l';
252b5132 12204 break;
9d141669
L
12205 case 'M':
12206 if (intel_mnemonic != cond)
12207 *obufp++ = 'r';
12208 break;
252b5132
RH
12209 case 'N':
12210 if ((prefixes & PREFIX_FWAIT) == 0)
12211 *obufp++ = 'n';
7d421014
ILT
12212 else
12213 used_prefixes |= PREFIX_FWAIT;
252b5132 12214 break;
52b15da3 12215 case 'O':
161a04f6
L
12216 USED_REX (REX_W);
12217 if (rex & REX_W)
6439fc28 12218 *obufp++ = 'o';
a35ca55a
JB
12219 else if (intel_syntax && (sizeflag & DFLAG))
12220 *obufp++ = 'q';
52b15da3
JH
12221 else
12222 *obufp++ = 'd';
161a04f6 12223 if (!(rex & REX_W))
a35ca55a 12224 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 12225 break;
6439fc28 12226 case 'T':
db6eb5be
AM
12227 if (intel_syntax)
12228 break;
cb712a9e 12229 if (address_mode == mode_64bit && (sizeflag & DFLAG))
6439fc28
AM
12230 {
12231 *obufp++ = 'q';
12232 break;
12233 }
6608db57 12234 /* Fall through. */
252b5132 12235 case 'P':
db6eb5be
AM
12236 if (intel_syntax)
12237 break;
252b5132 12238 if ((prefixes & PREFIX_DATA)
161a04f6 12239 || (rex & REX_W)
e396998b 12240 || (sizeflag & SUFFIX_ALWAYS))
252b5132 12241 {
161a04f6
L
12242 USED_REX (REX_W);
12243 if (rex & REX_W)
52b15da3 12244 *obufp++ = 'q';
c2419411 12245 else
52b15da3
JH
12246 {
12247 if (sizeflag & DFLAG)
12248 *obufp++ = 'l';
12249 else
12250 *obufp++ = 'w';
f16cd0d5 12251 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 12252 }
252b5132
RH
12253 }
12254 break;
6439fc28 12255 case 'U':
db6eb5be
AM
12256 if (intel_syntax)
12257 break;
cb712a9e 12258 if (address_mode == mode_64bit && (sizeflag & DFLAG))
6439fc28 12259 {
7967e09e 12260 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 12261 *obufp++ = 'q';
6439fc28
AM
12262 break;
12263 }
6608db57 12264 /* Fall through. */
98b528ac 12265 goto case_Q;
252b5132 12266 case 'Q':
98b528ac 12267 if (l == 0 && len == 1)
252b5132 12268 {
98b528ac
L
12269case_Q:
12270 if (intel_syntax && !alt)
12271 break;
12272 USED_REX (REX_W);
12273 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 12274 {
98b528ac
L
12275 if (rex & REX_W)
12276 *obufp++ = 'q';
52b15da3 12277 else
98b528ac
L
12278 {
12279 if (sizeflag & DFLAG)
12280 *obufp++ = intel_syntax ? 'd' : 'l';
12281 else
12282 *obufp++ = 'w';
f16cd0d5 12283 used_prefixes |= (prefixes & PREFIX_DATA);
98b528ac 12284 }
52b15da3 12285 }
98b528ac
L
12286 }
12287 else
12288 {
12289 if (l != 1 || len != 2 || last[0] != 'L')
12290 {
12291 SAVE_LAST (*p);
12292 break;
12293 }
12294 if (intel_syntax
12295 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
12296 break;
12297 if ((rex & REX_W))
12298 {
12299 USED_REX (REX_W);
12300 *obufp++ = 'q';
12301 }
12302 else
12303 *obufp++ = 'l';
252b5132
RH
12304 }
12305 break;
12306 case 'R':
161a04f6
L
12307 USED_REX (REX_W);
12308 if (rex & REX_W)
a35ca55a
JB
12309 *obufp++ = 'q';
12310 else if (sizeflag & DFLAG)
c608c12e 12311 {
a35ca55a 12312 if (intel_syntax)
c608c12e 12313 *obufp++ = 'd';
c608c12e 12314 else
a35ca55a 12315 *obufp++ = 'l';
c608c12e 12316 }
252b5132 12317 else
a35ca55a
JB
12318 *obufp++ = 'w';
12319 if (intel_syntax && !p[1]
161a04f6 12320 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 12321 *obufp++ = 'e';
161a04f6 12322 if (!(rex & REX_W))
52b15da3 12323 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 12324 break;
1a114b12 12325 case 'V':
4b06377f 12326 if (l == 0 && len == 1)
1a114b12 12327 {
4b06377f
L
12328 if (intel_syntax)
12329 break;
12330 if (address_mode == mode_64bit && (sizeflag & DFLAG))
12331 {
12332 if (sizeflag & SUFFIX_ALWAYS)
12333 *obufp++ = 'q';
12334 break;
12335 }
12336 }
12337 else
12338 {
12339 if (l != 1
12340 || len != 2
12341 || last[0] != 'L')
12342 {
12343 SAVE_LAST (*p);
12344 break;
12345 }
12346
12347 if (rex & REX_W)
12348 {
12349 *obufp++ = 'a';
12350 *obufp++ = 'b';
12351 *obufp++ = 's';
12352 }
1a114b12
JB
12353 }
12354 /* Fall through. */
4b06377f 12355 goto case_S;
252b5132 12356 case 'S':
4b06377f 12357 if (l == 0 && len == 1)
252b5132 12358 {
4b06377f
L
12359case_S:
12360 if (intel_syntax)
12361 break;
12362 if (sizeflag & SUFFIX_ALWAYS)
52b15da3 12363 {
4b06377f
L
12364 if (rex & REX_W)
12365 *obufp++ = 'q';
52b15da3 12366 else
4b06377f
L
12367 {
12368 if (sizeflag & DFLAG)
12369 *obufp++ = 'l';
12370 else
12371 *obufp++ = 'w';
12372 used_prefixes |= (prefixes & PREFIX_DATA);
12373 }
12374 }
12375 }
12376 else
12377 {
12378 if (l != 1
12379 || len != 2
12380 || last[0] != 'L')
12381 {
12382 SAVE_LAST (*p);
12383 break;
52b15da3 12384 }
4b06377f
L
12385
12386 if (address_mode == mode_64bit
12387 && !(prefixes & PREFIX_ADDR))
12388 {
12389 *obufp++ = 'a';
12390 *obufp++ = 'b';
12391 *obufp++ = 's';
12392 }
12393
12394 goto case_S;
252b5132 12395 }
252b5132 12396 break;
041bd2e0 12397 case 'X':
c0f3af97
L
12398 if (l != 0 || len != 1)
12399 {
12400 SAVE_LAST (*p);
12401 break;
12402 }
12403 if (need_vex && vex.prefix)
12404 {
12405 if (vex.prefix == DATA_PREFIX_OPCODE)
12406 *obufp++ = 'd';
12407 else
12408 *obufp++ = 's';
12409 }
041bd2e0 12410 else
f16cd0d5
L
12411 {
12412 if (prefixes & PREFIX_DATA)
12413 *obufp++ = 'd';
12414 else
12415 *obufp++ = 's';
12416 used_prefixes |= (prefixes & PREFIX_DATA);
12417 }
041bd2e0 12418 break;
76f227a5 12419 case 'Y':
c0f3af97 12420 if (l == 0 && len == 1)
76f227a5 12421 {
c0f3af97
L
12422 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
12423 break;
12424 if (rex & REX_W)
12425 {
12426 USED_REX (REX_W);
12427 *obufp++ = 'q';
12428 }
12429 break;
12430 }
12431 else
12432 {
12433 if (l != 1 || len != 2 || last[0] != 'X')
12434 {
12435 SAVE_LAST (*p);
12436 break;
12437 }
12438 if (!need_vex)
12439 abort ();
12440 if (intel_syntax
12441 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
12442 break;
12443 switch (vex.length)
12444 {
12445 case 128:
12446 *obufp++ = 'x';
12447 break;
12448 case 256:
12449 *obufp++ = 'y';
12450 break;
12451 default:
12452 abort ();
12453 }
76f227a5
JH
12454 }
12455 break;
252b5132 12456 case 'W':
0bfee649 12457 if (l == 0 && len == 1)
a35ca55a 12458 {
0bfee649
L
12459 /* operand size flag for cwtl, cbtw */
12460 USED_REX (REX_W);
12461 if (rex & REX_W)
12462 {
12463 if (intel_syntax)
12464 *obufp++ = 'd';
12465 else
12466 *obufp++ = 'l';
12467 }
12468 else if (sizeflag & DFLAG)
12469 *obufp++ = 'w';
a35ca55a 12470 else
0bfee649
L
12471 *obufp++ = 'b';
12472 if (!(rex & REX_W))
12473 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 12474 }
252b5132 12475 else
0bfee649
L
12476 {
12477 if (l != 1 || len != 2 || last[0] != 'X')
12478 {
12479 SAVE_LAST (*p);
12480 break;
12481 }
12482 if (!need_vex)
12483 abort ();
12484 *obufp++ = vex.w ? 'd': 's';
12485 }
252b5132
RH
12486 break;
12487 }
9306ca4a 12488 alt = 0;
252b5132
RH
12489 }
12490 *obufp = 0;
ea397f5b 12491 mnemonicendp = obufp;
6439fc28 12492 return 0;
252b5132
RH
12493}
12494
12495static void
26ca5450 12496oappend (const char *s)
252b5132 12497{
ea397f5b 12498 obufp = stpcpy (obufp, s);
252b5132
RH
12499}
12500
12501static void
26ca5450 12502append_seg (void)
252b5132
RH
12503{
12504 if (prefixes & PREFIX_CS)
7d421014 12505 {
7d421014 12506 used_prefixes |= PREFIX_CS;
d708bcba 12507 oappend ("%cs:" + intel_syntax);
7d421014 12508 }
252b5132 12509 if (prefixes & PREFIX_DS)
7d421014 12510 {
7d421014 12511 used_prefixes |= PREFIX_DS;
d708bcba 12512 oappend ("%ds:" + intel_syntax);
7d421014 12513 }
252b5132 12514 if (prefixes & PREFIX_SS)
7d421014 12515 {
7d421014 12516 used_prefixes |= PREFIX_SS;
d708bcba 12517 oappend ("%ss:" + intel_syntax);
7d421014 12518 }
252b5132 12519 if (prefixes & PREFIX_ES)
7d421014 12520 {
7d421014 12521 used_prefixes |= PREFIX_ES;
d708bcba 12522 oappend ("%es:" + intel_syntax);
7d421014 12523 }
252b5132 12524 if (prefixes & PREFIX_FS)
7d421014 12525 {
7d421014 12526 used_prefixes |= PREFIX_FS;
d708bcba 12527 oappend ("%fs:" + intel_syntax);
7d421014 12528 }
252b5132 12529 if (prefixes & PREFIX_GS)
7d421014 12530 {
7d421014 12531 used_prefixes |= PREFIX_GS;
d708bcba 12532 oappend ("%gs:" + intel_syntax);
7d421014 12533 }
252b5132
RH
12534}
12535
12536static void
26ca5450 12537OP_indirE (int bytemode, int sizeflag)
252b5132
RH
12538{
12539 if (!intel_syntax)
12540 oappend ("*");
12541 OP_E (bytemode, sizeflag);
12542}
12543
52b15da3 12544static void
26ca5450 12545print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 12546{
cb712a9e 12547 if (address_mode == mode_64bit)
52b15da3
JH
12548 {
12549 if (hex)
12550 {
12551 char tmp[30];
12552 int i;
12553 buf[0] = '0';
12554 buf[1] = 'x';
12555 sprintf_vma (tmp, disp);
6608db57 12556 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
12557 strcpy (buf + 2, tmp + i);
12558 }
12559 else
12560 {
12561 bfd_signed_vma v = disp;
12562 char tmp[30];
12563 int i;
12564 if (v < 0)
12565 {
12566 *(buf++) = '-';
12567 v = -disp;
6608db57 12568 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
12569 if (v < 0)
12570 {
12571 strcpy (buf, "9223372036854775808");
12572 return;
12573 }
12574 }
12575 if (!v)
12576 {
12577 strcpy (buf, "0");
12578 return;
12579 }
12580
12581 i = 0;
12582 tmp[29] = 0;
12583 while (v)
12584 {
6608db57 12585 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
12586 v /= 10;
12587 i++;
12588 }
12589 strcpy (buf, tmp + 29 - i);
12590 }
12591 }
12592 else
12593 {
12594 if (hex)
12595 sprintf (buf, "0x%x", (unsigned int) disp);
12596 else
12597 sprintf (buf, "%d", (int) disp);
12598 }
12599}
12600
5d669648
L
12601/* Put DISP in BUF as signed hex number. */
12602
12603static void
12604print_displacement (char *buf, bfd_vma disp)
12605{
12606 bfd_signed_vma val = disp;
12607 char tmp[30];
12608 int i, j = 0;
12609
12610 if (val < 0)
12611 {
12612 buf[j++] = '-';
12613 val = -disp;
12614
12615 /* Check for possible overflow. */
12616 if (val < 0)
12617 {
12618 switch (address_mode)
12619 {
12620 case mode_64bit:
12621 strcpy (buf + j, "0x8000000000000000");
12622 break;
12623 case mode_32bit:
12624 strcpy (buf + j, "0x80000000");
12625 break;
12626 case mode_16bit:
12627 strcpy (buf + j, "0x8000");
12628 break;
12629 }
12630 return;
12631 }
12632 }
12633
12634 buf[j++] = '0';
12635 buf[j++] = 'x';
12636
0af1713e 12637 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
12638 for (i = 0; tmp[i] == '0'; i++)
12639 continue;
12640 if (tmp[i] == '\0')
12641 i--;
12642 strcpy (buf + j, tmp + i);
12643}
12644
3f31e633
JB
12645static void
12646intel_operand_size (int bytemode, int sizeflag)
12647{
12648 switch (bytemode)
12649 {
12650 case b_mode:
b6169b20 12651 case b_swap_mode:
42903f7f 12652 case dqb_mode:
3f31e633
JB
12653 oappend ("BYTE PTR ");
12654 break;
12655 case w_mode:
12656 case dqw_mode:
12657 oappend ("WORD PTR ");
12658 break;
1a114b12 12659 case stack_v_mode:
cb712a9e 12660 if (address_mode == mode_64bit && (sizeflag & DFLAG))
3f31e633
JB
12661 {
12662 oappend ("QWORD PTR ");
3f31e633
JB
12663 break;
12664 }
12665 /* FALLTHRU */
12666 case v_mode:
b6169b20 12667 case v_swap_mode:
3f31e633 12668 case dq_mode:
161a04f6
L
12669 USED_REX (REX_W);
12670 if (rex & REX_W)
3f31e633 12671 oappend ("QWORD PTR ");
3f31e633 12672 else
f16cd0d5
L
12673 {
12674 if ((sizeflag & DFLAG) || bytemode == dq_mode)
12675 oappend ("DWORD PTR ");
12676 else
12677 oappend ("WORD PTR ");
12678 used_prefixes |= (prefixes & PREFIX_DATA);
12679 }
3f31e633 12680 break;
52fd6d94 12681 case z_mode:
161a04f6 12682 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
12683 *obufp++ = 'D';
12684 oappend ("WORD PTR ");
161a04f6 12685 if (!(rex & REX_W))
52fd6d94
JB
12686 used_prefixes |= (prefixes & PREFIX_DATA);
12687 break;
34b772a6
JB
12688 case a_mode:
12689 if (sizeflag & DFLAG)
12690 oappend ("QWORD PTR ");
12691 else
12692 oappend ("DWORD PTR ");
12693 used_prefixes |= (prefixes & PREFIX_DATA);
12694 break;
3f31e633 12695 case d_mode:
539f890d
L
12696 case d_scalar_mode:
12697 case d_scalar_swap_mode:
fa99fab2 12698 case d_swap_mode:
42903f7f 12699 case dqd_mode:
3f31e633
JB
12700 oappend ("DWORD PTR ");
12701 break;
12702 case q_mode:
539f890d
L
12703 case q_scalar_mode:
12704 case q_scalar_swap_mode:
b6169b20 12705 case q_swap_mode:
3f31e633
JB
12706 oappend ("QWORD PTR ");
12707 break;
12708 case m_mode:
cb712a9e 12709 if (address_mode == mode_64bit)
3f31e633
JB
12710 oappend ("QWORD PTR ");
12711 else
12712 oappend ("DWORD PTR ");
12713 break;
12714 case f_mode:
12715 if (sizeflag & DFLAG)
12716 oappend ("FWORD PTR ");
12717 else
12718 oappend ("DWORD PTR ");
12719 used_prefixes |= (prefixes & PREFIX_DATA);
12720 break;
12721 case t_mode:
12722 oappend ("TBYTE PTR ");
12723 break;
12724 case x_mode:
b6169b20 12725 case x_swap_mode:
c0f3af97
L
12726 if (need_vex)
12727 {
12728 switch (vex.length)
12729 {
12730 case 128:
12731 oappend ("XMMWORD PTR ");
12732 break;
12733 case 256:
12734 oappend ("YMMWORD PTR ");
12735 break;
12736 default:
12737 abort ();
12738 }
12739 }
12740 else
12741 oappend ("XMMWORD PTR ");
12742 break;
12743 case xmm_mode:
3f31e633
JB
12744 oappend ("XMMWORD PTR ");
12745 break;
c0f3af97
L
12746 case xmmq_mode:
12747 if (!need_vex)
12748 abort ();
12749
12750 switch (vex.length)
12751 {
12752 case 128:
12753 oappend ("QWORD PTR ");
12754 break;
12755 case 256:
12756 oappend ("XMMWORD PTR ");
12757 break;
12758 default:
12759 abort ();
12760 }
12761 break;
12762 case ymmq_mode:
12763 if (!need_vex)
12764 abort ();
12765
12766 switch (vex.length)
12767 {
12768 case 128:
12769 oappend ("QWORD PTR ");
12770 break;
12771 case 256:
12772 oappend ("YMMWORD PTR ");
12773 break;
12774 default:
12775 abort ();
12776 }
12777 break;
fb9c77c7
L
12778 case o_mode:
12779 oappend ("OWORD PTR ");
12780 break;
0bfee649 12781 case vex_w_dq_mode:
1c480963 12782 case vex_scalar_w_dq_mode:
0bfee649
L
12783 if (!need_vex)
12784 abort ();
12785
12786 if (vex.w)
12787 oappend ("QWORD PTR ");
12788 else
12789 oappend ("DWORD PTR ");
12790 break;
3f31e633
JB
12791 default:
12792 break;
12793 }
12794}
12795
252b5132 12796static void
c0f3af97 12797OP_E_register (int bytemode, int sizeflag)
252b5132 12798{
c0f3af97
L
12799 int reg = modrm.rm;
12800 const char **names;
252b5132 12801
c0f3af97
L
12802 USED_REX (REX_B);
12803 if ((rex & REX_B))
12804 reg += 8;
252b5132 12805
b6169b20
L
12806 if ((sizeflag & SUFFIX_ALWAYS)
12807 && (bytemode == b_swap_mode || bytemode == v_swap_mode))
12808 swap_operand ();
12809
c0f3af97 12810 switch (bytemode)
252b5132 12811 {
c0f3af97 12812 case b_mode:
b6169b20 12813 case b_swap_mode:
c0f3af97
L
12814 USED_REX (0);
12815 if (rex)
12816 names = names8rex;
12817 else
12818 names = names8;
12819 break;
12820 case w_mode:
12821 names = names16;
12822 break;
12823 case d_mode:
12824 names = names32;
12825 break;
12826 case q_mode:
12827 names = names64;
12828 break;
12829 case m_mode:
12830 names = address_mode == mode_64bit ? names64 : names32;
12831 break;
12832 case stack_v_mode:
12833 if (address_mode == mode_64bit && (sizeflag & DFLAG))
252b5132 12834 {
c0f3af97 12835 names = names64;
252b5132 12836 break;
252b5132 12837 }
c0f3af97
L
12838 bytemode = v_mode;
12839 /* FALLTHRU */
12840 case v_mode:
b6169b20 12841 case v_swap_mode:
c0f3af97
L
12842 case dq_mode:
12843 case dqb_mode:
12844 case dqd_mode:
12845 case dqw_mode:
12846 USED_REX (REX_W);
12847 if (rex & REX_W)
12848 names = names64;
c0f3af97 12849 else
f16cd0d5
L
12850 {
12851 if ((sizeflag & DFLAG)
12852 || (bytemode != v_mode
12853 && bytemode != v_swap_mode))
12854 names = names32;
12855 else
12856 names = names16;
12857 used_prefixes |= (prefixes & PREFIX_DATA);
12858 }
c0f3af97
L
12859 break;
12860 case 0:
12861 return;
12862 default:
12863 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
12864 return;
12865 }
c0f3af97
L
12866 oappend (names[reg]);
12867}
12868
12869static void
c1e679ec 12870OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
12871{
12872 bfd_vma disp = 0;
12873 int add = (rex & REX_B) ? 8 : 0;
12874 int riprel = 0;
252b5132 12875
c0f3af97 12876 USED_REX (REX_B);
3f31e633
JB
12877 if (intel_syntax)
12878 intel_operand_size (bytemode, sizeflag);
252b5132
RH
12879 append_seg ();
12880
5d669648 12881 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 12882 {
5d669648
L
12883 /* 32/64 bit address mode */
12884 int havedisp;
252b5132
RH
12885 int havesib;
12886 int havebase;
0f7da397 12887 int haveindex;
20afcfb7 12888 int needindex;
82c18208 12889 int base, rbase;
91d6fa6a 12890 int vindex = 0;
252b5132
RH
12891 int scale = 0;
12892
12893 havesib = 0;
12894 havebase = 1;
0f7da397 12895 haveindex = 0;
7967e09e 12896 base = modrm.rm;
252b5132
RH
12897
12898 if (base == 4)
12899 {
12900 havesib = 1;
12901 FETCH_DATA (the_info, codep + 1);
91d6fa6a 12902 vindex = (*codep >> 3) & 7;
db51cc60 12903 scale = (*codep >> 6) & 3;
252b5132 12904 base = *codep & 7;
161a04f6
L
12905 USED_REX (REX_X);
12906 if (rex & REX_X)
91d6fa6a
NC
12907 vindex += 8;
12908 haveindex = vindex != 4;
252b5132
RH
12909 codep++;
12910 }
82c18208 12911 rbase = base + add;
252b5132 12912
7967e09e 12913 switch (modrm.mod)
252b5132
RH
12914 {
12915 case 0:
82c18208 12916 if (base == 5)
252b5132
RH
12917 {
12918 havebase = 0;
cb712a9e 12919 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
12920 riprel = 1;
12921 disp = get32s ();
252b5132
RH
12922 }
12923 break;
12924 case 1:
12925 FETCH_DATA (the_info, codep + 1);
12926 disp = *codep++;
12927 if ((disp & 0x80) != 0)
12928 disp -= 0x100;
12929 break;
12930 case 2:
52b15da3 12931 disp = get32s ();
252b5132
RH
12932 break;
12933 }
12934
20afcfb7
L
12935 /* In 32bit mode, we need index register to tell [offset] from
12936 [eiz*1 + offset]. */
12937 needindex = (havesib
12938 && !havebase
12939 && !haveindex
12940 && address_mode == mode_32bit);
12941 havedisp = (havebase
12942 || needindex
12943 || (havesib && (haveindex || scale != 0)));
5d669648 12944
252b5132 12945 if (!intel_syntax)
82c18208 12946 if (modrm.mod != 0 || base == 5)
db6eb5be 12947 {
5d669648
L
12948 if (havedisp || riprel)
12949 print_displacement (scratchbuf, disp);
12950 else
12951 print_operand_value (scratchbuf, 1, disp);
db6eb5be 12952 oappend (scratchbuf);
52b15da3
JH
12953 if (riprel)
12954 {
12955 set_op (disp, 1);
87767711 12956 oappend (sizeflag & AFLAG ? "(%rip)" : "(%eip)");
52b15da3 12957 }
db6eb5be 12958 }
2da11e11 12959
87767711
JB
12960 if (havebase || haveindex || riprel)
12961 used_prefixes |= PREFIX_ADDR;
12962
5d669648 12963 if (havedisp || (intel_syntax && riprel))
252b5132 12964 {
252b5132 12965 *obufp++ = open_char;
52b15da3 12966 if (intel_syntax && riprel)
185b1163
L
12967 {
12968 set_op (disp, 1);
87767711 12969 oappend (sizeflag & AFLAG ? "rip" : "eip");
185b1163 12970 }
db6eb5be 12971 *obufp = '\0';
252b5132 12972 if (havebase)
cb712a9e 12973 oappend (address_mode == mode_64bit && (sizeflag & AFLAG)
82c18208 12974 ? names64[rbase] : names32[rbase]);
252b5132
RH
12975 if (havesib)
12976 {
db51cc60
L
12977 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
12978 print index to tell base + index from base. */
12979 if (scale != 0
20afcfb7 12980 || needindex
db51cc60
L
12981 || haveindex
12982 || (havebase && base != ESP_REG_NUM))
252b5132 12983 {
9306ca4a 12984 if (!intel_syntax || havebase)
db6eb5be 12985 {
9306ca4a
JB
12986 *obufp++ = separator_char;
12987 *obufp = '\0';
db6eb5be 12988 }
db51cc60
L
12989 if (haveindex)
12990 oappend (address_mode == mode_64bit
12991 && (sizeflag & AFLAG)
91d6fa6a 12992 ? names64[vindex] : names32[vindex]);
db51cc60
L
12993 else
12994 oappend (address_mode == mode_64bit
12995 && (sizeflag & AFLAG)
12996 ? index64 : index32);
12997
db6eb5be
AM
12998 *obufp++ = scale_char;
12999 *obufp = '\0';
13000 sprintf (scratchbuf, "%d", 1 << scale);
13001 oappend (scratchbuf);
13002 }
252b5132 13003 }
185b1163 13004 if (intel_syntax
82c18208 13005 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 13006 {
db51cc60 13007 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
13008 {
13009 *obufp++ = '+';
13010 *obufp = '\0';
13011 }
05203043 13012 else if (modrm.mod != 1 && disp != -disp)
3d456fa1
JB
13013 {
13014 *obufp++ = '-';
13015 *obufp = '\0';
13016 disp = - (bfd_signed_vma) disp;
13017 }
13018
db51cc60
L
13019 if (havedisp)
13020 print_displacement (scratchbuf, disp);
13021 else
13022 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
13023 oappend (scratchbuf);
13024 }
252b5132
RH
13025
13026 *obufp++ = close_char;
db6eb5be 13027 *obufp = '\0';
252b5132
RH
13028 }
13029 else if (intel_syntax)
db6eb5be 13030 {
82c18208 13031 if (modrm.mod != 0 || base == 5)
db6eb5be 13032 {
252b5132
RH
13033 if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
13034 | PREFIX_ES | PREFIX_FS | PREFIX_GS))
13035 ;
13036 else
13037 {
d708bcba 13038 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
13039 oappend (":");
13040 }
52b15da3 13041 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
13042 oappend (scratchbuf);
13043 }
13044 }
252b5132
RH
13045 }
13046 else
f16cd0d5
L
13047 {
13048 /* 16 bit address mode */
13049 used_prefixes |= prefixes & PREFIX_ADDR;
7967e09e 13050 switch (modrm.mod)
252b5132
RH
13051 {
13052 case 0:
7967e09e 13053 if (modrm.rm == 6)
252b5132
RH
13054 {
13055 disp = get16 ();
13056 if ((disp & 0x8000) != 0)
13057 disp -= 0x10000;
13058 }
13059 break;
13060 case 1:
13061 FETCH_DATA (the_info, codep + 1);
13062 disp = *codep++;
13063 if ((disp & 0x80) != 0)
13064 disp -= 0x100;
13065 break;
13066 case 2:
13067 disp = get16 ();
13068 if ((disp & 0x8000) != 0)
13069 disp -= 0x10000;
13070 break;
13071 }
13072
13073 if (!intel_syntax)
7967e09e 13074 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 13075 {
5d669648 13076 print_displacement (scratchbuf, disp);
db6eb5be
AM
13077 oappend (scratchbuf);
13078 }
252b5132 13079
7967e09e 13080 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
13081 {
13082 *obufp++ = open_char;
db6eb5be 13083 *obufp = '\0';
7967e09e 13084 oappend (index16[modrm.rm]);
5d669648
L
13085 if (intel_syntax
13086 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 13087 {
5d669648 13088 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
13089 {
13090 *obufp++ = '+';
13091 *obufp = '\0';
13092 }
7967e09e 13093 else if (modrm.mod != 1)
3d456fa1
JB
13094 {
13095 *obufp++ = '-';
13096 *obufp = '\0';
13097 disp = - (bfd_signed_vma) disp;
13098 }
13099
5d669648 13100 print_displacement (scratchbuf, disp);
3d456fa1
JB
13101 oappend (scratchbuf);
13102 }
13103
db6eb5be
AM
13104 *obufp++ = close_char;
13105 *obufp = '\0';
252b5132 13106 }
3d456fa1
JB
13107 else if (intel_syntax)
13108 {
13109 if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
13110 | PREFIX_ES | PREFIX_FS | PREFIX_GS))
13111 ;
13112 else
13113 {
13114 oappend (names_seg[ds_reg - es_reg]);
13115 oappend (":");
13116 }
13117 print_operand_value (scratchbuf, 1, disp & 0xffff);
13118 oappend (scratchbuf);
13119 }
252b5132
RH
13120 }
13121}
13122
c0f3af97 13123static void
8b3f93e7 13124OP_E (int bytemode, int sizeflag)
c0f3af97
L
13125{
13126 /* Skip mod/rm byte. */
13127 MODRM_CHECK;
13128 codep++;
13129
13130 if (modrm.mod == 3)
13131 OP_E_register (bytemode, sizeflag);
13132 else
c1e679ec 13133 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
13134}
13135
252b5132 13136static void
26ca5450 13137OP_G (int bytemode, int sizeflag)
252b5132 13138{
52b15da3 13139 int add = 0;
161a04f6
L
13140 USED_REX (REX_R);
13141 if (rex & REX_R)
52b15da3 13142 add += 8;
252b5132
RH
13143 switch (bytemode)
13144 {
13145 case b_mode:
52b15da3
JH
13146 USED_REX (0);
13147 if (rex)
7967e09e 13148 oappend (names8rex[modrm.reg + add]);
52b15da3 13149 else
7967e09e 13150 oappend (names8[modrm.reg + add]);
252b5132
RH
13151 break;
13152 case w_mode:
7967e09e 13153 oappend (names16[modrm.reg + add]);
252b5132
RH
13154 break;
13155 case d_mode:
7967e09e 13156 oappend (names32[modrm.reg + add]);
52b15da3
JH
13157 break;
13158 case q_mode:
7967e09e 13159 oappend (names64[modrm.reg + add]);
252b5132
RH
13160 break;
13161 case v_mode:
9306ca4a 13162 case dq_mode:
42903f7f
L
13163 case dqb_mode:
13164 case dqd_mode:
9306ca4a 13165 case dqw_mode:
161a04f6
L
13166 USED_REX (REX_W);
13167 if (rex & REX_W)
7967e09e 13168 oappend (names64[modrm.reg + add]);
252b5132 13169 else
f16cd0d5
L
13170 {
13171 if ((sizeflag & DFLAG) || bytemode != v_mode)
13172 oappend (names32[modrm.reg + add]);
13173 else
13174 oappend (names16[modrm.reg + add]);
13175 used_prefixes |= (prefixes & PREFIX_DATA);
13176 }
252b5132 13177 break;
90700ea2 13178 case m_mode:
cb712a9e 13179 if (address_mode == mode_64bit)
7967e09e 13180 oappend (names64[modrm.reg + add]);
90700ea2 13181 else
7967e09e 13182 oappend (names32[modrm.reg + add]);
90700ea2 13183 break;
252b5132
RH
13184 default:
13185 oappend (INTERNAL_DISASSEMBLER_ERROR);
13186 break;
13187 }
13188}
13189
52b15da3 13190static bfd_vma
26ca5450 13191get64 (void)
52b15da3 13192{
5dd0794d 13193 bfd_vma x;
52b15da3 13194#ifdef BFD64
5dd0794d
AM
13195 unsigned int a;
13196 unsigned int b;
13197
52b15da3
JH
13198 FETCH_DATA (the_info, codep + 8);
13199 a = *codep++ & 0xff;
13200 a |= (*codep++ & 0xff) << 8;
13201 a |= (*codep++ & 0xff) << 16;
13202 a |= (*codep++ & 0xff) << 24;
5dd0794d 13203 b = *codep++ & 0xff;
52b15da3
JH
13204 b |= (*codep++ & 0xff) << 8;
13205 b |= (*codep++ & 0xff) << 16;
13206 b |= (*codep++ & 0xff) << 24;
13207 x = a + ((bfd_vma) b << 32);
13208#else
6608db57 13209 abort ();
5dd0794d 13210 x = 0;
52b15da3
JH
13211#endif
13212 return x;
13213}
13214
13215static bfd_signed_vma
26ca5450 13216get32 (void)
252b5132 13217{
52b15da3 13218 bfd_signed_vma x = 0;
252b5132
RH
13219
13220 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
13221 x = *codep++ & (bfd_signed_vma) 0xff;
13222 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
13223 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
13224 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
13225 return x;
13226}
13227
13228static bfd_signed_vma
26ca5450 13229get32s (void)
52b15da3
JH
13230{
13231 bfd_signed_vma x = 0;
13232
13233 FETCH_DATA (the_info, codep + 4);
13234 x = *codep++ & (bfd_signed_vma) 0xff;
13235 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
13236 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
13237 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
13238
13239 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
13240
252b5132
RH
13241 return x;
13242}
13243
13244static int
26ca5450 13245get16 (void)
252b5132
RH
13246{
13247 int x = 0;
13248
13249 FETCH_DATA (the_info, codep + 2);
13250 x = *codep++ & 0xff;
13251 x |= (*codep++ & 0xff) << 8;
13252 return x;
13253}
13254
13255static void
26ca5450 13256set_op (bfd_vma op, int riprel)
252b5132
RH
13257{
13258 op_index[op_ad] = op_ad;
cb712a9e 13259 if (address_mode == mode_64bit)
7081ff04
AJ
13260 {
13261 op_address[op_ad] = op;
13262 op_riprel[op_ad] = riprel;
13263 }
13264 else
13265 {
13266 /* Mask to get a 32-bit address. */
13267 op_address[op_ad] = op & 0xffffffff;
13268 op_riprel[op_ad] = riprel & 0xffffffff;
13269 }
252b5132
RH
13270}
13271
13272static void
26ca5450 13273OP_REG (int code, int sizeflag)
252b5132 13274{
2da11e11 13275 const char *s;
9b60702d 13276 int add;
161a04f6
L
13277 USED_REX (REX_B);
13278 if (rex & REX_B)
52b15da3 13279 add = 8;
9b60702d
L
13280 else
13281 add = 0;
52b15da3
JH
13282
13283 switch (code)
13284 {
52b15da3
JH
13285 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
13286 case sp_reg: case bp_reg: case si_reg: case di_reg:
13287 s = names16[code - ax_reg + add];
13288 break;
13289 case es_reg: case ss_reg: case cs_reg:
13290 case ds_reg: case fs_reg: case gs_reg:
13291 s = names_seg[code - es_reg + add];
13292 break;
13293 case al_reg: case ah_reg: case cl_reg: case ch_reg:
13294 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
13295 USED_REX (0);
13296 if (rex)
13297 s = names8rex[code - al_reg + add];
13298 else
13299 s = names8[code - al_reg];
13300 break;
6439fc28
AM
13301 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
13302 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
cb712a9e 13303 if (address_mode == mode_64bit && (sizeflag & DFLAG))
6439fc28
AM
13304 {
13305 s = names64[code - rAX_reg + add];
13306 break;
13307 }
13308 code += eAX_reg - rAX_reg;
6608db57 13309 /* Fall through. */
52b15da3
JH
13310 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
13311 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
13312 USED_REX (REX_W);
13313 if (rex & REX_W)
52b15da3 13314 s = names64[code - eAX_reg + add];
52b15da3 13315 else
f16cd0d5
L
13316 {
13317 if (sizeflag & DFLAG)
13318 s = names32[code - eAX_reg + add];
13319 else
13320 s = names16[code - eAX_reg + add];
13321 used_prefixes |= (prefixes & PREFIX_DATA);
13322 }
52b15da3 13323 break;
52b15da3
JH
13324 default:
13325 s = INTERNAL_DISASSEMBLER_ERROR;
13326 break;
13327 }
13328 oappend (s);
13329}
13330
13331static void
26ca5450 13332OP_IMREG (int code, int sizeflag)
52b15da3
JH
13333{
13334 const char *s;
252b5132
RH
13335
13336 switch (code)
13337 {
13338 case indir_dx_reg:
d708bcba 13339 if (intel_syntax)
52fd6d94 13340 s = "dx";
d708bcba 13341 else
db6eb5be 13342 s = "(%dx)";
252b5132
RH
13343 break;
13344 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
13345 case sp_reg: case bp_reg: case si_reg: case di_reg:
13346 s = names16[code - ax_reg];
13347 break;
13348 case es_reg: case ss_reg: case cs_reg:
13349 case ds_reg: case fs_reg: case gs_reg:
13350 s = names_seg[code - es_reg];
13351 break;
13352 case al_reg: case ah_reg: case cl_reg: case ch_reg:
13353 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
52b15da3
JH
13354 USED_REX (0);
13355 if (rex)
13356 s = names8rex[code - al_reg];
13357 else
13358 s = names8[code - al_reg];
252b5132
RH
13359 break;
13360 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
13361 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
13362 USED_REX (REX_W);
13363 if (rex & REX_W)
52b15da3 13364 s = names64[code - eAX_reg];
252b5132 13365 else
f16cd0d5
L
13366 {
13367 if (sizeflag & DFLAG)
13368 s = names32[code - eAX_reg];
13369 else
13370 s = names16[code - eAX_reg];
13371 used_prefixes |= (prefixes & PREFIX_DATA);
13372 }
252b5132 13373 break;
52fd6d94 13374 case z_mode_ax_reg:
161a04f6 13375 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
13376 s = *names32;
13377 else
13378 s = *names16;
161a04f6 13379 if (!(rex & REX_W))
52fd6d94
JB
13380 used_prefixes |= (prefixes & PREFIX_DATA);
13381 break;
252b5132
RH
13382 default:
13383 s = INTERNAL_DISASSEMBLER_ERROR;
13384 break;
13385 }
13386 oappend (s);
13387}
13388
13389static void
26ca5450 13390OP_I (int bytemode, int sizeflag)
252b5132 13391{
52b15da3
JH
13392 bfd_signed_vma op;
13393 bfd_signed_vma mask = -1;
252b5132
RH
13394
13395 switch (bytemode)
13396 {
13397 case b_mode:
13398 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
13399 op = *codep++;
13400 mask = 0xff;
13401 break;
13402 case q_mode:
cb712a9e 13403 if (address_mode == mode_64bit)
6439fc28
AM
13404 {
13405 op = get32s ();
13406 break;
13407 }
6608db57 13408 /* Fall through. */
252b5132 13409 case v_mode:
161a04f6
L
13410 USED_REX (REX_W);
13411 if (rex & REX_W)
52b15da3 13412 op = get32s ();
252b5132 13413 else
52b15da3 13414 {
f16cd0d5
L
13415 if (sizeflag & DFLAG)
13416 {
13417 op = get32 ();
13418 mask = 0xffffffff;
13419 }
13420 else
13421 {
13422 op = get16 ();
13423 mask = 0xfffff;
13424 }
13425 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 13426 }
252b5132
RH
13427 break;
13428 case w_mode:
52b15da3 13429 mask = 0xfffff;
252b5132
RH
13430 op = get16 ();
13431 break;
9306ca4a
JB
13432 case const_1_mode:
13433 if (intel_syntax)
13434 oappend ("1");
13435 return;
252b5132
RH
13436 default:
13437 oappend (INTERNAL_DISASSEMBLER_ERROR);
13438 return;
13439 }
13440
52b15da3
JH
13441 op &= mask;
13442 scratchbuf[0] = '$';
d708bcba
AM
13443 print_operand_value (scratchbuf + 1, 1, op);
13444 oappend (scratchbuf + intel_syntax);
52b15da3
JH
13445 scratchbuf[0] = '\0';
13446}
13447
13448static void
26ca5450 13449OP_I64 (int bytemode, int sizeflag)
52b15da3
JH
13450{
13451 bfd_signed_vma op;
13452 bfd_signed_vma mask = -1;
13453
cb712a9e 13454 if (address_mode != mode_64bit)
6439fc28
AM
13455 {
13456 OP_I (bytemode, sizeflag);
13457 return;
13458 }
13459
52b15da3
JH
13460 switch (bytemode)
13461 {
13462 case b_mode:
13463 FETCH_DATA (the_info, codep + 1);
13464 op = *codep++;
13465 mask = 0xff;
13466 break;
13467 case v_mode:
161a04f6
L
13468 USED_REX (REX_W);
13469 if (rex & REX_W)
52b15da3 13470 op = get64 ();
52b15da3
JH
13471 else
13472 {
f16cd0d5
L
13473 if (sizeflag & DFLAG)
13474 {
13475 op = get32 ();
13476 mask = 0xffffffff;
13477 }
13478 else
13479 {
13480 op = get16 ();
13481 mask = 0xfffff;
13482 }
13483 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 13484 }
52b15da3
JH
13485 break;
13486 case w_mode:
13487 mask = 0xfffff;
13488 op = get16 ();
13489 break;
13490 default:
13491 oappend (INTERNAL_DISASSEMBLER_ERROR);
13492 return;
13493 }
13494
13495 op &= mask;
13496 scratchbuf[0] = '$';
d708bcba
AM
13497 print_operand_value (scratchbuf + 1, 1, op);
13498 oappend (scratchbuf + intel_syntax);
252b5132
RH
13499 scratchbuf[0] = '\0';
13500}
13501
13502static void
26ca5450 13503OP_sI (int bytemode, int sizeflag)
252b5132 13504{
52b15da3
JH
13505 bfd_signed_vma op;
13506 bfd_signed_vma mask = -1;
252b5132
RH
13507
13508 switch (bytemode)
13509 {
13510 case b_mode:
13511 FETCH_DATA (the_info, codep + 1);
13512 op = *codep++;
13513 if ((op & 0x80) != 0)
13514 op -= 0x100;
52b15da3 13515 mask = 0xffffffff;
252b5132
RH
13516 break;
13517 case v_mode:
161a04f6
L
13518 USED_REX (REX_W);
13519 if (rex & REX_W)
52b15da3 13520 op = get32s ();
252b5132
RH
13521 else
13522 {
f16cd0d5
L
13523 if (sizeflag & DFLAG)
13524 {
13525 op = get32s ();
13526 mask = 0xffffffff;
13527 }
13528 else
13529 {
13530 mask = 0xffffffff;
13531 op = get16 ();
13532 if ((op & 0x8000) != 0)
13533 op -= 0x10000;
13534 }
13535 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
13536 }
13537 break;
13538 case w_mode:
13539 op = get16 ();
52b15da3 13540 mask = 0xffffffff;
252b5132
RH
13541 if ((op & 0x8000) != 0)
13542 op -= 0x10000;
13543 break;
13544 default:
13545 oappend (INTERNAL_DISASSEMBLER_ERROR);
13546 return;
13547 }
52b15da3
JH
13548
13549 scratchbuf[0] = '$';
13550 print_operand_value (scratchbuf + 1, 1, op);
d708bcba 13551 oappend (scratchbuf + intel_syntax);
252b5132
RH
13552}
13553
13554static void
26ca5450 13555OP_J (int bytemode, int sizeflag)
252b5132 13556{
52b15da3 13557 bfd_vma disp;
7081ff04 13558 bfd_vma mask = -1;
65ca155d 13559 bfd_vma segment = 0;
252b5132
RH
13560
13561 switch (bytemode)
13562 {
13563 case b_mode:
13564 FETCH_DATA (the_info, codep + 1);
13565 disp = *codep++;
13566 if ((disp & 0x80) != 0)
13567 disp -= 0x100;
13568 break;
13569 case v_mode:
f16cd0d5 13570 USED_REX (REX_W);
161a04f6 13571 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 13572 disp = get32s ();
252b5132
RH
13573 else
13574 {
13575 disp = get16 ();
206717e8
L
13576 if ((disp & 0x8000) != 0)
13577 disp -= 0x10000;
65ca155d
L
13578 /* In 16bit mode, address is wrapped around at 64k within
13579 the same segment. Otherwise, a data16 prefix on a jump
13580 instruction means that the pc is masked to 16 bits after
13581 the displacement is added! */
13582 mask = 0xffff;
13583 if ((prefixes & PREFIX_DATA) == 0)
13584 segment = ((start_pc + codep - start_codep)
13585 & ~((bfd_vma) 0xffff));
252b5132 13586 }
f16cd0d5
L
13587 if (!(rex & REX_W))
13588 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
13589 break;
13590 default:
13591 oappend (INTERNAL_DISASSEMBLER_ERROR);
13592 return;
13593 }
65ca155d 13594 disp = ((start_pc + codep - start_codep + disp) & mask) | segment;
52b15da3
JH
13595 set_op (disp, 0);
13596 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
13597 oappend (scratchbuf);
13598}
13599
252b5132 13600static void
ed7841b3 13601OP_SEG (int bytemode, int sizeflag)
252b5132 13602{
ed7841b3 13603 if (bytemode == w_mode)
7967e09e 13604 oappend (names_seg[modrm.reg]);
ed7841b3 13605 else
7967e09e 13606 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
13607}
13608
13609static void
26ca5450 13610OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
13611{
13612 int seg, offset;
13613
c608c12e 13614 if (sizeflag & DFLAG)
252b5132 13615 {
c608c12e
AM
13616 offset = get32 ();
13617 seg = get16 ();
252b5132 13618 }
c608c12e
AM
13619 else
13620 {
13621 offset = get16 ();
13622 seg = get16 ();
13623 }
7d421014 13624 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 13625 if (intel_syntax)
3f31e633 13626 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
13627 else
13628 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 13629 oappend (scratchbuf);
252b5132
RH
13630}
13631
252b5132 13632static void
3f31e633 13633OP_OFF (int bytemode, int sizeflag)
252b5132 13634{
52b15da3 13635 bfd_vma off;
252b5132 13636
3f31e633
JB
13637 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
13638 intel_operand_size (bytemode, sizeflag);
252b5132
RH
13639 append_seg ();
13640
cb712a9e 13641 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
13642 off = get32 ();
13643 else
13644 off = get16 ();
13645
13646 if (intel_syntax)
13647 {
13648 if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
db6eb5be 13649 | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
252b5132 13650 {
d708bcba 13651 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
13652 oappend (":");
13653 }
13654 }
52b15da3
JH
13655 print_operand_value (scratchbuf, 1, off);
13656 oappend (scratchbuf);
13657}
6439fc28 13658
52b15da3 13659static void
3f31e633 13660OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
13661{
13662 bfd_vma off;
13663
539e75ad
L
13664 if (address_mode != mode_64bit
13665 || (prefixes & PREFIX_ADDR))
6439fc28
AM
13666 {
13667 OP_OFF (bytemode, sizeflag);
13668 return;
13669 }
13670
3f31e633
JB
13671 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
13672 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
13673 append_seg ();
13674
6608db57 13675 off = get64 ();
52b15da3
JH
13676
13677 if (intel_syntax)
13678 {
13679 if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
db6eb5be 13680 | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
52b15da3 13681 {
d708bcba 13682 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
13683 oappend (":");
13684 }
13685 }
13686 print_operand_value (scratchbuf, 1, off);
252b5132
RH
13687 oappend (scratchbuf);
13688}
13689
13690static void
26ca5450 13691ptr_reg (int code, int sizeflag)
252b5132 13692{
2da11e11 13693 const char *s;
d708bcba 13694
1d9f512f 13695 *obufp++ = open_char;
20f0a1fc 13696 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 13697 if (address_mode == mode_64bit)
c1a64871
JH
13698 {
13699 if (!(sizeflag & AFLAG))
db6eb5be 13700 s = names32[code - eAX_reg];
c1a64871 13701 else
db6eb5be 13702 s = names64[code - eAX_reg];
c1a64871 13703 }
52b15da3 13704 else if (sizeflag & AFLAG)
252b5132
RH
13705 s = names32[code - eAX_reg];
13706 else
13707 s = names16[code - eAX_reg];
13708 oappend (s);
1d9f512f
AM
13709 *obufp++ = close_char;
13710 *obufp = 0;
252b5132
RH
13711}
13712
13713static void
26ca5450 13714OP_ESreg (int code, int sizeflag)
252b5132 13715{
9306ca4a 13716 if (intel_syntax)
52fd6d94
JB
13717 {
13718 switch (codep[-1])
13719 {
13720 case 0x6d: /* insw/insl */
13721 intel_operand_size (z_mode, sizeflag);
13722 break;
13723 case 0xa5: /* movsw/movsl/movsq */
13724 case 0xa7: /* cmpsw/cmpsl/cmpsq */
13725 case 0xab: /* stosw/stosl */
13726 case 0xaf: /* scasw/scasl */
13727 intel_operand_size (v_mode, sizeflag);
13728 break;
13729 default:
13730 intel_operand_size (b_mode, sizeflag);
13731 }
13732 }
d708bcba 13733 oappend ("%es:" + intel_syntax);
252b5132
RH
13734 ptr_reg (code, sizeflag);
13735}
13736
13737static void
26ca5450 13738OP_DSreg (int code, int sizeflag)
252b5132 13739{
9306ca4a 13740 if (intel_syntax)
52fd6d94
JB
13741 {
13742 switch (codep[-1])
13743 {
13744 case 0x6f: /* outsw/outsl */
13745 intel_operand_size (z_mode, sizeflag);
13746 break;
13747 case 0xa5: /* movsw/movsl/movsq */
13748 case 0xa7: /* cmpsw/cmpsl/cmpsq */
13749 case 0xad: /* lodsw/lodsl/lodsq */
13750 intel_operand_size (v_mode, sizeflag);
13751 break;
13752 default:
13753 intel_operand_size (b_mode, sizeflag);
13754 }
13755 }
252b5132
RH
13756 if ((prefixes
13757 & (PREFIX_CS
13758 | PREFIX_DS
13759 | PREFIX_SS
13760 | PREFIX_ES
13761 | PREFIX_FS
13762 | PREFIX_GS)) == 0)
13763 prefixes |= PREFIX_DS;
6608db57 13764 append_seg ();
252b5132
RH
13765 ptr_reg (code, sizeflag);
13766}
13767
252b5132 13768static void
26ca5450 13769OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13770{
9b60702d 13771 int add;
161a04f6 13772 if (rex & REX_R)
c4a530c5 13773 {
161a04f6 13774 USED_REX (REX_R);
c4a530c5
JB
13775 add = 8;
13776 }
cb712a9e 13777 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 13778 {
f16cd0d5 13779 all_prefixes[last_lock_prefix] = 0;
c4a530c5
JB
13780 used_prefixes |= PREFIX_LOCK;
13781 add = 8;
13782 }
9b60702d
L
13783 else
13784 add = 0;
7967e09e 13785 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
d708bcba 13786 oappend (scratchbuf + intel_syntax);
252b5132
RH
13787}
13788
252b5132 13789static void
26ca5450 13790OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13791{
9b60702d 13792 int add;
161a04f6
L
13793 USED_REX (REX_R);
13794 if (rex & REX_R)
52b15da3 13795 add = 8;
9b60702d
L
13796 else
13797 add = 0;
d708bcba 13798 if (intel_syntax)
7967e09e 13799 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 13800 else
7967e09e 13801 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
13802 oappend (scratchbuf);
13803}
13804
252b5132 13805static void
26ca5450 13806OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13807{
7967e09e 13808 sprintf (scratchbuf, "%%tr%d", modrm.reg);
d708bcba 13809 oappend (scratchbuf + intel_syntax);
252b5132
RH
13810}
13811
13812static void
6f74c397 13813OP_R (int bytemode, int sizeflag)
252b5132 13814{
7967e09e 13815 if (modrm.mod == 3)
2da11e11
AM
13816 OP_E (bytemode, sizeflag);
13817 else
6608db57 13818 BadOp ();
252b5132
RH
13819}
13820
13821static void
26ca5450 13822OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13823{
b9733481
L
13824 int reg = modrm.reg;
13825 const char **names;
13826
041bd2e0
JH
13827 used_prefixes |= (prefixes & PREFIX_DATA);
13828 if (prefixes & PREFIX_DATA)
20f0a1fc 13829 {
b9733481 13830 names = names_xmm;
161a04f6
L
13831 USED_REX (REX_R);
13832 if (rex & REX_R)
b9733481 13833 reg += 8;
20f0a1fc 13834 }
041bd2e0 13835 else
b9733481
L
13836 names = names_mm;
13837 oappend (names[reg]);
252b5132
RH
13838}
13839
c608c12e 13840static void
c0f3af97 13841OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 13842{
b9733481
L
13843 int reg = modrm.reg;
13844 const char **names;
13845
161a04f6
L
13846 USED_REX (REX_R);
13847 if (rex & REX_R)
b9733481 13848 reg += 8;
539f890d
L
13849 if (need_vex
13850 && bytemode != xmm_mode
13851 && bytemode != scalar_mode)
c0f3af97
L
13852 {
13853 switch (vex.length)
13854 {
13855 case 128:
b9733481 13856 names = names_xmm;
c0f3af97
L
13857 break;
13858 case 256:
b9733481 13859 names = names_ymm;
c0f3af97
L
13860 break;
13861 default:
13862 abort ();
13863 }
13864 }
13865 else
b9733481
L
13866 names = names_xmm;
13867 oappend (names[reg]);
c608c12e
AM
13868}
13869
252b5132 13870static void
26ca5450 13871OP_EM (int bytemode, int sizeflag)
252b5132 13872{
b9733481
L
13873 int reg;
13874 const char **names;
13875
7967e09e 13876 if (modrm.mod != 3)
252b5132 13877 {
b6169b20
L
13878 if (intel_syntax
13879 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
13880 {
13881 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
13882 used_prefixes |= (prefixes & PREFIX_DATA);
13883 }
252b5132
RH
13884 OP_E (bytemode, sizeflag);
13885 return;
13886 }
13887
b6169b20
L
13888 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
13889 swap_operand ();
13890
6608db57 13891 /* Skip mod/rm byte. */
4bba6815 13892 MODRM_CHECK;
252b5132 13893 codep++;
041bd2e0 13894 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 13895 reg = modrm.rm;
041bd2e0 13896 if (prefixes & PREFIX_DATA)
20f0a1fc 13897 {
b9733481 13898 names = names_xmm;
161a04f6
L
13899 USED_REX (REX_B);
13900 if (rex & REX_B)
b9733481 13901 reg += 8;
20f0a1fc 13902 }
041bd2e0 13903 else
b9733481
L
13904 names = names_mm;
13905 oappend (names[reg]);
252b5132
RH
13906}
13907
246c51aa
L
13908/* cvt* are the only instructions in sse2 which have
13909 both SSE and MMX operands and also have 0x66 prefix
13910 in their opcode. 0x66 was originally used to differentiate
13911 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
13912 cvt* separately using OP_EMC and OP_MXC */
13913static void
13914OP_EMC (int bytemode, int sizeflag)
13915{
7967e09e 13916 if (modrm.mod != 3)
4d9567e0
MM
13917 {
13918 if (intel_syntax && bytemode == v_mode)
13919 {
13920 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
13921 used_prefixes |= (prefixes & PREFIX_DATA);
13922 }
13923 OP_E (bytemode, sizeflag);
13924 return;
13925 }
246c51aa 13926
4d9567e0
MM
13927 /* Skip mod/rm byte. */
13928 MODRM_CHECK;
13929 codep++;
13930 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 13931 oappend (names_mm[modrm.rm]);
4d9567e0
MM
13932}
13933
13934static void
13935OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
13936{
13937 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 13938 oappend (names_mm[modrm.reg]);
4d9567e0
MM
13939}
13940
c608c12e 13941static void
26ca5450 13942OP_EX (int bytemode, int sizeflag)
c608c12e 13943{
b9733481
L
13944 int reg;
13945 const char **names;
d6f574e0
L
13946
13947 /* Skip mod/rm byte. */
13948 MODRM_CHECK;
13949 codep++;
13950
7967e09e 13951 if (modrm.mod != 3)
c608c12e 13952 {
c1e679ec 13953 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
13954 return;
13955 }
d6f574e0 13956
b9733481 13957 reg = modrm.rm;
161a04f6
L
13958 USED_REX (REX_B);
13959 if (rex & REX_B)
b9733481 13960 reg += 8;
c608c12e 13961
b6169b20 13962 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
13963 && (bytemode == x_swap_mode
13964 || bytemode == d_swap_mode
539f890d
L
13965 || bytemode == d_scalar_swap_mode
13966 || bytemode == q_swap_mode
13967 || bytemode == q_scalar_swap_mode))
b6169b20
L
13968 swap_operand ();
13969
c0f3af97
L
13970 if (need_vex
13971 && bytemode != xmm_mode
539f890d
L
13972 && bytemode != xmmq_mode
13973 && bytemode != d_scalar_mode
13974 && bytemode != d_scalar_swap_mode
13975 && bytemode != q_scalar_mode
1c480963
L
13976 && bytemode != q_scalar_swap_mode
13977 && bytemode != vex_scalar_w_dq_mode)
c0f3af97
L
13978 {
13979 switch (vex.length)
13980 {
13981 case 128:
b9733481 13982 names = names_xmm;
c0f3af97
L
13983 break;
13984 case 256:
b9733481 13985 names = names_ymm;
c0f3af97
L
13986 break;
13987 default:
13988 abort ();
13989 }
13990 }
13991 else
b9733481
L
13992 names = names_xmm;
13993 oappend (names[reg]);
c608c12e
AM
13994}
13995
252b5132 13996static void
26ca5450 13997OP_MS (int bytemode, int sizeflag)
252b5132 13998{
7967e09e 13999 if (modrm.mod == 3)
2da11e11
AM
14000 OP_EM (bytemode, sizeflag);
14001 else
6608db57 14002 BadOp ();
252b5132
RH
14003}
14004
992aaec9 14005static void
26ca5450 14006OP_XS (int bytemode, int sizeflag)
992aaec9 14007{
7967e09e 14008 if (modrm.mod == 3)
992aaec9
AM
14009 OP_EX (bytemode, sizeflag);
14010 else
6608db57 14011 BadOp ();
992aaec9
AM
14012}
14013
cc0ec051
AM
14014static void
14015OP_M (int bytemode, int sizeflag)
14016{
7967e09e 14017 if (modrm.mod == 3)
75413a22
L
14018 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
14019 BadOp ();
cc0ec051
AM
14020 else
14021 OP_E (bytemode, sizeflag);
14022}
14023
14024static void
14025OP_0f07 (int bytemode, int sizeflag)
14026{
7967e09e 14027 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
14028 BadOp ();
14029 else
14030 OP_E (bytemode, sizeflag);
14031}
14032
46e883c5 14033/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 14034 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 14035
cc0ec051 14036static void
46e883c5 14037NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 14038{
8b38ad71
L
14039 if ((prefixes & PREFIX_DATA) != 0
14040 || (rex != 0
14041 && rex != 0x48
14042 && address_mode == mode_64bit))
46e883c5
L
14043 OP_REG (bytemode, sizeflag);
14044 else
14045 strcpy (obuf, "nop");
14046}
14047
14048static void
14049NOP_Fixup2 (int bytemode, int sizeflag)
14050{
8b38ad71
L
14051 if ((prefixes & PREFIX_DATA) != 0
14052 || (rex != 0
14053 && rex != 0x48
14054 && address_mode == mode_64bit))
46e883c5 14055 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
14056}
14057
84037f8c 14058static const char *const Suffix3DNow[] = {
252b5132
RH
14059/* 00 */ NULL, NULL, NULL, NULL,
14060/* 04 */ NULL, NULL, NULL, NULL,
14061/* 08 */ NULL, NULL, NULL, NULL,
9e525108 14062/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
14063/* 10 */ NULL, NULL, NULL, NULL,
14064/* 14 */ NULL, NULL, NULL, NULL,
14065/* 18 */ NULL, NULL, NULL, NULL,
9e525108 14066/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
14067/* 20 */ NULL, NULL, NULL, NULL,
14068/* 24 */ NULL, NULL, NULL, NULL,
14069/* 28 */ NULL, NULL, NULL, NULL,
14070/* 2C */ NULL, NULL, NULL, NULL,
14071/* 30 */ NULL, NULL, NULL, NULL,
14072/* 34 */ NULL, NULL, NULL, NULL,
14073/* 38 */ NULL, NULL, NULL, NULL,
14074/* 3C */ NULL, NULL, NULL, NULL,
14075/* 40 */ NULL, NULL, NULL, NULL,
14076/* 44 */ NULL, NULL, NULL, NULL,
14077/* 48 */ NULL, NULL, NULL, NULL,
14078/* 4C */ NULL, NULL, NULL, NULL,
14079/* 50 */ NULL, NULL, NULL, NULL,
14080/* 54 */ NULL, NULL, NULL, NULL,
14081/* 58 */ NULL, NULL, NULL, NULL,
14082/* 5C */ NULL, NULL, NULL, NULL,
14083/* 60 */ NULL, NULL, NULL, NULL,
14084/* 64 */ NULL, NULL, NULL, NULL,
14085/* 68 */ NULL, NULL, NULL, NULL,
14086/* 6C */ NULL, NULL, NULL, NULL,
14087/* 70 */ NULL, NULL, NULL, NULL,
14088/* 74 */ NULL, NULL, NULL, NULL,
14089/* 78 */ NULL, NULL, NULL, NULL,
14090/* 7C */ NULL, NULL, NULL, NULL,
14091/* 80 */ NULL, NULL, NULL, NULL,
14092/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
14093/* 88 */ NULL, NULL, "pfnacc", NULL,
14094/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
14095/* 90 */ "pfcmpge", NULL, NULL, NULL,
14096/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
14097/* 98 */ NULL, NULL, "pfsub", NULL,
14098/* 9C */ NULL, NULL, "pfadd", NULL,
14099/* A0 */ "pfcmpgt", NULL, NULL, NULL,
14100/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
14101/* A8 */ NULL, NULL, "pfsubr", NULL,
14102/* AC */ NULL, NULL, "pfacc", NULL,
14103/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 14104/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 14105/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
14106/* BC */ NULL, NULL, NULL, "pavgusb",
14107/* C0 */ NULL, NULL, NULL, NULL,
14108/* C4 */ NULL, NULL, NULL, NULL,
14109/* C8 */ NULL, NULL, NULL, NULL,
14110/* CC */ NULL, NULL, NULL, NULL,
14111/* D0 */ NULL, NULL, NULL, NULL,
14112/* D4 */ NULL, NULL, NULL, NULL,
14113/* D8 */ NULL, NULL, NULL, NULL,
14114/* DC */ NULL, NULL, NULL, NULL,
14115/* E0 */ NULL, NULL, NULL, NULL,
14116/* E4 */ NULL, NULL, NULL, NULL,
14117/* E8 */ NULL, NULL, NULL, NULL,
14118/* EC */ NULL, NULL, NULL, NULL,
14119/* F0 */ NULL, NULL, NULL, NULL,
14120/* F4 */ NULL, NULL, NULL, NULL,
14121/* F8 */ NULL, NULL, NULL, NULL,
14122/* FC */ NULL, NULL, NULL, NULL,
14123};
14124
14125static void
26ca5450 14126OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
14127{
14128 const char *mnemonic;
14129
14130 FETCH_DATA (the_info, codep + 1);
14131 /* AMD 3DNow! instructions are specified by an opcode suffix in the
14132 place where an 8-bit immediate would normally go. ie. the last
14133 byte of the instruction. */
ea397f5b 14134 obufp = mnemonicendp;
c608c12e 14135 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 14136 if (mnemonic)
2da11e11 14137 oappend (mnemonic);
252b5132
RH
14138 else
14139 {
14140 /* Since a variable sized modrm/sib chunk is between the start
14141 of the opcode (0x0f0f) and the opcode suffix, we need to do
14142 all the modrm processing first, and don't know until now that
14143 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
14144 op_out[0][0] = '\0';
14145 op_out[1][0] = '\0';
6608db57 14146 BadOp ();
252b5132 14147 }
ea397f5b 14148 mnemonicendp = obufp;
252b5132 14149}
c608c12e 14150
ea397f5b
L
14151static struct op simd_cmp_op[] =
14152{
14153 { STRING_COMMA_LEN ("eq") },
14154 { STRING_COMMA_LEN ("lt") },
14155 { STRING_COMMA_LEN ("le") },
14156 { STRING_COMMA_LEN ("unord") },
14157 { STRING_COMMA_LEN ("neq") },
14158 { STRING_COMMA_LEN ("nlt") },
14159 { STRING_COMMA_LEN ("nle") },
14160 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
14161};
14162
14163static void
ad19981d 14164CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
14165{
14166 unsigned int cmp_type;
14167
14168 FETCH_DATA (the_info, codep + 1);
14169 cmp_type = *codep++ & 0xff;
c0f3af97 14170 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 14171 {
ad19981d 14172 char suffix [3];
ea397f5b 14173 char *p = mnemonicendp - 2;
ad19981d
L
14174 suffix[0] = p[0];
14175 suffix[1] = p[1];
14176 suffix[2] = '\0';
ea397f5b
L
14177 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
14178 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
14179 }
14180 else
14181 {
ad19981d
L
14182 /* We have a reserved extension byte. Output it directly. */
14183 scratchbuf[0] = '$';
14184 print_operand_value (scratchbuf + 1, 1, cmp_type);
14185 oappend (scratchbuf + intel_syntax);
14186 scratchbuf[0] = '\0';
c608c12e
AM
14187 }
14188}
14189
ca164297 14190static void
b844680a
L
14191OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
14192 int sizeflag ATTRIBUTE_UNUSED)
14193{
14194 /* mwait %eax,%ecx */
14195 if (!intel_syntax)
14196 {
14197 const char **names = (address_mode == mode_64bit
14198 ? names64 : names32);
14199 strcpy (op_out[0], names[0]);
14200 strcpy (op_out[1], names[1]);
14201 two_source_ops = 1;
14202 }
14203 /* Skip mod/rm byte. */
14204 MODRM_CHECK;
14205 codep++;
14206}
14207
14208static void
14209OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
14210 int sizeflag ATTRIBUTE_UNUSED)
ca164297 14211{
b844680a
L
14212 /* monitor %eax,%ecx,%edx" */
14213 if (!intel_syntax)
ca164297 14214 {
b844680a 14215 const char **op1_names;
cb712a9e
L
14216 const char **names = (address_mode == mode_64bit
14217 ? names64 : names32);
1d9f512f 14218
b844680a
L
14219 if (!(prefixes & PREFIX_ADDR))
14220 op1_names = (address_mode == mode_16bit
14221 ? names16 : names);
ca164297
L
14222 else
14223 {
b844680a 14224 /* Remove "addr16/addr32". */
f16cd0d5 14225 all_prefixes[last_addr_prefix] = 0;
b844680a
L
14226 op1_names = (address_mode != mode_32bit
14227 ? names32 : names16);
14228 used_prefixes |= PREFIX_ADDR;
ca164297 14229 }
b844680a
L
14230 strcpy (op_out[0], op1_names[0]);
14231 strcpy (op_out[1], names[1]);
14232 strcpy (op_out[2], names[2]);
14233 two_source_ops = 1;
ca164297 14234 }
b844680a
L
14235 /* Skip mod/rm byte. */
14236 MODRM_CHECK;
14237 codep++;
30123838
JB
14238}
14239
6608db57
KH
14240static void
14241BadOp (void)
2da11e11 14242{
6608db57
KH
14243 /* Throw away prefixes and 1st. opcode byte. */
14244 codep = insn_codep + 1;
2da11e11
AM
14245 oappend ("(bad)");
14246}
4cc91dba 14247
35c52694
L
14248static void
14249REP_Fixup (int bytemode, int sizeflag)
14250{
14251 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
14252 lods and stos. */
35c52694 14253 if (prefixes & PREFIX_REPZ)
f16cd0d5 14254 all_prefixes[last_repz_prefix] = REP_PREFIX;
35c52694
L
14255
14256 switch (bytemode)
14257 {
14258 case al_reg:
14259 case eAX_reg:
14260 case indir_dx_reg:
14261 OP_IMREG (bytemode, sizeflag);
14262 break;
14263 case eDI_reg:
14264 OP_ESreg (bytemode, sizeflag);
14265 break;
14266 case eSI_reg:
14267 OP_DSreg (bytemode, sizeflag);
14268 break;
14269 default:
14270 abort ();
14271 break;
14272 }
14273}
f5804c90
L
14274
14275static void
14276CMPXCHG8B_Fixup (int bytemode, int sizeflag)
14277{
161a04f6
L
14278 USED_REX (REX_W);
14279 if (rex & REX_W)
f5804c90
L
14280 {
14281 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
14282 char *p = mnemonicendp - 2;
14283 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 14284 bytemode = o_mode;
f5804c90
L
14285 }
14286 OP_M (bytemode, sizeflag);
14287}
42903f7f
L
14288
14289static void
14290XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
14291{
b9733481
L
14292 const char **names;
14293
c0f3af97
L
14294 if (need_vex)
14295 {
14296 switch (vex.length)
14297 {
14298 case 128:
b9733481 14299 names = names_xmm;
c0f3af97
L
14300 break;
14301 case 256:
b9733481 14302 names = names_ymm;
c0f3af97
L
14303 break;
14304 default:
14305 abort ();
14306 }
14307 }
14308 else
b9733481
L
14309 names = names_xmm;
14310 oappend (names[reg]);
42903f7f 14311}
381d071f
L
14312
14313static void
14314CRC32_Fixup (int bytemode, int sizeflag)
14315{
14316 /* Add proper suffix to "crc32". */
ea397f5b 14317 char *p = mnemonicendp;
381d071f
L
14318
14319 switch (bytemode)
14320 {
14321 case b_mode:
20592a94 14322 if (intel_syntax)
ea397f5b 14323 goto skip;
20592a94 14324
381d071f
L
14325 *p++ = 'b';
14326 break;
14327 case v_mode:
20592a94 14328 if (intel_syntax)
ea397f5b 14329 goto skip;
20592a94 14330
381d071f
L
14331 USED_REX (REX_W);
14332 if (rex & REX_W)
14333 *p++ = 'q';
f16cd0d5
L
14334 else
14335 {
14336 if (sizeflag & DFLAG)
14337 *p++ = 'l';
14338 else
14339 *p++ = 'w';
14340 used_prefixes |= (prefixes & PREFIX_DATA);
14341 }
381d071f
L
14342 break;
14343 default:
14344 oappend (INTERNAL_DISASSEMBLER_ERROR);
14345 break;
14346 }
ea397f5b 14347 mnemonicendp = p;
381d071f
L
14348 *p = '\0';
14349
ea397f5b 14350skip:
381d071f
L
14351 if (modrm.mod == 3)
14352 {
14353 int add;
14354
14355 /* Skip mod/rm byte. */
14356 MODRM_CHECK;
14357 codep++;
14358
14359 USED_REX (REX_B);
14360 add = (rex & REX_B) ? 8 : 0;
14361 if (bytemode == b_mode)
14362 {
14363 USED_REX (0);
14364 if (rex)
14365 oappend (names8rex[modrm.rm + add]);
14366 else
14367 oappend (names8[modrm.rm + add]);
14368 }
14369 else
14370 {
14371 USED_REX (REX_W);
14372 if (rex & REX_W)
14373 oappend (names64[modrm.rm + add]);
14374 else if ((prefixes & PREFIX_DATA))
14375 oappend (names16[modrm.rm + add]);
14376 else
14377 oappend (names32[modrm.rm + add]);
14378 }
14379 }
14380 else
9344ff29 14381 OP_E (bytemode, sizeflag);
381d071f 14382}
85f10a01 14383
eacc9c89
L
14384static void
14385FXSAVE_Fixup (int bytemode, int sizeflag)
14386{
14387 /* Add proper suffix to "fxsave" and "fxrstor". */
14388 USED_REX (REX_W);
14389 if (rex & REX_W)
14390 {
14391 char *p = mnemonicendp;
14392 *p++ = '6';
14393 *p++ = '4';
14394 *p = '\0';
14395 mnemonicendp = p;
14396 }
14397 OP_M (bytemode, sizeflag);
14398}
14399
c0f3af97
L
14400/* Display the destination register operand for instructions with
14401 VEX. */
14402
14403static void
14404OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
14405{
539f890d 14406 int reg;
b9733481
L
14407 const char **names;
14408
c0f3af97
L
14409 if (!need_vex)
14410 abort ();
14411
14412 if (!need_vex_reg)
14413 return;
14414
539f890d
L
14415 reg = vex.register_specifier;
14416 if (bytemode == vex_scalar_mode)
14417 {
14418 oappend (names_xmm[reg]);
14419 return;
14420 }
14421
c0f3af97
L
14422 switch (vex.length)
14423 {
14424 case 128:
14425 switch (bytemode)
14426 {
14427 case vex_mode:
14428 case vex128_mode:
14429 break;
14430 default:
14431 abort ();
14432 return;
14433 }
14434
b9733481 14435 names = names_xmm;
c0f3af97
L
14436 break;
14437 case 256:
14438 switch (bytemode)
14439 {
14440 case vex_mode:
14441 case vex256_mode:
14442 break;
14443 default:
14444 abort ();
14445 return;
14446 }
14447
b9733481 14448 names = names_ymm;
c0f3af97
L
14449 break;
14450 default:
14451 abort ();
14452 break;
14453 }
539f890d 14454 oappend (names[reg]);
c0f3af97
L
14455}
14456
922d8de8
DR
14457/* Get the VEX immediate byte without moving codep. */
14458
14459static unsigned char
ccc5981b 14460get_vex_imm8 (int sizeflag, int opnum)
922d8de8
DR
14461{
14462 int bytes_before_imm = 0;
14463
922d8de8
DR
14464 if (modrm.mod != 3)
14465 {
14466 /* There are SIB/displacement bytes. */
14467 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
02e647f9 14468 {
922d8de8 14469 /* 32/64 bit address mode */
02e647f9 14470 int base = modrm.rm;
922d8de8
DR
14471
14472 /* Check SIB byte. */
02e647f9
SP
14473 if (base == 4)
14474 {
14475 FETCH_DATA (the_info, codep + 1);
14476 base = *codep & 7;
14477 /* When decoding the third source, don't increase
14478 bytes_before_imm as this has already been incremented
14479 by one in OP_E_memory while decoding the second
14480 source operand. */
ccc5981b
SP
14481 if (opnum == 0)
14482 bytes_before_imm++;
02e647f9
SP
14483 }
14484
14485 /* Don't increase bytes_before_imm when decoding the third source,
14486 it has already been incremented by OP_E_memory while decoding
14487 the second source operand. */
14488 if (opnum == 0)
14489 {
14490 switch (modrm.mod)
14491 {
14492 case 0:
14493 /* When modrm.rm == 5 or modrm.rm == 4 and base in
14494 SIB == 5, there is a 4 byte displacement. */
14495 if (base != 5)
14496 /* No displacement. */
14497 break;
14498 case 2:
14499 /* 4 byte displacement. */
14500 bytes_before_imm += 4;
14501 break;
14502 case 1:
14503 /* 1 byte displacement. */
14504 bytes_before_imm++;
14505 break;
14506 }
14507 }
14508 }
922d8de8 14509 else
02e647f9
SP
14510 {
14511 /* 16 bit address mode */
14512 /* Don't increase bytes_before_imm when decoding the third source,
14513 it has already been incremented by OP_E_memory while decoding
14514 the second source operand. */
14515 if (opnum == 0)
14516 {
14517 switch (modrm.mod)
14518 {
14519 case 0:
14520 /* When modrm.rm == 6, there is a 2 byte displacement. */
14521 if (modrm.rm != 6)
14522 /* No displacement. */
14523 break;
14524 case 2:
14525 /* 2 byte displacement. */
14526 bytes_before_imm += 2;
14527 break;
14528 case 1:
14529 /* 1 byte displacement: when decoding the third source,
14530 don't increase bytes_before_imm as this has already
14531 been incremented by one in OP_E_memory while decoding
14532 the second source operand. */
14533 if (opnum == 0)
14534 bytes_before_imm++;
ccc5981b 14535
02e647f9
SP
14536 break;
14537 }
922d8de8
DR
14538 }
14539 }
14540 }
14541
14542 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
14543 return codep [bytes_before_imm];
14544}
14545
14546static void
14547OP_EX_VexReg (int bytemode, int sizeflag, int reg)
14548{
b9733481
L
14549 const char **names;
14550
922d8de8
DR
14551 if (reg == -1 && modrm.mod != 3)
14552 {
14553 OP_E_memory (bytemode, sizeflag);
14554 return;
14555 }
14556 else
14557 {
14558 if (reg == -1)
14559 {
14560 reg = modrm.rm;
14561 USED_REX (REX_B);
14562 if (rex & REX_B)
14563 reg += 8;
14564 }
14565 else if (reg > 7 && address_mode != mode_64bit)
14566 BadOp ();
14567 }
14568
14569 switch (vex.length)
14570 {
14571 case 128:
b9733481 14572 names = names_xmm;
922d8de8
DR
14573 break;
14574 case 256:
b9733481 14575 names = names_ymm;
922d8de8
DR
14576 break;
14577 default:
14578 abort ();
14579 }
b9733481 14580 oappend (names[reg]);
922d8de8
DR
14581}
14582
5dd85c99
SP
14583static void
14584OP_Vex_2src (int bytemode, int sizeflag)
14585{
14586 if (modrm.mod == 3)
14587 {
b9733481 14588 int reg = modrm.rm;
5dd85c99 14589 USED_REX (REX_B);
b9733481
L
14590 if (rex & REX_B)
14591 reg += 8;
14592 oappend (names_xmm[reg]);
5dd85c99
SP
14593 }
14594 else
14595 {
14596 if (intel_syntax
14597 && (bytemode == v_mode || bytemode == v_swap_mode))
14598 {
14599 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
14600 used_prefixes |= (prefixes & PREFIX_DATA);
14601 }
14602 OP_E (bytemode, sizeflag);
14603 }
14604}
14605
14606static void
14607OP_Vex_2src_1 (int bytemode, int sizeflag)
14608{
14609 if (modrm.mod == 3)
14610 {
14611 /* Skip mod/rm byte. */
14612 MODRM_CHECK;
14613 codep++;
14614 }
14615
14616 if (vex.w)
b9733481 14617 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
14618 else
14619 OP_Vex_2src (bytemode, sizeflag);
14620}
14621
14622static void
14623OP_Vex_2src_2 (int bytemode, int sizeflag)
14624{
14625 if (vex.w)
14626 OP_Vex_2src (bytemode, sizeflag);
14627 else
b9733481 14628 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
14629}
14630
922d8de8
DR
14631static void
14632OP_EX_VexW (int bytemode, int sizeflag)
14633{
14634 int reg = -1;
14635
14636 if (!vex_w_done)
14637 {
14638 vex_w_done = 1;
41effecb
SP
14639
14640 /* Skip mod/rm byte. */
14641 MODRM_CHECK;
14642 codep++;
14643
922d8de8 14644 if (vex.w)
ccc5981b 14645 reg = get_vex_imm8 (sizeflag, 0) >> 4;
922d8de8
DR
14646 }
14647 else
14648 {
14649 if (!vex.w)
ccc5981b 14650 reg = get_vex_imm8 (sizeflag, 1) >> 4;
922d8de8
DR
14651 }
14652
14653 OP_EX_VexReg (bytemode, sizeflag, reg);
14654}
14655
922d8de8
DR
14656static void
14657VEXI4_Fixup (int bytemode ATTRIBUTE_UNUSED,
14658 int sizeflag ATTRIBUTE_UNUSED)
14659{
14660 /* Skip the immediate byte and check for invalid bits. */
14661 FETCH_DATA (the_info, codep + 1);
14662 if (*codep++ & 0xf)
14663 BadOp ();
14664}
14665
c0f3af97
L
14666static void
14667OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
14668{
14669 int reg;
b9733481
L
14670 const char **names;
14671
c0f3af97
L
14672 FETCH_DATA (the_info, codep + 1);
14673 reg = *codep++;
14674
14675 if (bytemode != x_mode)
14676 abort ();
14677
14678 if (reg & 0xf)
14679 BadOp ();
14680
14681 reg >>= 4;
dae39acc
L
14682 if (reg > 7 && address_mode != mode_64bit)
14683 BadOp ();
14684
c0f3af97
L
14685 switch (vex.length)
14686 {
14687 case 128:
b9733481 14688 names = names_xmm;
c0f3af97
L
14689 break;
14690 case 256:
b9733481 14691 names = names_ymm;
c0f3af97
L
14692 break;
14693 default:
14694 abort ();
14695 }
b9733481 14696 oappend (names[reg]);
c0f3af97
L
14697}
14698
922d8de8
DR
14699static void
14700OP_XMM_VexW (int bytemode, int sizeflag)
14701{
14702 /* Turn off the REX.W bit since it is used for swapping operands
14703 now. */
14704 rex &= ~REX_W;
14705 OP_XMM (bytemode, sizeflag);
14706}
14707
c0f3af97
L
14708static void
14709OP_EX_Vex (int bytemode, int sizeflag)
14710{
14711 if (modrm.mod != 3)
14712 {
14713 if (vex.register_specifier != 0)
14714 BadOp ();
14715 need_vex_reg = 0;
14716 }
14717 OP_EX (bytemode, sizeflag);
14718}
14719
14720static void
14721OP_XMM_Vex (int bytemode, int sizeflag)
14722{
14723 if (modrm.mod != 3)
14724 {
14725 if (vex.register_specifier != 0)
14726 BadOp ();
14727 need_vex_reg = 0;
14728 }
14729 OP_XMM (bytemode, sizeflag);
14730}
14731
14732static void
14733VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
14734{
14735 switch (vex.length)
14736 {
14737 case 128:
ea397f5b 14738 mnemonicendp = stpcpy (obuf, "vzeroupper");
c0f3af97
L
14739 break;
14740 case 256:
ea397f5b 14741 mnemonicendp = stpcpy (obuf, "vzeroall");
c0f3af97
L
14742 break;
14743 default:
14744 abort ();
14745 }
14746}
14747
ea397f5b
L
14748static struct op vex_cmp_op[] =
14749{
14750 { STRING_COMMA_LEN ("eq") },
14751 { STRING_COMMA_LEN ("lt") },
14752 { STRING_COMMA_LEN ("le") },
14753 { STRING_COMMA_LEN ("unord") },
14754 { STRING_COMMA_LEN ("neq") },
14755 { STRING_COMMA_LEN ("nlt") },
14756 { STRING_COMMA_LEN ("nle") },
14757 { STRING_COMMA_LEN ("ord") },
14758 { STRING_COMMA_LEN ("eq_uq") },
14759 { STRING_COMMA_LEN ("nge") },
14760 { STRING_COMMA_LEN ("ngt") },
14761 { STRING_COMMA_LEN ("false") },
14762 { STRING_COMMA_LEN ("neq_oq") },
14763 { STRING_COMMA_LEN ("ge") },
14764 { STRING_COMMA_LEN ("gt") },
14765 { STRING_COMMA_LEN ("true") },
14766 { STRING_COMMA_LEN ("eq_os") },
14767 { STRING_COMMA_LEN ("lt_oq") },
14768 { STRING_COMMA_LEN ("le_oq") },
14769 { STRING_COMMA_LEN ("unord_s") },
14770 { STRING_COMMA_LEN ("neq_us") },
14771 { STRING_COMMA_LEN ("nlt_uq") },
14772 { STRING_COMMA_LEN ("nle_uq") },
14773 { STRING_COMMA_LEN ("ord_s") },
14774 { STRING_COMMA_LEN ("eq_us") },
14775 { STRING_COMMA_LEN ("nge_uq") },
14776 { STRING_COMMA_LEN ("ngt_uq") },
14777 { STRING_COMMA_LEN ("false_os") },
14778 { STRING_COMMA_LEN ("neq_os") },
14779 { STRING_COMMA_LEN ("ge_oq") },
14780 { STRING_COMMA_LEN ("gt_oq") },
14781 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
14782};
14783
14784static void
14785VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
14786{
14787 unsigned int cmp_type;
14788
14789 FETCH_DATA (the_info, codep + 1);
14790 cmp_type = *codep++ & 0xff;
14791 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
14792 {
14793 char suffix [3];
ea397f5b 14794 char *p = mnemonicendp - 2;
c0f3af97
L
14795 suffix[0] = p[0];
14796 suffix[1] = p[1];
14797 suffix[2] = '\0';
ea397f5b
L
14798 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
14799 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
14800 }
14801 else
14802 {
14803 /* We have a reserved extension byte. Output it directly. */
14804 scratchbuf[0] = '$';
14805 print_operand_value (scratchbuf + 1, 1, cmp_type);
14806 oappend (scratchbuf + intel_syntax);
14807 scratchbuf[0] = '\0';
14808 }
14809}
14810
ea397f5b
L
14811static const struct op pclmul_op[] =
14812{
14813 { STRING_COMMA_LEN ("lql") },
14814 { STRING_COMMA_LEN ("hql") },
14815 { STRING_COMMA_LEN ("lqh") },
14816 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
14817};
14818
14819static void
14820PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
14821 int sizeflag ATTRIBUTE_UNUSED)
14822{
14823 unsigned int pclmul_type;
14824
14825 FETCH_DATA (the_info, codep + 1);
14826 pclmul_type = *codep++ & 0xff;
14827 switch (pclmul_type)
14828 {
14829 case 0x10:
14830 pclmul_type = 2;
14831 break;
14832 case 0x11:
14833 pclmul_type = 3;
14834 break;
14835 default:
14836 break;
14837 }
14838 if (pclmul_type < ARRAY_SIZE (pclmul_op))
14839 {
14840 char suffix [4];
ea397f5b 14841 char *p = mnemonicendp - 3;
c0f3af97
L
14842 suffix[0] = p[0];
14843 suffix[1] = p[1];
14844 suffix[2] = p[2];
14845 suffix[3] = '\0';
ea397f5b
L
14846 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
14847 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
14848 }
14849 else
14850 {
14851 /* We have a reserved extension byte. Output it directly. */
14852 scratchbuf[0] = '$';
14853 print_operand_value (scratchbuf + 1, 1, pclmul_type);
14854 oappend (scratchbuf + intel_syntax);
14855 scratchbuf[0] = '\0';
14856 }
14857}
14858
f1f8f695
L
14859static void
14860MOVBE_Fixup (int bytemode, int sizeflag)
14861{
14862 /* Add proper suffix to "movbe". */
ea397f5b 14863 char *p = mnemonicendp;
f1f8f695
L
14864
14865 switch (bytemode)
14866 {
14867 case v_mode:
14868 if (intel_syntax)
ea397f5b 14869 goto skip;
f1f8f695
L
14870
14871 USED_REX (REX_W);
14872 if (sizeflag & SUFFIX_ALWAYS)
14873 {
14874 if (rex & REX_W)
14875 *p++ = 'q';
f1f8f695 14876 else
f16cd0d5
L
14877 {
14878 if (sizeflag & DFLAG)
14879 *p++ = 'l';
14880 else
14881 *p++ = 'w';
14882 used_prefixes |= (prefixes & PREFIX_DATA);
14883 }
f1f8f695 14884 }
f1f8f695
L
14885 break;
14886 default:
14887 oappend (INTERNAL_DISASSEMBLER_ERROR);
14888 break;
14889 }
ea397f5b 14890 mnemonicendp = p;
f1f8f695
L
14891 *p = '\0';
14892
ea397f5b 14893skip:
f1f8f695
L
14894 OP_M (bytemode, sizeflag);
14895}
f88c9eb0
SP
14896
14897static void
14898OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
14899{
14900 int reg;
14901 const char **names;
14902
14903 /* Skip mod/rm byte. */
14904 MODRM_CHECK;
14905 codep++;
14906
14907 if (vex.w)
14908 names = names64;
14909 else if (vex.length == 256)
14910 names = names32;
14911 else
14912 names = names16;
14913
14914 reg = modrm.rm;
14915 USED_REX (REX_B);
14916 if (rex & REX_B)
14917 reg += 8;
14918
14919 oappend (names[reg]);
14920}
14921
14922static void
14923OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
14924{
14925 const char **names;
14926
14927 if (vex.w)
14928 names = names64;
14929 else if (vex.length == 256)
14930 names = names32;
14931 else
14932 names = names16;
14933
14934 oappend (names[vex.register_specifier]);
14935}
14936
14937static void
14938OP_LWP_I (int bytemode ATTRIBUTE_UNUSED, int sizeflag)
14939{
14940 if (vex.w || vex.length == 256)
14941 OP_I (q_mode, sizeflag);
14942 else
14943 OP_I (w_mode, sizeflag);
14944}
14945
This page took 1.701218 seconds and 4 git commands to generate.