Add support for AVX512BW instructions and their AVX512VL versions.
[deliverable/binutils-gdb.git] / opcodes / i386-dis.c
1 /* Print i386 instructions for GDB, the GNU debugger.
2 Copyright (C) 1988-2014 Free Software Foundation, Inc.
3
4 This file is part of the GNU opcodes library.
5
6 This library is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3, or (at your option)
9 any later version.
10
11 It is distributed in the hope that it will be useful, but WITHOUT
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
14 License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
19 MA 02110-1301, USA. */
20
21
22 /* 80386 instruction printer by Pace Willisson (pace@prep.ai.mit.edu)
23 July 1988
24 modified by John Hassey (hassey@dg-rtp.dg.com)
25 x86-64 support added by Jan Hubicka (jh@suse.cz)
26 VIA PadLock support by Michal Ludvig (mludvig@suse.cz). */
27
28 /* The main tables describing the instructions is essentially a copy
29 of the "Opcode Map" chapter (Appendix A) of the Intel 80386
30 Programmers Manual. Usually, there is a capital letter, followed
31 by a small letter. The capital letter tell the addressing mode,
32 and the small letter tells about the operand size. Refer to
33 the Intel manual for details. */
34
35 #include "sysdep.h"
36 #include "dis-asm.h"
37 #include "opintl.h"
38 #include "opcode/i386.h"
39 #include "libiberty.h"
40
41 #include <setjmp.h>
42
43 static int print_insn (bfd_vma, disassemble_info *);
44 static void dofloat (int);
45 static void OP_ST (int, int);
46 static void OP_STi (int, int);
47 static int putop (const char *, int);
48 static void oappend (const char *);
49 static void append_seg (void);
50 static void OP_indirE (int, int);
51 static void print_operand_value (char *, int, bfd_vma);
52 static void OP_E_register (int, int);
53 static void OP_E_memory (int, int);
54 static void print_displacement (char *, bfd_vma);
55 static void OP_E (int, int);
56 static void OP_G (int, int);
57 static bfd_vma get64 (void);
58 static bfd_signed_vma get32 (void);
59 static bfd_signed_vma get32s (void);
60 static int get16 (void);
61 static void set_op (bfd_vma, int);
62 static void OP_Skip_MODRM (int, int);
63 static void OP_REG (int, int);
64 static void OP_IMREG (int, int);
65 static void OP_I (int, int);
66 static void OP_I64 (int, int);
67 static void OP_sI (int, int);
68 static void OP_J (int, int);
69 static void OP_SEG (int, int);
70 static void OP_DIR (int, int);
71 static void OP_OFF (int, int);
72 static void OP_OFF64 (int, int);
73 static void ptr_reg (int, int);
74 static void OP_ESreg (int, int);
75 static void OP_DSreg (int, int);
76 static void OP_C (int, int);
77 static void OP_D (int, int);
78 static void OP_T (int, int);
79 static void OP_R (int, int);
80 static void OP_MMX (int, int);
81 static void OP_XMM (int, int);
82 static void OP_EM (int, int);
83 static void OP_EX (int, int);
84 static void OP_EMC (int,int);
85 static void OP_MXC (int,int);
86 static void OP_MS (int, int);
87 static void OP_XS (int, int);
88 static void OP_M (int, int);
89 static void OP_VEX (int, int);
90 static void OP_EX_Vex (int, int);
91 static void OP_EX_VexW (int, int);
92 static void OP_EX_VexImmW (int, int);
93 static void OP_XMM_Vex (int, int);
94 static void OP_XMM_VexW (int, int);
95 static void OP_Rounding (int, int);
96 static void OP_REG_VexI4 (int, int);
97 static void PCLMUL_Fixup (int, int);
98 static void VEXI4_Fixup (int, int);
99 static void VZERO_Fixup (int, int);
100 static void VCMP_Fixup (int, int);
101 static void VPCMP_Fixup (int, int);
102 static void OP_0f07 (int, int);
103 static void OP_Monitor (int, int);
104 static void OP_Mwait (int, int);
105 static void NOP_Fixup1 (int, int);
106 static void NOP_Fixup2 (int, int);
107 static void OP_3DNowSuffix (int, int);
108 static void CMP_Fixup (int, int);
109 static void BadOp (void);
110 static void REP_Fixup (int, int);
111 static void BND_Fixup (int, int);
112 static void HLE_Fixup1 (int, int);
113 static void HLE_Fixup2 (int, int);
114 static void HLE_Fixup3 (int, int);
115 static void CMPXCHG8B_Fixup (int, int);
116 static void XMM_Fixup (int, int);
117 static void CRC32_Fixup (int, int);
118 static void FXSAVE_Fixup (int, int);
119 static void OP_LWPCB_E (int, int);
120 static void OP_LWP_E (int, int);
121 static void OP_Vex_2src_1 (int, int);
122 static void OP_Vex_2src_2 (int, int);
123
124 static void MOVBE_Fixup (int, int);
125
126 static void OP_Mask (int, int);
127
128 struct dis_private {
129 /* Points to first byte not fetched. */
130 bfd_byte *max_fetched;
131 bfd_byte the_buffer[MAX_MNEM_SIZE];
132 bfd_vma insn_start;
133 int orig_sizeflag;
134 OPCODES_SIGJMP_BUF bailout;
135 };
136
137 enum address_mode
138 {
139 mode_16bit,
140 mode_32bit,
141 mode_64bit
142 };
143
144 enum address_mode address_mode;
145
146 /* Flags for the prefixes for the current instruction. See below. */
147 static int prefixes;
148
149 /* REX prefix the current instruction. See below. */
150 static int rex;
151 /* Bits of REX we've already used. */
152 static int rex_used;
153 /* REX bits in original REX prefix ignored. */
154 static int rex_ignored;
155 /* Mark parts used in the REX prefix. When we are testing for
156 empty prefix (for 8bit register REX extension), just mask it
157 out. Otherwise test for REX bit is excuse for existence of REX
158 only in case value is nonzero. */
159 #define USED_REX(value) \
160 { \
161 if (value) \
162 { \
163 if ((rex & value)) \
164 rex_used |= (value) | REX_OPCODE; \
165 } \
166 else \
167 rex_used |= REX_OPCODE; \
168 }
169
170 /* Flags for prefixes which we somehow handled when printing the
171 current instruction. */
172 static int used_prefixes;
173
174 /* Flags stored in PREFIXES. */
175 #define PREFIX_REPZ 1
176 #define PREFIX_REPNZ 2
177 #define PREFIX_LOCK 4
178 #define PREFIX_CS 8
179 #define PREFIX_SS 0x10
180 #define PREFIX_DS 0x20
181 #define PREFIX_ES 0x40
182 #define PREFIX_FS 0x80
183 #define PREFIX_GS 0x100
184 #define PREFIX_DATA 0x200
185 #define PREFIX_ADDR 0x400
186 #define PREFIX_FWAIT 0x800
187
188 /* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
189 to ADDR (exclusive) are valid. Returns 1 for success, longjmps
190 on error. */
191 #define FETCH_DATA(info, addr) \
192 ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
193 ? 1 : fetch_data ((info), (addr)))
194
195 static int
196 fetch_data (struct disassemble_info *info, bfd_byte *addr)
197 {
198 int status;
199 struct dis_private *priv = (struct dis_private *) info->private_data;
200 bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
201
202 if (addr <= priv->the_buffer + MAX_MNEM_SIZE)
203 status = (*info->read_memory_func) (start,
204 priv->max_fetched,
205 addr - priv->max_fetched,
206 info);
207 else
208 status = -1;
209 if (status != 0)
210 {
211 /* If we did manage to read at least one byte, then
212 print_insn_i386 will do something sensible. Otherwise, print
213 an error. We do that here because this is where we know
214 STATUS. */
215 if (priv->max_fetched == priv->the_buffer)
216 (*info->memory_error_func) (status, start, info);
217 OPCODES_SIGLONGJMP (priv->bailout, 1);
218 }
219 else
220 priv->max_fetched = addr;
221 return 1;
222 }
223
224 #define XX { NULL, 0 }
225 #define Bad_Opcode NULL, { { NULL, 0 } }
226
227 #define Eb { OP_E, b_mode }
228 #define Ebnd { OP_E, bnd_mode }
229 #define EbS { OP_E, b_swap_mode }
230 #define Ev { OP_E, v_mode }
231 #define Ev_bnd { OP_E, v_bnd_mode }
232 #define EvS { OP_E, v_swap_mode }
233 #define Ed { OP_E, d_mode }
234 #define Edq { OP_E, dq_mode }
235 #define Edqw { OP_E, dqw_mode }
236 #define EdqwS { OP_E, dqw_swap_mode }
237 #define Edqb { OP_E, dqb_mode }
238 #define Edb { OP_E, db_mode }
239 #define Edw { OP_E, dw_mode }
240 #define Edqd { OP_E, dqd_mode }
241 #define Eq { OP_E, q_mode }
242 #define indirEv { OP_indirE, stack_v_mode }
243 #define indirEp { OP_indirE, f_mode }
244 #define stackEv { OP_E, stack_v_mode }
245 #define Em { OP_E, m_mode }
246 #define Ew { OP_E, w_mode }
247 #define M { OP_M, 0 } /* lea, lgdt, etc. */
248 #define Ma { OP_M, a_mode }
249 #define Mb { OP_M, b_mode }
250 #define Md { OP_M, d_mode }
251 #define Mo { OP_M, o_mode }
252 #define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for LDS, LES etc */
253 #define Mq { OP_M, q_mode }
254 #define Mx { OP_M, x_mode }
255 #define Mxmm { OP_M, xmm_mode }
256 #define Gb { OP_G, b_mode }
257 #define Gbnd { OP_G, bnd_mode }
258 #define Gv { OP_G, v_mode }
259 #define Gd { OP_G, d_mode }
260 #define Gdq { OP_G, dq_mode }
261 #define Gm { OP_G, m_mode }
262 #define Gw { OP_G, w_mode }
263 #define Rd { OP_R, d_mode }
264 #define Rdq { OP_R, dq_mode }
265 #define Rm { OP_R, m_mode }
266 #define Ib { OP_I, b_mode }
267 #define sIb { OP_sI, b_mode } /* sign extened byte */
268 #define sIbT { OP_sI, b_T_mode } /* sign extened byte like 'T' */
269 #define Iv { OP_I, v_mode }
270 #define sIv { OP_sI, v_mode }
271 #define Iq { OP_I, q_mode }
272 #define Iv64 { OP_I64, v_mode }
273 #define Iw { OP_I, w_mode }
274 #define I1 { OP_I, const_1_mode }
275 #define Jb { OP_J, b_mode }
276 #define Jv { OP_J, v_mode }
277 #define Cm { OP_C, m_mode }
278 #define Dm { OP_D, m_mode }
279 #define Td { OP_T, d_mode }
280 #define Skip_MODRM { OP_Skip_MODRM, 0 }
281
282 #define RMeAX { OP_REG, eAX_reg }
283 #define RMeBX { OP_REG, eBX_reg }
284 #define RMeCX { OP_REG, eCX_reg }
285 #define RMeDX { OP_REG, eDX_reg }
286 #define RMeSP { OP_REG, eSP_reg }
287 #define RMeBP { OP_REG, eBP_reg }
288 #define RMeSI { OP_REG, eSI_reg }
289 #define RMeDI { OP_REG, eDI_reg }
290 #define RMrAX { OP_REG, rAX_reg }
291 #define RMrBX { OP_REG, rBX_reg }
292 #define RMrCX { OP_REG, rCX_reg }
293 #define RMrDX { OP_REG, rDX_reg }
294 #define RMrSP { OP_REG, rSP_reg }
295 #define RMrBP { OP_REG, rBP_reg }
296 #define RMrSI { OP_REG, rSI_reg }
297 #define RMrDI { OP_REG, rDI_reg }
298 #define RMAL { OP_REG, al_reg }
299 #define RMCL { OP_REG, cl_reg }
300 #define RMDL { OP_REG, dl_reg }
301 #define RMBL { OP_REG, bl_reg }
302 #define RMAH { OP_REG, ah_reg }
303 #define RMCH { OP_REG, ch_reg }
304 #define RMDH { OP_REG, dh_reg }
305 #define RMBH { OP_REG, bh_reg }
306 #define RMAX { OP_REG, ax_reg }
307 #define RMDX { OP_REG, dx_reg }
308
309 #define eAX { OP_IMREG, eAX_reg }
310 #define eBX { OP_IMREG, eBX_reg }
311 #define eCX { OP_IMREG, eCX_reg }
312 #define eDX { OP_IMREG, eDX_reg }
313 #define eSP { OP_IMREG, eSP_reg }
314 #define eBP { OP_IMREG, eBP_reg }
315 #define eSI { OP_IMREG, eSI_reg }
316 #define eDI { OP_IMREG, eDI_reg }
317 #define AL { OP_IMREG, al_reg }
318 #define CL { OP_IMREG, cl_reg }
319 #define DL { OP_IMREG, dl_reg }
320 #define BL { OP_IMREG, bl_reg }
321 #define AH { OP_IMREG, ah_reg }
322 #define CH { OP_IMREG, ch_reg }
323 #define DH { OP_IMREG, dh_reg }
324 #define BH { OP_IMREG, bh_reg }
325 #define AX { OP_IMREG, ax_reg }
326 #define DX { OP_IMREG, dx_reg }
327 #define zAX { OP_IMREG, z_mode_ax_reg }
328 #define indirDX { OP_IMREG, indir_dx_reg }
329
330 #define Sw { OP_SEG, w_mode }
331 #define Sv { OP_SEG, v_mode }
332 #define Ap { OP_DIR, 0 }
333 #define Ob { OP_OFF64, b_mode }
334 #define Ov { OP_OFF64, v_mode }
335 #define Xb { OP_DSreg, eSI_reg }
336 #define Xv { OP_DSreg, eSI_reg }
337 #define Xz { OP_DSreg, eSI_reg }
338 #define Yb { OP_ESreg, eDI_reg }
339 #define Yv { OP_ESreg, eDI_reg }
340 #define DSBX { OP_DSreg, eBX_reg }
341
342 #define es { OP_REG, es_reg }
343 #define ss { OP_REG, ss_reg }
344 #define cs { OP_REG, cs_reg }
345 #define ds { OP_REG, ds_reg }
346 #define fs { OP_REG, fs_reg }
347 #define gs { OP_REG, gs_reg }
348
349 #define MX { OP_MMX, 0 }
350 #define XM { OP_XMM, 0 }
351 #define XMScalar { OP_XMM, scalar_mode }
352 #define XMGatherQ { OP_XMM, vex_vsib_q_w_dq_mode }
353 #define XMM { OP_XMM, xmm_mode }
354 #define XMxmmq { OP_XMM, xmmq_mode }
355 #define EM { OP_EM, v_mode }
356 #define EMS { OP_EM, v_swap_mode }
357 #define EMd { OP_EM, d_mode }
358 #define EMx { OP_EM, x_mode }
359 #define EXw { OP_EX, w_mode }
360 #define EXd { OP_EX, d_mode }
361 #define EXdScalar { OP_EX, d_scalar_mode }
362 #define EXdS { OP_EX, d_swap_mode }
363 #define EXdScalarS { OP_EX, d_scalar_swap_mode }
364 #define EXq { OP_EX, q_mode }
365 #define EXqScalar { OP_EX, q_scalar_mode }
366 #define EXqScalarS { OP_EX, q_scalar_swap_mode }
367 #define EXqS { OP_EX, q_swap_mode }
368 #define EXx { OP_EX, x_mode }
369 #define EXxS { OP_EX, x_swap_mode }
370 #define EXxmm { OP_EX, xmm_mode }
371 #define EXymm { OP_EX, ymm_mode }
372 #define EXxmmq { OP_EX, xmmq_mode }
373 #define EXEvexHalfBcstXmmq { OP_EX, evex_half_bcst_xmmq_mode }
374 #define EXxmm_mb { OP_EX, xmm_mb_mode }
375 #define EXxmm_mw { OP_EX, xmm_mw_mode }
376 #define EXxmm_md { OP_EX, xmm_md_mode }
377 #define EXxmm_mq { OP_EX, xmm_mq_mode }
378 #define EXxmm_mdq { OP_EX, xmm_mdq_mode }
379 #define EXxmmdw { OP_EX, xmmdw_mode }
380 #define EXxmmqd { OP_EX, xmmqd_mode }
381 #define EXymmq { OP_EX, ymmq_mode }
382 #define EXVexWdq { OP_EX, vex_w_dq_mode }
383 #define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
384 #define EXEvexXGscat { OP_EX, evex_x_gscat_mode }
385 #define EXEvexXNoBcst { OP_EX, evex_x_nobcst_mode }
386 #define MS { OP_MS, v_mode }
387 #define XS { OP_XS, v_mode }
388 #define EMCq { OP_EMC, q_mode }
389 #define MXC { OP_MXC, 0 }
390 #define OPSUF { OP_3DNowSuffix, 0 }
391 #define CMP { CMP_Fixup, 0 }
392 #define XMM0 { XMM_Fixup, 0 }
393 #define FXSAVE { FXSAVE_Fixup, 0 }
394 #define Vex_2src_1 { OP_Vex_2src_1, 0 }
395 #define Vex_2src_2 { OP_Vex_2src_2, 0 }
396
397 #define Vex { OP_VEX, vex_mode }
398 #define VexScalar { OP_VEX, vex_scalar_mode }
399 #define VexGatherQ { OP_VEX, vex_vsib_q_w_dq_mode }
400 #define Vex128 { OP_VEX, vex128_mode }
401 #define Vex256 { OP_VEX, vex256_mode }
402 #define VexGdq { OP_VEX, dq_mode }
403 #define VexI4 { VEXI4_Fixup, 0}
404 #define EXdVex { OP_EX_Vex, d_mode }
405 #define EXdVexS { OP_EX_Vex, d_swap_mode }
406 #define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode }
407 #define EXqVex { OP_EX_Vex, q_mode }
408 #define EXqVexS { OP_EX_Vex, q_swap_mode }
409 #define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode }
410 #define EXVexW { OP_EX_VexW, x_mode }
411 #define EXdVexW { OP_EX_VexW, d_mode }
412 #define EXqVexW { OP_EX_VexW, q_mode }
413 #define EXVexImmW { OP_EX_VexImmW, x_mode }
414 #define XMVex { OP_XMM_Vex, 0 }
415 #define XMVexScalar { OP_XMM_Vex, scalar_mode }
416 #define XMVexW { OP_XMM_VexW, 0 }
417 #define XMVexI4 { OP_REG_VexI4, x_mode }
418 #define PCLMUL { PCLMUL_Fixup, 0 }
419 #define VZERO { VZERO_Fixup, 0 }
420 #define VCMP { VCMP_Fixup, 0 }
421 #define VPCMP { VPCMP_Fixup, 0 }
422
423 #define EXxEVexR { OP_Rounding, evex_rounding_mode }
424 #define EXxEVexS { OP_Rounding, evex_sae_mode }
425
426 #define XMask { OP_Mask, mask_mode }
427 #define MaskG { OP_G, mask_mode }
428 #define MaskE { OP_E, mask_mode }
429 #define MaskBDE { OP_E, mask_bd_mode }
430 #define MaskR { OP_R, mask_mode }
431 #define MaskVex { OP_VEX, mask_mode }
432
433 #define MVexVSIBDWpX { OP_M, vex_vsib_d_w_dq_mode }
434 #define MVexVSIBDQWpX { OP_M, vex_vsib_d_w_d_mode }
435 #define MVexVSIBQWpX { OP_M, vex_vsib_q_w_dq_mode }
436 #define MVexVSIBQDWpX { OP_M, vex_vsib_q_w_d_mode }
437
438 /* Used handle "rep" prefix for string instructions. */
439 #define Xbr { REP_Fixup, eSI_reg }
440 #define Xvr { REP_Fixup, eSI_reg }
441 #define Ybr { REP_Fixup, eDI_reg }
442 #define Yvr { REP_Fixup, eDI_reg }
443 #define Yzr { REP_Fixup, eDI_reg }
444 #define indirDXr { REP_Fixup, indir_dx_reg }
445 #define ALr { REP_Fixup, al_reg }
446 #define eAXr { REP_Fixup, eAX_reg }
447
448 /* Used handle HLE prefix for lockable instructions. */
449 #define Ebh1 { HLE_Fixup1, b_mode }
450 #define Evh1 { HLE_Fixup1, v_mode }
451 #define Ebh2 { HLE_Fixup2, b_mode }
452 #define Evh2 { HLE_Fixup2, v_mode }
453 #define Ebh3 { HLE_Fixup3, b_mode }
454 #define Evh3 { HLE_Fixup3, v_mode }
455
456 #define BND { BND_Fixup, 0 }
457
458 #define cond_jump_flag { NULL, cond_jump_mode }
459 #define loop_jcxz_flag { NULL, loop_jcxz_mode }
460
461 /* bits in sizeflag */
462 #define SUFFIX_ALWAYS 4
463 #define AFLAG 2
464 #define DFLAG 1
465
466 enum
467 {
468 /* byte operand */
469 b_mode = 1,
470 /* byte operand with operand swapped */
471 b_swap_mode,
472 /* byte operand, sign extend like 'T' suffix */
473 b_T_mode,
474 /* operand size depends on prefixes */
475 v_mode,
476 /* operand size depends on prefixes with operand swapped */
477 v_swap_mode,
478 /* word operand */
479 w_mode,
480 /* double word operand */
481 d_mode,
482 /* double word operand with operand swapped */
483 d_swap_mode,
484 /* quad word operand */
485 q_mode,
486 /* quad word operand with operand swapped */
487 q_swap_mode,
488 /* ten-byte operand */
489 t_mode,
490 /* 16-byte XMM, 32-byte YMM or 64-byte ZMM operand. In EVEX with
491 broadcast enabled. */
492 x_mode,
493 /* Similar to x_mode, but with different EVEX mem shifts. */
494 evex_x_gscat_mode,
495 /* Similar to x_mode, but with disabled broadcast. */
496 evex_x_nobcst_mode,
497 /* Similar to x_mode, but with operands swapped and disabled broadcast
498 in EVEX. */
499 x_swap_mode,
500 /* 16-byte XMM operand */
501 xmm_mode,
502 /* XMM, XMM or YMM register operand, or quad word, xmmword or ymmword
503 memory operand (depending on vector length). Broadcast isn't
504 allowed. */
505 xmmq_mode,
506 /* Same as xmmq_mode, but broadcast is allowed. */
507 evex_half_bcst_xmmq_mode,
508 /* XMM register or byte memory operand */
509 xmm_mb_mode,
510 /* XMM register or word memory operand */
511 xmm_mw_mode,
512 /* XMM register or double word memory operand */
513 xmm_md_mode,
514 /* XMM register or quad word memory operand */
515 xmm_mq_mode,
516 /* XMM register or double/quad word memory operand, depending on
517 VEX.W. */
518 xmm_mdq_mode,
519 /* 16-byte XMM, word, double word or quad word operand. */
520 xmmdw_mode,
521 /* 16-byte XMM, double word, quad word operand or xmm word operand. */
522 xmmqd_mode,
523 /* 32-byte YMM operand */
524 ymm_mode,
525 /* quad word, ymmword or zmmword memory operand. */
526 ymmq_mode,
527 /* 32-byte YMM or 16-byte word operand */
528 ymmxmm_mode,
529 /* d_mode in 32bit, q_mode in 64bit mode. */
530 m_mode,
531 /* pair of v_mode operands */
532 a_mode,
533 cond_jump_mode,
534 loop_jcxz_mode,
535 v_bnd_mode,
536 /* operand size depends on REX prefixes. */
537 dq_mode,
538 /* registers like dq_mode, memory like w_mode. */
539 dqw_mode,
540 dqw_swap_mode,
541 bnd_mode,
542 /* 4- or 6-byte pointer operand */
543 f_mode,
544 const_1_mode,
545 /* v_mode for stack-related opcodes. */
546 stack_v_mode,
547 /* non-quad operand size depends on prefixes */
548 z_mode,
549 /* 16-byte operand */
550 o_mode,
551 /* registers like dq_mode, memory like b_mode. */
552 dqb_mode,
553 /* registers like d_mode, memory like b_mode. */
554 db_mode,
555 /* registers like d_mode, memory like w_mode. */
556 dw_mode,
557 /* registers like dq_mode, memory like d_mode. */
558 dqd_mode,
559 /* normal vex mode */
560 vex_mode,
561 /* 128bit vex mode */
562 vex128_mode,
563 /* 256bit vex mode */
564 vex256_mode,
565 /* operand size depends on the VEX.W bit. */
566 vex_w_dq_mode,
567
568 /* Similar to vex_w_dq_mode, with VSIB dword indices. */
569 vex_vsib_d_w_dq_mode,
570 /* Similar to vex_vsib_d_w_dq_mode, with smaller memory. */
571 vex_vsib_d_w_d_mode,
572 /* Similar to vex_w_dq_mode, with VSIB qword indices. */
573 vex_vsib_q_w_dq_mode,
574 /* Similar to vex_vsib_q_w_dq_mode, with smaller memory. */
575 vex_vsib_q_w_d_mode,
576
577 /* scalar, ignore vector length. */
578 scalar_mode,
579 /* like d_mode, ignore vector length. */
580 d_scalar_mode,
581 /* like d_swap_mode, ignore vector length. */
582 d_scalar_swap_mode,
583 /* like q_mode, ignore vector length. */
584 q_scalar_mode,
585 /* like q_swap_mode, ignore vector length. */
586 q_scalar_swap_mode,
587 /* like vex_mode, ignore vector length. */
588 vex_scalar_mode,
589 /* like vex_w_dq_mode, ignore vector length. */
590 vex_scalar_w_dq_mode,
591
592 /* Static rounding. */
593 evex_rounding_mode,
594 /* Supress all exceptions. */
595 evex_sae_mode,
596
597 /* Mask register operand. */
598 mask_mode,
599 /* Mask register operand. */
600 mask_bd_mode,
601
602 es_reg,
603 cs_reg,
604 ss_reg,
605 ds_reg,
606 fs_reg,
607 gs_reg,
608
609 eAX_reg,
610 eCX_reg,
611 eDX_reg,
612 eBX_reg,
613 eSP_reg,
614 eBP_reg,
615 eSI_reg,
616 eDI_reg,
617
618 al_reg,
619 cl_reg,
620 dl_reg,
621 bl_reg,
622 ah_reg,
623 ch_reg,
624 dh_reg,
625 bh_reg,
626
627 ax_reg,
628 cx_reg,
629 dx_reg,
630 bx_reg,
631 sp_reg,
632 bp_reg,
633 si_reg,
634 di_reg,
635
636 rAX_reg,
637 rCX_reg,
638 rDX_reg,
639 rBX_reg,
640 rSP_reg,
641 rBP_reg,
642 rSI_reg,
643 rDI_reg,
644
645 z_mode_ax_reg,
646 indir_dx_reg
647 };
648
649 enum
650 {
651 FLOATCODE = 1,
652 USE_REG_TABLE,
653 USE_MOD_TABLE,
654 USE_RM_TABLE,
655 USE_PREFIX_TABLE,
656 USE_X86_64_TABLE,
657 USE_3BYTE_TABLE,
658 USE_XOP_8F_TABLE,
659 USE_VEX_C4_TABLE,
660 USE_VEX_C5_TABLE,
661 USE_VEX_LEN_TABLE,
662 USE_VEX_W_TABLE,
663 USE_EVEX_TABLE
664 };
665
666 #define FLOAT NULL, { { NULL, FLOATCODE } }
667
668 #define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }
669 #define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
670 #define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
671 #define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
672 #define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
673 #define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
674 #define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
675 #define XOP_8F_TABLE(I) DIS386 (USE_XOP_8F_TABLE, (I))
676 #define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
677 #define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
678 #define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
679 #define VEX_W_TABLE(I) DIS386 (USE_VEX_W_TABLE, (I))
680 #define EVEX_TABLE(I) DIS386 (USE_EVEX_TABLE, (I))
681
682 enum
683 {
684 REG_80 = 0,
685 REG_81,
686 REG_82,
687 REG_8F,
688 REG_C0,
689 REG_C1,
690 REG_C6,
691 REG_C7,
692 REG_D0,
693 REG_D1,
694 REG_D2,
695 REG_D3,
696 REG_F6,
697 REG_F7,
698 REG_FE,
699 REG_FF,
700 REG_0F00,
701 REG_0F01,
702 REG_0F0D,
703 REG_0F18,
704 REG_0F71,
705 REG_0F72,
706 REG_0F73,
707 REG_0FA6,
708 REG_0FA7,
709 REG_0FAE,
710 REG_0FBA,
711 REG_0FC7,
712 REG_VEX_0F71,
713 REG_VEX_0F72,
714 REG_VEX_0F73,
715 REG_VEX_0FAE,
716 REG_VEX_0F38F3,
717 REG_XOP_LWPCB,
718 REG_XOP_LWP,
719 REG_XOP_TBM_01,
720 REG_XOP_TBM_02,
721
722 REG_EVEX_0F71,
723 REG_EVEX_0F72,
724 REG_EVEX_0F73,
725 REG_EVEX_0F38C6,
726 REG_EVEX_0F38C7
727 };
728
729 enum
730 {
731 MOD_8D = 0,
732 MOD_C6_REG_7,
733 MOD_C7_REG_7,
734 MOD_FF_REG_3,
735 MOD_FF_REG_5,
736 MOD_0F01_REG_0,
737 MOD_0F01_REG_1,
738 MOD_0F01_REG_2,
739 MOD_0F01_REG_3,
740 MOD_0F01_REG_7,
741 MOD_0F12_PREFIX_0,
742 MOD_0F13,
743 MOD_0F16_PREFIX_0,
744 MOD_0F17,
745 MOD_0F18_REG_0,
746 MOD_0F18_REG_1,
747 MOD_0F18_REG_2,
748 MOD_0F18_REG_3,
749 MOD_0F18_REG_4,
750 MOD_0F18_REG_5,
751 MOD_0F18_REG_6,
752 MOD_0F18_REG_7,
753 MOD_0F1A_PREFIX_0,
754 MOD_0F1B_PREFIX_0,
755 MOD_0F1B_PREFIX_1,
756 MOD_0F20,
757 MOD_0F21,
758 MOD_0F22,
759 MOD_0F23,
760 MOD_0F24,
761 MOD_0F26,
762 MOD_0F2B_PREFIX_0,
763 MOD_0F2B_PREFIX_1,
764 MOD_0F2B_PREFIX_2,
765 MOD_0F2B_PREFIX_3,
766 MOD_0F51,
767 MOD_0F71_REG_2,
768 MOD_0F71_REG_4,
769 MOD_0F71_REG_6,
770 MOD_0F72_REG_2,
771 MOD_0F72_REG_4,
772 MOD_0F72_REG_6,
773 MOD_0F73_REG_2,
774 MOD_0F73_REG_3,
775 MOD_0F73_REG_6,
776 MOD_0F73_REG_7,
777 MOD_0FAE_REG_0,
778 MOD_0FAE_REG_1,
779 MOD_0FAE_REG_2,
780 MOD_0FAE_REG_3,
781 MOD_0FAE_REG_4,
782 MOD_0FAE_REG_5,
783 MOD_0FAE_REG_6,
784 MOD_0FAE_REG_7,
785 MOD_0FB2,
786 MOD_0FB4,
787 MOD_0FB5,
788 MOD_0FC7_REG_3,
789 MOD_0FC7_REG_4,
790 MOD_0FC7_REG_5,
791 MOD_0FC7_REG_6,
792 MOD_0FC7_REG_7,
793 MOD_0FD7,
794 MOD_0FE7_PREFIX_2,
795 MOD_0FF0_PREFIX_3,
796 MOD_0F382A_PREFIX_2,
797 MOD_62_32BIT,
798 MOD_C4_32BIT,
799 MOD_C5_32BIT,
800 MOD_VEX_0F12_PREFIX_0,
801 MOD_VEX_0F13,
802 MOD_VEX_0F16_PREFIX_0,
803 MOD_VEX_0F17,
804 MOD_VEX_0F2B,
805 MOD_VEX_0F50,
806 MOD_VEX_0F71_REG_2,
807 MOD_VEX_0F71_REG_4,
808 MOD_VEX_0F71_REG_6,
809 MOD_VEX_0F72_REG_2,
810 MOD_VEX_0F72_REG_4,
811 MOD_VEX_0F72_REG_6,
812 MOD_VEX_0F73_REG_2,
813 MOD_VEX_0F73_REG_3,
814 MOD_VEX_0F73_REG_6,
815 MOD_VEX_0F73_REG_7,
816 MOD_VEX_0FAE_REG_2,
817 MOD_VEX_0FAE_REG_3,
818 MOD_VEX_0FD7_PREFIX_2,
819 MOD_VEX_0FE7_PREFIX_2,
820 MOD_VEX_0FF0_PREFIX_3,
821 MOD_VEX_0F381A_PREFIX_2,
822 MOD_VEX_0F382A_PREFIX_2,
823 MOD_VEX_0F382C_PREFIX_2,
824 MOD_VEX_0F382D_PREFIX_2,
825 MOD_VEX_0F382E_PREFIX_2,
826 MOD_VEX_0F382F_PREFIX_2,
827 MOD_VEX_0F385A_PREFIX_2,
828 MOD_VEX_0F388C_PREFIX_2,
829 MOD_VEX_0F388E_PREFIX_2,
830
831 MOD_EVEX_0F10_PREFIX_1,
832 MOD_EVEX_0F10_PREFIX_3,
833 MOD_EVEX_0F11_PREFIX_1,
834 MOD_EVEX_0F11_PREFIX_3,
835 MOD_EVEX_0F12_PREFIX_0,
836 MOD_EVEX_0F16_PREFIX_0,
837 MOD_EVEX_0F38C6_REG_1,
838 MOD_EVEX_0F38C6_REG_2,
839 MOD_EVEX_0F38C6_REG_5,
840 MOD_EVEX_0F38C6_REG_6,
841 MOD_EVEX_0F38C7_REG_1,
842 MOD_EVEX_0F38C7_REG_2,
843 MOD_EVEX_0F38C7_REG_5,
844 MOD_EVEX_0F38C7_REG_6
845 };
846
847 enum
848 {
849 RM_C6_REG_7 = 0,
850 RM_C7_REG_7,
851 RM_0F01_REG_0,
852 RM_0F01_REG_1,
853 RM_0F01_REG_2,
854 RM_0F01_REG_3,
855 RM_0F01_REG_7,
856 RM_0FAE_REG_5,
857 RM_0FAE_REG_6,
858 RM_0FAE_REG_7
859 };
860
861 enum
862 {
863 PREFIX_90 = 0,
864 PREFIX_0F10,
865 PREFIX_0F11,
866 PREFIX_0F12,
867 PREFIX_0F16,
868 PREFIX_0F1A,
869 PREFIX_0F1B,
870 PREFIX_0F2A,
871 PREFIX_0F2B,
872 PREFIX_0F2C,
873 PREFIX_0F2D,
874 PREFIX_0F2E,
875 PREFIX_0F2F,
876 PREFIX_0F51,
877 PREFIX_0F52,
878 PREFIX_0F53,
879 PREFIX_0F58,
880 PREFIX_0F59,
881 PREFIX_0F5A,
882 PREFIX_0F5B,
883 PREFIX_0F5C,
884 PREFIX_0F5D,
885 PREFIX_0F5E,
886 PREFIX_0F5F,
887 PREFIX_0F60,
888 PREFIX_0F61,
889 PREFIX_0F62,
890 PREFIX_0F6C,
891 PREFIX_0F6D,
892 PREFIX_0F6F,
893 PREFIX_0F70,
894 PREFIX_0F73_REG_3,
895 PREFIX_0F73_REG_7,
896 PREFIX_0F78,
897 PREFIX_0F79,
898 PREFIX_0F7C,
899 PREFIX_0F7D,
900 PREFIX_0F7E,
901 PREFIX_0F7F,
902 PREFIX_0FAE_REG_0,
903 PREFIX_0FAE_REG_1,
904 PREFIX_0FAE_REG_2,
905 PREFIX_0FAE_REG_3,
906 PREFIX_0FAE_REG_7,
907 PREFIX_0FB8,
908 PREFIX_0FBC,
909 PREFIX_0FBD,
910 PREFIX_0FC2,
911 PREFIX_0FC3,
912 PREFIX_0FC7_REG_6,
913 PREFIX_0FD0,
914 PREFIX_0FD6,
915 PREFIX_0FE6,
916 PREFIX_0FE7,
917 PREFIX_0FF0,
918 PREFIX_0FF7,
919 PREFIX_0F3810,
920 PREFIX_0F3814,
921 PREFIX_0F3815,
922 PREFIX_0F3817,
923 PREFIX_0F3820,
924 PREFIX_0F3821,
925 PREFIX_0F3822,
926 PREFIX_0F3823,
927 PREFIX_0F3824,
928 PREFIX_0F3825,
929 PREFIX_0F3828,
930 PREFIX_0F3829,
931 PREFIX_0F382A,
932 PREFIX_0F382B,
933 PREFIX_0F3830,
934 PREFIX_0F3831,
935 PREFIX_0F3832,
936 PREFIX_0F3833,
937 PREFIX_0F3834,
938 PREFIX_0F3835,
939 PREFIX_0F3837,
940 PREFIX_0F3838,
941 PREFIX_0F3839,
942 PREFIX_0F383A,
943 PREFIX_0F383B,
944 PREFIX_0F383C,
945 PREFIX_0F383D,
946 PREFIX_0F383E,
947 PREFIX_0F383F,
948 PREFIX_0F3840,
949 PREFIX_0F3841,
950 PREFIX_0F3880,
951 PREFIX_0F3881,
952 PREFIX_0F3882,
953 PREFIX_0F38C8,
954 PREFIX_0F38C9,
955 PREFIX_0F38CA,
956 PREFIX_0F38CB,
957 PREFIX_0F38CC,
958 PREFIX_0F38CD,
959 PREFIX_0F38DB,
960 PREFIX_0F38DC,
961 PREFIX_0F38DD,
962 PREFIX_0F38DE,
963 PREFIX_0F38DF,
964 PREFIX_0F38F0,
965 PREFIX_0F38F1,
966 PREFIX_0F38F6,
967 PREFIX_0F3A08,
968 PREFIX_0F3A09,
969 PREFIX_0F3A0A,
970 PREFIX_0F3A0B,
971 PREFIX_0F3A0C,
972 PREFIX_0F3A0D,
973 PREFIX_0F3A0E,
974 PREFIX_0F3A14,
975 PREFIX_0F3A15,
976 PREFIX_0F3A16,
977 PREFIX_0F3A17,
978 PREFIX_0F3A20,
979 PREFIX_0F3A21,
980 PREFIX_0F3A22,
981 PREFIX_0F3A40,
982 PREFIX_0F3A41,
983 PREFIX_0F3A42,
984 PREFIX_0F3A44,
985 PREFIX_0F3A60,
986 PREFIX_0F3A61,
987 PREFIX_0F3A62,
988 PREFIX_0F3A63,
989 PREFIX_0F3ACC,
990 PREFIX_0F3ADF,
991 PREFIX_VEX_0F10,
992 PREFIX_VEX_0F11,
993 PREFIX_VEX_0F12,
994 PREFIX_VEX_0F16,
995 PREFIX_VEX_0F2A,
996 PREFIX_VEX_0F2C,
997 PREFIX_VEX_0F2D,
998 PREFIX_VEX_0F2E,
999 PREFIX_VEX_0F2F,
1000 PREFIX_VEX_0F41,
1001 PREFIX_VEX_0F42,
1002 PREFIX_VEX_0F44,
1003 PREFIX_VEX_0F45,
1004 PREFIX_VEX_0F46,
1005 PREFIX_VEX_0F47,
1006 PREFIX_VEX_0F4A,
1007 PREFIX_VEX_0F4B,
1008 PREFIX_VEX_0F51,
1009 PREFIX_VEX_0F52,
1010 PREFIX_VEX_0F53,
1011 PREFIX_VEX_0F58,
1012 PREFIX_VEX_0F59,
1013 PREFIX_VEX_0F5A,
1014 PREFIX_VEX_0F5B,
1015 PREFIX_VEX_0F5C,
1016 PREFIX_VEX_0F5D,
1017 PREFIX_VEX_0F5E,
1018 PREFIX_VEX_0F5F,
1019 PREFIX_VEX_0F60,
1020 PREFIX_VEX_0F61,
1021 PREFIX_VEX_0F62,
1022 PREFIX_VEX_0F63,
1023 PREFIX_VEX_0F64,
1024 PREFIX_VEX_0F65,
1025 PREFIX_VEX_0F66,
1026 PREFIX_VEX_0F67,
1027 PREFIX_VEX_0F68,
1028 PREFIX_VEX_0F69,
1029 PREFIX_VEX_0F6A,
1030 PREFIX_VEX_0F6B,
1031 PREFIX_VEX_0F6C,
1032 PREFIX_VEX_0F6D,
1033 PREFIX_VEX_0F6E,
1034 PREFIX_VEX_0F6F,
1035 PREFIX_VEX_0F70,
1036 PREFIX_VEX_0F71_REG_2,
1037 PREFIX_VEX_0F71_REG_4,
1038 PREFIX_VEX_0F71_REG_6,
1039 PREFIX_VEX_0F72_REG_2,
1040 PREFIX_VEX_0F72_REG_4,
1041 PREFIX_VEX_0F72_REG_6,
1042 PREFIX_VEX_0F73_REG_2,
1043 PREFIX_VEX_0F73_REG_3,
1044 PREFIX_VEX_0F73_REG_6,
1045 PREFIX_VEX_0F73_REG_7,
1046 PREFIX_VEX_0F74,
1047 PREFIX_VEX_0F75,
1048 PREFIX_VEX_0F76,
1049 PREFIX_VEX_0F77,
1050 PREFIX_VEX_0F7C,
1051 PREFIX_VEX_0F7D,
1052 PREFIX_VEX_0F7E,
1053 PREFIX_VEX_0F7F,
1054 PREFIX_VEX_0F90,
1055 PREFIX_VEX_0F91,
1056 PREFIX_VEX_0F92,
1057 PREFIX_VEX_0F93,
1058 PREFIX_VEX_0F98,
1059 PREFIX_VEX_0F99,
1060 PREFIX_VEX_0FC2,
1061 PREFIX_VEX_0FC4,
1062 PREFIX_VEX_0FC5,
1063 PREFIX_VEX_0FD0,
1064 PREFIX_VEX_0FD1,
1065 PREFIX_VEX_0FD2,
1066 PREFIX_VEX_0FD3,
1067 PREFIX_VEX_0FD4,
1068 PREFIX_VEX_0FD5,
1069 PREFIX_VEX_0FD6,
1070 PREFIX_VEX_0FD7,
1071 PREFIX_VEX_0FD8,
1072 PREFIX_VEX_0FD9,
1073 PREFIX_VEX_0FDA,
1074 PREFIX_VEX_0FDB,
1075 PREFIX_VEX_0FDC,
1076 PREFIX_VEX_0FDD,
1077 PREFIX_VEX_0FDE,
1078 PREFIX_VEX_0FDF,
1079 PREFIX_VEX_0FE0,
1080 PREFIX_VEX_0FE1,
1081 PREFIX_VEX_0FE2,
1082 PREFIX_VEX_0FE3,
1083 PREFIX_VEX_0FE4,
1084 PREFIX_VEX_0FE5,
1085 PREFIX_VEX_0FE6,
1086 PREFIX_VEX_0FE7,
1087 PREFIX_VEX_0FE8,
1088 PREFIX_VEX_0FE9,
1089 PREFIX_VEX_0FEA,
1090 PREFIX_VEX_0FEB,
1091 PREFIX_VEX_0FEC,
1092 PREFIX_VEX_0FED,
1093 PREFIX_VEX_0FEE,
1094 PREFIX_VEX_0FEF,
1095 PREFIX_VEX_0FF0,
1096 PREFIX_VEX_0FF1,
1097 PREFIX_VEX_0FF2,
1098 PREFIX_VEX_0FF3,
1099 PREFIX_VEX_0FF4,
1100 PREFIX_VEX_0FF5,
1101 PREFIX_VEX_0FF6,
1102 PREFIX_VEX_0FF7,
1103 PREFIX_VEX_0FF8,
1104 PREFIX_VEX_0FF9,
1105 PREFIX_VEX_0FFA,
1106 PREFIX_VEX_0FFB,
1107 PREFIX_VEX_0FFC,
1108 PREFIX_VEX_0FFD,
1109 PREFIX_VEX_0FFE,
1110 PREFIX_VEX_0F3800,
1111 PREFIX_VEX_0F3801,
1112 PREFIX_VEX_0F3802,
1113 PREFIX_VEX_0F3803,
1114 PREFIX_VEX_0F3804,
1115 PREFIX_VEX_0F3805,
1116 PREFIX_VEX_0F3806,
1117 PREFIX_VEX_0F3807,
1118 PREFIX_VEX_0F3808,
1119 PREFIX_VEX_0F3809,
1120 PREFIX_VEX_0F380A,
1121 PREFIX_VEX_0F380B,
1122 PREFIX_VEX_0F380C,
1123 PREFIX_VEX_0F380D,
1124 PREFIX_VEX_0F380E,
1125 PREFIX_VEX_0F380F,
1126 PREFIX_VEX_0F3813,
1127 PREFIX_VEX_0F3816,
1128 PREFIX_VEX_0F3817,
1129 PREFIX_VEX_0F3818,
1130 PREFIX_VEX_0F3819,
1131 PREFIX_VEX_0F381A,
1132 PREFIX_VEX_0F381C,
1133 PREFIX_VEX_0F381D,
1134 PREFIX_VEX_0F381E,
1135 PREFIX_VEX_0F3820,
1136 PREFIX_VEX_0F3821,
1137 PREFIX_VEX_0F3822,
1138 PREFIX_VEX_0F3823,
1139 PREFIX_VEX_0F3824,
1140 PREFIX_VEX_0F3825,
1141 PREFIX_VEX_0F3828,
1142 PREFIX_VEX_0F3829,
1143 PREFIX_VEX_0F382A,
1144 PREFIX_VEX_0F382B,
1145 PREFIX_VEX_0F382C,
1146 PREFIX_VEX_0F382D,
1147 PREFIX_VEX_0F382E,
1148 PREFIX_VEX_0F382F,
1149 PREFIX_VEX_0F3830,
1150 PREFIX_VEX_0F3831,
1151 PREFIX_VEX_0F3832,
1152 PREFIX_VEX_0F3833,
1153 PREFIX_VEX_0F3834,
1154 PREFIX_VEX_0F3835,
1155 PREFIX_VEX_0F3836,
1156 PREFIX_VEX_0F3837,
1157 PREFIX_VEX_0F3838,
1158 PREFIX_VEX_0F3839,
1159 PREFIX_VEX_0F383A,
1160 PREFIX_VEX_0F383B,
1161 PREFIX_VEX_0F383C,
1162 PREFIX_VEX_0F383D,
1163 PREFIX_VEX_0F383E,
1164 PREFIX_VEX_0F383F,
1165 PREFIX_VEX_0F3840,
1166 PREFIX_VEX_0F3841,
1167 PREFIX_VEX_0F3845,
1168 PREFIX_VEX_0F3846,
1169 PREFIX_VEX_0F3847,
1170 PREFIX_VEX_0F3858,
1171 PREFIX_VEX_0F3859,
1172 PREFIX_VEX_0F385A,
1173 PREFIX_VEX_0F3878,
1174 PREFIX_VEX_0F3879,
1175 PREFIX_VEX_0F388C,
1176 PREFIX_VEX_0F388E,
1177 PREFIX_VEX_0F3890,
1178 PREFIX_VEX_0F3891,
1179 PREFIX_VEX_0F3892,
1180 PREFIX_VEX_0F3893,
1181 PREFIX_VEX_0F3896,
1182 PREFIX_VEX_0F3897,
1183 PREFIX_VEX_0F3898,
1184 PREFIX_VEX_0F3899,
1185 PREFIX_VEX_0F389A,
1186 PREFIX_VEX_0F389B,
1187 PREFIX_VEX_0F389C,
1188 PREFIX_VEX_0F389D,
1189 PREFIX_VEX_0F389E,
1190 PREFIX_VEX_0F389F,
1191 PREFIX_VEX_0F38A6,
1192 PREFIX_VEX_0F38A7,
1193 PREFIX_VEX_0F38A8,
1194 PREFIX_VEX_0F38A9,
1195 PREFIX_VEX_0F38AA,
1196 PREFIX_VEX_0F38AB,
1197 PREFIX_VEX_0F38AC,
1198 PREFIX_VEX_0F38AD,
1199 PREFIX_VEX_0F38AE,
1200 PREFIX_VEX_0F38AF,
1201 PREFIX_VEX_0F38B6,
1202 PREFIX_VEX_0F38B7,
1203 PREFIX_VEX_0F38B8,
1204 PREFIX_VEX_0F38B9,
1205 PREFIX_VEX_0F38BA,
1206 PREFIX_VEX_0F38BB,
1207 PREFIX_VEX_0F38BC,
1208 PREFIX_VEX_0F38BD,
1209 PREFIX_VEX_0F38BE,
1210 PREFIX_VEX_0F38BF,
1211 PREFIX_VEX_0F38DB,
1212 PREFIX_VEX_0F38DC,
1213 PREFIX_VEX_0F38DD,
1214 PREFIX_VEX_0F38DE,
1215 PREFIX_VEX_0F38DF,
1216 PREFIX_VEX_0F38F2,
1217 PREFIX_VEX_0F38F3_REG_1,
1218 PREFIX_VEX_0F38F3_REG_2,
1219 PREFIX_VEX_0F38F3_REG_3,
1220 PREFIX_VEX_0F38F5,
1221 PREFIX_VEX_0F38F6,
1222 PREFIX_VEX_0F38F7,
1223 PREFIX_VEX_0F3A00,
1224 PREFIX_VEX_0F3A01,
1225 PREFIX_VEX_0F3A02,
1226 PREFIX_VEX_0F3A04,
1227 PREFIX_VEX_0F3A05,
1228 PREFIX_VEX_0F3A06,
1229 PREFIX_VEX_0F3A08,
1230 PREFIX_VEX_0F3A09,
1231 PREFIX_VEX_0F3A0A,
1232 PREFIX_VEX_0F3A0B,
1233 PREFIX_VEX_0F3A0C,
1234 PREFIX_VEX_0F3A0D,
1235 PREFIX_VEX_0F3A0E,
1236 PREFIX_VEX_0F3A0F,
1237 PREFIX_VEX_0F3A14,
1238 PREFIX_VEX_0F3A15,
1239 PREFIX_VEX_0F3A16,
1240 PREFIX_VEX_0F3A17,
1241 PREFIX_VEX_0F3A18,
1242 PREFIX_VEX_0F3A19,
1243 PREFIX_VEX_0F3A1D,
1244 PREFIX_VEX_0F3A20,
1245 PREFIX_VEX_0F3A21,
1246 PREFIX_VEX_0F3A22,
1247 PREFIX_VEX_0F3A30,
1248 PREFIX_VEX_0F3A31,
1249 PREFIX_VEX_0F3A32,
1250 PREFIX_VEX_0F3A33,
1251 PREFIX_VEX_0F3A38,
1252 PREFIX_VEX_0F3A39,
1253 PREFIX_VEX_0F3A40,
1254 PREFIX_VEX_0F3A41,
1255 PREFIX_VEX_0F3A42,
1256 PREFIX_VEX_0F3A44,
1257 PREFIX_VEX_0F3A46,
1258 PREFIX_VEX_0F3A48,
1259 PREFIX_VEX_0F3A49,
1260 PREFIX_VEX_0F3A4A,
1261 PREFIX_VEX_0F3A4B,
1262 PREFIX_VEX_0F3A4C,
1263 PREFIX_VEX_0F3A5C,
1264 PREFIX_VEX_0F3A5D,
1265 PREFIX_VEX_0F3A5E,
1266 PREFIX_VEX_0F3A5F,
1267 PREFIX_VEX_0F3A60,
1268 PREFIX_VEX_0F3A61,
1269 PREFIX_VEX_0F3A62,
1270 PREFIX_VEX_0F3A63,
1271 PREFIX_VEX_0F3A68,
1272 PREFIX_VEX_0F3A69,
1273 PREFIX_VEX_0F3A6A,
1274 PREFIX_VEX_0F3A6B,
1275 PREFIX_VEX_0F3A6C,
1276 PREFIX_VEX_0F3A6D,
1277 PREFIX_VEX_0F3A6E,
1278 PREFIX_VEX_0F3A6F,
1279 PREFIX_VEX_0F3A78,
1280 PREFIX_VEX_0F3A79,
1281 PREFIX_VEX_0F3A7A,
1282 PREFIX_VEX_0F3A7B,
1283 PREFIX_VEX_0F3A7C,
1284 PREFIX_VEX_0F3A7D,
1285 PREFIX_VEX_0F3A7E,
1286 PREFIX_VEX_0F3A7F,
1287 PREFIX_VEX_0F3ADF,
1288 PREFIX_VEX_0F3AF0,
1289
1290 PREFIX_EVEX_0F10,
1291 PREFIX_EVEX_0F11,
1292 PREFIX_EVEX_0F12,
1293 PREFIX_EVEX_0F13,
1294 PREFIX_EVEX_0F14,
1295 PREFIX_EVEX_0F15,
1296 PREFIX_EVEX_0F16,
1297 PREFIX_EVEX_0F17,
1298 PREFIX_EVEX_0F28,
1299 PREFIX_EVEX_0F29,
1300 PREFIX_EVEX_0F2A,
1301 PREFIX_EVEX_0F2B,
1302 PREFIX_EVEX_0F2C,
1303 PREFIX_EVEX_0F2D,
1304 PREFIX_EVEX_0F2E,
1305 PREFIX_EVEX_0F2F,
1306 PREFIX_EVEX_0F51,
1307 PREFIX_EVEX_0F58,
1308 PREFIX_EVEX_0F59,
1309 PREFIX_EVEX_0F5A,
1310 PREFIX_EVEX_0F5B,
1311 PREFIX_EVEX_0F5C,
1312 PREFIX_EVEX_0F5D,
1313 PREFIX_EVEX_0F5E,
1314 PREFIX_EVEX_0F5F,
1315 PREFIX_EVEX_0F60,
1316 PREFIX_EVEX_0F61,
1317 PREFIX_EVEX_0F62,
1318 PREFIX_EVEX_0F63,
1319 PREFIX_EVEX_0F64,
1320 PREFIX_EVEX_0F65,
1321 PREFIX_EVEX_0F66,
1322 PREFIX_EVEX_0F67,
1323 PREFIX_EVEX_0F68,
1324 PREFIX_EVEX_0F69,
1325 PREFIX_EVEX_0F6A,
1326 PREFIX_EVEX_0F6B,
1327 PREFIX_EVEX_0F6C,
1328 PREFIX_EVEX_0F6D,
1329 PREFIX_EVEX_0F6E,
1330 PREFIX_EVEX_0F6F,
1331 PREFIX_EVEX_0F70,
1332 PREFIX_EVEX_0F71_REG_2,
1333 PREFIX_EVEX_0F71_REG_4,
1334 PREFIX_EVEX_0F71_REG_6,
1335 PREFIX_EVEX_0F72_REG_0,
1336 PREFIX_EVEX_0F72_REG_1,
1337 PREFIX_EVEX_0F72_REG_2,
1338 PREFIX_EVEX_0F72_REG_4,
1339 PREFIX_EVEX_0F72_REG_6,
1340 PREFIX_EVEX_0F73_REG_2,
1341 PREFIX_EVEX_0F73_REG_3,
1342 PREFIX_EVEX_0F73_REG_6,
1343 PREFIX_EVEX_0F73_REG_7,
1344 PREFIX_EVEX_0F74,
1345 PREFIX_EVEX_0F75,
1346 PREFIX_EVEX_0F76,
1347 PREFIX_EVEX_0F78,
1348 PREFIX_EVEX_0F79,
1349 PREFIX_EVEX_0F7A,
1350 PREFIX_EVEX_0F7B,
1351 PREFIX_EVEX_0F7E,
1352 PREFIX_EVEX_0F7F,
1353 PREFIX_EVEX_0FC2,
1354 PREFIX_EVEX_0FC4,
1355 PREFIX_EVEX_0FC5,
1356 PREFIX_EVEX_0FC6,
1357 PREFIX_EVEX_0FD1,
1358 PREFIX_EVEX_0FD2,
1359 PREFIX_EVEX_0FD3,
1360 PREFIX_EVEX_0FD4,
1361 PREFIX_EVEX_0FD5,
1362 PREFIX_EVEX_0FD6,
1363 PREFIX_EVEX_0FD8,
1364 PREFIX_EVEX_0FD9,
1365 PREFIX_EVEX_0FDA,
1366 PREFIX_EVEX_0FDB,
1367 PREFIX_EVEX_0FDC,
1368 PREFIX_EVEX_0FDD,
1369 PREFIX_EVEX_0FDE,
1370 PREFIX_EVEX_0FDF,
1371 PREFIX_EVEX_0FE0,
1372 PREFIX_EVEX_0FE1,
1373 PREFIX_EVEX_0FE2,
1374 PREFIX_EVEX_0FE3,
1375 PREFIX_EVEX_0FE4,
1376 PREFIX_EVEX_0FE5,
1377 PREFIX_EVEX_0FE6,
1378 PREFIX_EVEX_0FE7,
1379 PREFIX_EVEX_0FE8,
1380 PREFIX_EVEX_0FE9,
1381 PREFIX_EVEX_0FEA,
1382 PREFIX_EVEX_0FEB,
1383 PREFIX_EVEX_0FEC,
1384 PREFIX_EVEX_0FED,
1385 PREFIX_EVEX_0FEE,
1386 PREFIX_EVEX_0FEF,
1387 PREFIX_EVEX_0FF1,
1388 PREFIX_EVEX_0FF2,
1389 PREFIX_EVEX_0FF3,
1390 PREFIX_EVEX_0FF4,
1391 PREFIX_EVEX_0FF5,
1392 PREFIX_EVEX_0FF6,
1393 PREFIX_EVEX_0FF8,
1394 PREFIX_EVEX_0FF9,
1395 PREFIX_EVEX_0FFA,
1396 PREFIX_EVEX_0FFB,
1397 PREFIX_EVEX_0FFC,
1398 PREFIX_EVEX_0FFD,
1399 PREFIX_EVEX_0FFE,
1400 PREFIX_EVEX_0F3800,
1401 PREFIX_EVEX_0F3804,
1402 PREFIX_EVEX_0F380B,
1403 PREFIX_EVEX_0F380C,
1404 PREFIX_EVEX_0F380D,
1405 PREFIX_EVEX_0F3810,
1406 PREFIX_EVEX_0F3811,
1407 PREFIX_EVEX_0F3812,
1408 PREFIX_EVEX_0F3813,
1409 PREFIX_EVEX_0F3814,
1410 PREFIX_EVEX_0F3815,
1411 PREFIX_EVEX_0F3816,
1412 PREFIX_EVEX_0F3818,
1413 PREFIX_EVEX_0F3819,
1414 PREFIX_EVEX_0F381A,
1415 PREFIX_EVEX_0F381B,
1416 PREFIX_EVEX_0F381C,
1417 PREFIX_EVEX_0F381D,
1418 PREFIX_EVEX_0F381E,
1419 PREFIX_EVEX_0F381F,
1420 PREFIX_EVEX_0F3820,
1421 PREFIX_EVEX_0F3821,
1422 PREFIX_EVEX_0F3822,
1423 PREFIX_EVEX_0F3823,
1424 PREFIX_EVEX_0F3824,
1425 PREFIX_EVEX_0F3825,
1426 PREFIX_EVEX_0F3826,
1427 PREFIX_EVEX_0F3827,
1428 PREFIX_EVEX_0F3828,
1429 PREFIX_EVEX_0F3829,
1430 PREFIX_EVEX_0F382A,
1431 PREFIX_EVEX_0F382B,
1432 PREFIX_EVEX_0F382C,
1433 PREFIX_EVEX_0F382D,
1434 PREFIX_EVEX_0F3830,
1435 PREFIX_EVEX_0F3831,
1436 PREFIX_EVEX_0F3832,
1437 PREFIX_EVEX_0F3833,
1438 PREFIX_EVEX_0F3834,
1439 PREFIX_EVEX_0F3835,
1440 PREFIX_EVEX_0F3836,
1441 PREFIX_EVEX_0F3837,
1442 PREFIX_EVEX_0F3838,
1443 PREFIX_EVEX_0F3839,
1444 PREFIX_EVEX_0F383A,
1445 PREFIX_EVEX_0F383B,
1446 PREFIX_EVEX_0F383C,
1447 PREFIX_EVEX_0F383D,
1448 PREFIX_EVEX_0F383E,
1449 PREFIX_EVEX_0F383F,
1450 PREFIX_EVEX_0F3840,
1451 PREFIX_EVEX_0F3842,
1452 PREFIX_EVEX_0F3843,
1453 PREFIX_EVEX_0F3844,
1454 PREFIX_EVEX_0F3845,
1455 PREFIX_EVEX_0F3846,
1456 PREFIX_EVEX_0F3847,
1457 PREFIX_EVEX_0F384C,
1458 PREFIX_EVEX_0F384D,
1459 PREFIX_EVEX_0F384E,
1460 PREFIX_EVEX_0F384F,
1461 PREFIX_EVEX_0F3858,
1462 PREFIX_EVEX_0F3859,
1463 PREFIX_EVEX_0F385A,
1464 PREFIX_EVEX_0F385B,
1465 PREFIX_EVEX_0F3864,
1466 PREFIX_EVEX_0F3865,
1467 PREFIX_EVEX_0F3866,
1468 PREFIX_EVEX_0F3875,
1469 PREFIX_EVEX_0F3876,
1470 PREFIX_EVEX_0F3877,
1471 PREFIX_EVEX_0F3878,
1472 PREFIX_EVEX_0F3879,
1473 PREFIX_EVEX_0F387A,
1474 PREFIX_EVEX_0F387B,
1475 PREFIX_EVEX_0F387C,
1476 PREFIX_EVEX_0F387D,
1477 PREFIX_EVEX_0F387E,
1478 PREFIX_EVEX_0F387F,
1479 PREFIX_EVEX_0F3888,
1480 PREFIX_EVEX_0F3889,
1481 PREFIX_EVEX_0F388A,
1482 PREFIX_EVEX_0F388B,
1483 PREFIX_EVEX_0F388D,
1484 PREFIX_EVEX_0F3890,
1485 PREFIX_EVEX_0F3891,
1486 PREFIX_EVEX_0F3892,
1487 PREFIX_EVEX_0F3893,
1488 PREFIX_EVEX_0F3896,
1489 PREFIX_EVEX_0F3897,
1490 PREFIX_EVEX_0F3898,
1491 PREFIX_EVEX_0F3899,
1492 PREFIX_EVEX_0F389A,
1493 PREFIX_EVEX_0F389B,
1494 PREFIX_EVEX_0F389C,
1495 PREFIX_EVEX_0F389D,
1496 PREFIX_EVEX_0F389E,
1497 PREFIX_EVEX_0F389F,
1498 PREFIX_EVEX_0F38A0,
1499 PREFIX_EVEX_0F38A1,
1500 PREFIX_EVEX_0F38A2,
1501 PREFIX_EVEX_0F38A3,
1502 PREFIX_EVEX_0F38A6,
1503 PREFIX_EVEX_0F38A7,
1504 PREFIX_EVEX_0F38A8,
1505 PREFIX_EVEX_0F38A9,
1506 PREFIX_EVEX_0F38AA,
1507 PREFIX_EVEX_0F38AB,
1508 PREFIX_EVEX_0F38AC,
1509 PREFIX_EVEX_0F38AD,
1510 PREFIX_EVEX_0F38AE,
1511 PREFIX_EVEX_0F38AF,
1512 PREFIX_EVEX_0F38B6,
1513 PREFIX_EVEX_0F38B7,
1514 PREFIX_EVEX_0F38B8,
1515 PREFIX_EVEX_0F38B9,
1516 PREFIX_EVEX_0F38BA,
1517 PREFIX_EVEX_0F38BB,
1518 PREFIX_EVEX_0F38BC,
1519 PREFIX_EVEX_0F38BD,
1520 PREFIX_EVEX_0F38BE,
1521 PREFIX_EVEX_0F38BF,
1522 PREFIX_EVEX_0F38C4,
1523 PREFIX_EVEX_0F38C6_REG_1,
1524 PREFIX_EVEX_0F38C6_REG_2,
1525 PREFIX_EVEX_0F38C6_REG_5,
1526 PREFIX_EVEX_0F38C6_REG_6,
1527 PREFIX_EVEX_0F38C7_REG_1,
1528 PREFIX_EVEX_0F38C7_REG_2,
1529 PREFIX_EVEX_0F38C7_REG_5,
1530 PREFIX_EVEX_0F38C7_REG_6,
1531 PREFIX_EVEX_0F38C8,
1532 PREFIX_EVEX_0F38CA,
1533 PREFIX_EVEX_0F38CB,
1534 PREFIX_EVEX_0F38CC,
1535 PREFIX_EVEX_0F38CD,
1536
1537 PREFIX_EVEX_0F3A00,
1538 PREFIX_EVEX_0F3A01,
1539 PREFIX_EVEX_0F3A03,
1540 PREFIX_EVEX_0F3A04,
1541 PREFIX_EVEX_0F3A05,
1542 PREFIX_EVEX_0F3A08,
1543 PREFIX_EVEX_0F3A09,
1544 PREFIX_EVEX_0F3A0A,
1545 PREFIX_EVEX_0F3A0B,
1546 PREFIX_EVEX_0F3A0F,
1547 PREFIX_EVEX_0F3A14,
1548 PREFIX_EVEX_0F3A15,
1549 PREFIX_EVEX_0F3A17,
1550 PREFIX_EVEX_0F3A18,
1551 PREFIX_EVEX_0F3A19,
1552 PREFIX_EVEX_0F3A1A,
1553 PREFIX_EVEX_0F3A1B,
1554 PREFIX_EVEX_0F3A1D,
1555 PREFIX_EVEX_0F3A1E,
1556 PREFIX_EVEX_0F3A1F,
1557 PREFIX_EVEX_0F3A20,
1558 PREFIX_EVEX_0F3A21,
1559 PREFIX_EVEX_0F3A23,
1560 PREFIX_EVEX_0F3A25,
1561 PREFIX_EVEX_0F3A26,
1562 PREFIX_EVEX_0F3A27,
1563 PREFIX_EVEX_0F3A38,
1564 PREFIX_EVEX_0F3A39,
1565 PREFIX_EVEX_0F3A3A,
1566 PREFIX_EVEX_0F3A3B,
1567 PREFIX_EVEX_0F3A3E,
1568 PREFIX_EVEX_0F3A3F,
1569 PREFIX_EVEX_0F3A42,
1570 PREFIX_EVEX_0F3A43,
1571 PREFIX_EVEX_0F3A54,
1572 PREFIX_EVEX_0F3A55
1573 };
1574
1575 enum
1576 {
1577 X86_64_06 = 0,
1578 X86_64_07,
1579 X86_64_0D,
1580 X86_64_16,
1581 X86_64_17,
1582 X86_64_1E,
1583 X86_64_1F,
1584 X86_64_27,
1585 X86_64_2F,
1586 X86_64_37,
1587 X86_64_3F,
1588 X86_64_60,
1589 X86_64_61,
1590 X86_64_62,
1591 X86_64_63,
1592 X86_64_6D,
1593 X86_64_6F,
1594 X86_64_9A,
1595 X86_64_C4,
1596 X86_64_C5,
1597 X86_64_CE,
1598 X86_64_D4,
1599 X86_64_D5,
1600 X86_64_EA,
1601 X86_64_0F01_REG_0,
1602 X86_64_0F01_REG_1,
1603 X86_64_0F01_REG_2,
1604 X86_64_0F01_REG_3
1605 };
1606
1607 enum
1608 {
1609 THREE_BYTE_0F38 = 0,
1610 THREE_BYTE_0F3A,
1611 THREE_BYTE_0F7A
1612 };
1613
1614 enum
1615 {
1616 XOP_08 = 0,
1617 XOP_09,
1618 XOP_0A
1619 };
1620
1621 enum
1622 {
1623 VEX_0F = 0,
1624 VEX_0F38,
1625 VEX_0F3A
1626 };
1627
1628 enum
1629 {
1630 EVEX_0F = 0,
1631 EVEX_0F38,
1632 EVEX_0F3A
1633 };
1634
1635 enum
1636 {
1637 VEX_LEN_0F10_P_1 = 0,
1638 VEX_LEN_0F10_P_3,
1639 VEX_LEN_0F11_P_1,
1640 VEX_LEN_0F11_P_3,
1641 VEX_LEN_0F12_P_0_M_0,
1642 VEX_LEN_0F12_P_0_M_1,
1643 VEX_LEN_0F12_P_2,
1644 VEX_LEN_0F13_M_0,
1645 VEX_LEN_0F16_P_0_M_0,
1646 VEX_LEN_0F16_P_0_M_1,
1647 VEX_LEN_0F16_P_2,
1648 VEX_LEN_0F17_M_0,
1649 VEX_LEN_0F2A_P_1,
1650 VEX_LEN_0F2A_P_3,
1651 VEX_LEN_0F2C_P_1,
1652 VEX_LEN_0F2C_P_3,
1653 VEX_LEN_0F2D_P_1,
1654 VEX_LEN_0F2D_P_3,
1655 VEX_LEN_0F2E_P_0,
1656 VEX_LEN_0F2E_P_2,
1657 VEX_LEN_0F2F_P_0,
1658 VEX_LEN_0F2F_P_2,
1659 VEX_LEN_0F41_P_0,
1660 VEX_LEN_0F41_P_2,
1661 VEX_LEN_0F42_P_0,
1662 VEX_LEN_0F42_P_2,
1663 VEX_LEN_0F44_P_0,
1664 VEX_LEN_0F44_P_2,
1665 VEX_LEN_0F45_P_0,
1666 VEX_LEN_0F45_P_2,
1667 VEX_LEN_0F46_P_0,
1668 VEX_LEN_0F46_P_2,
1669 VEX_LEN_0F47_P_0,
1670 VEX_LEN_0F47_P_2,
1671 VEX_LEN_0F4A_P_0,
1672 VEX_LEN_0F4A_P_2,
1673 VEX_LEN_0F4B_P_0,
1674 VEX_LEN_0F4B_P_2,
1675 VEX_LEN_0F51_P_1,
1676 VEX_LEN_0F51_P_3,
1677 VEX_LEN_0F52_P_1,
1678 VEX_LEN_0F53_P_1,
1679 VEX_LEN_0F58_P_1,
1680 VEX_LEN_0F58_P_3,
1681 VEX_LEN_0F59_P_1,
1682 VEX_LEN_0F59_P_3,
1683 VEX_LEN_0F5A_P_1,
1684 VEX_LEN_0F5A_P_3,
1685 VEX_LEN_0F5C_P_1,
1686 VEX_LEN_0F5C_P_3,
1687 VEX_LEN_0F5D_P_1,
1688 VEX_LEN_0F5D_P_3,
1689 VEX_LEN_0F5E_P_1,
1690 VEX_LEN_0F5E_P_3,
1691 VEX_LEN_0F5F_P_1,
1692 VEX_LEN_0F5F_P_3,
1693 VEX_LEN_0F6E_P_2,
1694 VEX_LEN_0F7E_P_1,
1695 VEX_LEN_0F7E_P_2,
1696 VEX_LEN_0F90_P_0,
1697 VEX_LEN_0F90_P_2,
1698 VEX_LEN_0F91_P_0,
1699 VEX_LEN_0F91_P_2,
1700 VEX_LEN_0F92_P_0,
1701 VEX_LEN_0F92_P_3,
1702 VEX_LEN_0F93_P_0,
1703 VEX_LEN_0F93_P_3,
1704 VEX_LEN_0F98_P_0,
1705 VEX_LEN_0F98_P_2,
1706 VEX_LEN_0F99_P_0,
1707 VEX_LEN_0F99_P_2,
1708 VEX_LEN_0FAE_R_2_M_0,
1709 VEX_LEN_0FAE_R_3_M_0,
1710 VEX_LEN_0FC2_P_1,
1711 VEX_LEN_0FC2_P_3,
1712 VEX_LEN_0FC4_P_2,
1713 VEX_LEN_0FC5_P_2,
1714 VEX_LEN_0FD6_P_2,
1715 VEX_LEN_0FF7_P_2,
1716 VEX_LEN_0F3816_P_2,
1717 VEX_LEN_0F3819_P_2,
1718 VEX_LEN_0F381A_P_2_M_0,
1719 VEX_LEN_0F3836_P_2,
1720 VEX_LEN_0F3841_P_2,
1721 VEX_LEN_0F385A_P_2_M_0,
1722 VEX_LEN_0F38DB_P_2,
1723 VEX_LEN_0F38DC_P_2,
1724 VEX_LEN_0F38DD_P_2,
1725 VEX_LEN_0F38DE_P_2,
1726 VEX_LEN_0F38DF_P_2,
1727 VEX_LEN_0F38F2_P_0,
1728 VEX_LEN_0F38F3_R_1_P_0,
1729 VEX_LEN_0F38F3_R_2_P_0,
1730 VEX_LEN_0F38F3_R_3_P_0,
1731 VEX_LEN_0F38F5_P_0,
1732 VEX_LEN_0F38F5_P_1,
1733 VEX_LEN_0F38F5_P_3,
1734 VEX_LEN_0F38F6_P_3,
1735 VEX_LEN_0F38F7_P_0,
1736 VEX_LEN_0F38F7_P_1,
1737 VEX_LEN_0F38F7_P_2,
1738 VEX_LEN_0F38F7_P_3,
1739 VEX_LEN_0F3A00_P_2,
1740 VEX_LEN_0F3A01_P_2,
1741 VEX_LEN_0F3A06_P_2,
1742 VEX_LEN_0F3A0A_P_2,
1743 VEX_LEN_0F3A0B_P_2,
1744 VEX_LEN_0F3A14_P_2,
1745 VEX_LEN_0F3A15_P_2,
1746 VEX_LEN_0F3A16_P_2,
1747 VEX_LEN_0F3A17_P_2,
1748 VEX_LEN_0F3A18_P_2,
1749 VEX_LEN_0F3A19_P_2,
1750 VEX_LEN_0F3A20_P_2,
1751 VEX_LEN_0F3A21_P_2,
1752 VEX_LEN_0F3A22_P_2,
1753 VEX_LEN_0F3A30_P_2,
1754 VEX_LEN_0F3A31_P_2,
1755 VEX_LEN_0F3A32_P_2,
1756 VEX_LEN_0F3A33_P_2,
1757 VEX_LEN_0F3A38_P_2,
1758 VEX_LEN_0F3A39_P_2,
1759 VEX_LEN_0F3A41_P_2,
1760 VEX_LEN_0F3A44_P_2,
1761 VEX_LEN_0F3A46_P_2,
1762 VEX_LEN_0F3A60_P_2,
1763 VEX_LEN_0F3A61_P_2,
1764 VEX_LEN_0F3A62_P_2,
1765 VEX_LEN_0F3A63_P_2,
1766 VEX_LEN_0F3A6A_P_2,
1767 VEX_LEN_0F3A6B_P_2,
1768 VEX_LEN_0F3A6E_P_2,
1769 VEX_LEN_0F3A6F_P_2,
1770 VEX_LEN_0F3A7A_P_2,
1771 VEX_LEN_0F3A7B_P_2,
1772 VEX_LEN_0F3A7E_P_2,
1773 VEX_LEN_0F3A7F_P_2,
1774 VEX_LEN_0F3ADF_P_2,
1775 VEX_LEN_0F3AF0_P_3,
1776 VEX_LEN_0FXOP_08_CC,
1777 VEX_LEN_0FXOP_08_CD,
1778 VEX_LEN_0FXOP_08_CE,
1779 VEX_LEN_0FXOP_08_CF,
1780 VEX_LEN_0FXOP_08_EC,
1781 VEX_LEN_0FXOP_08_ED,
1782 VEX_LEN_0FXOP_08_EE,
1783 VEX_LEN_0FXOP_08_EF,
1784 VEX_LEN_0FXOP_09_80,
1785 VEX_LEN_0FXOP_09_81
1786 };
1787
1788 enum
1789 {
1790 VEX_W_0F10_P_0 = 0,
1791 VEX_W_0F10_P_1,
1792 VEX_W_0F10_P_2,
1793 VEX_W_0F10_P_3,
1794 VEX_W_0F11_P_0,
1795 VEX_W_0F11_P_1,
1796 VEX_W_0F11_P_2,
1797 VEX_W_0F11_P_3,
1798 VEX_W_0F12_P_0_M_0,
1799 VEX_W_0F12_P_0_M_1,
1800 VEX_W_0F12_P_1,
1801 VEX_W_0F12_P_2,
1802 VEX_W_0F12_P_3,
1803 VEX_W_0F13_M_0,
1804 VEX_W_0F14,
1805 VEX_W_0F15,
1806 VEX_W_0F16_P_0_M_0,
1807 VEX_W_0F16_P_0_M_1,
1808 VEX_W_0F16_P_1,
1809 VEX_W_0F16_P_2,
1810 VEX_W_0F17_M_0,
1811 VEX_W_0F28,
1812 VEX_W_0F29,
1813 VEX_W_0F2B_M_0,
1814 VEX_W_0F2E_P_0,
1815 VEX_W_0F2E_P_2,
1816 VEX_W_0F2F_P_0,
1817 VEX_W_0F2F_P_2,
1818 VEX_W_0F41_P_0_LEN_1,
1819 VEX_W_0F41_P_2_LEN_1,
1820 VEX_W_0F42_P_0_LEN_1,
1821 VEX_W_0F42_P_2_LEN_1,
1822 VEX_W_0F44_P_0_LEN_0,
1823 VEX_W_0F44_P_2_LEN_0,
1824 VEX_W_0F45_P_0_LEN_1,
1825 VEX_W_0F45_P_2_LEN_1,
1826 VEX_W_0F46_P_0_LEN_1,
1827 VEX_W_0F46_P_2_LEN_1,
1828 VEX_W_0F47_P_0_LEN_1,
1829 VEX_W_0F47_P_2_LEN_1,
1830 VEX_W_0F4A_P_0_LEN_1,
1831 VEX_W_0F4A_P_2_LEN_1,
1832 VEX_W_0F4B_P_0_LEN_1,
1833 VEX_W_0F4B_P_2_LEN_1,
1834 VEX_W_0F50_M_0,
1835 VEX_W_0F51_P_0,
1836 VEX_W_0F51_P_1,
1837 VEX_W_0F51_P_2,
1838 VEX_W_0F51_P_3,
1839 VEX_W_0F52_P_0,
1840 VEX_W_0F52_P_1,
1841 VEX_W_0F53_P_0,
1842 VEX_W_0F53_P_1,
1843 VEX_W_0F58_P_0,
1844 VEX_W_0F58_P_1,
1845 VEX_W_0F58_P_2,
1846 VEX_W_0F58_P_3,
1847 VEX_W_0F59_P_0,
1848 VEX_W_0F59_P_1,
1849 VEX_W_0F59_P_2,
1850 VEX_W_0F59_P_3,
1851 VEX_W_0F5A_P_0,
1852 VEX_W_0F5A_P_1,
1853 VEX_W_0F5A_P_3,
1854 VEX_W_0F5B_P_0,
1855 VEX_W_0F5B_P_1,
1856 VEX_W_0F5B_P_2,
1857 VEX_W_0F5C_P_0,
1858 VEX_W_0F5C_P_1,
1859 VEX_W_0F5C_P_2,
1860 VEX_W_0F5C_P_3,
1861 VEX_W_0F5D_P_0,
1862 VEX_W_0F5D_P_1,
1863 VEX_W_0F5D_P_2,
1864 VEX_W_0F5D_P_3,
1865 VEX_W_0F5E_P_0,
1866 VEX_W_0F5E_P_1,
1867 VEX_W_0F5E_P_2,
1868 VEX_W_0F5E_P_3,
1869 VEX_W_0F5F_P_0,
1870 VEX_W_0F5F_P_1,
1871 VEX_W_0F5F_P_2,
1872 VEX_W_0F5F_P_3,
1873 VEX_W_0F60_P_2,
1874 VEX_W_0F61_P_2,
1875 VEX_W_0F62_P_2,
1876 VEX_W_0F63_P_2,
1877 VEX_W_0F64_P_2,
1878 VEX_W_0F65_P_2,
1879 VEX_W_0F66_P_2,
1880 VEX_W_0F67_P_2,
1881 VEX_W_0F68_P_2,
1882 VEX_W_0F69_P_2,
1883 VEX_W_0F6A_P_2,
1884 VEX_W_0F6B_P_2,
1885 VEX_W_0F6C_P_2,
1886 VEX_W_0F6D_P_2,
1887 VEX_W_0F6F_P_1,
1888 VEX_W_0F6F_P_2,
1889 VEX_W_0F70_P_1,
1890 VEX_W_0F70_P_2,
1891 VEX_W_0F70_P_3,
1892 VEX_W_0F71_R_2_P_2,
1893 VEX_W_0F71_R_4_P_2,
1894 VEX_W_0F71_R_6_P_2,
1895 VEX_W_0F72_R_2_P_2,
1896 VEX_W_0F72_R_4_P_2,
1897 VEX_W_0F72_R_6_P_2,
1898 VEX_W_0F73_R_2_P_2,
1899 VEX_W_0F73_R_3_P_2,
1900 VEX_W_0F73_R_6_P_2,
1901 VEX_W_0F73_R_7_P_2,
1902 VEX_W_0F74_P_2,
1903 VEX_W_0F75_P_2,
1904 VEX_W_0F76_P_2,
1905 VEX_W_0F77_P_0,
1906 VEX_W_0F7C_P_2,
1907 VEX_W_0F7C_P_3,
1908 VEX_W_0F7D_P_2,
1909 VEX_W_0F7D_P_3,
1910 VEX_W_0F7E_P_1,
1911 VEX_W_0F7F_P_1,
1912 VEX_W_0F7F_P_2,
1913 VEX_W_0F90_P_0_LEN_0,
1914 VEX_W_0F90_P_2_LEN_0,
1915 VEX_W_0F91_P_0_LEN_0,
1916 VEX_W_0F91_P_2_LEN_0,
1917 VEX_W_0F92_P_0_LEN_0,
1918 VEX_W_0F92_P_3_LEN_0,
1919 VEX_W_0F93_P_0_LEN_0,
1920 VEX_W_0F93_P_3_LEN_0,
1921 VEX_W_0F98_P_0_LEN_0,
1922 VEX_W_0F98_P_2_LEN_0,
1923 VEX_W_0F99_P_0_LEN_0,
1924 VEX_W_0F99_P_2_LEN_0,
1925 VEX_W_0FAE_R_2_M_0,
1926 VEX_W_0FAE_R_3_M_0,
1927 VEX_W_0FC2_P_0,
1928 VEX_W_0FC2_P_1,
1929 VEX_W_0FC2_P_2,
1930 VEX_W_0FC2_P_3,
1931 VEX_W_0FC4_P_2,
1932 VEX_W_0FC5_P_2,
1933 VEX_W_0FD0_P_2,
1934 VEX_W_0FD0_P_3,
1935 VEX_W_0FD1_P_2,
1936 VEX_W_0FD2_P_2,
1937 VEX_W_0FD3_P_2,
1938 VEX_W_0FD4_P_2,
1939 VEX_W_0FD5_P_2,
1940 VEX_W_0FD6_P_2,
1941 VEX_W_0FD7_P_2_M_1,
1942 VEX_W_0FD8_P_2,
1943 VEX_W_0FD9_P_2,
1944 VEX_W_0FDA_P_2,
1945 VEX_W_0FDB_P_2,
1946 VEX_W_0FDC_P_2,
1947 VEX_W_0FDD_P_2,
1948 VEX_W_0FDE_P_2,
1949 VEX_W_0FDF_P_2,
1950 VEX_W_0FE0_P_2,
1951 VEX_W_0FE1_P_2,
1952 VEX_W_0FE2_P_2,
1953 VEX_W_0FE3_P_2,
1954 VEX_W_0FE4_P_2,
1955 VEX_W_0FE5_P_2,
1956 VEX_W_0FE6_P_1,
1957 VEX_W_0FE6_P_2,
1958 VEX_W_0FE6_P_3,
1959 VEX_W_0FE7_P_2_M_0,
1960 VEX_W_0FE8_P_2,
1961 VEX_W_0FE9_P_2,
1962 VEX_W_0FEA_P_2,
1963 VEX_W_0FEB_P_2,
1964 VEX_W_0FEC_P_2,
1965 VEX_W_0FED_P_2,
1966 VEX_W_0FEE_P_2,
1967 VEX_W_0FEF_P_2,
1968 VEX_W_0FF0_P_3_M_0,
1969 VEX_W_0FF1_P_2,
1970 VEX_W_0FF2_P_2,
1971 VEX_W_0FF3_P_2,
1972 VEX_W_0FF4_P_2,
1973 VEX_W_0FF5_P_2,
1974 VEX_W_0FF6_P_2,
1975 VEX_W_0FF7_P_2,
1976 VEX_W_0FF8_P_2,
1977 VEX_W_0FF9_P_2,
1978 VEX_W_0FFA_P_2,
1979 VEX_W_0FFB_P_2,
1980 VEX_W_0FFC_P_2,
1981 VEX_W_0FFD_P_2,
1982 VEX_W_0FFE_P_2,
1983 VEX_W_0F3800_P_2,
1984 VEX_W_0F3801_P_2,
1985 VEX_W_0F3802_P_2,
1986 VEX_W_0F3803_P_2,
1987 VEX_W_0F3804_P_2,
1988 VEX_W_0F3805_P_2,
1989 VEX_W_0F3806_P_2,
1990 VEX_W_0F3807_P_2,
1991 VEX_W_0F3808_P_2,
1992 VEX_W_0F3809_P_2,
1993 VEX_W_0F380A_P_2,
1994 VEX_W_0F380B_P_2,
1995 VEX_W_0F380C_P_2,
1996 VEX_W_0F380D_P_2,
1997 VEX_W_0F380E_P_2,
1998 VEX_W_0F380F_P_2,
1999 VEX_W_0F3816_P_2,
2000 VEX_W_0F3817_P_2,
2001 VEX_W_0F3818_P_2,
2002 VEX_W_0F3819_P_2,
2003 VEX_W_0F381A_P_2_M_0,
2004 VEX_W_0F381C_P_2,
2005 VEX_W_0F381D_P_2,
2006 VEX_W_0F381E_P_2,
2007 VEX_W_0F3820_P_2,
2008 VEX_W_0F3821_P_2,
2009 VEX_W_0F3822_P_2,
2010 VEX_W_0F3823_P_2,
2011 VEX_W_0F3824_P_2,
2012 VEX_W_0F3825_P_2,
2013 VEX_W_0F3828_P_2,
2014 VEX_W_0F3829_P_2,
2015 VEX_W_0F382A_P_2_M_0,
2016 VEX_W_0F382B_P_2,
2017 VEX_W_0F382C_P_2_M_0,
2018 VEX_W_0F382D_P_2_M_0,
2019 VEX_W_0F382E_P_2_M_0,
2020 VEX_W_0F382F_P_2_M_0,
2021 VEX_W_0F3830_P_2,
2022 VEX_W_0F3831_P_2,
2023 VEX_W_0F3832_P_2,
2024 VEX_W_0F3833_P_2,
2025 VEX_W_0F3834_P_2,
2026 VEX_W_0F3835_P_2,
2027 VEX_W_0F3836_P_2,
2028 VEX_W_0F3837_P_2,
2029 VEX_W_0F3838_P_2,
2030 VEX_W_0F3839_P_2,
2031 VEX_W_0F383A_P_2,
2032 VEX_W_0F383B_P_2,
2033 VEX_W_0F383C_P_2,
2034 VEX_W_0F383D_P_2,
2035 VEX_W_0F383E_P_2,
2036 VEX_W_0F383F_P_2,
2037 VEX_W_0F3840_P_2,
2038 VEX_W_0F3841_P_2,
2039 VEX_W_0F3846_P_2,
2040 VEX_W_0F3858_P_2,
2041 VEX_W_0F3859_P_2,
2042 VEX_W_0F385A_P_2_M_0,
2043 VEX_W_0F3878_P_2,
2044 VEX_W_0F3879_P_2,
2045 VEX_W_0F38DB_P_2,
2046 VEX_W_0F38DC_P_2,
2047 VEX_W_0F38DD_P_2,
2048 VEX_W_0F38DE_P_2,
2049 VEX_W_0F38DF_P_2,
2050 VEX_W_0F3A00_P_2,
2051 VEX_W_0F3A01_P_2,
2052 VEX_W_0F3A02_P_2,
2053 VEX_W_0F3A04_P_2,
2054 VEX_W_0F3A05_P_2,
2055 VEX_W_0F3A06_P_2,
2056 VEX_W_0F3A08_P_2,
2057 VEX_W_0F3A09_P_2,
2058 VEX_W_0F3A0A_P_2,
2059 VEX_W_0F3A0B_P_2,
2060 VEX_W_0F3A0C_P_2,
2061 VEX_W_0F3A0D_P_2,
2062 VEX_W_0F3A0E_P_2,
2063 VEX_W_0F3A0F_P_2,
2064 VEX_W_0F3A14_P_2,
2065 VEX_W_0F3A15_P_2,
2066 VEX_W_0F3A18_P_2,
2067 VEX_W_0F3A19_P_2,
2068 VEX_W_0F3A20_P_2,
2069 VEX_W_0F3A21_P_2,
2070 VEX_W_0F3A30_P_2_LEN_0,
2071 VEX_W_0F3A31_P_2_LEN_0,
2072 VEX_W_0F3A32_P_2_LEN_0,
2073 VEX_W_0F3A33_P_2_LEN_0,
2074 VEX_W_0F3A38_P_2,
2075 VEX_W_0F3A39_P_2,
2076 VEX_W_0F3A40_P_2,
2077 VEX_W_0F3A41_P_2,
2078 VEX_W_0F3A42_P_2,
2079 VEX_W_0F3A44_P_2,
2080 VEX_W_0F3A46_P_2,
2081 VEX_W_0F3A48_P_2,
2082 VEX_W_0F3A49_P_2,
2083 VEX_W_0F3A4A_P_2,
2084 VEX_W_0F3A4B_P_2,
2085 VEX_W_0F3A4C_P_2,
2086 VEX_W_0F3A60_P_2,
2087 VEX_W_0F3A61_P_2,
2088 VEX_W_0F3A62_P_2,
2089 VEX_W_0F3A63_P_2,
2090 VEX_W_0F3ADF_P_2,
2091
2092 EVEX_W_0F10_P_0,
2093 EVEX_W_0F10_P_1_M_0,
2094 EVEX_W_0F10_P_1_M_1,
2095 EVEX_W_0F10_P_2,
2096 EVEX_W_0F10_P_3_M_0,
2097 EVEX_W_0F10_P_3_M_1,
2098 EVEX_W_0F11_P_0,
2099 EVEX_W_0F11_P_1_M_0,
2100 EVEX_W_0F11_P_1_M_1,
2101 EVEX_W_0F11_P_2,
2102 EVEX_W_0F11_P_3_M_0,
2103 EVEX_W_0F11_P_3_M_1,
2104 EVEX_W_0F12_P_0_M_0,
2105 EVEX_W_0F12_P_0_M_1,
2106 EVEX_W_0F12_P_1,
2107 EVEX_W_0F12_P_2,
2108 EVEX_W_0F12_P_3,
2109 EVEX_W_0F13_P_0,
2110 EVEX_W_0F13_P_2,
2111 EVEX_W_0F14_P_0,
2112 EVEX_W_0F14_P_2,
2113 EVEX_W_0F15_P_0,
2114 EVEX_W_0F15_P_2,
2115 EVEX_W_0F16_P_0_M_0,
2116 EVEX_W_0F16_P_0_M_1,
2117 EVEX_W_0F16_P_1,
2118 EVEX_W_0F16_P_2,
2119 EVEX_W_0F17_P_0,
2120 EVEX_W_0F17_P_2,
2121 EVEX_W_0F28_P_0,
2122 EVEX_W_0F28_P_2,
2123 EVEX_W_0F29_P_0,
2124 EVEX_W_0F29_P_2,
2125 EVEX_W_0F2A_P_1,
2126 EVEX_W_0F2A_P_3,
2127 EVEX_W_0F2B_P_0,
2128 EVEX_W_0F2B_P_2,
2129 EVEX_W_0F2E_P_0,
2130 EVEX_W_0F2E_P_2,
2131 EVEX_W_0F2F_P_0,
2132 EVEX_W_0F2F_P_2,
2133 EVEX_W_0F51_P_0,
2134 EVEX_W_0F51_P_1,
2135 EVEX_W_0F51_P_2,
2136 EVEX_W_0F51_P_3,
2137 EVEX_W_0F58_P_0,
2138 EVEX_W_0F58_P_1,
2139 EVEX_W_0F58_P_2,
2140 EVEX_W_0F58_P_3,
2141 EVEX_W_0F59_P_0,
2142 EVEX_W_0F59_P_1,
2143 EVEX_W_0F59_P_2,
2144 EVEX_W_0F59_P_3,
2145 EVEX_W_0F5A_P_0,
2146 EVEX_W_0F5A_P_1,
2147 EVEX_W_0F5A_P_2,
2148 EVEX_W_0F5A_P_3,
2149 EVEX_W_0F5B_P_0,
2150 EVEX_W_0F5B_P_1,
2151 EVEX_W_0F5B_P_2,
2152 EVEX_W_0F5C_P_0,
2153 EVEX_W_0F5C_P_1,
2154 EVEX_W_0F5C_P_2,
2155 EVEX_W_0F5C_P_3,
2156 EVEX_W_0F5D_P_0,
2157 EVEX_W_0F5D_P_1,
2158 EVEX_W_0F5D_P_2,
2159 EVEX_W_0F5D_P_3,
2160 EVEX_W_0F5E_P_0,
2161 EVEX_W_0F5E_P_1,
2162 EVEX_W_0F5E_P_2,
2163 EVEX_W_0F5E_P_3,
2164 EVEX_W_0F5F_P_0,
2165 EVEX_W_0F5F_P_1,
2166 EVEX_W_0F5F_P_2,
2167 EVEX_W_0F5F_P_3,
2168 EVEX_W_0F62_P_2,
2169 EVEX_W_0F66_P_2,
2170 EVEX_W_0F6A_P_2,
2171 EVEX_W_0F6B_P_2,
2172 EVEX_W_0F6C_P_2,
2173 EVEX_W_0F6D_P_2,
2174 EVEX_W_0F6E_P_2,
2175 EVEX_W_0F6F_P_1,
2176 EVEX_W_0F6F_P_2,
2177 EVEX_W_0F6F_P_3,
2178 EVEX_W_0F70_P_2,
2179 EVEX_W_0F72_R_2_P_2,
2180 EVEX_W_0F72_R_6_P_2,
2181 EVEX_W_0F73_R_2_P_2,
2182 EVEX_W_0F73_R_6_P_2,
2183 EVEX_W_0F76_P_2,
2184 EVEX_W_0F78_P_0,
2185 EVEX_W_0F79_P_0,
2186 EVEX_W_0F7A_P_1,
2187 EVEX_W_0F7A_P_3,
2188 EVEX_W_0F7B_P_1,
2189 EVEX_W_0F7B_P_3,
2190 EVEX_W_0F7E_P_1,
2191 EVEX_W_0F7E_P_2,
2192 EVEX_W_0F7F_P_1,
2193 EVEX_W_0F7F_P_2,
2194 EVEX_W_0F7F_P_3,
2195 EVEX_W_0FC2_P_0,
2196 EVEX_W_0FC2_P_1,
2197 EVEX_W_0FC2_P_2,
2198 EVEX_W_0FC2_P_3,
2199 EVEX_W_0FC6_P_0,
2200 EVEX_W_0FC6_P_2,
2201 EVEX_W_0FD2_P_2,
2202 EVEX_W_0FD3_P_2,
2203 EVEX_W_0FD4_P_2,
2204 EVEX_W_0FD6_P_2,
2205 EVEX_W_0FE6_P_1,
2206 EVEX_W_0FE6_P_2,
2207 EVEX_W_0FE6_P_3,
2208 EVEX_W_0FE7_P_2,
2209 EVEX_W_0FF2_P_2,
2210 EVEX_W_0FF3_P_2,
2211 EVEX_W_0FF4_P_2,
2212 EVEX_W_0FFA_P_2,
2213 EVEX_W_0FFB_P_2,
2214 EVEX_W_0FFE_P_2,
2215 EVEX_W_0F380C_P_2,
2216 EVEX_W_0F380D_P_2,
2217 EVEX_W_0F3810_P_1,
2218 EVEX_W_0F3810_P_2,
2219 EVEX_W_0F3811_P_1,
2220 EVEX_W_0F3811_P_2,
2221 EVEX_W_0F3812_P_1,
2222 EVEX_W_0F3812_P_2,
2223 EVEX_W_0F3813_P_1,
2224 EVEX_W_0F3813_P_2,
2225 EVEX_W_0F3814_P_1,
2226 EVEX_W_0F3815_P_1,
2227 EVEX_W_0F3818_P_2,
2228 EVEX_W_0F3819_P_2,
2229 EVEX_W_0F381A_P_2,
2230 EVEX_W_0F381B_P_2,
2231 EVEX_W_0F381E_P_2,
2232 EVEX_W_0F381F_P_2,
2233 EVEX_W_0F3820_P_1,
2234 EVEX_W_0F3821_P_1,
2235 EVEX_W_0F3822_P_1,
2236 EVEX_W_0F3823_P_1,
2237 EVEX_W_0F3824_P_1,
2238 EVEX_W_0F3825_P_1,
2239 EVEX_W_0F3825_P_2,
2240 EVEX_W_0F3826_P_1,
2241 EVEX_W_0F3826_P_2,
2242 EVEX_W_0F3828_P_1,
2243 EVEX_W_0F3828_P_2,
2244 EVEX_W_0F3829_P_1,
2245 EVEX_W_0F3829_P_2,
2246 EVEX_W_0F382A_P_1,
2247 EVEX_W_0F382A_P_2,
2248 EVEX_W_0F382B_P_2,
2249 EVEX_W_0F3830_P_1,
2250 EVEX_W_0F3831_P_1,
2251 EVEX_W_0F3832_P_1,
2252 EVEX_W_0F3833_P_1,
2253 EVEX_W_0F3834_P_1,
2254 EVEX_W_0F3835_P_1,
2255 EVEX_W_0F3835_P_2,
2256 EVEX_W_0F3837_P_2,
2257 EVEX_W_0F383A_P_1,
2258 EVEX_W_0F3840_P_2,
2259 EVEX_W_0F3858_P_2,
2260 EVEX_W_0F3859_P_2,
2261 EVEX_W_0F385A_P_2,
2262 EVEX_W_0F385B_P_2,
2263 EVEX_W_0F3866_P_2,
2264 EVEX_W_0F3875_P_2,
2265 EVEX_W_0F3878_P_2,
2266 EVEX_W_0F3879_P_2,
2267 EVEX_W_0F387A_P_2,
2268 EVEX_W_0F387B_P_2,
2269 EVEX_W_0F387D_P_2,
2270 EVEX_W_0F388D_P_2,
2271 EVEX_W_0F3891_P_2,
2272 EVEX_W_0F3893_P_2,
2273 EVEX_W_0F38A1_P_2,
2274 EVEX_W_0F38A3_P_2,
2275 EVEX_W_0F38C7_R_1_P_2,
2276 EVEX_W_0F38C7_R_2_P_2,
2277 EVEX_W_0F38C7_R_5_P_2,
2278 EVEX_W_0F38C7_R_6_P_2,
2279
2280 EVEX_W_0F3A00_P_2,
2281 EVEX_W_0F3A01_P_2,
2282 EVEX_W_0F3A04_P_2,
2283 EVEX_W_0F3A05_P_2,
2284 EVEX_W_0F3A08_P_2,
2285 EVEX_W_0F3A09_P_2,
2286 EVEX_W_0F3A0A_P_2,
2287 EVEX_W_0F3A0B_P_2,
2288 EVEX_W_0F3A18_P_2,
2289 EVEX_W_0F3A19_P_2,
2290 EVEX_W_0F3A1A_P_2,
2291 EVEX_W_0F3A1B_P_2,
2292 EVEX_W_0F3A1D_P_2,
2293 EVEX_W_0F3A21_P_2,
2294 EVEX_W_0F3A23_P_2,
2295 EVEX_W_0F3A38_P_2,
2296 EVEX_W_0F3A39_P_2,
2297 EVEX_W_0F3A3A_P_2,
2298 EVEX_W_0F3A3B_P_2,
2299 EVEX_W_0F3A3E_P_2,
2300 EVEX_W_0F3A3F_P_2,
2301 EVEX_W_0F3A42_P_2,
2302 EVEX_W_0F3A43_P_2
2303 };
2304
2305 typedef void (*op_rtn) (int bytemode, int sizeflag);
2306
2307 struct dis386 {
2308 const char *name;
2309 struct
2310 {
2311 op_rtn rtn;
2312 int bytemode;
2313 } op[MAX_OPERANDS];
2314 };
2315
2316 /* Upper case letters in the instruction names here are macros.
2317 'A' => print 'b' if no register operands or suffix_always is true
2318 'B' => print 'b' if suffix_always is true
2319 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
2320 size prefix
2321 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
2322 suffix_always is true
2323 'E' => print 'e' if 32-bit form of jcxz
2324 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
2325 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
2326 'H' => print ",pt" or ",pn" branch hint
2327 'I' => honor following macro letter even in Intel mode (implemented only
2328 for some of the macro letters)
2329 'J' => print 'l'
2330 'K' => print 'd' or 'q' if rex prefix is present.
2331 'L' => print 'l' if suffix_always is true
2332 'M' => print 'r' if intel_mnemonic is false.
2333 'N' => print 'n' if instruction has no wait "prefix"
2334 'O' => print 'd' or 'o' (or 'q' in Intel mode)
2335 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
2336 or suffix_always is true. print 'q' if rex prefix is present.
2337 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
2338 is true
2339 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
2340 'S' => print 'w', 'l' or 'q' if suffix_always is true
2341 'T' => print 'q' in 64bit mode and behave as 'P' otherwise
2342 'U' => print 'q' in 64bit mode and behave as 'Q' otherwise
2343 'V' => print 'q' in 64bit mode and behave as 'S' otherwise
2344 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
2345 'X' => print 's', 'd' depending on data16 prefix (for XMM)
2346 'Y' => 'q' if instruction has an REX 64bit overwrite prefix and
2347 suffix_always is true.
2348 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
2349 '!' => change condition from true to false or from false to true.
2350 '%' => add 1 upper case letter to the macro.
2351
2352 2 upper case letter macros:
2353 "XY" => print 'x' or 'y' if no register operands or suffix_always
2354 is true.
2355 "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
2356 "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
2357 or suffix_always is true
2358 "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
2359 "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
2360 "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
2361 "LW" => print 'd', 'q' depending on the VEX.W bit
2362
2363 Many of the above letters print nothing in Intel mode. See "putop"
2364 for the details.
2365
2366 Braces '{' and '}', and vertical bars '|', indicate alternative
2367 mnemonic strings for AT&T and Intel. */
2368
2369 static const struct dis386 dis386[] = {
2370 /* 00 */
2371 { "addB", { Ebh1, Gb } },
2372 { "addS", { Evh1, Gv } },
2373 { "addB", { Gb, EbS } },
2374 { "addS", { Gv, EvS } },
2375 { "addB", { AL, Ib } },
2376 { "addS", { eAX, Iv } },
2377 { X86_64_TABLE (X86_64_06) },
2378 { X86_64_TABLE (X86_64_07) },
2379 /* 08 */
2380 { "orB", { Ebh1, Gb } },
2381 { "orS", { Evh1, Gv } },
2382 { "orB", { Gb, EbS } },
2383 { "orS", { Gv, EvS } },
2384 { "orB", { AL, Ib } },
2385 { "orS", { eAX, Iv } },
2386 { X86_64_TABLE (X86_64_0D) },
2387 { Bad_Opcode }, /* 0x0f extended opcode escape */
2388 /* 10 */
2389 { "adcB", { Ebh1, Gb } },
2390 { "adcS", { Evh1, Gv } },
2391 { "adcB", { Gb, EbS } },
2392 { "adcS", { Gv, EvS } },
2393 { "adcB", { AL, Ib } },
2394 { "adcS", { eAX, Iv } },
2395 { X86_64_TABLE (X86_64_16) },
2396 { X86_64_TABLE (X86_64_17) },
2397 /* 18 */
2398 { "sbbB", { Ebh1, Gb } },
2399 { "sbbS", { Evh1, Gv } },
2400 { "sbbB", { Gb, EbS } },
2401 { "sbbS", { Gv, EvS } },
2402 { "sbbB", { AL, Ib } },
2403 { "sbbS", { eAX, Iv } },
2404 { X86_64_TABLE (X86_64_1E) },
2405 { X86_64_TABLE (X86_64_1F) },
2406 /* 20 */
2407 { "andB", { Ebh1, Gb } },
2408 { "andS", { Evh1, Gv } },
2409 { "andB", { Gb, EbS } },
2410 { "andS", { Gv, EvS } },
2411 { "andB", { AL, Ib } },
2412 { "andS", { eAX, Iv } },
2413 { Bad_Opcode }, /* SEG ES prefix */
2414 { X86_64_TABLE (X86_64_27) },
2415 /* 28 */
2416 { "subB", { Ebh1, Gb } },
2417 { "subS", { Evh1, Gv } },
2418 { "subB", { Gb, EbS } },
2419 { "subS", { Gv, EvS } },
2420 { "subB", { AL, Ib } },
2421 { "subS", { eAX, Iv } },
2422 { Bad_Opcode }, /* SEG CS prefix */
2423 { X86_64_TABLE (X86_64_2F) },
2424 /* 30 */
2425 { "xorB", { Ebh1, Gb } },
2426 { "xorS", { Evh1, Gv } },
2427 { "xorB", { Gb, EbS } },
2428 { "xorS", { Gv, EvS } },
2429 { "xorB", { AL, Ib } },
2430 { "xorS", { eAX, Iv } },
2431 { Bad_Opcode }, /* SEG SS prefix */
2432 { X86_64_TABLE (X86_64_37) },
2433 /* 38 */
2434 { "cmpB", { Eb, Gb } },
2435 { "cmpS", { Ev, Gv } },
2436 { "cmpB", { Gb, EbS } },
2437 { "cmpS", { Gv, EvS } },
2438 { "cmpB", { AL, Ib } },
2439 { "cmpS", { eAX, Iv } },
2440 { Bad_Opcode }, /* SEG DS prefix */
2441 { X86_64_TABLE (X86_64_3F) },
2442 /* 40 */
2443 { "inc{S|}", { RMeAX } },
2444 { "inc{S|}", { RMeCX } },
2445 { "inc{S|}", { RMeDX } },
2446 { "inc{S|}", { RMeBX } },
2447 { "inc{S|}", { RMeSP } },
2448 { "inc{S|}", { RMeBP } },
2449 { "inc{S|}", { RMeSI } },
2450 { "inc{S|}", { RMeDI } },
2451 /* 48 */
2452 { "dec{S|}", { RMeAX } },
2453 { "dec{S|}", { RMeCX } },
2454 { "dec{S|}", { RMeDX } },
2455 { "dec{S|}", { RMeBX } },
2456 { "dec{S|}", { RMeSP } },
2457 { "dec{S|}", { RMeBP } },
2458 { "dec{S|}", { RMeSI } },
2459 { "dec{S|}", { RMeDI } },
2460 /* 50 */
2461 { "pushV", { RMrAX } },
2462 { "pushV", { RMrCX } },
2463 { "pushV", { RMrDX } },
2464 { "pushV", { RMrBX } },
2465 { "pushV", { RMrSP } },
2466 { "pushV", { RMrBP } },
2467 { "pushV", { RMrSI } },
2468 { "pushV", { RMrDI } },
2469 /* 58 */
2470 { "popV", { RMrAX } },
2471 { "popV", { RMrCX } },
2472 { "popV", { RMrDX } },
2473 { "popV", { RMrBX } },
2474 { "popV", { RMrSP } },
2475 { "popV", { RMrBP } },
2476 { "popV", { RMrSI } },
2477 { "popV", { RMrDI } },
2478 /* 60 */
2479 { X86_64_TABLE (X86_64_60) },
2480 { X86_64_TABLE (X86_64_61) },
2481 { X86_64_TABLE (X86_64_62) },
2482 { X86_64_TABLE (X86_64_63) },
2483 { Bad_Opcode }, /* seg fs */
2484 { Bad_Opcode }, /* seg gs */
2485 { Bad_Opcode }, /* op size prefix */
2486 { Bad_Opcode }, /* adr size prefix */
2487 /* 68 */
2488 { "pushT", { sIv } },
2489 { "imulS", { Gv, Ev, Iv } },
2490 { "pushT", { sIbT } },
2491 { "imulS", { Gv, Ev, sIb } },
2492 { "ins{b|}", { Ybr, indirDX } },
2493 { X86_64_TABLE (X86_64_6D) },
2494 { "outs{b|}", { indirDXr, Xb } },
2495 { X86_64_TABLE (X86_64_6F) },
2496 /* 70 */
2497 { "joH", { Jb, BND, cond_jump_flag } },
2498 { "jnoH", { Jb, BND, cond_jump_flag } },
2499 { "jbH", { Jb, BND, cond_jump_flag } },
2500 { "jaeH", { Jb, BND, cond_jump_flag } },
2501 { "jeH", { Jb, BND, cond_jump_flag } },
2502 { "jneH", { Jb, BND, cond_jump_flag } },
2503 { "jbeH", { Jb, BND, cond_jump_flag } },
2504 { "jaH", { Jb, BND, cond_jump_flag } },
2505 /* 78 */
2506 { "jsH", { Jb, BND, cond_jump_flag } },
2507 { "jnsH", { Jb, BND, cond_jump_flag } },
2508 { "jpH", { Jb, BND, cond_jump_flag } },
2509 { "jnpH", { Jb, BND, cond_jump_flag } },
2510 { "jlH", { Jb, BND, cond_jump_flag } },
2511 { "jgeH", { Jb, BND, cond_jump_flag } },
2512 { "jleH", { Jb, BND, cond_jump_flag } },
2513 { "jgH", { Jb, BND, cond_jump_flag } },
2514 /* 80 */
2515 { REG_TABLE (REG_80) },
2516 { REG_TABLE (REG_81) },
2517 { Bad_Opcode },
2518 { REG_TABLE (REG_82) },
2519 { "testB", { Eb, Gb } },
2520 { "testS", { Ev, Gv } },
2521 { "xchgB", { Ebh2, Gb } },
2522 { "xchgS", { Evh2, Gv } },
2523 /* 88 */
2524 { "movB", { Ebh3, Gb } },
2525 { "movS", { Evh3, Gv } },
2526 { "movB", { Gb, EbS } },
2527 { "movS", { Gv, EvS } },
2528 { "movD", { Sv, Sw } },
2529 { MOD_TABLE (MOD_8D) },
2530 { "movD", { Sw, Sv } },
2531 { REG_TABLE (REG_8F) },
2532 /* 90 */
2533 { PREFIX_TABLE (PREFIX_90) },
2534 { "xchgS", { RMeCX, eAX } },
2535 { "xchgS", { RMeDX, eAX } },
2536 { "xchgS", { RMeBX, eAX } },
2537 { "xchgS", { RMeSP, eAX } },
2538 { "xchgS", { RMeBP, eAX } },
2539 { "xchgS", { RMeSI, eAX } },
2540 { "xchgS", { RMeDI, eAX } },
2541 /* 98 */
2542 { "cW{t|}R", { XX } },
2543 { "cR{t|}O", { XX } },
2544 { X86_64_TABLE (X86_64_9A) },
2545 { Bad_Opcode }, /* fwait */
2546 { "pushfT", { XX } },
2547 { "popfT", { XX } },
2548 { "sahf", { XX } },
2549 { "lahf", { XX } },
2550 /* a0 */
2551 { "mov%LB", { AL, Ob } },
2552 { "mov%LS", { eAX, Ov } },
2553 { "mov%LB", { Ob, AL } },
2554 { "mov%LS", { Ov, eAX } },
2555 { "movs{b|}", { Ybr, Xb } },
2556 { "movs{R|}", { Yvr, Xv } },
2557 { "cmps{b|}", { Xb, Yb } },
2558 { "cmps{R|}", { Xv, Yv } },
2559 /* a8 */
2560 { "testB", { AL, Ib } },
2561 { "testS", { eAX, Iv } },
2562 { "stosB", { Ybr, AL } },
2563 { "stosS", { Yvr, eAX } },
2564 { "lodsB", { ALr, Xb } },
2565 { "lodsS", { eAXr, Xv } },
2566 { "scasB", { AL, Yb } },
2567 { "scasS", { eAX, Yv } },
2568 /* b0 */
2569 { "movB", { RMAL, Ib } },
2570 { "movB", { RMCL, Ib } },
2571 { "movB", { RMDL, Ib } },
2572 { "movB", { RMBL, Ib } },
2573 { "movB", { RMAH, Ib } },
2574 { "movB", { RMCH, Ib } },
2575 { "movB", { RMDH, Ib } },
2576 { "movB", { RMBH, Ib } },
2577 /* b8 */
2578 { "mov%LV", { RMeAX, Iv64 } },
2579 { "mov%LV", { RMeCX, Iv64 } },
2580 { "mov%LV", { RMeDX, Iv64 } },
2581 { "mov%LV", { RMeBX, Iv64 } },
2582 { "mov%LV", { RMeSP, Iv64 } },
2583 { "mov%LV", { RMeBP, Iv64 } },
2584 { "mov%LV", { RMeSI, Iv64 } },
2585 { "mov%LV", { RMeDI, Iv64 } },
2586 /* c0 */
2587 { REG_TABLE (REG_C0) },
2588 { REG_TABLE (REG_C1) },
2589 { "retT", { Iw, BND } },
2590 { "retT", { BND } },
2591 { X86_64_TABLE (X86_64_C4) },
2592 { X86_64_TABLE (X86_64_C5) },
2593 { REG_TABLE (REG_C6) },
2594 { REG_TABLE (REG_C7) },
2595 /* c8 */
2596 { "enterT", { Iw, Ib } },
2597 { "leaveT", { XX } },
2598 { "Jret{|f}P", { Iw } },
2599 { "Jret{|f}P", { XX } },
2600 { "int3", { XX } },
2601 { "int", { Ib } },
2602 { X86_64_TABLE (X86_64_CE) },
2603 { "iretP", { XX } },
2604 /* d0 */
2605 { REG_TABLE (REG_D0) },
2606 { REG_TABLE (REG_D1) },
2607 { REG_TABLE (REG_D2) },
2608 { REG_TABLE (REG_D3) },
2609 { X86_64_TABLE (X86_64_D4) },
2610 { X86_64_TABLE (X86_64_D5) },
2611 { Bad_Opcode },
2612 { "xlat", { DSBX } },
2613 /* d8 */
2614 { FLOAT },
2615 { FLOAT },
2616 { FLOAT },
2617 { FLOAT },
2618 { FLOAT },
2619 { FLOAT },
2620 { FLOAT },
2621 { FLOAT },
2622 /* e0 */
2623 { "loopneFH", { Jb, XX, loop_jcxz_flag } },
2624 { "loopeFH", { Jb, XX, loop_jcxz_flag } },
2625 { "loopFH", { Jb, XX, loop_jcxz_flag } },
2626 { "jEcxzH", { Jb, XX, loop_jcxz_flag } },
2627 { "inB", { AL, Ib } },
2628 { "inG", { zAX, Ib } },
2629 { "outB", { Ib, AL } },
2630 { "outG", { Ib, zAX } },
2631 /* e8 */
2632 { "callT", { Jv, BND } },
2633 { "jmpT", { Jv, BND } },
2634 { X86_64_TABLE (X86_64_EA) },
2635 { "jmp", { Jb, BND } },
2636 { "inB", { AL, indirDX } },
2637 { "inG", { zAX, indirDX } },
2638 { "outB", { indirDX, AL } },
2639 { "outG", { indirDX, zAX } },
2640 /* f0 */
2641 { Bad_Opcode }, /* lock prefix */
2642 { "icebp", { XX } },
2643 { Bad_Opcode }, /* repne */
2644 { Bad_Opcode }, /* repz */
2645 { "hlt", { XX } },
2646 { "cmc", { XX } },
2647 { REG_TABLE (REG_F6) },
2648 { REG_TABLE (REG_F7) },
2649 /* f8 */
2650 { "clc", { XX } },
2651 { "stc", { XX } },
2652 { "cli", { XX } },
2653 { "sti", { XX } },
2654 { "cld", { XX } },
2655 { "std", { XX } },
2656 { REG_TABLE (REG_FE) },
2657 { REG_TABLE (REG_FF) },
2658 };
2659
2660 static const struct dis386 dis386_twobyte[] = {
2661 /* 00 */
2662 { REG_TABLE (REG_0F00 ) },
2663 { REG_TABLE (REG_0F01 ) },
2664 { "larS", { Gv, Ew } },
2665 { "lslS", { Gv, Ew } },
2666 { Bad_Opcode },
2667 { "syscall", { XX } },
2668 { "clts", { XX } },
2669 { "sysretP", { XX } },
2670 /* 08 */
2671 { "invd", { XX } },
2672 { "wbinvd", { XX } },
2673 { Bad_Opcode },
2674 { "ud2", { XX } },
2675 { Bad_Opcode },
2676 { REG_TABLE (REG_0F0D) },
2677 { "femms", { XX } },
2678 { "", { MX, EM, OPSUF } }, /* See OP_3DNowSuffix. */
2679 /* 10 */
2680 { PREFIX_TABLE (PREFIX_0F10) },
2681 { PREFIX_TABLE (PREFIX_0F11) },
2682 { PREFIX_TABLE (PREFIX_0F12) },
2683 { MOD_TABLE (MOD_0F13) },
2684 { "unpcklpX", { XM, EXx } },
2685 { "unpckhpX", { XM, EXx } },
2686 { PREFIX_TABLE (PREFIX_0F16) },
2687 { MOD_TABLE (MOD_0F17) },
2688 /* 18 */
2689 { REG_TABLE (REG_0F18) },
2690 { "nopQ", { Ev } },
2691 { PREFIX_TABLE (PREFIX_0F1A) },
2692 { PREFIX_TABLE (PREFIX_0F1B) },
2693 { "nopQ", { Ev } },
2694 { "nopQ", { Ev } },
2695 { "nopQ", { Ev } },
2696 { "nopQ", { Ev } },
2697 /* 20 */
2698 { MOD_TABLE (MOD_0F20) },
2699 { MOD_TABLE (MOD_0F21) },
2700 { MOD_TABLE (MOD_0F22) },
2701 { MOD_TABLE (MOD_0F23) },
2702 { MOD_TABLE (MOD_0F24) },
2703 { Bad_Opcode },
2704 { MOD_TABLE (MOD_0F26) },
2705 { Bad_Opcode },
2706 /* 28 */
2707 { "movapX", { XM, EXx } },
2708 { "movapX", { EXxS, XM } },
2709 { PREFIX_TABLE (PREFIX_0F2A) },
2710 { PREFIX_TABLE (PREFIX_0F2B) },
2711 { PREFIX_TABLE (PREFIX_0F2C) },
2712 { PREFIX_TABLE (PREFIX_0F2D) },
2713 { PREFIX_TABLE (PREFIX_0F2E) },
2714 { PREFIX_TABLE (PREFIX_0F2F) },
2715 /* 30 */
2716 { "wrmsr", { XX } },
2717 { "rdtsc", { XX } },
2718 { "rdmsr", { XX } },
2719 { "rdpmc", { XX } },
2720 { "sysenter", { XX } },
2721 { "sysexit", { XX } },
2722 { Bad_Opcode },
2723 { "getsec", { XX } },
2724 /* 38 */
2725 { THREE_BYTE_TABLE (THREE_BYTE_0F38) },
2726 { Bad_Opcode },
2727 { THREE_BYTE_TABLE (THREE_BYTE_0F3A) },
2728 { Bad_Opcode },
2729 { Bad_Opcode },
2730 { Bad_Opcode },
2731 { Bad_Opcode },
2732 { Bad_Opcode },
2733 /* 40 */
2734 { "cmovoS", { Gv, Ev } },
2735 { "cmovnoS", { Gv, Ev } },
2736 { "cmovbS", { Gv, Ev } },
2737 { "cmovaeS", { Gv, Ev } },
2738 { "cmoveS", { Gv, Ev } },
2739 { "cmovneS", { Gv, Ev } },
2740 { "cmovbeS", { Gv, Ev } },
2741 { "cmovaS", { Gv, Ev } },
2742 /* 48 */
2743 { "cmovsS", { Gv, Ev } },
2744 { "cmovnsS", { Gv, Ev } },
2745 { "cmovpS", { Gv, Ev } },
2746 { "cmovnpS", { Gv, Ev } },
2747 { "cmovlS", { Gv, Ev } },
2748 { "cmovgeS", { Gv, Ev } },
2749 { "cmovleS", { Gv, Ev } },
2750 { "cmovgS", { Gv, Ev } },
2751 /* 50 */
2752 { MOD_TABLE (MOD_0F51) },
2753 { PREFIX_TABLE (PREFIX_0F51) },
2754 { PREFIX_TABLE (PREFIX_0F52) },
2755 { PREFIX_TABLE (PREFIX_0F53) },
2756 { "andpX", { XM, EXx } },
2757 { "andnpX", { XM, EXx } },
2758 { "orpX", { XM, EXx } },
2759 { "xorpX", { XM, EXx } },
2760 /* 58 */
2761 { PREFIX_TABLE (PREFIX_0F58) },
2762 { PREFIX_TABLE (PREFIX_0F59) },
2763 { PREFIX_TABLE (PREFIX_0F5A) },
2764 { PREFIX_TABLE (PREFIX_0F5B) },
2765 { PREFIX_TABLE (PREFIX_0F5C) },
2766 { PREFIX_TABLE (PREFIX_0F5D) },
2767 { PREFIX_TABLE (PREFIX_0F5E) },
2768 { PREFIX_TABLE (PREFIX_0F5F) },
2769 /* 60 */
2770 { PREFIX_TABLE (PREFIX_0F60) },
2771 { PREFIX_TABLE (PREFIX_0F61) },
2772 { PREFIX_TABLE (PREFIX_0F62) },
2773 { "packsswb", { MX, EM } },
2774 { "pcmpgtb", { MX, EM } },
2775 { "pcmpgtw", { MX, EM } },
2776 { "pcmpgtd", { MX, EM } },
2777 { "packuswb", { MX, EM } },
2778 /* 68 */
2779 { "punpckhbw", { MX, EM } },
2780 { "punpckhwd", { MX, EM } },
2781 { "punpckhdq", { MX, EM } },
2782 { "packssdw", { MX, EM } },
2783 { PREFIX_TABLE (PREFIX_0F6C) },
2784 { PREFIX_TABLE (PREFIX_0F6D) },
2785 { "movK", { MX, Edq } },
2786 { PREFIX_TABLE (PREFIX_0F6F) },
2787 /* 70 */
2788 { PREFIX_TABLE (PREFIX_0F70) },
2789 { REG_TABLE (REG_0F71) },
2790 { REG_TABLE (REG_0F72) },
2791 { REG_TABLE (REG_0F73) },
2792 { "pcmpeqb", { MX, EM } },
2793 { "pcmpeqw", { MX, EM } },
2794 { "pcmpeqd", { MX, EM } },
2795 { "emms", { XX } },
2796 /* 78 */
2797 { PREFIX_TABLE (PREFIX_0F78) },
2798 { PREFIX_TABLE (PREFIX_0F79) },
2799 { THREE_BYTE_TABLE (THREE_BYTE_0F7A) },
2800 { Bad_Opcode },
2801 { PREFIX_TABLE (PREFIX_0F7C) },
2802 { PREFIX_TABLE (PREFIX_0F7D) },
2803 { PREFIX_TABLE (PREFIX_0F7E) },
2804 { PREFIX_TABLE (PREFIX_0F7F) },
2805 /* 80 */
2806 { "joH", { Jv, BND, cond_jump_flag } },
2807 { "jnoH", { Jv, BND, cond_jump_flag } },
2808 { "jbH", { Jv, BND, cond_jump_flag } },
2809 { "jaeH", { Jv, BND, cond_jump_flag } },
2810 { "jeH", { Jv, BND, cond_jump_flag } },
2811 { "jneH", { Jv, BND, cond_jump_flag } },
2812 { "jbeH", { Jv, BND, cond_jump_flag } },
2813 { "jaH", { Jv, BND, cond_jump_flag } },
2814 /* 88 */
2815 { "jsH", { Jv, BND, cond_jump_flag } },
2816 { "jnsH", { Jv, BND, cond_jump_flag } },
2817 { "jpH", { Jv, BND, cond_jump_flag } },
2818 { "jnpH", { Jv, BND, cond_jump_flag } },
2819 { "jlH", { Jv, BND, cond_jump_flag } },
2820 { "jgeH", { Jv, BND, cond_jump_flag } },
2821 { "jleH", { Jv, BND, cond_jump_flag } },
2822 { "jgH", { Jv, BND, cond_jump_flag } },
2823 /* 90 */
2824 { "seto", { Eb } },
2825 { "setno", { Eb } },
2826 { "setb", { Eb } },
2827 { "setae", { Eb } },
2828 { "sete", { Eb } },
2829 { "setne", { Eb } },
2830 { "setbe", { Eb } },
2831 { "seta", { Eb } },
2832 /* 98 */
2833 { "sets", { Eb } },
2834 { "setns", { Eb } },
2835 { "setp", { Eb } },
2836 { "setnp", { Eb } },
2837 { "setl", { Eb } },
2838 { "setge", { Eb } },
2839 { "setle", { Eb } },
2840 { "setg", { Eb } },
2841 /* a0 */
2842 { "pushT", { fs } },
2843 { "popT", { fs } },
2844 { "cpuid", { XX } },
2845 { "btS", { Ev, Gv } },
2846 { "shldS", { Ev, Gv, Ib } },
2847 { "shldS", { Ev, Gv, CL } },
2848 { REG_TABLE (REG_0FA6) },
2849 { REG_TABLE (REG_0FA7) },
2850 /* a8 */
2851 { "pushT", { gs } },
2852 { "popT", { gs } },
2853 { "rsm", { XX } },
2854 { "btsS", { Evh1, Gv } },
2855 { "shrdS", { Ev, Gv, Ib } },
2856 { "shrdS", { Ev, Gv, CL } },
2857 { REG_TABLE (REG_0FAE) },
2858 { "imulS", { Gv, Ev } },
2859 /* b0 */
2860 { "cmpxchgB", { Ebh1, Gb } },
2861 { "cmpxchgS", { Evh1, Gv } },
2862 { MOD_TABLE (MOD_0FB2) },
2863 { "btrS", { Evh1, Gv } },
2864 { MOD_TABLE (MOD_0FB4) },
2865 { MOD_TABLE (MOD_0FB5) },
2866 { "movz{bR|x}", { Gv, Eb } },
2867 { "movz{wR|x}", { Gv, Ew } }, /* yes, there really is movzww ! */
2868 /* b8 */
2869 { PREFIX_TABLE (PREFIX_0FB8) },
2870 { "ud1", { XX } },
2871 { REG_TABLE (REG_0FBA) },
2872 { "btcS", { Evh1, Gv } },
2873 { PREFIX_TABLE (PREFIX_0FBC) },
2874 { PREFIX_TABLE (PREFIX_0FBD) },
2875 { "movs{bR|x}", { Gv, Eb } },
2876 { "movs{wR|x}", { Gv, Ew } }, /* yes, there really is movsww ! */
2877 /* c0 */
2878 { "xaddB", { Ebh1, Gb } },
2879 { "xaddS", { Evh1, Gv } },
2880 { PREFIX_TABLE (PREFIX_0FC2) },
2881 { PREFIX_TABLE (PREFIX_0FC3) },
2882 { "pinsrw", { MX, Edqw, Ib } },
2883 { "pextrw", { Gdq, MS, Ib } },
2884 { "shufpX", { XM, EXx, Ib } },
2885 { REG_TABLE (REG_0FC7) },
2886 /* c8 */
2887 { "bswap", { RMeAX } },
2888 { "bswap", { RMeCX } },
2889 { "bswap", { RMeDX } },
2890 { "bswap", { RMeBX } },
2891 { "bswap", { RMeSP } },
2892 { "bswap", { RMeBP } },
2893 { "bswap", { RMeSI } },
2894 { "bswap", { RMeDI } },
2895 /* d0 */
2896 { PREFIX_TABLE (PREFIX_0FD0) },
2897 { "psrlw", { MX, EM } },
2898 { "psrld", { MX, EM } },
2899 { "psrlq", { MX, EM } },
2900 { "paddq", { MX, EM } },
2901 { "pmullw", { MX, EM } },
2902 { PREFIX_TABLE (PREFIX_0FD6) },
2903 { MOD_TABLE (MOD_0FD7) },
2904 /* d8 */
2905 { "psubusb", { MX, EM } },
2906 { "psubusw", { MX, EM } },
2907 { "pminub", { MX, EM } },
2908 { "pand", { MX, EM } },
2909 { "paddusb", { MX, EM } },
2910 { "paddusw", { MX, EM } },
2911 { "pmaxub", { MX, EM } },
2912 { "pandn", { MX, EM } },
2913 /* e0 */
2914 { "pavgb", { MX, EM } },
2915 { "psraw", { MX, EM } },
2916 { "psrad", { MX, EM } },
2917 { "pavgw", { MX, EM } },
2918 { "pmulhuw", { MX, EM } },
2919 { "pmulhw", { MX, EM } },
2920 { PREFIX_TABLE (PREFIX_0FE6) },
2921 { PREFIX_TABLE (PREFIX_0FE7) },
2922 /* e8 */
2923 { "psubsb", { MX, EM } },
2924 { "psubsw", { MX, EM } },
2925 { "pminsw", { MX, EM } },
2926 { "por", { MX, EM } },
2927 { "paddsb", { MX, EM } },
2928 { "paddsw", { MX, EM } },
2929 { "pmaxsw", { MX, EM } },
2930 { "pxor", { MX, EM } },
2931 /* f0 */
2932 { PREFIX_TABLE (PREFIX_0FF0) },
2933 { "psllw", { MX, EM } },
2934 { "pslld", { MX, EM } },
2935 { "psllq", { MX, EM } },
2936 { "pmuludq", { MX, EM } },
2937 { "pmaddwd", { MX, EM } },
2938 { "psadbw", { MX, EM } },
2939 { PREFIX_TABLE (PREFIX_0FF7) },
2940 /* f8 */
2941 { "psubb", { MX, EM } },
2942 { "psubw", { MX, EM } },
2943 { "psubd", { MX, EM } },
2944 { "psubq", { MX, EM } },
2945 { "paddb", { MX, EM } },
2946 { "paddw", { MX, EM } },
2947 { "paddd", { MX, EM } },
2948 { Bad_Opcode },
2949 };
2950
2951 static const unsigned char onebyte_has_modrm[256] = {
2952 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2953 /* ------------------------------- */
2954 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
2955 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
2956 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
2957 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
2958 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
2959 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
2960 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
2961 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
2962 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
2963 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
2964 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
2965 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
2966 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
2967 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
2968 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
2969 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
2970 /* ------------------------------- */
2971 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2972 };
2973
2974 static const unsigned char twobyte_has_modrm[256] = {
2975 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2976 /* ------------------------------- */
2977 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
2978 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
2979 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
2980 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
2981 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
2982 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
2983 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
2984 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
2985 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
2986 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
2987 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
2988 /* b0 */ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* bf */
2989 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
2990 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
2991 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
2992 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* ff */
2993 /* ------------------------------- */
2994 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2995 };
2996
2997 static const unsigned char twobyte_has_mandatory_prefix[256] = {
2998 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2999 /* ------------------------------- */
3000 /* 00 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0f */
3001 /* 10 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* 1f */
3002 /* 20 */ 0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0, /* 2f */
3003 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
3004 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 4f */
3005 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
3006 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
3007 /* 70 */ 1,0,0,0,1,1,1,1,0,0,1,1,1,1,1,1, /* 7f */
3008 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
3009 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 9f */
3010 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* af */
3011 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* bf */
3012 /* c0 */ 0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0, /* cf */
3013 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
3014 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
3015 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* ff */
3016 /* ------------------------------- */
3017 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3018 };
3019
3020 static char obuf[100];
3021 static char *obufp;
3022 static char *mnemonicendp;
3023 static char scratchbuf[100];
3024 static unsigned char *start_codep;
3025 static unsigned char *insn_codep;
3026 static unsigned char *codep;
3027 static unsigned char *end_codep;
3028 static int last_lock_prefix;
3029 static int last_repz_prefix;
3030 static int last_repnz_prefix;
3031 static int last_data_prefix;
3032 static int last_addr_prefix;
3033 static int last_rex_prefix;
3034 static int last_seg_prefix;
3035 static int fwait_prefix;
3036 /* The PREFIX_REPZ/PREFIX_REPNZ/PREFIX_DATA prefix is mandatory. */
3037 static int mandatory_prefix;
3038 /* The active segment register prefix. */
3039 static int active_seg_prefix;
3040 #define MAX_CODE_LENGTH 15
3041 /* We can up to 14 prefixes since the maximum instruction length is
3042 15bytes. */
3043 static int all_prefixes[MAX_CODE_LENGTH - 1];
3044 static disassemble_info *the_info;
3045 static struct
3046 {
3047 int mod;
3048 int reg;
3049 int rm;
3050 }
3051 modrm;
3052 static unsigned char need_modrm;
3053 static struct
3054 {
3055 int scale;
3056 int index;
3057 int base;
3058 }
3059 sib;
3060 static struct
3061 {
3062 int register_specifier;
3063 int length;
3064 int prefix;
3065 int w;
3066 int evex;
3067 int r;
3068 int v;
3069 int mask_register_specifier;
3070 int zeroing;
3071 int ll;
3072 int b;
3073 }
3074 vex;
3075 static unsigned char need_vex;
3076 static unsigned char need_vex_reg;
3077 static unsigned char vex_w_done;
3078
3079 struct op
3080 {
3081 const char *name;
3082 unsigned int len;
3083 };
3084
3085 /* If we are accessing mod/rm/reg without need_modrm set, then the
3086 values are stale. Hitting this abort likely indicates that you
3087 need to update onebyte_has_modrm or twobyte_has_modrm. */
3088 #define MODRM_CHECK if (!need_modrm) abort ()
3089
3090 static const char **names64;
3091 static const char **names32;
3092 static const char **names16;
3093 static const char **names8;
3094 static const char **names8rex;
3095 static const char **names_seg;
3096 static const char *index64;
3097 static const char *index32;
3098 static const char **index16;
3099 static const char **names_bnd;
3100
3101 static const char *intel_names64[] = {
3102 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
3103 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
3104 };
3105 static const char *intel_names32[] = {
3106 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
3107 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
3108 };
3109 static const char *intel_names16[] = {
3110 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
3111 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
3112 };
3113 static const char *intel_names8[] = {
3114 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
3115 };
3116 static const char *intel_names8rex[] = {
3117 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
3118 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
3119 };
3120 static const char *intel_names_seg[] = {
3121 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
3122 };
3123 static const char *intel_index64 = "riz";
3124 static const char *intel_index32 = "eiz";
3125 static const char *intel_index16[] = {
3126 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
3127 };
3128
3129 static const char *att_names64[] = {
3130 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
3131 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
3132 };
3133 static const char *att_names32[] = {
3134 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
3135 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
3136 };
3137 static const char *att_names16[] = {
3138 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
3139 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
3140 };
3141 static const char *att_names8[] = {
3142 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
3143 };
3144 static const char *att_names8rex[] = {
3145 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
3146 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
3147 };
3148 static const char *att_names_seg[] = {
3149 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
3150 };
3151 static const char *att_index64 = "%riz";
3152 static const char *att_index32 = "%eiz";
3153 static const char *att_index16[] = {
3154 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
3155 };
3156
3157 static const char **names_mm;
3158 static const char *intel_names_mm[] = {
3159 "mm0", "mm1", "mm2", "mm3",
3160 "mm4", "mm5", "mm6", "mm7"
3161 };
3162 static const char *att_names_mm[] = {
3163 "%mm0", "%mm1", "%mm2", "%mm3",
3164 "%mm4", "%mm5", "%mm6", "%mm7"
3165 };
3166
3167 static const char *intel_names_bnd[] = {
3168 "bnd0", "bnd1", "bnd2", "bnd3"
3169 };
3170
3171 static const char *att_names_bnd[] = {
3172 "%bnd0", "%bnd1", "%bnd2", "%bnd3"
3173 };
3174
3175 static const char **names_xmm;
3176 static const char *intel_names_xmm[] = {
3177 "xmm0", "xmm1", "xmm2", "xmm3",
3178 "xmm4", "xmm5", "xmm6", "xmm7",
3179 "xmm8", "xmm9", "xmm10", "xmm11",
3180 "xmm12", "xmm13", "xmm14", "xmm15",
3181 "xmm16", "xmm17", "xmm18", "xmm19",
3182 "xmm20", "xmm21", "xmm22", "xmm23",
3183 "xmm24", "xmm25", "xmm26", "xmm27",
3184 "xmm28", "xmm29", "xmm30", "xmm31"
3185 };
3186 static const char *att_names_xmm[] = {
3187 "%xmm0", "%xmm1", "%xmm2", "%xmm3",
3188 "%xmm4", "%xmm5", "%xmm6", "%xmm7",
3189 "%xmm8", "%xmm9", "%xmm10", "%xmm11",
3190 "%xmm12", "%xmm13", "%xmm14", "%xmm15",
3191 "%xmm16", "%xmm17", "%xmm18", "%xmm19",
3192 "%xmm20", "%xmm21", "%xmm22", "%xmm23",
3193 "%xmm24", "%xmm25", "%xmm26", "%xmm27",
3194 "%xmm28", "%xmm29", "%xmm30", "%xmm31"
3195 };
3196
3197 static const char **names_ymm;
3198 static const char *intel_names_ymm[] = {
3199 "ymm0", "ymm1", "ymm2", "ymm3",
3200 "ymm4", "ymm5", "ymm6", "ymm7",
3201 "ymm8", "ymm9", "ymm10", "ymm11",
3202 "ymm12", "ymm13", "ymm14", "ymm15",
3203 "ymm16", "ymm17", "ymm18", "ymm19",
3204 "ymm20", "ymm21", "ymm22", "ymm23",
3205 "ymm24", "ymm25", "ymm26", "ymm27",
3206 "ymm28", "ymm29", "ymm30", "ymm31"
3207 };
3208 static const char *att_names_ymm[] = {
3209 "%ymm0", "%ymm1", "%ymm2", "%ymm3",
3210 "%ymm4", "%ymm5", "%ymm6", "%ymm7",
3211 "%ymm8", "%ymm9", "%ymm10", "%ymm11",
3212 "%ymm12", "%ymm13", "%ymm14", "%ymm15",
3213 "%ymm16", "%ymm17", "%ymm18", "%ymm19",
3214 "%ymm20", "%ymm21", "%ymm22", "%ymm23",
3215 "%ymm24", "%ymm25", "%ymm26", "%ymm27",
3216 "%ymm28", "%ymm29", "%ymm30", "%ymm31"
3217 };
3218
3219 static const char **names_zmm;
3220 static const char *intel_names_zmm[] = {
3221 "zmm0", "zmm1", "zmm2", "zmm3",
3222 "zmm4", "zmm5", "zmm6", "zmm7",
3223 "zmm8", "zmm9", "zmm10", "zmm11",
3224 "zmm12", "zmm13", "zmm14", "zmm15",
3225 "zmm16", "zmm17", "zmm18", "zmm19",
3226 "zmm20", "zmm21", "zmm22", "zmm23",
3227 "zmm24", "zmm25", "zmm26", "zmm27",
3228 "zmm28", "zmm29", "zmm30", "zmm31"
3229 };
3230 static const char *att_names_zmm[] = {
3231 "%zmm0", "%zmm1", "%zmm2", "%zmm3",
3232 "%zmm4", "%zmm5", "%zmm6", "%zmm7",
3233 "%zmm8", "%zmm9", "%zmm10", "%zmm11",
3234 "%zmm12", "%zmm13", "%zmm14", "%zmm15",
3235 "%zmm16", "%zmm17", "%zmm18", "%zmm19",
3236 "%zmm20", "%zmm21", "%zmm22", "%zmm23",
3237 "%zmm24", "%zmm25", "%zmm26", "%zmm27",
3238 "%zmm28", "%zmm29", "%zmm30", "%zmm31"
3239 };
3240
3241 static const char **names_mask;
3242 static const char *intel_names_mask[] = {
3243 "k0", "k1", "k2", "k3", "k4", "k5", "k6", "k7"
3244 };
3245 static const char *att_names_mask[] = {
3246 "%k0", "%k1", "%k2", "%k3", "%k4", "%k5", "%k6", "%k7"
3247 };
3248
3249 static const char *names_rounding[] =
3250 {
3251 "{rn-sae}",
3252 "{rd-sae}",
3253 "{ru-sae}",
3254 "{rz-sae}"
3255 };
3256
3257 static const struct dis386 reg_table[][8] = {
3258 /* REG_80 */
3259 {
3260 { "addA", { Ebh1, Ib } },
3261 { "orA", { Ebh1, Ib } },
3262 { "adcA", { Ebh1, Ib } },
3263 { "sbbA", { Ebh1, Ib } },
3264 { "andA", { Ebh1, Ib } },
3265 { "subA", { Ebh1, Ib } },
3266 { "xorA", { Ebh1, Ib } },
3267 { "cmpA", { Eb, Ib } },
3268 },
3269 /* REG_81 */
3270 {
3271 { "addQ", { Evh1, Iv } },
3272 { "orQ", { Evh1, Iv } },
3273 { "adcQ", { Evh1, Iv } },
3274 { "sbbQ", { Evh1, Iv } },
3275 { "andQ", { Evh1, Iv } },
3276 { "subQ", { Evh1, Iv } },
3277 { "xorQ", { Evh1, Iv } },
3278 { "cmpQ", { Ev, Iv } },
3279 },
3280 /* REG_82 */
3281 {
3282 { "addQ", { Evh1, sIb } },
3283 { "orQ", { Evh1, sIb } },
3284 { "adcQ", { Evh1, sIb } },
3285 { "sbbQ", { Evh1, sIb } },
3286 { "andQ", { Evh1, sIb } },
3287 { "subQ", { Evh1, sIb } },
3288 { "xorQ", { Evh1, sIb } },
3289 { "cmpQ", { Ev, sIb } },
3290 },
3291 /* REG_8F */
3292 {
3293 { "popU", { stackEv } },
3294 { XOP_8F_TABLE (XOP_09) },
3295 { Bad_Opcode },
3296 { Bad_Opcode },
3297 { Bad_Opcode },
3298 { XOP_8F_TABLE (XOP_09) },
3299 },
3300 /* REG_C0 */
3301 {
3302 { "rolA", { Eb, Ib } },
3303 { "rorA", { Eb, Ib } },
3304 { "rclA", { Eb, Ib } },
3305 { "rcrA", { Eb, Ib } },
3306 { "shlA", { Eb, Ib } },
3307 { "shrA", { Eb, Ib } },
3308 { Bad_Opcode },
3309 { "sarA", { Eb, Ib } },
3310 },
3311 /* REG_C1 */
3312 {
3313 { "rolQ", { Ev, Ib } },
3314 { "rorQ", { Ev, Ib } },
3315 { "rclQ", { Ev, Ib } },
3316 { "rcrQ", { Ev, Ib } },
3317 { "shlQ", { Ev, Ib } },
3318 { "shrQ", { Ev, Ib } },
3319 { Bad_Opcode },
3320 { "sarQ", { Ev, Ib } },
3321 },
3322 /* REG_C6 */
3323 {
3324 { "movA", { Ebh3, Ib } },
3325 { Bad_Opcode },
3326 { Bad_Opcode },
3327 { Bad_Opcode },
3328 { Bad_Opcode },
3329 { Bad_Opcode },
3330 { Bad_Opcode },
3331 { MOD_TABLE (MOD_C6_REG_7) },
3332 },
3333 /* REG_C7 */
3334 {
3335 { "movQ", { Evh3, Iv } },
3336 { Bad_Opcode },
3337 { Bad_Opcode },
3338 { Bad_Opcode },
3339 { Bad_Opcode },
3340 { Bad_Opcode },
3341 { Bad_Opcode },
3342 { MOD_TABLE (MOD_C7_REG_7) },
3343 },
3344 /* REG_D0 */
3345 {
3346 { "rolA", { Eb, I1 } },
3347 { "rorA", { Eb, I1 } },
3348 { "rclA", { Eb, I1 } },
3349 { "rcrA", { Eb, I1 } },
3350 { "shlA", { Eb, I1 } },
3351 { "shrA", { Eb, I1 } },
3352 { Bad_Opcode },
3353 { "sarA", { Eb, I1 } },
3354 },
3355 /* REG_D1 */
3356 {
3357 { "rolQ", { Ev, I1 } },
3358 { "rorQ", { Ev, I1 } },
3359 { "rclQ", { Ev, I1 } },
3360 { "rcrQ", { Ev, I1 } },
3361 { "shlQ", { Ev, I1 } },
3362 { "shrQ", { Ev, I1 } },
3363 { Bad_Opcode },
3364 { "sarQ", { Ev, I1 } },
3365 },
3366 /* REG_D2 */
3367 {
3368 { "rolA", { Eb, CL } },
3369 { "rorA", { Eb, CL } },
3370 { "rclA", { Eb, CL } },
3371 { "rcrA", { Eb, CL } },
3372 { "shlA", { Eb, CL } },
3373 { "shrA", { Eb, CL } },
3374 { Bad_Opcode },
3375 { "sarA", { Eb, CL } },
3376 },
3377 /* REG_D3 */
3378 {
3379 { "rolQ", { Ev, CL } },
3380 { "rorQ", { Ev, CL } },
3381 { "rclQ", { Ev, CL } },
3382 { "rcrQ", { Ev, CL } },
3383 { "shlQ", { Ev, CL } },
3384 { "shrQ", { Ev, CL } },
3385 { Bad_Opcode },
3386 { "sarQ", { Ev, CL } },
3387 },
3388 /* REG_F6 */
3389 {
3390 { "testA", { Eb, Ib } },
3391 { Bad_Opcode },
3392 { "notA", { Ebh1 } },
3393 { "negA", { Ebh1 } },
3394 { "mulA", { Eb } }, /* Don't print the implicit %al register, */
3395 { "imulA", { Eb } }, /* to distinguish these opcodes from other */
3396 { "divA", { Eb } }, /* mul/imul opcodes. Do the same for div */
3397 { "idivA", { Eb } }, /* and idiv for consistency. */
3398 },
3399 /* REG_F7 */
3400 {
3401 { "testQ", { Ev, Iv } },
3402 { Bad_Opcode },
3403 { "notQ", { Evh1 } },
3404 { "negQ", { Evh1 } },
3405 { "mulQ", { Ev } }, /* Don't print the implicit register. */
3406 { "imulQ", { Ev } },
3407 { "divQ", { Ev } },
3408 { "idivQ", { Ev } },
3409 },
3410 /* REG_FE */
3411 {
3412 { "incA", { Ebh1 } },
3413 { "decA", { Ebh1 } },
3414 },
3415 /* REG_FF */
3416 {
3417 { "incQ", { Evh1 } },
3418 { "decQ", { Evh1 } },
3419 { "call{T|}", { indirEv, BND } },
3420 { MOD_TABLE (MOD_FF_REG_3) },
3421 { "jmp{T|}", { indirEv, BND } },
3422 { MOD_TABLE (MOD_FF_REG_5) },
3423 { "pushU", { stackEv } },
3424 { Bad_Opcode },
3425 },
3426 /* REG_0F00 */
3427 {
3428 { "sldtD", { Sv } },
3429 { "strD", { Sv } },
3430 { "lldt", { Ew } },
3431 { "ltr", { Ew } },
3432 { "verr", { Ew } },
3433 { "verw", { Ew } },
3434 { Bad_Opcode },
3435 { Bad_Opcode },
3436 },
3437 /* REG_0F01 */
3438 {
3439 { MOD_TABLE (MOD_0F01_REG_0) },
3440 { MOD_TABLE (MOD_0F01_REG_1) },
3441 { MOD_TABLE (MOD_0F01_REG_2) },
3442 { MOD_TABLE (MOD_0F01_REG_3) },
3443 { "smswD", { Sv } },
3444 { Bad_Opcode },
3445 { "lmsw", { Ew } },
3446 { MOD_TABLE (MOD_0F01_REG_7) },
3447 },
3448 /* REG_0F0D */
3449 {
3450 { "prefetch", { Mb } },
3451 { "prefetchw", { Mb } },
3452 { "prefetchwt1", { Mb } },
3453 { "prefetch", { Mb } },
3454 { "prefetch", { Mb } },
3455 { "prefetch", { Mb } },
3456 { "prefetch", { Mb } },
3457 { "prefetch", { Mb } },
3458 },
3459 /* REG_0F18 */
3460 {
3461 { MOD_TABLE (MOD_0F18_REG_0) },
3462 { MOD_TABLE (MOD_0F18_REG_1) },
3463 { MOD_TABLE (MOD_0F18_REG_2) },
3464 { MOD_TABLE (MOD_0F18_REG_3) },
3465 { MOD_TABLE (MOD_0F18_REG_4) },
3466 { MOD_TABLE (MOD_0F18_REG_5) },
3467 { MOD_TABLE (MOD_0F18_REG_6) },
3468 { MOD_TABLE (MOD_0F18_REG_7) },
3469 },
3470 /* REG_0F71 */
3471 {
3472 { Bad_Opcode },
3473 { Bad_Opcode },
3474 { MOD_TABLE (MOD_0F71_REG_2) },
3475 { Bad_Opcode },
3476 { MOD_TABLE (MOD_0F71_REG_4) },
3477 { Bad_Opcode },
3478 { MOD_TABLE (MOD_0F71_REG_6) },
3479 },
3480 /* REG_0F72 */
3481 {
3482 { Bad_Opcode },
3483 { Bad_Opcode },
3484 { MOD_TABLE (MOD_0F72_REG_2) },
3485 { Bad_Opcode },
3486 { MOD_TABLE (MOD_0F72_REG_4) },
3487 { Bad_Opcode },
3488 { MOD_TABLE (MOD_0F72_REG_6) },
3489 },
3490 /* REG_0F73 */
3491 {
3492 { Bad_Opcode },
3493 { Bad_Opcode },
3494 { MOD_TABLE (MOD_0F73_REG_2) },
3495 { MOD_TABLE (MOD_0F73_REG_3) },
3496 { Bad_Opcode },
3497 { Bad_Opcode },
3498 { MOD_TABLE (MOD_0F73_REG_6) },
3499 { MOD_TABLE (MOD_0F73_REG_7) },
3500 },
3501 /* REG_0FA6 */
3502 {
3503 { "montmul", { { OP_0f07, 0 } } },
3504 { "xsha1", { { OP_0f07, 0 } } },
3505 { "xsha256", { { OP_0f07, 0 } } },
3506 },
3507 /* REG_0FA7 */
3508 {
3509 { "xstore-rng", { { OP_0f07, 0 } } },
3510 { "xcrypt-ecb", { { OP_0f07, 0 } } },
3511 { "xcrypt-cbc", { { OP_0f07, 0 } } },
3512 { "xcrypt-ctr", { { OP_0f07, 0 } } },
3513 { "xcrypt-cfb", { { OP_0f07, 0 } } },
3514 { "xcrypt-ofb", { { OP_0f07, 0 } } },
3515 },
3516 /* REG_0FAE */
3517 {
3518 { MOD_TABLE (MOD_0FAE_REG_0) },
3519 { MOD_TABLE (MOD_0FAE_REG_1) },
3520 { MOD_TABLE (MOD_0FAE_REG_2) },
3521 { MOD_TABLE (MOD_0FAE_REG_3) },
3522 { MOD_TABLE (MOD_0FAE_REG_4) },
3523 { MOD_TABLE (MOD_0FAE_REG_5) },
3524 { MOD_TABLE (MOD_0FAE_REG_6) },
3525 { MOD_TABLE (MOD_0FAE_REG_7) },
3526 },
3527 /* REG_0FBA */
3528 {
3529 { Bad_Opcode },
3530 { Bad_Opcode },
3531 { Bad_Opcode },
3532 { Bad_Opcode },
3533 { "btQ", { Ev, Ib } },
3534 { "btsQ", { Evh1, Ib } },
3535 { "btrQ", { Evh1, Ib } },
3536 { "btcQ", { Evh1, Ib } },
3537 },
3538 /* REG_0FC7 */
3539 {
3540 { Bad_Opcode },
3541 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } } },
3542 { Bad_Opcode },
3543 { MOD_TABLE (MOD_0FC7_REG_3) },
3544 { MOD_TABLE (MOD_0FC7_REG_4) },
3545 { MOD_TABLE (MOD_0FC7_REG_5) },
3546 { MOD_TABLE (MOD_0FC7_REG_6) },
3547 { MOD_TABLE (MOD_0FC7_REG_7) },
3548 },
3549 /* REG_VEX_0F71 */
3550 {
3551 { Bad_Opcode },
3552 { Bad_Opcode },
3553 { MOD_TABLE (MOD_VEX_0F71_REG_2) },
3554 { Bad_Opcode },
3555 { MOD_TABLE (MOD_VEX_0F71_REG_4) },
3556 { Bad_Opcode },
3557 { MOD_TABLE (MOD_VEX_0F71_REG_6) },
3558 },
3559 /* REG_VEX_0F72 */
3560 {
3561 { Bad_Opcode },
3562 { Bad_Opcode },
3563 { MOD_TABLE (MOD_VEX_0F72_REG_2) },
3564 { Bad_Opcode },
3565 { MOD_TABLE (MOD_VEX_0F72_REG_4) },
3566 { Bad_Opcode },
3567 { MOD_TABLE (MOD_VEX_0F72_REG_6) },
3568 },
3569 /* REG_VEX_0F73 */
3570 {
3571 { Bad_Opcode },
3572 { Bad_Opcode },
3573 { MOD_TABLE (MOD_VEX_0F73_REG_2) },
3574 { MOD_TABLE (MOD_VEX_0F73_REG_3) },
3575 { Bad_Opcode },
3576 { Bad_Opcode },
3577 { MOD_TABLE (MOD_VEX_0F73_REG_6) },
3578 { MOD_TABLE (MOD_VEX_0F73_REG_7) },
3579 },
3580 /* REG_VEX_0FAE */
3581 {
3582 { Bad_Opcode },
3583 { Bad_Opcode },
3584 { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
3585 { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
3586 },
3587 /* REG_VEX_0F38F3 */
3588 {
3589 { Bad_Opcode },
3590 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
3591 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
3592 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
3593 },
3594 /* REG_XOP_LWPCB */
3595 {
3596 { "llwpcb", { { OP_LWPCB_E, 0 } } },
3597 { "slwpcb", { { OP_LWPCB_E, 0 } } },
3598 },
3599 /* REG_XOP_LWP */
3600 {
3601 { "lwpins", { { OP_LWP_E, 0 }, Ed, Iq } },
3602 { "lwpval", { { OP_LWP_E, 0 }, Ed, Iq } },
3603 },
3604 /* REG_XOP_TBM_01 */
3605 {
3606 { Bad_Opcode },
3607 { "blcfill", { { OP_LWP_E, 0 }, Ev } },
3608 { "blsfill", { { OP_LWP_E, 0 }, Ev } },
3609 { "blcs", { { OP_LWP_E, 0 }, Ev } },
3610 { "tzmsk", { { OP_LWP_E, 0 }, Ev } },
3611 { "blcic", { { OP_LWP_E, 0 }, Ev } },
3612 { "blsic", { { OP_LWP_E, 0 }, Ev } },
3613 { "t1mskc", { { OP_LWP_E, 0 }, Ev } },
3614 },
3615 /* REG_XOP_TBM_02 */
3616 {
3617 { Bad_Opcode },
3618 { "blcmsk", { { OP_LWP_E, 0 }, Ev } },
3619 { Bad_Opcode },
3620 { Bad_Opcode },
3621 { Bad_Opcode },
3622 { Bad_Opcode },
3623 { "blci", { { OP_LWP_E, 0 }, Ev } },
3624 },
3625 #define NEED_REG_TABLE
3626 #include "i386-dis-evex.h"
3627 #undef NEED_REG_TABLE
3628 };
3629
3630 static const struct dis386 prefix_table[][4] = {
3631 /* PREFIX_90 */
3632 {
3633 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
3634 { "pause", { XX } },
3635 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
3636 },
3637
3638 /* PREFIX_0F10 */
3639 {
3640 { "movups", { XM, EXx } },
3641 { "movss", { XM, EXd } },
3642 { "movupd", { XM, EXx } },
3643 { "movsd", { XM, EXq } },
3644 },
3645
3646 /* PREFIX_0F11 */
3647 {
3648 { "movups", { EXxS, XM } },
3649 { "movss", { EXdS, XM } },
3650 { "movupd", { EXxS, XM } },
3651 { "movsd", { EXqS, XM } },
3652 },
3653
3654 /* PREFIX_0F12 */
3655 {
3656 { MOD_TABLE (MOD_0F12_PREFIX_0) },
3657 { "movsldup", { XM, EXx } },
3658 { "movlpd", { XM, EXq } },
3659 { "movddup", { XM, EXq } },
3660 },
3661
3662 /* PREFIX_0F16 */
3663 {
3664 { MOD_TABLE (MOD_0F16_PREFIX_0) },
3665 { "movshdup", { XM, EXx } },
3666 { "movhpd", { XM, EXq } },
3667 },
3668
3669 /* PREFIX_0F1A */
3670 {
3671 { MOD_TABLE (MOD_0F1A_PREFIX_0) },
3672 { "bndcl", { Gbnd, Ev_bnd } },
3673 { "bndmov", { Gbnd, Ebnd } },
3674 { "bndcu", { Gbnd, Ev_bnd } },
3675 },
3676
3677 /* PREFIX_0F1B */
3678 {
3679 { MOD_TABLE (MOD_0F1B_PREFIX_0) },
3680 { MOD_TABLE (MOD_0F1B_PREFIX_1) },
3681 { "bndmov", { Ebnd, Gbnd } },
3682 { "bndcn", { Gbnd, Ev_bnd } },
3683 },
3684
3685 /* PREFIX_0F2A */
3686 {
3687 { "cvtpi2ps", { XM, EMCq } },
3688 { "cvtsi2ss%LQ", { XM, Ev } },
3689 { "cvtpi2pd", { XM, EMCq } },
3690 { "cvtsi2sd%LQ", { XM, Ev } },
3691 },
3692
3693 /* PREFIX_0F2B */
3694 {
3695 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
3696 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
3697 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
3698 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
3699 },
3700
3701 /* PREFIX_0F2C */
3702 {
3703 { "cvttps2pi", { MXC, EXq } },
3704 { "cvttss2siY", { Gv, EXd } },
3705 { "cvttpd2pi", { MXC, EXx } },
3706 { "cvttsd2siY", { Gv, EXq } },
3707 },
3708
3709 /* PREFIX_0F2D */
3710 {
3711 { "cvtps2pi", { MXC, EXq } },
3712 { "cvtss2siY", { Gv, EXd } },
3713 { "cvtpd2pi", { MXC, EXx } },
3714 { "cvtsd2siY", { Gv, EXq } },
3715 },
3716
3717 /* PREFIX_0F2E */
3718 {
3719 { "ucomiss",{ XM, EXd } },
3720 { Bad_Opcode },
3721 { "ucomisd",{ XM, EXq } },
3722 },
3723
3724 /* PREFIX_0F2F */
3725 {
3726 { "comiss", { XM, EXd } },
3727 { Bad_Opcode },
3728 { "comisd", { XM, EXq } },
3729 },
3730
3731 /* PREFIX_0F51 */
3732 {
3733 { "sqrtps", { XM, EXx } },
3734 { "sqrtss", { XM, EXd } },
3735 { "sqrtpd", { XM, EXx } },
3736 { "sqrtsd", { XM, EXq } },
3737 },
3738
3739 /* PREFIX_0F52 */
3740 {
3741 { "rsqrtps",{ XM, EXx } },
3742 { "rsqrtss",{ XM, EXd } },
3743 },
3744
3745 /* PREFIX_0F53 */
3746 {
3747 { "rcpps", { XM, EXx } },
3748 { "rcpss", { XM, EXd } },
3749 },
3750
3751 /* PREFIX_0F58 */
3752 {
3753 { "addps", { XM, EXx } },
3754 { "addss", { XM, EXd } },
3755 { "addpd", { XM, EXx } },
3756 { "addsd", { XM, EXq } },
3757 },
3758
3759 /* PREFIX_0F59 */
3760 {
3761 { "mulps", { XM, EXx } },
3762 { "mulss", { XM, EXd } },
3763 { "mulpd", { XM, EXx } },
3764 { "mulsd", { XM, EXq } },
3765 },
3766
3767 /* PREFIX_0F5A */
3768 {
3769 { "cvtps2pd", { XM, EXq } },
3770 { "cvtss2sd", { XM, EXd } },
3771 { "cvtpd2ps", { XM, EXx } },
3772 { "cvtsd2ss", { XM, EXq } },
3773 },
3774
3775 /* PREFIX_0F5B */
3776 {
3777 { "cvtdq2ps", { XM, EXx } },
3778 { "cvttps2dq", { XM, EXx } },
3779 { "cvtps2dq", { XM, EXx } },
3780 },
3781
3782 /* PREFIX_0F5C */
3783 {
3784 { "subps", { XM, EXx } },
3785 { "subss", { XM, EXd } },
3786 { "subpd", { XM, EXx } },
3787 { "subsd", { XM, EXq } },
3788 },
3789
3790 /* PREFIX_0F5D */
3791 {
3792 { "minps", { XM, EXx } },
3793 { "minss", { XM, EXd } },
3794 { "minpd", { XM, EXx } },
3795 { "minsd", { XM, EXq } },
3796 },
3797
3798 /* PREFIX_0F5E */
3799 {
3800 { "divps", { XM, EXx } },
3801 { "divss", { XM, EXd } },
3802 { "divpd", { XM, EXx } },
3803 { "divsd", { XM, EXq } },
3804 },
3805
3806 /* PREFIX_0F5F */
3807 {
3808 { "maxps", { XM, EXx } },
3809 { "maxss", { XM, EXd } },
3810 { "maxpd", { XM, EXx } },
3811 { "maxsd", { XM, EXq } },
3812 },
3813
3814 /* PREFIX_0F60 */
3815 {
3816 { "punpcklbw",{ MX, EMd } },
3817 { Bad_Opcode },
3818 { "punpcklbw",{ MX, EMx } },
3819 },
3820
3821 /* PREFIX_0F61 */
3822 {
3823 { "punpcklwd",{ MX, EMd } },
3824 { Bad_Opcode },
3825 { "punpcklwd",{ MX, EMx } },
3826 },
3827
3828 /* PREFIX_0F62 */
3829 {
3830 { "punpckldq",{ MX, EMd } },
3831 { Bad_Opcode },
3832 { "punpckldq",{ MX, EMx } },
3833 },
3834
3835 /* PREFIX_0F6C */
3836 {
3837 { Bad_Opcode },
3838 { Bad_Opcode },
3839 { "punpcklqdq", { XM, EXx } },
3840 },
3841
3842 /* PREFIX_0F6D */
3843 {
3844 { Bad_Opcode },
3845 { Bad_Opcode },
3846 { "punpckhqdq", { XM, EXx } },
3847 },
3848
3849 /* PREFIX_0F6F */
3850 {
3851 { "movq", { MX, EM } },
3852 { "movdqu", { XM, EXx } },
3853 { "movdqa", { XM, EXx } },
3854 },
3855
3856 /* PREFIX_0F70 */
3857 {
3858 { "pshufw", { MX, EM, Ib } },
3859 { "pshufhw",{ XM, EXx, Ib } },
3860 { "pshufd", { XM, EXx, Ib } },
3861 { "pshuflw",{ XM, EXx, Ib } },
3862 },
3863
3864 /* PREFIX_0F73_REG_3 */
3865 {
3866 { Bad_Opcode },
3867 { Bad_Opcode },
3868 { "psrldq", { XS, Ib } },
3869 },
3870
3871 /* PREFIX_0F73_REG_7 */
3872 {
3873 { Bad_Opcode },
3874 { Bad_Opcode },
3875 { "pslldq", { XS, Ib } },
3876 },
3877
3878 /* PREFIX_0F78 */
3879 {
3880 {"vmread", { Em, Gm } },
3881 { Bad_Opcode },
3882 {"extrq", { XS, Ib, Ib } },
3883 {"insertq", { XM, XS, Ib, Ib } },
3884 },
3885
3886 /* PREFIX_0F79 */
3887 {
3888 {"vmwrite", { Gm, Em } },
3889 { Bad_Opcode },
3890 {"extrq", { XM, XS } },
3891 {"insertq", { XM, XS } },
3892 },
3893
3894 /* PREFIX_0F7C */
3895 {
3896 { Bad_Opcode },
3897 { Bad_Opcode },
3898 { "haddpd", { XM, EXx } },
3899 { "haddps", { XM, EXx } },
3900 },
3901
3902 /* PREFIX_0F7D */
3903 {
3904 { Bad_Opcode },
3905 { Bad_Opcode },
3906 { "hsubpd", { XM, EXx } },
3907 { "hsubps", { XM, EXx } },
3908 },
3909
3910 /* PREFIX_0F7E */
3911 {
3912 { "movK", { Edq, MX } },
3913 { "movq", { XM, EXq } },
3914 { "movK", { Edq, XM } },
3915 },
3916
3917 /* PREFIX_0F7F */
3918 {
3919 { "movq", { EMS, MX } },
3920 { "movdqu", { EXxS, XM } },
3921 { "movdqa", { EXxS, XM } },
3922 },
3923
3924 /* PREFIX_0FAE_REG_0 */
3925 {
3926 { Bad_Opcode },
3927 { "rdfsbase", { Ev } },
3928 },
3929
3930 /* PREFIX_0FAE_REG_1 */
3931 {
3932 { Bad_Opcode },
3933 { "rdgsbase", { Ev } },
3934 },
3935
3936 /* PREFIX_0FAE_REG_2 */
3937 {
3938 { Bad_Opcode },
3939 { "wrfsbase", { Ev } },
3940 },
3941
3942 /* PREFIX_0FAE_REG_3 */
3943 {
3944 { Bad_Opcode },
3945 { "wrgsbase", { Ev } },
3946 },
3947
3948 /* PREFIX_0FAE_REG_7 */
3949 {
3950 { "clflush", { Mb } },
3951 { Bad_Opcode },
3952 { "clflushopt", { Mb } },
3953 },
3954
3955 /* PREFIX_0FB8 */
3956 {
3957 { Bad_Opcode },
3958 { "popcntS", { Gv, Ev } },
3959 },
3960
3961 /* PREFIX_0FBC */
3962 {
3963 { "bsfS", { Gv, Ev } },
3964 { "tzcntS", { Gv, Ev } },
3965 { "bsfS", { Gv, Ev } },
3966 },
3967
3968 /* PREFIX_0FBD */
3969 {
3970 { "bsrS", { Gv, Ev } },
3971 { "lzcntS", { Gv, Ev } },
3972 { "bsrS", { Gv, Ev } },
3973 },
3974
3975 /* PREFIX_0FC2 */
3976 {
3977 { "cmpps", { XM, EXx, CMP } },
3978 { "cmpss", { XM, EXd, CMP } },
3979 { "cmppd", { XM, EXx, CMP } },
3980 { "cmpsd", { XM, EXq, CMP } },
3981 },
3982
3983 /* PREFIX_0FC3 */
3984 {
3985 { "movntiS", { Ma, Gv } },
3986 },
3987
3988 /* PREFIX_0FC7_REG_6 */
3989 {
3990 { "vmptrld",{ Mq } },
3991 { "vmxon", { Mq } },
3992 { "vmclear",{ Mq } },
3993 },
3994
3995 /* PREFIX_0FD0 */
3996 {
3997 { Bad_Opcode },
3998 { Bad_Opcode },
3999 { "addsubpd", { XM, EXx } },
4000 { "addsubps", { XM, EXx } },
4001 },
4002
4003 /* PREFIX_0FD6 */
4004 {
4005 { Bad_Opcode },
4006 { "movq2dq",{ XM, MS } },
4007 { "movq", { EXqS, XM } },
4008 { "movdq2q",{ MX, XS } },
4009 },
4010
4011 /* PREFIX_0FE6 */
4012 {
4013 { Bad_Opcode },
4014 { "cvtdq2pd", { XM, EXq } },
4015 { "cvttpd2dq", { XM, EXx } },
4016 { "cvtpd2dq", { XM, EXx } },
4017 },
4018
4019 /* PREFIX_0FE7 */
4020 {
4021 { "movntq", { Mq, MX } },
4022 { Bad_Opcode },
4023 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
4024 },
4025
4026 /* PREFIX_0FF0 */
4027 {
4028 { Bad_Opcode },
4029 { Bad_Opcode },
4030 { Bad_Opcode },
4031 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4032 },
4033
4034 /* PREFIX_0FF7 */
4035 {
4036 { "maskmovq", { MX, MS } },
4037 { Bad_Opcode },
4038 { "maskmovdqu", { XM, XS } },
4039 },
4040
4041 /* PREFIX_0F3810 */
4042 {
4043 { Bad_Opcode },
4044 { Bad_Opcode },
4045 { "pblendvb", { XM, EXx, XMM0 } },
4046 },
4047
4048 /* PREFIX_0F3814 */
4049 {
4050 { Bad_Opcode },
4051 { Bad_Opcode },
4052 { "blendvps", { XM, EXx, XMM0 } },
4053 },
4054
4055 /* PREFIX_0F3815 */
4056 {
4057 { Bad_Opcode },
4058 { Bad_Opcode },
4059 { "blendvpd", { XM, EXx, XMM0 } },
4060 },
4061
4062 /* PREFIX_0F3817 */
4063 {
4064 { Bad_Opcode },
4065 { Bad_Opcode },
4066 { "ptest", { XM, EXx } },
4067 },
4068
4069 /* PREFIX_0F3820 */
4070 {
4071 { Bad_Opcode },
4072 { Bad_Opcode },
4073 { "pmovsxbw", { XM, EXq } },
4074 },
4075
4076 /* PREFIX_0F3821 */
4077 {
4078 { Bad_Opcode },
4079 { Bad_Opcode },
4080 { "pmovsxbd", { XM, EXd } },
4081 },
4082
4083 /* PREFIX_0F3822 */
4084 {
4085 { Bad_Opcode },
4086 { Bad_Opcode },
4087 { "pmovsxbq", { XM, EXw } },
4088 },
4089
4090 /* PREFIX_0F3823 */
4091 {
4092 { Bad_Opcode },
4093 { Bad_Opcode },
4094 { "pmovsxwd", { XM, EXq } },
4095 },
4096
4097 /* PREFIX_0F3824 */
4098 {
4099 { Bad_Opcode },
4100 { Bad_Opcode },
4101 { "pmovsxwq", { XM, EXd } },
4102 },
4103
4104 /* PREFIX_0F3825 */
4105 {
4106 { Bad_Opcode },
4107 { Bad_Opcode },
4108 { "pmovsxdq", { XM, EXq } },
4109 },
4110
4111 /* PREFIX_0F3828 */
4112 {
4113 { Bad_Opcode },
4114 { Bad_Opcode },
4115 { "pmuldq", { XM, EXx } },
4116 },
4117
4118 /* PREFIX_0F3829 */
4119 {
4120 { Bad_Opcode },
4121 { Bad_Opcode },
4122 { "pcmpeqq", { XM, EXx } },
4123 },
4124
4125 /* PREFIX_0F382A */
4126 {
4127 { Bad_Opcode },
4128 { Bad_Opcode },
4129 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
4130 },
4131
4132 /* PREFIX_0F382B */
4133 {
4134 { Bad_Opcode },
4135 { Bad_Opcode },
4136 { "packusdw", { XM, EXx } },
4137 },
4138
4139 /* PREFIX_0F3830 */
4140 {
4141 { Bad_Opcode },
4142 { Bad_Opcode },
4143 { "pmovzxbw", { XM, EXq } },
4144 },
4145
4146 /* PREFIX_0F3831 */
4147 {
4148 { Bad_Opcode },
4149 { Bad_Opcode },
4150 { "pmovzxbd", { XM, EXd } },
4151 },
4152
4153 /* PREFIX_0F3832 */
4154 {
4155 { Bad_Opcode },
4156 { Bad_Opcode },
4157 { "pmovzxbq", { XM, EXw } },
4158 },
4159
4160 /* PREFIX_0F3833 */
4161 {
4162 { Bad_Opcode },
4163 { Bad_Opcode },
4164 { "pmovzxwd", { XM, EXq } },
4165 },
4166
4167 /* PREFIX_0F3834 */
4168 {
4169 { Bad_Opcode },
4170 { Bad_Opcode },
4171 { "pmovzxwq", { XM, EXd } },
4172 },
4173
4174 /* PREFIX_0F3835 */
4175 {
4176 { Bad_Opcode },
4177 { Bad_Opcode },
4178 { "pmovzxdq", { XM, EXq } },
4179 },
4180
4181 /* PREFIX_0F3837 */
4182 {
4183 { Bad_Opcode },
4184 { Bad_Opcode },
4185 { "pcmpgtq", { XM, EXx } },
4186 },
4187
4188 /* PREFIX_0F3838 */
4189 {
4190 { Bad_Opcode },
4191 { Bad_Opcode },
4192 { "pminsb", { XM, EXx } },
4193 },
4194
4195 /* PREFIX_0F3839 */
4196 {
4197 { Bad_Opcode },
4198 { Bad_Opcode },
4199 { "pminsd", { XM, EXx } },
4200 },
4201
4202 /* PREFIX_0F383A */
4203 {
4204 { Bad_Opcode },
4205 { Bad_Opcode },
4206 { "pminuw", { XM, EXx } },
4207 },
4208
4209 /* PREFIX_0F383B */
4210 {
4211 { Bad_Opcode },
4212 { Bad_Opcode },
4213 { "pminud", { XM, EXx } },
4214 },
4215
4216 /* PREFIX_0F383C */
4217 {
4218 { Bad_Opcode },
4219 { Bad_Opcode },
4220 { "pmaxsb", { XM, EXx } },
4221 },
4222
4223 /* PREFIX_0F383D */
4224 {
4225 { Bad_Opcode },
4226 { Bad_Opcode },
4227 { "pmaxsd", { XM, EXx } },
4228 },
4229
4230 /* PREFIX_0F383E */
4231 {
4232 { Bad_Opcode },
4233 { Bad_Opcode },
4234 { "pmaxuw", { XM, EXx } },
4235 },
4236
4237 /* PREFIX_0F383F */
4238 {
4239 { Bad_Opcode },
4240 { Bad_Opcode },
4241 { "pmaxud", { XM, EXx } },
4242 },
4243
4244 /* PREFIX_0F3840 */
4245 {
4246 { Bad_Opcode },
4247 { Bad_Opcode },
4248 { "pmulld", { XM, EXx } },
4249 },
4250
4251 /* PREFIX_0F3841 */
4252 {
4253 { Bad_Opcode },
4254 { Bad_Opcode },
4255 { "phminposuw", { XM, EXx } },
4256 },
4257
4258 /* PREFIX_0F3880 */
4259 {
4260 { Bad_Opcode },
4261 { Bad_Opcode },
4262 { "invept", { Gm, Mo } },
4263 },
4264
4265 /* PREFIX_0F3881 */
4266 {
4267 { Bad_Opcode },
4268 { Bad_Opcode },
4269 { "invvpid", { Gm, Mo } },
4270 },
4271
4272 /* PREFIX_0F3882 */
4273 {
4274 { Bad_Opcode },
4275 { Bad_Opcode },
4276 { "invpcid", { Gm, M } },
4277 },
4278
4279 /* PREFIX_0F38C8 */
4280 {
4281 { "sha1nexte", { XM, EXxmm } },
4282 },
4283
4284 /* PREFIX_0F38C9 */
4285 {
4286 { "sha1msg1", { XM, EXxmm } },
4287 },
4288
4289 /* PREFIX_0F38CA */
4290 {
4291 { "sha1msg2", { XM, EXxmm } },
4292 },
4293
4294 /* PREFIX_0F38CB */
4295 {
4296 { "sha256rnds2", { XM, EXxmm, XMM0 } },
4297 },
4298
4299 /* PREFIX_0F38CC */
4300 {
4301 { "sha256msg1", { XM, EXxmm } },
4302 },
4303
4304 /* PREFIX_0F38CD */
4305 {
4306 { "sha256msg2", { XM, EXxmm } },
4307 },
4308
4309 /* PREFIX_0F38DB */
4310 {
4311 { Bad_Opcode },
4312 { Bad_Opcode },
4313 { "aesimc", { XM, EXx } },
4314 },
4315
4316 /* PREFIX_0F38DC */
4317 {
4318 { Bad_Opcode },
4319 { Bad_Opcode },
4320 { "aesenc", { XM, EXx } },
4321 },
4322
4323 /* PREFIX_0F38DD */
4324 {
4325 { Bad_Opcode },
4326 { Bad_Opcode },
4327 { "aesenclast", { XM, EXx } },
4328 },
4329
4330 /* PREFIX_0F38DE */
4331 {
4332 { Bad_Opcode },
4333 { Bad_Opcode },
4334 { "aesdec", { XM, EXx } },
4335 },
4336
4337 /* PREFIX_0F38DF */
4338 {
4339 { Bad_Opcode },
4340 { Bad_Opcode },
4341 { "aesdeclast", { XM, EXx } },
4342 },
4343
4344 /* PREFIX_0F38F0 */
4345 {
4346 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
4347 { Bad_Opcode },
4348 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
4349 { "crc32", { Gdq, { CRC32_Fixup, b_mode } } },
4350 },
4351
4352 /* PREFIX_0F38F1 */
4353 {
4354 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
4355 { Bad_Opcode },
4356 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
4357 { "crc32", { Gdq, { CRC32_Fixup, v_mode } } },
4358 },
4359
4360 /* PREFIX_0F38F6 */
4361 {
4362 { Bad_Opcode },
4363 { "adoxS", { Gdq, Edq} },
4364 { "adcxS", { Gdq, Edq} },
4365 { Bad_Opcode },
4366 },
4367
4368 /* PREFIX_0F3A08 */
4369 {
4370 { Bad_Opcode },
4371 { Bad_Opcode },
4372 { "roundps", { XM, EXx, Ib } },
4373 },
4374
4375 /* PREFIX_0F3A09 */
4376 {
4377 { Bad_Opcode },
4378 { Bad_Opcode },
4379 { "roundpd", { XM, EXx, Ib } },
4380 },
4381
4382 /* PREFIX_0F3A0A */
4383 {
4384 { Bad_Opcode },
4385 { Bad_Opcode },
4386 { "roundss", { XM, EXd, Ib } },
4387 },
4388
4389 /* PREFIX_0F3A0B */
4390 {
4391 { Bad_Opcode },
4392 { Bad_Opcode },
4393 { "roundsd", { XM, EXq, Ib } },
4394 },
4395
4396 /* PREFIX_0F3A0C */
4397 {
4398 { Bad_Opcode },
4399 { Bad_Opcode },
4400 { "blendps", { XM, EXx, Ib } },
4401 },
4402
4403 /* PREFIX_0F3A0D */
4404 {
4405 { Bad_Opcode },
4406 { Bad_Opcode },
4407 { "blendpd", { XM, EXx, Ib } },
4408 },
4409
4410 /* PREFIX_0F3A0E */
4411 {
4412 { Bad_Opcode },
4413 { Bad_Opcode },
4414 { "pblendw", { XM, EXx, Ib } },
4415 },
4416
4417 /* PREFIX_0F3A14 */
4418 {
4419 { Bad_Opcode },
4420 { Bad_Opcode },
4421 { "pextrb", { Edqb, XM, Ib } },
4422 },
4423
4424 /* PREFIX_0F3A15 */
4425 {
4426 { Bad_Opcode },
4427 { Bad_Opcode },
4428 { "pextrw", { Edqw, XM, Ib } },
4429 },
4430
4431 /* PREFIX_0F3A16 */
4432 {
4433 { Bad_Opcode },
4434 { Bad_Opcode },
4435 { "pextrK", { Edq, XM, Ib } },
4436 },
4437
4438 /* PREFIX_0F3A17 */
4439 {
4440 { Bad_Opcode },
4441 { Bad_Opcode },
4442 { "extractps", { Edqd, XM, Ib } },
4443 },
4444
4445 /* PREFIX_0F3A20 */
4446 {
4447 { Bad_Opcode },
4448 { Bad_Opcode },
4449 { "pinsrb", { XM, Edqb, Ib } },
4450 },
4451
4452 /* PREFIX_0F3A21 */
4453 {
4454 { Bad_Opcode },
4455 { Bad_Opcode },
4456 { "insertps", { XM, EXd, Ib } },
4457 },
4458
4459 /* PREFIX_0F3A22 */
4460 {
4461 { Bad_Opcode },
4462 { Bad_Opcode },
4463 { "pinsrK", { XM, Edq, Ib } },
4464 },
4465
4466 /* PREFIX_0F3A40 */
4467 {
4468 { Bad_Opcode },
4469 { Bad_Opcode },
4470 { "dpps", { XM, EXx, Ib } },
4471 },
4472
4473 /* PREFIX_0F3A41 */
4474 {
4475 { Bad_Opcode },
4476 { Bad_Opcode },
4477 { "dppd", { XM, EXx, Ib } },
4478 },
4479
4480 /* PREFIX_0F3A42 */
4481 {
4482 { Bad_Opcode },
4483 { Bad_Opcode },
4484 { "mpsadbw", { XM, EXx, Ib } },
4485 },
4486
4487 /* PREFIX_0F3A44 */
4488 {
4489 { Bad_Opcode },
4490 { Bad_Opcode },
4491 { "pclmulqdq", { XM, EXx, PCLMUL } },
4492 },
4493
4494 /* PREFIX_0F3A60 */
4495 {
4496 { Bad_Opcode },
4497 { Bad_Opcode },
4498 { "pcmpestrm", { XM, EXx, Ib } },
4499 },
4500
4501 /* PREFIX_0F3A61 */
4502 {
4503 { Bad_Opcode },
4504 { Bad_Opcode },
4505 { "pcmpestri", { XM, EXx, Ib } },
4506 },
4507
4508 /* PREFIX_0F3A62 */
4509 {
4510 { Bad_Opcode },
4511 { Bad_Opcode },
4512 { "pcmpistrm", { XM, EXx, Ib } },
4513 },
4514
4515 /* PREFIX_0F3A63 */
4516 {
4517 { Bad_Opcode },
4518 { Bad_Opcode },
4519 { "pcmpistri", { XM, EXx, Ib } },
4520 },
4521
4522 /* PREFIX_0F3ACC */
4523 {
4524 { "sha1rnds4", { XM, EXxmm, Ib } },
4525 },
4526
4527 /* PREFIX_0F3ADF */
4528 {
4529 { Bad_Opcode },
4530 { Bad_Opcode },
4531 { "aeskeygenassist", { XM, EXx, Ib } },
4532 },
4533
4534 /* PREFIX_VEX_0F10 */
4535 {
4536 { VEX_W_TABLE (VEX_W_0F10_P_0) },
4537 { VEX_LEN_TABLE (VEX_LEN_0F10_P_1) },
4538 { VEX_W_TABLE (VEX_W_0F10_P_2) },
4539 { VEX_LEN_TABLE (VEX_LEN_0F10_P_3) },
4540 },
4541
4542 /* PREFIX_VEX_0F11 */
4543 {
4544 { VEX_W_TABLE (VEX_W_0F11_P_0) },
4545 { VEX_LEN_TABLE (VEX_LEN_0F11_P_1) },
4546 { VEX_W_TABLE (VEX_W_0F11_P_2) },
4547 { VEX_LEN_TABLE (VEX_LEN_0F11_P_3) },
4548 },
4549
4550 /* PREFIX_VEX_0F12 */
4551 {
4552 { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
4553 { VEX_W_TABLE (VEX_W_0F12_P_1) },
4554 { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) },
4555 { VEX_W_TABLE (VEX_W_0F12_P_3) },
4556 },
4557
4558 /* PREFIX_VEX_0F16 */
4559 {
4560 { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
4561 { VEX_W_TABLE (VEX_W_0F16_P_1) },
4562 { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) },
4563 },
4564
4565 /* PREFIX_VEX_0F2A */
4566 {
4567 { Bad_Opcode },
4568 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_1) },
4569 { Bad_Opcode },
4570 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_3) },
4571 },
4572
4573 /* PREFIX_VEX_0F2C */
4574 {
4575 { Bad_Opcode },
4576 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_1) },
4577 { Bad_Opcode },
4578 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_3) },
4579 },
4580
4581 /* PREFIX_VEX_0F2D */
4582 {
4583 { Bad_Opcode },
4584 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_1) },
4585 { Bad_Opcode },
4586 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_3) },
4587 },
4588
4589 /* PREFIX_VEX_0F2E */
4590 {
4591 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_0) },
4592 { Bad_Opcode },
4593 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_2) },
4594 },
4595
4596 /* PREFIX_VEX_0F2F */
4597 {
4598 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_0) },
4599 { Bad_Opcode },
4600 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_2) },
4601 },
4602
4603 /* PREFIX_VEX_0F41 */
4604 {
4605 { VEX_LEN_TABLE (VEX_LEN_0F41_P_0) },
4606 { Bad_Opcode },
4607 { VEX_LEN_TABLE (VEX_LEN_0F41_P_2) },
4608 },
4609
4610 /* PREFIX_VEX_0F42 */
4611 {
4612 { VEX_LEN_TABLE (VEX_LEN_0F42_P_0) },
4613 { Bad_Opcode },
4614 { VEX_LEN_TABLE (VEX_LEN_0F42_P_2) },
4615 },
4616
4617 /* PREFIX_VEX_0F44 */
4618 {
4619 { VEX_LEN_TABLE (VEX_LEN_0F44_P_0) },
4620 { Bad_Opcode },
4621 { VEX_LEN_TABLE (VEX_LEN_0F44_P_2) },
4622 },
4623
4624 /* PREFIX_VEX_0F45 */
4625 {
4626 { VEX_LEN_TABLE (VEX_LEN_0F45_P_0) },
4627 { Bad_Opcode },
4628 { VEX_LEN_TABLE (VEX_LEN_0F45_P_2) },
4629 },
4630
4631 /* PREFIX_VEX_0F46 */
4632 {
4633 { VEX_LEN_TABLE (VEX_LEN_0F46_P_0) },
4634 { Bad_Opcode },
4635 { VEX_LEN_TABLE (VEX_LEN_0F46_P_2) },
4636 },
4637
4638 /* PREFIX_VEX_0F47 */
4639 {
4640 { VEX_LEN_TABLE (VEX_LEN_0F47_P_0) },
4641 { Bad_Opcode },
4642 { VEX_LEN_TABLE (VEX_LEN_0F47_P_2) },
4643 },
4644
4645 /* PREFIX_VEX_0F4A */
4646 {
4647 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_0) },
4648 { Bad_Opcode },
4649 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_2) },
4650 },
4651
4652 /* PREFIX_VEX_0F4B */
4653 {
4654 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_0) },
4655 { Bad_Opcode },
4656 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_2) },
4657 },
4658
4659 /* PREFIX_VEX_0F51 */
4660 {
4661 { VEX_W_TABLE (VEX_W_0F51_P_0) },
4662 { VEX_LEN_TABLE (VEX_LEN_0F51_P_1) },
4663 { VEX_W_TABLE (VEX_W_0F51_P_2) },
4664 { VEX_LEN_TABLE (VEX_LEN_0F51_P_3) },
4665 },
4666
4667 /* PREFIX_VEX_0F52 */
4668 {
4669 { VEX_W_TABLE (VEX_W_0F52_P_0) },
4670 { VEX_LEN_TABLE (VEX_LEN_0F52_P_1) },
4671 },
4672
4673 /* PREFIX_VEX_0F53 */
4674 {
4675 { VEX_W_TABLE (VEX_W_0F53_P_0) },
4676 { VEX_LEN_TABLE (VEX_LEN_0F53_P_1) },
4677 },
4678
4679 /* PREFIX_VEX_0F58 */
4680 {
4681 { VEX_W_TABLE (VEX_W_0F58_P_0) },
4682 { VEX_LEN_TABLE (VEX_LEN_0F58_P_1) },
4683 { VEX_W_TABLE (VEX_W_0F58_P_2) },
4684 { VEX_LEN_TABLE (VEX_LEN_0F58_P_3) },
4685 },
4686
4687 /* PREFIX_VEX_0F59 */
4688 {
4689 { VEX_W_TABLE (VEX_W_0F59_P_0) },
4690 { VEX_LEN_TABLE (VEX_LEN_0F59_P_1) },
4691 { VEX_W_TABLE (VEX_W_0F59_P_2) },
4692 { VEX_LEN_TABLE (VEX_LEN_0F59_P_3) },
4693 },
4694
4695 /* PREFIX_VEX_0F5A */
4696 {
4697 { VEX_W_TABLE (VEX_W_0F5A_P_0) },
4698 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_1) },
4699 { "vcvtpd2ps%XY", { XMM, EXx } },
4700 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_3) },
4701 },
4702
4703 /* PREFIX_VEX_0F5B */
4704 {
4705 { VEX_W_TABLE (VEX_W_0F5B_P_0) },
4706 { VEX_W_TABLE (VEX_W_0F5B_P_1) },
4707 { VEX_W_TABLE (VEX_W_0F5B_P_2) },
4708 },
4709
4710 /* PREFIX_VEX_0F5C */
4711 {
4712 { VEX_W_TABLE (VEX_W_0F5C_P_0) },
4713 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_1) },
4714 { VEX_W_TABLE (VEX_W_0F5C_P_2) },
4715 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_3) },
4716 },
4717
4718 /* PREFIX_VEX_0F5D */
4719 {
4720 { VEX_W_TABLE (VEX_W_0F5D_P_0) },
4721 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_1) },
4722 { VEX_W_TABLE (VEX_W_0F5D_P_2) },
4723 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_3) },
4724 },
4725
4726 /* PREFIX_VEX_0F5E */
4727 {
4728 { VEX_W_TABLE (VEX_W_0F5E_P_0) },
4729 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_1) },
4730 { VEX_W_TABLE (VEX_W_0F5E_P_2) },
4731 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_3) },
4732 },
4733
4734 /* PREFIX_VEX_0F5F */
4735 {
4736 { VEX_W_TABLE (VEX_W_0F5F_P_0) },
4737 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_1) },
4738 { VEX_W_TABLE (VEX_W_0F5F_P_2) },
4739 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_3) },
4740 },
4741
4742 /* PREFIX_VEX_0F60 */
4743 {
4744 { Bad_Opcode },
4745 { Bad_Opcode },
4746 { VEX_W_TABLE (VEX_W_0F60_P_2) },
4747 },
4748
4749 /* PREFIX_VEX_0F61 */
4750 {
4751 { Bad_Opcode },
4752 { Bad_Opcode },
4753 { VEX_W_TABLE (VEX_W_0F61_P_2) },
4754 },
4755
4756 /* PREFIX_VEX_0F62 */
4757 {
4758 { Bad_Opcode },
4759 { Bad_Opcode },
4760 { VEX_W_TABLE (VEX_W_0F62_P_2) },
4761 },
4762
4763 /* PREFIX_VEX_0F63 */
4764 {
4765 { Bad_Opcode },
4766 { Bad_Opcode },
4767 { VEX_W_TABLE (VEX_W_0F63_P_2) },
4768 },
4769
4770 /* PREFIX_VEX_0F64 */
4771 {
4772 { Bad_Opcode },
4773 { Bad_Opcode },
4774 { VEX_W_TABLE (VEX_W_0F64_P_2) },
4775 },
4776
4777 /* PREFIX_VEX_0F65 */
4778 {
4779 { Bad_Opcode },
4780 { Bad_Opcode },
4781 { VEX_W_TABLE (VEX_W_0F65_P_2) },
4782 },
4783
4784 /* PREFIX_VEX_0F66 */
4785 {
4786 { Bad_Opcode },
4787 { Bad_Opcode },
4788 { VEX_W_TABLE (VEX_W_0F66_P_2) },
4789 },
4790
4791 /* PREFIX_VEX_0F67 */
4792 {
4793 { Bad_Opcode },
4794 { Bad_Opcode },
4795 { VEX_W_TABLE (VEX_W_0F67_P_2) },
4796 },
4797
4798 /* PREFIX_VEX_0F68 */
4799 {
4800 { Bad_Opcode },
4801 { Bad_Opcode },
4802 { VEX_W_TABLE (VEX_W_0F68_P_2) },
4803 },
4804
4805 /* PREFIX_VEX_0F69 */
4806 {
4807 { Bad_Opcode },
4808 { Bad_Opcode },
4809 { VEX_W_TABLE (VEX_W_0F69_P_2) },
4810 },
4811
4812 /* PREFIX_VEX_0F6A */
4813 {
4814 { Bad_Opcode },
4815 { Bad_Opcode },
4816 { VEX_W_TABLE (VEX_W_0F6A_P_2) },
4817 },
4818
4819 /* PREFIX_VEX_0F6B */
4820 {
4821 { Bad_Opcode },
4822 { Bad_Opcode },
4823 { VEX_W_TABLE (VEX_W_0F6B_P_2) },
4824 },
4825
4826 /* PREFIX_VEX_0F6C */
4827 {
4828 { Bad_Opcode },
4829 { Bad_Opcode },
4830 { VEX_W_TABLE (VEX_W_0F6C_P_2) },
4831 },
4832
4833 /* PREFIX_VEX_0F6D */
4834 {
4835 { Bad_Opcode },
4836 { Bad_Opcode },
4837 { VEX_W_TABLE (VEX_W_0F6D_P_2) },
4838 },
4839
4840 /* PREFIX_VEX_0F6E */
4841 {
4842 { Bad_Opcode },
4843 { Bad_Opcode },
4844 { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) },
4845 },
4846
4847 /* PREFIX_VEX_0F6F */
4848 {
4849 { Bad_Opcode },
4850 { VEX_W_TABLE (VEX_W_0F6F_P_1) },
4851 { VEX_W_TABLE (VEX_W_0F6F_P_2) },
4852 },
4853
4854 /* PREFIX_VEX_0F70 */
4855 {
4856 { Bad_Opcode },
4857 { VEX_W_TABLE (VEX_W_0F70_P_1) },
4858 { VEX_W_TABLE (VEX_W_0F70_P_2) },
4859 { VEX_W_TABLE (VEX_W_0F70_P_3) },
4860 },
4861
4862 /* PREFIX_VEX_0F71_REG_2 */
4863 {
4864 { Bad_Opcode },
4865 { Bad_Opcode },
4866 { VEX_W_TABLE (VEX_W_0F71_R_2_P_2) },
4867 },
4868
4869 /* PREFIX_VEX_0F71_REG_4 */
4870 {
4871 { Bad_Opcode },
4872 { Bad_Opcode },
4873 { VEX_W_TABLE (VEX_W_0F71_R_4_P_2) },
4874 },
4875
4876 /* PREFIX_VEX_0F71_REG_6 */
4877 {
4878 { Bad_Opcode },
4879 { Bad_Opcode },
4880 { VEX_W_TABLE (VEX_W_0F71_R_6_P_2) },
4881 },
4882
4883 /* PREFIX_VEX_0F72_REG_2 */
4884 {
4885 { Bad_Opcode },
4886 { Bad_Opcode },
4887 { VEX_W_TABLE (VEX_W_0F72_R_2_P_2) },
4888 },
4889
4890 /* PREFIX_VEX_0F72_REG_4 */
4891 {
4892 { Bad_Opcode },
4893 { Bad_Opcode },
4894 { VEX_W_TABLE (VEX_W_0F72_R_4_P_2) },
4895 },
4896
4897 /* PREFIX_VEX_0F72_REG_6 */
4898 {
4899 { Bad_Opcode },
4900 { Bad_Opcode },
4901 { VEX_W_TABLE (VEX_W_0F72_R_6_P_2) },
4902 },
4903
4904 /* PREFIX_VEX_0F73_REG_2 */
4905 {
4906 { Bad_Opcode },
4907 { Bad_Opcode },
4908 { VEX_W_TABLE (VEX_W_0F73_R_2_P_2) },
4909 },
4910
4911 /* PREFIX_VEX_0F73_REG_3 */
4912 {
4913 { Bad_Opcode },
4914 { Bad_Opcode },
4915 { VEX_W_TABLE (VEX_W_0F73_R_3_P_2) },
4916 },
4917
4918 /* PREFIX_VEX_0F73_REG_6 */
4919 {
4920 { Bad_Opcode },
4921 { Bad_Opcode },
4922 { VEX_W_TABLE (VEX_W_0F73_R_6_P_2) },
4923 },
4924
4925 /* PREFIX_VEX_0F73_REG_7 */
4926 {
4927 { Bad_Opcode },
4928 { Bad_Opcode },
4929 { VEX_W_TABLE (VEX_W_0F73_R_7_P_2) },
4930 },
4931
4932 /* PREFIX_VEX_0F74 */
4933 {
4934 { Bad_Opcode },
4935 { Bad_Opcode },
4936 { VEX_W_TABLE (VEX_W_0F74_P_2) },
4937 },
4938
4939 /* PREFIX_VEX_0F75 */
4940 {
4941 { Bad_Opcode },
4942 { Bad_Opcode },
4943 { VEX_W_TABLE (VEX_W_0F75_P_2) },
4944 },
4945
4946 /* PREFIX_VEX_0F76 */
4947 {
4948 { Bad_Opcode },
4949 { Bad_Opcode },
4950 { VEX_W_TABLE (VEX_W_0F76_P_2) },
4951 },
4952
4953 /* PREFIX_VEX_0F77 */
4954 {
4955 { VEX_W_TABLE (VEX_W_0F77_P_0) },
4956 },
4957
4958 /* PREFIX_VEX_0F7C */
4959 {
4960 { Bad_Opcode },
4961 { Bad_Opcode },
4962 { VEX_W_TABLE (VEX_W_0F7C_P_2) },
4963 { VEX_W_TABLE (VEX_W_0F7C_P_3) },
4964 },
4965
4966 /* PREFIX_VEX_0F7D */
4967 {
4968 { Bad_Opcode },
4969 { Bad_Opcode },
4970 { VEX_W_TABLE (VEX_W_0F7D_P_2) },
4971 { VEX_W_TABLE (VEX_W_0F7D_P_3) },
4972 },
4973
4974 /* PREFIX_VEX_0F7E */
4975 {
4976 { Bad_Opcode },
4977 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) },
4978 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
4979 },
4980
4981 /* PREFIX_VEX_0F7F */
4982 {
4983 { Bad_Opcode },
4984 { VEX_W_TABLE (VEX_W_0F7F_P_1) },
4985 { VEX_W_TABLE (VEX_W_0F7F_P_2) },
4986 },
4987
4988 /* PREFIX_VEX_0F90 */
4989 {
4990 { VEX_LEN_TABLE (VEX_LEN_0F90_P_0) },
4991 { Bad_Opcode },
4992 { VEX_LEN_TABLE (VEX_LEN_0F90_P_2) },
4993 },
4994
4995 /* PREFIX_VEX_0F91 */
4996 {
4997 { VEX_LEN_TABLE (VEX_LEN_0F91_P_0) },
4998 { Bad_Opcode },
4999 { VEX_LEN_TABLE (VEX_LEN_0F91_P_2) },
5000 },
5001
5002 /* PREFIX_VEX_0F92 */
5003 {
5004 { VEX_LEN_TABLE (VEX_LEN_0F92_P_0) },
5005 { Bad_Opcode },
5006 { Bad_Opcode },
5007 { VEX_LEN_TABLE (VEX_LEN_0F92_P_3) },
5008 },
5009
5010 /* PREFIX_VEX_0F93 */
5011 {
5012 { VEX_LEN_TABLE (VEX_LEN_0F93_P_0) },
5013 { Bad_Opcode },
5014 { Bad_Opcode },
5015 { VEX_LEN_TABLE (VEX_LEN_0F93_P_3) },
5016 },
5017
5018 /* PREFIX_VEX_0F98 */
5019 {
5020 { VEX_LEN_TABLE (VEX_LEN_0F98_P_0) },
5021 { Bad_Opcode },
5022 { VEX_LEN_TABLE (VEX_LEN_0F98_P_2) },
5023 },
5024
5025 /* PREFIX_VEX_0F99 */
5026 {
5027 { VEX_LEN_TABLE (VEX_LEN_0F99_P_0) },
5028 { Bad_Opcode },
5029 { VEX_LEN_TABLE (VEX_LEN_0F99_P_2) },
5030 },
5031
5032 /* PREFIX_VEX_0FC2 */
5033 {
5034 { VEX_W_TABLE (VEX_W_0FC2_P_0) },
5035 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_1) },
5036 { VEX_W_TABLE (VEX_W_0FC2_P_2) },
5037 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_3) },
5038 },
5039
5040 /* PREFIX_VEX_0FC4 */
5041 {
5042 { Bad_Opcode },
5043 { Bad_Opcode },
5044 { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) },
5045 },
5046
5047 /* PREFIX_VEX_0FC5 */
5048 {
5049 { Bad_Opcode },
5050 { Bad_Opcode },
5051 { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) },
5052 },
5053
5054 /* PREFIX_VEX_0FD0 */
5055 {
5056 { Bad_Opcode },
5057 { Bad_Opcode },
5058 { VEX_W_TABLE (VEX_W_0FD0_P_2) },
5059 { VEX_W_TABLE (VEX_W_0FD0_P_3) },
5060 },
5061
5062 /* PREFIX_VEX_0FD1 */
5063 {
5064 { Bad_Opcode },
5065 { Bad_Opcode },
5066 { VEX_W_TABLE (VEX_W_0FD1_P_2) },
5067 },
5068
5069 /* PREFIX_VEX_0FD2 */
5070 {
5071 { Bad_Opcode },
5072 { Bad_Opcode },
5073 { VEX_W_TABLE (VEX_W_0FD2_P_2) },
5074 },
5075
5076 /* PREFIX_VEX_0FD3 */
5077 {
5078 { Bad_Opcode },
5079 { Bad_Opcode },
5080 { VEX_W_TABLE (VEX_W_0FD3_P_2) },
5081 },
5082
5083 /* PREFIX_VEX_0FD4 */
5084 {
5085 { Bad_Opcode },
5086 { Bad_Opcode },
5087 { VEX_W_TABLE (VEX_W_0FD4_P_2) },
5088 },
5089
5090 /* PREFIX_VEX_0FD5 */
5091 {
5092 { Bad_Opcode },
5093 { Bad_Opcode },
5094 { VEX_W_TABLE (VEX_W_0FD5_P_2) },
5095 },
5096
5097 /* PREFIX_VEX_0FD6 */
5098 {
5099 { Bad_Opcode },
5100 { Bad_Opcode },
5101 { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) },
5102 },
5103
5104 /* PREFIX_VEX_0FD7 */
5105 {
5106 { Bad_Opcode },
5107 { Bad_Opcode },
5108 { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) },
5109 },
5110
5111 /* PREFIX_VEX_0FD8 */
5112 {
5113 { Bad_Opcode },
5114 { Bad_Opcode },
5115 { VEX_W_TABLE (VEX_W_0FD8_P_2) },
5116 },
5117
5118 /* PREFIX_VEX_0FD9 */
5119 {
5120 { Bad_Opcode },
5121 { Bad_Opcode },
5122 { VEX_W_TABLE (VEX_W_0FD9_P_2) },
5123 },
5124
5125 /* PREFIX_VEX_0FDA */
5126 {
5127 { Bad_Opcode },
5128 { Bad_Opcode },
5129 { VEX_W_TABLE (VEX_W_0FDA_P_2) },
5130 },
5131
5132 /* PREFIX_VEX_0FDB */
5133 {
5134 { Bad_Opcode },
5135 { Bad_Opcode },
5136 { VEX_W_TABLE (VEX_W_0FDB_P_2) },
5137 },
5138
5139 /* PREFIX_VEX_0FDC */
5140 {
5141 { Bad_Opcode },
5142 { Bad_Opcode },
5143 { VEX_W_TABLE (VEX_W_0FDC_P_2) },
5144 },
5145
5146 /* PREFIX_VEX_0FDD */
5147 {
5148 { Bad_Opcode },
5149 { Bad_Opcode },
5150 { VEX_W_TABLE (VEX_W_0FDD_P_2) },
5151 },
5152
5153 /* PREFIX_VEX_0FDE */
5154 {
5155 { Bad_Opcode },
5156 { Bad_Opcode },
5157 { VEX_W_TABLE (VEX_W_0FDE_P_2) },
5158 },
5159
5160 /* PREFIX_VEX_0FDF */
5161 {
5162 { Bad_Opcode },
5163 { Bad_Opcode },
5164 { VEX_W_TABLE (VEX_W_0FDF_P_2) },
5165 },
5166
5167 /* PREFIX_VEX_0FE0 */
5168 {
5169 { Bad_Opcode },
5170 { Bad_Opcode },
5171 { VEX_W_TABLE (VEX_W_0FE0_P_2) },
5172 },
5173
5174 /* PREFIX_VEX_0FE1 */
5175 {
5176 { Bad_Opcode },
5177 { Bad_Opcode },
5178 { VEX_W_TABLE (VEX_W_0FE1_P_2) },
5179 },
5180
5181 /* PREFIX_VEX_0FE2 */
5182 {
5183 { Bad_Opcode },
5184 { Bad_Opcode },
5185 { VEX_W_TABLE (VEX_W_0FE2_P_2) },
5186 },
5187
5188 /* PREFIX_VEX_0FE3 */
5189 {
5190 { Bad_Opcode },
5191 { Bad_Opcode },
5192 { VEX_W_TABLE (VEX_W_0FE3_P_2) },
5193 },
5194
5195 /* PREFIX_VEX_0FE4 */
5196 {
5197 { Bad_Opcode },
5198 { Bad_Opcode },
5199 { VEX_W_TABLE (VEX_W_0FE4_P_2) },
5200 },
5201
5202 /* PREFIX_VEX_0FE5 */
5203 {
5204 { Bad_Opcode },
5205 { Bad_Opcode },
5206 { VEX_W_TABLE (VEX_W_0FE5_P_2) },
5207 },
5208
5209 /* PREFIX_VEX_0FE6 */
5210 {
5211 { Bad_Opcode },
5212 { VEX_W_TABLE (VEX_W_0FE6_P_1) },
5213 { VEX_W_TABLE (VEX_W_0FE6_P_2) },
5214 { VEX_W_TABLE (VEX_W_0FE6_P_3) },
5215 },
5216
5217 /* PREFIX_VEX_0FE7 */
5218 {
5219 { Bad_Opcode },
5220 { Bad_Opcode },
5221 { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) },
5222 },
5223
5224 /* PREFIX_VEX_0FE8 */
5225 {
5226 { Bad_Opcode },
5227 { Bad_Opcode },
5228 { VEX_W_TABLE (VEX_W_0FE8_P_2) },
5229 },
5230
5231 /* PREFIX_VEX_0FE9 */
5232 {
5233 { Bad_Opcode },
5234 { Bad_Opcode },
5235 { VEX_W_TABLE (VEX_W_0FE9_P_2) },
5236 },
5237
5238 /* PREFIX_VEX_0FEA */
5239 {
5240 { Bad_Opcode },
5241 { Bad_Opcode },
5242 { VEX_W_TABLE (VEX_W_0FEA_P_2) },
5243 },
5244
5245 /* PREFIX_VEX_0FEB */
5246 {
5247 { Bad_Opcode },
5248 { Bad_Opcode },
5249 { VEX_W_TABLE (VEX_W_0FEB_P_2) },
5250 },
5251
5252 /* PREFIX_VEX_0FEC */
5253 {
5254 { Bad_Opcode },
5255 { Bad_Opcode },
5256 { VEX_W_TABLE (VEX_W_0FEC_P_2) },
5257 },
5258
5259 /* PREFIX_VEX_0FED */
5260 {
5261 { Bad_Opcode },
5262 { Bad_Opcode },
5263 { VEX_W_TABLE (VEX_W_0FED_P_2) },
5264 },
5265
5266 /* PREFIX_VEX_0FEE */
5267 {
5268 { Bad_Opcode },
5269 { Bad_Opcode },
5270 { VEX_W_TABLE (VEX_W_0FEE_P_2) },
5271 },
5272
5273 /* PREFIX_VEX_0FEF */
5274 {
5275 { Bad_Opcode },
5276 { Bad_Opcode },
5277 { VEX_W_TABLE (VEX_W_0FEF_P_2) },
5278 },
5279
5280 /* PREFIX_VEX_0FF0 */
5281 {
5282 { Bad_Opcode },
5283 { Bad_Opcode },
5284 { Bad_Opcode },
5285 { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) },
5286 },
5287
5288 /* PREFIX_VEX_0FF1 */
5289 {
5290 { Bad_Opcode },
5291 { Bad_Opcode },
5292 { VEX_W_TABLE (VEX_W_0FF1_P_2) },
5293 },
5294
5295 /* PREFIX_VEX_0FF2 */
5296 {
5297 { Bad_Opcode },
5298 { Bad_Opcode },
5299 { VEX_W_TABLE (VEX_W_0FF2_P_2) },
5300 },
5301
5302 /* PREFIX_VEX_0FF3 */
5303 {
5304 { Bad_Opcode },
5305 { Bad_Opcode },
5306 { VEX_W_TABLE (VEX_W_0FF3_P_2) },
5307 },
5308
5309 /* PREFIX_VEX_0FF4 */
5310 {
5311 { Bad_Opcode },
5312 { Bad_Opcode },
5313 { VEX_W_TABLE (VEX_W_0FF4_P_2) },
5314 },
5315
5316 /* PREFIX_VEX_0FF5 */
5317 {
5318 { Bad_Opcode },
5319 { Bad_Opcode },
5320 { VEX_W_TABLE (VEX_W_0FF5_P_2) },
5321 },
5322
5323 /* PREFIX_VEX_0FF6 */
5324 {
5325 { Bad_Opcode },
5326 { Bad_Opcode },
5327 { VEX_W_TABLE (VEX_W_0FF6_P_2) },
5328 },
5329
5330 /* PREFIX_VEX_0FF7 */
5331 {
5332 { Bad_Opcode },
5333 { Bad_Opcode },
5334 { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) },
5335 },
5336
5337 /* PREFIX_VEX_0FF8 */
5338 {
5339 { Bad_Opcode },
5340 { Bad_Opcode },
5341 { VEX_W_TABLE (VEX_W_0FF8_P_2) },
5342 },
5343
5344 /* PREFIX_VEX_0FF9 */
5345 {
5346 { Bad_Opcode },
5347 { Bad_Opcode },
5348 { VEX_W_TABLE (VEX_W_0FF9_P_2) },
5349 },
5350
5351 /* PREFIX_VEX_0FFA */
5352 {
5353 { Bad_Opcode },
5354 { Bad_Opcode },
5355 { VEX_W_TABLE (VEX_W_0FFA_P_2) },
5356 },
5357
5358 /* PREFIX_VEX_0FFB */
5359 {
5360 { Bad_Opcode },
5361 { Bad_Opcode },
5362 { VEX_W_TABLE (VEX_W_0FFB_P_2) },
5363 },
5364
5365 /* PREFIX_VEX_0FFC */
5366 {
5367 { Bad_Opcode },
5368 { Bad_Opcode },
5369 { VEX_W_TABLE (VEX_W_0FFC_P_2) },
5370 },
5371
5372 /* PREFIX_VEX_0FFD */
5373 {
5374 { Bad_Opcode },
5375 { Bad_Opcode },
5376 { VEX_W_TABLE (VEX_W_0FFD_P_2) },
5377 },
5378
5379 /* PREFIX_VEX_0FFE */
5380 {
5381 { Bad_Opcode },
5382 { Bad_Opcode },
5383 { VEX_W_TABLE (VEX_W_0FFE_P_2) },
5384 },
5385
5386 /* PREFIX_VEX_0F3800 */
5387 {
5388 { Bad_Opcode },
5389 { Bad_Opcode },
5390 { VEX_W_TABLE (VEX_W_0F3800_P_2) },
5391 },
5392
5393 /* PREFIX_VEX_0F3801 */
5394 {
5395 { Bad_Opcode },
5396 { Bad_Opcode },
5397 { VEX_W_TABLE (VEX_W_0F3801_P_2) },
5398 },
5399
5400 /* PREFIX_VEX_0F3802 */
5401 {
5402 { Bad_Opcode },
5403 { Bad_Opcode },
5404 { VEX_W_TABLE (VEX_W_0F3802_P_2) },
5405 },
5406
5407 /* PREFIX_VEX_0F3803 */
5408 {
5409 { Bad_Opcode },
5410 { Bad_Opcode },
5411 { VEX_W_TABLE (VEX_W_0F3803_P_2) },
5412 },
5413
5414 /* PREFIX_VEX_0F3804 */
5415 {
5416 { Bad_Opcode },
5417 { Bad_Opcode },
5418 { VEX_W_TABLE (VEX_W_0F3804_P_2) },
5419 },
5420
5421 /* PREFIX_VEX_0F3805 */
5422 {
5423 { Bad_Opcode },
5424 { Bad_Opcode },
5425 { VEX_W_TABLE (VEX_W_0F3805_P_2) },
5426 },
5427
5428 /* PREFIX_VEX_0F3806 */
5429 {
5430 { Bad_Opcode },
5431 { Bad_Opcode },
5432 { VEX_W_TABLE (VEX_W_0F3806_P_2) },
5433 },
5434
5435 /* PREFIX_VEX_0F3807 */
5436 {
5437 { Bad_Opcode },
5438 { Bad_Opcode },
5439 { VEX_W_TABLE (VEX_W_0F3807_P_2) },
5440 },
5441
5442 /* PREFIX_VEX_0F3808 */
5443 {
5444 { Bad_Opcode },
5445 { Bad_Opcode },
5446 { VEX_W_TABLE (VEX_W_0F3808_P_2) },
5447 },
5448
5449 /* PREFIX_VEX_0F3809 */
5450 {
5451 { Bad_Opcode },
5452 { Bad_Opcode },
5453 { VEX_W_TABLE (VEX_W_0F3809_P_2) },
5454 },
5455
5456 /* PREFIX_VEX_0F380A */
5457 {
5458 { Bad_Opcode },
5459 { Bad_Opcode },
5460 { VEX_W_TABLE (VEX_W_0F380A_P_2) },
5461 },
5462
5463 /* PREFIX_VEX_0F380B */
5464 {
5465 { Bad_Opcode },
5466 { Bad_Opcode },
5467 { VEX_W_TABLE (VEX_W_0F380B_P_2) },
5468 },
5469
5470 /* PREFIX_VEX_0F380C */
5471 {
5472 { Bad_Opcode },
5473 { Bad_Opcode },
5474 { VEX_W_TABLE (VEX_W_0F380C_P_2) },
5475 },
5476
5477 /* PREFIX_VEX_0F380D */
5478 {
5479 { Bad_Opcode },
5480 { Bad_Opcode },
5481 { VEX_W_TABLE (VEX_W_0F380D_P_2) },
5482 },
5483
5484 /* PREFIX_VEX_0F380E */
5485 {
5486 { Bad_Opcode },
5487 { Bad_Opcode },
5488 { VEX_W_TABLE (VEX_W_0F380E_P_2) },
5489 },
5490
5491 /* PREFIX_VEX_0F380F */
5492 {
5493 { Bad_Opcode },
5494 { Bad_Opcode },
5495 { VEX_W_TABLE (VEX_W_0F380F_P_2) },
5496 },
5497
5498 /* PREFIX_VEX_0F3813 */
5499 {
5500 { Bad_Opcode },
5501 { Bad_Opcode },
5502 { "vcvtph2ps", { XM, EXxmmq } },
5503 },
5504
5505 /* PREFIX_VEX_0F3816 */
5506 {
5507 { Bad_Opcode },
5508 { Bad_Opcode },
5509 { VEX_LEN_TABLE (VEX_LEN_0F3816_P_2) },
5510 },
5511
5512 /* PREFIX_VEX_0F3817 */
5513 {
5514 { Bad_Opcode },
5515 { Bad_Opcode },
5516 { VEX_W_TABLE (VEX_W_0F3817_P_2) },
5517 },
5518
5519 /* PREFIX_VEX_0F3818 */
5520 {
5521 { Bad_Opcode },
5522 { Bad_Opcode },
5523 { VEX_W_TABLE (VEX_W_0F3818_P_2) },
5524 },
5525
5526 /* PREFIX_VEX_0F3819 */
5527 {
5528 { Bad_Opcode },
5529 { Bad_Opcode },
5530 { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2) },
5531 },
5532
5533 /* PREFIX_VEX_0F381A */
5534 {
5535 { Bad_Opcode },
5536 { Bad_Opcode },
5537 { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) },
5538 },
5539
5540 /* PREFIX_VEX_0F381C */
5541 {
5542 { Bad_Opcode },
5543 { Bad_Opcode },
5544 { VEX_W_TABLE (VEX_W_0F381C_P_2) },
5545 },
5546
5547 /* PREFIX_VEX_0F381D */
5548 {
5549 { Bad_Opcode },
5550 { Bad_Opcode },
5551 { VEX_W_TABLE (VEX_W_0F381D_P_2) },
5552 },
5553
5554 /* PREFIX_VEX_0F381E */
5555 {
5556 { Bad_Opcode },
5557 { Bad_Opcode },
5558 { VEX_W_TABLE (VEX_W_0F381E_P_2) },
5559 },
5560
5561 /* PREFIX_VEX_0F3820 */
5562 {
5563 { Bad_Opcode },
5564 { Bad_Opcode },
5565 { VEX_W_TABLE (VEX_W_0F3820_P_2) },
5566 },
5567
5568 /* PREFIX_VEX_0F3821 */
5569 {
5570 { Bad_Opcode },
5571 { Bad_Opcode },
5572 { VEX_W_TABLE (VEX_W_0F3821_P_2) },
5573 },
5574
5575 /* PREFIX_VEX_0F3822 */
5576 {
5577 { Bad_Opcode },
5578 { Bad_Opcode },
5579 { VEX_W_TABLE (VEX_W_0F3822_P_2) },
5580 },
5581
5582 /* PREFIX_VEX_0F3823 */
5583 {
5584 { Bad_Opcode },
5585 { Bad_Opcode },
5586 { VEX_W_TABLE (VEX_W_0F3823_P_2) },
5587 },
5588
5589 /* PREFIX_VEX_0F3824 */
5590 {
5591 { Bad_Opcode },
5592 { Bad_Opcode },
5593 { VEX_W_TABLE (VEX_W_0F3824_P_2) },
5594 },
5595
5596 /* PREFIX_VEX_0F3825 */
5597 {
5598 { Bad_Opcode },
5599 { Bad_Opcode },
5600 { VEX_W_TABLE (VEX_W_0F3825_P_2) },
5601 },
5602
5603 /* PREFIX_VEX_0F3828 */
5604 {
5605 { Bad_Opcode },
5606 { Bad_Opcode },
5607 { VEX_W_TABLE (VEX_W_0F3828_P_2) },
5608 },
5609
5610 /* PREFIX_VEX_0F3829 */
5611 {
5612 { Bad_Opcode },
5613 { Bad_Opcode },
5614 { VEX_W_TABLE (VEX_W_0F3829_P_2) },
5615 },
5616
5617 /* PREFIX_VEX_0F382A */
5618 {
5619 { Bad_Opcode },
5620 { Bad_Opcode },
5621 { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) },
5622 },
5623
5624 /* PREFIX_VEX_0F382B */
5625 {
5626 { Bad_Opcode },
5627 { Bad_Opcode },
5628 { VEX_W_TABLE (VEX_W_0F382B_P_2) },
5629 },
5630
5631 /* PREFIX_VEX_0F382C */
5632 {
5633 { Bad_Opcode },
5634 { Bad_Opcode },
5635 { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) },
5636 },
5637
5638 /* PREFIX_VEX_0F382D */
5639 {
5640 { Bad_Opcode },
5641 { Bad_Opcode },
5642 { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) },
5643 },
5644
5645 /* PREFIX_VEX_0F382E */
5646 {
5647 { Bad_Opcode },
5648 { Bad_Opcode },
5649 { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) },
5650 },
5651
5652 /* PREFIX_VEX_0F382F */
5653 {
5654 { Bad_Opcode },
5655 { Bad_Opcode },
5656 { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) },
5657 },
5658
5659 /* PREFIX_VEX_0F3830 */
5660 {
5661 { Bad_Opcode },
5662 { Bad_Opcode },
5663 { VEX_W_TABLE (VEX_W_0F3830_P_2) },
5664 },
5665
5666 /* PREFIX_VEX_0F3831 */
5667 {
5668 { Bad_Opcode },
5669 { Bad_Opcode },
5670 { VEX_W_TABLE (VEX_W_0F3831_P_2) },
5671 },
5672
5673 /* PREFIX_VEX_0F3832 */
5674 {
5675 { Bad_Opcode },
5676 { Bad_Opcode },
5677 { VEX_W_TABLE (VEX_W_0F3832_P_2) },
5678 },
5679
5680 /* PREFIX_VEX_0F3833 */
5681 {
5682 { Bad_Opcode },
5683 { Bad_Opcode },
5684 { VEX_W_TABLE (VEX_W_0F3833_P_2) },
5685 },
5686
5687 /* PREFIX_VEX_0F3834 */
5688 {
5689 { Bad_Opcode },
5690 { Bad_Opcode },
5691 { VEX_W_TABLE (VEX_W_0F3834_P_2) },
5692 },
5693
5694 /* PREFIX_VEX_0F3835 */
5695 {
5696 { Bad_Opcode },
5697 { Bad_Opcode },
5698 { VEX_W_TABLE (VEX_W_0F3835_P_2) },
5699 },
5700
5701 /* PREFIX_VEX_0F3836 */
5702 {
5703 { Bad_Opcode },
5704 { Bad_Opcode },
5705 { VEX_LEN_TABLE (VEX_LEN_0F3836_P_2) },
5706 },
5707
5708 /* PREFIX_VEX_0F3837 */
5709 {
5710 { Bad_Opcode },
5711 { Bad_Opcode },
5712 { VEX_W_TABLE (VEX_W_0F3837_P_2) },
5713 },
5714
5715 /* PREFIX_VEX_0F3838 */
5716 {
5717 { Bad_Opcode },
5718 { Bad_Opcode },
5719 { VEX_W_TABLE (VEX_W_0F3838_P_2) },
5720 },
5721
5722 /* PREFIX_VEX_0F3839 */
5723 {
5724 { Bad_Opcode },
5725 { Bad_Opcode },
5726 { VEX_W_TABLE (VEX_W_0F3839_P_2) },
5727 },
5728
5729 /* PREFIX_VEX_0F383A */
5730 {
5731 { Bad_Opcode },
5732 { Bad_Opcode },
5733 { VEX_W_TABLE (VEX_W_0F383A_P_2) },
5734 },
5735
5736 /* PREFIX_VEX_0F383B */
5737 {
5738 { Bad_Opcode },
5739 { Bad_Opcode },
5740 { VEX_W_TABLE (VEX_W_0F383B_P_2) },
5741 },
5742
5743 /* PREFIX_VEX_0F383C */
5744 {
5745 { Bad_Opcode },
5746 { Bad_Opcode },
5747 { VEX_W_TABLE (VEX_W_0F383C_P_2) },
5748 },
5749
5750 /* PREFIX_VEX_0F383D */
5751 {
5752 { Bad_Opcode },
5753 { Bad_Opcode },
5754 { VEX_W_TABLE (VEX_W_0F383D_P_2) },
5755 },
5756
5757 /* PREFIX_VEX_0F383E */
5758 {
5759 { Bad_Opcode },
5760 { Bad_Opcode },
5761 { VEX_W_TABLE (VEX_W_0F383E_P_2) },
5762 },
5763
5764 /* PREFIX_VEX_0F383F */
5765 {
5766 { Bad_Opcode },
5767 { Bad_Opcode },
5768 { VEX_W_TABLE (VEX_W_0F383F_P_2) },
5769 },
5770
5771 /* PREFIX_VEX_0F3840 */
5772 {
5773 { Bad_Opcode },
5774 { Bad_Opcode },
5775 { VEX_W_TABLE (VEX_W_0F3840_P_2) },
5776 },
5777
5778 /* PREFIX_VEX_0F3841 */
5779 {
5780 { Bad_Opcode },
5781 { Bad_Opcode },
5782 { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) },
5783 },
5784
5785 /* PREFIX_VEX_0F3845 */
5786 {
5787 { Bad_Opcode },
5788 { Bad_Opcode },
5789 { "vpsrlv%LW", { XM, Vex, EXx } },
5790 },
5791
5792 /* PREFIX_VEX_0F3846 */
5793 {
5794 { Bad_Opcode },
5795 { Bad_Opcode },
5796 { VEX_W_TABLE (VEX_W_0F3846_P_2) },
5797 },
5798
5799 /* PREFIX_VEX_0F3847 */
5800 {
5801 { Bad_Opcode },
5802 { Bad_Opcode },
5803 { "vpsllv%LW", { XM, Vex, EXx } },
5804 },
5805
5806 /* PREFIX_VEX_0F3858 */
5807 {
5808 { Bad_Opcode },
5809 { Bad_Opcode },
5810 { VEX_W_TABLE (VEX_W_0F3858_P_2) },
5811 },
5812
5813 /* PREFIX_VEX_0F3859 */
5814 {
5815 { Bad_Opcode },
5816 { Bad_Opcode },
5817 { VEX_W_TABLE (VEX_W_0F3859_P_2) },
5818 },
5819
5820 /* PREFIX_VEX_0F385A */
5821 {
5822 { Bad_Opcode },
5823 { Bad_Opcode },
5824 { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) },
5825 },
5826
5827 /* PREFIX_VEX_0F3878 */
5828 {
5829 { Bad_Opcode },
5830 { Bad_Opcode },
5831 { VEX_W_TABLE (VEX_W_0F3878_P_2) },
5832 },
5833
5834 /* PREFIX_VEX_0F3879 */
5835 {
5836 { Bad_Opcode },
5837 { Bad_Opcode },
5838 { VEX_W_TABLE (VEX_W_0F3879_P_2) },
5839 },
5840
5841 /* PREFIX_VEX_0F388C */
5842 {
5843 { Bad_Opcode },
5844 { Bad_Opcode },
5845 { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) },
5846 },
5847
5848 /* PREFIX_VEX_0F388E */
5849 {
5850 { Bad_Opcode },
5851 { Bad_Opcode },
5852 { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) },
5853 },
5854
5855 /* PREFIX_VEX_0F3890 */
5856 {
5857 { Bad_Opcode },
5858 { Bad_Opcode },
5859 { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex } },
5860 },
5861
5862 /* PREFIX_VEX_0F3891 */
5863 {
5864 { Bad_Opcode },
5865 { Bad_Opcode },
5866 { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ } },
5867 },
5868
5869 /* PREFIX_VEX_0F3892 */
5870 {
5871 { Bad_Opcode },
5872 { Bad_Opcode },
5873 { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex } },
5874 },
5875
5876 /* PREFIX_VEX_0F3893 */
5877 {
5878 { Bad_Opcode },
5879 { Bad_Opcode },
5880 { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ } },
5881 },
5882
5883 /* PREFIX_VEX_0F3896 */
5884 {
5885 { Bad_Opcode },
5886 { Bad_Opcode },
5887 { "vfmaddsub132p%XW", { XM, Vex, EXx } },
5888 },
5889
5890 /* PREFIX_VEX_0F3897 */
5891 {
5892 { Bad_Opcode },
5893 { Bad_Opcode },
5894 { "vfmsubadd132p%XW", { XM, Vex, EXx } },
5895 },
5896
5897 /* PREFIX_VEX_0F3898 */
5898 {
5899 { Bad_Opcode },
5900 { Bad_Opcode },
5901 { "vfmadd132p%XW", { XM, Vex, EXx } },
5902 },
5903
5904 /* PREFIX_VEX_0F3899 */
5905 {
5906 { Bad_Opcode },
5907 { Bad_Opcode },
5908 { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
5909 },
5910
5911 /* PREFIX_VEX_0F389A */
5912 {
5913 { Bad_Opcode },
5914 { Bad_Opcode },
5915 { "vfmsub132p%XW", { XM, Vex, EXx } },
5916 },
5917
5918 /* PREFIX_VEX_0F389B */
5919 {
5920 { Bad_Opcode },
5921 { Bad_Opcode },
5922 { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
5923 },
5924
5925 /* PREFIX_VEX_0F389C */
5926 {
5927 { Bad_Opcode },
5928 { Bad_Opcode },
5929 { "vfnmadd132p%XW", { XM, Vex, EXx } },
5930 },
5931
5932 /* PREFIX_VEX_0F389D */
5933 {
5934 { Bad_Opcode },
5935 { Bad_Opcode },
5936 { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
5937 },
5938
5939 /* PREFIX_VEX_0F389E */
5940 {
5941 { Bad_Opcode },
5942 { Bad_Opcode },
5943 { "vfnmsub132p%XW", { XM, Vex, EXx } },
5944 },
5945
5946 /* PREFIX_VEX_0F389F */
5947 {
5948 { Bad_Opcode },
5949 { Bad_Opcode },
5950 { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
5951 },
5952
5953 /* PREFIX_VEX_0F38A6 */
5954 {
5955 { Bad_Opcode },
5956 { Bad_Opcode },
5957 { "vfmaddsub213p%XW", { XM, Vex, EXx } },
5958 { Bad_Opcode },
5959 },
5960
5961 /* PREFIX_VEX_0F38A7 */
5962 {
5963 { Bad_Opcode },
5964 { Bad_Opcode },
5965 { "vfmsubadd213p%XW", { XM, Vex, EXx } },
5966 },
5967
5968 /* PREFIX_VEX_0F38A8 */
5969 {
5970 { Bad_Opcode },
5971 { Bad_Opcode },
5972 { "vfmadd213p%XW", { XM, Vex, EXx } },
5973 },
5974
5975 /* PREFIX_VEX_0F38A9 */
5976 {
5977 { Bad_Opcode },
5978 { Bad_Opcode },
5979 { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
5980 },
5981
5982 /* PREFIX_VEX_0F38AA */
5983 {
5984 { Bad_Opcode },
5985 { Bad_Opcode },
5986 { "vfmsub213p%XW", { XM, Vex, EXx } },
5987 },
5988
5989 /* PREFIX_VEX_0F38AB */
5990 {
5991 { Bad_Opcode },
5992 { Bad_Opcode },
5993 { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
5994 },
5995
5996 /* PREFIX_VEX_0F38AC */
5997 {
5998 { Bad_Opcode },
5999 { Bad_Opcode },
6000 { "vfnmadd213p%XW", { XM, Vex, EXx } },
6001 },
6002
6003 /* PREFIX_VEX_0F38AD */
6004 {
6005 { Bad_Opcode },
6006 { Bad_Opcode },
6007 { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
6008 },
6009
6010 /* PREFIX_VEX_0F38AE */
6011 {
6012 { Bad_Opcode },
6013 { Bad_Opcode },
6014 { "vfnmsub213p%XW", { XM, Vex, EXx } },
6015 },
6016
6017 /* PREFIX_VEX_0F38AF */
6018 {
6019 { Bad_Opcode },
6020 { Bad_Opcode },
6021 { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
6022 },
6023
6024 /* PREFIX_VEX_0F38B6 */
6025 {
6026 { Bad_Opcode },
6027 { Bad_Opcode },
6028 { "vfmaddsub231p%XW", { XM, Vex, EXx } },
6029 },
6030
6031 /* PREFIX_VEX_0F38B7 */
6032 {
6033 { Bad_Opcode },
6034 { Bad_Opcode },
6035 { "vfmsubadd231p%XW", { XM, Vex, EXx } },
6036 },
6037
6038 /* PREFIX_VEX_0F38B8 */
6039 {
6040 { Bad_Opcode },
6041 { Bad_Opcode },
6042 { "vfmadd231p%XW", { XM, Vex, EXx } },
6043 },
6044
6045 /* PREFIX_VEX_0F38B9 */
6046 {
6047 { Bad_Opcode },
6048 { Bad_Opcode },
6049 { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
6050 },
6051
6052 /* PREFIX_VEX_0F38BA */
6053 {
6054 { Bad_Opcode },
6055 { Bad_Opcode },
6056 { "vfmsub231p%XW", { XM, Vex, EXx } },
6057 },
6058
6059 /* PREFIX_VEX_0F38BB */
6060 {
6061 { Bad_Opcode },
6062 { Bad_Opcode },
6063 { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
6064 },
6065
6066 /* PREFIX_VEX_0F38BC */
6067 {
6068 { Bad_Opcode },
6069 { Bad_Opcode },
6070 { "vfnmadd231p%XW", { XM, Vex, EXx } },
6071 },
6072
6073 /* PREFIX_VEX_0F38BD */
6074 {
6075 { Bad_Opcode },
6076 { Bad_Opcode },
6077 { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
6078 },
6079
6080 /* PREFIX_VEX_0F38BE */
6081 {
6082 { Bad_Opcode },
6083 { Bad_Opcode },
6084 { "vfnmsub231p%XW", { XM, Vex, EXx } },
6085 },
6086
6087 /* PREFIX_VEX_0F38BF */
6088 {
6089 { Bad_Opcode },
6090 { Bad_Opcode },
6091 { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
6092 },
6093
6094 /* PREFIX_VEX_0F38DB */
6095 {
6096 { Bad_Opcode },
6097 { Bad_Opcode },
6098 { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
6099 },
6100
6101 /* PREFIX_VEX_0F38DC */
6102 {
6103 { Bad_Opcode },
6104 { Bad_Opcode },
6105 { VEX_LEN_TABLE (VEX_LEN_0F38DC_P_2) },
6106 },
6107
6108 /* PREFIX_VEX_0F38DD */
6109 {
6110 { Bad_Opcode },
6111 { Bad_Opcode },
6112 { VEX_LEN_TABLE (VEX_LEN_0F38DD_P_2) },
6113 },
6114
6115 /* PREFIX_VEX_0F38DE */
6116 {
6117 { Bad_Opcode },
6118 { Bad_Opcode },
6119 { VEX_LEN_TABLE (VEX_LEN_0F38DE_P_2) },
6120 },
6121
6122 /* PREFIX_VEX_0F38DF */
6123 {
6124 { Bad_Opcode },
6125 { Bad_Opcode },
6126 { VEX_LEN_TABLE (VEX_LEN_0F38DF_P_2) },
6127 },
6128
6129 /* PREFIX_VEX_0F38F2 */
6130 {
6131 { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
6132 },
6133
6134 /* PREFIX_VEX_0F38F3_REG_1 */
6135 {
6136 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
6137 },
6138
6139 /* PREFIX_VEX_0F38F3_REG_2 */
6140 {
6141 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
6142 },
6143
6144 /* PREFIX_VEX_0F38F3_REG_3 */
6145 {
6146 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
6147 },
6148
6149 /* PREFIX_VEX_0F38F5 */
6150 {
6151 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) },
6152 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) },
6153 { Bad_Opcode },
6154 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) },
6155 },
6156
6157 /* PREFIX_VEX_0F38F6 */
6158 {
6159 { Bad_Opcode },
6160 { Bad_Opcode },
6161 { Bad_Opcode },
6162 { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) },
6163 },
6164
6165 /* PREFIX_VEX_0F38F7 */
6166 {
6167 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
6168 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) },
6169 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) },
6170 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) },
6171 },
6172
6173 /* PREFIX_VEX_0F3A00 */
6174 {
6175 { Bad_Opcode },
6176 { Bad_Opcode },
6177 { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) },
6178 },
6179
6180 /* PREFIX_VEX_0F3A01 */
6181 {
6182 { Bad_Opcode },
6183 { Bad_Opcode },
6184 { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) },
6185 },
6186
6187 /* PREFIX_VEX_0F3A02 */
6188 {
6189 { Bad_Opcode },
6190 { Bad_Opcode },
6191 { VEX_W_TABLE (VEX_W_0F3A02_P_2) },
6192 },
6193
6194 /* PREFIX_VEX_0F3A04 */
6195 {
6196 { Bad_Opcode },
6197 { Bad_Opcode },
6198 { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
6199 },
6200
6201 /* PREFIX_VEX_0F3A05 */
6202 {
6203 { Bad_Opcode },
6204 { Bad_Opcode },
6205 { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
6206 },
6207
6208 /* PREFIX_VEX_0F3A06 */
6209 {
6210 { Bad_Opcode },
6211 { Bad_Opcode },
6212 { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
6213 },
6214
6215 /* PREFIX_VEX_0F3A08 */
6216 {
6217 { Bad_Opcode },
6218 { Bad_Opcode },
6219 { VEX_W_TABLE (VEX_W_0F3A08_P_2) },
6220 },
6221
6222 /* PREFIX_VEX_0F3A09 */
6223 {
6224 { Bad_Opcode },
6225 { Bad_Opcode },
6226 { VEX_W_TABLE (VEX_W_0F3A09_P_2) },
6227 },
6228
6229 /* PREFIX_VEX_0F3A0A */
6230 {
6231 { Bad_Opcode },
6232 { Bad_Opcode },
6233 { VEX_LEN_TABLE (VEX_LEN_0F3A0A_P_2) },
6234 },
6235
6236 /* PREFIX_VEX_0F3A0B */
6237 {
6238 { Bad_Opcode },
6239 { Bad_Opcode },
6240 { VEX_LEN_TABLE (VEX_LEN_0F3A0B_P_2) },
6241 },
6242
6243 /* PREFIX_VEX_0F3A0C */
6244 {
6245 { Bad_Opcode },
6246 { Bad_Opcode },
6247 { VEX_W_TABLE (VEX_W_0F3A0C_P_2) },
6248 },
6249
6250 /* PREFIX_VEX_0F3A0D */
6251 {
6252 { Bad_Opcode },
6253 { Bad_Opcode },
6254 { VEX_W_TABLE (VEX_W_0F3A0D_P_2) },
6255 },
6256
6257 /* PREFIX_VEX_0F3A0E */
6258 {
6259 { Bad_Opcode },
6260 { Bad_Opcode },
6261 { VEX_W_TABLE (VEX_W_0F3A0E_P_2) },
6262 },
6263
6264 /* PREFIX_VEX_0F3A0F */
6265 {
6266 { Bad_Opcode },
6267 { Bad_Opcode },
6268 { VEX_W_TABLE (VEX_W_0F3A0F_P_2) },
6269 },
6270
6271 /* PREFIX_VEX_0F3A14 */
6272 {
6273 { Bad_Opcode },
6274 { Bad_Opcode },
6275 { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
6276 },
6277
6278 /* PREFIX_VEX_0F3A15 */
6279 {
6280 { Bad_Opcode },
6281 { Bad_Opcode },
6282 { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
6283 },
6284
6285 /* PREFIX_VEX_0F3A16 */
6286 {
6287 { Bad_Opcode },
6288 { Bad_Opcode },
6289 { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
6290 },
6291
6292 /* PREFIX_VEX_0F3A17 */
6293 {
6294 { Bad_Opcode },
6295 { Bad_Opcode },
6296 { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
6297 },
6298
6299 /* PREFIX_VEX_0F3A18 */
6300 {
6301 { Bad_Opcode },
6302 { Bad_Opcode },
6303 { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
6304 },
6305
6306 /* PREFIX_VEX_0F3A19 */
6307 {
6308 { Bad_Opcode },
6309 { Bad_Opcode },
6310 { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
6311 },
6312
6313 /* PREFIX_VEX_0F3A1D */
6314 {
6315 { Bad_Opcode },
6316 { Bad_Opcode },
6317 { "vcvtps2ph", { EXxmmq, XM, Ib } },
6318 },
6319
6320 /* PREFIX_VEX_0F3A20 */
6321 {
6322 { Bad_Opcode },
6323 { Bad_Opcode },
6324 { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
6325 },
6326
6327 /* PREFIX_VEX_0F3A21 */
6328 {
6329 { Bad_Opcode },
6330 { Bad_Opcode },
6331 { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
6332 },
6333
6334 /* PREFIX_VEX_0F3A22 */
6335 {
6336 { Bad_Opcode },
6337 { Bad_Opcode },
6338 { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
6339 },
6340
6341 /* PREFIX_VEX_0F3A30 */
6342 {
6343 { Bad_Opcode },
6344 { Bad_Opcode },
6345 { VEX_LEN_TABLE (VEX_LEN_0F3A30_P_2) },
6346 },
6347
6348 /* PREFIX_VEX_0F3A31 */
6349 {
6350 { Bad_Opcode },
6351 { Bad_Opcode },
6352 { VEX_LEN_TABLE (VEX_LEN_0F3A31_P_2) },
6353 },
6354
6355 /* PREFIX_VEX_0F3A32 */
6356 {
6357 { Bad_Opcode },
6358 { Bad_Opcode },
6359 { VEX_LEN_TABLE (VEX_LEN_0F3A32_P_2) },
6360 },
6361
6362 /* PREFIX_VEX_0F3A33 */
6363 {
6364 { Bad_Opcode },
6365 { Bad_Opcode },
6366 { VEX_LEN_TABLE (VEX_LEN_0F3A33_P_2) },
6367 },
6368
6369 /* PREFIX_VEX_0F3A38 */
6370 {
6371 { Bad_Opcode },
6372 { Bad_Opcode },
6373 { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) },
6374 },
6375
6376 /* PREFIX_VEX_0F3A39 */
6377 {
6378 { Bad_Opcode },
6379 { Bad_Opcode },
6380 { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) },
6381 },
6382
6383 /* PREFIX_VEX_0F3A40 */
6384 {
6385 { Bad_Opcode },
6386 { Bad_Opcode },
6387 { VEX_W_TABLE (VEX_W_0F3A40_P_2) },
6388 },
6389
6390 /* PREFIX_VEX_0F3A41 */
6391 {
6392 { Bad_Opcode },
6393 { Bad_Opcode },
6394 { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
6395 },
6396
6397 /* PREFIX_VEX_0F3A42 */
6398 {
6399 { Bad_Opcode },
6400 { Bad_Opcode },
6401 { VEX_W_TABLE (VEX_W_0F3A42_P_2) },
6402 },
6403
6404 /* PREFIX_VEX_0F3A44 */
6405 {
6406 { Bad_Opcode },
6407 { Bad_Opcode },
6408 { VEX_LEN_TABLE (VEX_LEN_0F3A44_P_2) },
6409 },
6410
6411 /* PREFIX_VEX_0F3A46 */
6412 {
6413 { Bad_Opcode },
6414 { Bad_Opcode },
6415 { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) },
6416 },
6417
6418 /* PREFIX_VEX_0F3A48 */
6419 {
6420 { Bad_Opcode },
6421 { Bad_Opcode },
6422 { VEX_W_TABLE (VEX_W_0F3A48_P_2) },
6423 },
6424
6425 /* PREFIX_VEX_0F3A49 */
6426 {
6427 { Bad_Opcode },
6428 { Bad_Opcode },
6429 { VEX_W_TABLE (VEX_W_0F3A49_P_2) },
6430 },
6431
6432 /* PREFIX_VEX_0F3A4A */
6433 {
6434 { Bad_Opcode },
6435 { Bad_Opcode },
6436 { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
6437 },
6438
6439 /* PREFIX_VEX_0F3A4B */
6440 {
6441 { Bad_Opcode },
6442 { Bad_Opcode },
6443 { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
6444 },
6445
6446 /* PREFIX_VEX_0F3A4C */
6447 {
6448 { Bad_Opcode },
6449 { Bad_Opcode },
6450 { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
6451 },
6452
6453 /* PREFIX_VEX_0F3A5C */
6454 {
6455 { Bad_Opcode },
6456 { Bad_Opcode },
6457 { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6458 },
6459
6460 /* PREFIX_VEX_0F3A5D */
6461 {
6462 { Bad_Opcode },
6463 { Bad_Opcode },
6464 { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6465 },
6466
6467 /* PREFIX_VEX_0F3A5E */
6468 {
6469 { Bad_Opcode },
6470 { Bad_Opcode },
6471 { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6472 },
6473
6474 /* PREFIX_VEX_0F3A5F */
6475 {
6476 { Bad_Opcode },
6477 { Bad_Opcode },
6478 { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6479 },
6480
6481 /* PREFIX_VEX_0F3A60 */
6482 {
6483 { Bad_Opcode },
6484 { Bad_Opcode },
6485 { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
6486 { Bad_Opcode },
6487 },
6488
6489 /* PREFIX_VEX_0F3A61 */
6490 {
6491 { Bad_Opcode },
6492 { Bad_Opcode },
6493 { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
6494 },
6495
6496 /* PREFIX_VEX_0F3A62 */
6497 {
6498 { Bad_Opcode },
6499 { Bad_Opcode },
6500 { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
6501 },
6502
6503 /* PREFIX_VEX_0F3A63 */
6504 {
6505 { Bad_Opcode },
6506 { Bad_Opcode },
6507 { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
6508 },
6509
6510 /* PREFIX_VEX_0F3A68 */
6511 {
6512 { Bad_Opcode },
6513 { Bad_Opcode },
6514 { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6515 },
6516
6517 /* PREFIX_VEX_0F3A69 */
6518 {
6519 { Bad_Opcode },
6520 { Bad_Opcode },
6521 { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6522 },
6523
6524 /* PREFIX_VEX_0F3A6A */
6525 {
6526 { Bad_Opcode },
6527 { Bad_Opcode },
6528 { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) },
6529 },
6530
6531 /* PREFIX_VEX_0F3A6B */
6532 {
6533 { Bad_Opcode },
6534 { Bad_Opcode },
6535 { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) },
6536 },
6537
6538 /* PREFIX_VEX_0F3A6C */
6539 {
6540 { Bad_Opcode },
6541 { Bad_Opcode },
6542 { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6543 },
6544
6545 /* PREFIX_VEX_0F3A6D */
6546 {
6547 { Bad_Opcode },
6548 { Bad_Opcode },
6549 { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6550 },
6551
6552 /* PREFIX_VEX_0F3A6E */
6553 {
6554 { Bad_Opcode },
6555 { Bad_Opcode },
6556 { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) },
6557 },
6558
6559 /* PREFIX_VEX_0F3A6F */
6560 {
6561 { Bad_Opcode },
6562 { Bad_Opcode },
6563 { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) },
6564 },
6565
6566 /* PREFIX_VEX_0F3A78 */
6567 {
6568 { Bad_Opcode },
6569 { Bad_Opcode },
6570 { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6571 },
6572
6573 /* PREFIX_VEX_0F3A79 */
6574 {
6575 { Bad_Opcode },
6576 { Bad_Opcode },
6577 { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6578 },
6579
6580 /* PREFIX_VEX_0F3A7A */
6581 {
6582 { Bad_Opcode },
6583 { Bad_Opcode },
6584 { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) },
6585 },
6586
6587 /* PREFIX_VEX_0F3A7B */
6588 {
6589 { Bad_Opcode },
6590 { Bad_Opcode },
6591 { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) },
6592 },
6593
6594 /* PREFIX_VEX_0F3A7C */
6595 {
6596 { Bad_Opcode },
6597 { Bad_Opcode },
6598 { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6599 { Bad_Opcode },
6600 },
6601
6602 /* PREFIX_VEX_0F3A7D */
6603 {
6604 { Bad_Opcode },
6605 { Bad_Opcode },
6606 { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6607 },
6608
6609 /* PREFIX_VEX_0F3A7E */
6610 {
6611 { Bad_Opcode },
6612 { Bad_Opcode },
6613 { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) },
6614 },
6615
6616 /* PREFIX_VEX_0F3A7F */
6617 {
6618 { Bad_Opcode },
6619 { Bad_Opcode },
6620 { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) },
6621 },
6622
6623 /* PREFIX_VEX_0F3ADF */
6624 {
6625 { Bad_Opcode },
6626 { Bad_Opcode },
6627 { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
6628 },
6629
6630 /* PREFIX_VEX_0F3AF0 */
6631 {
6632 { Bad_Opcode },
6633 { Bad_Opcode },
6634 { Bad_Opcode },
6635 { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) },
6636 },
6637
6638 #define NEED_PREFIX_TABLE
6639 #include "i386-dis-evex.h"
6640 #undef NEED_PREFIX_TABLE
6641 };
6642
6643 static const struct dis386 x86_64_table[][2] = {
6644 /* X86_64_06 */
6645 {
6646 { "pushP", { es } },
6647 },
6648
6649 /* X86_64_07 */
6650 {
6651 { "popP", { es } },
6652 },
6653
6654 /* X86_64_0D */
6655 {
6656 { "pushP", { cs } },
6657 },
6658
6659 /* X86_64_16 */
6660 {
6661 { "pushP", { ss } },
6662 },
6663
6664 /* X86_64_17 */
6665 {
6666 { "popP", { ss } },
6667 },
6668
6669 /* X86_64_1E */
6670 {
6671 { "pushP", { ds } },
6672 },
6673
6674 /* X86_64_1F */
6675 {
6676 { "popP", { ds } },
6677 },
6678
6679 /* X86_64_27 */
6680 {
6681 { "daa", { XX } },
6682 },
6683
6684 /* X86_64_2F */
6685 {
6686 { "das", { XX } },
6687 },
6688
6689 /* X86_64_37 */
6690 {
6691 { "aaa", { XX } },
6692 },
6693
6694 /* X86_64_3F */
6695 {
6696 { "aas", { XX } },
6697 },
6698
6699 /* X86_64_60 */
6700 {
6701 { "pushaP", { XX } },
6702 },
6703
6704 /* X86_64_61 */
6705 {
6706 { "popaP", { XX } },
6707 },
6708
6709 /* X86_64_62 */
6710 {
6711 { MOD_TABLE (MOD_62_32BIT) },
6712 { EVEX_TABLE (EVEX_0F) },
6713 },
6714
6715 /* X86_64_63 */
6716 {
6717 { "arpl", { Ew, Gw } },
6718 { "movs{lq|xd}", { Gv, Ed } },
6719 },
6720
6721 /* X86_64_6D */
6722 {
6723 { "ins{R|}", { Yzr, indirDX } },
6724 { "ins{G|}", { Yzr, indirDX } },
6725 },
6726
6727 /* X86_64_6F */
6728 {
6729 { "outs{R|}", { indirDXr, Xz } },
6730 { "outs{G|}", { indirDXr, Xz } },
6731 },
6732
6733 /* X86_64_9A */
6734 {
6735 { "Jcall{T|}", { Ap } },
6736 },
6737
6738 /* X86_64_C4 */
6739 {
6740 { MOD_TABLE (MOD_C4_32BIT) },
6741 { VEX_C4_TABLE (VEX_0F) },
6742 },
6743
6744 /* X86_64_C5 */
6745 {
6746 { MOD_TABLE (MOD_C5_32BIT) },
6747 { VEX_C5_TABLE (VEX_0F) },
6748 },
6749
6750 /* X86_64_CE */
6751 {
6752 { "into", { XX } },
6753 },
6754
6755 /* X86_64_D4 */
6756 {
6757 { "aam", { Ib } },
6758 },
6759
6760 /* X86_64_D5 */
6761 {
6762 { "aad", { Ib } },
6763 },
6764
6765 /* X86_64_EA */
6766 {
6767 { "Jjmp{T|}", { Ap } },
6768 },
6769
6770 /* X86_64_0F01_REG_0 */
6771 {
6772 { "sgdt{Q|IQ}", { M } },
6773 { "sgdt", { M } },
6774 },
6775
6776 /* X86_64_0F01_REG_1 */
6777 {
6778 { "sidt{Q|IQ}", { M } },
6779 { "sidt", { M } },
6780 },
6781
6782 /* X86_64_0F01_REG_2 */
6783 {
6784 { "lgdt{Q|Q}", { M } },
6785 { "lgdt", { M } },
6786 },
6787
6788 /* X86_64_0F01_REG_3 */
6789 {
6790 { "lidt{Q|Q}", { M } },
6791 { "lidt", { M } },
6792 },
6793 };
6794
6795 static const struct dis386 three_byte_table[][256] = {
6796
6797 /* THREE_BYTE_0F38 */
6798 {
6799 /* 00 */
6800 { "pshufb", { MX, EM } },
6801 { "phaddw", { MX, EM } },
6802 { "phaddd", { MX, EM } },
6803 { "phaddsw", { MX, EM } },
6804 { "pmaddubsw", { MX, EM } },
6805 { "phsubw", { MX, EM } },
6806 { "phsubd", { MX, EM } },
6807 { "phsubsw", { MX, EM } },
6808 /* 08 */
6809 { "psignb", { MX, EM } },
6810 { "psignw", { MX, EM } },
6811 { "psignd", { MX, EM } },
6812 { "pmulhrsw", { MX, EM } },
6813 { Bad_Opcode },
6814 { Bad_Opcode },
6815 { Bad_Opcode },
6816 { Bad_Opcode },
6817 /* 10 */
6818 { PREFIX_TABLE (PREFIX_0F3810) },
6819 { Bad_Opcode },
6820 { Bad_Opcode },
6821 { Bad_Opcode },
6822 { PREFIX_TABLE (PREFIX_0F3814) },
6823 { PREFIX_TABLE (PREFIX_0F3815) },
6824 { Bad_Opcode },
6825 { PREFIX_TABLE (PREFIX_0F3817) },
6826 /* 18 */
6827 { Bad_Opcode },
6828 { Bad_Opcode },
6829 { Bad_Opcode },
6830 { Bad_Opcode },
6831 { "pabsb", { MX, EM } },
6832 { "pabsw", { MX, EM } },
6833 { "pabsd", { MX, EM } },
6834 { Bad_Opcode },
6835 /* 20 */
6836 { PREFIX_TABLE (PREFIX_0F3820) },
6837 { PREFIX_TABLE (PREFIX_0F3821) },
6838 { PREFIX_TABLE (PREFIX_0F3822) },
6839 { PREFIX_TABLE (PREFIX_0F3823) },
6840 { PREFIX_TABLE (PREFIX_0F3824) },
6841 { PREFIX_TABLE (PREFIX_0F3825) },
6842 { Bad_Opcode },
6843 { Bad_Opcode },
6844 /* 28 */
6845 { PREFIX_TABLE (PREFIX_0F3828) },
6846 { PREFIX_TABLE (PREFIX_0F3829) },
6847 { PREFIX_TABLE (PREFIX_0F382A) },
6848 { PREFIX_TABLE (PREFIX_0F382B) },
6849 { Bad_Opcode },
6850 { Bad_Opcode },
6851 { Bad_Opcode },
6852 { Bad_Opcode },
6853 /* 30 */
6854 { PREFIX_TABLE (PREFIX_0F3830) },
6855 { PREFIX_TABLE (PREFIX_0F3831) },
6856 { PREFIX_TABLE (PREFIX_0F3832) },
6857 { PREFIX_TABLE (PREFIX_0F3833) },
6858 { PREFIX_TABLE (PREFIX_0F3834) },
6859 { PREFIX_TABLE (PREFIX_0F3835) },
6860 { Bad_Opcode },
6861 { PREFIX_TABLE (PREFIX_0F3837) },
6862 /* 38 */
6863 { PREFIX_TABLE (PREFIX_0F3838) },
6864 { PREFIX_TABLE (PREFIX_0F3839) },
6865 { PREFIX_TABLE (PREFIX_0F383A) },
6866 { PREFIX_TABLE (PREFIX_0F383B) },
6867 { PREFIX_TABLE (PREFIX_0F383C) },
6868 { PREFIX_TABLE (PREFIX_0F383D) },
6869 { PREFIX_TABLE (PREFIX_0F383E) },
6870 { PREFIX_TABLE (PREFIX_0F383F) },
6871 /* 40 */
6872 { PREFIX_TABLE (PREFIX_0F3840) },
6873 { PREFIX_TABLE (PREFIX_0F3841) },
6874 { Bad_Opcode },
6875 { Bad_Opcode },
6876 { Bad_Opcode },
6877 { Bad_Opcode },
6878 { Bad_Opcode },
6879 { Bad_Opcode },
6880 /* 48 */
6881 { Bad_Opcode },
6882 { Bad_Opcode },
6883 { Bad_Opcode },
6884 { Bad_Opcode },
6885 { Bad_Opcode },
6886 { Bad_Opcode },
6887 { Bad_Opcode },
6888 { Bad_Opcode },
6889 /* 50 */
6890 { Bad_Opcode },
6891 { Bad_Opcode },
6892 { Bad_Opcode },
6893 { Bad_Opcode },
6894 { Bad_Opcode },
6895 { Bad_Opcode },
6896 { Bad_Opcode },
6897 { Bad_Opcode },
6898 /* 58 */
6899 { Bad_Opcode },
6900 { Bad_Opcode },
6901 { Bad_Opcode },
6902 { Bad_Opcode },
6903 { Bad_Opcode },
6904 { Bad_Opcode },
6905 { Bad_Opcode },
6906 { Bad_Opcode },
6907 /* 60 */
6908 { Bad_Opcode },
6909 { Bad_Opcode },
6910 { Bad_Opcode },
6911 { Bad_Opcode },
6912 { Bad_Opcode },
6913 { Bad_Opcode },
6914 { Bad_Opcode },
6915 { Bad_Opcode },
6916 /* 68 */
6917 { Bad_Opcode },
6918 { Bad_Opcode },
6919 { Bad_Opcode },
6920 { Bad_Opcode },
6921 { Bad_Opcode },
6922 { Bad_Opcode },
6923 { Bad_Opcode },
6924 { Bad_Opcode },
6925 /* 70 */
6926 { Bad_Opcode },
6927 { Bad_Opcode },
6928 { Bad_Opcode },
6929 { Bad_Opcode },
6930 { Bad_Opcode },
6931 { Bad_Opcode },
6932 { Bad_Opcode },
6933 { Bad_Opcode },
6934 /* 78 */
6935 { Bad_Opcode },
6936 { Bad_Opcode },
6937 { Bad_Opcode },
6938 { Bad_Opcode },
6939 { Bad_Opcode },
6940 { Bad_Opcode },
6941 { Bad_Opcode },
6942 { Bad_Opcode },
6943 /* 80 */
6944 { PREFIX_TABLE (PREFIX_0F3880) },
6945 { PREFIX_TABLE (PREFIX_0F3881) },
6946 { PREFIX_TABLE (PREFIX_0F3882) },
6947 { Bad_Opcode },
6948 { Bad_Opcode },
6949 { Bad_Opcode },
6950 { Bad_Opcode },
6951 { Bad_Opcode },
6952 /* 88 */
6953 { Bad_Opcode },
6954 { Bad_Opcode },
6955 { Bad_Opcode },
6956 { Bad_Opcode },
6957 { Bad_Opcode },
6958 { Bad_Opcode },
6959 { Bad_Opcode },
6960 { Bad_Opcode },
6961 /* 90 */
6962 { Bad_Opcode },
6963 { Bad_Opcode },
6964 { Bad_Opcode },
6965 { Bad_Opcode },
6966 { Bad_Opcode },
6967 { Bad_Opcode },
6968 { Bad_Opcode },
6969 { Bad_Opcode },
6970 /* 98 */
6971 { Bad_Opcode },
6972 { Bad_Opcode },
6973 { Bad_Opcode },
6974 { Bad_Opcode },
6975 { Bad_Opcode },
6976 { Bad_Opcode },
6977 { Bad_Opcode },
6978 { Bad_Opcode },
6979 /* a0 */
6980 { Bad_Opcode },
6981 { Bad_Opcode },
6982 { Bad_Opcode },
6983 { Bad_Opcode },
6984 { Bad_Opcode },
6985 { Bad_Opcode },
6986 { Bad_Opcode },
6987 { Bad_Opcode },
6988 /* a8 */
6989 { Bad_Opcode },
6990 { Bad_Opcode },
6991 { Bad_Opcode },
6992 { Bad_Opcode },
6993 { Bad_Opcode },
6994 { Bad_Opcode },
6995 { Bad_Opcode },
6996 { Bad_Opcode },
6997 /* b0 */
6998 { Bad_Opcode },
6999 { Bad_Opcode },
7000 { Bad_Opcode },
7001 { Bad_Opcode },
7002 { Bad_Opcode },
7003 { Bad_Opcode },
7004 { Bad_Opcode },
7005 { Bad_Opcode },
7006 /* b8 */
7007 { Bad_Opcode },
7008 { Bad_Opcode },
7009 { Bad_Opcode },
7010 { Bad_Opcode },
7011 { Bad_Opcode },
7012 { Bad_Opcode },
7013 { Bad_Opcode },
7014 { Bad_Opcode },
7015 /* c0 */
7016 { Bad_Opcode },
7017 { Bad_Opcode },
7018 { Bad_Opcode },
7019 { Bad_Opcode },
7020 { Bad_Opcode },
7021 { Bad_Opcode },
7022 { Bad_Opcode },
7023 { Bad_Opcode },
7024 /* c8 */
7025 { PREFIX_TABLE (PREFIX_0F38C8) },
7026 { PREFIX_TABLE (PREFIX_0F38C9) },
7027 { PREFIX_TABLE (PREFIX_0F38CA) },
7028 { PREFIX_TABLE (PREFIX_0F38CB) },
7029 { PREFIX_TABLE (PREFIX_0F38CC) },
7030 { PREFIX_TABLE (PREFIX_0F38CD) },
7031 { Bad_Opcode },
7032 { Bad_Opcode },
7033 /* d0 */
7034 { Bad_Opcode },
7035 { Bad_Opcode },
7036 { Bad_Opcode },
7037 { Bad_Opcode },
7038 { Bad_Opcode },
7039 { Bad_Opcode },
7040 { Bad_Opcode },
7041 { Bad_Opcode },
7042 /* d8 */
7043 { Bad_Opcode },
7044 { Bad_Opcode },
7045 { Bad_Opcode },
7046 { PREFIX_TABLE (PREFIX_0F38DB) },
7047 { PREFIX_TABLE (PREFIX_0F38DC) },
7048 { PREFIX_TABLE (PREFIX_0F38DD) },
7049 { PREFIX_TABLE (PREFIX_0F38DE) },
7050 { PREFIX_TABLE (PREFIX_0F38DF) },
7051 /* e0 */
7052 { Bad_Opcode },
7053 { Bad_Opcode },
7054 { Bad_Opcode },
7055 { Bad_Opcode },
7056 { Bad_Opcode },
7057 { Bad_Opcode },
7058 { Bad_Opcode },
7059 { Bad_Opcode },
7060 /* e8 */
7061 { Bad_Opcode },
7062 { Bad_Opcode },
7063 { Bad_Opcode },
7064 { Bad_Opcode },
7065 { Bad_Opcode },
7066 { Bad_Opcode },
7067 { Bad_Opcode },
7068 { Bad_Opcode },
7069 /* f0 */
7070 { PREFIX_TABLE (PREFIX_0F38F0) },
7071 { PREFIX_TABLE (PREFIX_0F38F1) },
7072 { Bad_Opcode },
7073 { Bad_Opcode },
7074 { Bad_Opcode },
7075 { Bad_Opcode },
7076 { PREFIX_TABLE (PREFIX_0F38F6) },
7077 { Bad_Opcode },
7078 /* f8 */
7079 { Bad_Opcode },
7080 { Bad_Opcode },
7081 { Bad_Opcode },
7082 { Bad_Opcode },
7083 { Bad_Opcode },
7084 { Bad_Opcode },
7085 { Bad_Opcode },
7086 { Bad_Opcode },
7087 },
7088 /* THREE_BYTE_0F3A */
7089 {
7090 /* 00 */
7091 { Bad_Opcode },
7092 { Bad_Opcode },
7093 { Bad_Opcode },
7094 { Bad_Opcode },
7095 { Bad_Opcode },
7096 { Bad_Opcode },
7097 { Bad_Opcode },
7098 { Bad_Opcode },
7099 /* 08 */
7100 { PREFIX_TABLE (PREFIX_0F3A08) },
7101 { PREFIX_TABLE (PREFIX_0F3A09) },
7102 { PREFIX_TABLE (PREFIX_0F3A0A) },
7103 { PREFIX_TABLE (PREFIX_0F3A0B) },
7104 { PREFIX_TABLE (PREFIX_0F3A0C) },
7105 { PREFIX_TABLE (PREFIX_0F3A0D) },
7106 { PREFIX_TABLE (PREFIX_0F3A0E) },
7107 { "palignr", { MX, EM, Ib } },
7108 /* 10 */
7109 { Bad_Opcode },
7110 { Bad_Opcode },
7111 { Bad_Opcode },
7112 { Bad_Opcode },
7113 { PREFIX_TABLE (PREFIX_0F3A14) },
7114 { PREFIX_TABLE (PREFIX_0F3A15) },
7115 { PREFIX_TABLE (PREFIX_0F3A16) },
7116 { PREFIX_TABLE (PREFIX_0F3A17) },
7117 /* 18 */
7118 { Bad_Opcode },
7119 { Bad_Opcode },
7120 { Bad_Opcode },
7121 { Bad_Opcode },
7122 { Bad_Opcode },
7123 { Bad_Opcode },
7124 { Bad_Opcode },
7125 { Bad_Opcode },
7126 /* 20 */
7127 { PREFIX_TABLE (PREFIX_0F3A20) },
7128 { PREFIX_TABLE (PREFIX_0F3A21) },
7129 { PREFIX_TABLE (PREFIX_0F3A22) },
7130 { Bad_Opcode },
7131 { Bad_Opcode },
7132 { Bad_Opcode },
7133 { Bad_Opcode },
7134 { Bad_Opcode },
7135 /* 28 */
7136 { Bad_Opcode },
7137 { Bad_Opcode },
7138 { Bad_Opcode },
7139 { Bad_Opcode },
7140 { Bad_Opcode },
7141 { Bad_Opcode },
7142 { Bad_Opcode },
7143 { Bad_Opcode },
7144 /* 30 */
7145 { Bad_Opcode },
7146 { Bad_Opcode },
7147 { Bad_Opcode },
7148 { Bad_Opcode },
7149 { Bad_Opcode },
7150 { Bad_Opcode },
7151 { Bad_Opcode },
7152 { Bad_Opcode },
7153 /* 38 */
7154 { Bad_Opcode },
7155 { Bad_Opcode },
7156 { Bad_Opcode },
7157 { Bad_Opcode },
7158 { Bad_Opcode },
7159 { Bad_Opcode },
7160 { Bad_Opcode },
7161 { Bad_Opcode },
7162 /* 40 */
7163 { PREFIX_TABLE (PREFIX_0F3A40) },
7164 { PREFIX_TABLE (PREFIX_0F3A41) },
7165 { PREFIX_TABLE (PREFIX_0F3A42) },
7166 { Bad_Opcode },
7167 { PREFIX_TABLE (PREFIX_0F3A44) },
7168 { Bad_Opcode },
7169 { Bad_Opcode },
7170 { Bad_Opcode },
7171 /* 48 */
7172 { Bad_Opcode },
7173 { Bad_Opcode },
7174 { Bad_Opcode },
7175 { Bad_Opcode },
7176 { Bad_Opcode },
7177 { Bad_Opcode },
7178 { Bad_Opcode },
7179 { Bad_Opcode },
7180 /* 50 */
7181 { Bad_Opcode },
7182 { Bad_Opcode },
7183 { Bad_Opcode },
7184 { Bad_Opcode },
7185 { Bad_Opcode },
7186 { Bad_Opcode },
7187 { Bad_Opcode },
7188 { Bad_Opcode },
7189 /* 58 */
7190 { Bad_Opcode },
7191 { Bad_Opcode },
7192 { Bad_Opcode },
7193 { Bad_Opcode },
7194 { Bad_Opcode },
7195 { Bad_Opcode },
7196 { Bad_Opcode },
7197 { Bad_Opcode },
7198 /* 60 */
7199 { PREFIX_TABLE (PREFIX_0F3A60) },
7200 { PREFIX_TABLE (PREFIX_0F3A61) },
7201 { PREFIX_TABLE (PREFIX_0F3A62) },
7202 { PREFIX_TABLE (PREFIX_0F3A63) },
7203 { Bad_Opcode },
7204 { Bad_Opcode },
7205 { Bad_Opcode },
7206 { Bad_Opcode },
7207 /* 68 */
7208 { Bad_Opcode },
7209 { Bad_Opcode },
7210 { Bad_Opcode },
7211 { Bad_Opcode },
7212 { Bad_Opcode },
7213 { Bad_Opcode },
7214 { Bad_Opcode },
7215 { Bad_Opcode },
7216 /* 70 */
7217 { Bad_Opcode },
7218 { Bad_Opcode },
7219 { Bad_Opcode },
7220 { Bad_Opcode },
7221 { Bad_Opcode },
7222 { Bad_Opcode },
7223 { Bad_Opcode },
7224 { Bad_Opcode },
7225 /* 78 */
7226 { Bad_Opcode },
7227 { Bad_Opcode },
7228 { Bad_Opcode },
7229 { Bad_Opcode },
7230 { Bad_Opcode },
7231 { Bad_Opcode },
7232 { Bad_Opcode },
7233 { Bad_Opcode },
7234 /* 80 */
7235 { Bad_Opcode },
7236 { Bad_Opcode },
7237 { Bad_Opcode },
7238 { Bad_Opcode },
7239 { Bad_Opcode },
7240 { Bad_Opcode },
7241 { Bad_Opcode },
7242 { Bad_Opcode },
7243 /* 88 */
7244 { Bad_Opcode },
7245 { Bad_Opcode },
7246 { Bad_Opcode },
7247 { Bad_Opcode },
7248 { Bad_Opcode },
7249 { Bad_Opcode },
7250 { Bad_Opcode },
7251 { Bad_Opcode },
7252 /* 90 */
7253 { Bad_Opcode },
7254 { Bad_Opcode },
7255 { Bad_Opcode },
7256 { Bad_Opcode },
7257 { Bad_Opcode },
7258 { Bad_Opcode },
7259 { Bad_Opcode },
7260 { Bad_Opcode },
7261 /* 98 */
7262 { Bad_Opcode },
7263 { Bad_Opcode },
7264 { Bad_Opcode },
7265 { Bad_Opcode },
7266 { Bad_Opcode },
7267 { Bad_Opcode },
7268 { Bad_Opcode },
7269 { Bad_Opcode },
7270 /* a0 */
7271 { Bad_Opcode },
7272 { Bad_Opcode },
7273 { Bad_Opcode },
7274 { Bad_Opcode },
7275 { Bad_Opcode },
7276 { Bad_Opcode },
7277 { Bad_Opcode },
7278 { Bad_Opcode },
7279 /* a8 */
7280 { Bad_Opcode },
7281 { Bad_Opcode },
7282 { Bad_Opcode },
7283 { Bad_Opcode },
7284 { Bad_Opcode },
7285 { Bad_Opcode },
7286 { Bad_Opcode },
7287 { Bad_Opcode },
7288 /* b0 */
7289 { Bad_Opcode },
7290 { Bad_Opcode },
7291 { Bad_Opcode },
7292 { Bad_Opcode },
7293 { Bad_Opcode },
7294 { Bad_Opcode },
7295 { Bad_Opcode },
7296 { Bad_Opcode },
7297 /* b8 */
7298 { Bad_Opcode },
7299 { Bad_Opcode },
7300 { Bad_Opcode },
7301 { Bad_Opcode },
7302 { Bad_Opcode },
7303 { Bad_Opcode },
7304 { Bad_Opcode },
7305 { Bad_Opcode },
7306 /* c0 */
7307 { Bad_Opcode },
7308 { Bad_Opcode },
7309 { Bad_Opcode },
7310 { Bad_Opcode },
7311 { Bad_Opcode },
7312 { Bad_Opcode },
7313 { Bad_Opcode },
7314 { Bad_Opcode },
7315 /* c8 */
7316 { Bad_Opcode },
7317 { Bad_Opcode },
7318 { Bad_Opcode },
7319 { Bad_Opcode },
7320 { PREFIX_TABLE (PREFIX_0F3ACC) },
7321 { Bad_Opcode },
7322 { Bad_Opcode },
7323 { Bad_Opcode },
7324 /* d0 */
7325 { Bad_Opcode },
7326 { Bad_Opcode },
7327 { Bad_Opcode },
7328 { Bad_Opcode },
7329 { Bad_Opcode },
7330 { Bad_Opcode },
7331 { Bad_Opcode },
7332 { Bad_Opcode },
7333 /* d8 */
7334 { Bad_Opcode },
7335 { Bad_Opcode },
7336 { Bad_Opcode },
7337 { Bad_Opcode },
7338 { Bad_Opcode },
7339 { Bad_Opcode },
7340 { Bad_Opcode },
7341 { PREFIX_TABLE (PREFIX_0F3ADF) },
7342 /* e0 */
7343 { Bad_Opcode },
7344 { Bad_Opcode },
7345 { Bad_Opcode },
7346 { Bad_Opcode },
7347 { Bad_Opcode },
7348 { Bad_Opcode },
7349 { Bad_Opcode },
7350 { Bad_Opcode },
7351 /* e8 */
7352 { Bad_Opcode },
7353 { Bad_Opcode },
7354 { Bad_Opcode },
7355 { Bad_Opcode },
7356 { Bad_Opcode },
7357 { Bad_Opcode },
7358 { Bad_Opcode },
7359 { Bad_Opcode },
7360 /* f0 */
7361 { Bad_Opcode },
7362 { Bad_Opcode },
7363 { Bad_Opcode },
7364 { Bad_Opcode },
7365 { Bad_Opcode },
7366 { Bad_Opcode },
7367 { Bad_Opcode },
7368 { Bad_Opcode },
7369 /* f8 */
7370 { Bad_Opcode },
7371 { Bad_Opcode },
7372 { Bad_Opcode },
7373 { Bad_Opcode },
7374 { Bad_Opcode },
7375 { Bad_Opcode },
7376 { Bad_Opcode },
7377 { Bad_Opcode },
7378 },
7379
7380 /* THREE_BYTE_0F7A */
7381 {
7382 /* 00 */
7383 { Bad_Opcode },
7384 { Bad_Opcode },
7385 { Bad_Opcode },
7386 { Bad_Opcode },
7387 { Bad_Opcode },
7388 { Bad_Opcode },
7389 { Bad_Opcode },
7390 { Bad_Opcode },
7391 /* 08 */
7392 { Bad_Opcode },
7393 { Bad_Opcode },
7394 { Bad_Opcode },
7395 { Bad_Opcode },
7396 { Bad_Opcode },
7397 { Bad_Opcode },
7398 { Bad_Opcode },
7399 { Bad_Opcode },
7400 /* 10 */
7401 { Bad_Opcode },
7402 { Bad_Opcode },
7403 { Bad_Opcode },
7404 { Bad_Opcode },
7405 { Bad_Opcode },
7406 { Bad_Opcode },
7407 { Bad_Opcode },
7408 { Bad_Opcode },
7409 /* 18 */
7410 { Bad_Opcode },
7411 { Bad_Opcode },
7412 { Bad_Opcode },
7413 { Bad_Opcode },
7414 { Bad_Opcode },
7415 { Bad_Opcode },
7416 { Bad_Opcode },
7417 { Bad_Opcode },
7418 /* 20 */
7419 { "ptest", { XX } },
7420 { Bad_Opcode },
7421 { Bad_Opcode },
7422 { Bad_Opcode },
7423 { Bad_Opcode },
7424 { Bad_Opcode },
7425 { Bad_Opcode },
7426 { Bad_Opcode },
7427 /* 28 */
7428 { Bad_Opcode },
7429 { Bad_Opcode },
7430 { Bad_Opcode },
7431 { Bad_Opcode },
7432 { Bad_Opcode },
7433 { Bad_Opcode },
7434 { Bad_Opcode },
7435 { Bad_Opcode },
7436 /* 30 */
7437 { Bad_Opcode },
7438 { Bad_Opcode },
7439 { Bad_Opcode },
7440 { Bad_Opcode },
7441 { Bad_Opcode },
7442 { Bad_Opcode },
7443 { Bad_Opcode },
7444 { Bad_Opcode },
7445 /* 38 */
7446 { Bad_Opcode },
7447 { Bad_Opcode },
7448 { Bad_Opcode },
7449 { Bad_Opcode },
7450 { Bad_Opcode },
7451 { Bad_Opcode },
7452 { Bad_Opcode },
7453 { Bad_Opcode },
7454 /* 40 */
7455 { Bad_Opcode },
7456 { "phaddbw", { XM, EXq } },
7457 { "phaddbd", { XM, EXq } },
7458 { "phaddbq", { XM, EXq } },
7459 { Bad_Opcode },
7460 { Bad_Opcode },
7461 { "phaddwd", { XM, EXq } },
7462 { "phaddwq", { XM, EXq } },
7463 /* 48 */
7464 { Bad_Opcode },
7465 { Bad_Opcode },
7466 { Bad_Opcode },
7467 { "phadddq", { XM, EXq } },
7468 { Bad_Opcode },
7469 { Bad_Opcode },
7470 { Bad_Opcode },
7471 { Bad_Opcode },
7472 /* 50 */
7473 { Bad_Opcode },
7474 { "phaddubw", { XM, EXq } },
7475 { "phaddubd", { XM, EXq } },
7476 { "phaddubq", { XM, EXq } },
7477 { Bad_Opcode },
7478 { Bad_Opcode },
7479 { "phadduwd", { XM, EXq } },
7480 { "phadduwq", { XM, EXq } },
7481 /* 58 */
7482 { Bad_Opcode },
7483 { Bad_Opcode },
7484 { Bad_Opcode },
7485 { "phaddudq", { XM, EXq } },
7486 { Bad_Opcode },
7487 { Bad_Opcode },
7488 { Bad_Opcode },
7489 { Bad_Opcode },
7490 /* 60 */
7491 { Bad_Opcode },
7492 { "phsubbw", { XM, EXq } },
7493 { "phsubbd", { XM, EXq } },
7494 { "phsubbq", { XM, EXq } },
7495 { Bad_Opcode },
7496 { Bad_Opcode },
7497 { Bad_Opcode },
7498 { Bad_Opcode },
7499 /* 68 */
7500 { Bad_Opcode },
7501 { Bad_Opcode },
7502 { Bad_Opcode },
7503 { Bad_Opcode },
7504 { Bad_Opcode },
7505 { Bad_Opcode },
7506 { Bad_Opcode },
7507 { Bad_Opcode },
7508 /* 70 */
7509 { Bad_Opcode },
7510 { Bad_Opcode },
7511 { Bad_Opcode },
7512 { Bad_Opcode },
7513 { Bad_Opcode },
7514 { Bad_Opcode },
7515 { Bad_Opcode },
7516 { Bad_Opcode },
7517 /* 78 */
7518 { Bad_Opcode },
7519 { Bad_Opcode },
7520 { Bad_Opcode },
7521 { Bad_Opcode },
7522 { Bad_Opcode },
7523 { Bad_Opcode },
7524 { Bad_Opcode },
7525 { Bad_Opcode },
7526 /* 80 */
7527 { Bad_Opcode },
7528 { Bad_Opcode },
7529 { Bad_Opcode },
7530 { Bad_Opcode },
7531 { Bad_Opcode },
7532 { Bad_Opcode },
7533 { Bad_Opcode },
7534 { Bad_Opcode },
7535 /* 88 */
7536 { Bad_Opcode },
7537 { Bad_Opcode },
7538 { Bad_Opcode },
7539 { Bad_Opcode },
7540 { Bad_Opcode },
7541 { Bad_Opcode },
7542 { Bad_Opcode },
7543 { Bad_Opcode },
7544 /* 90 */
7545 { Bad_Opcode },
7546 { Bad_Opcode },
7547 { Bad_Opcode },
7548 { Bad_Opcode },
7549 { Bad_Opcode },
7550 { Bad_Opcode },
7551 { Bad_Opcode },
7552 { Bad_Opcode },
7553 /* 98 */
7554 { Bad_Opcode },
7555 { Bad_Opcode },
7556 { Bad_Opcode },
7557 { Bad_Opcode },
7558 { Bad_Opcode },
7559 { Bad_Opcode },
7560 { Bad_Opcode },
7561 { Bad_Opcode },
7562 /* a0 */
7563 { Bad_Opcode },
7564 { Bad_Opcode },
7565 { Bad_Opcode },
7566 { Bad_Opcode },
7567 { Bad_Opcode },
7568 { Bad_Opcode },
7569 { Bad_Opcode },
7570 { Bad_Opcode },
7571 /* a8 */
7572 { Bad_Opcode },
7573 { Bad_Opcode },
7574 { Bad_Opcode },
7575 { Bad_Opcode },
7576 { Bad_Opcode },
7577 { Bad_Opcode },
7578 { Bad_Opcode },
7579 { Bad_Opcode },
7580 /* b0 */
7581 { Bad_Opcode },
7582 { Bad_Opcode },
7583 { Bad_Opcode },
7584 { Bad_Opcode },
7585 { Bad_Opcode },
7586 { Bad_Opcode },
7587 { Bad_Opcode },
7588 { Bad_Opcode },
7589 /* b8 */
7590 { Bad_Opcode },
7591 { Bad_Opcode },
7592 { Bad_Opcode },
7593 { Bad_Opcode },
7594 { Bad_Opcode },
7595 { Bad_Opcode },
7596 { Bad_Opcode },
7597 { Bad_Opcode },
7598 /* c0 */
7599 { Bad_Opcode },
7600 { Bad_Opcode },
7601 { Bad_Opcode },
7602 { Bad_Opcode },
7603 { Bad_Opcode },
7604 { Bad_Opcode },
7605 { Bad_Opcode },
7606 { Bad_Opcode },
7607 /* c8 */
7608 { Bad_Opcode },
7609 { Bad_Opcode },
7610 { Bad_Opcode },
7611 { Bad_Opcode },
7612 { Bad_Opcode },
7613 { Bad_Opcode },
7614 { Bad_Opcode },
7615 { Bad_Opcode },
7616 /* d0 */
7617 { Bad_Opcode },
7618 { Bad_Opcode },
7619 { Bad_Opcode },
7620 { Bad_Opcode },
7621 { Bad_Opcode },
7622 { Bad_Opcode },
7623 { Bad_Opcode },
7624 { Bad_Opcode },
7625 /* d8 */
7626 { Bad_Opcode },
7627 { Bad_Opcode },
7628 { Bad_Opcode },
7629 { Bad_Opcode },
7630 { Bad_Opcode },
7631 { Bad_Opcode },
7632 { Bad_Opcode },
7633 { Bad_Opcode },
7634 /* e0 */
7635 { Bad_Opcode },
7636 { Bad_Opcode },
7637 { Bad_Opcode },
7638 { Bad_Opcode },
7639 { Bad_Opcode },
7640 { Bad_Opcode },
7641 { Bad_Opcode },
7642 { Bad_Opcode },
7643 /* e8 */
7644 { Bad_Opcode },
7645 { Bad_Opcode },
7646 { Bad_Opcode },
7647 { Bad_Opcode },
7648 { Bad_Opcode },
7649 { Bad_Opcode },
7650 { Bad_Opcode },
7651 { Bad_Opcode },
7652 /* f0 */
7653 { Bad_Opcode },
7654 { Bad_Opcode },
7655 { Bad_Opcode },
7656 { Bad_Opcode },
7657 { Bad_Opcode },
7658 { Bad_Opcode },
7659 { Bad_Opcode },
7660 { Bad_Opcode },
7661 /* f8 */
7662 { Bad_Opcode },
7663 { Bad_Opcode },
7664 { Bad_Opcode },
7665 { Bad_Opcode },
7666 { Bad_Opcode },
7667 { Bad_Opcode },
7668 { Bad_Opcode },
7669 { Bad_Opcode },
7670 },
7671 };
7672
7673 static const struct dis386 xop_table[][256] = {
7674 /* XOP_08 */
7675 {
7676 /* 00 */
7677 { Bad_Opcode },
7678 { Bad_Opcode },
7679 { Bad_Opcode },
7680 { Bad_Opcode },
7681 { Bad_Opcode },
7682 { Bad_Opcode },
7683 { Bad_Opcode },
7684 { Bad_Opcode },
7685 /* 08 */
7686 { Bad_Opcode },
7687 { Bad_Opcode },
7688 { Bad_Opcode },
7689 { Bad_Opcode },
7690 { Bad_Opcode },
7691 { Bad_Opcode },
7692 { Bad_Opcode },
7693 { Bad_Opcode },
7694 /* 10 */
7695 { Bad_Opcode },
7696 { Bad_Opcode },
7697 { Bad_Opcode },
7698 { Bad_Opcode },
7699 { Bad_Opcode },
7700 { Bad_Opcode },
7701 { Bad_Opcode },
7702 { Bad_Opcode },
7703 /* 18 */
7704 { Bad_Opcode },
7705 { Bad_Opcode },
7706 { Bad_Opcode },
7707 { Bad_Opcode },
7708 { Bad_Opcode },
7709 { Bad_Opcode },
7710 { Bad_Opcode },
7711 { Bad_Opcode },
7712 /* 20 */
7713 { Bad_Opcode },
7714 { Bad_Opcode },
7715 { Bad_Opcode },
7716 { Bad_Opcode },
7717 { Bad_Opcode },
7718 { Bad_Opcode },
7719 { Bad_Opcode },
7720 { Bad_Opcode },
7721 /* 28 */
7722 { Bad_Opcode },
7723 { Bad_Opcode },
7724 { Bad_Opcode },
7725 { Bad_Opcode },
7726 { Bad_Opcode },
7727 { Bad_Opcode },
7728 { Bad_Opcode },
7729 { Bad_Opcode },
7730 /* 30 */
7731 { Bad_Opcode },
7732 { Bad_Opcode },
7733 { Bad_Opcode },
7734 { Bad_Opcode },
7735 { Bad_Opcode },
7736 { Bad_Opcode },
7737 { Bad_Opcode },
7738 { Bad_Opcode },
7739 /* 38 */
7740 { Bad_Opcode },
7741 { Bad_Opcode },
7742 { Bad_Opcode },
7743 { Bad_Opcode },
7744 { Bad_Opcode },
7745 { Bad_Opcode },
7746 { Bad_Opcode },
7747 { Bad_Opcode },
7748 /* 40 */
7749 { Bad_Opcode },
7750 { Bad_Opcode },
7751 { Bad_Opcode },
7752 { Bad_Opcode },
7753 { Bad_Opcode },
7754 { Bad_Opcode },
7755 { Bad_Opcode },
7756 { Bad_Opcode },
7757 /* 48 */
7758 { Bad_Opcode },
7759 { Bad_Opcode },
7760 { Bad_Opcode },
7761 { Bad_Opcode },
7762 { Bad_Opcode },
7763 { Bad_Opcode },
7764 { Bad_Opcode },
7765 { Bad_Opcode },
7766 /* 50 */
7767 { Bad_Opcode },
7768 { Bad_Opcode },
7769 { Bad_Opcode },
7770 { Bad_Opcode },
7771 { Bad_Opcode },
7772 { Bad_Opcode },
7773 { Bad_Opcode },
7774 { Bad_Opcode },
7775 /* 58 */
7776 { Bad_Opcode },
7777 { Bad_Opcode },
7778 { Bad_Opcode },
7779 { Bad_Opcode },
7780 { Bad_Opcode },
7781 { Bad_Opcode },
7782 { Bad_Opcode },
7783 { Bad_Opcode },
7784 /* 60 */
7785 { Bad_Opcode },
7786 { Bad_Opcode },
7787 { Bad_Opcode },
7788 { Bad_Opcode },
7789 { Bad_Opcode },
7790 { Bad_Opcode },
7791 { Bad_Opcode },
7792 { Bad_Opcode },
7793 /* 68 */
7794 { Bad_Opcode },
7795 { Bad_Opcode },
7796 { Bad_Opcode },
7797 { Bad_Opcode },
7798 { Bad_Opcode },
7799 { Bad_Opcode },
7800 { Bad_Opcode },
7801 { Bad_Opcode },
7802 /* 70 */
7803 { Bad_Opcode },
7804 { Bad_Opcode },
7805 { Bad_Opcode },
7806 { Bad_Opcode },
7807 { Bad_Opcode },
7808 { Bad_Opcode },
7809 { Bad_Opcode },
7810 { Bad_Opcode },
7811 /* 78 */
7812 { Bad_Opcode },
7813 { Bad_Opcode },
7814 { Bad_Opcode },
7815 { Bad_Opcode },
7816 { Bad_Opcode },
7817 { Bad_Opcode },
7818 { Bad_Opcode },
7819 { Bad_Opcode },
7820 /* 80 */
7821 { Bad_Opcode },
7822 { Bad_Opcode },
7823 { Bad_Opcode },
7824 { Bad_Opcode },
7825 { Bad_Opcode },
7826 { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7827 { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7828 { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7829 /* 88 */
7830 { Bad_Opcode },
7831 { Bad_Opcode },
7832 { Bad_Opcode },
7833 { Bad_Opcode },
7834 { Bad_Opcode },
7835 { Bad_Opcode },
7836 { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7837 { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7838 /* 90 */
7839 { Bad_Opcode },
7840 { Bad_Opcode },
7841 { Bad_Opcode },
7842 { Bad_Opcode },
7843 { Bad_Opcode },
7844 { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7845 { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7846 { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7847 /* 98 */
7848 { Bad_Opcode },
7849 { Bad_Opcode },
7850 { Bad_Opcode },
7851 { Bad_Opcode },
7852 { Bad_Opcode },
7853 { Bad_Opcode },
7854 { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7855 { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7856 /* a0 */
7857 { Bad_Opcode },
7858 { Bad_Opcode },
7859 { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7860 { "vpperm", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7861 { Bad_Opcode },
7862 { Bad_Opcode },
7863 { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7864 { Bad_Opcode },
7865 /* a8 */
7866 { Bad_Opcode },
7867 { Bad_Opcode },
7868 { Bad_Opcode },
7869 { Bad_Opcode },
7870 { Bad_Opcode },
7871 { Bad_Opcode },
7872 { Bad_Opcode },
7873 { Bad_Opcode },
7874 /* b0 */
7875 { Bad_Opcode },
7876 { Bad_Opcode },
7877 { Bad_Opcode },
7878 { Bad_Opcode },
7879 { Bad_Opcode },
7880 { Bad_Opcode },
7881 { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7882 { Bad_Opcode },
7883 /* b8 */
7884 { Bad_Opcode },
7885 { Bad_Opcode },
7886 { Bad_Opcode },
7887 { Bad_Opcode },
7888 { Bad_Opcode },
7889 { Bad_Opcode },
7890 { Bad_Opcode },
7891 { Bad_Opcode },
7892 /* c0 */
7893 { "vprotb", { XM, Vex_2src_1, Ib } },
7894 { "vprotw", { XM, Vex_2src_1, Ib } },
7895 { "vprotd", { XM, Vex_2src_1, Ib } },
7896 { "vprotq", { XM, Vex_2src_1, Ib } },
7897 { Bad_Opcode },
7898 { Bad_Opcode },
7899 { Bad_Opcode },
7900 { Bad_Opcode },
7901 /* c8 */
7902 { Bad_Opcode },
7903 { Bad_Opcode },
7904 { Bad_Opcode },
7905 { Bad_Opcode },
7906 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CC) },
7907 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CD) },
7908 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CE) },
7909 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CF) },
7910 /* d0 */
7911 { Bad_Opcode },
7912 { Bad_Opcode },
7913 { Bad_Opcode },
7914 { Bad_Opcode },
7915 { Bad_Opcode },
7916 { Bad_Opcode },
7917 { Bad_Opcode },
7918 { Bad_Opcode },
7919 /* d8 */
7920 { Bad_Opcode },
7921 { Bad_Opcode },
7922 { Bad_Opcode },
7923 { Bad_Opcode },
7924 { Bad_Opcode },
7925 { Bad_Opcode },
7926 { Bad_Opcode },
7927 { Bad_Opcode },
7928 /* e0 */
7929 { Bad_Opcode },
7930 { Bad_Opcode },
7931 { Bad_Opcode },
7932 { Bad_Opcode },
7933 { Bad_Opcode },
7934 { Bad_Opcode },
7935 { Bad_Opcode },
7936 { Bad_Opcode },
7937 /* e8 */
7938 { Bad_Opcode },
7939 { Bad_Opcode },
7940 { Bad_Opcode },
7941 { Bad_Opcode },
7942 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EC) },
7943 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_ED) },
7944 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EE) },
7945 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EF) },
7946 /* f0 */
7947 { Bad_Opcode },
7948 { Bad_Opcode },
7949 { Bad_Opcode },
7950 { Bad_Opcode },
7951 { Bad_Opcode },
7952 { Bad_Opcode },
7953 { Bad_Opcode },
7954 { Bad_Opcode },
7955 /* f8 */
7956 { Bad_Opcode },
7957 { Bad_Opcode },
7958 { Bad_Opcode },
7959 { Bad_Opcode },
7960 { Bad_Opcode },
7961 { Bad_Opcode },
7962 { Bad_Opcode },
7963 { Bad_Opcode },
7964 },
7965 /* XOP_09 */
7966 {
7967 /* 00 */
7968 { Bad_Opcode },
7969 { REG_TABLE (REG_XOP_TBM_01) },
7970 { REG_TABLE (REG_XOP_TBM_02) },
7971 { Bad_Opcode },
7972 { Bad_Opcode },
7973 { Bad_Opcode },
7974 { Bad_Opcode },
7975 { Bad_Opcode },
7976 /* 08 */
7977 { Bad_Opcode },
7978 { Bad_Opcode },
7979 { Bad_Opcode },
7980 { Bad_Opcode },
7981 { Bad_Opcode },
7982 { Bad_Opcode },
7983 { Bad_Opcode },
7984 { Bad_Opcode },
7985 /* 10 */
7986 { Bad_Opcode },
7987 { Bad_Opcode },
7988 { REG_TABLE (REG_XOP_LWPCB) },
7989 { Bad_Opcode },
7990 { Bad_Opcode },
7991 { Bad_Opcode },
7992 { Bad_Opcode },
7993 { Bad_Opcode },
7994 /* 18 */
7995 { Bad_Opcode },
7996 { Bad_Opcode },
7997 { Bad_Opcode },
7998 { Bad_Opcode },
7999 { Bad_Opcode },
8000 { Bad_Opcode },
8001 { Bad_Opcode },
8002 { Bad_Opcode },
8003 /* 20 */
8004 { Bad_Opcode },
8005 { Bad_Opcode },
8006 { Bad_Opcode },
8007 { Bad_Opcode },
8008 { Bad_Opcode },
8009 { Bad_Opcode },
8010 { Bad_Opcode },
8011 { Bad_Opcode },
8012 /* 28 */
8013 { Bad_Opcode },
8014 { Bad_Opcode },
8015 { Bad_Opcode },
8016 { Bad_Opcode },
8017 { Bad_Opcode },
8018 { Bad_Opcode },
8019 { Bad_Opcode },
8020 { Bad_Opcode },
8021 /* 30 */
8022 { Bad_Opcode },
8023 { Bad_Opcode },
8024 { Bad_Opcode },
8025 { Bad_Opcode },
8026 { Bad_Opcode },
8027 { Bad_Opcode },
8028 { Bad_Opcode },
8029 { Bad_Opcode },
8030 /* 38 */
8031 { Bad_Opcode },
8032 { Bad_Opcode },
8033 { Bad_Opcode },
8034 { Bad_Opcode },
8035 { Bad_Opcode },
8036 { Bad_Opcode },
8037 { Bad_Opcode },
8038 { Bad_Opcode },
8039 /* 40 */
8040 { Bad_Opcode },
8041 { Bad_Opcode },
8042 { Bad_Opcode },
8043 { Bad_Opcode },
8044 { Bad_Opcode },
8045 { Bad_Opcode },
8046 { Bad_Opcode },
8047 { Bad_Opcode },
8048 /* 48 */
8049 { Bad_Opcode },
8050 { Bad_Opcode },
8051 { Bad_Opcode },
8052 { Bad_Opcode },
8053 { Bad_Opcode },
8054 { Bad_Opcode },
8055 { Bad_Opcode },
8056 { Bad_Opcode },
8057 /* 50 */
8058 { Bad_Opcode },
8059 { Bad_Opcode },
8060 { Bad_Opcode },
8061 { Bad_Opcode },
8062 { Bad_Opcode },
8063 { Bad_Opcode },
8064 { Bad_Opcode },
8065 { Bad_Opcode },
8066 /* 58 */
8067 { Bad_Opcode },
8068 { Bad_Opcode },
8069 { Bad_Opcode },
8070 { Bad_Opcode },
8071 { Bad_Opcode },
8072 { Bad_Opcode },
8073 { Bad_Opcode },
8074 { Bad_Opcode },
8075 /* 60 */
8076 { Bad_Opcode },
8077 { Bad_Opcode },
8078 { Bad_Opcode },
8079 { Bad_Opcode },
8080 { Bad_Opcode },
8081 { Bad_Opcode },
8082 { Bad_Opcode },
8083 { Bad_Opcode },
8084 /* 68 */
8085 { Bad_Opcode },
8086 { Bad_Opcode },
8087 { Bad_Opcode },
8088 { Bad_Opcode },
8089 { Bad_Opcode },
8090 { Bad_Opcode },
8091 { Bad_Opcode },
8092 { Bad_Opcode },
8093 /* 70 */
8094 { Bad_Opcode },
8095 { Bad_Opcode },
8096 { Bad_Opcode },
8097 { Bad_Opcode },
8098 { Bad_Opcode },
8099 { Bad_Opcode },
8100 { Bad_Opcode },
8101 { Bad_Opcode },
8102 /* 78 */
8103 { Bad_Opcode },
8104 { Bad_Opcode },
8105 { Bad_Opcode },
8106 { Bad_Opcode },
8107 { Bad_Opcode },
8108 { Bad_Opcode },
8109 { Bad_Opcode },
8110 { Bad_Opcode },
8111 /* 80 */
8112 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) },
8113 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) },
8114 { "vfrczss", { XM, EXd } },
8115 { "vfrczsd", { XM, EXq } },
8116 { Bad_Opcode },
8117 { Bad_Opcode },
8118 { Bad_Opcode },
8119 { Bad_Opcode },
8120 /* 88 */
8121 { Bad_Opcode },
8122 { Bad_Opcode },
8123 { Bad_Opcode },
8124 { Bad_Opcode },
8125 { Bad_Opcode },
8126 { Bad_Opcode },
8127 { Bad_Opcode },
8128 { Bad_Opcode },
8129 /* 90 */
8130 { "vprotb", { XM, Vex_2src_1, Vex_2src_2 } },
8131 { "vprotw", { XM, Vex_2src_1, Vex_2src_2 } },
8132 { "vprotd", { XM, Vex_2src_1, Vex_2src_2 } },
8133 { "vprotq", { XM, Vex_2src_1, Vex_2src_2 } },
8134 { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 } },
8135 { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 } },
8136 { "vpshld", { XM, Vex_2src_1, Vex_2src_2 } },
8137 { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 } },
8138 /* 98 */
8139 { "vpshab", { XM, Vex_2src_1, Vex_2src_2 } },
8140 { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 } },
8141 { "vpshad", { XM, Vex_2src_1, Vex_2src_2 } },
8142 { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 } },
8143 { Bad_Opcode },
8144 { Bad_Opcode },
8145 { Bad_Opcode },
8146 { Bad_Opcode },
8147 /* a0 */
8148 { Bad_Opcode },
8149 { Bad_Opcode },
8150 { Bad_Opcode },
8151 { Bad_Opcode },
8152 { Bad_Opcode },
8153 { Bad_Opcode },
8154 { Bad_Opcode },
8155 { Bad_Opcode },
8156 /* a8 */
8157 { Bad_Opcode },
8158 { Bad_Opcode },
8159 { Bad_Opcode },
8160 { Bad_Opcode },
8161 { Bad_Opcode },
8162 { Bad_Opcode },
8163 { Bad_Opcode },
8164 { Bad_Opcode },
8165 /* b0 */
8166 { Bad_Opcode },
8167 { Bad_Opcode },
8168 { Bad_Opcode },
8169 { Bad_Opcode },
8170 { Bad_Opcode },
8171 { Bad_Opcode },
8172 { Bad_Opcode },
8173 { Bad_Opcode },
8174 /* b8 */
8175 { Bad_Opcode },
8176 { Bad_Opcode },
8177 { Bad_Opcode },
8178 { Bad_Opcode },
8179 { Bad_Opcode },
8180 { Bad_Opcode },
8181 { Bad_Opcode },
8182 { Bad_Opcode },
8183 /* c0 */
8184 { Bad_Opcode },
8185 { "vphaddbw", { XM, EXxmm } },
8186 { "vphaddbd", { XM, EXxmm } },
8187 { "vphaddbq", { XM, EXxmm } },
8188 { Bad_Opcode },
8189 { Bad_Opcode },
8190 { "vphaddwd", { XM, EXxmm } },
8191 { "vphaddwq", { XM, EXxmm } },
8192 /* c8 */
8193 { Bad_Opcode },
8194 { Bad_Opcode },
8195 { Bad_Opcode },
8196 { "vphadddq", { XM, EXxmm } },
8197 { Bad_Opcode },
8198 { Bad_Opcode },
8199 { Bad_Opcode },
8200 { Bad_Opcode },
8201 /* d0 */
8202 { Bad_Opcode },
8203 { "vphaddubw", { XM, EXxmm } },
8204 { "vphaddubd", { XM, EXxmm } },
8205 { "vphaddubq", { XM, EXxmm } },
8206 { Bad_Opcode },
8207 { Bad_Opcode },
8208 { "vphadduwd", { XM, EXxmm } },
8209 { "vphadduwq", { XM, EXxmm } },
8210 /* d8 */
8211 { Bad_Opcode },
8212 { Bad_Opcode },
8213 { Bad_Opcode },
8214 { "vphaddudq", { XM, EXxmm } },
8215 { Bad_Opcode },
8216 { Bad_Opcode },
8217 { Bad_Opcode },
8218 { Bad_Opcode },
8219 /* e0 */
8220 { Bad_Opcode },
8221 { "vphsubbw", { XM, EXxmm } },
8222 { "vphsubwd", { XM, EXxmm } },
8223 { "vphsubdq", { XM, EXxmm } },
8224 { Bad_Opcode },
8225 { Bad_Opcode },
8226 { Bad_Opcode },
8227 { Bad_Opcode },
8228 /* e8 */
8229 { Bad_Opcode },
8230 { Bad_Opcode },
8231 { Bad_Opcode },
8232 { Bad_Opcode },
8233 { Bad_Opcode },
8234 { Bad_Opcode },
8235 { Bad_Opcode },
8236 { Bad_Opcode },
8237 /* f0 */
8238 { Bad_Opcode },
8239 { Bad_Opcode },
8240 { Bad_Opcode },
8241 { Bad_Opcode },
8242 { Bad_Opcode },
8243 { Bad_Opcode },
8244 { Bad_Opcode },
8245 { Bad_Opcode },
8246 /* f8 */
8247 { Bad_Opcode },
8248 { Bad_Opcode },
8249 { Bad_Opcode },
8250 { Bad_Opcode },
8251 { Bad_Opcode },
8252 { Bad_Opcode },
8253 { Bad_Opcode },
8254 { Bad_Opcode },
8255 },
8256 /* XOP_0A */
8257 {
8258 /* 00 */
8259 { Bad_Opcode },
8260 { Bad_Opcode },
8261 { Bad_Opcode },
8262 { Bad_Opcode },
8263 { Bad_Opcode },
8264 { Bad_Opcode },
8265 { Bad_Opcode },
8266 { Bad_Opcode },
8267 /* 08 */
8268 { Bad_Opcode },
8269 { Bad_Opcode },
8270 { Bad_Opcode },
8271 { Bad_Opcode },
8272 { Bad_Opcode },
8273 { Bad_Opcode },
8274 { Bad_Opcode },
8275 { Bad_Opcode },
8276 /* 10 */
8277 { "bextr", { Gv, Ev, Iq } },
8278 { Bad_Opcode },
8279 { REG_TABLE (REG_XOP_LWP) },
8280 { Bad_Opcode },
8281 { Bad_Opcode },
8282 { Bad_Opcode },
8283 { Bad_Opcode },
8284 { Bad_Opcode },
8285 /* 18 */
8286 { Bad_Opcode },
8287 { Bad_Opcode },
8288 { Bad_Opcode },
8289 { Bad_Opcode },
8290 { Bad_Opcode },
8291 { Bad_Opcode },
8292 { Bad_Opcode },
8293 { Bad_Opcode },
8294 /* 20 */
8295 { Bad_Opcode },
8296 { Bad_Opcode },
8297 { Bad_Opcode },
8298 { Bad_Opcode },
8299 { Bad_Opcode },
8300 { Bad_Opcode },
8301 { Bad_Opcode },
8302 { Bad_Opcode },
8303 /* 28 */
8304 { Bad_Opcode },
8305 { Bad_Opcode },
8306 { Bad_Opcode },
8307 { Bad_Opcode },
8308 { Bad_Opcode },
8309 { Bad_Opcode },
8310 { Bad_Opcode },
8311 { Bad_Opcode },
8312 /* 30 */
8313 { Bad_Opcode },
8314 { Bad_Opcode },
8315 { Bad_Opcode },
8316 { Bad_Opcode },
8317 { Bad_Opcode },
8318 { Bad_Opcode },
8319 { Bad_Opcode },
8320 { Bad_Opcode },
8321 /* 38 */
8322 { Bad_Opcode },
8323 { Bad_Opcode },
8324 { Bad_Opcode },
8325 { Bad_Opcode },
8326 { Bad_Opcode },
8327 { Bad_Opcode },
8328 { Bad_Opcode },
8329 { Bad_Opcode },
8330 /* 40 */
8331 { Bad_Opcode },
8332 { Bad_Opcode },
8333 { Bad_Opcode },
8334 { Bad_Opcode },
8335 { Bad_Opcode },
8336 { Bad_Opcode },
8337 { Bad_Opcode },
8338 { Bad_Opcode },
8339 /* 48 */
8340 { Bad_Opcode },
8341 { Bad_Opcode },
8342 { Bad_Opcode },
8343 { Bad_Opcode },
8344 { Bad_Opcode },
8345 { Bad_Opcode },
8346 { Bad_Opcode },
8347 { Bad_Opcode },
8348 /* 50 */
8349 { Bad_Opcode },
8350 { Bad_Opcode },
8351 { Bad_Opcode },
8352 { Bad_Opcode },
8353 { Bad_Opcode },
8354 { Bad_Opcode },
8355 { Bad_Opcode },
8356 { Bad_Opcode },
8357 /* 58 */
8358 { Bad_Opcode },
8359 { Bad_Opcode },
8360 { Bad_Opcode },
8361 { Bad_Opcode },
8362 { Bad_Opcode },
8363 { Bad_Opcode },
8364 { Bad_Opcode },
8365 { Bad_Opcode },
8366 /* 60 */
8367 { Bad_Opcode },
8368 { Bad_Opcode },
8369 { Bad_Opcode },
8370 { Bad_Opcode },
8371 { Bad_Opcode },
8372 { Bad_Opcode },
8373 { Bad_Opcode },
8374 { Bad_Opcode },
8375 /* 68 */
8376 { Bad_Opcode },
8377 { Bad_Opcode },
8378 { Bad_Opcode },
8379 { Bad_Opcode },
8380 { Bad_Opcode },
8381 { Bad_Opcode },
8382 { Bad_Opcode },
8383 { Bad_Opcode },
8384 /* 70 */
8385 { Bad_Opcode },
8386 { Bad_Opcode },
8387 { Bad_Opcode },
8388 { Bad_Opcode },
8389 { Bad_Opcode },
8390 { Bad_Opcode },
8391 { Bad_Opcode },
8392 { Bad_Opcode },
8393 /* 78 */
8394 { Bad_Opcode },
8395 { Bad_Opcode },
8396 { Bad_Opcode },
8397 { Bad_Opcode },
8398 { Bad_Opcode },
8399 { Bad_Opcode },
8400 { Bad_Opcode },
8401 { Bad_Opcode },
8402 /* 80 */
8403 { Bad_Opcode },
8404 { Bad_Opcode },
8405 { Bad_Opcode },
8406 { Bad_Opcode },
8407 { Bad_Opcode },
8408 { Bad_Opcode },
8409 { Bad_Opcode },
8410 { Bad_Opcode },
8411 /* 88 */
8412 { Bad_Opcode },
8413 { Bad_Opcode },
8414 { Bad_Opcode },
8415 { Bad_Opcode },
8416 { Bad_Opcode },
8417 { Bad_Opcode },
8418 { Bad_Opcode },
8419 { Bad_Opcode },
8420 /* 90 */
8421 { Bad_Opcode },
8422 { Bad_Opcode },
8423 { Bad_Opcode },
8424 { Bad_Opcode },
8425 { Bad_Opcode },
8426 { Bad_Opcode },
8427 { Bad_Opcode },
8428 { Bad_Opcode },
8429 /* 98 */
8430 { Bad_Opcode },
8431 { Bad_Opcode },
8432 { Bad_Opcode },
8433 { Bad_Opcode },
8434 { Bad_Opcode },
8435 { Bad_Opcode },
8436 { Bad_Opcode },
8437 { Bad_Opcode },
8438 /* a0 */
8439 { Bad_Opcode },
8440 { Bad_Opcode },
8441 { Bad_Opcode },
8442 { Bad_Opcode },
8443 { Bad_Opcode },
8444 { Bad_Opcode },
8445 { Bad_Opcode },
8446 { Bad_Opcode },
8447 /* a8 */
8448 { Bad_Opcode },
8449 { Bad_Opcode },
8450 { Bad_Opcode },
8451 { Bad_Opcode },
8452 { Bad_Opcode },
8453 { Bad_Opcode },
8454 { Bad_Opcode },
8455 { Bad_Opcode },
8456 /* b0 */
8457 { Bad_Opcode },
8458 { Bad_Opcode },
8459 { Bad_Opcode },
8460 { Bad_Opcode },
8461 { Bad_Opcode },
8462 { Bad_Opcode },
8463 { Bad_Opcode },
8464 { Bad_Opcode },
8465 /* b8 */
8466 { Bad_Opcode },
8467 { Bad_Opcode },
8468 { Bad_Opcode },
8469 { Bad_Opcode },
8470 { Bad_Opcode },
8471 { Bad_Opcode },
8472 { Bad_Opcode },
8473 { Bad_Opcode },
8474 /* c0 */
8475 { Bad_Opcode },
8476 { Bad_Opcode },
8477 { Bad_Opcode },
8478 { Bad_Opcode },
8479 { Bad_Opcode },
8480 { Bad_Opcode },
8481 { Bad_Opcode },
8482 { Bad_Opcode },
8483 /* c8 */
8484 { Bad_Opcode },
8485 { Bad_Opcode },
8486 { Bad_Opcode },
8487 { Bad_Opcode },
8488 { Bad_Opcode },
8489 { Bad_Opcode },
8490 { Bad_Opcode },
8491 { Bad_Opcode },
8492 /* d0 */
8493 { Bad_Opcode },
8494 { Bad_Opcode },
8495 { Bad_Opcode },
8496 { Bad_Opcode },
8497 { Bad_Opcode },
8498 { Bad_Opcode },
8499 { Bad_Opcode },
8500 { Bad_Opcode },
8501 /* d8 */
8502 { Bad_Opcode },
8503 { Bad_Opcode },
8504 { Bad_Opcode },
8505 { Bad_Opcode },
8506 { Bad_Opcode },
8507 { Bad_Opcode },
8508 { Bad_Opcode },
8509 { Bad_Opcode },
8510 /* e0 */
8511 { Bad_Opcode },
8512 { Bad_Opcode },
8513 { Bad_Opcode },
8514 { Bad_Opcode },
8515 { Bad_Opcode },
8516 { Bad_Opcode },
8517 { Bad_Opcode },
8518 { Bad_Opcode },
8519 /* e8 */
8520 { Bad_Opcode },
8521 { Bad_Opcode },
8522 { Bad_Opcode },
8523 { Bad_Opcode },
8524 { Bad_Opcode },
8525 { Bad_Opcode },
8526 { Bad_Opcode },
8527 { Bad_Opcode },
8528 /* f0 */
8529 { Bad_Opcode },
8530 { Bad_Opcode },
8531 { Bad_Opcode },
8532 { Bad_Opcode },
8533 { Bad_Opcode },
8534 { Bad_Opcode },
8535 { Bad_Opcode },
8536 { Bad_Opcode },
8537 /* f8 */
8538 { Bad_Opcode },
8539 { Bad_Opcode },
8540 { Bad_Opcode },
8541 { Bad_Opcode },
8542 { Bad_Opcode },
8543 { Bad_Opcode },
8544 { Bad_Opcode },
8545 { Bad_Opcode },
8546 },
8547 };
8548
8549 static const struct dis386 vex_table[][256] = {
8550 /* VEX_0F */
8551 {
8552 /* 00 */
8553 { Bad_Opcode },
8554 { Bad_Opcode },
8555 { Bad_Opcode },
8556 { Bad_Opcode },
8557 { Bad_Opcode },
8558 { Bad_Opcode },
8559 { Bad_Opcode },
8560 { Bad_Opcode },
8561 /* 08 */
8562 { Bad_Opcode },
8563 { Bad_Opcode },
8564 { Bad_Opcode },
8565 { Bad_Opcode },
8566 { Bad_Opcode },
8567 { Bad_Opcode },
8568 { Bad_Opcode },
8569 { Bad_Opcode },
8570 /* 10 */
8571 { PREFIX_TABLE (PREFIX_VEX_0F10) },
8572 { PREFIX_TABLE (PREFIX_VEX_0F11) },
8573 { PREFIX_TABLE (PREFIX_VEX_0F12) },
8574 { MOD_TABLE (MOD_VEX_0F13) },
8575 { VEX_W_TABLE (VEX_W_0F14) },
8576 { VEX_W_TABLE (VEX_W_0F15) },
8577 { PREFIX_TABLE (PREFIX_VEX_0F16) },
8578 { MOD_TABLE (MOD_VEX_0F17) },
8579 /* 18 */
8580 { Bad_Opcode },
8581 { Bad_Opcode },
8582 { Bad_Opcode },
8583 { Bad_Opcode },
8584 { Bad_Opcode },
8585 { Bad_Opcode },
8586 { Bad_Opcode },
8587 { Bad_Opcode },
8588 /* 20 */
8589 { Bad_Opcode },
8590 { Bad_Opcode },
8591 { Bad_Opcode },
8592 { Bad_Opcode },
8593 { Bad_Opcode },
8594 { Bad_Opcode },
8595 { Bad_Opcode },
8596 { Bad_Opcode },
8597 /* 28 */
8598 { VEX_W_TABLE (VEX_W_0F28) },
8599 { VEX_W_TABLE (VEX_W_0F29) },
8600 { PREFIX_TABLE (PREFIX_VEX_0F2A) },
8601 { MOD_TABLE (MOD_VEX_0F2B) },
8602 { PREFIX_TABLE (PREFIX_VEX_0F2C) },
8603 { PREFIX_TABLE (PREFIX_VEX_0F2D) },
8604 { PREFIX_TABLE (PREFIX_VEX_0F2E) },
8605 { PREFIX_TABLE (PREFIX_VEX_0F2F) },
8606 /* 30 */
8607 { Bad_Opcode },
8608 { Bad_Opcode },
8609 { Bad_Opcode },
8610 { Bad_Opcode },
8611 { Bad_Opcode },
8612 { Bad_Opcode },
8613 { Bad_Opcode },
8614 { Bad_Opcode },
8615 /* 38 */
8616 { Bad_Opcode },
8617 { Bad_Opcode },
8618 { Bad_Opcode },
8619 { Bad_Opcode },
8620 { Bad_Opcode },
8621 { Bad_Opcode },
8622 { Bad_Opcode },
8623 { Bad_Opcode },
8624 /* 40 */
8625 { Bad_Opcode },
8626 { PREFIX_TABLE (PREFIX_VEX_0F41) },
8627 { PREFIX_TABLE (PREFIX_VEX_0F42) },
8628 { Bad_Opcode },
8629 { PREFIX_TABLE (PREFIX_VEX_0F44) },
8630 { PREFIX_TABLE (PREFIX_VEX_0F45) },
8631 { PREFIX_TABLE (PREFIX_VEX_0F46) },
8632 { PREFIX_TABLE (PREFIX_VEX_0F47) },
8633 /* 48 */
8634 { Bad_Opcode },
8635 { Bad_Opcode },
8636 { PREFIX_TABLE (PREFIX_VEX_0F4A) },
8637 { PREFIX_TABLE (PREFIX_VEX_0F4B) },
8638 { Bad_Opcode },
8639 { Bad_Opcode },
8640 { Bad_Opcode },
8641 { Bad_Opcode },
8642 /* 50 */
8643 { MOD_TABLE (MOD_VEX_0F50) },
8644 { PREFIX_TABLE (PREFIX_VEX_0F51) },
8645 { PREFIX_TABLE (PREFIX_VEX_0F52) },
8646 { PREFIX_TABLE (PREFIX_VEX_0F53) },
8647 { "vandpX", { XM, Vex, EXx } },
8648 { "vandnpX", { XM, Vex, EXx } },
8649 { "vorpX", { XM, Vex, EXx } },
8650 { "vxorpX", { XM, Vex, EXx } },
8651 /* 58 */
8652 { PREFIX_TABLE (PREFIX_VEX_0F58) },
8653 { PREFIX_TABLE (PREFIX_VEX_0F59) },
8654 { PREFIX_TABLE (PREFIX_VEX_0F5A) },
8655 { PREFIX_TABLE (PREFIX_VEX_0F5B) },
8656 { PREFIX_TABLE (PREFIX_VEX_0F5C) },
8657 { PREFIX_TABLE (PREFIX_VEX_0F5D) },
8658 { PREFIX_TABLE (PREFIX_VEX_0F5E) },
8659 { PREFIX_TABLE (PREFIX_VEX_0F5F) },
8660 /* 60 */
8661 { PREFIX_TABLE (PREFIX_VEX_0F60) },
8662 { PREFIX_TABLE (PREFIX_VEX_0F61) },
8663 { PREFIX_TABLE (PREFIX_VEX_0F62) },
8664 { PREFIX_TABLE (PREFIX_VEX_0F63) },
8665 { PREFIX_TABLE (PREFIX_VEX_0F64) },
8666 { PREFIX_TABLE (PREFIX_VEX_0F65) },
8667 { PREFIX_TABLE (PREFIX_VEX_0F66) },
8668 { PREFIX_TABLE (PREFIX_VEX_0F67) },
8669 /* 68 */
8670 { PREFIX_TABLE (PREFIX_VEX_0F68) },
8671 { PREFIX_TABLE (PREFIX_VEX_0F69) },
8672 { PREFIX_TABLE (PREFIX_VEX_0F6A) },
8673 { PREFIX_TABLE (PREFIX_VEX_0F6B) },
8674 { PREFIX_TABLE (PREFIX_VEX_0F6C) },
8675 { PREFIX_TABLE (PREFIX_VEX_0F6D) },
8676 { PREFIX_TABLE (PREFIX_VEX_0F6E) },
8677 { PREFIX_TABLE (PREFIX_VEX_0F6F) },
8678 /* 70 */
8679 { PREFIX_TABLE (PREFIX_VEX_0F70) },
8680 { REG_TABLE (REG_VEX_0F71) },
8681 { REG_TABLE (REG_VEX_0F72) },
8682 { REG_TABLE (REG_VEX_0F73) },
8683 { PREFIX_TABLE (PREFIX_VEX_0F74) },
8684 { PREFIX_TABLE (PREFIX_VEX_0F75) },
8685 { PREFIX_TABLE (PREFIX_VEX_0F76) },
8686 { PREFIX_TABLE (PREFIX_VEX_0F77) },
8687 /* 78 */
8688 { Bad_Opcode },
8689 { Bad_Opcode },
8690 { Bad_Opcode },
8691 { Bad_Opcode },
8692 { PREFIX_TABLE (PREFIX_VEX_0F7C) },
8693 { PREFIX_TABLE (PREFIX_VEX_0F7D) },
8694 { PREFIX_TABLE (PREFIX_VEX_0F7E) },
8695 { PREFIX_TABLE (PREFIX_VEX_0F7F) },
8696 /* 80 */
8697 { Bad_Opcode },
8698 { Bad_Opcode },
8699 { Bad_Opcode },
8700 { Bad_Opcode },
8701 { Bad_Opcode },
8702 { Bad_Opcode },
8703 { Bad_Opcode },
8704 { Bad_Opcode },
8705 /* 88 */
8706 { Bad_Opcode },
8707 { Bad_Opcode },
8708 { Bad_Opcode },
8709 { Bad_Opcode },
8710 { Bad_Opcode },
8711 { Bad_Opcode },
8712 { Bad_Opcode },
8713 { Bad_Opcode },
8714 /* 90 */
8715 { PREFIX_TABLE (PREFIX_VEX_0F90) },
8716 { PREFIX_TABLE (PREFIX_VEX_0F91) },
8717 { PREFIX_TABLE (PREFIX_VEX_0F92) },
8718 { PREFIX_TABLE (PREFIX_VEX_0F93) },
8719 { Bad_Opcode },
8720 { Bad_Opcode },
8721 { Bad_Opcode },
8722 { Bad_Opcode },
8723 /* 98 */
8724 { PREFIX_TABLE (PREFIX_VEX_0F98) },
8725 { PREFIX_TABLE (PREFIX_VEX_0F99) },
8726 { Bad_Opcode },
8727 { Bad_Opcode },
8728 { Bad_Opcode },
8729 { Bad_Opcode },
8730 { Bad_Opcode },
8731 { Bad_Opcode },
8732 /* a0 */
8733 { Bad_Opcode },
8734 { Bad_Opcode },
8735 { Bad_Opcode },
8736 { Bad_Opcode },
8737 { Bad_Opcode },
8738 { Bad_Opcode },
8739 { Bad_Opcode },
8740 { Bad_Opcode },
8741 /* a8 */
8742 { Bad_Opcode },
8743 { Bad_Opcode },
8744 { Bad_Opcode },
8745 { Bad_Opcode },
8746 { Bad_Opcode },
8747 { Bad_Opcode },
8748 { REG_TABLE (REG_VEX_0FAE) },
8749 { Bad_Opcode },
8750 /* b0 */
8751 { Bad_Opcode },
8752 { Bad_Opcode },
8753 { Bad_Opcode },
8754 { Bad_Opcode },
8755 { Bad_Opcode },
8756 { Bad_Opcode },
8757 { Bad_Opcode },
8758 { Bad_Opcode },
8759 /* b8 */
8760 { Bad_Opcode },
8761 { Bad_Opcode },
8762 { Bad_Opcode },
8763 { Bad_Opcode },
8764 { Bad_Opcode },
8765 { Bad_Opcode },
8766 { Bad_Opcode },
8767 { Bad_Opcode },
8768 /* c0 */
8769 { Bad_Opcode },
8770 { Bad_Opcode },
8771 { PREFIX_TABLE (PREFIX_VEX_0FC2) },
8772 { Bad_Opcode },
8773 { PREFIX_TABLE (PREFIX_VEX_0FC4) },
8774 { PREFIX_TABLE (PREFIX_VEX_0FC5) },
8775 { "vshufpX", { XM, Vex, EXx, Ib } },
8776 { Bad_Opcode },
8777 /* c8 */
8778 { Bad_Opcode },
8779 { Bad_Opcode },
8780 { Bad_Opcode },
8781 { Bad_Opcode },
8782 { Bad_Opcode },
8783 { Bad_Opcode },
8784 { Bad_Opcode },
8785 { Bad_Opcode },
8786 /* d0 */
8787 { PREFIX_TABLE (PREFIX_VEX_0FD0) },
8788 { PREFIX_TABLE (PREFIX_VEX_0FD1) },
8789 { PREFIX_TABLE (PREFIX_VEX_0FD2) },
8790 { PREFIX_TABLE (PREFIX_VEX_0FD3) },
8791 { PREFIX_TABLE (PREFIX_VEX_0FD4) },
8792 { PREFIX_TABLE (PREFIX_VEX_0FD5) },
8793 { PREFIX_TABLE (PREFIX_VEX_0FD6) },
8794 { PREFIX_TABLE (PREFIX_VEX_0FD7) },
8795 /* d8 */
8796 { PREFIX_TABLE (PREFIX_VEX_0FD8) },
8797 { PREFIX_TABLE (PREFIX_VEX_0FD9) },
8798 { PREFIX_TABLE (PREFIX_VEX_0FDA) },
8799 { PREFIX_TABLE (PREFIX_VEX_0FDB) },
8800 { PREFIX_TABLE (PREFIX_VEX_0FDC) },
8801 { PREFIX_TABLE (PREFIX_VEX_0FDD) },
8802 { PREFIX_TABLE (PREFIX_VEX_0FDE) },
8803 { PREFIX_TABLE (PREFIX_VEX_0FDF) },
8804 /* e0 */
8805 { PREFIX_TABLE (PREFIX_VEX_0FE0) },
8806 { PREFIX_TABLE (PREFIX_VEX_0FE1) },
8807 { PREFIX_TABLE (PREFIX_VEX_0FE2) },
8808 { PREFIX_TABLE (PREFIX_VEX_0FE3) },
8809 { PREFIX_TABLE (PREFIX_VEX_0FE4) },
8810 { PREFIX_TABLE (PREFIX_VEX_0FE5) },
8811 { PREFIX_TABLE (PREFIX_VEX_0FE6) },
8812 { PREFIX_TABLE (PREFIX_VEX_0FE7) },
8813 /* e8 */
8814 { PREFIX_TABLE (PREFIX_VEX_0FE8) },
8815 { PREFIX_TABLE (PREFIX_VEX_0FE9) },
8816 { PREFIX_TABLE (PREFIX_VEX_0FEA) },
8817 { PREFIX_TABLE (PREFIX_VEX_0FEB) },
8818 { PREFIX_TABLE (PREFIX_VEX_0FEC) },
8819 { PREFIX_TABLE (PREFIX_VEX_0FED) },
8820 { PREFIX_TABLE (PREFIX_VEX_0FEE) },
8821 { PREFIX_TABLE (PREFIX_VEX_0FEF) },
8822 /* f0 */
8823 { PREFIX_TABLE (PREFIX_VEX_0FF0) },
8824 { PREFIX_TABLE (PREFIX_VEX_0FF1) },
8825 { PREFIX_TABLE (PREFIX_VEX_0FF2) },
8826 { PREFIX_TABLE (PREFIX_VEX_0FF3) },
8827 { PREFIX_TABLE (PREFIX_VEX_0FF4) },
8828 { PREFIX_TABLE (PREFIX_VEX_0FF5) },
8829 { PREFIX_TABLE (PREFIX_VEX_0FF6) },
8830 { PREFIX_TABLE (PREFIX_VEX_0FF7) },
8831 /* f8 */
8832 { PREFIX_TABLE (PREFIX_VEX_0FF8) },
8833 { PREFIX_TABLE (PREFIX_VEX_0FF9) },
8834 { PREFIX_TABLE (PREFIX_VEX_0FFA) },
8835 { PREFIX_TABLE (PREFIX_VEX_0FFB) },
8836 { PREFIX_TABLE (PREFIX_VEX_0FFC) },
8837 { PREFIX_TABLE (PREFIX_VEX_0FFD) },
8838 { PREFIX_TABLE (PREFIX_VEX_0FFE) },
8839 { Bad_Opcode },
8840 },
8841 /* VEX_0F38 */
8842 {
8843 /* 00 */
8844 { PREFIX_TABLE (PREFIX_VEX_0F3800) },
8845 { PREFIX_TABLE (PREFIX_VEX_0F3801) },
8846 { PREFIX_TABLE (PREFIX_VEX_0F3802) },
8847 { PREFIX_TABLE (PREFIX_VEX_0F3803) },
8848 { PREFIX_TABLE (PREFIX_VEX_0F3804) },
8849 { PREFIX_TABLE (PREFIX_VEX_0F3805) },
8850 { PREFIX_TABLE (PREFIX_VEX_0F3806) },
8851 { PREFIX_TABLE (PREFIX_VEX_0F3807) },
8852 /* 08 */
8853 { PREFIX_TABLE (PREFIX_VEX_0F3808) },
8854 { PREFIX_TABLE (PREFIX_VEX_0F3809) },
8855 { PREFIX_TABLE (PREFIX_VEX_0F380A) },
8856 { PREFIX_TABLE (PREFIX_VEX_0F380B) },
8857 { PREFIX_TABLE (PREFIX_VEX_0F380C) },
8858 { PREFIX_TABLE (PREFIX_VEX_0F380D) },
8859 { PREFIX_TABLE (PREFIX_VEX_0F380E) },
8860 { PREFIX_TABLE (PREFIX_VEX_0F380F) },
8861 /* 10 */
8862 { Bad_Opcode },
8863 { Bad_Opcode },
8864 { Bad_Opcode },
8865 { PREFIX_TABLE (PREFIX_VEX_0F3813) },
8866 { Bad_Opcode },
8867 { Bad_Opcode },
8868 { PREFIX_TABLE (PREFIX_VEX_0F3816) },
8869 { PREFIX_TABLE (PREFIX_VEX_0F3817) },
8870 /* 18 */
8871 { PREFIX_TABLE (PREFIX_VEX_0F3818) },
8872 { PREFIX_TABLE (PREFIX_VEX_0F3819) },
8873 { PREFIX_TABLE (PREFIX_VEX_0F381A) },
8874 { Bad_Opcode },
8875 { PREFIX_TABLE (PREFIX_VEX_0F381C) },
8876 { PREFIX_TABLE (PREFIX_VEX_0F381D) },
8877 { PREFIX_TABLE (PREFIX_VEX_0F381E) },
8878 { Bad_Opcode },
8879 /* 20 */
8880 { PREFIX_TABLE (PREFIX_VEX_0F3820) },
8881 { PREFIX_TABLE (PREFIX_VEX_0F3821) },
8882 { PREFIX_TABLE (PREFIX_VEX_0F3822) },
8883 { PREFIX_TABLE (PREFIX_VEX_0F3823) },
8884 { PREFIX_TABLE (PREFIX_VEX_0F3824) },
8885 { PREFIX_TABLE (PREFIX_VEX_0F3825) },
8886 { Bad_Opcode },
8887 { Bad_Opcode },
8888 /* 28 */
8889 { PREFIX_TABLE (PREFIX_VEX_0F3828) },
8890 { PREFIX_TABLE (PREFIX_VEX_0F3829) },
8891 { PREFIX_TABLE (PREFIX_VEX_0F382A) },
8892 { PREFIX_TABLE (PREFIX_VEX_0F382B) },
8893 { PREFIX_TABLE (PREFIX_VEX_0F382C) },
8894 { PREFIX_TABLE (PREFIX_VEX_0F382D) },
8895 { PREFIX_TABLE (PREFIX_VEX_0F382E) },
8896 { PREFIX_TABLE (PREFIX_VEX_0F382F) },
8897 /* 30 */
8898 { PREFIX_TABLE (PREFIX_VEX_0F3830) },
8899 { PREFIX_TABLE (PREFIX_VEX_0F3831) },
8900 { PREFIX_TABLE (PREFIX_VEX_0F3832) },
8901 { PREFIX_TABLE (PREFIX_VEX_0F3833) },
8902 { PREFIX_TABLE (PREFIX_VEX_0F3834) },
8903 { PREFIX_TABLE (PREFIX_VEX_0F3835) },
8904 { PREFIX_TABLE (PREFIX_VEX_0F3836) },
8905 { PREFIX_TABLE (PREFIX_VEX_0F3837) },
8906 /* 38 */
8907 { PREFIX_TABLE (PREFIX_VEX_0F3838) },
8908 { PREFIX_TABLE (PREFIX_VEX_0F3839) },
8909 { PREFIX_TABLE (PREFIX_VEX_0F383A) },
8910 { PREFIX_TABLE (PREFIX_VEX_0F383B) },
8911 { PREFIX_TABLE (PREFIX_VEX_0F383C) },
8912 { PREFIX_TABLE (PREFIX_VEX_0F383D) },
8913 { PREFIX_TABLE (PREFIX_VEX_0F383E) },
8914 { PREFIX_TABLE (PREFIX_VEX_0F383F) },
8915 /* 40 */
8916 { PREFIX_TABLE (PREFIX_VEX_0F3840) },
8917 { PREFIX_TABLE (PREFIX_VEX_0F3841) },
8918 { Bad_Opcode },
8919 { Bad_Opcode },
8920 { Bad_Opcode },
8921 { PREFIX_TABLE (PREFIX_VEX_0F3845) },
8922 { PREFIX_TABLE (PREFIX_VEX_0F3846) },
8923 { PREFIX_TABLE (PREFIX_VEX_0F3847) },
8924 /* 48 */
8925 { Bad_Opcode },
8926 { Bad_Opcode },
8927 { Bad_Opcode },
8928 { Bad_Opcode },
8929 { Bad_Opcode },
8930 { Bad_Opcode },
8931 { Bad_Opcode },
8932 { Bad_Opcode },
8933 /* 50 */
8934 { Bad_Opcode },
8935 { Bad_Opcode },
8936 { Bad_Opcode },
8937 { Bad_Opcode },
8938 { Bad_Opcode },
8939 { Bad_Opcode },
8940 { Bad_Opcode },
8941 { Bad_Opcode },
8942 /* 58 */
8943 { PREFIX_TABLE (PREFIX_VEX_0F3858) },
8944 { PREFIX_TABLE (PREFIX_VEX_0F3859) },
8945 { PREFIX_TABLE (PREFIX_VEX_0F385A) },
8946 { Bad_Opcode },
8947 { Bad_Opcode },
8948 { Bad_Opcode },
8949 { Bad_Opcode },
8950 { Bad_Opcode },
8951 /* 60 */
8952 { Bad_Opcode },
8953 { Bad_Opcode },
8954 { Bad_Opcode },
8955 { Bad_Opcode },
8956 { Bad_Opcode },
8957 { Bad_Opcode },
8958 { Bad_Opcode },
8959 { Bad_Opcode },
8960 /* 68 */
8961 { Bad_Opcode },
8962 { Bad_Opcode },
8963 { Bad_Opcode },
8964 { Bad_Opcode },
8965 { Bad_Opcode },
8966 { Bad_Opcode },
8967 { Bad_Opcode },
8968 { Bad_Opcode },
8969 /* 70 */
8970 { Bad_Opcode },
8971 { Bad_Opcode },
8972 { Bad_Opcode },
8973 { Bad_Opcode },
8974 { Bad_Opcode },
8975 { Bad_Opcode },
8976 { Bad_Opcode },
8977 { Bad_Opcode },
8978 /* 78 */
8979 { PREFIX_TABLE (PREFIX_VEX_0F3878) },
8980 { PREFIX_TABLE (PREFIX_VEX_0F3879) },
8981 { Bad_Opcode },
8982 { Bad_Opcode },
8983 { Bad_Opcode },
8984 { Bad_Opcode },
8985 { Bad_Opcode },
8986 { Bad_Opcode },
8987 /* 80 */
8988 { Bad_Opcode },
8989 { Bad_Opcode },
8990 { Bad_Opcode },
8991 { Bad_Opcode },
8992 { Bad_Opcode },
8993 { Bad_Opcode },
8994 { Bad_Opcode },
8995 { Bad_Opcode },
8996 /* 88 */
8997 { Bad_Opcode },
8998 { Bad_Opcode },
8999 { Bad_Opcode },
9000 { Bad_Opcode },
9001 { PREFIX_TABLE (PREFIX_VEX_0F388C) },
9002 { Bad_Opcode },
9003 { PREFIX_TABLE (PREFIX_VEX_0F388E) },
9004 { Bad_Opcode },
9005 /* 90 */
9006 { PREFIX_TABLE (PREFIX_VEX_0F3890) },
9007 { PREFIX_TABLE (PREFIX_VEX_0F3891) },
9008 { PREFIX_TABLE (PREFIX_VEX_0F3892) },
9009 { PREFIX_TABLE (PREFIX_VEX_0F3893) },
9010 { Bad_Opcode },
9011 { Bad_Opcode },
9012 { PREFIX_TABLE (PREFIX_VEX_0F3896) },
9013 { PREFIX_TABLE (PREFIX_VEX_0F3897) },
9014 /* 98 */
9015 { PREFIX_TABLE (PREFIX_VEX_0F3898) },
9016 { PREFIX_TABLE (PREFIX_VEX_0F3899) },
9017 { PREFIX_TABLE (PREFIX_VEX_0F389A) },
9018 { PREFIX_TABLE (PREFIX_VEX_0F389B) },
9019 { PREFIX_TABLE (PREFIX_VEX_0F389C) },
9020 { PREFIX_TABLE (PREFIX_VEX_0F389D) },
9021 { PREFIX_TABLE (PREFIX_VEX_0F389E) },
9022 { PREFIX_TABLE (PREFIX_VEX_0F389F) },
9023 /* a0 */
9024 { Bad_Opcode },
9025 { Bad_Opcode },
9026 { Bad_Opcode },
9027 { Bad_Opcode },
9028 { Bad_Opcode },
9029 { Bad_Opcode },
9030 { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
9031 { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
9032 /* a8 */
9033 { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
9034 { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
9035 { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
9036 { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
9037 { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
9038 { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
9039 { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
9040 { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
9041 /* b0 */
9042 { Bad_Opcode },
9043 { Bad_Opcode },
9044 { Bad_Opcode },
9045 { Bad_Opcode },
9046 { Bad_Opcode },
9047 { Bad_Opcode },
9048 { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
9049 { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
9050 /* b8 */
9051 { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
9052 { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
9053 { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
9054 { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
9055 { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
9056 { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
9057 { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
9058 { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
9059 /* c0 */
9060 { Bad_Opcode },
9061 { Bad_Opcode },
9062 { Bad_Opcode },
9063 { Bad_Opcode },
9064 { Bad_Opcode },
9065 { Bad_Opcode },
9066 { Bad_Opcode },
9067 { Bad_Opcode },
9068 /* c8 */
9069 { Bad_Opcode },
9070 { Bad_Opcode },
9071 { Bad_Opcode },
9072 { Bad_Opcode },
9073 { Bad_Opcode },
9074 { Bad_Opcode },
9075 { Bad_Opcode },
9076 { Bad_Opcode },
9077 /* d0 */
9078 { Bad_Opcode },
9079 { Bad_Opcode },
9080 { Bad_Opcode },
9081 { Bad_Opcode },
9082 { Bad_Opcode },
9083 { Bad_Opcode },
9084 { Bad_Opcode },
9085 { Bad_Opcode },
9086 /* d8 */
9087 { Bad_Opcode },
9088 { Bad_Opcode },
9089 { Bad_Opcode },
9090 { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
9091 { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
9092 { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
9093 { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
9094 { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
9095 /* e0 */
9096 { Bad_Opcode },
9097 { Bad_Opcode },
9098 { Bad_Opcode },
9099 { Bad_Opcode },
9100 { Bad_Opcode },
9101 { Bad_Opcode },
9102 { Bad_Opcode },
9103 { Bad_Opcode },
9104 /* e8 */
9105 { Bad_Opcode },
9106 { Bad_Opcode },
9107 { Bad_Opcode },
9108 { Bad_Opcode },
9109 { Bad_Opcode },
9110 { Bad_Opcode },
9111 { Bad_Opcode },
9112 { Bad_Opcode },
9113 /* f0 */
9114 { Bad_Opcode },
9115 { Bad_Opcode },
9116 { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
9117 { REG_TABLE (REG_VEX_0F38F3) },
9118 { Bad_Opcode },
9119 { PREFIX_TABLE (PREFIX_VEX_0F38F5) },
9120 { PREFIX_TABLE (PREFIX_VEX_0F38F6) },
9121 { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
9122 /* f8 */
9123 { Bad_Opcode },
9124 { Bad_Opcode },
9125 { Bad_Opcode },
9126 { Bad_Opcode },
9127 { Bad_Opcode },
9128 { Bad_Opcode },
9129 { Bad_Opcode },
9130 { Bad_Opcode },
9131 },
9132 /* VEX_0F3A */
9133 {
9134 /* 00 */
9135 { PREFIX_TABLE (PREFIX_VEX_0F3A00) },
9136 { PREFIX_TABLE (PREFIX_VEX_0F3A01) },
9137 { PREFIX_TABLE (PREFIX_VEX_0F3A02) },
9138 { Bad_Opcode },
9139 { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
9140 { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
9141 { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
9142 { Bad_Opcode },
9143 /* 08 */
9144 { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
9145 { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
9146 { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
9147 { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
9148 { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
9149 { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
9150 { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
9151 { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
9152 /* 10 */
9153 { Bad_Opcode },
9154 { Bad_Opcode },
9155 { Bad_Opcode },
9156 { Bad_Opcode },
9157 { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
9158 { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
9159 { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
9160 { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
9161 /* 18 */
9162 { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
9163 { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
9164 { Bad_Opcode },
9165 { Bad_Opcode },
9166 { Bad_Opcode },
9167 { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
9168 { Bad_Opcode },
9169 { Bad_Opcode },
9170 /* 20 */
9171 { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
9172 { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
9173 { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
9174 { Bad_Opcode },
9175 { Bad_Opcode },
9176 { Bad_Opcode },
9177 { Bad_Opcode },
9178 { Bad_Opcode },
9179 /* 28 */
9180 { Bad_Opcode },
9181 { Bad_Opcode },
9182 { Bad_Opcode },
9183 { Bad_Opcode },
9184 { Bad_Opcode },
9185 { Bad_Opcode },
9186 { Bad_Opcode },
9187 { Bad_Opcode },
9188 /* 30 */
9189 { PREFIX_TABLE (PREFIX_VEX_0F3A30) },
9190 { PREFIX_TABLE (PREFIX_VEX_0F3A31) },
9191 { PREFIX_TABLE (PREFIX_VEX_0F3A32) },
9192 { PREFIX_TABLE (PREFIX_VEX_0F3A33) },
9193 { Bad_Opcode },
9194 { Bad_Opcode },
9195 { Bad_Opcode },
9196 { Bad_Opcode },
9197 /* 38 */
9198 { PREFIX_TABLE (PREFIX_VEX_0F3A38) },
9199 { PREFIX_TABLE (PREFIX_VEX_0F3A39) },
9200 { Bad_Opcode },
9201 { Bad_Opcode },
9202 { Bad_Opcode },
9203 { Bad_Opcode },
9204 { Bad_Opcode },
9205 { Bad_Opcode },
9206 /* 40 */
9207 { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
9208 { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
9209 { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
9210 { Bad_Opcode },
9211 { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
9212 { Bad_Opcode },
9213 { PREFIX_TABLE (PREFIX_VEX_0F3A46) },
9214 { Bad_Opcode },
9215 /* 48 */
9216 { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
9217 { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
9218 { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
9219 { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
9220 { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
9221 { Bad_Opcode },
9222 { Bad_Opcode },
9223 { Bad_Opcode },
9224 /* 50 */
9225 { Bad_Opcode },
9226 { Bad_Opcode },
9227 { Bad_Opcode },
9228 { Bad_Opcode },
9229 { Bad_Opcode },
9230 { Bad_Opcode },
9231 { Bad_Opcode },
9232 { Bad_Opcode },
9233 /* 58 */
9234 { Bad_Opcode },
9235 { Bad_Opcode },
9236 { Bad_Opcode },
9237 { Bad_Opcode },
9238 { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
9239 { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
9240 { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
9241 { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
9242 /* 60 */
9243 { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
9244 { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
9245 { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
9246 { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
9247 { Bad_Opcode },
9248 { Bad_Opcode },
9249 { Bad_Opcode },
9250 { Bad_Opcode },
9251 /* 68 */
9252 { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
9253 { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
9254 { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
9255 { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
9256 { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
9257 { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
9258 { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
9259 { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
9260 /* 70 */
9261 { Bad_Opcode },
9262 { Bad_Opcode },
9263 { Bad_Opcode },
9264 { Bad_Opcode },
9265 { Bad_Opcode },
9266 { Bad_Opcode },
9267 { Bad_Opcode },
9268 { Bad_Opcode },
9269 /* 78 */
9270 { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
9271 { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
9272 { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
9273 { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
9274 { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
9275 { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
9276 { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
9277 { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
9278 /* 80 */
9279 { Bad_Opcode },
9280 { Bad_Opcode },
9281 { Bad_Opcode },
9282 { Bad_Opcode },
9283 { Bad_Opcode },
9284 { Bad_Opcode },
9285 { Bad_Opcode },
9286 { Bad_Opcode },
9287 /* 88 */
9288 { Bad_Opcode },
9289 { Bad_Opcode },
9290 { Bad_Opcode },
9291 { Bad_Opcode },
9292 { Bad_Opcode },
9293 { Bad_Opcode },
9294 { Bad_Opcode },
9295 { Bad_Opcode },
9296 /* 90 */
9297 { Bad_Opcode },
9298 { Bad_Opcode },
9299 { Bad_Opcode },
9300 { Bad_Opcode },
9301 { Bad_Opcode },
9302 { Bad_Opcode },
9303 { Bad_Opcode },
9304 { Bad_Opcode },
9305 /* 98 */
9306 { Bad_Opcode },
9307 { Bad_Opcode },
9308 { Bad_Opcode },
9309 { Bad_Opcode },
9310 { Bad_Opcode },
9311 { Bad_Opcode },
9312 { Bad_Opcode },
9313 { Bad_Opcode },
9314 /* a0 */
9315 { Bad_Opcode },
9316 { Bad_Opcode },
9317 { Bad_Opcode },
9318 { Bad_Opcode },
9319 { Bad_Opcode },
9320 { Bad_Opcode },
9321 { Bad_Opcode },
9322 { Bad_Opcode },
9323 /* a8 */
9324 { Bad_Opcode },
9325 { Bad_Opcode },
9326 { Bad_Opcode },
9327 { Bad_Opcode },
9328 { Bad_Opcode },
9329 { Bad_Opcode },
9330 { Bad_Opcode },
9331 { Bad_Opcode },
9332 /* b0 */
9333 { Bad_Opcode },
9334 { Bad_Opcode },
9335 { Bad_Opcode },
9336 { Bad_Opcode },
9337 { Bad_Opcode },
9338 { Bad_Opcode },
9339 { Bad_Opcode },
9340 { Bad_Opcode },
9341 /* b8 */
9342 { Bad_Opcode },
9343 { Bad_Opcode },
9344 { Bad_Opcode },
9345 { Bad_Opcode },
9346 { Bad_Opcode },
9347 { Bad_Opcode },
9348 { Bad_Opcode },
9349 { Bad_Opcode },
9350 /* c0 */
9351 { Bad_Opcode },
9352 { Bad_Opcode },
9353 { Bad_Opcode },
9354 { Bad_Opcode },
9355 { Bad_Opcode },
9356 { Bad_Opcode },
9357 { Bad_Opcode },
9358 { Bad_Opcode },
9359 /* c8 */
9360 { Bad_Opcode },
9361 { Bad_Opcode },
9362 { Bad_Opcode },
9363 { Bad_Opcode },
9364 { Bad_Opcode },
9365 { Bad_Opcode },
9366 { Bad_Opcode },
9367 { Bad_Opcode },
9368 /* d0 */
9369 { Bad_Opcode },
9370 { Bad_Opcode },
9371 { Bad_Opcode },
9372 { Bad_Opcode },
9373 { Bad_Opcode },
9374 { Bad_Opcode },
9375 { Bad_Opcode },
9376 { Bad_Opcode },
9377 /* d8 */
9378 { Bad_Opcode },
9379 { Bad_Opcode },
9380 { Bad_Opcode },
9381 { Bad_Opcode },
9382 { Bad_Opcode },
9383 { Bad_Opcode },
9384 { Bad_Opcode },
9385 { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
9386 /* e0 */
9387 { Bad_Opcode },
9388 { Bad_Opcode },
9389 { Bad_Opcode },
9390 { Bad_Opcode },
9391 { Bad_Opcode },
9392 { Bad_Opcode },
9393 { Bad_Opcode },
9394 { Bad_Opcode },
9395 /* e8 */
9396 { Bad_Opcode },
9397 { Bad_Opcode },
9398 { Bad_Opcode },
9399 { Bad_Opcode },
9400 { Bad_Opcode },
9401 { Bad_Opcode },
9402 { Bad_Opcode },
9403 { Bad_Opcode },
9404 /* f0 */
9405 { PREFIX_TABLE (PREFIX_VEX_0F3AF0) },
9406 { Bad_Opcode },
9407 { Bad_Opcode },
9408 { Bad_Opcode },
9409 { Bad_Opcode },
9410 { Bad_Opcode },
9411 { Bad_Opcode },
9412 { Bad_Opcode },
9413 /* f8 */
9414 { Bad_Opcode },
9415 { Bad_Opcode },
9416 { Bad_Opcode },
9417 { Bad_Opcode },
9418 { Bad_Opcode },
9419 { Bad_Opcode },
9420 { Bad_Opcode },
9421 { Bad_Opcode },
9422 },
9423 };
9424
9425 #define NEED_OPCODE_TABLE
9426 #include "i386-dis-evex.h"
9427 #undef NEED_OPCODE_TABLE
9428 static const struct dis386 vex_len_table[][2] = {
9429 /* VEX_LEN_0F10_P_1 */
9430 {
9431 { VEX_W_TABLE (VEX_W_0F10_P_1) },
9432 { VEX_W_TABLE (VEX_W_0F10_P_1) },
9433 },
9434
9435 /* VEX_LEN_0F10_P_3 */
9436 {
9437 { VEX_W_TABLE (VEX_W_0F10_P_3) },
9438 { VEX_W_TABLE (VEX_W_0F10_P_3) },
9439 },
9440
9441 /* VEX_LEN_0F11_P_1 */
9442 {
9443 { VEX_W_TABLE (VEX_W_0F11_P_1) },
9444 { VEX_W_TABLE (VEX_W_0F11_P_1) },
9445 },
9446
9447 /* VEX_LEN_0F11_P_3 */
9448 {
9449 { VEX_W_TABLE (VEX_W_0F11_P_3) },
9450 { VEX_W_TABLE (VEX_W_0F11_P_3) },
9451 },
9452
9453 /* VEX_LEN_0F12_P_0_M_0 */
9454 {
9455 { VEX_W_TABLE (VEX_W_0F12_P_0_M_0) },
9456 },
9457
9458 /* VEX_LEN_0F12_P_0_M_1 */
9459 {
9460 { VEX_W_TABLE (VEX_W_0F12_P_0_M_1) },
9461 },
9462
9463 /* VEX_LEN_0F12_P_2 */
9464 {
9465 { VEX_W_TABLE (VEX_W_0F12_P_2) },
9466 },
9467
9468 /* VEX_LEN_0F13_M_0 */
9469 {
9470 { VEX_W_TABLE (VEX_W_0F13_M_0) },
9471 },
9472
9473 /* VEX_LEN_0F16_P_0_M_0 */
9474 {
9475 { VEX_W_TABLE (VEX_W_0F16_P_0_M_0) },
9476 },
9477
9478 /* VEX_LEN_0F16_P_0_M_1 */
9479 {
9480 { VEX_W_TABLE (VEX_W_0F16_P_0_M_1) },
9481 },
9482
9483 /* VEX_LEN_0F16_P_2 */
9484 {
9485 { VEX_W_TABLE (VEX_W_0F16_P_2) },
9486 },
9487
9488 /* VEX_LEN_0F17_M_0 */
9489 {
9490 { VEX_W_TABLE (VEX_W_0F17_M_0) },
9491 },
9492
9493 /* VEX_LEN_0F2A_P_1 */
9494 {
9495 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev } },
9496 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev } },
9497 },
9498
9499 /* VEX_LEN_0F2A_P_3 */
9500 {
9501 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev } },
9502 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev } },
9503 },
9504
9505 /* VEX_LEN_0F2C_P_1 */
9506 {
9507 { "vcvttss2siY", { Gv, EXdScalar } },
9508 { "vcvttss2siY", { Gv, EXdScalar } },
9509 },
9510
9511 /* VEX_LEN_0F2C_P_3 */
9512 {
9513 { "vcvttsd2siY", { Gv, EXqScalar } },
9514 { "vcvttsd2siY", { Gv, EXqScalar } },
9515 },
9516
9517 /* VEX_LEN_0F2D_P_1 */
9518 {
9519 { "vcvtss2siY", { Gv, EXdScalar } },
9520 { "vcvtss2siY", { Gv, EXdScalar } },
9521 },
9522
9523 /* VEX_LEN_0F2D_P_3 */
9524 {
9525 { "vcvtsd2siY", { Gv, EXqScalar } },
9526 { "vcvtsd2siY", { Gv, EXqScalar } },
9527 },
9528
9529 /* VEX_LEN_0F2E_P_0 */
9530 {
9531 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
9532 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
9533 },
9534
9535 /* VEX_LEN_0F2E_P_2 */
9536 {
9537 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
9538 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
9539 },
9540
9541 /* VEX_LEN_0F2F_P_0 */
9542 {
9543 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
9544 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
9545 },
9546
9547 /* VEX_LEN_0F2F_P_2 */
9548 {
9549 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
9550 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
9551 },
9552
9553 /* VEX_LEN_0F41_P_0 */
9554 {
9555 { Bad_Opcode },
9556 { VEX_W_TABLE (VEX_W_0F41_P_0_LEN_1) },
9557 },
9558 /* VEX_LEN_0F41_P_2 */
9559 {
9560 { Bad_Opcode },
9561 { VEX_W_TABLE (VEX_W_0F41_P_2_LEN_1) },
9562 },
9563 /* VEX_LEN_0F42_P_0 */
9564 {
9565 { Bad_Opcode },
9566 { VEX_W_TABLE (VEX_W_0F42_P_0_LEN_1) },
9567 },
9568 /* VEX_LEN_0F42_P_2 */
9569 {
9570 { Bad_Opcode },
9571 { VEX_W_TABLE (VEX_W_0F42_P_2_LEN_1) },
9572 },
9573 /* VEX_LEN_0F44_P_0 */
9574 {
9575 { VEX_W_TABLE (VEX_W_0F44_P_0_LEN_0) },
9576 },
9577 /* VEX_LEN_0F44_P_2 */
9578 {
9579 { VEX_W_TABLE (VEX_W_0F44_P_2_LEN_0) },
9580 },
9581 /* VEX_LEN_0F45_P_0 */
9582 {
9583 { Bad_Opcode },
9584 { VEX_W_TABLE (VEX_W_0F45_P_0_LEN_1) },
9585 },
9586 /* VEX_LEN_0F45_P_2 */
9587 {
9588 { Bad_Opcode },
9589 { VEX_W_TABLE (VEX_W_0F45_P_2_LEN_1) },
9590 },
9591 /* VEX_LEN_0F46_P_0 */
9592 {
9593 { Bad_Opcode },
9594 { VEX_W_TABLE (VEX_W_0F46_P_0_LEN_1) },
9595 },
9596 /* VEX_LEN_0F46_P_2 */
9597 {
9598 { Bad_Opcode },
9599 { VEX_W_TABLE (VEX_W_0F46_P_2_LEN_1) },
9600 },
9601 /* VEX_LEN_0F47_P_0 */
9602 {
9603 { Bad_Opcode },
9604 { VEX_W_TABLE (VEX_W_0F47_P_0_LEN_1) },
9605 },
9606 /* VEX_LEN_0F47_P_2 */
9607 {
9608 { Bad_Opcode },
9609 { VEX_W_TABLE (VEX_W_0F47_P_2_LEN_1) },
9610 },
9611 /* VEX_LEN_0F4A_P_0 */
9612 {
9613 { Bad_Opcode },
9614 { VEX_W_TABLE (VEX_W_0F4A_P_0_LEN_1) },
9615 },
9616 /* VEX_LEN_0F4A_P_2 */
9617 {
9618 { Bad_Opcode },
9619 { VEX_W_TABLE (VEX_W_0F4A_P_2_LEN_1) },
9620 },
9621 /* VEX_LEN_0F4B_P_0 */
9622 {
9623 { Bad_Opcode },
9624 { VEX_W_TABLE (VEX_W_0F4B_P_0_LEN_1) },
9625 },
9626 /* VEX_LEN_0F4B_P_2 */
9627 {
9628 { Bad_Opcode },
9629 { VEX_W_TABLE (VEX_W_0F4B_P_2_LEN_1) },
9630 },
9631
9632 /* VEX_LEN_0F51_P_1 */
9633 {
9634 { VEX_W_TABLE (VEX_W_0F51_P_1) },
9635 { VEX_W_TABLE (VEX_W_0F51_P_1) },
9636 },
9637
9638 /* VEX_LEN_0F51_P_3 */
9639 {
9640 { VEX_W_TABLE (VEX_W_0F51_P_3) },
9641 { VEX_W_TABLE (VEX_W_0F51_P_3) },
9642 },
9643
9644 /* VEX_LEN_0F52_P_1 */
9645 {
9646 { VEX_W_TABLE (VEX_W_0F52_P_1) },
9647 { VEX_W_TABLE (VEX_W_0F52_P_1) },
9648 },
9649
9650 /* VEX_LEN_0F53_P_1 */
9651 {
9652 { VEX_W_TABLE (VEX_W_0F53_P_1) },
9653 { VEX_W_TABLE (VEX_W_0F53_P_1) },
9654 },
9655
9656 /* VEX_LEN_0F58_P_1 */
9657 {
9658 { VEX_W_TABLE (VEX_W_0F58_P_1) },
9659 { VEX_W_TABLE (VEX_W_0F58_P_1) },
9660 },
9661
9662 /* VEX_LEN_0F58_P_3 */
9663 {
9664 { VEX_W_TABLE (VEX_W_0F58_P_3) },
9665 { VEX_W_TABLE (VEX_W_0F58_P_3) },
9666 },
9667
9668 /* VEX_LEN_0F59_P_1 */
9669 {
9670 { VEX_W_TABLE (VEX_W_0F59_P_1) },
9671 { VEX_W_TABLE (VEX_W_0F59_P_1) },
9672 },
9673
9674 /* VEX_LEN_0F59_P_3 */
9675 {
9676 { VEX_W_TABLE (VEX_W_0F59_P_3) },
9677 { VEX_W_TABLE (VEX_W_0F59_P_3) },
9678 },
9679
9680 /* VEX_LEN_0F5A_P_1 */
9681 {
9682 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
9683 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
9684 },
9685
9686 /* VEX_LEN_0F5A_P_3 */
9687 {
9688 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
9689 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
9690 },
9691
9692 /* VEX_LEN_0F5C_P_1 */
9693 {
9694 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
9695 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
9696 },
9697
9698 /* VEX_LEN_0F5C_P_3 */
9699 {
9700 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
9701 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
9702 },
9703
9704 /* VEX_LEN_0F5D_P_1 */
9705 {
9706 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
9707 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
9708 },
9709
9710 /* VEX_LEN_0F5D_P_3 */
9711 {
9712 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
9713 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
9714 },
9715
9716 /* VEX_LEN_0F5E_P_1 */
9717 {
9718 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
9719 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
9720 },
9721
9722 /* VEX_LEN_0F5E_P_3 */
9723 {
9724 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
9725 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
9726 },
9727
9728 /* VEX_LEN_0F5F_P_1 */
9729 {
9730 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
9731 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
9732 },
9733
9734 /* VEX_LEN_0F5F_P_3 */
9735 {
9736 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
9737 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
9738 },
9739
9740 /* VEX_LEN_0F6E_P_2 */
9741 {
9742 { "vmovK", { XMScalar, Edq } },
9743 { "vmovK", { XMScalar, Edq } },
9744 },
9745
9746 /* VEX_LEN_0F7E_P_1 */
9747 {
9748 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
9749 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
9750 },
9751
9752 /* VEX_LEN_0F7E_P_2 */
9753 {
9754 { "vmovK", { Edq, XMScalar } },
9755 { "vmovK", { Edq, XMScalar } },
9756 },
9757
9758 /* VEX_LEN_0F90_P_0 */
9759 {
9760 { VEX_W_TABLE (VEX_W_0F90_P_0_LEN_0) },
9761 },
9762
9763 /* VEX_LEN_0F90_P_2 */
9764 {
9765 { VEX_W_TABLE (VEX_W_0F90_P_2_LEN_0) },
9766 },
9767
9768 /* VEX_LEN_0F91_P_0 */
9769 {
9770 { VEX_W_TABLE (VEX_W_0F91_P_0_LEN_0) },
9771 },
9772
9773 /* VEX_LEN_0F91_P_2 */
9774 {
9775 { VEX_W_TABLE (VEX_W_0F91_P_2_LEN_0) },
9776 },
9777
9778 /* VEX_LEN_0F92_P_0 */
9779 {
9780 { VEX_W_TABLE (VEX_W_0F92_P_0_LEN_0) },
9781 },
9782
9783 /* VEX_LEN_0F92_P_3 */
9784 {
9785 { VEX_W_TABLE (VEX_W_0F92_P_3_LEN_0) },
9786 },
9787
9788 /* VEX_LEN_0F93_P_0 */
9789 {
9790 { VEX_W_TABLE (VEX_W_0F93_P_0_LEN_0) },
9791 },
9792
9793 /* VEX_LEN_0F93_P_3 */
9794 {
9795 { VEX_W_TABLE (VEX_W_0F93_P_3_LEN_0) },
9796 },
9797
9798 /* VEX_LEN_0F98_P_0 */
9799 {
9800 { VEX_W_TABLE (VEX_W_0F98_P_0_LEN_0) },
9801 },
9802
9803 /* VEX_LEN_0F98_P_2 */
9804 {
9805 { VEX_W_TABLE (VEX_W_0F98_P_2_LEN_0) },
9806 },
9807
9808 /* VEX_LEN_0F99_P_0 */
9809 {
9810 { VEX_W_TABLE (VEX_W_0F99_P_0_LEN_0) },
9811 },
9812
9813 /* VEX_LEN_0F99_P_2 */
9814 {
9815 { VEX_W_TABLE (VEX_W_0F99_P_2_LEN_0) },
9816 },
9817
9818 /* VEX_LEN_0FAE_R_2_M_0 */
9819 {
9820 { VEX_W_TABLE (VEX_W_0FAE_R_2_M_0) },
9821 },
9822
9823 /* VEX_LEN_0FAE_R_3_M_0 */
9824 {
9825 { VEX_W_TABLE (VEX_W_0FAE_R_3_M_0) },
9826 },
9827
9828 /* VEX_LEN_0FC2_P_1 */
9829 {
9830 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
9831 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
9832 },
9833
9834 /* VEX_LEN_0FC2_P_3 */
9835 {
9836 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
9837 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
9838 },
9839
9840 /* VEX_LEN_0FC4_P_2 */
9841 {
9842 { VEX_W_TABLE (VEX_W_0FC4_P_2) },
9843 },
9844
9845 /* VEX_LEN_0FC5_P_2 */
9846 {
9847 { VEX_W_TABLE (VEX_W_0FC5_P_2) },
9848 },
9849
9850 /* VEX_LEN_0FD6_P_2 */
9851 {
9852 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
9853 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
9854 },
9855
9856 /* VEX_LEN_0FF7_P_2 */
9857 {
9858 { VEX_W_TABLE (VEX_W_0FF7_P_2) },
9859 },
9860
9861 /* VEX_LEN_0F3816_P_2 */
9862 {
9863 { Bad_Opcode },
9864 { VEX_W_TABLE (VEX_W_0F3816_P_2) },
9865 },
9866
9867 /* VEX_LEN_0F3819_P_2 */
9868 {
9869 { Bad_Opcode },
9870 { VEX_W_TABLE (VEX_W_0F3819_P_2) },
9871 },
9872
9873 /* VEX_LEN_0F381A_P_2_M_0 */
9874 {
9875 { Bad_Opcode },
9876 { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
9877 },
9878
9879 /* VEX_LEN_0F3836_P_2 */
9880 {
9881 { Bad_Opcode },
9882 { VEX_W_TABLE (VEX_W_0F3836_P_2) },
9883 },
9884
9885 /* VEX_LEN_0F3841_P_2 */
9886 {
9887 { VEX_W_TABLE (VEX_W_0F3841_P_2) },
9888 },
9889
9890 /* VEX_LEN_0F385A_P_2_M_0 */
9891 {
9892 { Bad_Opcode },
9893 { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) },
9894 },
9895
9896 /* VEX_LEN_0F38DB_P_2 */
9897 {
9898 { VEX_W_TABLE (VEX_W_0F38DB_P_2) },
9899 },
9900
9901 /* VEX_LEN_0F38DC_P_2 */
9902 {
9903 { VEX_W_TABLE (VEX_W_0F38DC_P_2) },
9904 },
9905
9906 /* VEX_LEN_0F38DD_P_2 */
9907 {
9908 { VEX_W_TABLE (VEX_W_0F38DD_P_2) },
9909 },
9910
9911 /* VEX_LEN_0F38DE_P_2 */
9912 {
9913 { VEX_W_TABLE (VEX_W_0F38DE_P_2) },
9914 },
9915
9916 /* VEX_LEN_0F38DF_P_2 */
9917 {
9918 { VEX_W_TABLE (VEX_W_0F38DF_P_2) },
9919 },
9920
9921 /* VEX_LEN_0F38F2_P_0 */
9922 {
9923 { "andnS", { Gdq, VexGdq, Edq } },
9924 },
9925
9926 /* VEX_LEN_0F38F3_R_1_P_0 */
9927 {
9928 { "blsrS", { VexGdq, Edq } },
9929 },
9930
9931 /* VEX_LEN_0F38F3_R_2_P_0 */
9932 {
9933 { "blsmskS", { VexGdq, Edq } },
9934 },
9935
9936 /* VEX_LEN_0F38F3_R_3_P_0 */
9937 {
9938 { "blsiS", { VexGdq, Edq } },
9939 },
9940
9941 /* VEX_LEN_0F38F5_P_0 */
9942 {
9943 { "bzhiS", { Gdq, Edq, VexGdq } },
9944 },
9945
9946 /* VEX_LEN_0F38F5_P_1 */
9947 {
9948 { "pextS", { Gdq, VexGdq, Edq } },
9949 },
9950
9951 /* VEX_LEN_0F38F5_P_3 */
9952 {
9953 { "pdepS", { Gdq, VexGdq, Edq } },
9954 },
9955
9956 /* VEX_LEN_0F38F6_P_3 */
9957 {
9958 { "mulxS", { Gdq, VexGdq, Edq } },
9959 },
9960
9961 /* VEX_LEN_0F38F7_P_0 */
9962 {
9963 { "bextrS", { Gdq, Edq, VexGdq } },
9964 },
9965
9966 /* VEX_LEN_0F38F7_P_1 */
9967 {
9968 { "sarxS", { Gdq, Edq, VexGdq } },
9969 },
9970
9971 /* VEX_LEN_0F38F7_P_2 */
9972 {
9973 { "shlxS", { Gdq, Edq, VexGdq } },
9974 },
9975
9976 /* VEX_LEN_0F38F7_P_3 */
9977 {
9978 { "shrxS", { Gdq, Edq, VexGdq } },
9979 },
9980
9981 /* VEX_LEN_0F3A00_P_2 */
9982 {
9983 { Bad_Opcode },
9984 { VEX_W_TABLE (VEX_W_0F3A00_P_2) },
9985 },
9986
9987 /* VEX_LEN_0F3A01_P_2 */
9988 {
9989 { Bad_Opcode },
9990 { VEX_W_TABLE (VEX_W_0F3A01_P_2) },
9991 },
9992
9993 /* VEX_LEN_0F3A06_P_2 */
9994 {
9995 { Bad_Opcode },
9996 { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
9997 },
9998
9999 /* VEX_LEN_0F3A0A_P_2 */
10000 {
10001 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
10002 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
10003 },
10004
10005 /* VEX_LEN_0F3A0B_P_2 */
10006 {
10007 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
10008 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
10009 },
10010
10011 /* VEX_LEN_0F3A14_P_2 */
10012 {
10013 { VEX_W_TABLE (VEX_W_0F3A14_P_2) },
10014 },
10015
10016 /* VEX_LEN_0F3A15_P_2 */
10017 {
10018 { VEX_W_TABLE (VEX_W_0F3A15_P_2) },
10019 },
10020
10021 /* VEX_LEN_0F3A16_P_2 */
10022 {
10023 { "vpextrK", { Edq, XM, Ib } },
10024 },
10025
10026 /* VEX_LEN_0F3A17_P_2 */
10027 {
10028 { "vextractps", { Edqd, XM, Ib } },
10029 },
10030
10031 /* VEX_LEN_0F3A18_P_2 */
10032 {
10033 { Bad_Opcode },
10034 { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
10035 },
10036
10037 /* VEX_LEN_0F3A19_P_2 */
10038 {
10039 { Bad_Opcode },
10040 { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
10041 },
10042
10043 /* VEX_LEN_0F3A20_P_2 */
10044 {
10045 { VEX_W_TABLE (VEX_W_0F3A20_P_2) },
10046 },
10047
10048 /* VEX_LEN_0F3A21_P_2 */
10049 {
10050 { VEX_W_TABLE (VEX_W_0F3A21_P_2) },
10051 },
10052
10053 /* VEX_LEN_0F3A22_P_2 */
10054 {
10055 { "vpinsrK", { XM, Vex128, Edq, Ib } },
10056 },
10057
10058 /* VEX_LEN_0F3A30_P_2 */
10059 {
10060 { VEX_W_TABLE (VEX_W_0F3A30_P_2_LEN_0) },
10061 },
10062
10063 /* VEX_LEN_0F3A31_P_2 */
10064 {
10065 { VEX_W_TABLE (VEX_W_0F3A31_P_2_LEN_0) },
10066 },
10067
10068 /* VEX_LEN_0F3A32_P_2 */
10069 {
10070 { VEX_W_TABLE (VEX_W_0F3A32_P_2_LEN_0) },
10071 },
10072
10073 /* VEX_LEN_0F3A33_P_2 */
10074 {
10075 { VEX_W_TABLE (VEX_W_0F3A33_P_2_LEN_0) },
10076 },
10077
10078 /* VEX_LEN_0F3A38_P_2 */
10079 {
10080 { Bad_Opcode },
10081 { VEX_W_TABLE (VEX_W_0F3A38_P_2) },
10082 },
10083
10084 /* VEX_LEN_0F3A39_P_2 */
10085 {
10086 { Bad_Opcode },
10087 { VEX_W_TABLE (VEX_W_0F3A39_P_2) },
10088 },
10089
10090 /* VEX_LEN_0F3A41_P_2 */
10091 {
10092 { VEX_W_TABLE (VEX_W_0F3A41_P_2) },
10093 },
10094
10095 /* VEX_LEN_0F3A44_P_2 */
10096 {
10097 { VEX_W_TABLE (VEX_W_0F3A44_P_2) },
10098 },
10099
10100 /* VEX_LEN_0F3A46_P_2 */
10101 {
10102 { Bad_Opcode },
10103 { VEX_W_TABLE (VEX_W_0F3A46_P_2) },
10104 },
10105
10106 /* VEX_LEN_0F3A60_P_2 */
10107 {
10108 { VEX_W_TABLE (VEX_W_0F3A60_P_2) },
10109 },
10110
10111 /* VEX_LEN_0F3A61_P_2 */
10112 {
10113 { VEX_W_TABLE (VEX_W_0F3A61_P_2) },
10114 },
10115
10116 /* VEX_LEN_0F3A62_P_2 */
10117 {
10118 { VEX_W_TABLE (VEX_W_0F3A62_P_2) },
10119 },
10120
10121 /* VEX_LEN_0F3A63_P_2 */
10122 {
10123 { VEX_W_TABLE (VEX_W_0F3A63_P_2) },
10124 },
10125
10126 /* VEX_LEN_0F3A6A_P_2 */
10127 {
10128 { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
10129 },
10130
10131 /* VEX_LEN_0F3A6B_P_2 */
10132 {
10133 { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
10134 },
10135
10136 /* VEX_LEN_0F3A6E_P_2 */
10137 {
10138 { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
10139 },
10140
10141 /* VEX_LEN_0F3A6F_P_2 */
10142 {
10143 { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
10144 },
10145
10146 /* VEX_LEN_0F3A7A_P_2 */
10147 {
10148 { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
10149 },
10150
10151 /* VEX_LEN_0F3A7B_P_2 */
10152 {
10153 { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
10154 },
10155
10156 /* VEX_LEN_0F3A7E_P_2 */
10157 {
10158 { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
10159 },
10160
10161 /* VEX_LEN_0F3A7F_P_2 */
10162 {
10163 { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
10164 },
10165
10166 /* VEX_LEN_0F3ADF_P_2 */
10167 {
10168 { VEX_W_TABLE (VEX_W_0F3ADF_P_2) },
10169 },
10170
10171 /* VEX_LEN_0F3AF0_P_3 */
10172 {
10173 { "rorxS", { Gdq, Edq, Ib } },
10174 },
10175
10176 /* VEX_LEN_0FXOP_08_CC */
10177 {
10178 { "vpcomb", { XM, Vex128, EXx, Ib } },
10179 },
10180
10181 /* VEX_LEN_0FXOP_08_CD */
10182 {
10183 { "vpcomw", { XM, Vex128, EXx, Ib } },
10184 },
10185
10186 /* VEX_LEN_0FXOP_08_CE */
10187 {
10188 { "vpcomd", { XM, Vex128, EXx, Ib } },
10189 },
10190
10191 /* VEX_LEN_0FXOP_08_CF */
10192 {
10193 { "vpcomq", { XM, Vex128, EXx, Ib } },
10194 },
10195
10196 /* VEX_LEN_0FXOP_08_EC */
10197 {
10198 { "vpcomub", { XM, Vex128, EXx, Ib } },
10199 },
10200
10201 /* VEX_LEN_0FXOP_08_ED */
10202 {
10203 { "vpcomuw", { XM, Vex128, EXx, Ib } },
10204 },
10205
10206 /* VEX_LEN_0FXOP_08_EE */
10207 {
10208 { "vpcomud", { XM, Vex128, EXx, Ib } },
10209 },
10210
10211 /* VEX_LEN_0FXOP_08_EF */
10212 {
10213 { "vpcomuq", { XM, Vex128, EXx, Ib } },
10214 },
10215
10216 /* VEX_LEN_0FXOP_09_80 */
10217 {
10218 { "vfrczps", { XM, EXxmm } },
10219 { "vfrczps", { XM, EXymmq } },
10220 },
10221
10222 /* VEX_LEN_0FXOP_09_81 */
10223 {
10224 { "vfrczpd", { XM, EXxmm } },
10225 { "vfrczpd", { XM, EXymmq } },
10226 },
10227 };
10228
10229 static const struct dis386 vex_w_table[][2] = {
10230 {
10231 /* VEX_W_0F10_P_0 */
10232 { "vmovups", { XM, EXx } },
10233 },
10234 {
10235 /* VEX_W_0F10_P_1 */
10236 { "vmovss", { XMVexScalar, VexScalar, EXdScalar } },
10237 },
10238 {
10239 /* VEX_W_0F10_P_2 */
10240 { "vmovupd", { XM, EXx } },
10241 },
10242 {
10243 /* VEX_W_0F10_P_3 */
10244 { "vmovsd", { XMVexScalar, VexScalar, EXqScalar } },
10245 },
10246 {
10247 /* VEX_W_0F11_P_0 */
10248 { "vmovups", { EXxS, XM } },
10249 },
10250 {
10251 /* VEX_W_0F11_P_1 */
10252 { "vmovss", { EXdVexScalarS, VexScalar, XMScalar } },
10253 },
10254 {
10255 /* VEX_W_0F11_P_2 */
10256 { "vmovupd", { EXxS, XM } },
10257 },
10258 {
10259 /* VEX_W_0F11_P_3 */
10260 { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar } },
10261 },
10262 {
10263 /* VEX_W_0F12_P_0_M_0 */
10264 { "vmovlps", { XM, Vex128, EXq } },
10265 },
10266 {
10267 /* VEX_W_0F12_P_0_M_1 */
10268 { "vmovhlps", { XM, Vex128, EXq } },
10269 },
10270 {
10271 /* VEX_W_0F12_P_1 */
10272 { "vmovsldup", { XM, EXx } },
10273 },
10274 {
10275 /* VEX_W_0F12_P_2 */
10276 { "vmovlpd", { XM, Vex128, EXq } },
10277 },
10278 {
10279 /* VEX_W_0F12_P_3 */
10280 { "vmovddup", { XM, EXymmq } },
10281 },
10282 {
10283 /* VEX_W_0F13_M_0 */
10284 { "vmovlpX", { EXq, XM } },
10285 },
10286 {
10287 /* VEX_W_0F14 */
10288 { "vunpcklpX", { XM, Vex, EXx } },
10289 },
10290 {
10291 /* VEX_W_0F15 */
10292 { "vunpckhpX", { XM, Vex, EXx } },
10293 },
10294 {
10295 /* VEX_W_0F16_P_0_M_0 */
10296 { "vmovhps", { XM, Vex128, EXq } },
10297 },
10298 {
10299 /* VEX_W_0F16_P_0_M_1 */
10300 { "vmovlhps", { XM, Vex128, EXq } },
10301 },
10302 {
10303 /* VEX_W_0F16_P_1 */
10304 { "vmovshdup", { XM, EXx } },
10305 },
10306 {
10307 /* VEX_W_0F16_P_2 */
10308 { "vmovhpd", { XM, Vex128, EXq } },
10309 },
10310 {
10311 /* VEX_W_0F17_M_0 */
10312 { "vmovhpX", { EXq, XM } },
10313 },
10314 {
10315 /* VEX_W_0F28 */
10316 { "vmovapX", { XM, EXx } },
10317 },
10318 {
10319 /* VEX_W_0F29 */
10320 { "vmovapX", { EXxS, XM } },
10321 },
10322 {
10323 /* VEX_W_0F2B_M_0 */
10324 { "vmovntpX", { Mx, XM } },
10325 },
10326 {
10327 /* VEX_W_0F2E_P_0 */
10328 { "vucomiss", { XMScalar, EXdScalar } },
10329 },
10330 {
10331 /* VEX_W_0F2E_P_2 */
10332 { "vucomisd", { XMScalar, EXqScalar } },
10333 },
10334 {
10335 /* VEX_W_0F2F_P_0 */
10336 { "vcomiss", { XMScalar, EXdScalar } },
10337 },
10338 {
10339 /* VEX_W_0F2F_P_2 */
10340 { "vcomisd", { XMScalar, EXqScalar } },
10341 },
10342 {
10343 /* VEX_W_0F41_P_0_LEN_1 */
10344 { "kandw", { MaskG, MaskVex, MaskR } },
10345 { "kandq", { MaskG, MaskVex, MaskR } },
10346 },
10347 {
10348 /* VEX_W_0F41_P_2_LEN_1 */
10349 { Bad_Opcode },
10350 { "kandd", { MaskG, MaskVex, MaskR } },
10351 },
10352 {
10353 /* VEX_W_0F42_P_0_LEN_1 */
10354 { "kandnw", { MaskG, MaskVex, MaskR } },
10355 { "kandnq", { MaskG, MaskVex, MaskR } },
10356 },
10357 {
10358 /* VEX_W_0F42_P_2_LEN_1 */
10359 { Bad_Opcode },
10360 { "kandnd", { MaskG, MaskVex, MaskR } },
10361 },
10362 {
10363 /* VEX_W_0F44_P_0_LEN_0 */
10364 { "knotw", { MaskG, MaskR } },
10365 { "knotq", { MaskG, MaskR } },
10366 },
10367 {
10368 /* VEX_W_0F44_P_2_LEN_0 */
10369 { Bad_Opcode },
10370 { "knotd", { MaskG, MaskR } },
10371 },
10372 {
10373 /* VEX_W_0F45_P_0_LEN_1 */
10374 { "korw", { MaskG, MaskVex, MaskR } },
10375 { "korq", { MaskG, MaskVex, MaskR } },
10376 },
10377 {
10378 /* VEX_W_0F45_P_2_LEN_1 */
10379 { Bad_Opcode },
10380 { "kord", { MaskG, MaskVex, MaskR } },
10381 },
10382 {
10383 /* VEX_W_0F46_P_0_LEN_1 */
10384 { "kxnorw", { MaskG, MaskVex, MaskR } },
10385 { "kxnorq", { MaskG, MaskVex, MaskR } },
10386 },
10387 {
10388 /* VEX_W_0F46_P_2_LEN_1 */
10389 { Bad_Opcode },
10390 { "kxnord", { MaskG, MaskVex, MaskR } },
10391 },
10392 {
10393 /* VEX_W_0F47_P_0_LEN_1 */
10394 { "kxorw", { MaskG, MaskVex, MaskR } },
10395 { "kxorq", { MaskG, MaskVex, MaskR } },
10396 },
10397 {
10398 /* VEX_W_0F47_P_2_LEN_1 */
10399 { Bad_Opcode },
10400 { "kxord", { MaskG, MaskVex, MaskR } },
10401 },
10402 {
10403 /* VEX_W_0F4A_P_0_LEN_1 */
10404 { "kaddw", { MaskG, MaskVex, MaskR } },
10405 { "kaddq", { MaskG, MaskVex, MaskR } },
10406 },
10407 {
10408 /* VEX_W_0F4A_P_2_LEN_1 */
10409 { Bad_Opcode },
10410 { "kaddd", { MaskG, MaskVex, MaskR } },
10411 },
10412 {
10413 /* VEX_W_0F4B_P_0_LEN_1 */
10414 { "kunpckwd", { MaskG, MaskVex, MaskR } },
10415 { "kunpckdq", { MaskG, MaskVex, MaskR } },
10416 },
10417 {
10418 /* VEX_W_0F4B_P_2_LEN_1 */
10419 { "kunpckbw", { MaskG, MaskVex, MaskR } },
10420 },
10421 {
10422 /* VEX_W_0F50_M_0 */
10423 { "vmovmskpX", { Gdq, XS } },
10424 },
10425 {
10426 /* VEX_W_0F51_P_0 */
10427 { "vsqrtps", { XM, EXx } },
10428 },
10429 {
10430 /* VEX_W_0F51_P_1 */
10431 { "vsqrtss", { XMScalar, VexScalar, EXdScalar } },
10432 },
10433 {
10434 /* VEX_W_0F51_P_2 */
10435 { "vsqrtpd", { XM, EXx } },
10436 },
10437 {
10438 /* VEX_W_0F51_P_3 */
10439 { "vsqrtsd", { XMScalar, VexScalar, EXqScalar } },
10440 },
10441 {
10442 /* VEX_W_0F52_P_0 */
10443 { "vrsqrtps", { XM, EXx } },
10444 },
10445 {
10446 /* VEX_W_0F52_P_1 */
10447 { "vrsqrtss", { XMScalar, VexScalar, EXdScalar } },
10448 },
10449 {
10450 /* VEX_W_0F53_P_0 */
10451 { "vrcpps", { XM, EXx } },
10452 },
10453 {
10454 /* VEX_W_0F53_P_1 */
10455 { "vrcpss", { XMScalar, VexScalar, EXdScalar } },
10456 },
10457 {
10458 /* VEX_W_0F58_P_0 */
10459 { "vaddps", { XM, Vex, EXx } },
10460 },
10461 {
10462 /* VEX_W_0F58_P_1 */
10463 { "vaddss", { XMScalar, VexScalar, EXdScalar } },
10464 },
10465 {
10466 /* VEX_W_0F58_P_2 */
10467 { "vaddpd", { XM, Vex, EXx } },
10468 },
10469 {
10470 /* VEX_W_0F58_P_3 */
10471 { "vaddsd", { XMScalar, VexScalar, EXqScalar } },
10472 },
10473 {
10474 /* VEX_W_0F59_P_0 */
10475 { "vmulps", { XM, Vex, EXx } },
10476 },
10477 {
10478 /* VEX_W_0F59_P_1 */
10479 { "vmulss", { XMScalar, VexScalar, EXdScalar } },
10480 },
10481 {
10482 /* VEX_W_0F59_P_2 */
10483 { "vmulpd", { XM, Vex, EXx } },
10484 },
10485 {
10486 /* VEX_W_0F59_P_3 */
10487 { "vmulsd", { XMScalar, VexScalar, EXqScalar } },
10488 },
10489 {
10490 /* VEX_W_0F5A_P_0 */
10491 { "vcvtps2pd", { XM, EXxmmq } },
10492 },
10493 {
10494 /* VEX_W_0F5A_P_1 */
10495 { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar } },
10496 },
10497 {
10498 /* VEX_W_0F5A_P_3 */
10499 { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar } },
10500 },
10501 {
10502 /* VEX_W_0F5B_P_0 */
10503 { "vcvtdq2ps", { XM, EXx } },
10504 },
10505 {
10506 /* VEX_W_0F5B_P_1 */
10507 { "vcvttps2dq", { XM, EXx } },
10508 },
10509 {
10510 /* VEX_W_0F5B_P_2 */
10511 { "vcvtps2dq", { XM, EXx } },
10512 },
10513 {
10514 /* VEX_W_0F5C_P_0 */
10515 { "vsubps", { XM, Vex, EXx } },
10516 },
10517 {
10518 /* VEX_W_0F5C_P_1 */
10519 { "vsubss", { XMScalar, VexScalar, EXdScalar } },
10520 },
10521 {
10522 /* VEX_W_0F5C_P_2 */
10523 { "vsubpd", { XM, Vex, EXx } },
10524 },
10525 {
10526 /* VEX_W_0F5C_P_3 */
10527 { "vsubsd", { XMScalar, VexScalar, EXqScalar } },
10528 },
10529 {
10530 /* VEX_W_0F5D_P_0 */
10531 { "vminps", { XM, Vex, EXx } },
10532 },
10533 {
10534 /* VEX_W_0F5D_P_1 */
10535 { "vminss", { XMScalar, VexScalar, EXdScalar } },
10536 },
10537 {
10538 /* VEX_W_0F5D_P_2 */
10539 { "vminpd", { XM, Vex, EXx } },
10540 },
10541 {
10542 /* VEX_W_0F5D_P_3 */
10543 { "vminsd", { XMScalar, VexScalar, EXqScalar } },
10544 },
10545 {
10546 /* VEX_W_0F5E_P_0 */
10547 { "vdivps", { XM, Vex, EXx } },
10548 },
10549 {
10550 /* VEX_W_0F5E_P_1 */
10551 { "vdivss", { XMScalar, VexScalar, EXdScalar } },
10552 },
10553 {
10554 /* VEX_W_0F5E_P_2 */
10555 { "vdivpd", { XM, Vex, EXx } },
10556 },
10557 {
10558 /* VEX_W_0F5E_P_3 */
10559 { "vdivsd", { XMScalar, VexScalar, EXqScalar } },
10560 },
10561 {
10562 /* VEX_W_0F5F_P_0 */
10563 { "vmaxps", { XM, Vex, EXx } },
10564 },
10565 {
10566 /* VEX_W_0F5F_P_1 */
10567 { "vmaxss", { XMScalar, VexScalar, EXdScalar } },
10568 },
10569 {
10570 /* VEX_W_0F5F_P_2 */
10571 { "vmaxpd", { XM, Vex, EXx } },
10572 },
10573 {
10574 /* VEX_W_0F5F_P_3 */
10575 { "vmaxsd", { XMScalar, VexScalar, EXqScalar } },
10576 },
10577 {
10578 /* VEX_W_0F60_P_2 */
10579 { "vpunpcklbw", { XM, Vex, EXx } },
10580 },
10581 {
10582 /* VEX_W_0F61_P_2 */
10583 { "vpunpcklwd", { XM, Vex, EXx } },
10584 },
10585 {
10586 /* VEX_W_0F62_P_2 */
10587 { "vpunpckldq", { XM, Vex, EXx } },
10588 },
10589 {
10590 /* VEX_W_0F63_P_2 */
10591 { "vpacksswb", { XM, Vex, EXx } },
10592 },
10593 {
10594 /* VEX_W_0F64_P_2 */
10595 { "vpcmpgtb", { XM, Vex, EXx } },
10596 },
10597 {
10598 /* VEX_W_0F65_P_2 */
10599 { "vpcmpgtw", { XM, Vex, EXx } },
10600 },
10601 {
10602 /* VEX_W_0F66_P_2 */
10603 { "vpcmpgtd", { XM, Vex, EXx } },
10604 },
10605 {
10606 /* VEX_W_0F67_P_2 */
10607 { "vpackuswb", { XM, Vex, EXx } },
10608 },
10609 {
10610 /* VEX_W_0F68_P_2 */
10611 { "vpunpckhbw", { XM, Vex, EXx } },
10612 },
10613 {
10614 /* VEX_W_0F69_P_2 */
10615 { "vpunpckhwd", { XM, Vex, EXx } },
10616 },
10617 {
10618 /* VEX_W_0F6A_P_2 */
10619 { "vpunpckhdq", { XM, Vex, EXx } },
10620 },
10621 {
10622 /* VEX_W_0F6B_P_2 */
10623 { "vpackssdw", { XM, Vex, EXx } },
10624 },
10625 {
10626 /* VEX_W_0F6C_P_2 */
10627 { "vpunpcklqdq", { XM, Vex, EXx } },
10628 },
10629 {
10630 /* VEX_W_0F6D_P_2 */
10631 { "vpunpckhqdq", { XM, Vex, EXx } },
10632 },
10633 {
10634 /* VEX_W_0F6F_P_1 */
10635 { "vmovdqu", { XM, EXx } },
10636 },
10637 {
10638 /* VEX_W_0F6F_P_2 */
10639 { "vmovdqa", { XM, EXx } },
10640 },
10641 {
10642 /* VEX_W_0F70_P_1 */
10643 { "vpshufhw", { XM, EXx, Ib } },
10644 },
10645 {
10646 /* VEX_W_0F70_P_2 */
10647 { "vpshufd", { XM, EXx, Ib } },
10648 },
10649 {
10650 /* VEX_W_0F70_P_3 */
10651 { "vpshuflw", { XM, EXx, Ib } },
10652 },
10653 {
10654 /* VEX_W_0F71_R_2_P_2 */
10655 { "vpsrlw", { Vex, XS, Ib } },
10656 },
10657 {
10658 /* VEX_W_0F71_R_4_P_2 */
10659 { "vpsraw", { Vex, XS, Ib } },
10660 },
10661 {
10662 /* VEX_W_0F71_R_6_P_2 */
10663 { "vpsllw", { Vex, XS, Ib } },
10664 },
10665 {
10666 /* VEX_W_0F72_R_2_P_2 */
10667 { "vpsrld", { Vex, XS, Ib } },
10668 },
10669 {
10670 /* VEX_W_0F72_R_4_P_2 */
10671 { "vpsrad", { Vex, XS, Ib } },
10672 },
10673 {
10674 /* VEX_W_0F72_R_6_P_2 */
10675 { "vpslld", { Vex, XS, Ib } },
10676 },
10677 {
10678 /* VEX_W_0F73_R_2_P_2 */
10679 { "vpsrlq", { Vex, XS, Ib } },
10680 },
10681 {
10682 /* VEX_W_0F73_R_3_P_2 */
10683 { "vpsrldq", { Vex, XS, Ib } },
10684 },
10685 {
10686 /* VEX_W_0F73_R_6_P_2 */
10687 { "vpsllq", { Vex, XS, Ib } },
10688 },
10689 {
10690 /* VEX_W_0F73_R_7_P_2 */
10691 { "vpslldq", { Vex, XS, Ib } },
10692 },
10693 {
10694 /* VEX_W_0F74_P_2 */
10695 { "vpcmpeqb", { XM, Vex, EXx } },
10696 },
10697 {
10698 /* VEX_W_0F75_P_2 */
10699 { "vpcmpeqw", { XM, Vex, EXx } },
10700 },
10701 {
10702 /* VEX_W_0F76_P_2 */
10703 { "vpcmpeqd", { XM, Vex, EXx } },
10704 },
10705 {
10706 /* VEX_W_0F77_P_0 */
10707 { "", { VZERO } },
10708 },
10709 {
10710 /* VEX_W_0F7C_P_2 */
10711 { "vhaddpd", { XM, Vex, EXx } },
10712 },
10713 {
10714 /* VEX_W_0F7C_P_3 */
10715 { "vhaddps", { XM, Vex, EXx } },
10716 },
10717 {
10718 /* VEX_W_0F7D_P_2 */
10719 { "vhsubpd", { XM, Vex, EXx } },
10720 },
10721 {
10722 /* VEX_W_0F7D_P_3 */
10723 { "vhsubps", { XM, Vex, EXx } },
10724 },
10725 {
10726 /* VEX_W_0F7E_P_1 */
10727 { "vmovq", { XMScalar, EXqScalar } },
10728 },
10729 {
10730 /* VEX_W_0F7F_P_1 */
10731 { "vmovdqu", { EXxS, XM } },
10732 },
10733 {
10734 /* VEX_W_0F7F_P_2 */
10735 { "vmovdqa", { EXxS, XM } },
10736 },
10737 {
10738 /* VEX_W_0F90_P_0_LEN_0 */
10739 { "kmovw", { MaskG, MaskE } },
10740 { "kmovq", { MaskG, MaskE } },
10741 },
10742 {
10743 /* VEX_W_0F90_P_2_LEN_0 */
10744 { Bad_Opcode },
10745 { "kmovd", { MaskG, MaskBDE } },
10746 },
10747 {
10748 /* VEX_W_0F91_P_0_LEN_0 */
10749 { "kmovw", { Ew, MaskG } },
10750 { "kmovq", { Eq, MaskG } },
10751 },
10752 {
10753 /* VEX_W_0F91_P_2_LEN_0 */
10754 { Bad_Opcode },
10755 { "kmovd", { Ed, MaskG } },
10756 },
10757 {
10758 /* VEX_W_0F92_P_0_LEN_0 */
10759 { "kmovw", { MaskG, Rdq } },
10760 },
10761 {
10762 /* VEX_W_0F92_P_3_LEN_0 */
10763 { "kmovd", { MaskG, Rdq } },
10764 { "kmovq", { MaskG, Rdq } },
10765 },
10766 {
10767 /* VEX_W_0F93_P_0_LEN_0 */
10768 { "kmovw", { Gdq, MaskR } },
10769 },
10770 {
10771 /* VEX_W_0F93_P_3_LEN_0 */
10772 { "kmovd", { Gdq, MaskR } },
10773 { "kmovq", { Gdq, MaskR } },
10774 },
10775 {
10776 /* VEX_W_0F98_P_0_LEN_0 */
10777 { "kortestw", { MaskG, MaskR } },
10778 { "kortestq", { MaskG, MaskR } },
10779 },
10780 {
10781 /* VEX_W_0F98_P_2_LEN_0 */
10782 { "kortestb", { MaskG, MaskR } },
10783 { "kortestd", { MaskG, MaskR } },
10784 },
10785 {
10786 /* VEX_W_0F99_P_0_LEN_0 */
10787 { "ktestw", { MaskG, MaskR } },
10788 { "ktestq", { MaskG, MaskR } },
10789 },
10790 {
10791 /* VEX_W_0F99_P_2_LEN_0 */
10792 { Bad_Opcode },
10793 { "ktestd", { MaskG, MaskR } },
10794 },
10795 {
10796 /* VEX_W_0FAE_R_2_M_0 */
10797 { "vldmxcsr", { Md } },
10798 },
10799 {
10800 /* VEX_W_0FAE_R_3_M_0 */
10801 { "vstmxcsr", { Md } },
10802 },
10803 {
10804 /* VEX_W_0FC2_P_0 */
10805 { "vcmpps", { XM, Vex, EXx, VCMP } },
10806 },
10807 {
10808 /* VEX_W_0FC2_P_1 */
10809 { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP } },
10810 },
10811 {
10812 /* VEX_W_0FC2_P_2 */
10813 { "vcmppd", { XM, Vex, EXx, VCMP } },
10814 },
10815 {
10816 /* VEX_W_0FC2_P_3 */
10817 { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP } },
10818 },
10819 {
10820 /* VEX_W_0FC4_P_2 */
10821 { "vpinsrw", { XM, Vex128, Edqw, Ib } },
10822 },
10823 {
10824 /* VEX_W_0FC5_P_2 */
10825 { "vpextrw", { Gdq, XS, Ib } },
10826 },
10827 {
10828 /* VEX_W_0FD0_P_2 */
10829 { "vaddsubpd", { XM, Vex, EXx } },
10830 },
10831 {
10832 /* VEX_W_0FD0_P_3 */
10833 { "vaddsubps", { XM, Vex, EXx } },
10834 },
10835 {
10836 /* VEX_W_0FD1_P_2 */
10837 { "vpsrlw", { XM, Vex, EXxmm } },
10838 },
10839 {
10840 /* VEX_W_0FD2_P_2 */
10841 { "vpsrld", { XM, Vex, EXxmm } },
10842 },
10843 {
10844 /* VEX_W_0FD3_P_2 */
10845 { "vpsrlq", { XM, Vex, EXxmm } },
10846 },
10847 {
10848 /* VEX_W_0FD4_P_2 */
10849 { "vpaddq", { XM, Vex, EXx } },
10850 },
10851 {
10852 /* VEX_W_0FD5_P_2 */
10853 { "vpmullw", { XM, Vex, EXx } },
10854 },
10855 {
10856 /* VEX_W_0FD6_P_2 */
10857 { "vmovq", { EXqScalarS, XMScalar } },
10858 },
10859 {
10860 /* VEX_W_0FD7_P_2_M_1 */
10861 { "vpmovmskb", { Gdq, XS } },
10862 },
10863 {
10864 /* VEX_W_0FD8_P_2 */
10865 { "vpsubusb", { XM, Vex, EXx } },
10866 },
10867 {
10868 /* VEX_W_0FD9_P_2 */
10869 { "vpsubusw", { XM, Vex, EXx } },
10870 },
10871 {
10872 /* VEX_W_0FDA_P_2 */
10873 { "vpminub", { XM, Vex, EXx } },
10874 },
10875 {
10876 /* VEX_W_0FDB_P_2 */
10877 { "vpand", { XM, Vex, EXx } },
10878 },
10879 {
10880 /* VEX_W_0FDC_P_2 */
10881 { "vpaddusb", { XM, Vex, EXx } },
10882 },
10883 {
10884 /* VEX_W_0FDD_P_2 */
10885 { "vpaddusw", { XM, Vex, EXx } },
10886 },
10887 {
10888 /* VEX_W_0FDE_P_2 */
10889 { "vpmaxub", { XM, Vex, EXx } },
10890 },
10891 {
10892 /* VEX_W_0FDF_P_2 */
10893 { "vpandn", { XM, Vex, EXx } },
10894 },
10895 {
10896 /* VEX_W_0FE0_P_2 */
10897 { "vpavgb", { XM, Vex, EXx } },
10898 },
10899 {
10900 /* VEX_W_0FE1_P_2 */
10901 { "vpsraw", { XM, Vex, EXxmm } },
10902 },
10903 {
10904 /* VEX_W_0FE2_P_2 */
10905 { "vpsrad", { XM, Vex, EXxmm } },
10906 },
10907 {
10908 /* VEX_W_0FE3_P_2 */
10909 { "vpavgw", { XM, Vex, EXx } },
10910 },
10911 {
10912 /* VEX_W_0FE4_P_2 */
10913 { "vpmulhuw", { XM, Vex, EXx } },
10914 },
10915 {
10916 /* VEX_W_0FE5_P_2 */
10917 { "vpmulhw", { XM, Vex, EXx } },
10918 },
10919 {
10920 /* VEX_W_0FE6_P_1 */
10921 { "vcvtdq2pd", { XM, EXxmmq } },
10922 },
10923 {
10924 /* VEX_W_0FE6_P_2 */
10925 { "vcvttpd2dq%XY", { XMM, EXx } },
10926 },
10927 {
10928 /* VEX_W_0FE6_P_3 */
10929 { "vcvtpd2dq%XY", { XMM, EXx } },
10930 },
10931 {
10932 /* VEX_W_0FE7_P_2_M_0 */
10933 { "vmovntdq", { Mx, XM } },
10934 },
10935 {
10936 /* VEX_W_0FE8_P_2 */
10937 { "vpsubsb", { XM, Vex, EXx } },
10938 },
10939 {
10940 /* VEX_W_0FE9_P_2 */
10941 { "vpsubsw", { XM, Vex, EXx } },
10942 },
10943 {
10944 /* VEX_W_0FEA_P_2 */
10945 { "vpminsw", { XM, Vex, EXx } },
10946 },
10947 {
10948 /* VEX_W_0FEB_P_2 */
10949 { "vpor", { XM, Vex, EXx } },
10950 },
10951 {
10952 /* VEX_W_0FEC_P_2 */
10953 { "vpaddsb", { XM, Vex, EXx } },
10954 },
10955 {
10956 /* VEX_W_0FED_P_2 */
10957 { "vpaddsw", { XM, Vex, EXx } },
10958 },
10959 {
10960 /* VEX_W_0FEE_P_2 */
10961 { "vpmaxsw", { XM, Vex, EXx } },
10962 },
10963 {
10964 /* VEX_W_0FEF_P_2 */
10965 { "vpxor", { XM, Vex, EXx } },
10966 },
10967 {
10968 /* VEX_W_0FF0_P_3_M_0 */
10969 { "vlddqu", { XM, M } },
10970 },
10971 {
10972 /* VEX_W_0FF1_P_2 */
10973 { "vpsllw", { XM, Vex, EXxmm } },
10974 },
10975 {
10976 /* VEX_W_0FF2_P_2 */
10977 { "vpslld", { XM, Vex, EXxmm } },
10978 },
10979 {
10980 /* VEX_W_0FF3_P_2 */
10981 { "vpsllq", { XM, Vex, EXxmm } },
10982 },
10983 {
10984 /* VEX_W_0FF4_P_2 */
10985 { "vpmuludq", { XM, Vex, EXx } },
10986 },
10987 {
10988 /* VEX_W_0FF5_P_2 */
10989 { "vpmaddwd", { XM, Vex, EXx } },
10990 },
10991 {
10992 /* VEX_W_0FF6_P_2 */
10993 { "vpsadbw", { XM, Vex, EXx } },
10994 },
10995 {
10996 /* VEX_W_0FF7_P_2 */
10997 { "vmaskmovdqu", { XM, XS } },
10998 },
10999 {
11000 /* VEX_W_0FF8_P_2 */
11001 { "vpsubb", { XM, Vex, EXx } },
11002 },
11003 {
11004 /* VEX_W_0FF9_P_2 */
11005 { "vpsubw", { XM, Vex, EXx } },
11006 },
11007 {
11008 /* VEX_W_0FFA_P_2 */
11009 { "vpsubd", { XM, Vex, EXx } },
11010 },
11011 {
11012 /* VEX_W_0FFB_P_2 */
11013 { "vpsubq", { XM, Vex, EXx } },
11014 },
11015 {
11016 /* VEX_W_0FFC_P_2 */
11017 { "vpaddb", { XM, Vex, EXx } },
11018 },
11019 {
11020 /* VEX_W_0FFD_P_2 */
11021 { "vpaddw", { XM, Vex, EXx } },
11022 },
11023 {
11024 /* VEX_W_0FFE_P_2 */
11025 { "vpaddd", { XM, Vex, EXx } },
11026 },
11027 {
11028 /* VEX_W_0F3800_P_2 */
11029 { "vpshufb", { XM, Vex, EXx } },
11030 },
11031 {
11032 /* VEX_W_0F3801_P_2 */
11033 { "vphaddw", { XM, Vex, EXx } },
11034 },
11035 {
11036 /* VEX_W_0F3802_P_2 */
11037 { "vphaddd", { XM, Vex, EXx } },
11038 },
11039 {
11040 /* VEX_W_0F3803_P_2 */
11041 { "vphaddsw", { XM, Vex, EXx } },
11042 },
11043 {
11044 /* VEX_W_0F3804_P_2 */
11045 { "vpmaddubsw", { XM, Vex, EXx } },
11046 },
11047 {
11048 /* VEX_W_0F3805_P_2 */
11049 { "vphsubw", { XM, Vex, EXx } },
11050 },
11051 {
11052 /* VEX_W_0F3806_P_2 */
11053 { "vphsubd", { XM, Vex, EXx } },
11054 },
11055 {
11056 /* VEX_W_0F3807_P_2 */
11057 { "vphsubsw", { XM, Vex, EXx } },
11058 },
11059 {
11060 /* VEX_W_0F3808_P_2 */
11061 { "vpsignb", { XM, Vex, EXx } },
11062 },
11063 {
11064 /* VEX_W_0F3809_P_2 */
11065 { "vpsignw", { XM, Vex, EXx } },
11066 },
11067 {
11068 /* VEX_W_0F380A_P_2 */
11069 { "vpsignd", { XM, Vex, EXx } },
11070 },
11071 {
11072 /* VEX_W_0F380B_P_2 */
11073 { "vpmulhrsw", { XM, Vex, EXx } },
11074 },
11075 {
11076 /* VEX_W_0F380C_P_2 */
11077 { "vpermilps", { XM, Vex, EXx } },
11078 },
11079 {
11080 /* VEX_W_0F380D_P_2 */
11081 { "vpermilpd", { XM, Vex, EXx } },
11082 },
11083 {
11084 /* VEX_W_0F380E_P_2 */
11085 { "vtestps", { XM, EXx } },
11086 },
11087 {
11088 /* VEX_W_0F380F_P_2 */
11089 { "vtestpd", { XM, EXx } },
11090 },
11091 {
11092 /* VEX_W_0F3816_P_2 */
11093 { "vpermps", { XM, Vex, EXx } },
11094 },
11095 {
11096 /* VEX_W_0F3817_P_2 */
11097 { "vptest", { XM, EXx } },
11098 },
11099 {
11100 /* VEX_W_0F3818_P_2 */
11101 { "vbroadcastss", { XM, EXxmm_md } },
11102 },
11103 {
11104 /* VEX_W_0F3819_P_2 */
11105 { "vbroadcastsd", { XM, EXxmm_mq } },
11106 },
11107 {
11108 /* VEX_W_0F381A_P_2_M_0 */
11109 { "vbroadcastf128", { XM, Mxmm } },
11110 },
11111 {
11112 /* VEX_W_0F381C_P_2 */
11113 { "vpabsb", { XM, EXx } },
11114 },
11115 {
11116 /* VEX_W_0F381D_P_2 */
11117 { "vpabsw", { XM, EXx } },
11118 },
11119 {
11120 /* VEX_W_0F381E_P_2 */
11121 { "vpabsd", { XM, EXx } },
11122 },
11123 {
11124 /* VEX_W_0F3820_P_2 */
11125 { "vpmovsxbw", { XM, EXxmmq } },
11126 },
11127 {
11128 /* VEX_W_0F3821_P_2 */
11129 { "vpmovsxbd", { XM, EXxmmqd } },
11130 },
11131 {
11132 /* VEX_W_0F3822_P_2 */
11133 { "vpmovsxbq", { XM, EXxmmdw } },
11134 },
11135 {
11136 /* VEX_W_0F3823_P_2 */
11137 { "vpmovsxwd", { XM, EXxmmq } },
11138 },
11139 {
11140 /* VEX_W_0F3824_P_2 */
11141 { "vpmovsxwq", { XM, EXxmmqd } },
11142 },
11143 {
11144 /* VEX_W_0F3825_P_2 */
11145 { "vpmovsxdq", { XM, EXxmmq } },
11146 },
11147 {
11148 /* VEX_W_0F3828_P_2 */
11149 { "vpmuldq", { XM, Vex, EXx } },
11150 },
11151 {
11152 /* VEX_W_0F3829_P_2 */
11153 { "vpcmpeqq", { XM, Vex, EXx } },
11154 },
11155 {
11156 /* VEX_W_0F382A_P_2_M_0 */
11157 { "vmovntdqa", { XM, Mx } },
11158 },
11159 {
11160 /* VEX_W_0F382B_P_2 */
11161 { "vpackusdw", { XM, Vex, EXx } },
11162 },
11163 {
11164 /* VEX_W_0F382C_P_2_M_0 */
11165 { "vmaskmovps", { XM, Vex, Mx } },
11166 },
11167 {
11168 /* VEX_W_0F382D_P_2_M_0 */
11169 { "vmaskmovpd", { XM, Vex, Mx } },
11170 },
11171 {
11172 /* VEX_W_0F382E_P_2_M_0 */
11173 { "vmaskmovps", { Mx, Vex, XM } },
11174 },
11175 {
11176 /* VEX_W_0F382F_P_2_M_0 */
11177 { "vmaskmovpd", { Mx, Vex, XM } },
11178 },
11179 {
11180 /* VEX_W_0F3830_P_2 */
11181 { "vpmovzxbw", { XM, EXxmmq } },
11182 },
11183 {
11184 /* VEX_W_0F3831_P_2 */
11185 { "vpmovzxbd", { XM, EXxmmqd } },
11186 },
11187 {
11188 /* VEX_W_0F3832_P_2 */
11189 { "vpmovzxbq", { XM, EXxmmdw } },
11190 },
11191 {
11192 /* VEX_W_0F3833_P_2 */
11193 { "vpmovzxwd", { XM, EXxmmq } },
11194 },
11195 {
11196 /* VEX_W_0F3834_P_2 */
11197 { "vpmovzxwq", { XM, EXxmmqd } },
11198 },
11199 {
11200 /* VEX_W_0F3835_P_2 */
11201 { "vpmovzxdq", { XM, EXxmmq } },
11202 },
11203 {
11204 /* VEX_W_0F3836_P_2 */
11205 { "vpermd", { XM, Vex, EXx } },
11206 },
11207 {
11208 /* VEX_W_0F3837_P_2 */
11209 { "vpcmpgtq", { XM, Vex, EXx } },
11210 },
11211 {
11212 /* VEX_W_0F3838_P_2 */
11213 { "vpminsb", { XM, Vex, EXx } },
11214 },
11215 {
11216 /* VEX_W_0F3839_P_2 */
11217 { "vpminsd", { XM, Vex, EXx } },
11218 },
11219 {
11220 /* VEX_W_0F383A_P_2 */
11221 { "vpminuw", { XM, Vex, EXx } },
11222 },
11223 {
11224 /* VEX_W_0F383B_P_2 */
11225 { "vpminud", { XM, Vex, EXx } },
11226 },
11227 {
11228 /* VEX_W_0F383C_P_2 */
11229 { "vpmaxsb", { XM, Vex, EXx } },
11230 },
11231 {
11232 /* VEX_W_0F383D_P_2 */
11233 { "vpmaxsd", { XM, Vex, EXx } },
11234 },
11235 {
11236 /* VEX_W_0F383E_P_2 */
11237 { "vpmaxuw", { XM, Vex, EXx } },
11238 },
11239 {
11240 /* VEX_W_0F383F_P_2 */
11241 { "vpmaxud", { XM, Vex, EXx } },
11242 },
11243 {
11244 /* VEX_W_0F3840_P_2 */
11245 { "vpmulld", { XM, Vex, EXx } },
11246 },
11247 {
11248 /* VEX_W_0F3841_P_2 */
11249 { "vphminposuw", { XM, EXx } },
11250 },
11251 {
11252 /* VEX_W_0F3846_P_2 */
11253 { "vpsravd", { XM, Vex, EXx } },
11254 },
11255 {
11256 /* VEX_W_0F3858_P_2 */
11257 { "vpbroadcastd", { XM, EXxmm_md } },
11258 },
11259 {
11260 /* VEX_W_0F3859_P_2 */
11261 { "vpbroadcastq", { XM, EXxmm_mq } },
11262 },
11263 {
11264 /* VEX_W_0F385A_P_2_M_0 */
11265 { "vbroadcasti128", { XM, Mxmm } },
11266 },
11267 {
11268 /* VEX_W_0F3878_P_2 */
11269 { "vpbroadcastb", { XM, EXxmm_mb } },
11270 },
11271 {
11272 /* VEX_W_0F3879_P_2 */
11273 { "vpbroadcastw", { XM, EXxmm_mw } },
11274 },
11275 {
11276 /* VEX_W_0F38DB_P_2 */
11277 { "vaesimc", { XM, EXx } },
11278 },
11279 {
11280 /* VEX_W_0F38DC_P_2 */
11281 { "vaesenc", { XM, Vex128, EXx } },
11282 },
11283 {
11284 /* VEX_W_0F38DD_P_2 */
11285 { "vaesenclast", { XM, Vex128, EXx } },
11286 },
11287 {
11288 /* VEX_W_0F38DE_P_2 */
11289 { "vaesdec", { XM, Vex128, EXx } },
11290 },
11291 {
11292 /* VEX_W_0F38DF_P_2 */
11293 { "vaesdeclast", { XM, Vex128, EXx } },
11294 },
11295 {
11296 /* VEX_W_0F3A00_P_2 */
11297 { Bad_Opcode },
11298 { "vpermq", { XM, EXx, Ib } },
11299 },
11300 {
11301 /* VEX_W_0F3A01_P_2 */
11302 { Bad_Opcode },
11303 { "vpermpd", { XM, EXx, Ib } },
11304 },
11305 {
11306 /* VEX_W_0F3A02_P_2 */
11307 { "vpblendd", { XM, Vex, EXx, Ib } },
11308 },
11309 {
11310 /* VEX_W_0F3A04_P_2 */
11311 { "vpermilps", { XM, EXx, Ib } },
11312 },
11313 {
11314 /* VEX_W_0F3A05_P_2 */
11315 { "vpermilpd", { XM, EXx, Ib } },
11316 },
11317 {
11318 /* VEX_W_0F3A06_P_2 */
11319 { "vperm2f128", { XM, Vex256, EXx, Ib } },
11320 },
11321 {
11322 /* VEX_W_0F3A08_P_2 */
11323 { "vroundps", { XM, EXx, Ib } },
11324 },
11325 {
11326 /* VEX_W_0F3A09_P_2 */
11327 { "vroundpd", { XM, EXx, Ib } },
11328 },
11329 {
11330 /* VEX_W_0F3A0A_P_2 */
11331 { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib } },
11332 },
11333 {
11334 /* VEX_W_0F3A0B_P_2 */
11335 { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib } },
11336 },
11337 {
11338 /* VEX_W_0F3A0C_P_2 */
11339 { "vblendps", { XM, Vex, EXx, Ib } },
11340 },
11341 {
11342 /* VEX_W_0F3A0D_P_2 */
11343 { "vblendpd", { XM, Vex, EXx, Ib } },
11344 },
11345 {
11346 /* VEX_W_0F3A0E_P_2 */
11347 { "vpblendw", { XM, Vex, EXx, Ib } },
11348 },
11349 {
11350 /* VEX_W_0F3A0F_P_2 */
11351 { "vpalignr", { XM, Vex, EXx, Ib } },
11352 },
11353 {
11354 /* VEX_W_0F3A14_P_2 */
11355 { "vpextrb", { Edqb, XM, Ib } },
11356 },
11357 {
11358 /* VEX_W_0F3A15_P_2 */
11359 { "vpextrw", { Edqw, XM, Ib } },
11360 },
11361 {
11362 /* VEX_W_0F3A18_P_2 */
11363 { "vinsertf128", { XM, Vex256, EXxmm, Ib } },
11364 },
11365 {
11366 /* VEX_W_0F3A19_P_2 */
11367 { "vextractf128", { EXxmm, XM, Ib } },
11368 },
11369 {
11370 /* VEX_W_0F3A20_P_2 */
11371 { "vpinsrb", { XM, Vex128, Edqb, Ib } },
11372 },
11373 {
11374 /* VEX_W_0F3A21_P_2 */
11375 { "vinsertps", { XM, Vex128, EXd, Ib } },
11376 },
11377 {
11378 /* VEX_W_0F3A30_P_2_LEN_0 */
11379 { Bad_Opcode },
11380 { "kshiftrw", { MaskG, MaskR, Ib } },
11381 },
11382 {
11383 /* VEX_W_0F3A31_P_2_LEN_0 */
11384 { "kshiftrd", { MaskG, MaskR, Ib } },
11385 { "kshiftrq", { MaskG, MaskR, Ib } },
11386 },
11387 {
11388 /* VEX_W_0F3A32_P_2_LEN_0 */
11389 { Bad_Opcode },
11390 { "kshiftlw", { MaskG, MaskR, Ib } },
11391 },
11392 {
11393 /* VEX_W_0F3A33_P_2_LEN_0 */
11394 { "kshiftld", { MaskG, MaskR, Ib } },
11395 { "kshiftlq", { MaskG, MaskR, Ib } },
11396 },
11397 {
11398 /* VEX_W_0F3A38_P_2 */
11399 { "vinserti128", { XM, Vex256, EXxmm, Ib } },
11400 },
11401 {
11402 /* VEX_W_0F3A39_P_2 */
11403 { "vextracti128", { EXxmm, XM, Ib } },
11404 },
11405 {
11406 /* VEX_W_0F3A40_P_2 */
11407 { "vdpps", { XM, Vex, EXx, Ib } },
11408 },
11409 {
11410 /* VEX_W_0F3A41_P_2 */
11411 { "vdppd", { XM, Vex128, EXx, Ib } },
11412 },
11413 {
11414 /* VEX_W_0F3A42_P_2 */
11415 { "vmpsadbw", { XM, Vex, EXx, Ib } },
11416 },
11417 {
11418 /* VEX_W_0F3A44_P_2 */
11419 { "vpclmulqdq", { XM, Vex128, EXx, PCLMUL } },
11420 },
11421 {
11422 /* VEX_W_0F3A46_P_2 */
11423 { "vperm2i128", { XM, Vex256, EXx, Ib } },
11424 },
11425 {
11426 /* VEX_W_0F3A48_P_2 */
11427 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
11428 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
11429 },
11430 {
11431 /* VEX_W_0F3A49_P_2 */
11432 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
11433 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
11434 },
11435 {
11436 /* VEX_W_0F3A4A_P_2 */
11437 { "vblendvps", { XM, Vex, EXx, XMVexI4 } },
11438 },
11439 {
11440 /* VEX_W_0F3A4B_P_2 */
11441 { "vblendvpd", { XM, Vex, EXx, XMVexI4 } },
11442 },
11443 {
11444 /* VEX_W_0F3A4C_P_2 */
11445 { "vpblendvb", { XM, Vex, EXx, XMVexI4 } },
11446 },
11447 {
11448 /* VEX_W_0F3A60_P_2 */
11449 { "vpcmpestrm", { XM, EXx, Ib } },
11450 },
11451 {
11452 /* VEX_W_0F3A61_P_2 */
11453 { "vpcmpestri", { XM, EXx, Ib } },
11454 },
11455 {
11456 /* VEX_W_0F3A62_P_2 */
11457 { "vpcmpistrm", { XM, EXx, Ib } },
11458 },
11459 {
11460 /* VEX_W_0F3A63_P_2 */
11461 { "vpcmpistri", { XM, EXx, Ib } },
11462 },
11463 {
11464 /* VEX_W_0F3ADF_P_2 */
11465 { "vaeskeygenassist", { XM, EXx, Ib } },
11466 },
11467 #define NEED_VEX_W_TABLE
11468 #include "i386-dis-evex.h"
11469 #undef NEED_VEX_W_TABLE
11470 };
11471
11472 static const struct dis386 mod_table[][2] = {
11473 {
11474 /* MOD_8D */
11475 { "leaS", { Gv, M } },
11476 },
11477 {
11478 /* MOD_C6_REG_7 */
11479 { Bad_Opcode },
11480 { RM_TABLE (RM_C6_REG_7) },
11481 },
11482 {
11483 /* MOD_C7_REG_7 */
11484 { Bad_Opcode },
11485 { RM_TABLE (RM_C7_REG_7) },
11486 },
11487 {
11488 /* MOD_FF_REG_3 */
11489 { "Jcall{T|}", { indirEp } },
11490 },
11491 {
11492 /* MOD_FF_REG_5 */
11493 { "Jjmp{T|}", { indirEp } },
11494 },
11495 {
11496 /* MOD_0F01_REG_0 */
11497 { X86_64_TABLE (X86_64_0F01_REG_0) },
11498 { RM_TABLE (RM_0F01_REG_0) },
11499 },
11500 {
11501 /* MOD_0F01_REG_1 */
11502 { X86_64_TABLE (X86_64_0F01_REG_1) },
11503 { RM_TABLE (RM_0F01_REG_1) },
11504 },
11505 {
11506 /* MOD_0F01_REG_2 */
11507 { X86_64_TABLE (X86_64_0F01_REG_2) },
11508 { RM_TABLE (RM_0F01_REG_2) },
11509 },
11510 {
11511 /* MOD_0F01_REG_3 */
11512 { X86_64_TABLE (X86_64_0F01_REG_3) },
11513 { RM_TABLE (RM_0F01_REG_3) },
11514 },
11515 {
11516 /* MOD_0F01_REG_7 */
11517 { "invlpg", { Mb } },
11518 { RM_TABLE (RM_0F01_REG_7) },
11519 },
11520 {
11521 /* MOD_0F12_PREFIX_0 */
11522 { "movlps", { XM, EXq } },
11523 { "movhlps", { XM, EXq } },
11524 },
11525 {
11526 /* MOD_0F13 */
11527 { "movlpX", { EXq, XM } },
11528 },
11529 {
11530 /* MOD_0F16_PREFIX_0 */
11531 { "movhps", { XM, EXq } },
11532 { "movlhps", { XM, EXq } },
11533 },
11534 {
11535 /* MOD_0F17 */
11536 { "movhpX", { EXq, XM } },
11537 },
11538 {
11539 /* MOD_0F18_REG_0 */
11540 { "prefetchnta", { Mb } },
11541 },
11542 {
11543 /* MOD_0F18_REG_1 */
11544 { "prefetcht0", { Mb } },
11545 },
11546 {
11547 /* MOD_0F18_REG_2 */
11548 { "prefetcht1", { Mb } },
11549 },
11550 {
11551 /* MOD_0F18_REG_3 */
11552 { "prefetcht2", { Mb } },
11553 },
11554 {
11555 /* MOD_0F18_REG_4 */
11556 { "nop/reserved", { Mb } },
11557 },
11558 {
11559 /* MOD_0F18_REG_5 */
11560 { "nop/reserved", { Mb } },
11561 },
11562 {
11563 /* MOD_0F18_REG_6 */
11564 { "nop/reserved", { Mb } },
11565 },
11566 {
11567 /* MOD_0F18_REG_7 */
11568 { "nop/reserved", { Mb } },
11569 },
11570 {
11571 /* MOD_0F1A_PREFIX_0 */
11572 { "bndldx", { Gbnd, Ev_bnd } },
11573 { "nopQ", { Ev } },
11574 },
11575 {
11576 /* MOD_0F1B_PREFIX_0 */
11577 { "bndstx", { Ev_bnd, Gbnd } },
11578 { "nopQ", { Ev } },
11579 },
11580 {
11581 /* MOD_0F1B_PREFIX_1 */
11582 { "bndmk", { Gbnd, Ev_bnd } },
11583 { "nopQ", { Ev } },
11584 },
11585 {
11586 /* MOD_0F20 */
11587 { Bad_Opcode },
11588 { "movZ", { Rm, Cm } },
11589 },
11590 {
11591 /* MOD_0F21 */
11592 { Bad_Opcode },
11593 { "movZ", { Rm, Dm } },
11594 },
11595 {
11596 /* MOD_0F22 */
11597 { Bad_Opcode },
11598 { "movZ", { Cm, Rm } },
11599 },
11600 {
11601 /* MOD_0F23 */
11602 { Bad_Opcode },
11603 { "movZ", { Dm, Rm } },
11604 },
11605 {
11606 /* MOD_0F24 */
11607 { Bad_Opcode },
11608 { "movL", { Rd, Td } },
11609 },
11610 {
11611 /* MOD_0F26 */
11612 { Bad_Opcode },
11613 { "movL", { Td, Rd } },
11614 },
11615 {
11616 /* MOD_0F2B_PREFIX_0 */
11617 {"movntps", { Mx, XM } },
11618 },
11619 {
11620 /* MOD_0F2B_PREFIX_1 */
11621 {"movntss", { Md, XM } },
11622 },
11623 {
11624 /* MOD_0F2B_PREFIX_2 */
11625 {"movntpd", { Mx, XM } },
11626 },
11627 {
11628 /* MOD_0F2B_PREFIX_3 */
11629 {"movntsd", { Mq, XM } },
11630 },
11631 {
11632 /* MOD_0F51 */
11633 { Bad_Opcode },
11634 { "movmskpX", { Gdq, XS } },
11635 },
11636 {
11637 /* MOD_0F71_REG_2 */
11638 { Bad_Opcode },
11639 { "psrlw", { MS, Ib } },
11640 },
11641 {
11642 /* MOD_0F71_REG_4 */
11643 { Bad_Opcode },
11644 { "psraw", { MS, Ib } },
11645 },
11646 {
11647 /* MOD_0F71_REG_6 */
11648 { Bad_Opcode },
11649 { "psllw", { MS, Ib } },
11650 },
11651 {
11652 /* MOD_0F72_REG_2 */
11653 { Bad_Opcode },
11654 { "psrld", { MS, Ib } },
11655 },
11656 {
11657 /* MOD_0F72_REG_4 */
11658 { Bad_Opcode },
11659 { "psrad", { MS, Ib } },
11660 },
11661 {
11662 /* MOD_0F72_REG_6 */
11663 { Bad_Opcode },
11664 { "pslld", { MS, Ib } },
11665 },
11666 {
11667 /* MOD_0F73_REG_2 */
11668 { Bad_Opcode },
11669 { "psrlq", { MS, Ib } },
11670 },
11671 {
11672 /* MOD_0F73_REG_3 */
11673 { Bad_Opcode },
11674 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
11675 },
11676 {
11677 /* MOD_0F73_REG_6 */
11678 { Bad_Opcode },
11679 { "psllq", { MS, Ib } },
11680 },
11681 {
11682 /* MOD_0F73_REG_7 */
11683 { Bad_Opcode },
11684 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
11685 },
11686 {
11687 /* MOD_0FAE_REG_0 */
11688 { "fxsave", { FXSAVE } },
11689 { PREFIX_TABLE (PREFIX_0FAE_REG_0) },
11690 },
11691 {
11692 /* MOD_0FAE_REG_1 */
11693 { "fxrstor", { FXSAVE } },
11694 { PREFIX_TABLE (PREFIX_0FAE_REG_1) },
11695 },
11696 {
11697 /* MOD_0FAE_REG_2 */
11698 { "ldmxcsr", { Md } },
11699 { PREFIX_TABLE (PREFIX_0FAE_REG_2) },
11700 },
11701 {
11702 /* MOD_0FAE_REG_3 */
11703 { "stmxcsr", { Md } },
11704 { PREFIX_TABLE (PREFIX_0FAE_REG_3) },
11705 },
11706 {
11707 /* MOD_0FAE_REG_4 */
11708 { "xsave", { FXSAVE } },
11709 },
11710 {
11711 /* MOD_0FAE_REG_5 */
11712 { "xrstor", { FXSAVE } },
11713 { RM_TABLE (RM_0FAE_REG_5) },
11714 },
11715 {
11716 /* MOD_0FAE_REG_6 */
11717 { "xsaveopt", { FXSAVE } },
11718 { RM_TABLE (RM_0FAE_REG_6) },
11719 },
11720 {
11721 /* MOD_0FAE_REG_7 */
11722 { PREFIX_TABLE (PREFIX_0FAE_REG_7) },
11723 { RM_TABLE (RM_0FAE_REG_7) },
11724 },
11725 {
11726 /* MOD_0FB2 */
11727 { "lssS", { Gv, Mp } },
11728 },
11729 {
11730 /* MOD_0FB4 */
11731 { "lfsS", { Gv, Mp } },
11732 },
11733 {
11734 /* MOD_0FB5 */
11735 { "lgsS", { Gv, Mp } },
11736 },
11737 {
11738 /* MOD_0FC7_REG_3 */
11739 { "xrstors", { FXSAVE } },
11740 },
11741 {
11742 /* MOD_0FC7_REG_4 */
11743 { "xsavec", { FXSAVE } },
11744 },
11745 {
11746 /* MOD_0FC7_REG_5 */
11747 { "xsaves", { FXSAVE } },
11748 },
11749 {
11750 /* MOD_0FC7_REG_6 */
11751 { PREFIX_TABLE (PREFIX_0FC7_REG_6) },
11752 { "rdrand", { Ev } },
11753 },
11754 {
11755 /* MOD_0FC7_REG_7 */
11756 { "vmptrst", { Mq } },
11757 { "rdseed", { Ev } },
11758 },
11759 {
11760 /* MOD_0FD7 */
11761 { Bad_Opcode },
11762 { "pmovmskb", { Gdq, MS } },
11763 },
11764 {
11765 /* MOD_0FE7_PREFIX_2 */
11766 { "movntdq", { Mx, XM } },
11767 },
11768 {
11769 /* MOD_0FF0_PREFIX_3 */
11770 { "lddqu", { XM, M } },
11771 },
11772 {
11773 /* MOD_0F382A_PREFIX_2 */
11774 { "movntdqa", { XM, Mx } },
11775 },
11776 {
11777 /* MOD_62_32BIT */
11778 { "bound{S|}", { Gv, Ma } },
11779 { EVEX_TABLE (EVEX_0F) },
11780 },
11781 {
11782 /* MOD_C4_32BIT */
11783 { "lesS", { Gv, Mp } },
11784 { VEX_C4_TABLE (VEX_0F) },
11785 },
11786 {
11787 /* MOD_C5_32BIT */
11788 { "ldsS", { Gv, Mp } },
11789 { VEX_C5_TABLE (VEX_0F) },
11790 },
11791 {
11792 /* MOD_VEX_0F12_PREFIX_0 */
11793 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
11794 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
11795 },
11796 {
11797 /* MOD_VEX_0F13 */
11798 { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
11799 },
11800 {
11801 /* MOD_VEX_0F16_PREFIX_0 */
11802 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
11803 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
11804 },
11805 {
11806 /* MOD_VEX_0F17 */
11807 { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
11808 },
11809 {
11810 /* MOD_VEX_0F2B */
11811 { VEX_W_TABLE (VEX_W_0F2B_M_0) },
11812 },
11813 {
11814 /* MOD_VEX_0F50 */
11815 { Bad_Opcode },
11816 { VEX_W_TABLE (VEX_W_0F50_M_0) },
11817 },
11818 {
11819 /* MOD_VEX_0F71_REG_2 */
11820 { Bad_Opcode },
11821 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
11822 },
11823 {
11824 /* MOD_VEX_0F71_REG_4 */
11825 { Bad_Opcode },
11826 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
11827 },
11828 {
11829 /* MOD_VEX_0F71_REG_6 */
11830 { Bad_Opcode },
11831 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
11832 },
11833 {
11834 /* MOD_VEX_0F72_REG_2 */
11835 { Bad_Opcode },
11836 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
11837 },
11838 {
11839 /* MOD_VEX_0F72_REG_4 */
11840 { Bad_Opcode },
11841 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
11842 },
11843 {
11844 /* MOD_VEX_0F72_REG_6 */
11845 { Bad_Opcode },
11846 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
11847 },
11848 {
11849 /* MOD_VEX_0F73_REG_2 */
11850 { Bad_Opcode },
11851 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
11852 },
11853 {
11854 /* MOD_VEX_0F73_REG_3 */
11855 { Bad_Opcode },
11856 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
11857 },
11858 {
11859 /* MOD_VEX_0F73_REG_6 */
11860 { Bad_Opcode },
11861 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
11862 },
11863 {
11864 /* MOD_VEX_0F73_REG_7 */
11865 { Bad_Opcode },
11866 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
11867 },
11868 {
11869 /* MOD_VEX_0FAE_REG_2 */
11870 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
11871 },
11872 {
11873 /* MOD_VEX_0FAE_REG_3 */
11874 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
11875 },
11876 {
11877 /* MOD_VEX_0FD7_PREFIX_2 */
11878 { Bad_Opcode },
11879 { VEX_W_TABLE (VEX_W_0FD7_P_2_M_1) },
11880 },
11881 {
11882 /* MOD_VEX_0FE7_PREFIX_2 */
11883 { VEX_W_TABLE (VEX_W_0FE7_P_2_M_0) },
11884 },
11885 {
11886 /* MOD_VEX_0FF0_PREFIX_3 */
11887 { VEX_W_TABLE (VEX_W_0FF0_P_3_M_0) },
11888 },
11889 {
11890 /* MOD_VEX_0F381A_PREFIX_2 */
11891 { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
11892 },
11893 {
11894 /* MOD_VEX_0F382A_PREFIX_2 */
11895 { VEX_W_TABLE (VEX_W_0F382A_P_2_M_0) },
11896 },
11897 {
11898 /* MOD_VEX_0F382C_PREFIX_2 */
11899 { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
11900 },
11901 {
11902 /* MOD_VEX_0F382D_PREFIX_2 */
11903 { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
11904 },
11905 {
11906 /* MOD_VEX_0F382E_PREFIX_2 */
11907 { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
11908 },
11909 {
11910 /* MOD_VEX_0F382F_PREFIX_2 */
11911 { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
11912 },
11913 {
11914 /* MOD_VEX_0F385A_PREFIX_2 */
11915 { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) },
11916 },
11917 {
11918 /* MOD_VEX_0F388C_PREFIX_2 */
11919 { "vpmaskmov%LW", { XM, Vex, Mx } },
11920 },
11921 {
11922 /* MOD_VEX_0F388E_PREFIX_2 */
11923 { "vpmaskmov%LW", { Mx, Vex, XM } },
11924 },
11925 #define NEED_MOD_TABLE
11926 #include "i386-dis-evex.h"
11927 #undef NEED_MOD_TABLE
11928 };
11929
11930 static const struct dis386 rm_table[][8] = {
11931 {
11932 /* RM_C6_REG_7 */
11933 { "xabort", { Skip_MODRM, Ib } },
11934 },
11935 {
11936 /* RM_C7_REG_7 */
11937 { "xbeginT", { Skip_MODRM, Jv } },
11938 },
11939 {
11940 /* RM_0F01_REG_0 */
11941 { Bad_Opcode },
11942 { "vmcall", { Skip_MODRM } },
11943 { "vmlaunch", { Skip_MODRM } },
11944 { "vmresume", { Skip_MODRM } },
11945 { "vmxoff", { Skip_MODRM } },
11946 },
11947 {
11948 /* RM_0F01_REG_1 */
11949 { "monitor", { { OP_Monitor, 0 } } },
11950 { "mwait", { { OP_Mwait, 0 } } },
11951 { "clac", { Skip_MODRM } },
11952 { "stac", { Skip_MODRM } },
11953 { Bad_Opcode },
11954 { Bad_Opcode },
11955 { Bad_Opcode },
11956 { "encls", { Skip_MODRM } },
11957 },
11958 {
11959 /* RM_0F01_REG_2 */
11960 { "xgetbv", { Skip_MODRM } },
11961 { "xsetbv", { Skip_MODRM } },
11962 { Bad_Opcode },
11963 { Bad_Opcode },
11964 { "vmfunc", { Skip_MODRM } },
11965 { "xend", { Skip_MODRM } },
11966 { "xtest", { Skip_MODRM } },
11967 { "enclu", { Skip_MODRM } },
11968 },
11969 {
11970 /* RM_0F01_REG_3 */
11971 { "vmrun", { Skip_MODRM } },
11972 { "vmmcall", { Skip_MODRM } },
11973 { "vmload", { Skip_MODRM } },
11974 { "vmsave", { Skip_MODRM } },
11975 { "stgi", { Skip_MODRM } },
11976 { "clgi", { Skip_MODRM } },
11977 { "skinit", { Skip_MODRM } },
11978 { "invlpga", { Skip_MODRM } },
11979 },
11980 {
11981 /* RM_0F01_REG_7 */
11982 { "swapgs", { Skip_MODRM } },
11983 { "rdtscp", { Skip_MODRM } },
11984 },
11985 {
11986 /* RM_0FAE_REG_5 */
11987 { "lfence", { Skip_MODRM } },
11988 },
11989 {
11990 /* RM_0FAE_REG_6 */
11991 { "mfence", { Skip_MODRM } },
11992 },
11993 {
11994 /* RM_0FAE_REG_7 */
11995 { "sfence", { Skip_MODRM } },
11996 },
11997 };
11998
11999 #define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
12000
12001 /* We use the high bit to indicate different name for the same
12002 prefix. */
12003 #define REP_PREFIX (0xf3 | 0x100)
12004 #define XACQUIRE_PREFIX (0xf2 | 0x200)
12005 #define XRELEASE_PREFIX (0xf3 | 0x400)
12006 #define BND_PREFIX (0xf2 | 0x400)
12007
12008 static int
12009 ckprefix (void)
12010 {
12011 int newrex, i, length;
12012 rex = 0;
12013 rex_ignored = 0;
12014 prefixes = 0;
12015 used_prefixes = 0;
12016 rex_used = 0;
12017 last_lock_prefix = -1;
12018 last_repz_prefix = -1;
12019 last_repnz_prefix = -1;
12020 last_data_prefix = -1;
12021 last_addr_prefix = -1;
12022 last_rex_prefix = -1;
12023 last_seg_prefix = -1;
12024 fwait_prefix = -1;
12025 active_seg_prefix = 0;
12026 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
12027 all_prefixes[i] = 0;
12028 i = 0;
12029 length = 0;
12030 /* The maximum instruction length is 15bytes. */
12031 while (length < MAX_CODE_LENGTH - 1)
12032 {
12033 FETCH_DATA (the_info, codep + 1);
12034 newrex = 0;
12035 switch (*codep)
12036 {
12037 /* REX prefixes family. */
12038 case 0x40:
12039 case 0x41:
12040 case 0x42:
12041 case 0x43:
12042 case 0x44:
12043 case 0x45:
12044 case 0x46:
12045 case 0x47:
12046 case 0x48:
12047 case 0x49:
12048 case 0x4a:
12049 case 0x4b:
12050 case 0x4c:
12051 case 0x4d:
12052 case 0x4e:
12053 case 0x4f:
12054 if (address_mode == mode_64bit)
12055 newrex = *codep;
12056 else
12057 return 1;
12058 last_rex_prefix = i;
12059 break;
12060 case 0xf3:
12061 prefixes |= PREFIX_REPZ;
12062 last_repz_prefix = i;
12063 break;
12064 case 0xf2:
12065 prefixes |= PREFIX_REPNZ;
12066 last_repnz_prefix = i;
12067 break;
12068 case 0xf0:
12069 prefixes |= PREFIX_LOCK;
12070 last_lock_prefix = i;
12071 break;
12072 case 0x2e:
12073 prefixes |= PREFIX_CS;
12074 last_seg_prefix = i;
12075 active_seg_prefix = PREFIX_CS;
12076 break;
12077 case 0x36:
12078 prefixes |= PREFIX_SS;
12079 last_seg_prefix = i;
12080 active_seg_prefix = PREFIX_SS;
12081 break;
12082 case 0x3e:
12083 prefixes |= PREFIX_DS;
12084 last_seg_prefix = i;
12085 active_seg_prefix = PREFIX_DS;
12086 break;
12087 case 0x26:
12088 prefixes |= PREFIX_ES;
12089 last_seg_prefix = i;
12090 active_seg_prefix = PREFIX_ES;
12091 break;
12092 case 0x64:
12093 prefixes |= PREFIX_FS;
12094 last_seg_prefix = i;
12095 active_seg_prefix = PREFIX_FS;
12096 break;
12097 case 0x65:
12098 prefixes |= PREFIX_GS;
12099 last_seg_prefix = i;
12100 active_seg_prefix = PREFIX_GS;
12101 break;
12102 case 0x66:
12103 prefixes |= PREFIX_DATA;
12104 last_data_prefix = i;
12105 break;
12106 case 0x67:
12107 prefixes |= PREFIX_ADDR;
12108 last_addr_prefix = i;
12109 break;
12110 case FWAIT_OPCODE:
12111 /* fwait is really an instruction. If there are prefixes
12112 before the fwait, they belong to the fwait, *not* to the
12113 following instruction. */
12114 fwait_prefix = i;
12115 if (prefixes || rex)
12116 {
12117 prefixes |= PREFIX_FWAIT;
12118 codep++;
12119 /* This ensures that the previous REX prefixes are noticed
12120 as unused prefixes, as in the return case below. */
12121 rex_used = rex;
12122 return 1;
12123 }
12124 prefixes = PREFIX_FWAIT;
12125 break;
12126 default:
12127 return 1;
12128 }
12129 /* Rex is ignored when followed by another prefix. */
12130 if (rex)
12131 {
12132 rex_used = rex;
12133 return 1;
12134 }
12135 if (*codep != FWAIT_OPCODE)
12136 all_prefixes[i++] = *codep;
12137 rex = newrex;
12138 codep++;
12139 length++;
12140 }
12141 return 0;
12142 }
12143
12144 /* Return the name of the prefix byte PREF, or NULL if PREF is not a
12145 prefix byte. */
12146
12147 static const char *
12148 prefix_name (int pref, int sizeflag)
12149 {
12150 static const char *rexes [16] =
12151 {
12152 "rex", /* 0x40 */
12153 "rex.B", /* 0x41 */
12154 "rex.X", /* 0x42 */
12155 "rex.XB", /* 0x43 */
12156 "rex.R", /* 0x44 */
12157 "rex.RB", /* 0x45 */
12158 "rex.RX", /* 0x46 */
12159 "rex.RXB", /* 0x47 */
12160 "rex.W", /* 0x48 */
12161 "rex.WB", /* 0x49 */
12162 "rex.WX", /* 0x4a */
12163 "rex.WXB", /* 0x4b */
12164 "rex.WR", /* 0x4c */
12165 "rex.WRB", /* 0x4d */
12166 "rex.WRX", /* 0x4e */
12167 "rex.WRXB", /* 0x4f */
12168 };
12169
12170 switch (pref)
12171 {
12172 /* REX prefixes family. */
12173 case 0x40:
12174 case 0x41:
12175 case 0x42:
12176 case 0x43:
12177 case 0x44:
12178 case 0x45:
12179 case 0x46:
12180 case 0x47:
12181 case 0x48:
12182 case 0x49:
12183 case 0x4a:
12184 case 0x4b:
12185 case 0x4c:
12186 case 0x4d:
12187 case 0x4e:
12188 case 0x4f:
12189 return rexes [pref - 0x40];
12190 case 0xf3:
12191 return "repz";
12192 case 0xf2:
12193 return "repnz";
12194 case 0xf0:
12195 return "lock";
12196 case 0x2e:
12197 return "cs";
12198 case 0x36:
12199 return "ss";
12200 case 0x3e:
12201 return "ds";
12202 case 0x26:
12203 return "es";
12204 case 0x64:
12205 return "fs";
12206 case 0x65:
12207 return "gs";
12208 case 0x66:
12209 return (sizeflag & DFLAG) ? "data16" : "data32";
12210 case 0x67:
12211 if (address_mode == mode_64bit)
12212 return (sizeflag & AFLAG) ? "addr32" : "addr64";
12213 else
12214 return (sizeflag & AFLAG) ? "addr16" : "addr32";
12215 case FWAIT_OPCODE:
12216 return "fwait";
12217 case REP_PREFIX:
12218 return "rep";
12219 case XACQUIRE_PREFIX:
12220 return "xacquire";
12221 case XRELEASE_PREFIX:
12222 return "xrelease";
12223 case BND_PREFIX:
12224 return "bnd";
12225 default:
12226 return NULL;
12227 }
12228 }
12229
12230 static char op_out[MAX_OPERANDS][100];
12231 static int op_ad, op_index[MAX_OPERANDS];
12232 static int two_source_ops;
12233 static bfd_vma op_address[MAX_OPERANDS];
12234 static bfd_vma op_riprel[MAX_OPERANDS];
12235 static bfd_vma start_pc;
12236
12237 /*
12238 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
12239 * (see topic "Redundant prefixes" in the "Differences from 8086"
12240 * section of the "Virtual 8086 Mode" chapter.)
12241 * 'pc' should be the address of this instruction, it will
12242 * be used to print the target address if this is a relative jump or call
12243 * The function returns the length of this instruction in bytes.
12244 */
12245
12246 static char intel_syntax;
12247 static char intel_mnemonic = !SYSV386_COMPAT;
12248 static char open_char;
12249 static char close_char;
12250 static char separator_char;
12251 static char scale_char;
12252
12253 /* Here for backwards compatibility. When gdb stops using
12254 print_insn_i386_att and print_insn_i386_intel these functions can
12255 disappear, and print_insn_i386 be merged into print_insn. */
12256 int
12257 print_insn_i386_att (bfd_vma pc, disassemble_info *info)
12258 {
12259 intel_syntax = 0;
12260
12261 return print_insn (pc, info);
12262 }
12263
12264 int
12265 print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
12266 {
12267 intel_syntax = 1;
12268
12269 return print_insn (pc, info);
12270 }
12271
12272 int
12273 print_insn_i386 (bfd_vma pc, disassemble_info *info)
12274 {
12275 intel_syntax = -1;
12276
12277 return print_insn (pc, info);
12278 }
12279
12280 void
12281 print_i386_disassembler_options (FILE *stream)
12282 {
12283 fprintf (stream, _("\n\
12284 The following i386/x86-64 specific disassembler options are supported for use\n\
12285 with the -M switch (multiple options should be separated by commas):\n"));
12286
12287 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
12288 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
12289 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
12290 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
12291 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
12292 fprintf (stream, _(" att-mnemonic\n"
12293 " Display instruction in AT&T mnemonic\n"));
12294 fprintf (stream, _(" intel-mnemonic\n"
12295 " Display instruction in Intel mnemonic\n"));
12296 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
12297 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
12298 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
12299 fprintf (stream, _(" data32 Assume 32bit data size\n"));
12300 fprintf (stream, _(" data16 Assume 16bit data size\n"));
12301 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
12302 }
12303
12304 /* Bad opcode. */
12305 static const struct dis386 bad_opcode = { "(bad)", { XX } };
12306
12307 /* Get a pointer to struct dis386 with a valid name. */
12308
12309 static const struct dis386 *
12310 get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
12311 {
12312 int vindex, vex_table_index;
12313
12314 if (dp->name != NULL)
12315 return dp;
12316
12317 switch (dp->op[0].bytemode)
12318 {
12319 case USE_REG_TABLE:
12320 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
12321 break;
12322
12323 case USE_MOD_TABLE:
12324 vindex = modrm.mod == 0x3 ? 1 : 0;
12325 dp = &mod_table[dp->op[1].bytemode][vindex];
12326 break;
12327
12328 case USE_RM_TABLE:
12329 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
12330 break;
12331
12332 case USE_PREFIX_TABLE:
12333 if (need_vex)
12334 {
12335 /* The prefix in VEX is implicit. */
12336 switch (vex.prefix)
12337 {
12338 case 0:
12339 vindex = 0;
12340 break;
12341 case REPE_PREFIX_OPCODE:
12342 vindex = 1;
12343 break;
12344 case DATA_PREFIX_OPCODE:
12345 vindex = 2;
12346 break;
12347 case REPNE_PREFIX_OPCODE:
12348 vindex = 3;
12349 break;
12350 default:
12351 abort ();
12352 break;
12353 }
12354 }
12355 else
12356 {
12357 int last_prefix = -1;
12358 int prefix = 0;
12359 vindex = 0;
12360 /* We check PREFIX_REPNZ and PREFIX_REPZ before PREFIX_DATA.
12361 When there are multiple PREFIX_REPNZ and PREFIX_REPZ, the
12362 last one wins. */
12363 if ((prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) != 0)
12364 {
12365 if (last_repz_prefix > last_repnz_prefix)
12366 {
12367 vindex = 1;
12368 prefix = PREFIX_REPZ;
12369 last_prefix = last_repz_prefix;
12370 }
12371 else
12372 {
12373 vindex = 3;
12374 prefix = PREFIX_REPNZ;
12375 last_prefix = last_repnz_prefix;
12376 }
12377
12378 /* Ignore the invalid index if it isn't mandatory. */
12379 if (!mandatory_prefix
12380 && (prefix_table[dp->op[1].bytemode][vindex].name
12381 == NULL)
12382 && (prefix_table[dp->op[1].bytemode][vindex].op[0].bytemode
12383 == 0))
12384 vindex = 0;
12385 }
12386
12387 if (vindex == 0 && (prefixes & PREFIX_DATA) != 0)
12388 {
12389 vindex = 2;
12390 prefix = PREFIX_DATA;
12391 last_prefix = last_data_prefix;
12392 }
12393
12394 if (vindex != 0)
12395 {
12396 used_prefixes |= prefix;
12397 all_prefixes[last_prefix] = 0;
12398 }
12399 }
12400 dp = &prefix_table[dp->op[1].bytemode][vindex];
12401 break;
12402
12403 case USE_X86_64_TABLE:
12404 vindex = address_mode == mode_64bit ? 1 : 0;
12405 dp = &x86_64_table[dp->op[1].bytemode][vindex];
12406 break;
12407
12408 case USE_3BYTE_TABLE:
12409 FETCH_DATA (info, codep + 2);
12410 vindex = *codep++;
12411 dp = &three_byte_table[dp->op[1].bytemode][vindex];
12412 end_codep = codep;
12413 modrm.mod = (*codep >> 6) & 3;
12414 modrm.reg = (*codep >> 3) & 7;
12415 modrm.rm = *codep & 7;
12416 break;
12417
12418 case USE_VEX_LEN_TABLE:
12419 if (!need_vex)
12420 abort ();
12421
12422 switch (vex.length)
12423 {
12424 case 128:
12425 vindex = 0;
12426 break;
12427 case 256:
12428 vindex = 1;
12429 break;
12430 default:
12431 abort ();
12432 break;
12433 }
12434
12435 dp = &vex_len_table[dp->op[1].bytemode][vindex];
12436 break;
12437
12438 case USE_XOP_8F_TABLE:
12439 FETCH_DATA (info, codep + 3);
12440 /* All bits in the REX prefix are ignored. */
12441 rex_ignored = rex;
12442 rex = ~(*codep >> 5) & 0x7;
12443
12444 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
12445 switch ((*codep & 0x1f))
12446 {
12447 default:
12448 dp = &bad_opcode;
12449 return dp;
12450 case 0x8:
12451 vex_table_index = XOP_08;
12452 break;
12453 case 0x9:
12454 vex_table_index = XOP_09;
12455 break;
12456 case 0xa:
12457 vex_table_index = XOP_0A;
12458 break;
12459 }
12460 codep++;
12461 vex.w = *codep & 0x80;
12462 if (vex.w && address_mode == mode_64bit)
12463 rex |= REX_W;
12464
12465 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12466 if (address_mode != mode_64bit
12467 && vex.register_specifier > 0x7)
12468 {
12469 dp = &bad_opcode;
12470 return dp;
12471 }
12472
12473 vex.length = (*codep & 0x4) ? 256 : 128;
12474 switch ((*codep & 0x3))
12475 {
12476 case 0:
12477 vex.prefix = 0;
12478 break;
12479 case 1:
12480 vex.prefix = DATA_PREFIX_OPCODE;
12481 break;
12482 case 2:
12483 vex.prefix = REPE_PREFIX_OPCODE;
12484 break;
12485 case 3:
12486 vex.prefix = REPNE_PREFIX_OPCODE;
12487 break;
12488 }
12489 need_vex = 1;
12490 need_vex_reg = 1;
12491 codep++;
12492 vindex = *codep++;
12493 dp = &xop_table[vex_table_index][vindex];
12494
12495 end_codep = codep;
12496 FETCH_DATA (info, codep + 1);
12497 modrm.mod = (*codep >> 6) & 3;
12498 modrm.reg = (*codep >> 3) & 7;
12499 modrm.rm = *codep & 7;
12500 break;
12501
12502 case USE_VEX_C4_TABLE:
12503 /* VEX prefix. */
12504 FETCH_DATA (info, codep + 3);
12505 /* All bits in the REX prefix are ignored. */
12506 rex_ignored = rex;
12507 rex = ~(*codep >> 5) & 0x7;
12508 switch ((*codep & 0x1f))
12509 {
12510 default:
12511 dp = &bad_opcode;
12512 return dp;
12513 case 0x1:
12514 vex_table_index = VEX_0F;
12515 break;
12516 case 0x2:
12517 vex_table_index = VEX_0F38;
12518 break;
12519 case 0x3:
12520 vex_table_index = VEX_0F3A;
12521 break;
12522 }
12523 codep++;
12524 vex.w = *codep & 0x80;
12525 if (vex.w && address_mode == mode_64bit)
12526 rex |= REX_W;
12527
12528 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12529 if (address_mode != mode_64bit
12530 && vex.register_specifier > 0x7)
12531 {
12532 dp = &bad_opcode;
12533 return dp;
12534 }
12535
12536 vex.length = (*codep & 0x4) ? 256 : 128;
12537 switch ((*codep & 0x3))
12538 {
12539 case 0:
12540 vex.prefix = 0;
12541 break;
12542 case 1:
12543 vex.prefix = DATA_PREFIX_OPCODE;
12544 break;
12545 case 2:
12546 vex.prefix = REPE_PREFIX_OPCODE;
12547 break;
12548 case 3:
12549 vex.prefix = REPNE_PREFIX_OPCODE;
12550 break;
12551 }
12552 need_vex = 1;
12553 need_vex_reg = 1;
12554 codep++;
12555 vindex = *codep++;
12556 dp = &vex_table[vex_table_index][vindex];
12557 end_codep = codep;
12558 /* There is no MODRM byte for VEX [82|77]. */
12559 if (vindex != 0x77 && vindex != 0x82)
12560 {
12561 FETCH_DATA (info, codep + 1);
12562 modrm.mod = (*codep >> 6) & 3;
12563 modrm.reg = (*codep >> 3) & 7;
12564 modrm.rm = *codep & 7;
12565 }
12566 break;
12567
12568 case USE_VEX_C5_TABLE:
12569 /* VEX prefix. */
12570 FETCH_DATA (info, codep + 2);
12571 /* All bits in the REX prefix are ignored. */
12572 rex_ignored = rex;
12573 rex = (*codep & 0x80) ? 0 : REX_R;
12574
12575 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12576 if (address_mode != mode_64bit
12577 && vex.register_specifier > 0x7)
12578 {
12579 dp = &bad_opcode;
12580 return dp;
12581 }
12582
12583 vex.w = 0;
12584
12585 vex.length = (*codep & 0x4) ? 256 : 128;
12586 switch ((*codep & 0x3))
12587 {
12588 case 0:
12589 vex.prefix = 0;
12590 break;
12591 case 1:
12592 vex.prefix = DATA_PREFIX_OPCODE;
12593 break;
12594 case 2:
12595 vex.prefix = REPE_PREFIX_OPCODE;
12596 break;
12597 case 3:
12598 vex.prefix = REPNE_PREFIX_OPCODE;
12599 break;
12600 }
12601 need_vex = 1;
12602 need_vex_reg = 1;
12603 codep++;
12604 vindex = *codep++;
12605 dp = &vex_table[dp->op[1].bytemode][vindex];
12606 end_codep = codep;
12607 /* There is no MODRM byte for VEX [82|77]. */
12608 if (vindex != 0x77 && vindex != 0x82)
12609 {
12610 FETCH_DATA (info, codep + 1);
12611 modrm.mod = (*codep >> 6) & 3;
12612 modrm.reg = (*codep >> 3) & 7;
12613 modrm.rm = *codep & 7;
12614 }
12615 break;
12616
12617 case USE_VEX_W_TABLE:
12618 if (!need_vex)
12619 abort ();
12620
12621 dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
12622 break;
12623
12624 case USE_EVEX_TABLE:
12625 two_source_ops = 0;
12626 /* EVEX prefix. */
12627 vex.evex = 1;
12628 FETCH_DATA (info, codep + 4);
12629 /* All bits in the REX prefix are ignored. */
12630 rex_ignored = rex;
12631 /* The first byte after 0x62. */
12632 rex = ~(*codep >> 5) & 0x7;
12633 vex.r = *codep & 0x10;
12634 switch ((*codep & 0xf))
12635 {
12636 default:
12637 return &bad_opcode;
12638 case 0x1:
12639 vex_table_index = EVEX_0F;
12640 break;
12641 case 0x2:
12642 vex_table_index = EVEX_0F38;
12643 break;
12644 case 0x3:
12645 vex_table_index = EVEX_0F3A;
12646 break;
12647 }
12648
12649 /* The second byte after 0x62. */
12650 codep++;
12651 vex.w = *codep & 0x80;
12652 if (vex.w && address_mode == mode_64bit)
12653 rex |= REX_W;
12654
12655 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12656 if (address_mode != mode_64bit)
12657 {
12658 /* In 16/32-bit mode silently ignore following bits. */
12659 rex &= ~REX_B;
12660 vex.r = 1;
12661 vex.v = 1;
12662 vex.register_specifier &= 0x7;
12663 }
12664
12665 /* The U bit. */
12666 if (!(*codep & 0x4))
12667 return &bad_opcode;
12668
12669 switch ((*codep & 0x3))
12670 {
12671 case 0:
12672 vex.prefix = 0;
12673 break;
12674 case 1:
12675 vex.prefix = DATA_PREFIX_OPCODE;
12676 break;
12677 case 2:
12678 vex.prefix = REPE_PREFIX_OPCODE;
12679 break;
12680 case 3:
12681 vex.prefix = REPNE_PREFIX_OPCODE;
12682 break;
12683 }
12684
12685 /* The third byte after 0x62. */
12686 codep++;
12687
12688 /* Remember the static rounding bits. */
12689 vex.ll = (*codep >> 5) & 3;
12690 vex.b = (*codep & 0x10) != 0;
12691
12692 vex.v = *codep & 0x8;
12693 vex.mask_register_specifier = *codep & 0x7;
12694 vex.zeroing = *codep & 0x80;
12695
12696 need_vex = 1;
12697 need_vex_reg = 1;
12698 codep++;
12699 vindex = *codep++;
12700 dp = &evex_table[vex_table_index][vindex];
12701 end_codep = codep;
12702 FETCH_DATA (info, codep + 1);
12703 modrm.mod = (*codep >> 6) & 3;
12704 modrm.reg = (*codep >> 3) & 7;
12705 modrm.rm = *codep & 7;
12706
12707 /* Set vector length. */
12708 if (modrm.mod == 3 && vex.b)
12709 vex.length = 512;
12710 else
12711 {
12712 switch (vex.ll)
12713 {
12714 case 0x0:
12715 vex.length = 128;
12716 break;
12717 case 0x1:
12718 vex.length = 256;
12719 break;
12720 case 0x2:
12721 vex.length = 512;
12722 break;
12723 default:
12724 return &bad_opcode;
12725 }
12726 }
12727 break;
12728
12729 case 0:
12730 dp = &bad_opcode;
12731 break;
12732
12733 default:
12734 abort ();
12735 }
12736
12737 if (dp->name != NULL)
12738 return dp;
12739 else
12740 return get_valid_dis386 (dp, info);
12741 }
12742
12743 static void
12744 get_sib (disassemble_info *info, int sizeflag)
12745 {
12746 /* If modrm.mod == 3, operand must be register. */
12747 if (need_modrm
12748 && ((sizeflag & AFLAG) || address_mode == mode_64bit)
12749 && modrm.mod != 3
12750 && modrm.rm == 4)
12751 {
12752 FETCH_DATA (info, codep + 2);
12753 sib.index = (codep [1] >> 3) & 7;
12754 sib.scale = (codep [1] >> 6) & 3;
12755 sib.base = codep [1] & 7;
12756 }
12757 }
12758
12759 static int
12760 print_insn (bfd_vma pc, disassemble_info *info)
12761 {
12762 const struct dis386 *dp;
12763 int i;
12764 char *op_txt[MAX_OPERANDS];
12765 int needcomma;
12766 int sizeflag, orig_sizeflag;
12767 const char *p;
12768 struct dis_private priv;
12769 int prefix_length;
12770
12771 priv.orig_sizeflag = AFLAG | DFLAG;
12772 if ((info->mach & bfd_mach_i386_i386) != 0)
12773 address_mode = mode_32bit;
12774 else if (info->mach == bfd_mach_i386_i8086)
12775 {
12776 address_mode = mode_16bit;
12777 priv.orig_sizeflag = 0;
12778 }
12779 else
12780 address_mode = mode_64bit;
12781
12782 if (intel_syntax == (char) -1)
12783 intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
12784
12785 for (p = info->disassembler_options; p != NULL; )
12786 {
12787 if (CONST_STRNEQ (p, "x86-64"))
12788 {
12789 address_mode = mode_64bit;
12790 priv.orig_sizeflag = AFLAG | DFLAG;
12791 }
12792 else if (CONST_STRNEQ (p, "i386"))
12793 {
12794 address_mode = mode_32bit;
12795 priv.orig_sizeflag = AFLAG | DFLAG;
12796 }
12797 else if (CONST_STRNEQ (p, "i8086"))
12798 {
12799 address_mode = mode_16bit;
12800 priv.orig_sizeflag = 0;
12801 }
12802 else if (CONST_STRNEQ (p, "intel"))
12803 {
12804 intel_syntax = 1;
12805 if (CONST_STRNEQ (p + 5, "-mnemonic"))
12806 intel_mnemonic = 1;
12807 }
12808 else if (CONST_STRNEQ (p, "att"))
12809 {
12810 intel_syntax = 0;
12811 if (CONST_STRNEQ (p + 3, "-mnemonic"))
12812 intel_mnemonic = 0;
12813 }
12814 else if (CONST_STRNEQ (p, "addr"))
12815 {
12816 if (address_mode == mode_64bit)
12817 {
12818 if (p[4] == '3' && p[5] == '2')
12819 priv.orig_sizeflag &= ~AFLAG;
12820 else if (p[4] == '6' && p[5] == '4')
12821 priv.orig_sizeflag |= AFLAG;
12822 }
12823 else
12824 {
12825 if (p[4] == '1' && p[5] == '6')
12826 priv.orig_sizeflag &= ~AFLAG;
12827 else if (p[4] == '3' && p[5] == '2')
12828 priv.orig_sizeflag |= AFLAG;
12829 }
12830 }
12831 else if (CONST_STRNEQ (p, "data"))
12832 {
12833 if (p[4] == '1' && p[5] == '6')
12834 priv.orig_sizeflag &= ~DFLAG;
12835 else if (p[4] == '3' && p[5] == '2')
12836 priv.orig_sizeflag |= DFLAG;
12837 }
12838 else if (CONST_STRNEQ (p, "suffix"))
12839 priv.orig_sizeflag |= SUFFIX_ALWAYS;
12840
12841 p = strchr (p, ',');
12842 if (p != NULL)
12843 p++;
12844 }
12845
12846 if (intel_syntax)
12847 {
12848 names64 = intel_names64;
12849 names32 = intel_names32;
12850 names16 = intel_names16;
12851 names8 = intel_names8;
12852 names8rex = intel_names8rex;
12853 names_seg = intel_names_seg;
12854 names_mm = intel_names_mm;
12855 names_bnd = intel_names_bnd;
12856 names_xmm = intel_names_xmm;
12857 names_ymm = intel_names_ymm;
12858 names_zmm = intel_names_zmm;
12859 index64 = intel_index64;
12860 index32 = intel_index32;
12861 names_mask = intel_names_mask;
12862 index16 = intel_index16;
12863 open_char = '[';
12864 close_char = ']';
12865 separator_char = '+';
12866 scale_char = '*';
12867 }
12868 else
12869 {
12870 names64 = att_names64;
12871 names32 = att_names32;
12872 names16 = att_names16;
12873 names8 = att_names8;
12874 names8rex = att_names8rex;
12875 names_seg = att_names_seg;
12876 names_mm = att_names_mm;
12877 names_bnd = att_names_bnd;
12878 names_xmm = att_names_xmm;
12879 names_ymm = att_names_ymm;
12880 names_zmm = att_names_zmm;
12881 index64 = att_index64;
12882 index32 = att_index32;
12883 names_mask = att_names_mask;
12884 index16 = att_index16;
12885 open_char = '(';
12886 close_char = ')';
12887 separator_char = ',';
12888 scale_char = ',';
12889 }
12890
12891 /* The output looks better if we put 7 bytes on a line, since that
12892 puts most long word instructions on a single line. Use 8 bytes
12893 for Intel L1OM. */
12894 if ((info->mach & bfd_mach_l1om) != 0)
12895 info->bytes_per_line = 8;
12896 else
12897 info->bytes_per_line = 7;
12898
12899 info->private_data = &priv;
12900 priv.max_fetched = priv.the_buffer;
12901 priv.insn_start = pc;
12902
12903 obuf[0] = 0;
12904 for (i = 0; i < MAX_OPERANDS; ++i)
12905 {
12906 op_out[i][0] = 0;
12907 op_index[i] = -1;
12908 }
12909
12910 the_info = info;
12911 start_pc = pc;
12912 start_codep = priv.the_buffer;
12913 codep = priv.the_buffer;
12914
12915 if (OPCODES_SIGSETJMP (priv.bailout) != 0)
12916 {
12917 const char *name;
12918
12919 /* Getting here means we tried for data but didn't get it. That
12920 means we have an incomplete instruction of some sort. Just
12921 print the first byte as a prefix or a .byte pseudo-op. */
12922 if (codep > priv.the_buffer)
12923 {
12924 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
12925 if (name != NULL)
12926 (*info->fprintf_func) (info->stream, "%s", name);
12927 else
12928 {
12929 /* Just print the first byte as a .byte instruction. */
12930 (*info->fprintf_func) (info->stream, ".byte 0x%x",
12931 (unsigned int) priv.the_buffer[0]);
12932 }
12933
12934 return 1;
12935 }
12936
12937 return -1;
12938 }
12939
12940 obufp = obuf;
12941 sizeflag = priv.orig_sizeflag;
12942
12943 if (!ckprefix () || rex_used)
12944 {
12945 /* Too many prefixes or unused REX prefixes. */
12946 for (i = 0;
12947 i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
12948 i++)
12949 (*info->fprintf_func) (info->stream, "%s%s",
12950 i == 0 ? "" : " ",
12951 prefix_name (all_prefixes[i], sizeflag));
12952 return i;
12953 }
12954
12955 insn_codep = codep;
12956
12957 FETCH_DATA (info, codep + 1);
12958 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
12959
12960 if (((prefixes & PREFIX_FWAIT)
12961 && ((*codep < 0xd8) || (*codep > 0xdf))))
12962 {
12963 /* Handle prefixes before fwait. */
12964 for (i = 0; i < fwait_prefix && all_prefixes[i];
12965 i++)
12966 (*info->fprintf_func) (info->stream, "%s ",
12967 prefix_name (all_prefixes[i], sizeflag));
12968 (*info->fprintf_func) (info->stream, "fwait");
12969 return i + 1;
12970 }
12971
12972 if (*codep == 0x0f)
12973 {
12974 unsigned char threebyte;
12975 FETCH_DATA (info, codep + 2);
12976 threebyte = *++codep;
12977 dp = &dis386_twobyte[threebyte];
12978 need_modrm = twobyte_has_modrm[*codep];
12979 mandatory_prefix = twobyte_has_mandatory_prefix[*codep];
12980 codep++;
12981 }
12982 else
12983 {
12984 dp = &dis386[*codep];
12985 need_modrm = onebyte_has_modrm[*codep];
12986 mandatory_prefix = 0;
12987 codep++;
12988 }
12989
12990 /* Save sizeflag for printing the extra prefixes later before updating
12991 it for mnemonic and operand processing. The prefix names depend
12992 only on the address mode. */
12993 orig_sizeflag = sizeflag;
12994 if (prefixes & PREFIX_ADDR)
12995 sizeflag ^= AFLAG;
12996 if ((prefixes & PREFIX_DATA))
12997 sizeflag ^= DFLAG;
12998
12999 end_codep = codep;
13000 if (need_modrm)
13001 {
13002 FETCH_DATA (info, codep + 1);
13003 modrm.mod = (*codep >> 6) & 3;
13004 modrm.reg = (*codep >> 3) & 7;
13005 modrm.rm = *codep & 7;
13006 }
13007
13008 need_vex = 0;
13009 need_vex_reg = 0;
13010 vex_w_done = 0;
13011 vex.evex = 0;
13012
13013 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
13014 {
13015 get_sib (info, sizeflag);
13016 dofloat (sizeflag);
13017 }
13018 else
13019 {
13020 dp = get_valid_dis386 (dp, info);
13021 if (dp != NULL && putop (dp->name, sizeflag) == 0)
13022 {
13023 get_sib (info, sizeflag);
13024 for (i = 0; i < MAX_OPERANDS; ++i)
13025 {
13026 obufp = op_out[i];
13027 op_ad = MAX_OPERANDS - 1 - i;
13028 if (dp->op[i].rtn)
13029 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
13030 /* For EVEX instruction after the last operand masking
13031 should be printed. */
13032 if (i == 0 && vex.evex)
13033 {
13034 /* Don't print {%k0}. */
13035 if (vex.mask_register_specifier)
13036 {
13037 oappend ("{");
13038 oappend (names_mask[vex.mask_register_specifier]);
13039 oappend ("}");
13040 }
13041 if (vex.zeroing)
13042 oappend ("{z}");
13043 }
13044 }
13045 }
13046 }
13047
13048 /* Check if the REX prefix is used. */
13049 if (rex_ignored == 0 && (rex ^ rex_used) == 0 && last_rex_prefix >= 0)
13050 all_prefixes[last_rex_prefix] = 0;
13051
13052 /* Check if the SEG prefix is used. */
13053 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
13054 | PREFIX_FS | PREFIX_GS)) != 0
13055 && (used_prefixes & active_seg_prefix) != 0)
13056 all_prefixes[last_seg_prefix] = 0;
13057
13058 /* Check if the ADDR prefix is used. */
13059 if ((prefixes & PREFIX_ADDR) != 0
13060 && (used_prefixes & PREFIX_ADDR) != 0)
13061 all_prefixes[last_addr_prefix] = 0;
13062
13063 /* Check if the DATA prefix is used. */
13064 if ((prefixes & PREFIX_DATA) != 0
13065 && (used_prefixes & PREFIX_DATA) != 0)
13066 all_prefixes[last_data_prefix] = 0;
13067
13068 /* Print the extra prefixes. */
13069 prefix_length = 0;
13070 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
13071 if (all_prefixes[i])
13072 {
13073 const char *name;
13074 name = prefix_name (all_prefixes[i], orig_sizeflag);
13075 if (name == NULL)
13076 abort ();
13077 prefix_length += strlen (name) + 1;
13078 (*info->fprintf_func) (info->stream, "%s ", name);
13079 }
13080
13081 /* If the mandatory PREFIX_REPZ/PREFIX_REPNZ/PREFIX_DATA prefix is
13082 unused, opcode is invalid. Since the PREFIX_DATA prefix may be
13083 used by putop and MMX/SSE operand and may be overriden by the
13084 PREFIX_REPZ/PREFIX_REPNZ fix, we check the PREFIX_DATA prefix
13085 separately. */
13086 if (mandatory_prefix
13087 && dp != &bad_opcode
13088 && (((prefixes
13089 & (PREFIX_REPZ | PREFIX_REPNZ)) != 0
13090 && (used_prefixes
13091 & (PREFIX_REPZ | PREFIX_REPNZ)) == 0)
13092 || ((((prefixes
13093 & (PREFIX_REPZ | PREFIX_REPNZ | PREFIX_DATA))
13094 == PREFIX_DATA)
13095 && (used_prefixes & PREFIX_DATA) == 0))))
13096 {
13097 (*info->fprintf_func) (info->stream, "(bad)");
13098 return end_codep - priv.the_buffer;
13099 }
13100
13101 /* Check maximum code length. */
13102 if ((codep - start_codep) > MAX_CODE_LENGTH)
13103 {
13104 (*info->fprintf_func) (info->stream, "(bad)");
13105 return MAX_CODE_LENGTH;
13106 }
13107
13108 obufp = mnemonicendp;
13109 for (i = strlen (obuf) + prefix_length; i < 6; i++)
13110 oappend (" ");
13111 oappend (" ");
13112 (*info->fprintf_func) (info->stream, "%s", obuf);
13113
13114 /* The enter and bound instructions are printed with operands in the same
13115 order as the intel book; everything else is printed in reverse order. */
13116 if (intel_syntax || two_source_ops)
13117 {
13118 bfd_vma riprel;
13119
13120 for (i = 0; i < MAX_OPERANDS; ++i)
13121 op_txt[i] = op_out[i];
13122
13123 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
13124 {
13125 op_ad = op_index[i];
13126 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
13127 op_index[MAX_OPERANDS - 1 - i] = op_ad;
13128 riprel = op_riprel[i];
13129 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
13130 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
13131 }
13132 }
13133 else
13134 {
13135 for (i = 0; i < MAX_OPERANDS; ++i)
13136 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
13137 }
13138
13139 needcomma = 0;
13140 for (i = 0; i < MAX_OPERANDS; ++i)
13141 if (*op_txt[i])
13142 {
13143 if (needcomma)
13144 (*info->fprintf_func) (info->stream, ",");
13145 if (op_index[i] != -1 && !op_riprel[i])
13146 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
13147 else
13148 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
13149 needcomma = 1;
13150 }
13151
13152 for (i = 0; i < MAX_OPERANDS; i++)
13153 if (op_index[i] != -1 && op_riprel[i])
13154 {
13155 (*info->fprintf_func) (info->stream, " # ");
13156 (*info->print_address_func) ((bfd_vma) (start_pc + codep - start_codep
13157 + op_address[op_index[i]]), info);
13158 break;
13159 }
13160 return codep - priv.the_buffer;
13161 }
13162
13163 static const char *float_mem[] = {
13164 /* d8 */
13165 "fadd{s|}",
13166 "fmul{s|}",
13167 "fcom{s|}",
13168 "fcomp{s|}",
13169 "fsub{s|}",
13170 "fsubr{s|}",
13171 "fdiv{s|}",
13172 "fdivr{s|}",
13173 /* d9 */
13174 "fld{s|}",
13175 "(bad)",
13176 "fst{s|}",
13177 "fstp{s|}",
13178 "fldenvIC",
13179 "fldcw",
13180 "fNstenvIC",
13181 "fNstcw",
13182 /* da */
13183 "fiadd{l|}",
13184 "fimul{l|}",
13185 "ficom{l|}",
13186 "ficomp{l|}",
13187 "fisub{l|}",
13188 "fisubr{l|}",
13189 "fidiv{l|}",
13190 "fidivr{l|}",
13191 /* db */
13192 "fild{l|}",
13193 "fisttp{l|}",
13194 "fist{l|}",
13195 "fistp{l|}",
13196 "(bad)",
13197 "fld{t||t|}",
13198 "(bad)",
13199 "fstp{t||t|}",
13200 /* dc */
13201 "fadd{l|}",
13202 "fmul{l|}",
13203 "fcom{l|}",
13204 "fcomp{l|}",
13205 "fsub{l|}",
13206 "fsubr{l|}",
13207 "fdiv{l|}",
13208 "fdivr{l|}",
13209 /* dd */
13210 "fld{l|}",
13211 "fisttp{ll|}",
13212 "fst{l||}",
13213 "fstp{l|}",
13214 "frstorIC",
13215 "(bad)",
13216 "fNsaveIC",
13217 "fNstsw",
13218 /* de */
13219 "fiadd",
13220 "fimul",
13221 "ficom",
13222 "ficomp",
13223 "fisub",
13224 "fisubr",
13225 "fidiv",
13226 "fidivr",
13227 /* df */
13228 "fild",
13229 "fisttp",
13230 "fist",
13231 "fistp",
13232 "fbld",
13233 "fild{ll|}",
13234 "fbstp",
13235 "fistp{ll|}",
13236 };
13237
13238 static const unsigned char float_mem_mode[] = {
13239 /* d8 */
13240 d_mode,
13241 d_mode,
13242 d_mode,
13243 d_mode,
13244 d_mode,
13245 d_mode,
13246 d_mode,
13247 d_mode,
13248 /* d9 */
13249 d_mode,
13250 0,
13251 d_mode,
13252 d_mode,
13253 0,
13254 w_mode,
13255 0,
13256 w_mode,
13257 /* da */
13258 d_mode,
13259 d_mode,
13260 d_mode,
13261 d_mode,
13262 d_mode,
13263 d_mode,
13264 d_mode,
13265 d_mode,
13266 /* db */
13267 d_mode,
13268 d_mode,
13269 d_mode,
13270 d_mode,
13271 0,
13272 t_mode,
13273 0,
13274 t_mode,
13275 /* dc */
13276 q_mode,
13277 q_mode,
13278 q_mode,
13279 q_mode,
13280 q_mode,
13281 q_mode,
13282 q_mode,
13283 q_mode,
13284 /* dd */
13285 q_mode,
13286 q_mode,
13287 q_mode,
13288 q_mode,
13289 0,
13290 0,
13291 0,
13292 w_mode,
13293 /* de */
13294 w_mode,
13295 w_mode,
13296 w_mode,
13297 w_mode,
13298 w_mode,
13299 w_mode,
13300 w_mode,
13301 w_mode,
13302 /* df */
13303 w_mode,
13304 w_mode,
13305 w_mode,
13306 w_mode,
13307 t_mode,
13308 q_mode,
13309 t_mode,
13310 q_mode
13311 };
13312
13313 #define ST { OP_ST, 0 }
13314 #define STi { OP_STi, 0 }
13315
13316 #define FGRPd9_2 NULL, { { NULL, 0 } }
13317 #define FGRPd9_4 NULL, { { NULL, 1 } }
13318 #define FGRPd9_5 NULL, { { NULL, 2 } }
13319 #define FGRPd9_6 NULL, { { NULL, 3 } }
13320 #define FGRPd9_7 NULL, { { NULL, 4 } }
13321 #define FGRPda_5 NULL, { { NULL, 5 } }
13322 #define FGRPdb_4 NULL, { { NULL, 6 } }
13323 #define FGRPde_3 NULL, { { NULL, 7 } }
13324 #define FGRPdf_4 NULL, { { NULL, 8 } }
13325
13326 static const struct dis386 float_reg[][8] = {
13327 /* d8 */
13328 {
13329 { "fadd", { ST, STi } },
13330 { "fmul", { ST, STi } },
13331 { "fcom", { STi } },
13332 { "fcomp", { STi } },
13333 { "fsub", { ST, STi } },
13334 { "fsubr", { ST, STi } },
13335 { "fdiv", { ST, STi } },
13336 { "fdivr", { ST, STi } },
13337 },
13338 /* d9 */
13339 {
13340 { "fld", { STi } },
13341 { "fxch", { STi } },
13342 { FGRPd9_2 },
13343 { Bad_Opcode },
13344 { FGRPd9_4 },
13345 { FGRPd9_5 },
13346 { FGRPd9_6 },
13347 { FGRPd9_7 },
13348 },
13349 /* da */
13350 {
13351 { "fcmovb", { ST, STi } },
13352 { "fcmove", { ST, STi } },
13353 { "fcmovbe",{ ST, STi } },
13354 { "fcmovu", { ST, STi } },
13355 { Bad_Opcode },
13356 { FGRPda_5 },
13357 { Bad_Opcode },
13358 { Bad_Opcode },
13359 },
13360 /* db */
13361 {
13362 { "fcmovnb",{ ST, STi } },
13363 { "fcmovne",{ ST, STi } },
13364 { "fcmovnbe",{ ST, STi } },
13365 { "fcmovnu",{ ST, STi } },
13366 { FGRPdb_4 },
13367 { "fucomi", { ST, STi } },
13368 { "fcomi", { ST, STi } },
13369 { Bad_Opcode },
13370 },
13371 /* dc */
13372 {
13373 { "fadd", { STi, ST } },
13374 { "fmul", { STi, ST } },
13375 { Bad_Opcode },
13376 { Bad_Opcode },
13377 { "fsub!M", { STi, ST } },
13378 { "fsubM", { STi, ST } },
13379 { "fdiv!M", { STi, ST } },
13380 { "fdivM", { STi, ST } },
13381 },
13382 /* dd */
13383 {
13384 { "ffree", { STi } },
13385 { Bad_Opcode },
13386 { "fst", { STi } },
13387 { "fstp", { STi } },
13388 { "fucom", { STi } },
13389 { "fucomp", { STi } },
13390 { Bad_Opcode },
13391 { Bad_Opcode },
13392 },
13393 /* de */
13394 {
13395 { "faddp", { STi, ST } },
13396 { "fmulp", { STi, ST } },
13397 { Bad_Opcode },
13398 { FGRPde_3 },
13399 { "fsub!Mp", { STi, ST } },
13400 { "fsubMp", { STi, ST } },
13401 { "fdiv!Mp", { STi, ST } },
13402 { "fdivMp", { STi, ST } },
13403 },
13404 /* df */
13405 {
13406 { "ffreep", { STi } },
13407 { Bad_Opcode },
13408 { Bad_Opcode },
13409 { Bad_Opcode },
13410 { FGRPdf_4 },
13411 { "fucomip", { ST, STi } },
13412 { "fcomip", { ST, STi } },
13413 { Bad_Opcode },
13414 },
13415 };
13416
13417 static char *fgrps[][8] = {
13418 /* d9_2 0 */
13419 {
13420 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13421 },
13422
13423 /* d9_4 1 */
13424 {
13425 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
13426 },
13427
13428 /* d9_5 2 */
13429 {
13430 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
13431 },
13432
13433 /* d9_6 3 */
13434 {
13435 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
13436 },
13437
13438 /* d9_7 4 */
13439 {
13440 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
13441 },
13442
13443 /* da_5 5 */
13444 {
13445 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13446 },
13447
13448 /* db_4 6 */
13449 {
13450 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
13451 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
13452 },
13453
13454 /* de_3 7 */
13455 {
13456 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13457 },
13458
13459 /* df_4 8 */
13460 {
13461 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13462 },
13463 };
13464
13465 static void
13466 swap_operand (void)
13467 {
13468 mnemonicendp[0] = '.';
13469 mnemonicendp[1] = 's';
13470 mnemonicendp += 2;
13471 }
13472
13473 static void
13474 OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
13475 int sizeflag ATTRIBUTE_UNUSED)
13476 {
13477 /* Skip mod/rm byte. */
13478 MODRM_CHECK;
13479 codep++;
13480 }
13481
13482 static void
13483 dofloat (int sizeflag)
13484 {
13485 const struct dis386 *dp;
13486 unsigned char floatop;
13487
13488 floatop = codep[-1];
13489
13490 if (modrm.mod != 3)
13491 {
13492 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
13493
13494 putop (float_mem[fp_indx], sizeflag);
13495 obufp = op_out[0];
13496 op_ad = 2;
13497 OP_E (float_mem_mode[fp_indx], sizeflag);
13498 return;
13499 }
13500 /* Skip mod/rm byte. */
13501 MODRM_CHECK;
13502 codep++;
13503
13504 dp = &float_reg[floatop - 0xd8][modrm.reg];
13505 if (dp->name == NULL)
13506 {
13507 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
13508
13509 /* Instruction fnstsw is only one with strange arg. */
13510 if (floatop == 0xdf && codep[-1] == 0xe0)
13511 strcpy (op_out[0], names16[0]);
13512 }
13513 else
13514 {
13515 putop (dp->name, sizeflag);
13516
13517 obufp = op_out[0];
13518 op_ad = 2;
13519 if (dp->op[0].rtn)
13520 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
13521
13522 obufp = op_out[1];
13523 op_ad = 1;
13524 if (dp->op[1].rtn)
13525 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
13526 }
13527 }
13528
13529 /* Like oappend (below), but S is a string starting with '%'.
13530 In Intel syntax, the '%' is elided. */
13531 static void
13532 oappend_maybe_intel (const char *s)
13533 {
13534 oappend (s + intel_syntax);
13535 }
13536
13537 static void
13538 OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
13539 {
13540 oappend_maybe_intel ("%st");
13541 }
13542
13543 static void
13544 OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
13545 {
13546 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
13547 oappend_maybe_intel (scratchbuf);
13548 }
13549
13550 /* Capital letters in template are macros. */
13551 static int
13552 putop (const char *in_template, int sizeflag)
13553 {
13554 const char *p;
13555 int alt = 0;
13556 int cond = 1;
13557 unsigned int l = 0, len = 1;
13558 char last[4];
13559
13560 #define SAVE_LAST(c) \
13561 if (l < len && l < sizeof (last)) \
13562 last[l++] = c; \
13563 else \
13564 abort ();
13565
13566 for (p = in_template; *p; p++)
13567 {
13568 switch (*p)
13569 {
13570 default:
13571 *obufp++ = *p;
13572 break;
13573 case '%':
13574 len++;
13575 break;
13576 case '!':
13577 cond = 0;
13578 break;
13579 case '{':
13580 alt = 0;
13581 if (intel_syntax)
13582 {
13583 while (*++p != '|')
13584 if (*p == '}' || *p == '\0')
13585 abort ();
13586 }
13587 /* Fall through. */
13588 case 'I':
13589 alt = 1;
13590 continue;
13591 case '|':
13592 while (*++p != '}')
13593 {
13594 if (*p == '\0')
13595 abort ();
13596 }
13597 break;
13598 case '}':
13599 break;
13600 case 'A':
13601 if (intel_syntax)
13602 break;
13603 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
13604 *obufp++ = 'b';
13605 break;
13606 case 'B':
13607 if (l == 0 && len == 1)
13608 {
13609 case_B:
13610 if (intel_syntax)
13611 break;
13612 if (sizeflag & SUFFIX_ALWAYS)
13613 *obufp++ = 'b';
13614 }
13615 else
13616 {
13617 if (l != 1
13618 || len != 2
13619 || last[0] != 'L')
13620 {
13621 SAVE_LAST (*p);
13622 break;
13623 }
13624
13625 if (address_mode == mode_64bit
13626 && !(prefixes & PREFIX_ADDR))
13627 {
13628 *obufp++ = 'a';
13629 *obufp++ = 'b';
13630 *obufp++ = 's';
13631 }
13632
13633 goto case_B;
13634 }
13635 break;
13636 case 'C':
13637 if (intel_syntax && !alt)
13638 break;
13639 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
13640 {
13641 if (sizeflag & DFLAG)
13642 *obufp++ = intel_syntax ? 'd' : 'l';
13643 else
13644 *obufp++ = intel_syntax ? 'w' : 's';
13645 used_prefixes |= (prefixes & PREFIX_DATA);
13646 }
13647 break;
13648 case 'D':
13649 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
13650 break;
13651 USED_REX (REX_W);
13652 if (modrm.mod == 3)
13653 {
13654 if (rex & REX_W)
13655 *obufp++ = 'q';
13656 else
13657 {
13658 if (sizeflag & DFLAG)
13659 *obufp++ = intel_syntax ? 'd' : 'l';
13660 else
13661 *obufp++ = 'w';
13662 used_prefixes |= (prefixes & PREFIX_DATA);
13663 }
13664 }
13665 else
13666 *obufp++ = 'w';
13667 break;
13668 case 'E': /* For jcxz/jecxz */
13669 if (address_mode == mode_64bit)
13670 {
13671 if (sizeflag & AFLAG)
13672 *obufp++ = 'r';
13673 else
13674 *obufp++ = 'e';
13675 }
13676 else
13677 if (sizeflag & AFLAG)
13678 *obufp++ = 'e';
13679 used_prefixes |= (prefixes & PREFIX_ADDR);
13680 break;
13681 case 'F':
13682 if (intel_syntax)
13683 break;
13684 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
13685 {
13686 if (sizeflag & AFLAG)
13687 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
13688 else
13689 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
13690 used_prefixes |= (prefixes & PREFIX_ADDR);
13691 }
13692 break;
13693 case 'G':
13694 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
13695 break;
13696 if ((rex & REX_W) || (sizeflag & DFLAG))
13697 *obufp++ = 'l';
13698 else
13699 *obufp++ = 'w';
13700 if (!(rex & REX_W))
13701 used_prefixes |= (prefixes & PREFIX_DATA);
13702 break;
13703 case 'H':
13704 if (intel_syntax)
13705 break;
13706 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
13707 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
13708 {
13709 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
13710 *obufp++ = ',';
13711 *obufp++ = 'p';
13712 if (prefixes & PREFIX_DS)
13713 *obufp++ = 't';
13714 else
13715 *obufp++ = 'n';
13716 }
13717 break;
13718 case 'J':
13719 if (intel_syntax)
13720 break;
13721 *obufp++ = 'l';
13722 break;
13723 case 'K':
13724 USED_REX (REX_W);
13725 if (rex & REX_W)
13726 *obufp++ = 'q';
13727 else
13728 *obufp++ = 'd';
13729 break;
13730 case 'Z':
13731 if (intel_syntax)
13732 break;
13733 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
13734 {
13735 *obufp++ = 'q';
13736 break;
13737 }
13738 /* Fall through. */
13739 goto case_L;
13740 case 'L':
13741 if (l != 0 || len != 1)
13742 {
13743 SAVE_LAST (*p);
13744 break;
13745 }
13746 case_L:
13747 if (intel_syntax)
13748 break;
13749 if (sizeflag & SUFFIX_ALWAYS)
13750 *obufp++ = 'l';
13751 break;
13752 case 'M':
13753 if (intel_mnemonic != cond)
13754 *obufp++ = 'r';
13755 break;
13756 case 'N':
13757 if ((prefixes & PREFIX_FWAIT) == 0)
13758 *obufp++ = 'n';
13759 else
13760 used_prefixes |= PREFIX_FWAIT;
13761 break;
13762 case 'O':
13763 USED_REX (REX_W);
13764 if (rex & REX_W)
13765 *obufp++ = 'o';
13766 else if (intel_syntax && (sizeflag & DFLAG))
13767 *obufp++ = 'q';
13768 else
13769 *obufp++ = 'd';
13770 if (!(rex & REX_W))
13771 used_prefixes |= (prefixes & PREFIX_DATA);
13772 break;
13773 case 'T':
13774 if (!intel_syntax
13775 && address_mode == mode_64bit
13776 && ((sizeflag & DFLAG) || (rex & REX_W)))
13777 {
13778 *obufp++ = 'q';
13779 break;
13780 }
13781 /* Fall through. */
13782 case 'P':
13783 if (intel_syntax)
13784 {
13785 if ((rex & REX_W) == 0
13786 && (prefixes & PREFIX_DATA))
13787 {
13788 if ((sizeflag & DFLAG) == 0)
13789 *obufp++ = 'w';
13790 used_prefixes |= (prefixes & PREFIX_DATA);
13791 }
13792 break;
13793 }
13794 if ((prefixes & PREFIX_DATA)
13795 || (rex & REX_W)
13796 || (sizeflag & SUFFIX_ALWAYS))
13797 {
13798 USED_REX (REX_W);
13799 if (rex & REX_W)
13800 *obufp++ = 'q';
13801 else
13802 {
13803 if (sizeflag & DFLAG)
13804 *obufp++ = 'l';
13805 else
13806 *obufp++ = 'w';
13807 used_prefixes |= (prefixes & PREFIX_DATA);
13808 }
13809 }
13810 break;
13811 case 'U':
13812 if (intel_syntax)
13813 break;
13814 if (address_mode == mode_64bit
13815 && ((sizeflag & DFLAG) || (rex & REX_W)))
13816 {
13817 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
13818 *obufp++ = 'q';
13819 break;
13820 }
13821 /* Fall through. */
13822 goto case_Q;
13823 case 'Q':
13824 if (l == 0 && len == 1)
13825 {
13826 case_Q:
13827 if (intel_syntax && !alt)
13828 break;
13829 USED_REX (REX_W);
13830 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
13831 {
13832 if (rex & REX_W)
13833 *obufp++ = 'q';
13834 else
13835 {
13836 if (sizeflag & DFLAG)
13837 *obufp++ = intel_syntax ? 'd' : 'l';
13838 else
13839 *obufp++ = 'w';
13840 used_prefixes |= (prefixes & PREFIX_DATA);
13841 }
13842 }
13843 }
13844 else
13845 {
13846 if (l != 1 || len != 2 || last[0] != 'L')
13847 {
13848 SAVE_LAST (*p);
13849 break;
13850 }
13851 if (intel_syntax
13852 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
13853 break;
13854 if ((rex & REX_W))
13855 {
13856 USED_REX (REX_W);
13857 *obufp++ = 'q';
13858 }
13859 else
13860 *obufp++ = 'l';
13861 }
13862 break;
13863 case 'R':
13864 USED_REX (REX_W);
13865 if (rex & REX_W)
13866 *obufp++ = 'q';
13867 else if (sizeflag & DFLAG)
13868 {
13869 if (intel_syntax)
13870 *obufp++ = 'd';
13871 else
13872 *obufp++ = 'l';
13873 }
13874 else
13875 *obufp++ = 'w';
13876 if (intel_syntax && !p[1]
13877 && ((rex & REX_W) || (sizeflag & DFLAG)))
13878 *obufp++ = 'e';
13879 if (!(rex & REX_W))
13880 used_prefixes |= (prefixes & PREFIX_DATA);
13881 break;
13882 case 'V':
13883 if (l == 0 && len == 1)
13884 {
13885 if (intel_syntax)
13886 break;
13887 if (address_mode == mode_64bit
13888 && ((sizeflag & DFLAG) || (rex & REX_W)))
13889 {
13890 if (sizeflag & SUFFIX_ALWAYS)
13891 *obufp++ = 'q';
13892 break;
13893 }
13894 }
13895 else
13896 {
13897 if (l != 1
13898 || len != 2
13899 || last[0] != 'L')
13900 {
13901 SAVE_LAST (*p);
13902 break;
13903 }
13904
13905 if (rex & REX_W)
13906 {
13907 *obufp++ = 'a';
13908 *obufp++ = 'b';
13909 *obufp++ = 's';
13910 }
13911 }
13912 /* Fall through. */
13913 goto case_S;
13914 case 'S':
13915 if (l == 0 && len == 1)
13916 {
13917 case_S:
13918 if (intel_syntax)
13919 break;
13920 if (sizeflag & SUFFIX_ALWAYS)
13921 {
13922 if (rex & REX_W)
13923 *obufp++ = 'q';
13924 else
13925 {
13926 if (sizeflag & DFLAG)
13927 *obufp++ = 'l';
13928 else
13929 *obufp++ = 'w';
13930 used_prefixes |= (prefixes & PREFIX_DATA);
13931 }
13932 }
13933 }
13934 else
13935 {
13936 if (l != 1
13937 || len != 2
13938 || last[0] != 'L')
13939 {
13940 SAVE_LAST (*p);
13941 break;
13942 }
13943
13944 if (address_mode == mode_64bit
13945 && !(prefixes & PREFIX_ADDR))
13946 {
13947 *obufp++ = 'a';
13948 *obufp++ = 'b';
13949 *obufp++ = 's';
13950 }
13951
13952 goto case_S;
13953 }
13954 break;
13955 case 'X':
13956 if (l != 0 || len != 1)
13957 {
13958 SAVE_LAST (*p);
13959 break;
13960 }
13961 if (need_vex && vex.prefix)
13962 {
13963 if (vex.prefix == DATA_PREFIX_OPCODE)
13964 *obufp++ = 'd';
13965 else
13966 *obufp++ = 's';
13967 }
13968 else
13969 {
13970 if (prefixes & PREFIX_DATA)
13971 *obufp++ = 'd';
13972 else
13973 *obufp++ = 's';
13974 used_prefixes |= (prefixes & PREFIX_DATA);
13975 }
13976 break;
13977 case 'Y':
13978 if (l == 0 && len == 1)
13979 {
13980 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
13981 break;
13982 if (rex & REX_W)
13983 {
13984 USED_REX (REX_W);
13985 *obufp++ = 'q';
13986 }
13987 break;
13988 }
13989 else
13990 {
13991 if (l != 1 || len != 2 || last[0] != 'X')
13992 {
13993 SAVE_LAST (*p);
13994 break;
13995 }
13996 if (!need_vex)
13997 abort ();
13998 if (intel_syntax
13999 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
14000 break;
14001 switch (vex.length)
14002 {
14003 case 128:
14004 *obufp++ = 'x';
14005 break;
14006 case 256:
14007 *obufp++ = 'y';
14008 break;
14009 default:
14010 abort ();
14011 }
14012 }
14013 break;
14014 case 'W':
14015 if (l == 0 && len == 1)
14016 {
14017 /* operand size flag for cwtl, cbtw */
14018 USED_REX (REX_W);
14019 if (rex & REX_W)
14020 {
14021 if (intel_syntax)
14022 *obufp++ = 'd';
14023 else
14024 *obufp++ = 'l';
14025 }
14026 else if (sizeflag & DFLAG)
14027 *obufp++ = 'w';
14028 else
14029 *obufp++ = 'b';
14030 if (!(rex & REX_W))
14031 used_prefixes |= (prefixes & PREFIX_DATA);
14032 }
14033 else
14034 {
14035 if (l != 1
14036 || len != 2
14037 || (last[0] != 'X'
14038 && last[0] != 'L'))
14039 {
14040 SAVE_LAST (*p);
14041 break;
14042 }
14043 if (!need_vex)
14044 abort ();
14045 if (last[0] == 'X')
14046 *obufp++ = vex.w ? 'd': 's';
14047 else
14048 *obufp++ = vex.w ? 'q': 'd';
14049 }
14050 break;
14051 }
14052 alt = 0;
14053 }
14054 *obufp = 0;
14055 mnemonicendp = obufp;
14056 return 0;
14057 }
14058
14059 static void
14060 oappend (const char *s)
14061 {
14062 obufp = stpcpy (obufp, s);
14063 }
14064
14065 static void
14066 append_seg (void)
14067 {
14068 /* Only print the active segment register. */
14069 if (!active_seg_prefix)
14070 return;
14071
14072 used_prefixes |= active_seg_prefix;
14073 switch (active_seg_prefix)
14074 {
14075 case PREFIX_CS:
14076 oappend_maybe_intel ("%cs:");
14077 break;
14078 case PREFIX_DS:
14079 oappend_maybe_intel ("%ds:");
14080 break;
14081 case PREFIX_SS:
14082 oappend_maybe_intel ("%ss:");
14083 break;
14084 case PREFIX_ES:
14085 oappend_maybe_intel ("%es:");
14086 break;
14087 case PREFIX_FS:
14088 oappend_maybe_intel ("%fs:");
14089 break;
14090 case PREFIX_GS:
14091 oappend_maybe_intel ("%gs:");
14092 break;
14093 default:
14094 break;
14095 }
14096 }
14097
14098 static void
14099 OP_indirE (int bytemode, int sizeflag)
14100 {
14101 if (!intel_syntax)
14102 oappend ("*");
14103 OP_E (bytemode, sizeflag);
14104 }
14105
14106 static void
14107 print_operand_value (char *buf, int hex, bfd_vma disp)
14108 {
14109 if (address_mode == mode_64bit)
14110 {
14111 if (hex)
14112 {
14113 char tmp[30];
14114 int i;
14115 buf[0] = '0';
14116 buf[1] = 'x';
14117 sprintf_vma (tmp, disp);
14118 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
14119 strcpy (buf + 2, tmp + i);
14120 }
14121 else
14122 {
14123 bfd_signed_vma v = disp;
14124 char tmp[30];
14125 int i;
14126 if (v < 0)
14127 {
14128 *(buf++) = '-';
14129 v = -disp;
14130 /* Check for possible overflow on 0x8000000000000000. */
14131 if (v < 0)
14132 {
14133 strcpy (buf, "9223372036854775808");
14134 return;
14135 }
14136 }
14137 if (!v)
14138 {
14139 strcpy (buf, "0");
14140 return;
14141 }
14142
14143 i = 0;
14144 tmp[29] = 0;
14145 while (v)
14146 {
14147 tmp[28 - i] = (v % 10) + '0';
14148 v /= 10;
14149 i++;
14150 }
14151 strcpy (buf, tmp + 29 - i);
14152 }
14153 }
14154 else
14155 {
14156 if (hex)
14157 sprintf (buf, "0x%x", (unsigned int) disp);
14158 else
14159 sprintf (buf, "%d", (int) disp);
14160 }
14161 }
14162
14163 /* Put DISP in BUF as signed hex number. */
14164
14165 static void
14166 print_displacement (char *buf, bfd_vma disp)
14167 {
14168 bfd_signed_vma val = disp;
14169 char tmp[30];
14170 int i, j = 0;
14171
14172 if (val < 0)
14173 {
14174 buf[j++] = '-';
14175 val = -disp;
14176
14177 /* Check for possible overflow. */
14178 if (val < 0)
14179 {
14180 switch (address_mode)
14181 {
14182 case mode_64bit:
14183 strcpy (buf + j, "0x8000000000000000");
14184 break;
14185 case mode_32bit:
14186 strcpy (buf + j, "0x80000000");
14187 break;
14188 case mode_16bit:
14189 strcpy (buf + j, "0x8000");
14190 break;
14191 }
14192 return;
14193 }
14194 }
14195
14196 buf[j++] = '0';
14197 buf[j++] = 'x';
14198
14199 sprintf_vma (tmp, (bfd_vma) val);
14200 for (i = 0; tmp[i] == '0'; i++)
14201 continue;
14202 if (tmp[i] == '\0')
14203 i--;
14204 strcpy (buf + j, tmp + i);
14205 }
14206
14207 static void
14208 intel_operand_size (int bytemode, int sizeflag)
14209 {
14210 if (vex.evex
14211 && vex.b
14212 && (bytemode == x_mode
14213 || bytemode == evex_half_bcst_xmmq_mode))
14214 {
14215 if (vex.w)
14216 oappend ("QWORD PTR ");
14217 else
14218 oappend ("DWORD PTR ");
14219 return;
14220 }
14221 switch (bytemode)
14222 {
14223 case b_mode:
14224 case b_swap_mode:
14225 case dqb_mode:
14226 case db_mode:
14227 oappend ("BYTE PTR ");
14228 break;
14229 case w_mode:
14230 case dw_mode:
14231 case dqw_mode:
14232 case dqw_swap_mode:
14233 oappend ("WORD PTR ");
14234 break;
14235 case stack_v_mode:
14236 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
14237 {
14238 oappend ("QWORD PTR ");
14239 break;
14240 }
14241 /* FALLTHRU */
14242 case v_mode:
14243 case v_swap_mode:
14244 case dq_mode:
14245 USED_REX (REX_W);
14246 if (rex & REX_W)
14247 oappend ("QWORD PTR ");
14248 else
14249 {
14250 if ((sizeflag & DFLAG) || bytemode == dq_mode)
14251 oappend ("DWORD PTR ");
14252 else
14253 oappend ("WORD PTR ");
14254 used_prefixes |= (prefixes & PREFIX_DATA);
14255 }
14256 break;
14257 case z_mode:
14258 if ((rex & REX_W) || (sizeflag & DFLAG))
14259 *obufp++ = 'D';
14260 oappend ("WORD PTR ");
14261 if (!(rex & REX_W))
14262 used_prefixes |= (prefixes & PREFIX_DATA);
14263 break;
14264 case a_mode:
14265 if (sizeflag & DFLAG)
14266 oappend ("QWORD PTR ");
14267 else
14268 oappend ("DWORD PTR ");
14269 used_prefixes |= (prefixes & PREFIX_DATA);
14270 break;
14271 case d_mode:
14272 case d_scalar_mode:
14273 case d_scalar_swap_mode:
14274 case d_swap_mode:
14275 case dqd_mode:
14276 oappend ("DWORD PTR ");
14277 break;
14278 case q_mode:
14279 case q_scalar_mode:
14280 case q_scalar_swap_mode:
14281 case q_swap_mode:
14282 oappend ("QWORD PTR ");
14283 break;
14284 case m_mode:
14285 if (address_mode == mode_64bit)
14286 oappend ("QWORD PTR ");
14287 else
14288 oappend ("DWORD PTR ");
14289 break;
14290 case f_mode:
14291 if (sizeflag & DFLAG)
14292 oappend ("FWORD PTR ");
14293 else
14294 oappend ("DWORD PTR ");
14295 used_prefixes |= (prefixes & PREFIX_DATA);
14296 break;
14297 case t_mode:
14298 oappend ("TBYTE PTR ");
14299 break;
14300 case x_mode:
14301 case x_swap_mode:
14302 case evex_x_gscat_mode:
14303 case evex_x_nobcst_mode:
14304 if (need_vex)
14305 {
14306 switch (vex.length)
14307 {
14308 case 128:
14309 oappend ("XMMWORD PTR ");
14310 break;
14311 case 256:
14312 oappend ("YMMWORD PTR ");
14313 break;
14314 case 512:
14315 oappend ("ZMMWORD PTR ");
14316 break;
14317 default:
14318 abort ();
14319 }
14320 }
14321 else
14322 oappend ("XMMWORD PTR ");
14323 break;
14324 case xmm_mode:
14325 oappend ("XMMWORD PTR ");
14326 break;
14327 case ymm_mode:
14328 oappend ("YMMWORD PTR ");
14329 break;
14330 case xmmq_mode:
14331 case evex_half_bcst_xmmq_mode:
14332 if (!need_vex)
14333 abort ();
14334
14335 switch (vex.length)
14336 {
14337 case 128:
14338 oappend ("QWORD PTR ");
14339 break;
14340 case 256:
14341 oappend ("XMMWORD PTR ");
14342 break;
14343 case 512:
14344 oappend ("YMMWORD PTR ");
14345 break;
14346 default:
14347 abort ();
14348 }
14349 break;
14350 case xmm_mb_mode:
14351 if (!need_vex)
14352 abort ();
14353
14354 switch (vex.length)
14355 {
14356 case 128:
14357 case 256:
14358 case 512:
14359 oappend ("BYTE PTR ");
14360 break;
14361 default:
14362 abort ();
14363 }
14364 break;
14365 case xmm_mw_mode:
14366 if (!need_vex)
14367 abort ();
14368
14369 switch (vex.length)
14370 {
14371 case 128:
14372 case 256:
14373 case 512:
14374 oappend ("WORD PTR ");
14375 break;
14376 default:
14377 abort ();
14378 }
14379 break;
14380 case xmm_md_mode:
14381 if (!need_vex)
14382 abort ();
14383
14384 switch (vex.length)
14385 {
14386 case 128:
14387 case 256:
14388 case 512:
14389 oappend ("DWORD PTR ");
14390 break;
14391 default:
14392 abort ();
14393 }
14394 break;
14395 case xmm_mq_mode:
14396 if (!need_vex)
14397 abort ();
14398
14399 switch (vex.length)
14400 {
14401 case 128:
14402 case 256:
14403 case 512:
14404 oappend ("QWORD PTR ");
14405 break;
14406 default:
14407 abort ();
14408 }
14409 break;
14410 case xmmdw_mode:
14411 if (!need_vex)
14412 abort ();
14413
14414 switch (vex.length)
14415 {
14416 case 128:
14417 oappend ("WORD PTR ");
14418 break;
14419 case 256:
14420 oappend ("DWORD PTR ");
14421 break;
14422 case 512:
14423 oappend ("QWORD PTR ");
14424 break;
14425 default:
14426 abort ();
14427 }
14428 break;
14429 case xmmqd_mode:
14430 if (!need_vex)
14431 abort ();
14432
14433 switch (vex.length)
14434 {
14435 case 128:
14436 oappend ("DWORD PTR ");
14437 break;
14438 case 256:
14439 oappend ("QWORD PTR ");
14440 break;
14441 case 512:
14442 oappend ("XMMWORD PTR ");
14443 break;
14444 default:
14445 abort ();
14446 }
14447 break;
14448 case ymmq_mode:
14449 if (!need_vex)
14450 abort ();
14451
14452 switch (vex.length)
14453 {
14454 case 128:
14455 oappend ("QWORD PTR ");
14456 break;
14457 case 256:
14458 oappend ("YMMWORD PTR ");
14459 break;
14460 case 512:
14461 oappend ("ZMMWORD PTR ");
14462 break;
14463 default:
14464 abort ();
14465 }
14466 break;
14467 case ymmxmm_mode:
14468 if (!need_vex)
14469 abort ();
14470
14471 switch (vex.length)
14472 {
14473 case 128:
14474 case 256:
14475 oappend ("XMMWORD PTR ");
14476 break;
14477 default:
14478 abort ();
14479 }
14480 break;
14481 case o_mode:
14482 oappend ("OWORD PTR ");
14483 break;
14484 case xmm_mdq_mode:
14485 case vex_w_dq_mode:
14486 case vex_scalar_w_dq_mode:
14487 if (!need_vex)
14488 abort ();
14489
14490 if (vex.w)
14491 oappend ("QWORD PTR ");
14492 else
14493 oappend ("DWORD PTR ");
14494 break;
14495 case vex_vsib_d_w_dq_mode:
14496 case vex_vsib_q_w_dq_mode:
14497 if (!need_vex)
14498 abort ();
14499
14500 if (!vex.evex)
14501 {
14502 if (vex.w)
14503 oappend ("QWORD PTR ");
14504 else
14505 oappend ("DWORD PTR ");
14506 }
14507 else
14508 {
14509 switch (vex.length)
14510 {
14511 case 128:
14512 oappend ("XMMWORD PTR ");
14513 break;
14514 case 256:
14515 oappend ("YMMWORD PTR ");
14516 break;
14517 case 512:
14518 oappend ("ZMMWORD PTR ");
14519 break;
14520 default:
14521 abort ();
14522 }
14523 }
14524 break;
14525 case vex_vsib_q_w_d_mode:
14526 case vex_vsib_d_w_d_mode:
14527 if (!need_vex || !vex.evex)
14528 abort ();
14529
14530 switch (vex.length)
14531 {
14532 case 128:
14533 oappend ("QWORD PTR ");
14534 break;
14535 case 256:
14536 oappend ("XMMWORD PTR ");
14537 break;
14538 case 512:
14539 oappend ("YMMWORD PTR ");
14540 break;
14541 default:
14542 abort ();
14543 }
14544
14545 break;
14546 case mask_bd_mode:
14547 if (!need_vex || vex.length != 128)
14548 abort ();
14549 if (vex.w)
14550 oappend ("DWORD PTR ");
14551 else
14552 oappend ("BYTE PTR ");
14553 break;
14554 case mask_mode:
14555 if (!need_vex)
14556 abort ();
14557 if (vex.w)
14558 oappend ("QWORD PTR ");
14559 else
14560 oappend ("WORD PTR ");
14561 break;
14562 case v_bnd_mode:
14563 default:
14564 break;
14565 }
14566 }
14567
14568 static void
14569 OP_E_register (int bytemode, int sizeflag)
14570 {
14571 int reg = modrm.rm;
14572 const char **names;
14573
14574 USED_REX (REX_B);
14575 if ((rex & REX_B))
14576 reg += 8;
14577
14578 if ((sizeflag & SUFFIX_ALWAYS)
14579 && (bytemode == b_swap_mode
14580 || bytemode == v_swap_mode
14581 || bytemode == dqw_swap_mode))
14582 swap_operand ();
14583
14584 switch (bytemode)
14585 {
14586 case b_mode:
14587 case b_swap_mode:
14588 USED_REX (0);
14589 if (rex)
14590 names = names8rex;
14591 else
14592 names = names8;
14593 break;
14594 case w_mode:
14595 names = names16;
14596 break;
14597 case d_mode:
14598 case dw_mode:
14599 case db_mode:
14600 names = names32;
14601 break;
14602 case q_mode:
14603 names = names64;
14604 break;
14605 case m_mode:
14606 case v_bnd_mode:
14607 names = address_mode == mode_64bit ? names64 : names32;
14608 break;
14609 case bnd_mode:
14610 names = names_bnd;
14611 break;
14612 case stack_v_mode:
14613 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
14614 {
14615 names = names64;
14616 break;
14617 }
14618 bytemode = v_mode;
14619 /* FALLTHRU */
14620 case v_mode:
14621 case v_swap_mode:
14622 case dq_mode:
14623 case dqb_mode:
14624 case dqd_mode:
14625 case dqw_mode:
14626 case dqw_swap_mode:
14627 USED_REX (REX_W);
14628 if (rex & REX_W)
14629 names = names64;
14630 else
14631 {
14632 if ((sizeflag & DFLAG)
14633 || (bytemode != v_mode
14634 && bytemode != v_swap_mode))
14635 names = names32;
14636 else
14637 names = names16;
14638 used_prefixes |= (prefixes & PREFIX_DATA);
14639 }
14640 break;
14641 case mask_bd_mode:
14642 case mask_mode:
14643 names = names_mask;
14644 break;
14645 case 0:
14646 return;
14647 default:
14648 oappend (INTERNAL_DISASSEMBLER_ERROR);
14649 return;
14650 }
14651 oappend (names[reg]);
14652 }
14653
14654 static void
14655 OP_E_memory (int bytemode, int sizeflag)
14656 {
14657 bfd_vma disp = 0;
14658 int add = (rex & REX_B) ? 8 : 0;
14659 int riprel = 0;
14660 int shift;
14661
14662 if (vex.evex)
14663 {
14664 /* In EVEX, if operand doesn't allow broadcast, vex.b should be 0. */
14665 if (vex.b
14666 && bytemode != x_mode
14667 && bytemode != evex_half_bcst_xmmq_mode)
14668 {
14669 BadOp ();
14670 return;
14671 }
14672 switch (bytemode)
14673 {
14674 case dqw_mode:
14675 case dw_mode:
14676 case dqw_swap_mode:
14677 shift = 1;
14678 break;
14679 case dqb_mode:
14680 case db_mode:
14681 shift = 0;
14682 break;
14683 case vex_vsib_d_w_dq_mode:
14684 case vex_vsib_d_w_d_mode:
14685 case vex_vsib_q_w_dq_mode:
14686 case vex_vsib_q_w_d_mode:
14687 case evex_x_gscat_mode:
14688 case xmm_mdq_mode:
14689 shift = vex.w ? 3 : 2;
14690 break;
14691 case x_mode:
14692 case evex_half_bcst_xmmq_mode:
14693 if (vex.b)
14694 {
14695 shift = vex.w ? 3 : 2;
14696 break;
14697 }
14698 /* Fall through if vex.b == 0. */
14699 case xmmqd_mode:
14700 case xmmdw_mode:
14701 case xmmq_mode:
14702 case ymmq_mode:
14703 case evex_x_nobcst_mode:
14704 case x_swap_mode:
14705 switch (vex.length)
14706 {
14707 case 128:
14708 shift = 4;
14709 break;
14710 case 256:
14711 shift = 5;
14712 break;
14713 case 512:
14714 shift = 6;
14715 break;
14716 default:
14717 abort ();
14718 }
14719 break;
14720 case ymm_mode:
14721 shift = 5;
14722 break;
14723 case xmm_mode:
14724 shift = 4;
14725 break;
14726 case xmm_mq_mode:
14727 case q_mode:
14728 case q_scalar_mode:
14729 case q_swap_mode:
14730 case q_scalar_swap_mode:
14731 shift = 3;
14732 break;
14733 case dqd_mode:
14734 case xmm_md_mode:
14735 case d_mode:
14736 case d_scalar_mode:
14737 case d_swap_mode:
14738 case d_scalar_swap_mode:
14739 shift = 2;
14740 break;
14741 case xmm_mw_mode:
14742 shift = 1;
14743 break;
14744 case xmm_mb_mode:
14745 shift = 0;
14746 break;
14747 default:
14748 abort ();
14749 }
14750 /* Make necessary corrections to shift for modes that need it.
14751 For these modes we currently have shift 4, 5 or 6 depending on
14752 vex.length (it corresponds to xmmword, ymmword or zmmword
14753 operand). We might want to make it 3, 4 or 5 (e.g. for
14754 xmmq_mode). In case of broadcast enabled the corrections
14755 aren't needed, as element size is always 32 or 64 bits. */
14756 if (bytemode == xmmq_mode
14757 || (bytemode == evex_half_bcst_xmmq_mode
14758 && !vex.b))
14759 shift -= 1;
14760 else if (bytemode == xmmqd_mode)
14761 shift -= 2;
14762 else if (bytemode == xmmdw_mode)
14763 shift -= 3;
14764 else if (bytemode == ymmq_mode && vex.length == 128)
14765 shift -= 1;
14766 }
14767 else
14768 shift = 0;
14769
14770 USED_REX (REX_B);
14771 if (intel_syntax)
14772 intel_operand_size (bytemode, sizeflag);
14773 append_seg ();
14774
14775 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
14776 {
14777 /* 32/64 bit address mode */
14778 int havedisp;
14779 int havesib;
14780 int havebase;
14781 int haveindex;
14782 int needindex;
14783 int base, rbase;
14784 int vindex = 0;
14785 int scale = 0;
14786 int addr32flag = !((sizeflag & AFLAG)
14787 || bytemode == v_bnd_mode
14788 || bytemode == bnd_mode);
14789 const char **indexes64 = names64;
14790 const char **indexes32 = names32;
14791
14792 havesib = 0;
14793 havebase = 1;
14794 haveindex = 0;
14795 base = modrm.rm;
14796
14797 if (base == 4)
14798 {
14799 havesib = 1;
14800 vindex = sib.index;
14801 USED_REX (REX_X);
14802 if (rex & REX_X)
14803 vindex += 8;
14804 switch (bytemode)
14805 {
14806 case vex_vsib_d_w_dq_mode:
14807 case vex_vsib_d_w_d_mode:
14808 case vex_vsib_q_w_dq_mode:
14809 case vex_vsib_q_w_d_mode:
14810 if (!need_vex)
14811 abort ();
14812 if (vex.evex)
14813 {
14814 if (!vex.v)
14815 vindex += 16;
14816 }
14817
14818 haveindex = 1;
14819 switch (vex.length)
14820 {
14821 case 128:
14822 indexes64 = indexes32 = names_xmm;
14823 break;
14824 case 256:
14825 if (!vex.w
14826 || bytemode == vex_vsib_q_w_dq_mode
14827 || bytemode == vex_vsib_q_w_d_mode)
14828 indexes64 = indexes32 = names_ymm;
14829 else
14830 indexes64 = indexes32 = names_xmm;
14831 break;
14832 case 512:
14833 if (!vex.w
14834 || bytemode == vex_vsib_q_w_dq_mode
14835 || bytemode == vex_vsib_q_w_d_mode)
14836 indexes64 = indexes32 = names_zmm;
14837 else
14838 indexes64 = indexes32 = names_ymm;
14839 break;
14840 default:
14841 abort ();
14842 }
14843 break;
14844 default:
14845 haveindex = vindex != 4;
14846 break;
14847 }
14848 scale = sib.scale;
14849 base = sib.base;
14850 codep++;
14851 }
14852 rbase = base + add;
14853
14854 switch (modrm.mod)
14855 {
14856 case 0:
14857 if (base == 5)
14858 {
14859 havebase = 0;
14860 if (address_mode == mode_64bit && !havesib)
14861 riprel = 1;
14862 disp = get32s ();
14863 }
14864 break;
14865 case 1:
14866 FETCH_DATA (the_info, codep + 1);
14867 disp = *codep++;
14868 if ((disp & 0x80) != 0)
14869 disp -= 0x100;
14870 if (vex.evex && shift > 0)
14871 disp <<= shift;
14872 break;
14873 case 2:
14874 disp = get32s ();
14875 break;
14876 }
14877
14878 /* In 32bit mode, we need index register to tell [offset] from
14879 [eiz*1 + offset]. */
14880 needindex = (havesib
14881 && !havebase
14882 && !haveindex
14883 && address_mode == mode_32bit);
14884 havedisp = (havebase
14885 || needindex
14886 || (havesib && (haveindex || scale != 0)));
14887
14888 if (!intel_syntax)
14889 if (modrm.mod != 0 || base == 5)
14890 {
14891 if (havedisp || riprel)
14892 print_displacement (scratchbuf, disp);
14893 else
14894 print_operand_value (scratchbuf, 1, disp);
14895 oappend (scratchbuf);
14896 if (riprel)
14897 {
14898 set_op (disp, 1);
14899 oappend (sizeflag & AFLAG ? "(%rip)" : "(%eip)");
14900 }
14901 }
14902
14903 if ((havebase || haveindex || riprel)
14904 && (bytemode != v_bnd_mode)
14905 && (bytemode != bnd_mode))
14906 used_prefixes |= PREFIX_ADDR;
14907
14908 if (havedisp || (intel_syntax && riprel))
14909 {
14910 *obufp++ = open_char;
14911 if (intel_syntax && riprel)
14912 {
14913 set_op (disp, 1);
14914 oappend (sizeflag & AFLAG ? "rip" : "eip");
14915 }
14916 *obufp = '\0';
14917 if (havebase)
14918 oappend (address_mode == mode_64bit && !addr32flag
14919 ? names64[rbase] : names32[rbase]);
14920 if (havesib)
14921 {
14922 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
14923 print index to tell base + index from base. */
14924 if (scale != 0
14925 || needindex
14926 || haveindex
14927 || (havebase && base != ESP_REG_NUM))
14928 {
14929 if (!intel_syntax || havebase)
14930 {
14931 *obufp++ = separator_char;
14932 *obufp = '\0';
14933 }
14934 if (haveindex)
14935 oappend (address_mode == mode_64bit && !addr32flag
14936 ? indexes64[vindex] : indexes32[vindex]);
14937 else
14938 oappend (address_mode == mode_64bit && !addr32flag
14939 ? index64 : index32);
14940
14941 *obufp++ = scale_char;
14942 *obufp = '\0';
14943 sprintf (scratchbuf, "%d", 1 << scale);
14944 oappend (scratchbuf);
14945 }
14946 }
14947 if (intel_syntax
14948 && (disp || modrm.mod != 0 || base == 5))
14949 {
14950 if (!havedisp || (bfd_signed_vma) disp >= 0)
14951 {
14952 *obufp++ = '+';
14953 *obufp = '\0';
14954 }
14955 else if (modrm.mod != 1 && disp != -disp)
14956 {
14957 *obufp++ = '-';
14958 *obufp = '\0';
14959 disp = - (bfd_signed_vma) disp;
14960 }
14961
14962 if (havedisp)
14963 print_displacement (scratchbuf, disp);
14964 else
14965 print_operand_value (scratchbuf, 1, disp);
14966 oappend (scratchbuf);
14967 }
14968
14969 *obufp++ = close_char;
14970 *obufp = '\0';
14971 }
14972 else if (intel_syntax)
14973 {
14974 if (modrm.mod != 0 || base == 5)
14975 {
14976 if (!active_seg_prefix)
14977 {
14978 oappend (names_seg[ds_reg - es_reg]);
14979 oappend (":");
14980 }
14981 print_operand_value (scratchbuf, 1, disp);
14982 oappend (scratchbuf);
14983 }
14984 }
14985 }
14986 else
14987 {
14988 /* 16 bit address mode */
14989 used_prefixes |= prefixes & PREFIX_ADDR;
14990 switch (modrm.mod)
14991 {
14992 case 0:
14993 if (modrm.rm == 6)
14994 {
14995 disp = get16 ();
14996 if ((disp & 0x8000) != 0)
14997 disp -= 0x10000;
14998 }
14999 break;
15000 case 1:
15001 FETCH_DATA (the_info, codep + 1);
15002 disp = *codep++;
15003 if ((disp & 0x80) != 0)
15004 disp -= 0x100;
15005 break;
15006 case 2:
15007 disp = get16 ();
15008 if ((disp & 0x8000) != 0)
15009 disp -= 0x10000;
15010 break;
15011 }
15012
15013 if (!intel_syntax)
15014 if (modrm.mod != 0 || modrm.rm == 6)
15015 {
15016 print_displacement (scratchbuf, disp);
15017 oappend (scratchbuf);
15018 }
15019
15020 if (modrm.mod != 0 || modrm.rm != 6)
15021 {
15022 *obufp++ = open_char;
15023 *obufp = '\0';
15024 oappend (index16[modrm.rm]);
15025 if (intel_syntax
15026 && (disp || modrm.mod != 0 || modrm.rm == 6))
15027 {
15028 if ((bfd_signed_vma) disp >= 0)
15029 {
15030 *obufp++ = '+';
15031 *obufp = '\0';
15032 }
15033 else if (modrm.mod != 1)
15034 {
15035 *obufp++ = '-';
15036 *obufp = '\0';
15037 disp = - (bfd_signed_vma) disp;
15038 }
15039
15040 print_displacement (scratchbuf, disp);
15041 oappend (scratchbuf);
15042 }
15043
15044 *obufp++ = close_char;
15045 *obufp = '\0';
15046 }
15047 else if (intel_syntax)
15048 {
15049 if (!active_seg_prefix)
15050 {
15051 oappend (names_seg[ds_reg - es_reg]);
15052 oappend (":");
15053 }
15054 print_operand_value (scratchbuf, 1, disp & 0xffff);
15055 oappend (scratchbuf);
15056 }
15057 }
15058 if (vex.evex && vex.b
15059 && (bytemode == x_mode
15060 || bytemode == evex_half_bcst_xmmq_mode))
15061 {
15062 if (vex.w || bytemode == evex_half_bcst_xmmq_mode)
15063 {
15064 switch (vex.length)
15065 {
15066 case 128:
15067 oappend ("{1to2}");
15068 break;
15069 case 256:
15070 oappend ("{1to4}");
15071 break;
15072 case 512:
15073 oappend ("{1to8}");
15074 break;
15075 default:
15076 abort ();
15077 }
15078 }
15079 else
15080 {
15081 switch (vex.length)
15082 {
15083 case 128:
15084 oappend ("{1to4}");
15085 break;
15086 case 256:
15087 oappend ("{1to8}");
15088 break;
15089 case 512:
15090 oappend ("{1to16}");
15091 break;
15092 default:
15093 abort ();
15094 }
15095 }
15096 }
15097 }
15098
15099 static void
15100 OP_E (int bytemode, int sizeflag)
15101 {
15102 /* Skip mod/rm byte. */
15103 MODRM_CHECK;
15104 codep++;
15105
15106 if (modrm.mod == 3)
15107 OP_E_register (bytemode, sizeflag);
15108 else
15109 OP_E_memory (bytemode, sizeflag);
15110 }
15111
15112 static void
15113 OP_G (int bytemode, int sizeflag)
15114 {
15115 int add = 0;
15116 USED_REX (REX_R);
15117 if (rex & REX_R)
15118 add += 8;
15119 switch (bytemode)
15120 {
15121 case b_mode:
15122 USED_REX (0);
15123 if (rex)
15124 oappend (names8rex[modrm.reg + add]);
15125 else
15126 oappend (names8[modrm.reg + add]);
15127 break;
15128 case w_mode:
15129 oappend (names16[modrm.reg + add]);
15130 break;
15131 case d_mode:
15132 case db_mode:
15133 case dw_mode:
15134 oappend (names32[modrm.reg + add]);
15135 break;
15136 case q_mode:
15137 oappend (names64[modrm.reg + add]);
15138 break;
15139 case bnd_mode:
15140 oappend (names_bnd[modrm.reg]);
15141 break;
15142 case v_mode:
15143 case dq_mode:
15144 case dqb_mode:
15145 case dqd_mode:
15146 case dqw_mode:
15147 case dqw_swap_mode:
15148 USED_REX (REX_W);
15149 if (rex & REX_W)
15150 oappend (names64[modrm.reg + add]);
15151 else
15152 {
15153 if ((sizeflag & DFLAG) || bytemode != v_mode)
15154 oappend (names32[modrm.reg + add]);
15155 else
15156 oappend (names16[modrm.reg + add]);
15157 used_prefixes |= (prefixes & PREFIX_DATA);
15158 }
15159 break;
15160 case m_mode:
15161 if (address_mode == mode_64bit)
15162 oappend (names64[modrm.reg + add]);
15163 else
15164 oappend (names32[modrm.reg + add]);
15165 break;
15166 case mask_bd_mode:
15167 case mask_mode:
15168 oappend (names_mask[modrm.reg + add]);
15169 break;
15170 default:
15171 oappend (INTERNAL_DISASSEMBLER_ERROR);
15172 break;
15173 }
15174 }
15175
15176 static bfd_vma
15177 get64 (void)
15178 {
15179 bfd_vma x;
15180 #ifdef BFD64
15181 unsigned int a;
15182 unsigned int b;
15183
15184 FETCH_DATA (the_info, codep + 8);
15185 a = *codep++ & 0xff;
15186 a |= (*codep++ & 0xff) << 8;
15187 a |= (*codep++ & 0xff) << 16;
15188 a |= (*codep++ & 0xff) << 24;
15189 b = *codep++ & 0xff;
15190 b |= (*codep++ & 0xff) << 8;
15191 b |= (*codep++ & 0xff) << 16;
15192 b |= (*codep++ & 0xff) << 24;
15193 x = a + ((bfd_vma) b << 32);
15194 #else
15195 abort ();
15196 x = 0;
15197 #endif
15198 return x;
15199 }
15200
15201 static bfd_signed_vma
15202 get32 (void)
15203 {
15204 bfd_signed_vma x = 0;
15205
15206 FETCH_DATA (the_info, codep + 4);
15207 x = *codep++ & (bfd_signed_vma) 0xff;
15208 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
15209 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
15210 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
15211 return x;
15212 }
15213
15214 static bfd_signed_vma
15215 get32s (void)
15216 {
15217 bfd_signed_vma x = 0;
15218
15219 FETCH_DATA (the_info, codep + 4);
15220 x = *codep++ & (bfd_signed_vma) 0xff;
15221 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
15222 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
15223 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
15224
15225 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
15226
15227 return x;
15228 }
15229
15230 static int
15231 get16 (void)
15232 {
15233 int x = 0;
15234
15235 FETCH_DATA (the_info, codep + 2);
15236 x = *codep++ & 0xff;
15237 x |= (*codep++ & 0xff) << 8;
15238 return x;
15239 }
15240
15241 static void
15242 set_op (bfd_vma op, int riprel)
15243 {
15244 op_index[op_ad] = op_ad;
15245 if (address_mode == mode_64bit)
15246 {
15247 op_address[op_ad] = op;
15248 op_riprel[op_ad] = riprel;
15249 }
15250 else
15251 {
15252 /* Mask to get a 32-bit address. */
15253 op_address[op_ad] = op & 0xffffffff;
15254 op_riprel[op_ad] = riprel & 0xffffffff;
15255 }
15256 }
15257
15258 static void
15259 OP_REG (int code, int sizeflag)
15260 {
15261 const char *s;
15262 int add;
15263
15264 switch (code)
15265 {
15266 case es_reg: case ss_reg: case cs_reg:
15267 case ds_reg: case fs_reg: case gs_reg:
15268 oappend (names_seg[code - es_reg]);
15269 return;
15270 }
15271
15272 USED_REX (REX_B);
15273 if (rex & REX_B)
15274 add = 8;
15275 else
15276 add = 0;
15277
15278 switch (code)
15279 {
15280 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
15281 case sp_reg: case bp_reg: case si_reg: case di_reg:
15282 s = names16[code - ax_reg + add];
15283 break;
15284 case al_reg: case ah_reg: case cl_reg: case ch_reg:
15285 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
15286 USED_REX (0);
15287 if (rex)
15288 s = names8rex[code - al_reg + add];
15289 else
15290 s = names8[code - al_reg];
15291 break;
15292 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
15293 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
15294 if (address_mode == mode_64bit
15295 && ((sizeflag & DFLAG) || (rex & REX_W)))
15296 {
15297 s = names64[code - rAX_reg + add];
15298 break;
15299 }
15300 code += eAX_reg - rAX_reg;
15301 /* Fall through. */
15302 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
15303 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
15304 USED_REX (REX_W);
15305 if (rex & REX_W)
15306 s = names64[code - eAX_reg + add];
15307 else
15308 {
15309 if (sizeflag & DFLAG)
15310 s = names32[code - eAX_reg + add];
15311 else
15312 s = names16[code - eAX_reg + add];
15313 used_prefixes |= (prefixes & PREFIX_DATA);
15314 }
15315 break;
15316 default:
15317 s = INTERNAL_DISASSEMBLER_ERROR;
15318 break;
15319 }
15320 oappend (s);
15321 }
15322
15323 static void
15324 OP_IMREG (int code, int sizeflag)
15325 {
15326 const char *s;
15327
15328 switch (code)
15329 {
15330 case indir_dx_reg:
15331 if (intel_syntax)
15332 s = "dx";
15333 else
15334 s = "(%dx)";
15335 break;
15336 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
15337 case sp_reg: case bp_reg: case si_reg: case di_reg:
15338 s = names16[code - ax_reg];
15339 break;
15340 case es_reg: case ss_reg: case cs_reg:
15341 case ds_reg: case fs_reg: case gs_reg:
15342 s = names_seg[code - es_reg];
15343 break;
15344 case al_reg: case ah_reg: case cl_reg: case ch_reg:
15345 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
15346 USED_REX (0);
15347 if (rex)
15348 s = names8rex[code - al_reg];
15349 else
15350 s = names8[code - al_reg];
15351 break;
15352 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
15353 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
15354 USED_REX (REX_W);
15355 if (rex & REX_W)
15356 s = names64[code - eAX_reg];
15357 else
15358 {
15359 if (sizeflag & DFLAG)
15360 s = names32[code - eAX_reg];
15361 else
15362 s = names16[code - eAX_reg];
15363 used_prefixes |= (prefixes & PREFIX_DATA);
15364 }
15365 break;
15366 case z_mode_ax_reg:
15367 if ((rex & REX_W) || (sizeflag & DFLAG))
15368 s = *names32;
15369 else
15370 s = *names16;
15371 if (!(rex & REX_W))
15372 used_prefixes |= (prefixes & PREFIX_DATA);
15373 break;
15374 default:
15375 s = INTERNAL_DISASSEMBLER_ERROR;
15376 break;
15377 }
15378 oappend (s);
15379 }
15380
15381 static void
15382 OP_I (int bytemode, int sizeflag)
15383 {
15384 bfd_signed_vma op;
15385 bfd_signed_vma mask = -1;
15386
15387 switch (bytemode)
15388 {
15389 case b_mode:
15390 FETCH_DATA (the_info, codep + 1);
15391 op = *codep++;
15392 mask = 0xff;
15393 break;
15394 case q_mode:
15395 if (address_mode == mode_64bit)
15396 {
15397 op = get32s ();
15398 break;
15399 }
15400 /* Fall through. */
15401 case v_mode:
15402 USED_REX (REX_W);
15403 if (rex & REX_W)
15404 op = get32s ();
15405 else
15406 {
15407 if (sizeflag & DFLAG)
15408 {
15409 op = get32 ();
15410 mask = 0xffffffff;
15411 }
15412 else
15413 {
15414 op = get16 ();
15415 mask = 0xfffff;
15416 }
15417 used_prefixes |= (prefixes & PREFIX_DATA);
15418 }
15419 break;
15420 case w_mode:
15421 mask = 0xfffff;
15422 op = get16 ();
15423 break;
15424 case const_1_mode:
15425 if (intel_syntax)
15426 oappend ("1");
15427 return;
15428 default:
15429 oappend (INTERNAL_DISASSEMBLER_ERROR);
15430 return;
15431 }
15432
15433 op &= mask;
15434 scratchbuf[0] = '$';
15435 print_operand_value (scratchbuf + 1, 1, op);
15436 oappend_maybe_intel (scratchbuf);
15437 scratchbuf[0] = '\0';
15438 }
15439
15440 static void
15441 OP_I64 (int bytemode, int sizeflag)
15442 {
15443 bfd_signed_vma op;
15444 bfd_signed_vma mask = -1;
15445
15446 if (address_mode != mode_64bit)
15447 {
15448 OP_I (bytemode, sizeflag);
15449 return;
15450 }
15451
15452 switch (bytemode)
15453 {
15454 case b_mode:
15455 FETCH_DATA (the_info, codep + 1);
15456 op = *codep++;
15457 mask = 0xff;
15458 break;
15459 case v_mode:
15460 USED_REX (REX_W);
15461 if (rex & REX_W)
15462 op = get64 ();
15463 else
15464 {
15465 if (sizeflag & DFLAG)
15466 {
15467 op = get32 ();
15468 mask = 0xffffffff;
15469 }
15470 else
15471 {
15472 op = get16 ();
15473 mask = 0xfffff;
15474 }
15475 used_prefixes |= (prefixes & PREFIX_DATA);
15476 }
15477 break;
15478 case w_mode:
15479 mask = 0xfffff;
15480 op = get16 ();
15481 break;
15482 default:
15483 oappend (INTERNAL_DISASSEMBLER_ERROR);
15484 return;
15485 }
15486
15487 op &= mask;
15488 scratchbuf[0] = '$';
15489 print_operand_value (scratchbuf + 1, 1, op);
15490 oappend_maybe_intel (scratchbuf);
15491 scratchbuf[0] = '\0';
15492 }
15493
15494 static void
15495 OP_sI (int bytemode, int sizeflag)
15496 {
15497 bfd_signed_vma op;
15498
15499 switch (bytemode)
15500 {
15501 case b_mode:
15502 case b_T_mode:
15503 FETCH_DATA (the_info, codep + 1);
15504 op = *codep++;
15505 if ((op & 0x80) != 0)
15506 op -= 0x100;
15507 if (bytemode == b_T_mode)
15508 {
15509 if (address_mode != mode_64bit
15510 || !((sizeflag & DFLAG) || (rex & REX_W)))
15511 {
15512 /* The operand-size prefix is overridden by a REX prefix. */
15513 if ((sizeflag & DFLAG) || (rex & REX_W))
15514 op &= 0xffffffff;
15515 else
15516 op &= 0xffff;
15517 }
15518 }
15519 else
15520 {
15521 if (!(rex & REX_W))
15522 {
15523 if (sizeflag & DFLAG)
15524 op &= 0xffffffff;
15525 else
15526 op &= 0xffff;
15527 }
15528 }
15529 break;
15530 case v_mode:
15531 /* The operand-size prefix is overridden by a REX prefix. */
15532 if ((sizeflag & DFLAG) || (rex & REX_W))
15533 op = get32s ();
15534 else
15535 op = get16 ();
15536 break;
15537 default:
15538 oappend (INTERNAL_DISASSEMBLER_ERROR);
15539 return;
15540 }
15541
15542 scratchbuf[0] = '$';
15543 print_operand_value (scratchbuf + 1, 1, op);
15544 oappend_maybe_intel (scratchbuf);
15545 }
15546
15547 static void
15548 OP_J (int bytemode, int sizeflag)
15549 {
15550 bfd_vma disp;
15551 bfd_vma mask = -1;
15552 bfd_vma segment = 0;
15553
15554 switch (bytemode)
15555 {
15556 case b_mode:
15557 FETCH_DATA (the_info, codep + 1);
15558 disp = *codep++;
15559 if ((disp & 0x80) != 0)
15560 disp -= 0x100;
15561 break;
15562 case v_mode:
15563 USED_REX (REX_W);
15564 if ((sizeflag & DFLAG) || (rex & REX_W))
15565 disp = get32s ();
15566 else
15567 {
15568 disp = get16 ();
15569 if ((disp & 0x8000) != 0)
15570 disp -= 0x10000;
15571 /* In 16bit mode, address is wrapped around at 64k within
15572 the same segment. Otherwise, a data16 prefix on a jump
15573 instruction means that the pc is masked to 16 bits after
15574 the displacement is added! */
15575 mask = 0xffff;
15576 if ((prefixes & PREFIX_DATA) == 0)
15577 segment = ((start_pc + codep - start_codep)
15578 & ~((bfd_vma) 0xffff));
15579 }
15580 if (!(rex & REX_W))
15581 used_prefixes |= (prefixes & PREFIX_DATA);
15582 break;
15583 default:
15584 oappend (INTERNAL_DISASSEMBLER_ERROR);
15585 return;
15586 }
15587 disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
15588 set_op (disp, 0);
15589 print_operand_value (scratchbuf, 1, disp);
15590 oappend (scratchbuf);
15591 }
15592
15593 static void
15594 OP_SEG (int bytemode, int sizeflag)
15595 {
15596 if (bytemode == w_mode)
15597 oappend (names_seg[modrm.reg]);
15598 else
15599 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
15600 }
15601
15602 static void
15603 OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
15604 {
15605 int seg, offset;
15606
15607 if (sizeflag & DFLAG)
15608 {
15609 offset = get32 ();
15610 seg = get16 ();
15611 }
15612 else
15613 {
15614 offset = get16 ();
15615 seg = get16 ();
15616 }
15617 used_prefixes |= (prefixes & PREFIX_DATA);
15618 if (intel_syntax)
15619 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
15620 else
15621 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
15622 oappend (scratchbuf);
15623 }
15624
15625 static void
15626 OP_OFF (int bytemode, int sizeflag)
15627 {
15628 bfd_vma off;
15629
15630 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
15631 intel_operand_size (bytemode, sizeflag);
15632 append_seg ();
15633
15634 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
15635 off = get32 ();
15636 else
15637 off = get16 ();
15638
15639 if (intel_syntax)
15640 {
15641 if (!active_seg_prefix)
15642 {
15643 oappend (names_seg[ds_reg - es_reg]);
15644 oappend (":");
15645 }
15646 }
15647 print_operand_value (scratchbuf, 1, off);
15648 oappend (scratchbuf);
15649 }
15650
15651 static void
15652 OP_OFF64 (int bytemode, int sizeflag)
15653 {
15654 bfd_vma off;
15655
15656 if (address_mode != mode_64bit
15657 || (prefixes & PREFIX_ADDR))
15658 {
15659 OP_OFF (bytemode, sizeflag);
15660 return;
15661 }
15662
15663 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
15664 intel_operand_size (bytemode, sizeflag);
15665 append_seg ();
15666
15667 off = get64 ();
15668
15669 if (intel_syntax)
15670 {
15671 if (!active_seg_prefix)
15672 {
15673 oappend (names_seg[ds_reg - es_reg]);
15674 oappend (":");
15675 }
15676 }
15677 print_operand_value (scratchbuf, 1, off);
15678 oappend (scratchbuf);
15679 }
15680
15681 static void
15682 ptr_reg (int code, int sizeflag)
15683 {
15684 const char *s;
15685
15686 *obufp++ = open_char;
15687 used_prefixes |= (prefixes & PREFIX_ADDR);
15688 if (address_mode == mode_64bit)
15689 {
15690 if (!(sizeflag & AFLAG))
15691 s = names32[code - eAX_reg];
15692 else
15693 s = names64[code - eAX_reg];
15694 }
15695 else if (sizeflag & AFLAG)
15696 s = names32[code - eAX_reg];
15697 else
15698 s = names16[code - eAX_reg];
15699 oappend (s);
15700 *obufp++ = close_char;
15701 *obufp = 0;
15702 }
15703
15704 static void
15705 OP_ESreg (int code, int sizeflag)
15706 {
15707 if (intel_syntax)
15708 {
15709 switch (codep[-1])
15710 {
15711 case 0x6d: /* insw/insl */
15712 intel_operand_size (z_mode, sizeflag);
15713 break;
15714 case 0xa5: /* movsw/movsl/movsq */
15715 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15716 case 0xab: /* stosw/stosl */
15717 case 0xaf: /* scasw/scasl */
15718 intel_operand_size (v_mode, sizeflag);
15719 break;
15720 default:
15721 intel_operand_size (b_mode, sizeflag);
15722 }
15723 }
15724 oappend_maybe_intel ("%es:");
15725 ptr_reg (code, sizeflag);
15726 }
15727
15728 static void
15729 OP_DSreg (int code, int sizeflag)
15730 {
15731 if (intel_syntax)
15732 {
15733 switch (codep[-1])
15734 {
15735 case 0x6f: /* outsw/outsl */
15736 intel_operand_size (z_mode, sizeflag);
15737 break;
15738 case 0xa5: /* movsw/movsl/movsq */
15739 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15740 case 0xad: /* lodsw/lodsl/lodsq */
15741 intel_operand_size (v_mode, sizeflag);
15742 break;
15743 default:
15744 intel_operand_size (b_mode, sizeflag);
15745 }
15746 }
15747 /* Set active_seg_prefix to PREFIX_DS if it is unset so that the
15748 default segment register DS is printed. */
15749 if (!active_seg_prefix)
15750 active_seg_prefix = PREFIX_DS;
15751 append_seg ();
15752 ptr_reg (code, sizeflag);
15753 }
15754
15755 static void
15756 OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15757 {
15758 int add;
15759 if (rex & REX_R)
15760 {
15761 USED_REX (REX_R);
15762 add = 8;
15763 }
15764 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
15765 {
15766 all_prefixes[last_lock_prefix] = 0;
15767 used_prefixes |= PREFIX_LOCK;
15768 add = 8;
15769 }
15770 else
15771 add = 0;
15772 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
15773 oappend_maybe_intel (scratchbuf);
15774 }
15775
15776 static void
15777 OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15778 {
15779 int add;
15780 USED_REX (REX_R);
15781 if (rex & REX_R)
15782 add = 8;
15783 else
15784 add = 0;
15785 if (intel_syntax)
15786 sprintf (scratchbuf, "db%d", modrm.reg + add);
15787 else
15788 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
15789 oappend (scratchbuf);
15790 }
15791
15792 static void
15793 OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15794 {
15795 sprintf (scratchbuf, "%%tr%d", modrm.reg);
15796 oappend_maybe_intel (scratchbuf);
15797 }
15798
15799 static void
15800 OP_R (int bytemode, int sizeflag)
15801 {
15802 if (modrm.mod == 3)
15803 OP_E (bytemode, sizeflag);
15804 else
15805 BadOp ();
15806 }
15807
15808 static void
15809 OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15810 {
15811 int reg = modrm.reg;
15812 const char **names;
15813
15814 used_prefixes |= (prefixes & PREFIX_DATA);
15815 if (prefixes & PREFIX_DATA)
15816 {
15817 names = names_xmm;
15818 USED_REX (REX_R);
15819 if (rex & REX_R)
15820 reg += 8;
15821 }
15822 else
15823 names = names_mm;
15824 oappend (names[reg]);
15825 }
15826
15827 static void
15828 OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
15829 {
15830 int reg = modrm.reg;
15831 const char **names;
15832
15833 USED_REX (REX_R);
15834 if (rex & REX_R)
15835 reg += 8;
15836 if (vex.evex)
15837 {
15838 if (!vex.r)
15839 reg += 16;
15840 }
15841
15842 if (need_vex
15843 && bytemode != xmm_mode
15844 && bytemode != xmmq_mode
15845 && bytemode != evex_half_bcst_xmmq_mode
15846 && bytemode != ymm_mode
15847 && bytemode != scalar_mode)
15848 {
15849 switch (vex.length)
15850 {
15851 case 128:
15852 names = names_xmm;
15853 break;
15854 case 256:
15855 if (vex.w
15856 || (bytemode != vex_vsib_q_w_dq_mode
15857 && bytemode != vex_vsib_q_w_d_mode))
15858 names = names_ymm;
15859 else
15860 names = names_xmm;
15861 break;
15862 case 512:
15863 names = names_zmm;
15864 break;
15865 default:
15866 abort ();
15867 }
15868 }
15869 else if (bytemode == xmmq_mode
15870 || bytemode == evex_half_bcst_xmmq_mode)
15871 {
15872 switch (vex.length)
15873 {
15874 case 128:
15875 case 256:
15876 names = names_xmm;
15877 break;
15878 case 512:
15879 names = names_ymm;
15880 break;
15881 default:
15882 abort ();
15883 }
15884 }
15885 else if (bytemode == ymm_mode)
15886 names = names_ymm;
15887 else
15888 names = names_xmm;
15889 oappend (names[reg]);
15890 }
15891
15892 static void
15893 OP_EM (int bytemode, int sizeflag)
15894 {
15895 int reg;
15896 const char **names;
15897
15898 if (modrm.mod != 3)
15899 {
15900 if (intel_syntax
15901 && (bytemode == v_mode || bytemode == v_swap_mode))
15902 {
15903 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15904 used_prefixes |= (prefixes & PREFIX_DATA);
15905 }
15906 OP_E (bytemode, sizeflag);
15907 return;
15908 }
15909
15910 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
15911 swap_operand ();
15912
15913 /* Skip mod/rm byte. */
15914 MODRM_CHECK;
15915 codep++;
15916 used_prefixes |= (prefixes & PREFIX_DATA);
15917 reg = modrm.rm;
15918 if (prefixes & PREFIX_DATA)
15919 {
15920 names = names_xmm;
15921 USED_REX (REX_B);
15922 if (rex & REX_B)
15923 reg += 8;
15924 }
15925 else
15926 names = names_mm;
15927 oappend (names[reg]);
15928 }
15929
15930 /* cvt* are the only instructions in sse2 which have
15931 both SSE and MMX operands and also have 0x66 prefix
15932 in their opcode. 0x66 was originally used to differentiate
15933 between SSE and MMX instruction(operands). So we have to handle the
15934 cvt* separately using OP_EMC and OP_MXC */
15935 static void
15936 OP_EMC (int bytemode, int sizeflag)
15937 {
15938 if (modrm.mod != 3)
15939 {
15940 if (intel_syntax && bytemode == v_mode)
15941 {
15942 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15943 used_prefixes |= (prefixes & PREFIX_DATA);
15944 }
15945 OP_E (bytemode, sizeflag);
15946 return;
15947 }
15948
15949 /* Skip mod/rm byte. */
15950 MODRM_CHECK;
15951 codep++;
15952 used_prefixes |= (prefixes & PREFIX_DATA);
15953 oappend (names_mm[modrm.rm]);
15954 }
15955
15956 static void
15957 OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15958 {
15959 used_prefixes |= (prefixes & PREFIX_DATA);
15960 oappend (names_mm[modrm.reg]);
15961 }
15962
15963 static void
15964 OP_EX (int bytemode, int sizeflag)
15965 {
15966 int reg;
15967 const char **names;
15968
15969 /* Skip mod/rm byte. */
15970 MODRM_CHECK;
15971 codep++;
15972
15973 if (modrm.mod != 3)
15974 {
15975 OP_E_memory (bytemode, sizeflag);
15976 return;
15977 }
15978
15979 reg = modrm.rm;
15980 USED_REX (REX_B);
15981 if (rex & REX_B)
15982 reg += 8;
15983 if (vex.evex)
15984 {
15985 USED_REX (REX_X);
15986 if ((rex & REX_X))
15987 reg += 16;
15988 }
15989
15990 if ((sizeflag & SUFFIX_ALWAYS)
15991 && (bytemode == x_swap_mode
15992 || bytemode == d_swap_mode
15993 || bytemode == dqw_swap_mode
15994 || bytemode == d_scalar_swap_mode
15995 || bytemode == q_swap_mode
15996 || bytemode == q_scalar_swap_mode))
15997 swap_operand ();
15998
15999 if (need_vex
16000 && bytemode != xmm_mode
16001 && bytemode != xmmdw_mode
16002 && bytemode != xmmqd_mode
16003 && bytemode != xmm_mb_mode
16004 && bytemode != xmm_mw_mode
16005 && bytemode != xmm_md_mode
16006 && bytemode != xmm_mq_mode
16007 && bytemode != xmm_mdq_mode
16008 && bytemode != xmmq_mode
16009 && bytemode != evex_half_bcst_xmmq_mode
16010 && bytemode != ymm_mode
16011 && bytemode != d_scalar_mode
16012 && bytemode != d_scalar_swap_mode
16013 && bytemode != q_scalar_mode
16014 && bytemode != q_scalar_swap_mode
16015 && bytemode != vex_scalar_w_dq_mode)
16016 {
16017 switch (vex.length)
16018 {
16019 case 128:
16020 names = names_xmm;
16021 break;
16022 case 256:
16023 names = names_ymm;
16024 break;
16025 case 512:
16026 names = names_zmm;
16027 break;
16028 default:
16029 abort ();
16030 }
16031 }
16032 else if (bytemode == xmmq_mode
16033 || bytemode == evex_half_bcst_xmmq_mode)
16034 {
16035 switch (vex.length)
16036 {
16037 case 128:
16038 case 256:
16039 names = names_xmm;
16040 break;
16041 case 512:
16042 names = names_ymm;
16043 break;
16044 default:
16045 abort ();
16046 }
16047 }
16048 else if (bytemode == ymm_mode)
16049 names = names_ymm;
16050 else
16051 names = names_xmm;
16052 oappend (names[reg]);
16053 }
16054
16055 static void
16056 OP_MS (int bytemode, int sizeflag)
16057 {
16058 if (modrm.mod == 3)
16059 OP_EM (bytemode, sizeflag);
16060 else
16061 BadOp ();
16062 }
16063
16064 static void
16065 OP_XS (int bytemode, int sizeflag)
16066 {
16067 if (modrm.mod == 3)
16068 OP_EX (bytemode, sizeflag);
16069 else
16070 BadOp ();
16071 }
16072
16073 static void
16074 OP_M (int bytemode, int sizeflag)
16075 {
16076 if (modrm.mod == 3)
16077 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
16078 BadOp ();
16079 else
16080 OP_E (bytemode, sizeflag);
16081 }
16082
16083 static void
16084 OP_0f07 (int bytemode, int sizeflag)
16085 {
16086 if (modrm.mod != 3 || modrm.rm != 0)
16087 BadOp ();
16088 else
16089 OP_E (bytemode, sizeflag);
16090 }
16091
16092 /* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
16093 32bit mode and "xchg %rax,%rax" in 64bit mode. */
16094
16095 static void
16096 NOP_Fixup1 (int bytemode, int sizeflag)
16097 {
16098 if ((prefixes & PREFIX_DATA) != 0
16099 || (rex != 0
16100 && rex != 0x48
16101 && address_mode == mode_64bit))
16102 OP_REG (bytemode, sizeflag);
16103 else
16104 strcpy (obuf, "nop");
16105 }
16106
16107 static void
16108 NOP_Fixup2 (int bytemode, int sizeflag)
16109 {
16110 if ((prefixes & PREFIX_DATA) != 0
16111 || (rex != 0
16112 && rex != 0x48
16113 && address_mode == mode_64bit))
16114 OP_IMREG (bytemode, sizeflag);
16115 }
16116
16117 static const char *const Suffix3DNow[] = {
16118 /* 00 */ NULL, NULL, NULL, NULL,
16119 /* 04 */ NULL, NULL, NULL, NULL,
16120 /* 08 */ NULL, NULL, NULL, NULL,
16121 /* 0C */ "pi2fw", "pi2fd", NULL, NULL,
16122 /* 10 */ NULL, NULL, NULL, NULL,
16123 /* 14 */ NULL, NULL, NULL, NULL,
16124 /* 18 */ NULL, NULL, NULL, NULL,
16125 /* 1C */ "pf2iw", "pf2id", NULL, NULL,
16126 /* 20 */ NULL, NULL, NULL, NULL,
16127 /* 24 */ NULL, NULL, NULL, NULL,
16128 /* 28 */ NULL, NULL, NULL, NULL,
16129 /* 2C */ NULL, NULL, NULL, NULL,
16130 /* 30 */ NULL, NULL, NULL, NULL,
16131 /* 34 */ NULL, NULL, NULL, NULL,
16132 /* 38 */ NULL, NULL, NULL, NULL,
16133 /* 3C */ NULL, NULL, NULL, NULL,
16134 /* 40 */ NULL, NULL, NULL, NULL,
16135 /* 44 */ NULL, NULL, NULL, NULL,
16136 /* 48 */ NULL, NULL, NULL, NULL,
16137 /* 4C */ NULL, NULL, NULL, NULL,
16138 /* 50 */ NULL, NULL, NULL, NULL,
16139 /* 54 */ NULL, NULL, NULL, NULL,
16140 /* 58 */ NULL, NULL, NULL, NULL,
16141 /* 5C */ NULL, NULL, NULL, NULL,
16142 /* 60 */ NULL, NULL, NULL, NULL,
16143 /* 64 */ NULL, NULL, NULL, NULL,
16144 /* 68 */ NULL, NULL, NULL, NULL,
16145 /* 6C */ NULL, NULL, NULL, NULL,
16146 /* 70 */ NULL, NULL, NULL, NULL,
16147 /* 74 */ NULL, NULL, NULL, NULL,
16148 /* 78 */ NULL, NULL, NULL, NULL,
16149 /* 7C */ NULL, NULL, NULL, NULL,
16150 /* 80 */ NULL, NULL, NULL, NULL,
16151 /* 84 */ NULL, NULL, NULL, NULL,
16152 /* 88 */ NULL, NULL, "pfnacc", NULL,
16153 /* 8C */ NULL, NULL, "pfpnacc", NULL,
16154 /* 90 */ "pfcmpge", NULL, NULL, NULL,
16155 /* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
16156 /* 98 */ NULL, NULL, "pfsub", NULL,
16157 /* 9C */ NULL, NULL, "pfadd", NULL,
16158 /* A0 */ "pfcmpgt", NULL, NULL, NULL,
16159 /* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
16160 /* A8 */ NULL, NULL, "pfsubr", NULL,
16161 /* AC */ NULL, NULL, "pfacc", NULL,
16162 /* B0 */ "pfcmpeq", NULL, NULL, NULL,
16163 /* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
16164 /* B8 */ NULL, NULL, NULL, "pswapd",
16165 /* BC */ NULL, NULL, NULL, "pavgusb",
16166 /* C0 */ NULL, NULL, NULL, NULL,
16167 /* C4 */ NULL, NULL, NULL, NULL,
16168 /* C8 */ NULL, NULL, NULL, NULL,
16169 /* CC */ NULL, NULL, NULL, NULL,
16170 /* D0 */ NULL, NULL, NULL, NULL,
16171 /* D4 */ NULL, NULL, NULL, NULL,
16172 /* D8 */ NULL, NULL, NULL, NULL,
16173 /* DC */ NULL, NULL, NULL, NULL,
16174 /* E0 */ NULL, NULL, NULL, NULL,
16175 /* E4 */ NULL, NULL, NULL, NULL,
16176 /* E8 */ NULL, NULL, NULL, NULL,
16177 /* EC */ NULL, NULL, NULL, NULL,
16178 /* F0 */ NULL, NULL, NULL, NULL,
16179 /* F4 */ NULL, NULL, NULL, NULL,
16180 /* F8 */ NULL, NULL, NULL, NULL,
16181 /* FC */ NULL, NULL, NULL, NULL,
16182 };
16183
16184 static void
16185 OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16186 {
16187 const char *mnemonic;
16188
16189 FETCH_DATA (the_info, codep + 1);
16190 /* AMD 3DNow! instructions are specified by an opcode suffix in the
16191 place where an 8-bit immediate would normally go. ie. the last
16192 byte of the instruction. */
16193 obufp = mnemonicendp;
16194 mnemonic = Suffix3DNow[*codep++ & 0xff];
16195 if (mnemonic)
16196 oappend (mnemonic);
16197 else
16198 {
16199 /* Since a variable sized modrm/sib chunk is between the start
16200 of the opcode (0x0f0f) and the opcode suffix, we need to do
16201 all the modrm processing first, and don't know until now that
16202 we have a bad opcode. This necessitates some cleaning up. */
16203 op_out[0][0] = '\0';
16204 op_out[1][0] = '\0';
16205 BadOp ();
16206 }
16207 mnemonicendp = obufp;
16208 }
16209
16210 static struct op simd_cmp_op[] =
16211 {
16212 { STRING_COMMA_LEN ("eq") },
16213 { STRING_COMMA_LEN ("lt") },
16214 { STRING_COMMA_LEN ("le") },
16215 { STRING_COMMA_LEN ("unord") },
16216 { STRING_COMMA_LEN ("neq") },
16217 { STRING_COMMA_LEN ("nlt") },
16218 { STRING_COMMA_LEN ("nle") },
16219 { STRING_COMMA_LEN ("ord") }
16220 };
16221
16222 static void
16223 CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16224 {
16225 unsigned int cmp_type;
16226
16227 FETCH_DATA (the_info, codep + 1);
16228 cmp_type = *codep++ & 0xff;
16229 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
16230 {
16231 char suffix [3];
16232 char *p = mnemonicendp - 2;
16233 suffix[0] = p[0];
16234 suffix[1] = p[1];
16235 suffix[2] = '\0';
16236 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
16237 mnemonicendp += simd_cmp_op[cmp_type].len;
16238 }
16239 else
16240 {
16241 /* We have a reserved extension byte. Output it directly. */
16242 scratchbuf[0] = '$';
16243 print_operand_value (scratchbuf + 1, 1, cmp_type);
16244 oappend_maybe_intel (scratchbuf);
16245 scratchbuf[0] = '\0';
16246 }
16247 }
16248
16249 static void
16250 OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
16251 int sizeflag ATTRIBUTE_UNUSED)
16252 {
16253 /* mwait %eax,%ecx */
16254 if (!intel_syntax)
16255 {
16256 const char **names = (address_mode == mode_64bit
16257 ? names64 : names32);
16258 strcpy (op_out[0], names[0]);
16259 strcpy (op_out[1], names[1]);
16260 two_source_ops = 1;
16261 }
16262 /* Skip mod/rm byte. */
16263 MODRM_CHECK;
16264 codep++;
16265 }
16266
16267 static void
16268 OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
16269 int sizeflag ATTRIBUTE_UNUSED)
16270 {
16271 /* monitor %eax,%ecx,%edx" */
16272 if (!intel_syntax)
16273 {
16274 const char **op1_names;
16275 const char **names = (address_mode == mode_64bit
16276 ? names64 : names32);
16277
16278 if (!(prefixes & PREFIX_ADDR))
16279 op1_names = (address_mode == mode_16bit
16280 ? names16 : names);
16281 else
16282 {
16283 /* Remove "addr16/addr32". */
16284 all_prefixes[last_addr_prefix] = 0;
16285 op1_names = (address_mode != mode_32bit
16286 ? names32 : names16);
16287 used_prefixes |= PREFIX_ADDR;
16288 }
16289 strcpy (op_out[0], op1_names[0]);
16290 strcpy (op_out[1], names[1]);
16291 strcpy (op_out[2], names[2]);
16292 two_source_ops = 1;
16293 }
16294 /* Skip mod/rm byte. */
16295 MODRM_CHECK;
16296 codep++;
16297 }
16298
16299 static void
16300 BadOp (void)
16301 {
16302 /* Throw away prefixes and 1st. opcode byte. */
16303 codep = insn_codep + 1;
16304 oappend ("(bad)");
16305 }
16306
16307 static void
16308 REP_Fixup (int bytemode, int sizeflag)
16309 {
16310 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
16311 lods and stos. */
16312 if (prefixes & PREFIX_REPZ)
16313 all_prefixes[last_repz_prefix] = REP_PREFIX;
16314
16315 switch (bytemode)
16316 {
16317 case al_reg:
16318 case eAX_reg:
16319 case indir_dx_reg:
16320 OP_IMREG (bytemode, sizeflag);
16321 break;
16322 case eDI_reg:
16323 OP_ESreg (bytemode, sizeflag);
16324 break;
16325 case eSI_reg:
16326 OP_DSreg (bytemode, sizeflag);
16327 break;
16328 default:
16329 abort ();
16330 break;
16331 }
16332 }
16333
16334 /* For BND-prefixed instructions 0xF2 prefix should be displayed as
16335 "bnd". */
16336
16337 static void
16338 BND_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16339 {
16340 if (prefixes & PREFIX_REPNZ)
16341 all_prefixes[last_repnz_prefix] = BND_PREFIX;
16342 }
16343
16344 /* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
16345 "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
16346 */
16347
16348 static void
16349 HLE_Fixup1 (int bytemode, int sizeflag)
16350 {
16351 if (modrm.mod != 3
16352 && (prefixes & PREFIX_LOCK) != 0)
16353 {
16354 if (prefixes & PREFIX_REPZ)
16355 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16356 if (prefixes & PREFIX_REPNZ)
16357 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
16358 }
16359
16360 OP_E (bytemode, sizeflag);
16361 }
16362
16363 /* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
16364 "xacquire"/"xrelease" for memory operand. No check for LOCK prefix.
16365 */
16366
16367 static void
16368 HLE_Fixup2 (int bytemode, int sizeflag)
16369 {
16370 if (modrm.mod != 3)
16371 {
16372 if (prefixes & PREFIX_REPZ)
16373 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16374 if (prefixes & PREFIX_REPNZ)
16375 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
16376 }
16377
16378 OP_E (bytemode, sizeflag);
16379 }
16380
16381 /* Similar to OP_E. But the 0xf3 prefixes should be displayed as
16382 "xrelease" for memory operand. No check for LOCK prefix. */
16383
16384 static void
16385 HLE_Fixup3 (int bytemode, int sizeflag)
16386 {
16387 if (modrm.mod != 3
16388 && last_repz_prefix > last_repnz_prefix
16389 && (prefixes & PREFIX_REPZ) != 0)
16390 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16391
16392 OP_E (bytemode, sizeflag);
16393 }
16394
16395 static void
16396 CMPXCHG8B_Fixup (int bytemode, int sizeflag)
16397 {
16398 USED_REX (REX_W);
16399 if (rex & REX_W)
16400 {
16401 /* Change cmpxchg8b to cmpxchg16b. */
16402 char *p = mnemonicendp - 2;
16403 mnemonicendp = stpcpy (p, "16b");
16404 bytemode = o_mode;
16405 }
16406 else if ((prefixes & PREFIX_LOCK) != 0)
16407 {
16408 if (prefixes & PREFIX_REPZ)
16409 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16410 if (prefixes & PREFIX_REPNZ)
16411 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
16412 }
16413
16414 OP_M (bytemode, sizeflag);
16415 }
16416
16417 static void
16418 XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
16419 {
16420 const char **names;
16421
16422 if (need_vex)
16423 {
16424 switch (vex.length)
16425 {
16426 case 128:
16427 names = names_xmm;
16428 break;
16429 case 256:
16430 names = names_ymm;
16431 break;
16432 default:
16433 abort ();
16434 }
16435 }
16436 else
16437 names = names_xmm;
16438 oappend (names[reg]);
16439 }
16440
16441 static void
16442 CRC32_Fixup (int bytemode, int sizeflag)
16443 {
16444 /* Add proper suffix to "crc32". */
16445 char *p = mnemonicendp;
16446
16447 switch (bytemode)
16448 {
16449 case b_mode:
16450 if (intel_syntax)
16451 goto skip;
16452
16453 *p++ = 'b';
16454 break;
16455 case v_mode:
16456 if (intel_syntax)
16457 goto skip;
16458
16459 USED_REX (REX_W);
16460 if (rex & REX_W)
16461 *p++ = 'q';
16462 else
16463 {
16464 if (sizeflag & DFLAG)
16465 *p++ = 'l';
16466 else
16467 *p++ = 'w';
16468 used_prefixes |= (prefixes & PREFIX_DATA);
16469 }
16470 break;
16471 default:
16472 oappend (INTERNAL_DISASSEMBLER_ERROR);
16473 break;
16474 }
16475 mnemonicendp = p;
16476 *p = '\0';
16477
16478 skip:
16479 if (modrm.mod == 3)
16480 {
16481 int add;
16482
16483 /* Skip mod/rm byte. */
16484 MODRM_CHECK;
16485 codep++;
16486
16487 USED_REX (REX_B);
16488 add = (rex & REX_B) ? 8 : 0;
16489 if (bytemode == b_mode)
16490 {
16491 USED_REX (0);
16492 if (rex)
16493 oappend (names8rex[modrm.rm + add]);
16494 else
16495 oappend (names8[modrm.rm + add]);
16496 }
16497 else
16498 {
16499 USED_REX (REX_W);
16500 if (rex & REX_W)
16501 oappend (names64[modrm.rm + add]);
16502 else if ((prefixes & PREFIX_DATA))
16503 oappend (names16[modrm.rm + add]);
16504 else
16505 oappend (names32[modrm.rm + add]);
16506 }
16507 }
16508 else
16509 OP_E (bytemode, sizeflag);
16510 }
16511
16512 static void
16513 FXSAVE_Fixup (int bytemode, int sizeflag)
16514 {
16515 /* Add proper suffix to "fxsave" and "fxrstor". */
16516 USED_REX (REX_W);
16517 if (rex & REX_W)
16518 {
16519 char *p = mnemonicendp;
16520 *p++ = '6';
16521 *p++ = '4';
16522 *p = '\0';
16523 mnemonicendp = p;
16524 }
16525 OP_M (bytemode, sizeflag);
16526 }
16527
16528 /* Display the destination register operand for instructions with
16529 VEX. */
16530
16531 static void
16532 OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16533 {
16534 int reg;
16535 const char **names;
16536
16537 if (!need_vex)
16538 abort ();
16539
16540 if (!need_vex_reg)
16541 return;
16542
16543 reg = vex.register_specifier;
16544 if (vex.evex)
16545 {
16546 if (!vex.v)
16547 reg += 16;
16548 }
16549
16550 if (bytemode == vex_scalar_mode)
16551 {
16552 oappend (names_xmm[reg]);
16553 return;
16554 }
16555
16556 switch (vex.length)
16557 {
16558 case 128:
16559 switch (bytemode)
16560 {
16561 case vex_mode:
16562 case vex128_mode:
16563 case vex_vsib_q_w_dq_mode:
16564 case vex_vsib_q_w_d_mode:
16565 names = names_xmm;
16566 break;
16567 case dq_mode:
16568 if (vex.w)
16569 names = names64;
16570 else
16571 names = names32;
16572 break;
16573 case mask_bd_mode:
16574 case mask_mode:
16575 names = names_mask;
16576 break;
16577 default:
16578 abort ();
16579 return;
16580 }
16581 break;
16582 case 256:
16583 switch (bytemode)
16584 {
16585 case vex_mode:
16586 case vex256_mode:
16587 names = names_ymm;
16588 break;
16589 case vex_vsib_q_w_dq_mode:
16590 case vex_vsib_q_w_d_mode:
16591 names = vex.w ? names_ymm : names_xmm;
16592 break;
16593 case mask_bd_mode:
16594 case mask_mode:
16595 names = names_mask;
16596 break;
16597 default:
16598 abort ();
16599 return;
16600 }
16601 break;
16602 case 512:
16603 names = names_zmm;
16604 break;
16605 default:
16606 abort ();
16607 break;
16608 }
16609 oappend (names[reg]);
16610 }
16611
16612 /* Get the VEX immediate byte without moving codep. */
16613
16614 static unsigned char
16615 get_vex_imm8 (int sizeflag, int opnum)
16616 {
16617 int bytes_before_imm = 0;
16618
16619 if (modrm.mod != 3)
16620 {
16621 /* There are SIB/displacement bytes. */
16622 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
16623 {
16624 /* 32/64 bit address mode */
16625 int base = modrm.rm;
16626
16627 /* Check SIB byte. */
16628 if (base == 4)
16629 {
16630 FETCH_DATA (the_info, codep + 1);
16631 base = *codep & 7;
16632 /* When decoding the third source, don't increase
16633 bytes_before_imm as this has already been incremented
16634 by one in OP_E_memory while decoding the second
16635 source operand. */
16636 if (opnum == 0)
16637 bytes_before_imm++;
16638 }
16639
16640 /* Don't increase bytes_before_imm when decoding the third source,
16641 it has already been incremented by OP_E_memory while decoding
16642 the second source operand. */
16643 if (opnum == 0)
16644 {
16645 switch (modrm.mod)
16646 {
16647 case 0:
16648 /* When modrm.rm == 5 or modrm.rm == 4 and base in
16649 SIB == 5, there is a 4 byte displacement. */
16650 if (base != 5)
16651 /* No displacement. */
16652 break;
16653 case 2:
16654 /* 4 byte displacement. */
16655 bytes_before_imm += 4;
16656 break;
16657 case 1:
16658 /* 1 byte displacement. */
16659 bytes_before_imm++;
16660 break;
16661 }
16662 }
16663 }
16664 else
16665 {
16666 /* 16 bit address mode */
16667 /* Don't increase bytes_before_imm when decoding the third source,
16668 it has already been incremented by OP_E_memory while decoding
16669 the second source operand. */
16670 if (opnum == 0)
16671 {
16672 switch (modrm.mod)
16673 {
16674 case 0:
16675 /* When modrm.rm == 6, there is a 2 byte displacement. */
16676 if (modrm.rm != 6)
16677 /* No displacement. */
16678 break;
16679 case 2:
16680 /* 2 byte displacement. */
16681 bytes_before_imm += 2;
16682 break;
16683 case 1:
16684 /* 1 byte displacement: when decoding the third source,
16685 don't increase bytes_before_imm as this has already
16686 been incremented by one in OP_E_memory while decoding
16687 the second source operand. */
16688 if (opnum == 0)
16689 bytes_before_imm++;
16690
16691 break;
16692 }
16693 }
16694 }
16695 }
16696
16697 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
16698 return codep [bytes_before_imm];
16699 }
16700
16701 static void
16702 OP_EX_VexReg (int bytemode, int sizeflag, int reg)
16703 {
16704 const char **names;
16705
16706 if (reg == -1 && modrm.mod != 3)
16707 {
16708 OP_E_memory (bytemode, sizeflag);
16709 return;
16710 }
16711 else
16712 {
16713 if (reg == -1)
16714 {
16715 reg = modrm.rm;
16716 USED_REX (REX_B);
16717 if (rex & REX_B)
16718 reg += 8;
16719 }
16720 else if (reg > 7 && address_mode != mode_64bit)
16721 BadOp ();
16722 }
16723
16724 switch (vex.length)
16725 {
16726 case 128:
16727 names = names_xmm;
16728 break;
16729 case 256:
16730 names = names_ymm;
16731 break;
16732 default:
16733 abort ();
16734 }
16735 oappend (names[reg]);
16736 }
16737
16738 static void
16739 OP_EX_VexImmW (int bytemode, int sizeflag)
16740 {
16741 int reg = -1;
16742 static unsigned char vex_imm8;
16743
16744 if (vex_w_done == 0)
16745 {
16746 vex_w_done = 1;
16747
16748 /* Skip mod/rm byte. */
16749 MODRM_CHECK;
16750 codep++;
16751
16752 vex_imm8 = get_vex_imm8 (sizeflag, 0);
16753
16754 if (vex.w)
16755 reg = vex_imm8 >> 4;
16756
16757 OP_EX_VexReg (bytemode, sizeflag, reg);
16758 }
16759 else if (vex_w_done == 1)
16760 {
16761 vex_w_done = 2;
16762
16763 if (!vex.w)
16764 reg = vex_imm8 >> 4;
16765
16766 OP_EX_VexReg (bytemode, sizeflag, reg);
16767 }
16768 else
16769 {
16770 /* Output the imm8 directly. */
16771 scratchbuf[0] = '$';
16772 print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
16773 oappend_maybe_intel (scratchbuf);
16774 scratchbuf[0] = '\0';
16775 codep++;
16776 }
16777 }
16778
16779 static void
16780 OP_Vex_2src (int bytemode, int sizeflag)
16781 {
16782 if (modrm.mod == 3)
16783 {
16784 int reg = modrm.rm;
16785 USED_REX (REX_B);
16786 if (rex & REX_B)
16787 reg += 8;
16788 oappend (names_xmm[reg]);
16789 }
16790 else
16791 {
16792 if (intel_syntax
16793 && (bytemode == v_mode || bytemode == v_swap_mode))
16794 {
16795 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16796 used_prefixes |= (prefixes & PREFIX_DATA);
16797 }
16798 OP_E (bytemode, sizeflag);
16799 }
16800 }
16801
16802 static void
16803 OP_Vex_2src_1 (int bytemode, int sizeflag)
16804 {
16805 if (modrm.mod == 3)
16806 {
16807 /* Skip mod/rm byte. */
16808 MODRM_CHECK;
16809 codep++;
16810 }
16811
16812 if (vex.w)
16813 oappend (names_xmm[vex.register_specifier]);
16814 else
16815 OP_Vex_2src (bytemode, sizeflag);
16816 }
16817
16818 static void
16819 OP_Vex_2src_2 (int bytemode, int sizeflag)
16820 {
16821 if (vex.w)
16822 OP_Vex_2src (bytemode, sizeflag);
16823 else
16824 oappend (names_xmm[vex.register_specifier]);
16825 }
16826
16827 static void
16828 OP_EX_VexW (int bytemode, int sizeflag)
16829 {
16830 int reg = -1;
16831
16832 if (!vex_w_done)
16833 {
16834 vex_w_done = 1;
16835
16836 /* Skip mod/rm byte. */
16837 MODRM_CHECK;
16838 codep++;
16839
16840 if (vex.w)
16841 reg = get_vex_imm8 (sizeflag, 0) >> 4;
16842 }
16843 else
16844 {
16845 if (!vex.w)
16846 reg = get_vex_imm8 (sizeflag, 1) >> 4;
16847 }
16848
16849 OP_EX_VexReg (bytemode, sizeflag, reg);
16850 }
16851
16852 static void
16853 VEXI4_Fixup (int bytemode ATTRIBUTE_UNUSED,
16854 int sizeflag ATTRIBUTE_UNUSED)
16855 {
16856 /* Skip the immediate byte and check for invalid bits. */
16857 FETCH_DATA (the_info, codep + 1);
16858 if (*codep++ & 0xf)
16859 BadOp ();
16860 }
16861
16862 static void
16863 OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16864 {
16865 int reg;
16866 const char **names;
16867
16868 FETCH_DATA (the_info, codep + 1);
16869 reg = *codep++;
16870
16871 if (bytemode != x_mode)
16872 abort ();
16873
16874 if (reg & 0xf)
16875 BadOp ();
16876
16877 reg >>= 4;
16878 if (reg > 7 && address_mode != mode_64bit)
16879 BadOp ();
16880
16881 switch (vex.length)
16882 {
16883 case 128:
16884 names = names_xmm;
16885 break;
16886 case 256:
16887 names = names_ymm;
16888 break;
16889 default:
16890 abort ();
16891 }
16892 oappend (names[reg]);
16893 }
16894
16895 static void
16896 OP_XMM_VexW (int bytemode, int sizeflag)
16897 {
16898 /* Turn off the REX.W bit since it is used for swapping operands
16899 now. */
16900 rex &= ~REX_W;
16901 OP_XMM (bytemode, sizeflag);
16902 }
16903
16904 static void
16905 OP_EX_Vex (int bytemode, int sizeflag)
16906 {
16907 if (modrm.mod != 3)
16908 {
16909 if (vex.register_specifier != 0)
16910 BadOp ();
16911 need_vex_reg = 0;
16912 }
16913 OP_EX (bytemode, sizeflag);
16914 }
16915
16916 static void
16917 OP_XMM_Vex (int bytemode, int sizeflag)
16918 {
16919 if (modrm.mod != 3)
16920 {
16921 if (vex.register_specifier != 0)
16922 BadOp ();
16923 need_vex_reg = 0;
16924 }
16925 OP_XMM (bytemode, sizeflag);
16926 }
16927
16928 static void
16929 VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16930 {
16931 switch (vex.length)
16932 {
16933 case 128:
16934 mnemonicendp = stpcpy (obuf, "vzeroupper");
16935 break;
16936 case 256:
16937 mnemonicendp = stpcpy (obuf, "vzeroall");
16938 break;
16939 default:
16940 abort ();
16941 }
16942 }
16943
16944 static struct op vex_cmp_op[] =
16945 {
16946 { STRING_COMMA_LEN ("eq") },
16947 { STRING_COMMA_LEN ("lt") },
16948 { STRING_COMMA_LEN ("le") },
16949 { STRING_COMMA_LEN ("unord") },
16950 { STRING_COMMA_LEN ("neq") },
16951 { STRING_COMMA_LEN ("nlt") },
16952 { STRING_COMMA_LEN ("nle") },
16953 { STRING_COMMA_LEN ("ord") },
16954 { STRING_COMMA_LEN ("eq_uq") },
16955 { STRING_COMMA_LEN ("nge") },
16956 { STRING_COMMA_LEN ("ngt") },
16957 { STRING_COMMA_LEN ("false") },
16958 { STRING_COMMA_LEN ("neq_oq") },
16959 { STRING_COMMA_LEN ("ge") },
16960 { STRING_COMMA_LEN ("gt") },
16961 { STRING_COMMA_LEN ("true") },
16962 { STRING_COMMA_LEN ("eq_os") },
16963 { STRING_COMMA_LEN ("lt_oq") },
16964 { STRING_COMMA_LEN ("le_oq") },
16965 { STRING_COMMA_LEN ("unord_s") },
16966 { STRING_COMMA_LEN ("neq_us") },
16967 { STRING_COMMA_LEN ("nlt_uq") },
16968 { STRING_COMMA_LEN ("nle_uq") },
16969 { STRING_COMMA_LEN ("ord_s") },
16970 { STRING_COMMA_LEN ("eq_us") },
16971 { STRING_COMMA_LEN ("nge_uq") },
16972 { STRING_COMMA_LEN ("ngt_uq") },
16973 { STRING_COMMA_LEN ("false_os") },
16974 { STRING_COMMA_LEN ("neq_os") },
16975 { STRING_COMMA_LEN ("ge_oq") },
16976 { STRING_COMMA_LEN ("gt_oq") },
16977 { STRING_COMMA_LEN ("true_us") },
16978 };
16979
16980 static void
16981 VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16982 {
16983 unsigned int cmp_type;
16984
16985 FETCH_DATA (the_info, codep + 1);
16986 cmp_type = *codep++ & 0xff;
16987 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
16988 {
16989 char suffix [3];
16990 char *p = mnemonicendp - 2;
16991 suffix[0] = p[0];
16992 suffix[1] = p[1];
16993 suffix[2] = '\0';
16994 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
16995 mnemonicendp += vex_cmp_op[cmp_type].len;
16996 }
16997 else
16998 {
16999 /* We have a reserved extension byte. Output it directly. */
17000 scratchbuf[0] = '$';
17001 print_operand_value (scratchbuf + 1, 1, cmp_type);
17002 oappend_maybe_intel (scratchbuf);
17003 scratchbuf[0] = '\0';
17004 }
17005 }
17006
17007 static void
17008 VPCMP_Fixup (int bytemode ATTRIBUTE_UNUSED,
17009 int sizeflag ATTRIBUTE_UNUSED)
17010 {
17011 unsigned int cmp_type;
17012
17013 if (!vex.evex)
17014 abort ();
17015
17016 FETCH_DATA (the_info, codep + 1);
17017 cmp_type = *codep++ & 0xff;
17018 /* There are aliases for immediates 0, 1, 2, 4, 5, 6.
17019 If it's the case, print suffix, otherwise - print the immediate. */
17020 if (cmp_type < ARRAY_SIZE (simd_cmp_op)
17021 && cmp_type != 3
17022 && cmp_type != 7)
17023 {
17024 char suffix [3];
17025 char *p = mnemonicendp - 2;
17026
17027 /* vpcmp* can have both one- and two-lettered suffix. */
17028 if (p[0] == 'p')
17029 {
17030 p++;
17031 suffix[0] = p[0];
17032 suffix[1] = '\0';
17033 }
17034 else
17035 {
17036 suffix[0] = p[0];
17037 suffix[1] = p[1];
17038 suffix[2] = '\0';
17039 }
17040
17041 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
17042 mnemonicendp += simd_cmp_op[cmp_type].len;
17043 }
17044 else
17045 {
17046 /* We have a reserved extension byte. Output it directly. */
17047 scratchbuf[0] = '$';
17048 print_operand_value (scratchbuf + 1, 1, cmp_type);
17049 oappend_maybe_intel (scratchbuf);
17050 scratchbuf[0] = '\0';
17051 }
17052 }
17053
17054 static const struct op pclmul_op[] =
17055 {
17056 { STRING_COMMA_LEN ("lql") },
17057 { STRING_COMMA_LEN ("hql") },
17058 { STRING_COMMA_LEN ("lqh") },
17059 { STRING_COMMA_LEN ("hqh") }
17060 };
17061
17062 static void
17063 PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
17064 int sizeflag ATTRIBUTE_UNUSED)
17065 {
17066 unsigned int pclmul_type;
17067
17068 FETCH_DATA (the_info, codep + 1);
17069 pclmul_type = *codep++ & 0xff;
17070 switch (pclmul_type)
17071 {
17072 case 0x10:
17073 pclmul_type = 2;
17074 break;
17075 case 0x11:
17076 pclmul_type = 3;
17077 break;
17078 default:
17079 break;
17080 }
17081 if (pclmul_type < ARRAY_SIZE (pclmul_op))
17082 {
17083 char suffix [4];
17084 char *p = mnemonicendp - 3;
17085 suffix[0] = p[0];
17086 suffix[1] = p[1];
17087 suffix[2] = p[2];
17088 suffix[3] = '\0';
17089 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
17090 mnemonicendp += pclmul_op[pclmul_type].len;
17091 }
17092 else
17093 {
17094 /* We have a reserved extension byte. Output it directly. */
17095 scratchbuf[0] = '$';
17096 print_operand_value (scratchbuf + 1, 1, pclmul_type);
17097 oappend_maybe_intel (scratchbuf);
17098 scratchbuf[0] = '\0';
17099 }
17100 }
17101
17102 static void
17103 MOVBE_Fixup (int bytemode, int sizeflag)
17104 {
17105 /* Add proper suffix to "movbe". */
17106 char *p = mnemonicendp;
17107
17108 switch (bytemode)
17109 {
17110 case v_mode:
17111 if (intel_syntax)
17112 goto skip;
17113
17114 USED_REX (REX_W);
17115 if (sizeflag & SUFFIX_ALWAYS)
17116 {
17117 if (rex & REX_W)
17118 *p++ = 'q';
17119 else
17120 {
17121 if (sizeflag & DFLAG)
17122 *p++ = 'l';
17123 else
17124 *p++ = 'w';
17125 used_prefixes |= (prefixes & PREFIX_DATA);
17126 }
17127 }
17128 break;
17129 default:
17130 oappend (INTERNAL_DISASSEMBLER_ERROR);
17131 break;
17132 }
17133 mnemonicendp = p;
17134 *p = '\0';
17135
17136 skip:
17137 OP_M (bytemode, sizeflag);
17138 }
17139
17140 static void
17141 OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17142 {
17143 int reg;
17144 const char **names;
17145
17146 /* Skip mod/rm byte. */
17147 MODRM_CHECK;
17148 codep++;
17149
17150 if (vex.w)
17151 names = names64;
17152 else
17153 names = names32;
17154
17155 reg = modrm.rm;
17156 USED_REX (REX_B);
17157 if (rex & REX_B)
17158 reg += 8;
17159
17160 oappend (names[reg]);
17161 }
17162
17163 static void
17164 OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17165 {
17166 const char **names;
17167
17168 if (vex.w)
17169 names = names64;
17170 else
17171 names = names32;
17172
17173 oappend (names[vex.register_specifier]);
17174 }
17175
17176 static void
17177 OP_Mask (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17178 {
17179 if (!vex.evex
17180 || (bytemode != mask_mode && bytemode != mask_bd_mode))
17181 abort ();
17182
17183 USED_REX (REX_R);
17184 if ((rex & REX_R) != 0 || !vex.r)
17185 {
17186 BadOp ();
17187 return;
17188 }
17189
17190 oappend (names_mask [modrm.reg]);
17191 }
17192
17193 static void
17194 OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17195 {
17196 if (!vex.evex
17197 || (bytemode != evex_rounding_mode
17198 && bytemode != evex_sae_mode))
17199 abort ();
17200 if (modrm.mod == 3 && vex.b)
17201 switch (bytemode)
17202 {
17203 case evex_rounding_mode:
17204 oappend (names_rounding[vex.ll]);
17205 break;
17206 case evex_sae_mode:
17207 oappend ("{sae}");
17208 break;
17209 default:
17210 break;
17211 }
17212 }
This page took 0.391336 seconds and 5 git commands to generate.