xref: /dragonfly/contrib/gdb-7/opcodes/i386-dis.c (revision ce7a3582)
1 /* Print i386 instructions for GDB, the GNU debugger.
2    Copyright 1988, 1989, 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
3    2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
4    Free Software Foundation, Inc.
5 
6    This file is part of the GNU opcodes library.
7 
8    This library is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 3, or (at your option)
11    any later version.
12 
13    It is distributed in the hope that it will be useful, but WITHOUT
14    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
16    License for more details.
17 
18    You should have received a copy of the GNU General Public License
19    along with this program; if not, write to the Free Software
20    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
21    MA 02110-1301, USA.  */
22 
23 
24 /* 80386 instruction printer by Pace Willisson (pace@prep.ai.mit.edu)
25    July 1988
26     modified by John Hassey (hassey@dg-rtp.dg.com)
27     x86-64 support added by Jan Hubicka (jh@suse.cz)
28     VIA PadLock support by Michal Ludvig (mludvig@suse.cz).  */
29 
30 /* The main tables describing the instructions is essentially a copy
31    of the "Opcode Map" chapter (Appendix A) of the Intel 80386
32    Programmers Manual.  Usually, there is a capital letter, followed
33    by a small letter.  The capital letter tell the addressing mode,
34    and the small letter tells about the operand size.  Refer to
35    the Intel manual for details.  */
36 
37 #include "sysdep.h"
38 #include "dis-asm.h"
39 #include "opintl.h"
40 #include "opcode/i386.h"
41 #include "libiberty.h"
42 
43 #include <setjmp.h>
44 
45 static int print_insn (bfd_vma, disassemble_info *);
46 static void dofloat (int);
47 static void OP_ST (int, int);
48 static void OP_STi (int, int);
49 static int putop (const char *, int);
50 static void oappend (const char *);
51 static void append_seg (void);
52 static void OP_indirE (int, int);
53 static void print_operand_value (char *, int, bfd_vma);
54 static void OP_E_register (int, int);
55 static void OP_E_memory (int, int);
56 static void print_displacement (char *, bfd_vma);
57 static void OP_E (int, int);
58 static void OP_G (int, int);
59 static bfd_vma get64 (void);
60 static bfd_signed_vma get32 (void);
61 static bfd_signed_vma get32s (void);
62 static int get16 (void);
63 static void set_op (bfd_vma, int);
64 static void OP_Skip_MODRM (int, int);
65 static void OP_REG (int, int);
66 static void OP_IMREG (int, int);
67 static void OP_I (int, int);
68 static void OP_I64 (int, int);
69 static void OP_sI (int, int);
70 static void OP_J (int, int);
71 static void OP_SEG (int, int);
72 static void OP_DIR (int, int);
73 static void OP_OFF (int, int);
74 static void OP_OFF64 (int, int);
75 static void ptr_reg (int, int);
76 static void OP_ESreg (int, int);
77 static void OP_DSreg (int, int);
78 static void OP_C (int, int);
79 static void OP_D (int, int);
80 static void OP_T (int, int);
81 static void OP_R (int, int);
82 static void OP_MMX (int, int);
83 static void OP_XMM (int, int);
84 static void OP_EM (int, int);
85 static void OP_EX (int, int);
86 static void OP_EMC (int,int);
87 static void OP_MXC (int,int);
88 static void OP_MS (int, int);
89 static void OP_XS (int, int);
90 static void OP_M (int, int);
91 static void OP_VEX (int, int);
92 static void OP_EX_Vex (int, int);
93 static void OP_EX_VexW (int, int);
94 static void OP_EX_VexImmW (int, int);
95 static void OP_XMM_Vex (int, int);
96 static void OP_XMM_VexW (int, int);
97 static void OP_REG_VexI4 (int, int);
98 static void PCLMUL_Fixup (int, int);
99 static void VEXI4_Fixup (int, int);
100 static void VZERO_Fixup (int, int);
101 static void VCMP_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 CMPXCHG8B_Fixup (int, int);
112 static void XMM_Fixup (int, int);
113 static void CRC32_Fixup (int, int);
114 static void FXSAVE_Fixup (int, int);
115 static void OP_LWPCB_E (int, int);
116 static void OP_LWP_E (int, int);
117 static void OP_Vex_2src_1 (int, int);
118 static void OP_Vex_2src_2 (int, int);
119 
120 static void MOVBE_Fixup (int, int);
121 
122 struct dis_private {
123   /* Points to first byte not fetched.  */
124   bfd_byte *max_fetched;
125   bfd_byte the_buffer[MAX_MNEM_SIZE];
126   bfd_vma insn_start;
127   int orig_sizeflag;
128   jmp_buf bailout;
129 };
130 
131 enum address_mode
132 {
133   mode_16bit,
134   mode_32bit,
135   mode_64bit
136 };
137 
138 enum address_mode address_mode;
139 
140 /* Flags for the prefixes for the current instruction.  See below.  */
141 static int prefixes;
142 
143 /* REX prefix the current instruction.  See below.  */
144 static int rex;
145 /* Bits of REX we've already used.  */
146 static int rex_used;
147 /* REX bits in original REX prefix ignored.  */
148 static int rex_ignored;
149 /* Mark parts used in the REX prefix.  When we are testing for
150    empty prefix (for 8bit register REX extension), just mask it
151    out.  Otherwise test for REX bit is excuse for existence of REX
152    only in case value is nonzero.  */
153 #define USED_REX(value)					\
154   {							\
155     if (value)						\
156       {							\
157 	if ((rex & value))				\
158 	  rex_used |= (value) | REX_OPCODE;		\
159       }							\
160     else						\
161       rex_used |= REX_OPCODE;				\
162   }
163 
164 /* Flags for prefixes which we somehow handled when printing the
165    current instruction.  */
166 static int used_prefixes;
167 
168 /* Flags stored in PREFIXES.  */
169 #define PREFIX_REPZ 1
170 #define PREFIX_REPNZ 2
171 #define PREFIX_LOCK 4
172 #define PREFIX_CS 8
173 #define PREFIX_SS 0x10
174 #define PREFIX_DS 0x20
175 #define PREFIX_ES 0x40
176 #define PREFIX_FS 0x80
177 #define PREFIX_GS 0x100
178 #define PREFIX_DATA 0x200
179 #define PREFIX_ADDR 0x400
180 #define PREFIX_FWAIT 0x800
181 
182 /* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
183    to ADDR (exclusive) are valid.  Returns 1 for success, longjmps
184    on error.  */
185 #define FETCH_DATA(info, addr) \
186   ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
187    ? 1 : fetch_data ((info), (addr)))
188 
189 static int
190 fetch_data (struct disassemble_info *info, bfd_byte *addr)
191 {
192   int status;
193   struct dis_private *priv = (struct dis_private *) info->private_data;
194   bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
195 
196   if (addr <= priv->the_buffer + MAX_MNEM_SIZE)
197     status = (*info->read_memory_func) (start,
198 					priv->max_fetched,
199 					addr - priv->max_fetched,
200 					info);
201   else
202     status = -1;
203   if (status != 0)
204     {
205       /* If we did manage to read at least one byte, then
206 	 print_insn_i386 will do something sensible.  Otherwise, print
207 	 an error.  We do that here because this is where we know
208 	 STATUS.  */
209       if (priv->max_fetched == priv->the_buffer)
210 	(*info->memory_error_func) (status, start, info);
211       longjmp (priv->bailout, 1);
212     }
213   else
214     priv->max_fetched = addr;
215   return 1;
216 }
217 
218 #define XX { NULL, 0 }
219 #define Bad_Opcode NULL, { { NULL, 0 } }
220 
221 #define Eb { OP_E, b_mode }
222 #define EbS { OP_E, b_swap_mode }
223 #define Ev { OP_E, v_mode }
224 #define EvS { OP_E, v_swap_mode }
225 #define Ed { OP_E, d_mode }
226 #define Edq { OP_E, dq_mode }
227 #define Edqw { OP_E, dqw_mode }
228 #define Edqb { OP_E, dqb_mode }
229 #define Edqd { OP_E, dqd_mode }
230 #define Eq { OP_E, q_mode }
231 #define indirEv { OP_indirE, stack_v_mode }
232 #define indirEp { OP_indirE, f_mode }
233 #define stackEv { OP_E, stack_v_mode }
234 #define Em { OP_E, m_mode }
235 #define Ew { OP_E, w_mode }
236 #define M { OP_M, 0 }		/* lea, lgdt, etc. */
237 #define Ma { OP_M, a_mode }
238 #define Mb { OP_M, b_mode }
239 #define Md { OP_M, d_mode }
240 #define Mo { OP_M, o_mode }
241 #define Mp { OP_M, f_mode }		/* 32 or 48 bit memory operand for LDS, LES etc */
242 #define Mq { OP_M, q_mode }
243 #define Mx { OP_M, x_mode }
244 #define Mxmm { OP_M, xmm_mode }
245 #define Gb { OP_G, b_mode }
246 #define Gv { OP_G, v_mode }
247 #define Gd { OP_G, d_mode }
248 #define Gdq { OP_G, dq_mode }
249 #define Gm { OP_G, m_mode }
250 #define Gw { OP_G, w_mode }
251 #define Rd { OP_R, d_mode }
252 #define Rm { OP_R, m_mode }
253 #define Ib { OP_I, b_mode }
254 #define sIb { OP_sI, b_mode }	/* sign extened byte */
255 #define sIbT { OP_sI, b_T_mode } /* sign extened byte like 'T' */
256 #define Iv { OP_I, v_mode }
257 #define sIv { OP_sI, v_mode }
258 #define Iq { OP_I, q_mode }
259 #define Iv64 { OP_I64, v_mode }
260 #define Iw { OP_I, w_mode }
261 #define I1 { OP_I, const_1_mode }
262 #define Jb { OP_J, b_mode }
263 #define Jv { OP_J, v_mode }
264 #define Cm { OP_C, m_mode }
265 #define Dm { OP_D, m_mode }
266 #define Td { OP_T, d_mode }
267 #define Skip_MODRM { OP_Skip_MODRM, 0 }
268 
269 #define RMeAX { OP_REG, eAX_reg }
270 #define RMeBX { OP_REG, eBX_reg }
271 #define RMeCX { OP_REG, eCX_reg }
272 #define RMeDX { OP_REG, eDX_reg }
273 #define RMeSP { OP_REG, eSP_reg }
274 #define RMeBP { OP_REG, eBP_reg }
275 #define RMeSI { OP_REG, eSI_reg }
276 #define RMeDI { OP_REG, eDI_reg }
277 #define RMrAX { OP_REG, rAX_reg }
278 #define RMrBX { OP_REG, rBX_reg }
279 #define RMrCX { OP_REG, rCX_reg }
280 #define RMrDX { OP_REG, rDX_reg }
281 #define RMrSP { OP_REG, rSP_reg }
282 #define RMrBP { OP_REG, rBP_reg }
283 #define RMrSI { OP_REG, rSI_reg }
284 #define RMrDI { OP_REG, rDI_reg }
285 #define RMAL { OP_REG, al_reg }
286 #define RMCL { OP_REG, cl_reg }
287 #define RMDL { OP_REG, dl_reg }
288 #define RMBL { OP_REG, bl_reg }
289 #define RMAH { OP_REG, ah_reg }
290 #define RMCH { OP_REG, ch_reg }
291 #define RMDH { OP_REG, dh_reg }
292 #define RMBH { OP_REG, bh_reg }
293 #define RMAX { OP_REG, ax_reg }
294 #define RMDX { OP_REG, dx_reg }
295 
296 #define eAX { OP_IMREG, eAX_reg }
297 #define eBX { OP_IMREG, eBX_reg }
298 #define eCX { OP_IMREG, eCX_reg }
299 #define eDX { OP_IMREG, eDX_reg }
300 #define eSP { OP_IMREG, eSP_reg }
301 #define eBP { OP_IMREG, eBP_reg }
302 #define eSI { OP_IMREG, eSI_reg }
303 #define eDI { OP_IMREG, eDI_reg }
304 #define AL { OP_IMREG, al_reg }
305 #define CL { OP_IMREG, cl_reg }
306 #define DL { OP_IMREG, dl_reg }
307 #define BL { OP_IMREG, bl_reg }
308 #define AH { OP_IMREG, ah_reg }
309 #define CH { OP_IMREG, ch_reg }
310 #define DH { OP_IMREG, dh_reg }
311 #define BH { OP_IMREG, bh_reg }
312 #define AX { OP_IMREG, ax_reg }
313 #define DX { OP_IMREG, dx_reg }
314 #define zAX { OP_IMREG, z_mode_ax_reg }
315 #define indirDX { OP_IMREG, indir_dx_reg }
316 
317 #define Sw { OP_SEG, w_mode }
318 #define Sv { OP_SEG, v_mode }
319 #define Ap { OP_DIR, 0 }
320 #define Ob { OP_OFF64, b_mode }
321 #define Ov { OP_OFF64, v_mode }
322 #define Xb { OP_DSreg, eSI_reg }
323 #define Xv { OP_DSreg, eSI_reg }
324 #define Xz { OP_DSreg, eSI_reg }
325 #define Yb { OP_ESreg, eDI_reg }
326 #define Yv { OP_ESreg, eDI_reg }
327 #define DSBX { OP_DSreg, eBX_reg }
328 
329 #define es { OP_REG, es_reg }
330 #define ss { OP_REG, ss_reg }
331 #define cs { OP_REG, cs_reg }
332 #define ds { OP_REG, ds_reg }
333 #define fs { OP_REG, fs_reg }
334 #define gs { OP_REG, gs_reg }
335 
336 #define MX { OP_MMX, 0 }
337 #define XM { OP_XMM, 0 }
338 #define XMScalar { OP_XMM, scalar_mode }
339 #define XMM { OP_XMM, xmm_mode }
340 #define EM { OP_EM, v_mode }
341 #define EMS { OP_EM, v_swap_mode }
342 #define EMd { OP_EM, d_mode }
343 #define EMx { OP_EM, x_mode }
344 #define EXw { OP_EX, w_mode }
345 #define EXd { OP_EX, d_mode }
346 #define EXdScalar { OP_EX, d_scalar_mode }
347 #define EXdS { OP_EX, d_swap_mode }
348 #define EXq { OP_EX, q_mode }
349 #define EXqScalar { OP_EX, q_scalar_mode }
350 #define EXqScalarS { OP_EX, q_scalar_swap_mode }
351 #define EXqS { OP_EX, q_swap_mode }
352 #define EXx { OP_EX, x_mode }
353 #define EXxS { OP_EX, x_swap_mode }
354 #define EXxmm { OP_EX, xmm_mode }
355 #define EXxmmq { OP_EX, xmmq_mode }
356 #define EXymmq { OP_EX, ymmq_mode }
357 #define EXVexWdq { OP_EX, vex_w_dq_mode }
358 #define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
359 #define MS { OP_MS, v_mode }
360 #define XS { OP_XS, v_mode }
361 #define EMCq { OP_EMC, q_mode }
362 #define MXC { OP_MXC, 0 }
363 #define OPSUF { OP_3DNowSuffix, 0 }
364 #define CMP { CMP_Fixup, 0 }
365 #define XMM0 { XMM_Fixup, 0 }
366 #define FXSAVE { FXSAVE_Fixup, 0 }
367 #define Vex_2src_1 { OP_Vex_2src_1, 0 }
368 #define Vex_2src_2 { OP_Vex_2src_2, 0 }
369 
370 #define Vex { OP_VEX, vex_mode }
371 #define VexScalar { OP_VEX, vex_scalar_mode }
372 #define Vex128 { OP_VEX, vex128_mode }
373 #define Vex256 { OP_VEX, vex256_mode }
374 #define VexGdq { OP_VEX, dq_mode }
375 #define VexI4 { VEXI4_Fixup, 0}
376 #define EXdVex { OP_EX_Vex, d_mode }
377 #define EXdVexS { OP_EX_Vex, d_swap_mode }
378 #define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode }
379 #define EXqVex { OP_EX_Vex, q_mode }
380 #define EXqVexS { OP_EX_Vex, q_swap_mode }
381 #define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode }
382 #define EXVexW { OP_EX_VexW, x_mode }
383 #define EXdVexW { OP_EX_VexW, d_mode }
384 #define EXqVexW { OP_EX_VexW, q_mode }
385 #define EXVexImmW { OP_EX_VexImmW, x_mode }
386 #define XMVex { OP_XMM_Vex, 0 }
387 #define XMVexScalar { OP_XMM_Vex, scalar_mode }
388 #define XMVexW { OP_XMM_VexW, 0 }
389 #define XMVexI4 { OP_REG_VexI4, x_mode }
390 #define PCLMUL { PCLMUL_Fixup, 0 }
391 #define VZERO { VZERO_Fixup, 0 }
392 #define VCMP { VCMP_Fixup, 0 }
393 
394 /* Used handle "rep" prefix for string instructions.  */
395 #define Xbr { REP_Fixup, eSI_reg }
396 #define Xvr { REP_Fixup, eSI_reg }
397 #define Ybr { REP_Fixup, eDI_reg }
398 #define Yvr { REP_Fixup, eDI_reg }
399 #define Yzr { REP_Fixup, eDI_reg }
400 #define indirDXr { REP_Fixup, indir_dx_reg }
401 #define ALr { REP_Fixup, al_reg }
402 #define eAXr { REP_Fixup, eAX_reg }
403 
404 #define cond_jump_flag { NULL, cond_jump_mode }
405 #define loop_jcxz_flag { NULL, loop_jcxz_mode }
406 
407 /* bits in sizeflag */
408 #define SUFFIX_ALWAYS 4
409 #define AFLAG 2
410 #define DFLAG 1
411 
412 enum
413 {
414   /* byte operand */
415   b_mode = 1,
416   /* byte operand with operand swapped */
417   b_swap_mode,
418   /* byte operand, sign extend like 'T' suffix */
419   b_T_mode,
420   /* operand size depends on prefixes */
421   v_mode,
422   /* operand size depends on prefixes with operand swapped */
423   v_swap_mode,
424   /* word operand */
425   w_mode,
426   /* double word operand  */
427   d_mode,
428   /* double word operand with operand swapped */
429   d_swap_mode,
430   /* quad word operand */
431   q_mode,
432   /* quad word operand with operand swapped */
433   q_swap_mode,
434   /* ten-byte operand */
435   t_mode,
436   /* 16-byte XMM or 32-byte YMM operand */
437   x_mode,
438   /* 16-byte XMM or 32-byte YMM operand with operand swapped */
439   x_swap_mode,
440   /* 16-byte XMM operand */
441   xmm_mode,
442   /* 16-byte XMM or quad word operand */
443   xmmq_mode,
444   /* 32-byte YMM or quad word operand */
445   ymmq_mode,
446   /* d_mode in 32bit, q_mode in 64bit mode.  */
447   m_mode,
448   /* pair of v_mode operands */
449   a_mode,
450   cond_jump_mode,
451   loop_jcxz_mode,
452   /* operand size depends on REX prefixes.  */
453   dq_mode,
454   /* registers like dq_mode, memory like w_mode.  */
455   dqw_mode,
456   /* 4- or 6-byte pointer operand */
457   f_mode,
458   const_1_mode,
459   /* v_mode for stack-related opcodes.  */
460   stack_v_mode,
461   /* non-quad operand size depends on prefixes */
462   z_mode,
463   /* 16-byte operand */
464   o_mode,
465   /* registers like dq_mode, memory like b_mode.  */
466   dqb_mode,
467   /* registers like dq_mode, memory like d_mode.  */
468   dqd_mode,
469   /* normal vex mode */
470   vex_mode,
471   /* 128bit vex mode */
472   vex128_mode,
473   /* 256bit vex mode */
474   vex256_mode,
475   /* operand size depends on the VEX.W bit.  */
476   vex_w_dq_mode,
477 
478   /* scalar, ignore vector length.  */
479   scalar_mode,
480   /* like d_mode, ignore vector length.  */
481   d_scalar_mode,
482   /* like d_swap_mode, ignore vector length.  */
483   d_scalar_swap_mode,
484   /* like q_mode, ignore vector length.  */
485   q_scalar_mode,
486   /* like q_swap_mode, ignore vector length.  */
487   q_scalar_swap_mode,
488   /* like vex_mode, ignore vector length.  */
489   vex_scalar_mode,
490   /* like vex_w_dq_mode, ignore vector length.  */
491   vex_scalar_w_dq_mode,
492 
493   es_reg,
494   cs_reg,
495   ss_reg,
496   ds_reg,
497   fs_reg,
498   gs_reg,
499 
500   eAX_reg,
501   eCX_reg,
502   eDX_reg,
503   eBX_reg,
504   eSP_reg,
505   eBP_reg,
506   eSI_reg,
507   eDI_reg,
508 
509   al_reg,
510   cl_reg,
511   dl_reg,
512   bl_reg,
513   ah_reg,
514   ch_reg,
515   dh_reg,
516   bh_reg,
517 
518   ax_reg,
519   cx_reg,
520   dx_reg,
521   bx_reg,
522   sp_reg,
523   bp_reg,
524   si_reg,
525   di_reg,
526 
527   rAX_reg,
528   rCX_reg,
529   rDX_reg,
530   rBX_reg,
531   rSP_reg,
532   rBP_reg,
533   rSI_reg,
534   rDI_reg,
535 
536   z_mode_ax_reg,
537   indir_dx_reg
538 };
539 
540 enum
541 {
542   FLOATCODE = 1,
543   USE_REG_TABLE,
544   USE_MOD_TABLE,
545   USE_RM_TABLE,
546   USE_PREFIX_TABLE,
547   USE_X86_64_TABLE,
548   USE_3BYTE_TABLE,
549   USE_XOP_8F_TABLE,
550   USE_VEX_C4_TABLE,
551   USE_VEX_C5_TABLE,
552   USE_VEX_LEN_TABLE,
553   USE_VEX_W_TABLE
554 };
555 
556 #define FLOAT			NULL, { { NULL, FLOATCODE } }
557 
558 #define DIS386(T, I)		NULL, { { NULL, (T)}, { NULL,  (I) } }
559 #define REG_TABLE(I)		DIS386 (USE_REG_TABLE, (I))
560 #define MOD_TABLE(I)		DIS386 (USE_MOD_TABLE, (I))
561 #define RM_TABLE(I)		DIS386 (USE_RM_TABLE, (I))
562 #define PREFIX_TABLE(I)		DIS386 (USE_PREFIX_TABLE, (I))
563 #define X86_64_TABLE(I)		DIS386 (USE_X86_64_TABLE, (I))
564 #define THREE_BYTE_TABLE(I)	DIS386 (USE_3BYTE_TABLE, (I))
565 #define XOP_8F_TABLE(I)		DIS386 (USE_XOP_8F_TABLE, (I))
566 #define VEX_C4_TABLE(I)		DIS386 (USE_VEX_C4_TABLE, (I))
567 #define VEX_C5_TABLE(I)		DIS386 (USE_VEX_C5_TABLE, (I))
568 #define VEX_LEN_TABLE(I)	DIS386 (USE_VEX_LEN_TABLE, (I))
569 #define VEX_W_TABLE(I)		DIS386 (USE_VEX_W_TABLE, (I))
570 
571 enum
572 {
573   REG_80 = 0,
574   REG_81,
575   REG_82,
576   REG_8F,
577   REG_C0,
578   REG_C1,
579   REG_C6,
580   REG_C7,
581   REG_D0,
582   REG_D1,
583   REG_D2,
584   REG_D3,
585   REG_F6,
586   REG_F7,
587   REG_FE,
588   REG_FF,
589   REG_0F00,
590   REG_0F01,
591   REG_0F0D,
592   REG_0F18,
593   REG_0F71,
594   REG_0F72,
595   REG_0F73,
596   REG_0FA6,
597   REG_0FA7,
598   REG_0FAE,
599   REG_0FBA,
600   REG_0FC7,
601   REG_VEX_0F71,
602   REG_VEX_0F72,
603   REG_VEX_0F73,
604   REG_VEX_0FAE,
605   REG_VEX_0F38F3,
606   REG_XOP_LWPCB,
607   REG_XOP_LWP,
608   REG_XOP_TBM_01,
609   REG_XOP_TBM_02
610 };
611 
612 enum
613 {
614   MOD_8D = 0,
615   MOD_0F01_REG_0,
616   MOD_0F01_REG_1,
617   MOD_0F01_REG_2,
618   MOD_0F01_REG_3,
619   MOD_0F01_REG_7,
620   MOD_0F12_PREFIX_0,
621   MOD_0F13,
622   MOD_0F16_PREFIX_0,
623   MOD_0F17,
624   MOD_0F18_REG_0,
625   MOD_0F18_REG_1,
626   MOD_0F18_REG_2,
627   MOD_0F18_REG_3,
628   MOD_0F20,
629   MOD_0F21,
630   MOD_0F22,
631   MOD_0F23,
632   MOD_0F24,
633   MOD_0F26,
634   MOD_0F2B_PREFIX_0,
635   MOD_0F2B_PREFIX_1,
636   MOD_0F2B_PREFIX_2,
637   MOD_0F2B_PREFIX_3,
638   MOD_0F51,
639   MOD_0F71_REG_2,
640   MOD_0F71_REG_4,
641   MOD_0F71_REG_6,
642   MOD_0F72_REG_2,
643   MOD_0F72_REG_4,
644   MOD_0F72_REG_6,
645   MOD_0F73_REG_2,
646   MOD_0F73_REG_3,
647   MOD_0F73_REG_6,
648   MOD_0F73_REG_7,
649   MOD_0FAE_REG_0,
650   MOD_0FAE_REG_1,
651   MOD_0FAE_REG_2,
652   MOD_0FAE_REG_3,
653   MOD_0FAE_REG_4,
654   MOD_0FAE_REG_5,
655   MOD_0FAE_REG_6,
656   MOD_0FAE_REG_7,
657   MOD_0FB2,
658   MOD_0FB4,
659   MOD_0FB5,
660   MOD_0FC7_REG_6,
661   MOD_0FC7_REG_7,
662   MOD_0FD7,
663   MOD_0FE7_PREFIX_2,
664   MOD_0FF0_PREFIX_3,
665   MOD_0F382A_PREFIX_2,
666   MOD_62_32BIT,
667   MOD_C4_32BIT,
668   MOD_C5_32BIT,
669   MOD_VEX_0F12_PREFIX_0,
670   MOD_VEX_0F13,
671   MOD_VEX_0F16_PREFIX_0,
672   MOD_VEX_0F17,
673   MOD_VEX_0F2B,
674   MOD_VEX_0F50,
675   MOD_VEX_0F71_REG_2,
676   MOD_VEX_0F71_REG_4,
677   MOD_VEX_0F71_REG_6,
678   MOD_VEX_0F72_REG_2,
679   MOD_VEX_0F72_REG_4,
680   MOD_VEX_0F72_REG_6,
681   MOD_VEX_0F73_REG_2,
682   MOD_VEX_0F73_REG_3,
683   MOD_VEX_0F73_REG_6,
684   MOD_VEX_0F73_REG_7,
685   MOD_VEX_0FAE_REG_2,
686   MOD_VEX_0FAE_REG_3,
687   MOD_VEX_0FD7_PREFIX_2,
688   MOD_VEX_0FE7_PREFIX_2,
689   MOD_VEX_0FF0_PREFIX_3,
690   MOD_VEX_0F3818_PREFIX_2,
691   MOD_VEX_0F3819_PREFIX_2,
692   MOD_VEX_0F381A_PREFIX_2,
693   MOD_VEX_0F382A_PREFIX_2,
694   MOD_VEX_0F382C_PREFIX_2,
695   MOD_VEX_0F382D_PREFIX_2,
696   MOD_VEX_0F382E_PREFIX_2,
697   MOD_VEX_0F382F_PREFIX_2
698 };
699 
700 enum
701 {
702   RM_0F01_REG_0 = 0,
703   RM_0F01_REG_1,
704   RM_0F01_REG_2,
705   RM_0F01_REG_3,
706   RM_0F01_REG_7,
707   RM_0FAE_REG_5,
708   RM_0FAE_REG_6,
709   RM_0FAE_REG_7
710 };
711 
712 enum
713 {
714   PREFIX_90 = 0,
715   PREFIX_0F10,
716   PREFIX_0F11,
717   PREFIX_0F12,
718   PREFIX_0F16,
719   PREFIX_0F2A,
720   PREFIX_0F2B,
721   PREFIX_0F2C,
722   PREFIX_0F2D,
723   PREFIX_0F2E,
724   PREFIX_0F2F,
725   PREFIX_0F51,
726   PREFIX_0F52,
727   PREFIX_0F53,
728   PREFIX_0F58,
729   PREFIX_0F59,
730   PREFIX_0F5A,
731   PREFIX_0F5B,
732   PREFIX_0F5C,
733   PREFIX_0F5D,
734   PREFIX_0F5E,
735   PREFIX_0F5F,
736   PREFIX_0F60,
737   PREFIX_0F61,
738   PREFIX_0F62,
739   PREFIX_0F6C,
740   PREFIX_0F6D,
741   PREFIX_0F6F,
742   PREFIX_0F70,
743   PREFIX_0F73_REG_3,
744   PREFIX_0F73_REG_7,
745   PREFIX_0F78,
746   PREFIX_0F79,
747   PREFIX_0F7C,
748   PREFIX_0F7D,
749   PREFIX_0F7E,
750   PREFIX_0F7F,
751   PREFIX_0FAE_REG_0,
752   PREFIX_0FAE_REG_1,
753   PREFIX_0FAE_REG_2,
754   PREFIX_0FAE_REG_3,
755   PREFIX_0FB8,
756   PREFIX_0FBC,
757   PREFIX_0FBD,
758   PREFIX_0FC2,
759   PREFIX_0FC3,
760   PREFIX_0FC7_REG_6,
761   PREFIX_0FD0,
762   PREFIX_0FD6,
763   PREFIX_0FE6,
764   PREFIX_0FE7,
765   PREFIX_0FF0,
766   PREFIX_0FF7,
767   PREFIX_0F3810,
768   PREFIX_0F3814,
769   PREFIX_0F3815,
770   PREFIX_0F3817,
771   PREFIX_0F3820,
772   PREFIX_0F3821,
773   PREFIX_0F3822,
774   PREFIX_0F3823,
775   PREFIX_0F3824,
776   PREFIX_0F3825,
777   PREFIX_0F3828,
778   PREFIX_0F3829,
779   PREFIX_0F382A,
780   PREFIX_0F382B,
781   PREFIX_0F3830,
782   PREFIX_0F3831,
783   PREFIX_0F3832,
784   PREFIX_0F3833,
785   PREFIX_0F3834,
786   PREFIX_0F3835,
787   PREFIX_0F3837,
788   PREFIX_0F3838,
789   PREFIX_0F3839,
790   PREFIX_0F383A,
791   PREFIX_0F383B,
792   PREFIX_0F383C,
793   PREFIX_0F383D,
794   PREFIX_0F383E,
795   PREFIX_0F383F,
796   PREFIX_0F3840,
797   PREFIX_0F3841,
798   PREFIX_0F3880,
799   PREFIX_0F3881,
800   PREFIX_0F38DB,
801   PREFIX_0F38DC,
802   PREFIX_0F38DD,
803   PREFIX_0F38DE,
804   PREFIX_0F38DF,
805   PREFIX_0F38F0,
806   PREFIX_0F38F1,
807   PREFIX_0F3A08,
808   PREFIX_0F3A09,
809   PREFIX_0F3A0A,
810   PREFIX_0F3A0B,
811   PREFIX_0F3A0C,
812   PREFIX_0F3A0D,
813   PREFIX_0F3A0E,
814   PREFIX_0F3A14,
815   PREFIX_0F3A15,
816   PREFIX_0F3A16,
817   PREFIX_0F3A17,
818   PREFIX_0F3A20,
819   PREFIX_0F3A21,
820   PREFIX_0F3A22,
821   PREFIX_0F3A40,
822   PREFIX_0F3A41,
823   PREFIX_0F3A42,
824   PREFIX_0F3A44,
825   PREFIX_0F3A60,
826   PREFIX_0F3A61,
827   PREFIX_0F3A62,
828   PREFIX_0F3A63,
829   PREFIX_0F3ADF,
830   PREFIX_VEX_0F10,
831   PREFIX_VEX_0F11,
832   PREFIX_VEX_0F12,
833   PREFIX_VEX_0F16,
834   PREFIX_VEX_0F2A,
835   PREFIX_VEX_0F2C,
836   PREFIX_VEX_0F2D,
837   PREFIX_VEX_0F2E,
838   PREFIX_VEX_0F2F,
839   PREFIX_VEX_0F51,
840   PREFIX_VEX_0F52,
841   PREFIX_VEX_0F53,
842   PREFIX_VEX_0F58,
843   PREFIX_VEX_0F59,
844   PREFIX_VEX_0F5A,
845   PREFIX_VEX_0F5B,
846   PREFIX_VEX_0F5C,
847   PREFIX_VEX_0F5D,
848   PREFIX_VEX_0F5E,
849   PREFIX_VEX_0F5F,
850   PREFIX_VEX_0F60,
851   PREFIX_VEX_0F61,
852   PREFIX_VEX_0F62,
853   PREFIX_VEX_0F63,
854   PREFIX_VEX_0F64,
855   PREFIX_VEX_0F65,
856   PREFIX_VEX_0F66,
857   PREFIX_VEX_0F67,
858   PREFIX_VEX_0F68,
859   PREFIX_VEX_0F69,
860   PREFIX_VEX_0F6A,
861   PREFIX_VEX_0F6B,
862   PREFIX_VEX_0F6C,
863   PREFIX_VEX_0F6D,
864   PREFIX_VEX_0F6E,
865   PREFIX_VEX_0F6F,
866   PREFIX_VEX_0F70,
867   PREFIX_VEX_0F71_REG_2,
868   PREFIX_VEX_0F71_REG_4,
869   PREFIX_VEX_0F71_REG_6,
870   PREFIX_VEX_0F72_REG_2,
871   PREFIX_VEX_0F72_REG_4,
872   PREFIX_VEX_0F72_REG_6,
873   PREFIX_VEX_0F73_REG_2,
874   PREFIX_VEX_0F73_REG_3,
875   PREFIX_VEX_0F73_REG_6,
876   PREFIX_VEX_0F73_REG_7,
877   PREFIX_VEX_0F74,
878   PREFIX_VEX_0F75,
879   PREFIX_VEX_0F76,
880   PREFIX_VEX_0F77,
881   PREFIX_VEX_0F7C,
882   PREFIX_VEX_0F7D,
883   PREFIX_VEX_0F7E,
884   PREFIX_VEX_0F7F,
885   PREFIX_VEX_0FC2,
886   PREFIX_VEX_0FC4,
887   PREFIX_VEX_0FC5,
888   PREFIX_VEX_0FD0,
889   PREFIX_VEX_0FD1,
890   PREFIX_VEX_0FD2,
891   PREFIX_VEX_0FD3,
892   PREFIX_VEX_0FD4,
893   PREFIX_VEX_0FD5,
894   PREFIX_VEX_0FD6,
895   PREFIX_VEX_0FD7,
896   PREFIX_VEX_0FD8,
897   PREFIX_VEX_0FD9,
898   PREFIX_VEX_0FDA,
899   PREFIX_VEX_0FDB,
900   PREFIX_VEX_0FDC,
901   PREFIX_VEX_0FDD,
902   PREFIX_VEX_0FDE,
903   PREFIX_VEX_0FDF,
904   PREFIX_VEX_0FE0,
905   PREFIX_VEX_0FE1,
906   PREFIX_VEX_0FE2,
907   PREFIX_VEX_0FE3,
908   PREFIX_VEX_0FE4,
909   PREFIX_VEX_0FE5,
910   PREFIX_VEX_0FE6,
911   PREFIX_VEX_0FE7,
912   PREFIX_VEX_0FE8,
913   PREFIX_VEX_0FE9,
914   PREFIX_VEX_0FEA,
915   PREFIX_VEX_0FEB,
916   PREFIX_VEX_0FEC,
917   PREFIX_VEX_0FED,
918   PREFIX_VEX_0FEE,
919   PREFIX_VEX_0FEF,
920   PREFIX_VEX_0FF0,
921   PREFIX_VEX_0FF1,
922   PREFIX_VEX_0FF2,
923   PREFIX_VEX_0FF3,
924   PREFIX_VEX_0FF4,
925   PREFIX_VEX_0FF5,
926   PREFIX_VEX_0FF6,
927   PREFIX_VEX_0FF7,
928   PREFIX_VEX_0FF8,
929   PREFIX_VEX_0FF9,
930   PREFIX_VEX_0FFA,
931   PREFIX_VEX_0FFB,
932   PREFIX_VEX_0FFC,
933   PREFIX_VEX_0FFD,
934   PREFIX_VEX_0FFE,
935   PREFIX_VEX_0F3800,
936   PREFIX_VEX_0F3801,
937   PREFIX_VEX_0F3802,
938   PREFIX_VEX_0F3803,
939   PREFIX_VEX_0F3804,
940   PREFIX_VEX_0F3805,
941   PREFIX_VEX_0F3806,
942   PREFIX_VEX_0F3807,
943   PREFIX_VEX_0F3808,
944   PREFIX_VEX_0F3809,
945   PREFIX_VEX_0F380A,
946   PREFIX_VEX_0F380B,
947   PREFIX_VEX_0F380C,
948   PREFIX_VEX_0F380D,
949   PREFIX_VEX_0F380E,
950   PREFIX_VEX_0F380F,
951   PREFIX_VEX_0F3813,
952   PREFIX_VEX_0F3817,
953   PREFIX_VEX_0F3818,
954   PREFIX_VEX_0F3819,
955   PREFIX_VEX_0F381A,
956   PREFIX_VEX_0F381C,
957   PREFIX_VEX_0F381D,
958   PREFIX_VEX_0F381E,
959   PREFIX_VEX_0F3820,
960   PREFIX_VEX_0F3821,
961   PREFIX_VEX_0F3822,
962   PREFIX_VEX_0F3823,
963   PREFIX_VEX_0F3824,
964   PREFIX_VEX_0F3825,
965   PREFIX_VEX_0F3828,
966   PREFIX_VEX_0F3829,
967   PREFIX_VEX_0F382A,
968   PREFIX_VEX_0F382B,
969   PREFIX_VEX_0F382C,
970   PREFIX_VEX_0F382D,
971   PREFIX_VEX_0F382E,
972   PREFIX_VEX_0F382F,
973   PREFIX_VEX_0F3830,
974   PREFIX_VEX_0F3831,
975   PREFIX_VEX_0F3832,
976   PREFIX_VEX_0F3833,
977   PREFIX_VEX_0F3834,
978   PREFIX_VEX_0F3835,
979   PREFIX_VEX_0F3837,
980   PREFIX_VEX_0F3838,
981   PREFIX_VEX_0F3839,
982   PREFIX_VEX_0F383A,
983   PREFIX_VEX_0F383B,
984   PREFIX_VEX_0F383C,
985   PREFIX_VEX_0F383D,
986   PREFIX_VEX_0F383E,
987   PREFIX_VEX_0F383F,
988   PREFIX_VEX_0F3840,
989   PREFIX_VEX_0F3841,
990   PREFIX_VEX_0F3896,
991   PREFIX_VEX_0F3897,
992   PREFIX_VEX_0F3898,
993   PREFIX_VEX_0F3899,
994   PREFIX_VEX_0F389A,
995   PREFIX_VEX_0F389B,
996   PREFIX_VEX_0F389C,
997   PREFIX_VEX_0F389D,
998   PREFIX_VEX_0F389E,
999   PREFIX_VEX_0F389F,
1000   PREFIX_VEX_0F38A6,
1001   PREFIX_VEX_0F38A7,
1002   PREFIX_VEX_0F38A8,
1003   PREFIX_VEX_0F38A9,
1004   PREFIX_VEX_0F38AA,
1005   PREFIX_VEX_0F38AB,
1006   PREFIX_VEX_0F38AC,
1007   PREFIX_VEX_0F38AD,
1008   PREFIX_VEX_0F38AE,
1009   PREFIX_VEX_0F38AF,
1010   PREFIX_VEX_0F38B6,
1011   PREFIX_VEX_0F38B7,
1012   PREFIX_VEX_0F38B8,
1013   PREFIX_VEX_0F38B9,
1014   PREFIX_VEX_0F38BA,
1015   PREFIX_VEX_0F38BB,
1016   PREFIX_VEX_0F38BC,
1017   PREFIX_VEX_0F38BD,
1018   PREFIX_VEX_0F38BE,
1019   PREFIX_VEX_0F38BF,
1020   PREFIX_VEX_0F38DB,
1021   PREFIX_VEX_0F38DC,
1022   PREFIX_VEX_0F38DD,
1023   PREFIX_VEX_0F38DE,
1024   PREFIX_VEX_0F38DF,
1025   PREFIX_VEX_0F38F2,
1026   PREFIX_VEX_0F38F3_REG_1,
1027   PREFIX_VEX_0F38F3_REG_2,
1028   PREFIX_VEX_0F38F3_REG_3,
1029   PREFIX_VEX_0F38F7,
1030   PREFIX_VEX_0F3A04,
1031   PREFIX_VEX_0F3A05,
1032   PREFIX_VEX_0F3A06,
1033   PREFIX_VEX_0F3A08,
1034   PREFIX_VEX_0F3A09,
1035   PREFIX_VEX_0F3A0A,
1036   PREFIX_VEX_0F3A0B,
1037   PREFIX_VEX_0F3A0C,
1038   PREFIX_VEX_0F3A0D,
1039   PREFIX_VEX_0F3A0E,
1040   PREFIX_VEX_0F3A0F,
1041   PREFIX_VEX_0F3A14,
1042   PREFIX_VEX_0F3A15,
1043   PREFIX_VEX_0F3A16,
1044   PREFIX_VEX_0F3A17,
1045   PREFIX_VEX_0F3A18,
1046   PREFIX_VEX_0F3A19,
1047   PREFIX_VEX_0F3A1D,
1048   PREFIX_VEX_0F3A20,
1049   PREFIX_VEX_0F3A21,
1050   PREFIX_VEX_0F3A22,
1051   PREFIX_VEX_0F3A40,
1052   PREFIX_VEX_0F3A41,
1053   PREFIX_VEX_0F3A42,
1054   PREFIX_VEX_0F3A44,
1055   PREFIX_VEX_0F3A48,
1056   PREFIX_VEX_0F3A49,
1057   PREFIX_VEX_0F3A4A,
1058   PREFIX_VEX_0F3A4B,
1059   PREFIX_VEX_0F3A4C,
1060   PREFIX_VEX_0F3A5C,
1061   PREFIX_VEX_0F3A5D,
1062   PREFIX_VEX_0F3A5E,
1063   PREFIX_VEX_0F3A5F,
1064   PREFIX_VEX_0F3A60,
1065   PREFIX_VEX_0F3A61,
1066   PREFIX_VEX_0F3A62,
1067   PREFIX_VEX_0F3A63,
1068   PREFIX_VEX_0F3A68,
1069   PREFIX_VEX_0F3A69,
1070   PREFIX_VEX_0F3A6A,
1071   PREFIX_VEX_0F3A6B,
1072   PREFIX_VEX_0F3A6C,
1073   PREFIX_VEX_0F3A6D,
1074   PREFIX_VEX_0F3A6E,
1075   PREFIX_VEX_0F3A6F,
1076   PREFIX_VEX_0F3A78,
1077   PREFIX_VEX_0F3A79,
1078   PREFIX_VEX_0F3A7A,
1079   PREFIX_VEX_0F3A7B,
1080   PREFIX_VEX_0F3A7C,
1081   PREFIX_VEX_0F3A7D,
1082   PREFIX_VEX_0F3A7E,
1083   PREFIX_VEX_0F3A7F,
1084   PREFIX_VEX_0F3ADF
1085 };
1086 
1087 enum
1088 {
1089   X86_64_06 = 0,
1090   X86_64_07,
1091   X86_64_0D,
1092   X86_64_16,
1093   X86_64_17,
1094   X86_64_1E,
1095   X86_64_1F,
1096   X86_64_27,
1097   X86_64_2F,
1098   X86_64_37,
1099   X86_64_3F,
1100   X86_64_60,
1101   X86_64_61,
1102   X86_64_62,
1103   X86_64_63,
1104   X86_64_6D,
1105   X86_64_6F,
1106   X86_64_9A,
1107   X86_64_C4,
1108   X86_64_C5,
1109   X86_64_CE,
1110   X86_64_D4,
1111   X86_64_D5,
1112   X86_64_EA,
1113   X86_64_0F01_REG_0,
1114   X86_64_0F01_REG_1,
1115   X86_64_0F01_REG_2,
1116   X86_64_0F01_REG_3
1117 };
1118 
1119 enum
1120 {
1121   THREE_BYTE_0F38 = 0,
1122   THREE_BYTE_0F3A,
1123   THREE_BYTE_0F7A
1124 };
1125 
1126 enum
1127 {
1128   XOP_08 = 0,
1129   XOP_09,
1130   XOP_0A
1131 };
1132 
1133 enum
1134 {
1135   VEX_0F = 0,
1136   VEX_0F38,
1137   VEX_0F3A
1138 };
1139 
1140 enum
1141 {
1142   VEX_LEN_0F10_P_1 = 0,
1143   VEX_LEN_0F10_P_3,
1144   VEX_LEN_0F11_P_1,
1145   VEX_LEN_0F11_P_3,
1146   VEX_LEN_0F12_P_0_M_0,
1147   VEX_LEN_0F12_P_0_M_1,
1148   VEX_LEN_0F12_P_2,
1149   VEX_LEN_0F13_M_0,
1150   VEX_LEN_0F16_P_0_M_0,
1151   VEX_LEN_0F16_P_0_M_1,
1152   VEX_LEN_0F16_P_2,
1153   VEX_LEN_0F17_M_0,
1154   VEX_LEN_0F2A_P_1,
1155   VEX_LEN_0F2A_P_3,
1156   VEX_LEN_0F2C_P_1,
1157   VEX_LEN_0F2C_P_3,
1158   VEX_LEN_0F2D_P_1,
1159   VEX_LEN_0F2D_P_3,
1160   VEX_LEN_0F2E_P_0,
1161   VEX_LEN_0F2E_P_2,
1162   VEX_LEN_0F2F_P_0,
1163   VEX_LEN_0F2F_P_2,
1164   VEX_LEN_0F51_P_1,
1165   VEX_LEN_0F51_P_3,
1166   VEX_LEN_0F52_P_1,
1167   VEX_LEN_0F53_P_1,
1168   VEX_LEN_0F58_P_1,
1169   VEX_LEN_0F58_P_3,
1170   VEX_LEN_0F59_P_1,
1171   VEX_LEN_0F59_P_3,
1172   VEX_LEN_0F5A_P_1,
1173   VEX_LEN_0F5A_P_3,
1174   VEX_LEN_0F5C_P_1,
1175   VEX_LEN_0F5C_P_3,
1176   VEX_LEN_0F5D_P_1,
1177   VEX_LEN_0F5D_P_3,
1178   VEX_LEN_0F5E_P_1,
1179   VEX_LEN_0F5E_P_3,
1180   VEX_LEN_0F5F_P_1,
1181   VEX_LEN_0F5F_P_3,
1182   VEX_LEN_0F60_P_2,
1183   VEX_LEN_0F61_P_2,
1184   VEX_LEN_0F62_P_2,
1185   VEX_LEN_0F63_P_2,
1186   VEX_LEN_0F64_P_2,
1187   VEX_LEN_0F65_P_2,
1188   VEX_LEN_0F66_P_2,
1189   VEX_LEN_0F67_P_2,
1190   VEX_LEN_0F68_P_2,
1191   VEX_LEN_0F69_P_2,
1192   VEX_LEN_0F6A_P_2,
1193   VEX_LEN_0F6B_P_2,
1194   VEX_LEN_0F6C_P_2,
1195   VEX_LEN_0F6D_P_2,
1196   VEX_LEN_0F6E_P_2,
1197   VEX_LEN_0F70_P_1,
1198   VEX_LEN_0F70_P_2,
1199   VEX_LEN_0F70_P_3,
1200   VEX_LEN_0F71_R_2_P_2,
1201   VEX_LEN_0F71_R_4_P_2,
1202   VEX_LEN_0F71_R_6_P_2,
1203   VEX_LEN_0F72_R_2_P_2,
1204   VEX_LEN_0F72_R_4_P_2,
1205   VEX_LEN_0F72_R_6_P_2,
1206   VEX_LEN_0F73_R_2_P_2,
1207   VEX_LEN_0F73_R_3_P_2,
1208   VEX_LEN_0F73_R_6_P_2,
1209   VEX_LEN_0F73_R_7_P_2,
1210   VEX_LEN_0F74_P_2,
1211   VEX_LEN_0F75_P_2,
1212   VEX_LEN_0F76_P_2,
1213   VEX_LEN_0F7E_P_1,
1214   VEX_LEN_0F7E_P_2,
1215   VEX_LEN_0FAE_R_2_M_0,
1216   VEX_LEN_0FAE_R_3_M_0,
1217   VEX_LEN_0FC2_P_1,
1218   VEX_LEN_0FC2_P_3,
1219   VEX_LEN_0FC4_P_2,
1220   VEX_LEN_0FC5_P_2,
1221   VEX_LEN_0FD1_P_2,
1222   VEX_LEN_0FD2_P_2,
1223   VEX_LEN_0FD3_P_2,
1224   VEX_LEN_0FD4_P_2,
1225   VEX_LEN_0FD5_P_2,
1226   VEX_LEN_0FD6_P_2,
1227   VEX_LEN_0FD7_P_2_M_1,
1228   VEX_LEN_0FD8_P_2,
1229   VEX_LEN_0FD9_P_2,
1230   VEX_LEN_0FDA_P_2,
1231   VEX_LEN_0FDB_P_2,
1232   VEX_LEN_0FDC_P_2,
1233   VEX_LEN_0FDD_P_2,
1234   VEX_LEN_0FDE_P_2,
1235   VEX_LEN_0FDF_P_2,
1236   VEX_LEN_0FE0_P_2,
1237   VEX_LEN_0FE1_P_2,
1238   VEX_LEN_0FE2_P_2,
1239   VEX_LEN_0FE3_P_2,
1240   VEX_LEN_0FE4_P_2,
1241   VEX_LEN_0FE5_P_2,
1242   VEX_LEN_0FE8_P_2,
1243   VEX_LEN_0FE9_P_2,
1244   VEX_LEN_0FEA_P_2,
1245   VEX_LEN_0FEB_P_2,
1246   VEX_LEN_0FEC_P_2,
1247   VEX_LEN_0FED_P_2,
1248   VEX_LEN_0FEE_P_2,
1249   VEX_LEN_0FEF_P_2,
1250   VEX_LEN_0FF1_P_2,
1251   VEX_LEN_0FF2_P_2,
1252   VEX_LEN_0FF3_P_2,
1253   VEX_LEN_0FF4_P_2,
1254   VEX_LEN_0FF5_P_2,
1255   VEX_LEN_0FF6_P_2,
1256   VEX_LEN_0FF7_P_2,
1257   VEX_LEN_0FF8_P_2,
1258   VEX_LEN_0FF9_P_2,
1259   VEX_LEN_0FFA_P_2,
1260   VEX_LEN_0FFB_P_2,
1261   VEX_LEN_0FFC_P_2,
1262   VEX_LEN_0FFD_P_2,
1263   VEX_LEN_0FFE_P_2,
1264   VEX_LEN_0F3800_P_2,
1265   VEX_LEN_0F3801_P_2,
1266   VEX_LEN_0F3802_P_2,
1267   VEX_LEN_0F3803_P_2,
1268   VEX_LEN_0F3804_P_2,
1269   VEX_LEN_0F3805_P_2,
1270   VEX_LEN_0F3806_P_2,
1271   VEX_LEN_0F3807_P_2,
1272   VEX_LEN_0F3808_P_2,
1273   VEX_LEN_0F3809_P_2,
1274   VEX_LEN_0F380A_P_2,
1275   VEX_LEN_0F380B_P_2,
1276   VEX_LEN_0F3819_P_2_M_0,
1277   VEX_LEN_0F381A_P_2_M_0,
1278   VEX_LEN_0F381C_P_2,
1279   VEX_LEN_0F381D_P_2,
1280   VEX_LEN_0F381E_P_2,
1281   VEX_LEN_0F3820_P_2,
1282   VEX_LEN_0F3821_P_2,
1283   VEX_LEN_0F3822_P_2,
1284   VEX_LEN_0F3823_P_2,
1285   VEX_LEN_0F3824_P_2,
1286   VEX_LEN_0F3825_P_2,
1287   VEX_LEN_0F3828_P_2,
1288   VEX_LEN_0F3829_P_2,
1289   VEX_LEN_0F382A_P_2_M_0,
1290   VEX_LEN_0F382B_P_2,
1291   VEX_LEN_0F3830_P_2,
1292   VEX_LEN_0F3831_P_2,
1293   VEX_LEN_0F3832_P_2,
1294   VEX_LEN_0F3833_P_2,
1295   VEX_LEN_0F3834_P_2,
1296   VEX_LEN_0F3835_P_2,
1297   VEX_LEN_0F3837_P_2,
1298   VEX_LEN_0F3838_P_2,
1299   VEX_LEN_0F3839_P_2,
1300   VEX_LEN_0F383A_P_2,
1301   VEX_LEN_0F383B_P_2,
1302   VEX_LEN_0F383C_P_2,
1303   VEX_LEN_0F383D_P_2,
1304   VEX_LEN_0F383E_P_2,
1305   VEX_LEN_0F383F_P_2,
1306   VEX_LEN_0F3840_P_2,
1307   VEX_LEN_0F3841_P_2,
1308   VEX_LEN_0F38DB_P_2,
1309   VEX_LEN_0F38DC_P_2,
1310   VEX_LEN_0F38DD_P_2,
1311   VEX_LEN_0F38DE_P_2,
1312   VEX_LEN_0F38DF_P_2,
1313   VEX_LEN_0F38F2_P_0,
1314   VEX_LEN_0F38F3_R_1_P_0,
1315   VEX_LEN_0F38F3_R_2_P_0,
1316   VEX_LEN_0F38F3_R_3_P_0,
1317   VEX_LEN_0F38F7_P_0,
1318   VEX_LEN_0F3A06_P_2,
1319   VEX_LEN_0F3A0A_P_2,
1320   VEX_LEN_0F3A0B_P_2,
1321   VEX_LEN_0F3A0E_P_2,
1322   VEX_LEN_0F3A0F_P_2,
1323   VEX_LEN_0F3A14_P_2,
1324   VEX_LEN_0F3A15_P_2,
1325   VEX_LEN_0F3A16_P_2,
1326   VEX_LEN_0F3A17_P_2,
1327   VEX_LEN_0F3A18_P_2,
1328   VEX_LEN_0F3A19_P_2,
1329   VEX_LEN_0F3A20_P_2,
1330   VEX_LEN_0F3A21_P_2,
1331   VEX_LEN_0F3A22_P_2,
1332   VEX_LEN_0F3A41_P_2,
1333   VEX_LEN_0F3A42_P_2,
1334   VEX_LEN_0F3A44_P_2,
1335   VEX_LEN_0F3A4C_P_2,
1336   VEX_LEN_0F3A60_P_2,
1337   VEX_LEN_0F3A61_P_2,
1338   VEX_LEN_0F3A62_P_2,
1339   VEX_LEN_0F3A63_P_2,
1340   VEX_LEN_0F3A6A_P_2,
1341   VEX_LEN_0F3A6B_P_2,
1342   VEX_LEN_0F3A6E_P_2,
1343   VEX_LEN_0F3A6F_P_2,
1344   VEX_LEN_0F3A7A_P_2,
1345   VEX_LEN_0F3A7B_P_2,
1346   VEX_LEN_0F3A7E_P_2,
1347   VEX_LEN_0F3A7F_P_2,
1348   VEX_LEN_0F3ADF_P_2,
1349   VEX_LEN_0FXOP_09_80,
1350   VEX_LEN_0FXOP_09_81
1351 };
1352 
1353 enum
1354 {
1355   VEX_W_0F10_P_0 = 0,
1356   VEX_W_0F10_P_1,
1357   VEX_W_0F10_P_2,
1358   VEX_W_0F10_P_3,
1359   VEX_W_0F11_P_0,
1360   VEX_W_0F11_P_1,
1361   VEX_W_0F11_P_2,
1362   VEX_W_0F11_P_3,
1363   VEX_W_0F12_P_0_M_0,
1364   VEX_W_0F12_P_0_M_1,
1365   VEX_W_0F12_P_1,
1366   VEX_W_0F12_P_2,
1367   VEX_W_0F12_P_3,
1368   VEX_W_0F13_M_0,
1369   VEX_W_0F14,
1370   VEX_W_0F15,
1371   VEX_W_0F16_P_0_M_0,
1372   VEX_W_0F16_P_0_M_1,
1373   VEX_W_0F16_P_1,
1374   VEX_W_0F16_P_2,
1375   VEX_W_0F17_M_0,
1376   VEX_W_0F28,
1377   VEX_W_0F29,
1378   VEX_W_0F2B_M_0,
1379   VEX_W_0F2E_P_0,
1380   VEX_W_0F2E_P_2,
1381   VEX_W_0F2F_P_0,
1382   VEX_W_0F2F_P_2,
1383   VEX_W_0F50_M_0,
1384   VEX_W_0F51_P_0,
1385   VEX_W_0F51_P_1,
1386   VEX_W_0F51_P_2,
1387   VEX_W_0F51_P_3,
1388   VEX_W_0F52_P_0,
1389   VEX_W_0F52_P_1,
1390   VEX_W_0F53_P_0,
1391   VEX_W_0F53_P_1,
1392   VEX_W_0F58_P_0,
1393   VEX_W_0F58_P_1,
1394   VEX_W_0F58_P_2,
1395   VEX_W_0F58_P_3,
1396   VEX_W_0F59_P_0,
1397   VEX_W_0F59_P_1,
1398   VEX_W_0F59_P_2,
1399   VEX_W_0F59_P_3,
1400   VEX_W_0F5A_P_0,
1401   VEX_W_0F5A_P_1,
1402   VEX_W_0F5A_P_3,
1403   VEX_W_0F5B_P_0,
1404   VEX_W_0F5B_P_1,
1405   VEX_W_0F5B_P_2,
1406   VEX_W_0F5C_P_0,
1407   VEX_W_0F5C_P_1,
1408   VEX_W_0F5C_P_2,
1409   VEX_W_0F5C_P_3,
1410   VEX_W_0F5D_P_0,
1411   VEX_W_0F5D_P_1,
1412   VEX_W_0F5D_P_2,
1413   VEX_W_0F5D_P_3,
1414   VEX_W_0F5E_P_0,
1415   VEX_W_0F5E_P_1,
1416   VEX_W_0F5E_P_2,
1417   VEX_W_0F5E_P_3,
1418   VEX_W_0F5F_P_0,
1419   VEX_W_0F5F_P_1,
1420   VEX_W_0F5F_P_2,
1421   VEX_W_0F5F_P_3,
1422   VEX_W_0F60_P_2,
1423   VEX_W_0F61_P_2,
1424   VEX_W_0F62_P_2,
1425   VEX_W_0F63_P_2,
1426   VEX_W_0F64_P_2,
1427   VEX_W_0F65_P_2,
1428   VEX_W_0F66_P_2,
1429   VEX_W_0F67_P_2,
1430   VEX_W_0F68_P_2,
1431   VEX_W_0F69_P_2,
1432   VEX_W_0F6A_P_2,
1433   VEX_W_0F6B_P_2,
1434   VEX_W_0F6C_P_2,
1435   VEX_W_0F6D_P_2,
1436   VEX_W_0F6F_P_1,
1437   VEX_W_0F6F_P_2,
1438   VEX_W_0F70_P_1,
1439   VEX_W_0F70_P_2,
1440   VEX_W_0F70_P_3,
1441   VEX_W_0F71_R_2_P_2,
1442   VEX_W_0F71_R_4_P_2,
1443   VEX_W_0F71_R_6_P_2,
1444   VEX_W_0F72_R_2_P_2,
1445   VEX_W_0F72_R_4_P_2,
1446   VEX_W_0F72_R_6_P_2,
1447   VEX_W_0F73_R_2_P_2,
1448   VEX_W_0F73_R_3_P_2,
1449   VEX_W_0F73_R_6_P_2,
1450   VEX_W_0F73_R_7_P_2,
1451   VEX_W_0F74_P_2,
1452   VEX_W_0F75_P_2,
1453   VEX_W_0F76_P_2,
1454   VEX_W_0F77_P_0,
1455   VEX_W_0F7C_P_2,
1456   VEX_W_0F7C_P_3,
1457   VEX_W_0F7D_P_2,
1458   VEX_W_0F7D_P_3,
1459   VEX_W_0F7E_P_1,
1460   VEX_W_0F7F_P_1,
1461   VEX_W_0F7F_P_2,
1462   VEX_W_0FAE_R_2_M_0,
1463   VEX_W_0FAE_R_3_M_0,
1464   VEX_W_0FC2_P_0,
1465   VEX_W_0FC2_P_1,
1466   VEX_W_0FC2_P_2,
1467   VEX_W_0FC2_P_3,
1468   VEX_W_0FC4_P_2,
1469   VEX_W_0FC5_P_2,
1470   VEX_W_0FD0_P_2,
1471   VEX_W_0FD0_P_3,
1472   VEX_W_0FD1_P_2,
1473   VEX_W_0FD2_P_2,
1474   VEX_W_0FD3_P_2,
1475   VEX_W_0FD4_P_2,
1476   VEX_W_0FD5_P_2,
1477   VEX_W_0FD6_P_2,
1478   VEX_W_0FD7_P_2_M_1,
1479   VEX_W_0FD8_P_2,
1480   VEX_W_0FD9_P_2,
1481   VEX_W_0FDA_P_2,
1482   VEX_W_0FDB_P_2,
1483   VEX_W_0FDC_P_2,
1484   VEX_W_0FDD_P_2,
1485   VEX_W_0FDE_P_2,
1486   VEX_W_0FDF_P_2,
1487   VEX_W_0FE0_P_2,
1488   VEX_W_0FE1_P_2,
1489   VEX_W_0FE2_P_2,
1490   VEX_W_0FE3_P_2,
1491   VEX_W_0FE4_P_2,
1492   VEX_W_0FE5_P_2,
1493   VEX_W_0FE6_P_1,
1494   VEX_W_0FE6_P_2,
1495   VEX_W_0FE6_P_3,
1496   VEX_W_0FE7_P_2_M_0,
1497   VEX_W_0FE8_P_2,
1498   VEX_W_0FE9_P_2,
1499   VEX_W_0FEA_P_2,
1500   VEX_W_0FEB_P_2,
1501   VEX_W_0FEC_P_2,
1502   VEX_W_0FED_P_2,
1503   VEX_W_0FEE_P_2,
1504   VEX_W_0FEF_P_2,
1505   VEX_W_0FF0_P_3_M_0,
1506   VEX_W_0FF1_P_2,
1507   VEX_W_0FF2_P_2,
1508   VEX_W_0FF3_P_2,
1509   VEX_W_0FF4_P_2,
1510   VEX_W_0FF5_P_2,
1511   VEX_W_0FF6_P_2,
1512   VEX_W_0FF7_P_2,
1513   VEX_W_0FF8_P_2,
1514   VEX_W_0FF9_P_2,
1515   VEX_W_0FFA_P_2,
1516   VEX_W_0FFB_P_2,
1517   VEX_W_0FFC_P_2,
1518   VEX_W_0FFD_P_2,
1519   VEX_W_0FFE_P_2,
1520   VEX_W_0F3800_P_2,
1521   VEX_W_0F3801_P_2,
1522   VEX_W_0F3802_P_2,
1523   VEX_W_0F3803_P_2,
1524   VEX_W_0F3804_P_2,
1525   VEX_W_0F3805_P_2,
1526   VEX_W_0F3806_P_2,
1527   VEX_W_0F3807_P_2,
1528   VEX_W_0F3808_P_2,
1529   VEX_W_0F3809_P_2,
1530   VEX_W_0F380A_P_2,
1531   VEX_W_0F380B_P_2,
1532   VEX_W_0F380C_P_2,
1533   VEX_W_0F380D_P_2,
1534   VEX_W_0F380E_P_2,
1535   VEX_W_0F380F_P_2,
1536   VEX_W_0F3817_P_2,
1537   VEX_W_0F3818_P_2_M_0,
1538   VEX_W_0F3819_P_2_M_0,
1539   VEX_W_0F381A_P_2_M_0,
1540   VEX_W_0F381C_P_2,
1541   VEX_W_0F381D_P_2,
1542   VEX_W_0F381E_P_2,
1543   VEX_W_0F3820_P_2,
1544   VEX_W_0F3821_P_2,
1545   VEX_W_0F3822_P_2,
1546   VEX_W_0F3823_P_2,
1547   VEX_W_0F3824_P_2,
1548   VEX_W_0F3825_P_2,
1549   VEX_W_0F3828_P_2,
1550   VEX_W_0F3829_P_2,
1551   VEX_W_0F382A_P_2_M_0,
1552   VEX_W_0F382B_P_2,
1553   VEX_W_0F382C_P_2_M_0,
1554   VEX_W_0F382D_P_2_M_0,
1555   VEX_W_0F382E_P_2_M_0,
1556   VEX_W_0F382F_P_2_M_0,
1557   VEX_W_0F3830_P_2,
1558   VEX_W_0F3831_P_2,
1559   VEX_W_0F3832_P_2,
1560   VEX_W_0F3833_P_2,
1561   VEX_W_0F3834_P_2,
1562   VEX_W_0F3835_P_2,
1563   VEX_W_0F3837_P_2,
1564   VEX_W_0F3838_P_2,
1565   VEX_W_0F3839_P_2,
1566   VEX_W_0F383A_P_2,
1567   VEX_W_0F383B_P_2,
1568   VEX_W_0F383C_P_2,
1569   VEX_W_0F383D_P_2,
1570   VEX_W_0F383E_P_2,
1571   VEX_W_0F383F_P_2,
1572   VEX_W_0F3840_P_2,
1573   VEX_W_0F3841_P_2,
1574   VEX_W_0F38DB_P_2,
1575   VEX_W_0F38DC_P_2,
1576   VEX_W_0F38DD_P_2,
1577   VEX_W_0F38DE_P_2,
1578   VEX_W_0F38DF_P_2,
1579   VEX_W_0F3A04_P_2,
1580   VEX_W_0F3A05_P_2,
1581   VEX_W_0F3A06_P_2,
1582   VEX_W_0F3A08_P_2,
1583   VEX_W_0F3A09_P_2,
1584   VEX_W_0F3A0A_P_2,
1585   VEX_W_0F3A0B_P_2,
1586   VEX_W_0F3A0C_P_2,
1587   VEX_W_0F3A0D_P_2,
1588   VEX_W_0F3A0E_P_2,
1589   VEX_W_0F3A0F_P_2,
1590   VEX_W_0F3A14_P_2,
1591   VEX_W_0F3A15_P_2,
1592   VEX_W_0F3A18_P_2,
1593   VEX_W_0F3A19_P_2,
1594   VEX_W_0F3A20_P_2,
1595   VEX_W_0F3A21_P_2,
1596   VEX_W_0F3A40_P_2,
1597   VEX_W_0F3A41_P_2,
1598   VEX_W_0F3A42_P_2,
1599   VEX_W_0F3A44_P_2,
1600   VEX_W_0F3A48_P_2,
1601   VEX_W_0F3A49_P_2,
1602   VEX_W_0F3A4A_P_2,
1603   VEX_W_0F3A4B_P_2,
1604   VEX_W_0F3A4C_P_2,
1605   VEX_W_0F3A60_P_2,
1606   VEX_W_0F3A61_P_2,
1607   VEX_W_0F3A62_P_2,
1608   VEX_W_0F3A63_P_2,
1609   VEX_W_0F3ADF_P_2
1610 };
1611 
1612 typedef void (*op_rtn) (int bytemode, int sizeflag);
1613 
1614 struct dis386 {
1615   const char *name;
1616   struct
1617     {
1618       op_rtn rtn;
1619       int bytemode;
1620     } op[MAX_OPERANDS];
1621 };
1622 
1623 /* Upper case letters in the instruction names here are macros.
1624    'A' => print 'b' if no register operands or suffix_always is true
1625    'B' => print 'b' if suffix_always is true
1626    'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
1627 	  size prefix
1628    'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
1629 	  suffix_always is true
1630    'E' => print 'e' if 32-bit form of jcxz
1631    'F' => print 'w' or 'l' depending on address size prefix (loop insns)
1632    'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
1633    'H' => print ",pt" or ",pn" branch hint
1634    'I' => honor following macro letter even in Intel mode (implemented only
1635 	  for some of the macro letters)
1636    'J' => print 'l'
1637    'K' => print 'd' or 'q' if rex prefix is present.
1638    'L' => print 'l' if suffix_always is true
1639    'M' => print 'r' if intel_mnemonic is false.
1640    'N' => print 'n' if instruction has no wait "prefix"
1641    'O' => print 'd' or 'o' (or 'q' in Intel mode)
1642    'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
1643 	  or suffix_always is true.  print 'q' if rex prefix is present.
1644    'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
1645 	  is true
1646    'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
1647    'S' => print 'w', 'l' or 'q' if suffix_always is true
1648    'T' => print 'q' in 64bit mode and behave as 'P' otherwise
1649    'U' => print 'q' in 64bit mode and behave as 'Q' otherwise
1650    'V' => print 'q' in 64bit mode and behave as 'S' otherwise
1651    'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
1652    'X' => print 's', 'd' depending on data16 prefix (for XMM)
1653    'Y' => 'q' if instruction has an REX 64bit overwrite prefix and
1654 	  suffix_always is true.
1655    'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
1656    '!' => change condition from true to false or from false to true.
1657    '%' => add 1 upper case letter to the macro.
1658 
1659    2 upper case letter macros:
1660    "XY" => print 'x' or 'y' if no register operands or suffix_always
1661 	   is true.
1662    "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
1663    "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
1664 	   or suffix_always is true
1665    "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
1666    "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
1667    "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
1668 
1669    Many of the above letters print nothing in Intel mode.  See "putop"
1670    for the details.
1671 
1672    Braces '{' and '}', and vertical bars '|', indicate alternative
1673    mnemonic strings for AT&T and Intel.  */
1674 
1675 static const struct dis386 dis386[] = {
1676   /* 00 */
1677   { "addB",		{ Eb, Gb } },
1678   { "addS",		{ Ev, Gv } },
1679   { "addB",		{ Gb, EbS } },
1680   { "addS",		{ Gv, EvS } },
1681   { "addB",		{ AL, Ib } },
1682   { "addS",		{ eAX, Iv } },
1683   { X86_64_TABLE (X86_64_06) },
1684   { X86_64_TABLE (X86_64_07) },
1685   /* 08 */
1686   { "orB",		{ Eb, Gb } },
1687   { "orS",		{ Ev, Gv } },
1688   { "orB",		{ Gb, EbS } },
1689   { "orS",		{ Gv, EvS } },
1690   { "orB",		{ AL, Ib } },
1691   { "orS",		{ eAX, Iv } },
1692   { X86_64_TABLE (X86_64_0D) },
1693   { Bad_Opcode },	/* 0x0f extended opcode escape */
1694   /* 10 */
1695   { "adcB",		{ Eb, Gb } },
1696   { "adcS",		{ Ev, Gv } },
1697   { "adcB",		{ Gb, EbS } },
1698   { "adcS",		{ Gv, EvS } },
1699   { "adcB",		{ AL, Ib } },
1700   { "adcS",		{ eAX, Iv } },
1701   { X86_64_TABLE (X86_64_16) },
1702   { X86_64_TABLE (X86_64_17) },
1703   /* 18 */
1704   { "sbbB",		{ Eb, Gb } },
1705   { "sbbS",		{ Ev, Gv } },
1706   { "sbbB",		{ Gb, EbS } },
1707   { "sbbS",		{ Gv, EvS } },
1708   { "sbbB",		{ AL, Ib } },
1709   { "sbbS",		{ eAX, Iv } },
1710   { X86_64_TABLE (X86_64_1E) },
1711   { X86_64_TABLE (X86_64_1F) },
1712   /* 20 */
1713   { "andB",		{ Eb, Gb } },
1714   { "andS",		{ Ev, Gv } },
1715   { "andB",		{ Gb, EbS } },
1716   { "andS",		{ Gv, EvS } },
1717   { "andB",		{ AL, Ib } },
1718   { "andS",		{ eAX, Iv } },
1719   { Bad_Opcode },	/* SEG ES prefix */
1720   { X86_64_TABLE (X86_64_27) },
1721   /* 28 */
1722   { "subB",		{ Eb, Gb } },
1723   { "subS",		{ Ev, Gv } },
1724   { "subB",		{ Gb, EbS } },
1725   { "subS",		{ Gv, EvS } },
1726   { "subB",		{ AL, Ib } },
1727   { "subS",		{ eAX, Iv } },
1728   { Bad_Opcode },	/* SEG CS prefix */
1729   { X86_64_TABLE (X86_64_2F) },
1730   /* 30 */
1731   { "xorB",		{ Eb, Gb } },
1732   { "xorS",		{ Ev, Gv } },
1733   { "xorB",		{ Gb, EbS } },
1734   { "xorS",		{ Gv, EvS } },
1735   { "xorB",		{ AL, Ib } },
1736   { "xorS",		{ eAX, Iv } },
1737   { Bad_Opcode },	/* SEG SS prefix */
1738   { X86_64_TABLE (X86_64_37) },
1739   /* 38 */
1740   { "cmpB",		{ Eb, Gb } },
1741   { "cmpS",		{ Ev, Gv } },
1742   { "cmpB",		{ Gb, EbS } },
1743   { "cmpS",		{ Gv, EvS } },
1744   { "cmpB",		{ AL, Ib } },
1745   { "cmpS",		{ eAX, Iv } },
1746   { Bad_Opcode },	/* SEG DS prefix */
1747   { X86_64_TABLE (X86_64_3F) },
1748   /* 40 */
1749   { "inc{S|}",		{ RMeAX } },
1750   { "inc{S|}",		{ RMeCX } },
1751   { "inc{S|}",		{ RMeDX } },
1752   { "inc{S|}",		{ RMeBX } },
1753   { "inc{S|}",		{ RMeSP } },
1754   { "inc{S|}",		{ RMeBP } },
1755   { "inc{S|}",		{ RMeSI } },
1756   { "inc{S|}",		{ RMeDI } },
1757   /* 48 */
1758   { "dec{S|}",		{ RMeAX } },
1759   { "dec{S|}",		{ RMeCX } },
1760   { "dec{S|}",		{ RMeDX } },
1761   { "dec{S|}",		{ RMeBX } },
1762   { "dec{S|}",		{ RMeSP } },
1763   { "dec{S|}",		{ RMeBP } },
1764   { "dec{S|}",		{ RMeSI } },
1765   { "dec{S|}",		{ RMeDI } },
1766   /* 50 */
1767   { "pushV",		{ RMrAX } },
1768   { "pushV",		{ RMrCX } },
1769   { "pushV",		{ RMrDX } },
1770   { "pushV",		{ RMrBX } },
1771   { "pushV",		{ RMrSP } },
1772   { "pushV",		{ RMrBP } },
1773   { "pushV",		{ RMrSI } },
1774   { "pushV",		{ RMrDI } },
1775   /* 58 */
1776   { "popV",		{ RMrAX } },
1777   { "popV",		{ RMrCX } },
1778   { "popV",		{ RMrDX } },
1779   { "popV",		{ RMrBX } },
1780   { "popV",		{ RMrSP } },
1781   { "popV",		{ RMrBP } },
1782   { "popV",		{ RMrSI } },
1783   { "popV",		{ RMrDI } },
1784   /* 60 */
1785   { X86_64_TABLE (X86_64_60) },
1786   { X86_64_TABLE (X86_64_61) },
1787   { X86_64_TABLE (X86_64_62) },
1788   { X86_64_TABLE (X86_64_63) },
1789   { Bad_Opcode },	/* seg fs */
1790   { Bad_Opcode },	/* seg gs */
1791   { Bad_Opcode },	/* op size prefix */
1792   { Bad_Opcode },	/* adr size prefix */
1793   /* 68 */
1794   { "pushT",		{ sIv } },
1795   { "imulS",		{ Gv, Ev, Iv } },
1796   { "pushT",		{ sIbT } },
1797   { "imulS",		{ Gv, Ev, sIb } },
1798   { "ins{b|}",		{ Ybr, indirDX } },
1799   { X86_64_TABLE (X86_64_6D) },
1800   { "outs{b|}",		{ indirDXr, Xb } },
1801   { X86_64_TABLE (X86_64_6F) },
1802   /* 70 */
1803   { "joH",		{ Jb, XX, cond_jump_flag } },
1804   { "jnoH",		{ Jb, XX, cond_jump_flag } },
1805   { "jbH",		{ Jb, XX, cond_jump_flag } },
1806   { "jaeH",		{ Jb, XX, cond_jump_flag } },
1807   { "jeH",		{ Jb, XX, cond_jump_flag } },
1808   { "jneH",		{ Jb, XX, cond_jump_flag } },
1809   { "jbeH",		{ Jb, XX, cond_jump_flag } },
1810   { "jaH",		{ Jb, XX, cond_jump_flag } },
1811   /* 78 */
1812   { "jsH",		{ Jb, XX, cond_jump_flag } },
1813   { "jnsH",		{ Jb, XX, cond_jump_flag } },
1814   { "jpH",		{ Jb, XX, cond_jump_flag } },
1815   { "jnpH",		{ Jb, XX, cond_jump_flag } },
1816   { "jlH",		{ Jb, XX, cond_jump_flag } },
1817   { "jgeH",		{ Jb, XX, cond_jump_flag } },
1818   { "jleH",		{ Jb, XX, cond_jump_flag } },
1819   { "jgH",		{ Jb, XX, cond_jump_flag } },
1820   /* 80 */
1821   { REG_TABLE (REG_80) },
1822   { REG_TABLE (REG_81) },
1823   { Bad_Opcode },
1824   { REG_TABLE (REG_82) },
1825   { "testB",		{ Eb, Gb } },
1826   { "testS",		{ Ev, Gv } },
1827   { "xchgB",		{ Eb, Gb } },
1828   { "xchgS",		{ Ev, Gv } },
1829   /* 88 */
1830   { "movB",		{ Eb, Gb } },
1831   { "movS",		{ Ev, Gv } },
1832   { "movB",		{ Gb, EbS } },
1833   { "movS",		{ Gv, EvS } },
1834   { "movD",		{ Sv, Sw } },
1835   { MOD_TABLE (MOD_8D) },
1836   { "movD",		{ Sw, Sv } },
1837   { REG_TABLE (REG_8F) },
1838   /* 90 */
1839   { PREFIX_TABLE (PREFIX_90) },
1840   { "xchgS",		{ RMeCX, eAX } },
1841   { "xchgS",		{ RMeDX, eAX } },
1842   { "xchgS",		{ RMeBX, eAX } },
1843   { "xchgS",		{ RMeSP, eAX } },
1844   { "xchgS",		{ RMeBP, eAX } },
1845   { "xchgS",		{ RMeSI, eAX } },
1846   { "xchgS",		{ RMeDI, eAX } },
1847   /* 98 */
1848   { "cW{t|}R",		{ XX } },
1849   { "cR{t|}O",		{ XX } },
1850   { X86_64_TABLE (X86_64_9A) },
1851   { Bad_Opcode },	/* fwait */
1852   { "pushfT",		{ XX } },
1853   { "popfT",		{ XX } },
1854   { "sahf",		{ XX } },
1855   { "lahf",		{ XX } },
1856   /* a0 */
1857   { "mov%LB",		{ AL, Ob } },
1858   { "mov%LS",		{ eAX, Ov } },
1859   { "mov%LB",		{ Ob, AL } },
1860   { "mov%LS",		{ Ov, eAX } },
1861   { "movs{b|}",		{ Ybr, Xb } },
1862   { "movs{R|}",		{ Yvr, Xv } },
1863   { "cmps{b|}",		{ Xb, Yb } },
1864   { "cmps{R|}",		{ Xv, Yv } },
1865   /* a8 */
1866   { "testB",		{ AL, Ib } },
1867   { "testS",		{ eAX, Iv } },
1868   { "stosB",		{ Ybr, AL } },
1869   { "stosS",		{ Yvr, eAX } },
1870   { "lodsB",		{ ALr, Xb } },
1871   { "lodsS",		{ eAXr, Xv } },
1872   { "scasB",		{ AL, Yb } },
1873   { "scasS",		{ eAX, Yv } },
1874   /* b0 */
1875   { "movB",		{ RMAL, Ib } },
1876   { "movB",		{ RMCL, Ib } },
1877   { "movB",		{ RMDL, Ib } },
1878   { "movB",		{ RMBL, Ib } },
1879   { "movB",		{ RMAH, Ib } },
1880   { "movB",		{ RMCH, Ib } },
1881   { "movB",		{ RMDH, Ib } },
1882   { "movB",		{ RMBH, Ib } },
1883   /* b8 */
1884   { "mov%LV",		{ RMeAX, Iv64 } },
1885   { "mov%LV",		{ RMeCX, Iv64 } },
1886   { "mov%LV",		{ RMeDX, Iv64 } },
1887   { "mov%LV",		{ RMeBX, Iv64 } },
1888   { "mov%LV",		{ RMeSP, Iv64 } },
1889   { "mov%LV",		{ RMeBP, Iv64 } },
1890   { "mov%LV",		{ RMeSI, Iv64 } },
1891   { "mov%LV",		{ RMeDI, Iv64 } },
1892   /* c0 */
1893   { REG_TABLE (REG_C0) },
1894   { REG_TABLE (REG_C1) },
1895   { "retT",		{ Iw } },
1896   { "retT",		{ XX } },
1897   { X86_64_TABLE (X86_64_C4) },
1898   { X86_64_TABLE (X86_64_C5) },
1899   { REG_TABLE (REG_C6) },
1900   { REG_TABLE (REG_C7) },
1901   /* c8 */
1902   { "enterT",		{ Iw, Ib } },
1903   { "leaveT",		{ XX } },
1904   { "Jret{|f}P",	{ Iw } },
1905   { "Jret{|f}P",	{ XX } },
1906   { "int3",		{ XX } },
1907   { "int",		{ Ib } },
1908   { X86_64_TABLE (X86_64_CE) },
1909   { "iretP",		{ XX } },
1910   /* d0 */
1911   { REG_TABLE (REG_D0) },
1912   { REG_TABLE (REG_D1) },
1913   { REG_TABLE (REG_D2) },
1914   { REG_TABLE (REG_D3) },
1915   { X86_64_TABLE (X86_64_D4) },
1916   { X86_64_TABLE (X86_64_D5) },
1917   { Bad_Opcode },
1918   { "xlat",		{ DSBX } },
1919   /* d8 */
1920   { FLOAT },
1921   { FLOAT },
1922   { FLOAT },
1923   { FLOAT },
1924   { FLOAT },
1925   { FLOAT },
1926   { FLOAT },
1927   { FLOAT },
1928   /* e0 */
1929   { "loopneFH",		{ Jb, XX, loop_jcxz_flag } },
1930   { "loopeFH",		{ Jb, XX, loop_jcxz_flag } },
1931   { "loopFH",		{ Jb, XX, loop_jcxz_flag } },
1932   { "jEcxzH",		{ Jb, XX, loop_jcxz_flag } },
1933   { "inB",		{ AL, Ib } },
1934   { "inG",		{ zAX, Ib } },
1935   { "outB",		{ Ib, AL } },
1936   { "outG",		{ Ib, zAX } },
1937   /* e8 */
1938   { "callT",		{ Jv } },
1939   { "jmpT",		{ Jv } },
1940   { X86_64_TABLE (X86_64_EA) },
1941   { "jmp",		{ Jb } },
1942   { "inB",		{ AL, indirDX } },
1943   { "inG",		{ zAX, indirDX } },
1944   { "outB",		{ indirDX, AL } },
1945   { "outG",		{ indirDX, zAX } },
1946   /* f0 */
1947   { Bad_Opcode },	/* lock prefix */
1948   { "icebp",		{ XX } },
1949   { Bad_Opcode },	/* repne */
1950   { Bad_Opcode },	/* repz */
1951   { "hlt",		{ XX } },
1952   { "cmc",		{ XX } },
1953   { REG_TABLE (REG_F6) },
1954   { REG_TABLE (REG_F7) },
1955   /* f8 */
1956   { "clc",		{ XX } },
1957   { "stc",		{ XX } },
1958   { "cli",		{ XX } },
1959   { "sti",		{ XX } },
1960   { "cld",		{ XX } },
1961   { "std",		{ XX } },
1962   { REG_TABLE (REG_FE) },
1963   { REG_TABLE (REG_FF) },
1964 };
1965 
1966 static const struct dis386 dis386_twobyte[] = {
1967   /* 00 */
1968   { REG_TABLE (REG_0F00 ) },
1969   { REG_TABLE (REG_0F01 ) },
1970   { "larS",		{ Gv, Ew } },
1971   { "lslS",		{ Gv, Ew } },
1972   { Bad_Opcode },
1973   { "syscall",		{ XX } },
1974   { "clts",		{ XX } },
1975   { "sysretP",		{ XX } },
1976   /* 08 */
1977   { "invd",		{ XX } },
1978   { "wbinvd",		{ XX } },
1979   { Bad_Opcode },
1980   { "ud2",		{ XX } },
1981   { Bad_Opcode },
1982   { REG_TABLE (REG_0F0D) },
1983   { "femms",		{ XX } },
1984   { "",			{ MX, EM, OPSUF } }, /* See OP_3DNowSuffix.  */
1985   /* 10 */
1986   { PREFIX_TABLE (PREFIX_0F10) },
1987   { PREFIX_TABLE (PREFIX_0F11) },
1988   { PREFIX_TABLE (PREFIX_0F12) },
1989   { MOD_TABLE (MOD_0F13) },
1990   { "unpcklpX",		{ XM, EXx } },
1991   { "unpckhpX",		{ XM, EXx } },
1992   { PREFIX_TABLE (PREFIX_0F16) },
1993   { MOD_TABLE (MOD_0F17) },
1994   /* 18 */
1995   { REG_TABLE (REG_0F18) },
1996   { "nopQ",		{ Ev } },
1997   { "nopQ",		{ Ev } },
1998   { "nopQ",		{ Ev } },
1999   { "nopQ",		{ Ev } },
2000   { "nopQ",		{ Ev } },
2001   { "nopQ",		{ Ev } },
2002   { "nopQ",		{ Ev } },
2003   /* 20 */
2004   { MOD_TABLE (MOD_0F20) },
2005   { MOD_TABLE (MOD_0F21) },
2006   { MOD_TABLE (MOD_0F22) },
2007   { MOD_TABLE (MOD_0F23) },
2008   { MOD_TABLE (MOD_0F24) },
2009   { Bad_Opcode },
2010   { MOD_TABLE (MOD_0F26) },
2011   { Bad_Opcode },
2012   /* 28 */
2013   { "movapX",		{ XM, EXx } },
2014   { "movapX",		{ EXxS, XM } },
2015   { PREFIX_TABLE (PREFIX_0F2A) },
2016   { PREFIX_TABLE (PREFIX_0F2B) },
2017   { PREFIX_TABLE (PREFIX_0F2C) },
2018   { PREFIX_TABLE (PREFIX_0F2D) },
2019   { PREFIX_TABLE (PREFIX_0F2E) },
2020   { PREFIX_TABLE (PREFIX_0F2F) },
2021   /* 30 */
2022   { "wrmsr",		{ XX } },
2023   { "rdtsc",		{ XX } },
2024   { "rdmsr",		{ XX } },
2025   { "rdpmc",		{ XX } },
2026   { "sysenter",		{ XX } },
2027   { "sysexit",		{ XX } },
2028   { Bad_Opcode },
2029   { "getsec",		{ XX } },
2030   /* 38 */
2031   { THREE_BYTE_TABLE (THREE_BYTE_0F38) },
2032   { Bad_Opcode },
2033   { THREE_BYTE_TABLE (THREE_BYTE_0F3A) },
2034   { Bad_Opcode },
2035   { Bad_Opcode },
2036   { Bad_Opcode },
2037   { Bad_Opcode },
2038   { Bad_Opcode },
2039   /* 40 */
2040   { "cmovoS",		{ Gv, Ev } },
2041   { "cmovnoS",		{ Gv, Ev } },
2042   { "cmovbS",		{ Gv, Ev } },
2043   { "cmovaeS",		{ Gv, Ev } },
2044   { "cmoveS",		{ Gv, Ev } },
2045   { "cmovneS",		{ Gv, Ev } },
2046   { "cmovbeS",		{ Gv, Ev } },
2047   { "cmovaS",		{ Gv, Ev } },
2048   /* 48 */
2049   { "cmovsS",		{ Gv, Ev } },
2050   { "cmovnsS",		{ Gv, Ev } },
2051   { "cmovpS",		{ Gv, Ev } },
2052   { "cmovnpS",		{ Gv, Ev } },
2053   { "cmovlS",		{ Gv, Ev } },
2054   { "cmovgeS",		{ Gv, Ev } },
2055   { "cmovleS",		{ Gv, Ev } },
2056   { "cmovgS",		{ Gv, Ev } },
2057   /* 50 */
2058   { MOD_TABLE (MOD_0F51) },
2059   { PREFIX_TABLE (PREFIX_0F51) },
2060   { PREFIX_TABLE (PREFIX_0F52) },
2061   { PREFIX_TABLE (PREFIX_0F53) },
2062   { "andpX",		{ XM, EXx } },
2063   { "andnpX",		{ XM, EXx } },
2064   { "orpX",		{ XM, EXx } },
2065   { "xorpX",		{ XM, EXx } },
2066   /* 58 */
2067   { PREFIX_TABLE (PREFIX_0F58) },
2068   { PREFIX_TABLE (PREFIX_0F59) },
2069   { PREFIX_TABLE (PREFIX_0F5A) },
2070   { PREFIX_TABLE (PREFIX_0F5B) },
2071   { PREFIX_TABLE (PREFIX_0F5C) },
2072   { PREFIX_TABLE (PREFIX_0F5D) },
2073   { PREFIX_TABLE (PREFIX_0F5E) },
2074   { PREFIX_TABLE (PREFIX_0F5F) },
2075   /* 60 */
2076   { PREFIX_TABLE (PREFIX_0F60) },
2077   { PREFIX_TABLE (PREFIX_0F61) },
2078   { PREFIX_TABLE (PREFIX_0F62) },
2079   { "packsswb",		{ MX, EM } },
2080   { "pcmpgtb",		{ MX, EM } },
2081   { "pcmpgtw",		{ MX, EM } },
2082   { "pcmpgtd",		{ MX, EM } },
2083   { "packuswb",		{ MX, EM } },
2084   /* 68 */
2085   { "punpckhbw",	{ MX, EM } },
2086   { "punpckhwd",	{ MX, EM } },
2087   { "punpckhdq",	{ MX, EM } },
2088   { "packssdw",		{ MX, EM } },
2089   { PREFIX_TABLE (PREFIX_0F6C) },
2090   { PREFIX_TABLE (PREFIX_0F6D) },
2091   { "movK",		{ MX, Edq } },
2092   { PREFIX_TABLE (PREFIX_0F6F) },
2093   /* 70 */
2094   { PREFIX_TABLE (PREFIX_0F70) },
2095   { REG_TABLE (REG_0F71) },
2096   { REG_TABLE (REG_0F72) },
2097   { REG_TABLE (REG_0F73) },
2098   { "pcmpeqb",		{ MX, EM } },
2099   { "pcmpeqw",		{ MX, EM } },
2100   { "pcmpeqd",		{ MX, EM } },
2101   { "emms",		{ XX } },
2102   /* 78 */
2103   { PREFIX_TABLE (PREFIX_0F78) },
2104   { PREFIX_TABLE (PREFIX_0F79) },
2105   { THREE_BYTE_TABLE (THREE_BYTE_0F7A) },
2106   { Bad_Opcode },
2107   { PREFIX_TABLE (PREFIX_0F7C) },
2108   { PREFIX_TABLE (PREFIX_0F7D) },
2109   { PREFIX_TABLE (PREFIX_0F7E) },
2110   { PREFIX_TABLE (PREFIX_0F7F) },
2111   /* 80 */
2112   { "joH",		{ Jv, XX, cond_jump_flag } },
2113   { "jnoH",		{ Jv, XX, cond_jump_flag } },
2114   { "jbH",		{ Jv, XX, cond_jump_flag } },
2115   { "jaeH",		{ Jv, XX, cond_jump_flag } },
2116   { "jeH",		{ Jv, XX, cond_jump_flag } },
2117   { "jneH",		{ Jv, XX, cond_jump_flag } },
2118   { "jbeH",		{ Jv, XX, cond_jump_flag } },
2119   { "jaH",		{ Jv, XX, cond_jump_flag } },
2120   /* 88 */
2121   { "jsH",		{ Jv, XX, cond_jump_flag } },
2122   { "jnsH",		{ Jv, XX, cond_jump_flag } },
2123   { "jpH",		{ Jv, XX, cond_jump_flag } },
2124   { "jnpH",		{ Jv, XX, cond_jump_flag } },
2125   { "jlH",		{ Jv, XX, cond_jump_flag } },
2126   { "jgeH",		{ Jv, XX, cond_jump_flag } },
2127   { "jleH",		{ Jv, XX, cond_jump_flag } },
2128   { "jgH",		{ Jv, XX, cond_jump_flag } },
2129   /* 90 */
2130   { "seto",		{ Eb } },
2131   { "setno",		{ Eb } },
2132   { "setb",		{ Eb } },
2133   { "setae",		{ Eb } },
2134   { "sete",		{ Eb } },
2135   { "setne",		{ Eb } },
2136   { "setbe",		{ Eb } },
2137   { "seta",		{ Eb } },
2138   /* 98 */
2139   { "sets",		{ Eb } },
2140   { "setns",		{ Eb } },
2141   { "setp",		{ Eb } },
2142   { "setnp",		{ Eb } },
2143   { "setl",		{ Eb } },
2144   { "setge",		{ Eb } },
2145   { "setle",		{ Eb } },
2146   { "setg",		{ Eb } },
2147   /* a0 */
2148   { "pushT",		{ fs } },
2149   { "popT",		{ fs } },
2150   { "cpuid",		{ XX } },
2151   { "btS",		{ Ev, Gv } },
2152   { "shldS",		{ Ev, Gv, Ib } },
2153   { "shldS",		{ Ev, Gv, CL } },
2154   { REG_TABLE (REG_0FA6) },
2155   { REG_TABLE (REG_0FA7) },
2156   /* a8 */
2157   { "pushT",		{ gs } },
2158   { "popT",		{ gs } },
2159   { "rsm",		{ XX } },
2160   { "btsS",		{ Ev, Gv } },
2161   { "shrdS",		{ Ev, Gv, Ib } },
2162   { "shrdS",		{ Ev, Gv, CL } },
2163   { REG_TABLE (REG_0FAE) },
2164   { "imulS",		{ Gv, Ev } },
2165   /* b0 */
2166   { "cmpxchgB",		{ Eb, Gb } },
2167   { "cmpxchgS",		{ Ev, Gv } },
2168   { MOD_TABLE (MOD_0FB2) },
2169   { "btrS",		{ Ev, Gv } },
2170   { MOD_TABLE (MOD_0FB4) },
2171   { MOD_TABLE (MOD_0FB5) },
2172   { "movz{bR|x}",	{ Gv, Eb } },
2173   { "movz{wR|x}",	{ Gv, Ew } }, /* yes, there really is movzww ! */
2174   /* b8 */
2175   { PREFIX_TABLE (PREFIX_0FB8) },
2176   { "ud1",		{ XX } },
2177   { REG_TABLE (REG_0FBA) },
2178   { "btcS",		{ Ev, Gv } },
2179   { PREFIX_TABLE (PREFIX_0FBC) },
2180   { PREFIX_TABLE (PREFIX_0FBD) },
2181   { "movs{bR|x}",	{ Gv, Eb } },
2182   { "movs{wR|x}",	{ Gv, Ew } }, /* yes, there really is movsww ! */
2183   /* c0 */
2184   { "xaddB",		{ Eb, Gb } },
2185   { "xaddS",		{ Ev, Gv } },
2186   { PREFIX_TABLE (PREFIX_0FC2) },
2187   { PREFIX_TABLE (PREFIX_0FC3) },
2188   { "pinsrw",		{ MX, Edqw, Ib } },
2189   { "pextrw",		{ Gdq, MS, Ib } },
2190   { "shufpX",		{ XM, EXx, Ib } },
2191   { REG_TABLE (REG_0FC7) },
2192   /* c8 */
2193   { "bswap",		{ RMeAX } },
2194   { "bswap",		{ RMeCX } },
2195   { "bswap",		{ RMeDX } },
2196   { "bswap",		{ RMeBX } },
2197   { "bswap",		{ RMeSP } },
2198   { "bswap",		{ RMeBP } },
2199   { "bswap",		{ RMeSI } },
2200   { "bswap",		{ RMeDI } },
2201   /* d0 */
2202   { PREFIX_TABLE (PREFIX_0FD0) },
2203   { "psrlw",		{ MX, EM } },
2204   { "psrld",		{ MX, EM } },
2205   { "psrlq",		{ MX, EM } },
2206   { "paddq",		{ MX, EM } },
2207   { "pmullw",		{ MX, EM } },
2208   { PREFIX_TABLE (PREFIX_0FD6) },
2209   { MOD_TABLE (MOD_0FD7) },
2210   /* d8 */
2211   { "psubusb",		{ MX, EM } },
2212   { "psubusw",		{ MX, EM } },
2213   { "pminub",		{ MX, EM } },
2214   { "pand",		{ MX, EM } },
2215   { "paddusb",		{ MX, EM } },
2216   { "paddusw",		{ MX, EM } },
2217   { "pmaxub",		{ MX, EM } },
2218   { "pandn",		{ MX, EM } },
2219   /* e0 */
2220   { "pavgb",		{ MX, EM } },
2221   { "psraw",		{ MX, EM } },
2222   { "psrad",		{ MX, EM } },
2223   { "pavgw",		{ MX, EM } },
2224   { "pmulhuw",		{ MX, EM } },
2225   { "pmulhw",		{ MX, EM } },
2226   { PREFIX_TABLE (PREFIX_0FE6) },
2227   { PREFIX_TABLE (PREFIX_0FE7) },
2228   /* e8 */
2229   { "psubsb",		{ MX, EM } },
2230   { "psubsw",		{ MX, EM } },
2231   { "pminsw",		{ MX, EM } },
2232   { "por",		{ MX, EM } },
2233   { "paddsb",		{ MX, EM } },
2234   { "paddsw",		{ MX, EM } },
2235   { "pmaxsw",		{ MX, EM } },
2236   { "pxor",		{ MX, EM } },
2237   /* f0 */
2238   { PREFIX_TABLE (PREFIX_0FF0) },
2239   { "psllw",		{ MX, EM } },
2240   { "pslld",		{ MX, EM } },
2241   { "psllq",		{ MX, EM } },
2242   { "pmuludq",		{ MX, EM } },
2243   { "pmaddwd",		{ MX, EM } },
2244   { "psadbw",		{ MX, EM } },
2245   { PREFIX_TABLE (PREFIX_0FF7) },
2246   /* f8 */
2247   { "psubb",		{ MX, EM } },
2248   { "psubw",		{ MX, EM } },
2249   { "psubd",		{ MX, EM } },
2250   { "psubq",		{ MX, EM } },
2251   { "paddb",		{ MX, EM } },
2252   { "paddw",		{ MX, EM } },
2253   { "paddd",		{ MX, EM } },
2254   { Bad_Opcode },
2255 };
2256 
2257 static const unsigned char onebyte_has_modrm[256] = {
2258   /*       0 1 2 3 4 5 6 7 8 9 a b c d e f        */
2259   /*       -------------------------------        */
2260   /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
2261   /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
2262   /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
2263   /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
2264   /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
2265   /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
2266   /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
2267   /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
2268   /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
2269   /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
2270   /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
2271   /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
2272   /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
2273   /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
2274   /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
2275   /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1  /* f0 */
2276   /*       -------------------------------        */
2277   /*       0 1 2 3 4 5 6 7 8 9 a b c d e f        */
2278 };
2279 
2280 static const unsigned char twobyte_has_modrm[256] = {
2281   /*       0 1 2 3 4 5 6 7 8 9 a b c d e f        */
2282   /*       -------------------------------        */
2283   /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
2284   /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
2285   /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
2286   /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
2287   /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
2288   /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
2289   /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
2290   /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
2291   /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
2292   /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
2293   /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
2294   /* b0 */ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* bf */
2295   /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
2296   /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
2297   /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
2298   /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0  /* ff */
2299   /*       -------------------------------        */
2300   /*       0 1 2 3 4 5 6 7 8 9 a b c d e f        */
2301 };
2302 
2303 static char obuf[100];
2304 static char *obufp;
2305 static char *mnemonicendp;
2306 static char scratchbuf[100];
2307 static unsigned char *start_codep;
2308 static unsigned char *insn_codep;
2309 static unsigned char *codep;
2310 static int last_lock_prefix;
2311 static int last_repz_prefix;
2312 static int last_repnz_prefix;
2313 static int last_data_prefix;
2314 static int last_addr_prefix;
2315 static int last_rex_prefix;
2316 static int last_seg_prefix;
2317 #define MAX_CODE_LENGTH 15
2318 /* We can up to 14 prefixes since the maximum instruction length is
2319    15bytes.  */
2320 static int all_prefixes[MAX_CODE_LENGTH - 1];
2321 static disassemble_info *the_info;
2322 static struct
2323   {
2324     int mod;
2325     int reg;
2326     int rm;
2327   }
2328 modrm;
2329 static unsigned char need_modrm;
2330 static struct
2331   {
2332     int scale;
2333     int index;
2334     int base;
2335   }
2336 sib;
2337 static struct
2338   {
2339     int register_specifier;
2340     int length;
2341     int prefix;
2342     int w;
2343   }
2344 vex;
2345 static unsigned char need_vex;
2346 static unsigned char need_vex_reg;
2347 static unsigned char vex_w_done;
2348 
2349 struct op
2350   {
2351     const char *name;
2352     unsigned int len;
2353   };
2354 
2355 /* If we are accessing mod/rm/reg without need_modrm set, then the
2356    values are stale.  Hitting this abort likely indicates that you
2357    need to update onebyte_has_modrm or twobyte_has_modrm.  */
2358 #define MODRM_CHECK  if (!need_modrm) abort ()
2359 
2360 static const char **names64;
2361 static const char **names32;
2362 static const char **names16;
2363 static const char **names8;
2364 static const char **names8rex;
2365 static const char **names_seg;
2366 static const char *index64;
2367 static const char *index32;
2368 static const char **index16;
2369 
2370 static const char *intel_names64[] = {
2371   "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
2372   "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
2373 };
2374 static const char *intel_names32[] = {
2375   "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
2376   "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
2377 };
2378 static const char *intel_names16[] = {
2379   "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
2380   "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
2381 };
2382 static const char *intel_names8[] = {
2383   "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
2384 };
2385 static const char *intel_names8rex[] = {
2386   "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
2387   "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
2388 };
2389 static const char *intel_names_seg[] = {
2390   "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
2391 };
2392 static const char *intel_index64 = "riz";
2393 static const char *intel_index32 = "eiz";
2394 static const char *intel_index16[] = {
2395   "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
2396 };
2397 
2398 static const char *att_names64[] = {
2399   "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
2400   "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
2401 };
2402 static const char *att_names32[] = {
2403   "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
2404   "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
2405 };
2406 static const char *att_names16[] = {
2407   "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
2408   "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
2409 };
2410 static const char *att_names8[] = {
2411   "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
2412 };
2413 static const char *att_names8rex[] = {
2414   "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
2415   "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
2416 };
2417 static const char *att_names_seg[] = {
2418   "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
2419 };
2420 static const char *att_index64 = "%riz";
2421 static const char *att_index32 = "%eiz";
2422 static const char *att_index16[] = {
2423   "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
2424 };
2425 
2426 static const char **names_mm;
2427 static const char *intel_names_mm[] = {
2428   "mm0", "mm1", "mm2", "mm3",
2429   "mm4", "mm5", "mm6", "mm7"
2430 };
2431 static const char *att_names_mm[] = {
2432   "%mm0", "%mm1", "%mm2", "%mm3",
2433   "%mm4", "%mm5", "%mm6", "%mm7"
2434 };
2435 
2436 static const char **names_xmm;
2437 static const char *intel_names_xmm[] = {
2438   "xmm0", "xmm1", "xmm2", "xmm3",
2439   "xmm4", "xmm5", "xmm6", "xmm7",
2440   "xmm8", "xmm9", "xmm10", "xmm11",
2441   "xmm12", "xmm13", "xmm14", "xmm15"
2442 };
2443 static const char *att_names_xmm[] = {
2444   "%xmm0", "%xmm1", "%xmm2", "%xmm3",
2445   "%xmm4", "%xmm5", "%xmm6", "%xmm7",
2446   "%xmm8", "%xmm9", "%xmm10", "%xmm11",
2447   "%xmm12", "%xmm13", "%xmm14", "%xmm15"
2448 };
2449 
2450 static const char **names_ymm;
2451 static const char *intel_names_ymm[] = {
2452   "ymm0", "ymm1", "ymm2", "ymm3",
2453   "ymm4", "ymm5", "ymm6", "ymm7",
2454   "ymm8", "ymm9", "ymm10", "ymm11",
2455   "ymm12", "ymm13", "ymm14", "ymm15"
2456 };
2457 static const char *att_names_ymm[] = {
2458   "%ymm0", "%ymm1", "%ymm2", "%ymm3",
2459   "%ymm4", "%ymm5", "%ymm6", "%ymm7",
2460   "%ymm8", "%ymm9", "%ymm10", "%ymm11",
2461   "%ymm12", "%ymm13", "%ymm14", "%ymm15"
2462 };
2463 
2464 static const struct dis386 reg_table[][8] = {
2465   /* REG_80 */
2466   {
2467     { "addA",	{ Eb, Ib } },
2468     { "orA",	{ Eb, Ib } },
2469     { "adcA",	{ Eb, Ib } },
2470     { "sbbA",	{ Eb, Ib } },
2471     { "andA",	{ Eb, Ib } },
2472     { "subA",	{ Eb, Ib } },
2473     { "xorA",	{ Eb, Ib } },
2474     { "cmpA",	{ Eb, Ib } },
2475   },
2476   /* REG_81 */
2477   {
2478     { "addQ",	{ Ev, Iv } },
2479     { "orQ",	{ Ev, Iv } },
2480     { "adcQ",	{ Ev, Iv } },
2481     { "sbbQ",	{ Ev, Iv } },
2482     { "andQ",	{ Ev, Iv } },
2483     { "subQ",	{ Ev, Iv } },
2484     { "xorQ",	{ Ev, Iv } },
2485     { "cmpQ",	{ Ev, Iv } },
2486   },
2487   /* REG_82 */
2488   {
2489     { "addQ",	{ Ev, sIb } },
2490     { "orQ",	{ Ev, sIb } },
2491     { "adcQ",	{ Ev, sIb } },
2492     { "sbbQ",	{ Ev, sIb } },
2493     { "andQ",	{ Ev, sIb } },
2494     { "subQ",	{ Ev, sIb } },
2495     { "xorQ",	{ Ev, sIb } },
2496     { "cmpQ",	{ Ev, sIb } },
2497   },
2498   /* REG_8F */
2499   {
2500     { "popU",	{ stackEv } },
2501     { XOP_8F_TABLE (XOP_09) },
2502     { Bad_Opcode },
2503     { Bad_Opcode },
2504     { Bad_Opcode },
2505     { XOP_8F_TABLE (XOP_09) },
2506   },
2507   /* REG_C0 */
2508   {
2509     { "rolA",	{ Eb, Ib } },
2510     { "rorA",	{ Eb, Ib } },
2511     { "rclA",	{ Eb, Ib } },
2512     { "rcrA",	{ Eb, Ib } },
2513     { "shlA",	{ Eb, Ib } },
2514     { "shrA",	{ Eb, Ib } },
2515     { Bad_Opcode },
2516     { "sarA",	{ Eb, Ib } },
2517   },
2518   /* REG_C1 */
2519   {
2520     { "rolQ",	{ Ev, Ib } },
2521     { "rorQ",	{ Ev, Ib } },
2522     { "rclQ",	{ Ev, Ib } },
2523     { "rcrQ",	{ Ev, Ib } },
2524     { "shlQ",	{ Ev, Ib } },
2525     { "shrQ",	{ Ev, Ib } },
2526     { Bad_Opcode },
2527     { "sarQ",	{ Ev, Ib } },
2528   },
2529   /* REG_C6 */
2530   {
2531     { "movA",	{ Eb, Ib } },
2532   },
2533   /* REG_C7 */
2534   {
2535     { "movQ",	{ Ev, Iv } },
2536   },
2537   /* REG_D0 */
2538   {
2539     { "rolA",	{ Eb, I1 } },
2540     { "rorA",	{ Eb, I1 } },
2541     { "rclA",	{ Eb, I1 } },
2542     { "rcrA",	{ Eb, I1 } },
2543     { "shlA",	{ Eb, I1 } },
2544     { "shrA",	{ Eb, I1 } },
2545     { Bad_Opcode },
2546     { "sarA",	{ Eb, I1 } },
2547   },
2548   /* REG_D1 */
2549   {
2550     { "rolQ",	{ Ev, I1 } },
2551     { "rorQ",	{ Ev, I1 } },
2552     { "rclQ",	{ Ev, I1 } },
2553     { "rcrQ",	{ Ev, I1 } },
2554     { "shlQ",	{ Ev, I1 } },
2555     { "shrQ",	{ Ev, I1 } },
2556     { Bad_Opcode },
2557     { "sarQ",	{ Ev, I1 } },
2558   },
2559   /* REG_D2 */
2560   {
2561     { "rolA",	{ Eb, CL } },
2562     { "rorA",	{ Eb, CL } },
2563     { "rclA",	{ Eb, CL } },
2564     { "rcrA",	{ Eb, CL } },
2565     { "shlA",	{ Eb, CL } },
2566     { "shrA",	{ Eb, CL } },
2567     { Bad_Opcode },
2568     { "sarA",	{ Eb, CL } },
2569   },
2570   /* REG_D3 */
2571   {
2572     { "rolQ",	{ Ev, CL } },
2573     { "rorQ",	{ Ev, CL } },
2574     { "rclQ",	{ Ev, CL } },
2575     { "rcrQ",	{ Ev, CL } },
2576     { "shlQ",	{ Ev, CL } },
2577     { "shrQ",	{ Ev, CL } },
2578     { Bad_Opcode },
2579     { "sarQ",	{ Ev, CL } },
2580   },
2581   /* REG_F6 */
2582   {
2583     { "testA",	{ Eb, Ib } },
2584     { Bad_Opcode },
2585     { "notA",	{ Eb } },
2586     { "negA",	{ Eb } },
2587     { "mulA",	{ Eb } },	/* Don't print the implicit %al register,  */
2588     { "imulA",	{ Eb } },	/* to distinguish these opcodes from other */
2589     { "divA",	{ Eb } },	/* mul/imul opcodes.  Do the same for div  */
2590     { "idivA",	{ Eb } },	/* and idiv for consistency.		   */
2591   },
2592   /* REG_F7 */
2593   {
2594     { "testQ",	{ Ev, Iv } },
2595     { Bad_Opcode },
2596     { "notQ",	{ Ev } },
2597     { "negQ",	{ Ev } },
2598     { "mulQ",	{ Ev } },	/* Don't print the implicit register.  */
2599     { "imulQ",	{ Ev } },
2600     { "divQ",	{ Ev } },
2601     { "idivQ",	{ Ev } },
2602   },
2603   /* REG_FE */
2604   {
2605     { "incA",	{ Eb } },
2606     { "decA",	{ Eb } },
2607   },
2608   /* REG_FF */
2609   {
2610     { "incQ",	{ Ev } },
2611     { "decQ",	{ Ev } },
2612     { "call{T|}", { indirEv } },
2613     { "Jcall{T|}", { indirEp } },
2614     { "jmp{T|}", { indirEv } },
2615     { "Jjmp{T|}", { indirEp } },
2616     { "pushU",	{ stackEv } },
2617     { Bad_Opcode },
2618   },
2619   /* REG_0F00 */
2620   {
2621     { "sldtD",	{ Sv } },
2622     { "strD",	{ Sv } },
2623     { "lldt",	{ Ew } },
2624     { "ltr",	{ Ew } },
2625     { "verr",	{ Ew } },
2626     { "verw",	{ Ew } },
2627     { Bad_Opcode },
2628     { Bad_Opcode },
2629   },
2630   /* REG_0F01 */
2631   {
2632     { MOD_TABLE (MOD_0F01_REG_0) },
2633     { MOD_TABLE (MOD_0F01_REG_1) },
2634     { MOD_TABLE (MOD_0F01_REG_2) },
2635     { MOD_TABLE (MOD_0F01_REG_3) },
2636     { "smswD",	{ Sv } },
2637     { Bad_Opcode },
2638     { "lmsw",	{ Ew } },
2639     { MOD_TABLE (MOD_0F01_REG_7) },
2640   },
2641   /* REG_0F0D */
2642   {
2643     { "prefetch",	{ Mb } },
2644     { "prefetchw",	{ Mb } },
2645   },
2646   /* REG_0F18 */
2647   {
2648     { MOD_TABLE (MOD_0F18_REG_0) },
2649     { MOD_TABLE (MOD_0F18_REG_1) },
2650     { MOD_TABLE (MOD_0F18_REG_2) },
2651     { MOD_TABLE (MOD_0F18_REG_3) },
2652   },
2653   /* REG_0F71 */
2654   {
2655     { Bad_Opcode },
2656     { Bad_Opcode },
2657     { MOD_TABLE (MOD_0F71_REG_2) },
2658     { Bad_Opcode },
2659     { MOD_TABLE (MOD_0F71_REG_4) },
2660     { Bad_Opcode },
2661     { MOD_TABLE (MOD_0F71_REG_6) },
2662   },
2663   /* REG_0F72 */
2664   {
2665     { Bad_Opcode },
2666     { Bad_Opcode },
2667     { MOD_TABLE (MOD_0F72_REG_2) },
2668     { Bad_Opcode },
2669     { MOD_TABLE (MOD_0F72_REG_4) },
2670     { Bad_Opcode },
2671     { MOD_TABLE (MOD_0F72_REG_6) },
2672   },
2673   /* REG_0F73 */
2674   {
2675     { Bad_Opcode },
2676     { Bad_Opcode },
2677     { MOD_TABLE (MOD_0F73_REG_2) },
2678     { MOD_TABLE (MOD_0F73_REG_3) },
2679     { Bad_Opcode },
2680     { Bad_Opcode },
2681     { MOD_TABLE (MOD_0F73_REG_6) },
2682     { MOD_TABLE (MOD_0F73_REG_7) },
2683   },
2684   /* REG_0FA6 */
2685   {
2686     { "montmul",	{ { OP_0f07, 0 } } },
2687     { "xsha1",		{ { OP_0f07, 0 } } },
2688     { "xsha256",	{ { OP_0f07, 0 } } },
2689   },
2690   /* REG_0FA7 */
2691   {
2692     { "xstore-rng",	{ { OP_0f07, 0 } } },
2693     { "xcrypt-ecb",	{ { OP_0f07, 0 } } },
2694     { "xcrypt-cbc",	{ { OP_0f07, 0 } } },
2695     { "xcrypt-ctr",	{ { OP_0f07, 0 } } },
2696     { "xcrypt-cfb",	{ { OP_0f07, 0 } } },
2697     { "xcrypt-ofb",	{ { OP_0f07, 0 } } },
2698   },
2699   /* REG_0FAE */
2700   {
2701     { MOD_TABLE (MOD_0FAE_REG_0) },
2702     { MOD_TABLE (MOD_0FAE_REG_1) },
2703     { MOD_TABLE (MOD_0FAE_REG_2) },
2704     { MOD_TABLE (MOD_0FAE_REG_3) },
2705     { MOD_TABLE (MOD_0FAE_REG_4) },
2706     { MOD_TABLE (MOD_0FAE_REG_5) },
2707     { MOD_TABLE (MOD_0FAE_REG_6) },
2708     { MOD_TABLE (MOD_0FAE_REG_7) },
2709   },
2710   /* REG_0FBA */
2711   {
2712     { Bad_Opcode },
2713     { Bad_Opcode },
2714     { Bad_Opcode },
2715     { Bad_Opcode },
2716     { "btQ",	{ Ev, Ib } },
2717     { "btsQ",	{ Ev, Ib } },
2718     { "btrQ",	{ Ev, Ib } },
2719     { "btcQ",	{ Ev, Ib } },
2720   },
2721   /* REG_0FC7 */
2722   {
2723     { Bad_Opcode },
2724     { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } } },
2725     { Bad_Opcode },
2726     { Bad_Opcode },
2727     { Bad_Opcode },
2728     { Bad_Opcode },
2729     { MOD_TABLE (MOD_0FC7_REG_6) },
2730     { MOD_TABLE (MOD_0FC7_REG_7) },
2731   },
2732   /* REG_VEX_0F71 */
2733   {
2734     { Bad_Opcode },
2735     { Bad_Opcode },
2736     { MOD_TABLE (MOD_VEX_0F71_REG_2) },
2737     { Bad_Opcode },
2738     { MOD_TABLE (MOD_VEX_0F71_REG_4) },
2739     { Bad_Opcode },
2740     { MOD_TABLE (MOD_VEX_0F71_REG_6) },
2741   },
2742   /* REG_VEX_0F72 */
2743   {
2744     { Bad_Opcode },
2745     { Bad_Opcode },
2746     { MOD_TABLE (MOD_VEX_0F72_REG_2) },
2747     { Bad_Opcode },
2748     { MOD_TABLE (MOD_VEX_0F72_REG_4) },
2749     { Bad_Opcode },
2750     { MOD_TABLE (MOD_VEX_0F72_REG_6) },
2751   },
2752   /* REG_VEX_0F73 */
2753   {
2754     { Bad_Opcode },
2755     { Bad_Opcode },
2756     { MOD_TABLE (MOD_VEX_0F73_REG_2) },
2757     { MOD_TABLE (MOD_VEX_0F73_REG_3) },
2758     { Bad_Opcode },
2759     { Bad_Opcode },
2760     { MOD_TABLE (MOD_VEX_0F73_REG_6) },
2761     { MOD_TABLE (MOD_VEX_0F73_REG_7) },
2762   },
2763   /* REG_VEX_0FAE */
2764   {
2765     { Bad_Opcode },
2766     { Bad_Opcode },
2767     { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
2768     { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
2769   },
2770   /* REG_VEX_0F38F3 */
2771   {
2772     { Bad_Opcode },
2773     { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
2774     { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
2775     { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
2776   },
2777   /* REG_XOP_LWPCB */
2778   {
2779     { "llwpcb", { { OP_LWPCB_E, 0 } } },
2780     { "slwpcb",	{ { OP_LWPCB_E, 0 } } },
2781   },
2782   /* REG_XOP_LWP */
2783   {
2784     { "lwpins", { { OP_LWP_E, 0 }, Ed, Iq } },
2785     { "lwpval",	{ { OP_LWP_E, 0 }, Ed, Iq } },
2786   },
2787   /* REG_XOP_TBM_01 */
2788   {
2789     { Bad_Opcode },
2790     { "blcfill",	{ { OP_LWP_E, 0 }, Ev } },
2791     { "blsfill",	{ { OP_LWP_E, 0 }, Ev } },
2792     { "blcs",	{ { OP_LWP_E, 0 }, Ev } },
2793     { "tzmsk",	{ { OP_LWP_E, 0 }, Ev } },
2794     { "blcic",	{ { OP_LWP_E, 0 }, Ev } },
2795     { "blsic",	{ { OP_LWP_E, 0 }, Ev } },
2796     { "t1mskc",	{ { OP_LWP_E, 0 }, Ev } },
2797   },
2798   /* REG_XOP_TBM_02 */
2799   {
2800     { Bad_Opcode },
2801     { "blcmsk",	{ { OP_LWP_E, 0 }, Ev } },
2802     { Bad_Opcode },
2803     { Bad_Opcode },
2804     { Bad_Opcode },
2805     { Bad_Opcode },
2806     { "blci",	{ { OP_LWP_E, 0 }, Ev } },
2807   },
2808 };
2809 
2810 static const struct dis386 prefix_table[][4] = {
2811   /* PREFIX_90 */
2812   {
2813     { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
2814     { "pause", { XX } },
2815     { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
2816   },
2817 
2818   /* PREFIX_0F10 */
2819   {
2820     { "movups",	{ XM, EXx } },
2821     { "movss",	{ XM, EXd } },
2822     { "movupd",	{ XM, EXx } },
2823     { "movsd",	{ XM, EXq } },
2824   },
2825 
2826   /* PREFIX_0F11 */
2827   {
2828     { "movups",	{ EXxS, XM } },
2829     { "movss",	{ EXdS, XM } },
2830     { "movupd",	{ EXxS, XM } },
2831     { "movsd",	{ EXqS, XM } },
2832   },
2833 
2834   /* PREFIX_0F12 */
2835   {
2836     { MOD_TABLE (MOD_0F12_PREFIX_0) },
2837     { "movsldup", { XM, EXx } },
2838     { "movlpd",	{ XM, EXq } },
2839     { "movddup", { XM, EXq } },
2840   },
2841 
2842   /* PREFIX_0F16 */
2843   {
2844     { MOD_TABLE (MOD_0F16_PREFIX_0) },
2845     { "movshdup", { XM, EXx } },
2846     { "movhpd",	{ XM, EXq } },
2847   },
2848 
2849   /* PREFIX_0F2A */
2850   {
2851     { "cvtpi2ps", { XM, EMCq } },
2852     { "cvtsi2ss%LQ", { XM, Ev } },
2853     { "cvtpi2pd", { XM, EMCq } },
2854     { "cvtsi2sd%LQ", { XM, Ev } },
2855   },
2856 
2857   /* PREFIX_0F2B */
2858   {
2859     { MOD_TABLE (MOD_0F2B_PREFIX_0) },
2860     { MOD_TABLE (MOD_0F2B_PREFIX_1) },
2861     { MOD_TABLE (MOD_0F2B_PREFIX_2) },
2862     { MOD_TABLE (MOD_0F2B_PREFIX_3) },
2863   },
2864 
2865   /* PREFIX_0F2C */
2866   {
2867     { "cvttps2pi", { MXC, EXq } },
2868     { "cvttss2siY", { Gv, EXd } },
2869     { "cvttpd2pi", { MXC, EXx } },
2870     { "cvttsd2siY", { Gv, EXq } },
2871   },
2872 
2873   /* PREFIX_0F2D */
2874   {
2875     { "cvtps2pi", { MXC, EXq } },
2876     { "cvtss2siY", { Gv, EXd } },
2877     { "cvtpd2pi", { MXC, EXx } },
2878     { "cvtsd2siY", { Gv, EXq } },
2879   },
2880 
2881   /* PREFIX_0F2E */
2882   {
2883     { "ucomiss",{ XM, EXd } },
2884     { Bad_Opcode },
2885     { "ucomisd",{ XM, EXq } },
2886   },
2887 
2888   /* PREFIX_0F2F */
2889   {
2890     { "comiss",	{ XM, EXd } },
2891     { Bad_Opcode },
2892     { "comisd",	{ XM, EXq } },
2893   },
2894 
2895   /* PREFIX_0F51 */
2896   {
2897     { "sqrtps", { XM, EXx } },
2898     { "sqrtss", { XM, EXd } },
2899     { "sqrtpd", { XM, EXx } },
2900     { "sqrtsd",	{ XM, EXq } },
2901   },
2902 
2903   /* PREFIX_0F52 */
2904   {
2905     { "rsqrtps",{ XM, EXx } },
2906     { "rsqrtss",{ XM, EXd } },
2907   },
2908 
2909   /* PREFIX_0F53 */
2910   {
2911     { "rcpps",	{ XM, EXx } },
2912     { "rcpss",	{ XM, EXd } },
2913   },
2914 
2915   /* PREFIX_0F58 */
2916   {
2917     { "addps", { XM, EXx } },
2918     { "addss", { XM, EXd } },
2919     { "addpd", { XM, EXx } },
2920     { "addsd", { XM, EXq } },
2921   },
2922 
2923   /* PREFIX_0F59 */
2924   {
2925     { "mulps",	{ XM, EXx } },
2926     { "mulss",	{ XM, EXd } },
2927     { "mulpd",	{ XM, EXx } },
2928     { "mulsd",	{ XM, EXq } },
2929   },
2930 
2931   /* PREFIX_0F5A */
2932   {
2933     { "cvtps2pd", { XM, EXq } },
2934     { "cvtss2sd", { XM, EXd } },
2935     { "cvtpd2ps", { XM, EXx } },
2936     { "cvtsd2ss", { XM, EXq } },
2937   },
2938 
2939   /* PREFIX_0F5B */
2940   {
2941     { "cvtdq2ps", { XM, EXx } },
2942     { "cvttps2dq", { XM, EXx } },
2943     { "cvtps2dq", { XM, EXx } },
2944   },
2945 
2946   /* PREFIX_0F5C */
2947   {
2948     { "subps",	{ XM, EXx } },
2949     { "subss",	{ XM, EXd } },
2950     { "subpd",	{ XM, EXx } },
2951     { "subsd",	{ XM, EXq } },
2952   },
2953 
2954   /* PREFIX_0F5D */
2955   {
2956     { "minps",	{ XM, EXx } },
2957     { "minss",	{ XM, EXd } },
2958     { "minpd",	{ XM, EXx } },
2959     { "minsd",	{ XM, EXq } },
2960   },
2961 
2962   /* PREFIX_0F5E */
2963   {
2964     { "divps",	{ XM, EXx } },
2965     { "divss",	{ XM, EXd } },
2966     { "divpd",	{ XM, EXx } },
2967     { "divsd",	{ XM, EXq } },
2968   },
2969 
2970   /* PREFIX_0F5F */
2971   {
2972     { "maxps",	{ XM, EXx } },
2973     { "maxss",	{ XM, EXd } },
2974     { "maxpd",	{ XM, EXx } },
2975     { "maxsd",	{ XM, EXq } },
2976   },
2977 
2978   /* PREFIX_0F60 */
2979   {
2980     { "punpcklbw",{ MX, EMd } },
2981     { Bad_Opcode },
2982     { "punpcklbw",{ MX, EMx } },
2983   },
2984 
2985   /* PREFIX_0F61 */
2986   {
2987     { "punpcklwd",{ MX, EMd } },
2988     { Bad_Opcode },
2989     { "punpcklwd",{ MX, EMx } },
2990   },
2991 
2992   /* PREFIX_0F62 */
2993   {
2994     { "punpckldq",{ MX, EMd } },
2995     { Bad_Opcode },
2996     { "punpckldq",{ MX, EMx } },
2997   },
2998 
2999   /* PREFIX_0F6C */
3000   {
3001     { Bad_Opcode },
3002     { Bad_Opcode },
3003     { "punpcklqdq", { XM, EXx } },
3004   },
3005 
3006   /* PREFIX_0F6D */
3007   {
3008     { Bad_Opcode },
3009     { Bad_Opcode },
3010     { "punpckhqdq", { XM, EXx } },
3011   },
3012 
3013   /* PREFIX_0F6F */
3014   {
3015     { "movq",	{ MX, EM } },
3016     { "movdqu",	{ XM, EXx } },
3017     { "movdqa",	{ XM, EXx } },
3018   },
3019 
3020   /* PREFIX_0F70 */
3021   {
3022     { "pshufw",	{ MX, EM, Ib } },
3023     { "pshufhw",{ XM, EXx, Ib } },
3024     { "pshufd",	{ XM, EXx, Ib } },
3025     { "pshuflw",{ XM, EXx, Ib } },
3026   },
3027 
3028   /* PREFIX_0F73_REG_3 */
3029   {
3030     { Bad_Opcode },
3031     { Bad_Opcode },
3032     { "psrldq",	{ XS, Ib } },
3033   },
3034 
3035   /* PREFIX_0F73_REG_7 */
3036   {
3037     { Bad_Opcode },
3038     { Bad_Opcode },
3039     { "pslldq",	{ XS, Ib } },
3040   },
3041 
3042   /* PREFIX_0F78 */
3043   {
3044     {"vmread",	{ Em, Gm } },
3045     { Bad_Opcode },
3046     {"extrq",	{ XS, Ib, Ib } },
3047     {"insertq",	{ XM, XS, Ib, Ib } },
3048   },
3049 
3050   /* PREFIX_0F79 */
3051   {
3052     {"vmwrite",	{ Gm, Em } },
3053     { Bad_Opcode },
3054     {"extrq",	{ XM, XS } },
3055     {"insertq",	{ XM, XS } },
3056   },
3057 
3058   /* PREFIX_0F7C */
3059   {
3060     { Bad_Opcode },
3061     { Bad_Opcode },
3062     { "haddpd",	{ XM, EXx } },
3063     { "haddps",	{ XM, EXx } },
3064   },
3065 
3066   /* PREFIX_0F7D */
3067   {
3068     { Bad_Opcode },
3069     { Bad_Opcode },
3070     { "hsubpd",	{ XM, EXx } },
3071     { "hsubps",	{ XM, EXx } },
3072   },
3073 
3074   /* PREFIX_0F7E */
3075   {
3076     { "movK",	{ Edq, MX } },
3077     { "movq",	{ XM, EXq } },
3078     { "movK",	{ Edq, XM } },
3079   },
3080 
3081   /* PREFIX_0F7F */
3082   {
3083     { "movq",	{ EMS, MX } },
3084     { "movdqu",	{ EXxS, XM } },
3085     { "movdqa",	{ EXxS, XM } },
3086   },
3087 
3088   /* PREFIX_0FAE_REG_0 */
3089   {
3090     { Bad_Opcode },
3091     { "rdfsbase", { Ev } },
3092   },
3093 
3094   /* PREFIX_0FAE_REG_1 */
3095   {
3096     { Bad_Opcode },
3097     { "rdgsbase", { Ev } },
3098   },
3099 
3100   /* PREFIX_0FAE_REG_2 */
3101   {
3102     { Bad_Opcode },
3103     { "wrfsbase", { Ev } },
3104   },
3105 
3106   /* PREFIX_0FAE_REG_3 */
3107   {
3108     { Bad_Opcode },
3109     { "wrgsbase", { Ev } },
3110   },
3111 
3112   /* PREFIX_0FB8 */
3113   {
3114     { Bad_Opcode },
3115     { "popcntS", { Gv, Ev } },
3116   },
3117 
3118   /* PREFIX_0FBC */
3119   {
3120     { "bsfS",	{ Gv, Ev } },
3121     { "tzcntS",	{ Gv, Ev } },
3122     { "bsfS",	{ Gv, Ev } },
3123   },
3124 
3125   /* PREFIX_0FBD */
3126   {
3127     { "bsrS",	{ Gv, Ev } },
3128     { "lzcntS",	{ Gv, Ev } },
3129     { "bsrS",	{ Gv, Ev } },
3130   },
3131 
3132   /* PREFIX_0FC2 */
3133   {
3134     { "cmpps",	{ XM, EXx, CMP } },
3135     { "cmpss",	{ XM, EXd, CMP } },
3136     { "cmppd",	{ XM, EXx, CMP } },
3137     { "cmpsd",	{ XM, EXq, CMP } },
3138   },
3139 
3140   /* PREFIX_0FC3 */
3141   {
3142     { "movntiS", { Ma, Gv } },
3143   },
3144 
3145   /* PREFIX_0FC7_REG_6 */
3146   {
3147     { "vmptrld",{ Mq } },
3148     { "vmxon",	{ Mq } },
3149     { "vmclear",{ Mq } },
3150   },
3151 
3152   /* PREFIX_0FD0 */
3153   {
3154     { Bad_Opcode },
3155     { Bad_Opcode },
3156     { "addsubpd", { XM, EXx } },
3157     { "addsubps", { XM, EXx } },
3158   },
3159 
3160   /* PREFIX_0FD6 */
3161   {
3162     { Bad_Opcode },
3163     { "movq2dq",{ XM, MS } },
3164     { "movq",	{ EXqS, XM } },
3165     { "movdq2q",{ MX, XS } },
3166   },
3167 
3168   /* PREFIX_0FE6 */
3169   {
3170     { Bad_Opcode },
3171     { "cvtdq2pd", { XM, EXq } },
3172     { "cvttpd2dq", { XM, EXx } },
3173     { "cvtpd2dq", { XM, EXx } },
3174   },
3175 
3176   /* PREFIX_0FE7 */
3177   {
3178     { "movntq",	{ Mq, MX } },
3179     { Bad_Opcode },
3180     { MOD_TABLE (MOD_0FE7_PREFIX_2) },
3181   },
3182 
3183   /* PREFIX_0FF0 */
3184   {
3185     { Bad_Opcode },
3186     { Bad_Opcode },
3187     { Bad_Opcode },
3188     { MOD_TABLE (MOD_0FF0_PREFIX_3) },
3189   },
3190 
3191   /* PREFIX_0FF7 */
3192   {
3193     { "maskmovq", { MX, MS } },
3194     { Bad_Opcode },
3195     { "maskmovdqu", { XM, XS } },
3196   },
3197 
3198   /* PREFIX_0F3810 */
3199   {
3200     { Bad_Opcode },
3201     { Bad_Opcode },
3202     { "pblendvb", { XM, EXx, XMM0 } },
3203   },
3204 
3205   /* PREFIX_0F3814 */
3206   {
3207     { Bad_Opcode },
3208     { Bad_Opcode },
3209     { "blendvps", { XM, EXx, XMM0 } },
3210   },
3211 
3212   /* PREFIX_0F3815 */
3213   {
3214     { Bad_Opcode },
3215     { Bad_Opcode },
3216     { "blendvpd", { XM, EXx, XMM0 } },
3217   },
3218 
3219   /* PREFIX_0F3817 */
3220   {
3221     { Bad_Opcode },
3222     { Bad_Opcode },
3223     { "ptest",  { XM, EXx } },
3224   },
3225 
3226   /* PREFIX_0F3820 */
3227   {
3228     { Bad_Opcode },
3229     { Bad_Opcode },
3230     { "pmovsxbw", { XM, EXq } },
3231   },
3232 
3233   /* PREFIX_0F3821 */
3234   {
3235     { Bad_Opcode },
3236     { Bad_Opcode },
3237     { "pmovsxbd", { XM, EXd } },
3238   },
3239 
3240   /* PREFIX_0F3822 */
3241   {
3242     { Bad_Opcode },
3243     { Bad_Opcode },
3244     { "pmovsxbq", { XM, EXw } },
3245   },
3246 
3247   /* PREFIX_0F3823 */
3248   {
3249     { Bad_Opcode },
3250     { Bad_Opcode },
3251     { "pmovsxwd", { XM, EXq } },
3252   },
3253 
3254   /* PREFIX_0F3824 */
3255   {
3256     { Bad_Opcode },
3257     { Bad_Opcode },
3258     { "pmovsxwq", { XM, EXd } },
3259   },
3260 
3261   /* PREFIX_0F3825 */
3262   {
3263     { Bad_Opcode },
3264     { Bad_Opcode },
3265     { "pmovsxdq", { XM, EXq } },
3266   },
3267 
3268   /* PREFIX_0F3828 */
3269   {
3270     { Bad_Opcode },
3271     { Bad_Opcode },
3272     { "pmuldq", { XM, EXx } },
3273   },
3274 
3275   /* PREFIX_0F3829 */
3276   {
3277     { Bad_Opcode },
3278     { Bad_Opcode },
3279     { "pcmpeqq", { XM, EXx } },
3280   },
3281 
3282   /* PREFIX_0F382A */
3283   {
3284     { Bad_Opcode },
3285     { Bad_Opcode },
3286     { MOD_TABLE (MOD_0F382A_PREFIX_2) },
3287   },
3288 
3289   /* PREFIX_0F382B */
3290   {
3291     { Bad_Opcode },
3292     { Bad_Opcode },
3293     { "packusdw", { XM, EXx } },
3294   },
3295 
3296   /* PREFIX_0F3830 */
3297   {
3298     { Bad_Opcode },
3299     { Bad_Opcode },
3300     { "pmovzxbw", { XM, EXq } },
3301   },
3302 
3303   /* PREFIX_0F3831 */
3304   {
3305     { Bad_Opcode },
3306     { Bad_Opcode },
3307     { "pmovzxbd", { XM, EXd } },
3308   },
3309 
3310   /* PREFIX_0F3832 */
3311   {
3312     { Bad_Opcode },
3313     { Bad_Opcode },
3314     { "pmovzxbq", { XM, EXw } },
3315   },
3316 
3317   /* PREFIX_0F3833 */
3318   {
3319     { Bad_Opcode },
3320     { Bad_Opcode },
3321     { "pmovzxwd", { XM, EXq } },
3322   },
3323 
3324   /* PREFIX_0F3834 */
3325   {
3326     { Bad_Opcode },
3327     { Bad_Opcode },
3328     { "pmovzxwq", { XM, EXd } },
3329   },
3330 
3331   /* PREFIX_0F3835 */
3332   {
3333     { Bad_Opcode },
3334     { Bad_Opcode },
3335     { "pmovzxdq", { XM, EXq } },
3336   },
3337 
3338   /* PREFIX_0F3837 */
3339   {
3340     { Bad_Opcode },
3341     { Bad_Opcode },
3342     { "pcmpgtq", { XM, EXx } },
3343   },
3344 
3345   /* PREFIX_0F3838 */
3346   {
3347     { Bad_Opcode },
3348     { Bad_Opcode },
3349     { "pminsb",	{ XM, EXx } },
3350   },
3351 
3352   /* PREFIX_0F3839 */
3353   {
3354     { Bad_Opcode },
3355     { Bad_Opcode },
3356     { "pminsd",	{ XM, EXx } },
3357   },
3358 
3359   /* PREFIX_0F383A */
3360   {
3361     { Bad_Opcode },
3362     { Bad_Opcode },
3363     { "pminuw",	{ XM, EXx } },
3364   },
3365 
3366   /* PREFIX_0F383B */
3367   {
3368     { Bad_Opcode },
3369     { Bad_Opcode },
3370     { "pminud",	{ XM, EXx } },
3371   },
3372 
3373   /* PREFIX_0F383C */
3374   {
3375     { Bad_Opcode },
3376     { Bad_Opcode },
3377     { "pmaxsb",	{ XM, EXx } },
3378   },
3379 
3380   /* PREFIX_0F383D */
3381   {
3382     { Bad_Opcode },
3383     { Bad_Opcode },
3384     { "pmaxsd",	{ XM, EXx } },
3385   },
3386 
3387   /* PREFIX_0F383E */
3388   {
3389     { Bad_Opcode },
3390     { Bad_Opcode },
3391     { "pmaxuw", { XM, EXx } },
3392   },
3393 
3394   /* PREFIX_0F383F */
3395   {
3396     { Bad_Opcode },
3397     { Bad_Opcode },
3398     { "pmaxud", { XM, EXx } },
3399   },
3400 
3401   /* PREFIX_0F3840 */
3402   {
3403     { Bad_Opcode },
3404     { Bad_Opcode },
3405     { "pmulld", { XM, EXx } },
3406   },
3407 
3408   /* PREFIX_0F3841 */
3409   {
3410     { Bad_Opcode },
3411     { Bad_Opcode },
3412     { "phminposuw", { XM, EXx } },
3413   },
3414 
3415   /* PREFIX_0F3880 */
3416   {
3417     { Bad_Opcode },
3418     { Bad_Opcode },
3419     { "invept",	{ Gm, Mo } },
3420   },
3421 
3422   /* PREFIX_0F3881 */
3423   {
3424     { Bad_Opcode },
3425     { Bad_Opcode },
3426     { "invvpid", { Gm, Mo } },
3427   },
3428 
3429   /* PREFIX_0F38DB */
3430   {
3431     { Bad_Opcode },
3432     { Bad_Opcode },
3433     { "aesimc", { XM, EXx } },
3434   },
3435 
3436   /* PREFIX_0F38DC */
3437   {
3438     { Bad_Opcode },
3439     { Bad_Opcode },
3440     { "aesenc", { XM, EXx } },
3441   },
3442 
3443   /* PREFIX_0F38DD */
3444   {
3445     { Bad_Opcode },
3446     { Bad_Opcode },
3447     { "aesenclast", { XM, EXx } },
3448   },
3449 
3450   /* PREFIX_0F38DE */
3451   {
3452     { Bad_Opcode },
3453     { Bad_Opcode },
3454     { "aesdec", { XM, EXx } },
3455   },
3456 
3457   /* PREFIX_0F38DF */
3458   {
3459     { Bad_Opcode },
3460     { Bad_Opcode },
3461     { "aesdeclast", { XM, EXx } },
3462   },
3463 
3464   /* PREFIX_0F38F0 */
3465   {
3466     { "movbeS",	{ Gv, { MOVBE_Fixup, v_mode } } },
3467     { Bad_Opcode },
3468     { "movbeS",	{ Gv, { MOVBE_Fixup, v_mode } } },
3469     { "crc32",	{ Gdq, { CRC32_Fixup, b_mode } } },
3470   },
3471 
3472   /* PREFIX_0F38F1 */
3473   {
3474     { "movbeS",	{ { MOVBE_Fixup, v_mode }, Gv } },
3475     { Bad_Opcode },
3476     { "movbeS",	{ { MOVBE_Fixup, v_mode }, Gv } },
3477     { "crc32",	{ Gdq, { CRC32_Fixup, v_mode } } },
3478   },
3479 
3480   /* PREFIX_0F3A08 */
3481   {
3482     { Bad_Opcode },
3483     { Bad_Opcode },
3484     { "roundps", { XM, EXx, Ib } },
3485   },
3486 
3487   /* PREFIX_0F3A09 */
3488   {
3489     { Bad_Opcode },
3490     { Bad_Opcode },
3491     { "roundpd", { XM, EXx, Ib } },
3492   },
3493 
3494   /* PREFIX_0F3A0A */
3495   {
3496     { Bad_Opcode },
3497     { Bad_Opcode },
3498     { "roundss", { XM, EXd, Ib } },
3499   },
3500 
3501   /* PREFIX_0F3A0B */
3502   {
3503     { Bad_Opcode },
3504     { Bad_Opcode },
3505     { "roundsd", { XM, EXq, Ib } },
3506   },
3507 
3508   /* PREFIX_0F3A0C */
3509   {
3510     { Bad_Opcode },
3511     { Bad_Opcode },
3512     { "blendps", { XM, EXx, Ib } },
3513   },
3514 
3515   /* PREFIX_0F3A0D */
3516   {
3517     { Bad_Opcode },
3518     { Bad_Opcode },
3519     { "blendpd", { XM, EXx, Ib } },
3520   },
3521 
3522   /* PREFIX_0F3A0E */
3523   {
3524     { Bad_Opcode },
3525     { Bad_Opcode },
3526     { "pblendw", { XM, EXx, Ib } },
3527   },
3528 
3529   /* PREFIX_0F3A14 */
3530   {
3531     { Bad_Opcode },
3532     { Bad_Opcode },
3533     { "pextrb",	{ Edqb, XM, Ib } },
3534   },
3535 
3536   /* PREFIX_0F3A15 */
3537   {
3538     { Bad_Opcode },
3539     { Bad_Opcode },
3540     { "pextrw",	{ Edqw, XM, Ib } },
3541   },
3542 
3543   /* PREFIX_0F3A16 */
3544   {
3545     { Bad_Opcode },
3546     { Bad_Opcode },
3547     { "pextrK",	{ Edq, XM, Ib } },
3548   },
3549 
3550   /* PREFIX_0F3A17 */
3551   {
3552     { Bad_Opcode },
3553     { Bad_Opcode },
3554     { "extractps", { Edqd, XM, Ib } },
3555   },
3556 
3557   /* PREFIX_0F3A20 */
3558   {
3559     { Bad_Opcode },
3560     { Bad_Opcode },
3561     { "pinsrb",	{ XM, Edqb, Ib } },
3562   },
3563 
3564   /* PREFIX_0F3A21 */
3565   {
3566     { Bad_Opcode },
3567     { Bad_Opcode },
3568     { "insertps", { XM, EXd, Ib } },
3569   },
3570 
3571   /* PREFIX_0F3A22 */
3572   {
3573     { Bad_Opcode },
3574     { Bad_Opcode },
3575     { "pinsrK",	{ XM, Edq, Ib } },
3576   },
3577 
3578   /* PREFIX_0F3A40 */
3579   {
3580     { Bad_Opcode },
3581     { Bad_Opcode },
3582     { "dpps",	{ XM, EXx, Ib } },
3583   },
3584 
3585   /* PREFIX_0F3A41 */
3586   {
3587     { Bad_Opcode },
3588     { Bad_Opcode },
3589     { "dppd",	{ XM, EXx, Ib } },
3590   },
3591 
3592   /* PREFIX_0F3A42 */
3593   {
3594     { Bad_Opcode },
3595     { Bad_Opcode },
3596     { "mpsadbw", { XM, EXx, Ib } },
3597   },
3598 
3599   /* PREFIX_0F3A44 */
3600   {
3601     { Bad_Opcode },
3602     { Bad_Opcode },
3603     { "pclmulqdq", { XM, EXx, PCLMUL } },
3604   },
3605 
3606   /* PREFIX_0F3A60 */
3607   {
3608     { Bad_Opcode },
3609     { Bad_Opcode },
3610     { "pcmpestrm", { XM, EXx, Ib } },
3611   },
3612 
3613   /* PREFIX_0F3A61 */
3614   {
3615     { Bad_Opcode },
3616     { Bad_Opcode },
3617     { "pcmpestri", { XM, EXx, Ib } },
3618   },
3619 
3620   /* PREFIX_0F3A62 */
3621   {
3622     { Bad_Opcode },
3623     { Bad_Opcode },
3624     { "pcmpistrm", { XM, EXx, Ib } },
3625   },
3626 
3627   /* PREFIX_0F3A63 */
3628   {
3629     { Bad_Opcode },
3630     { Bad_Opcode },
3631     { "pcmpistri", { XM, EXx, Ib } },
3632   },
3633 
3634   /* PREFIX_0F3ADF */
3635   {
3636     { Bad_Opcode },
3637     { Bad_Opcode },
3638     { "aeskeygenassist", { XM, EXx, Ib } },
3639   },
3640 
3641   /* PREFIX_VEX_0F10 */
3642   {
3643     { VEX_W_TABLE (VEX_W_0F10_P_0) },
3644     { VEX_LEN_TABLE (VEX_LEN_0F10_P_1) },
3645     { VEX_W_TABLE (VEX_W_0F10_P_2) },
3646     { VEX_LEN_TABLE (VEX_LEN_0F10_P_3) },
3647   },
3648 
3649   /* PREFIX_VEX_0F11 */
3650   {
3651     { VEX_W_TABLE (VEX_W_0F11_P_0) },
3652     { VEX_LEN_TABLE (VEX_LEN_0F11_P_1) },
3653     { VEX_W_TABLE (VEX_W_0F11_P_2) },
3654     { VEX_LEN_TABLE (VEX_LEN_0F11_P_3) },
3655   },
3656 
3657   /* PREFIX_VEX_0F12 */
3658   {
3659     { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
3660     { VEX_W_TABLE (VEX_W_0F12_P_1) },
3661     { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) },
3662     { VEX_W_TABLE (VEX_W_0F12_P_3) },
3663   },
3664 
3665   /* PREFIX_VEX_0F16 */
3666   {
3667     { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
3668     { VEX_W_TABLE (VEX_W_0F16_P_1) },
3669     { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) },
3670   },
3671 
3672   /* PREFIX_VEX_0F2A */
3673   {
3674     { Bad_Opcode },
3675     { VEX_LEN_TABLE (VEX_LEN_0F2A_P_1) },
3676     { Bad_Opcode },
3677     { VEX_LEN_TABLE (VEX_LEN_0F2A_P_3) },
3678   },
3679 
3680   /* PREFIX_VEX_0F2C */
3681   {
3682     { Bad_Opcode },
3683     { VEX_LEN_TABLE (VEX_LEN_0F2C_P_1) },
3684     { Bad_Opcode },
3685     { VEX_LEN_TABLE (VEX_LEN_0F2C_P_3) },
3686   },
3687 
3688   /* PREFIX_VEX_0F2D */
3689   {
3690     { Bad_Opcode },
3691     { VEX_LEN_TABLE (VEX_LEN_0F2D_P_1) },
3692     { Bad_Opcode },
3693     { VEX_LEN_TABLE (VEX_LEN_0F2D_P_3) },
3694   },
3695 
3696   /* PREFIX_VEX_0F2E */
3697   {
3698     { VEX_LEN_TABLE (VEX_LEN_0F2E_P_0) },
3699     { Bad_Opcode },
3700     { VEX_LEN_TABLE (VEX_LEN_0F2E_P_2) },
3701   },
3702 
3703   /* PREFIX_VEX_0F2F */
3704   {
3705     { VEX_LEN_TABLE (VEX_LEN_0F2F_P_0) },
3706     { Bad_Opcode },
3707     { VEX_LEN_TABLE (VEX_LEN_0F2F_P_2) },
3708   },
3709 
3710   /* PREFIX_VEX_0F51 */
3711   {
3712     { VEX_W_TABLE (VEX_W_0F51_P_0) },
3713     { VEX_LEN_TABLE (VEX_LEN_0F51_P_1) },
3714     { VEX_W_TABLE (VEX_W_0F51_P_2) },
3715     { VEX_LEN_TABLE (VEX_LEN_0F51_P_3) },
3716   },
3717 
3718   /* PREFIX_VEX_0F52 */
3719   {
3720     { VEX_W_TABLE (VEX_W_0F52_P_0) },
3721     { VEX_LEN_TABLE (VEX_LEN_0F52_P_1) },
3722   },
3723 
3724   /* PREFIX_VEX_0F53 */
3725   {
3726     { VEX_W_TABLE (VEX_W_0F53_P_0) },
3727     { VEX_LEN_TABLE (VEX_LEN_0F53_P_1) },
3728   },
3729 
3730   /* PREFIX_VEX_0F58 */
3731   {
3732     { VEX_W_TABLE (VEX_W_0F58_P_0) },
3733     { VEX_LEN_TABLE (VEX_LEN_0F58_P_1) },
3734     { VEX_W_TABLE (VEX_W_0F58_P_2) },
3735     { VEX_LEN_TABLE (VEX_LEN_0F58_P_3) },
3736   },
3737 
3738   /* PREFIX_VEX_0F59 */
3739   {
3740     { VEX_W_TABLE (VEX_W_0F59_P_0) },
3741     { VEX_LEN_TABLE (VEX_LEN_0F59_P_1) },
3742     { VEX_W_TABLE (VEX_W_0F59_P_2) },
3743     { VEX_LEN_TABLE (VEX_LEN_0F59_P_3) },
3744   },
3745 
3746   /* PREFIX_VEX_0F5A */
3747   {
3748     { VEX_W_TABLE (VEX_W_0F5A_P_0) },
3749     { VEX_LEN_TABLE (VEX_LEN_0F5A_P_1) },
3750     { "vcvtpd2ps%XY", { XMM, EXx } },
3751     { VEX_LEN_TABLE (VEX_LEN_0F5A_P_3) },
3752   },
3753 
3754   /* PREFIX_VEX_0F5B */
3755   {
3756     { VEX_W_TABLE (VEX_W_0F5B_P_0) },
3757     { VEX_W_TABLE (VEX_W_0F5B_P_1) },
3758     { VEX_W_TABLE (VEX_W_0F5B_P_2) },
3759   },
3760 
3761   /* PREFIX_VEX_0F5C */
3762   {
3763     { VEX_W_TABLE (VEX_W_0F5C_P_0) },
3764     { VEX_LEN_TABLE (VEX_LEN_0F5C_P_1) },
3765     { VEX_W_TABLE (VEX_W_0F5C_P_2) },
3766     { VEX_LEN_TABLE (VEX_LEN_0F5C_P_3) },
3767   },
3768 
3769   /* PREFIX_VEX_0F5D */
3770   {
3771     { VEX_W_TABLE (VEX_W_0F5D_P_0) },
3772     { VEX_LEN_TABLE (VEX_LEN_0F5D_P_1) },
3773     { VEX_W_TABLE (VEX_W_0F5D_P_2) },
3774     { VEX_LEN_TABLE (VEX_LEN_0F5D_P_3) },
3775   },
3776 
3777   /* PREFIX_VEX_0F5E */
3778   {
3779     { VEX_W_TABLE (VEX_W_0F5E_P_0) },
3780     { VEX_LEN_TABLE (VEX_LEN_0F5E_P_1) },
3781     { VEX_W_TABLE (VEX_W_0F5E_P_2) },
3782     { VEX_LEN_TABLE (VEX_LEN_0F5E_P_3) },
3783   },
3784 
3785   /* PREFIX_VEX_0F5F */
3786   {
3787     { VEX_W_TABLE (VEX_W_0F5F_P_0) },
3788     { VEX_LEN_TABLE (VEX_LEN_0F5F_P_1) },
3789     { VEX_W_TABLE (VEX_W_0F5F_P_2) },
3790     { VEX_LEN_TABLE (VEX_LEN_0F5F_P_3) },
3791   },
3792 
3793   /* PREFIX_VEX_0F60 */
3794   {
3795     { Bad_Opcode },
3796     { Bad_Opcode },
3797     { VEX_LEN_TABLE (VEX_LEN_0F60_P_2) },
3798   },
3799 
3800   /* PREFIX_VEX_0F61 */
3801   {
3802     { Bad_Opcode },
3803     { Bad_Opcode },
3804     { VEX_LEN_TABLE (VEX_LEN_0F61_P_2) },
3805   },
3806 
3807   /* PREFIX_VEX_0F62 */
3808   {
3809     { Bad_Opcode },
3810     { Bad_Opcode },
3811     { VEX_LEN_TABLE (VEX_LEN_0F62_P_2) },
3812   },
3813 
3814   /* PREFIX_VEX_0F63 */
3815   {
3816     { Bad_Opcode },
3817     { Bad_Opcode },
3818     { VEX_LEN_TABLE (VEX_LEN_0F63_P_2) },
3819   },
3820 
3821   /* PREFIX_VEX_0F64 */
3822   {
3823     { Bad_Opcode },
3824     { Bad_Opcode },
3825     { VEX_LEN_TABLE (VEX_LEN_0F64_P_2) },
3826   },
3827 
3828   /* PREFIX_VEX_0F65 */
3829   {
3830     { Bad_Opcode },
3831     { Bad_Opcode },
3832     { VEX_LEN_TABLE (VEX_LEN_0F65_P_2) },
3833   },
3834 
3835   /* PREFIX_VEX_0F66 */
3836   {
3837     { Bad_Opcode },
3838     { Bad_Opcode },
3839     { VEX_LEN_TABLE (VEX_LEN_0F66_P_2) },
3840   },
3841 
3842   /* PREFIX_VEX_0F67 */
3843   {
3844     { Bad_Opcode },
3845     { Bad_Opcode },
3846     { VEX_LEN_TABLE (VEX_LEN_0F67_P_2) },
3847   },
3848 
3849   /* PREFIX_VEX_0F68 */
3850   {
3851     { Bad_Opcode },
3852     { Bad_Opcode },
3853     { VEX_LEN_TABLE (VEX_LEN_0F68_P_2) },
3854   },
3855 
3856   /* PREFIX_VEX_0F69 */
3857   {
3858     { Bad_Opcode },
3859     { Bad_Opcode },
3860     { VEX_LEN_TABLE (VEX_LEN_0F69_P_2) },
3861   },
3862 
3863   /* PREFIX_VEX_0F6A */
3864   {
3865     { Bad_Opcode },
3866     { Bad_Opcode },
3867     { VEX_LEN_TABLE (VEX_LEN_0F6A_P_2) },
3868   },
3869 
3870   /* PREFIX_VEX_0F6B */
3871   {
3872     { Bad_Opcode },
3873     { Bad_Opcode },
3874     { VEX_LEN_TABLE (VEX_LEN_0F6B_P_2) },
3875   },
3876 
3877   /* PREFIX_VEX_0F6C */
3878   {
3879     { Bad_Opcode },
3880     { Bad_Opcode },
3881     { VEX_LEN_TABLE (VEX_LEN_0F6C_P_2) },
3882   },
3883 
3884   /* PREFIX_VEX_0F6D */
3885   {
3886     { Bad_Opcode },
3887     { Bad_Opcode },
3888     { VEX_LEN_TABLE (VEX_LEN_0F6D_P_2) },
3889   },
3890 
3891   /* PREFIX_VEX_0F6E */
3892   {
3893     { Bad_Opcode },
3894     { Bad_Opcode },
3895     { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) },
3896   },
3897 
3898   /* PREFIX_VEX_0F6F */
3899   {
3900     { Bad_Opcode },
3901     { VEX_W_TABLE (VEX_W_0F6F_P_1) },
3902     { VEX_W_TABLE (VEX_W_0F6F_P_2) },
3903   },
3904 
3905   /* PREFIX_VEX_0F70 */
3906   {
3907     { Bad_Opcode },
3908     { VEX_LEN_TABLE (VEX_LEN_0F70_P_1) },
3909     { VEX_LEN_TABLE (VEX_LEN_0F70_P_2) },
3910     { VEX_LEN_TABLE (VEX_LEN_0F70_P_3) },
3911   },
3912 
3913   /* PREFIX_VEX_0F71_REG_2 */
3914   {
3915     { Bad_Opcode },
3916     { Bad_Opcode },
3917     { VEX_LEN_TABLE (VEX_LEN_0F71_R_2_P_2) },
3918   },
3919 
3920   /* PREFIX_VEX_0F71_REG_4 */
3921   {
3922     { Bad_Opcode },
3923     { Bad_Opcode },
3924     { VEX_LEN_TABLE (VEX_LEN_0F71_R_4_P_2) },
3925   },
3926 
3927   /* PREFIX_VEX_0F71_REG_6 */
3928   {
3929     { Bad_Opcode },
3930     { Bad_Opcode },
3931     { VEX_LEN_TABLE (VEX_LEN_0F71_R_6_P_2) },
3932   },
3933 
3934   /* PREFIX_VEX_0F72_REG_2 */
3935   {
3936     { Bad_Opcode },
3937     { Bad_Opcode },
3938     { VEX_LEN_TABLE (VEX_LEN_0F72_R_2_P_2) },
3939   },
3940 
3941   /* PREFIX_VEX_0F72_REG_4 */
3942   {
3943     { Bad_Opcode },
3944     { Bad_Opcode },
3945     { VEX_LEN_TABLE (VEX_LEN_0F72_R_4_P_2) },
3946   },
3947 
3948   /* PREFIX_VEX_0F72_REG_6 */
3949   {
3950     { Bad_Opcode },
3951     { Bad_Opcode },
3952     { VEX_LEN_TABLE (VEX_LEN_0F72_R_6_P_2) },
3953   },
3954 
3955   /* PREFIX_VEX_0F73_REG_2 */
3956   {
3957     { Bad_Opcode },
3958     { Bad_Opcode },
3959     { VEX_LEN_TABLE (VEX_LEN_0F73_R_2_P_2) },
3960   },
3961 
3962   /* PREFIX_VEX_0F73_REG_3 */
3963   {
3964     { Bad_Opcode },
3965     { Bad_Opcode },
3966     { VEX_LEN_TABLE (VEX_LEN_0F73_R_3_P_2) },
3967   },
3968 
3969   /* PREFIX_VEX_0F73_REG_6 */
3970   {
3971     { Bad_Opcode },
3972     { Bad_Opcode },
3973     { VEX_LEN_TABLE (VEX_LEN_0F73_R_6_P_2) },
3974   },
3975 
3976   /* PREFIX_VEX_0F73_REG_7 */
3977   {
3978     { Bad_Opcode },
3979     { Bad_Opcode },
3980     { VEX_LEN_TABLE (VEX_LEN_0F73_R_7_P_2) },
3981   },
3982 
3983   /* PREFIX_VEX_0F74 */
3984   {
3985     { Bad_Opcode },
3986     { Bad_Opcode },
3987     { VEX_LEN_TABLE (VEX_LEN_0F74_P_2) },
3988   },
3989 
3990   /* PREFIX_VEX_0F75 */
3991   {
3992     { Bad_Opcode },
3993     { Bad_Opcode },
3994     { VEX_LEN_TABLE (VEX_LEN_0F75_P_2) },
3995   },
3996 
3997   /* PREFIX_VEX_0F76 */
3998   {
3999     { Bad_Opcode },
4000     { Bad_Opcode },
4001     { VEX_LEN_TABLE (VEX_LEN_0F76_P_2) },
4002   },
4003 
4004   /* PREFIX_VEX_0F77 */
4005   {
4006     { VEX_W_TABLE (VEX_W_0F77_P_0) },
4007   },
4008 
4009   /* PREFIX_VEX_0F7C */
4010   {
4011     { Bad_Opcode },
4012     { Bad_Opcode },
4013     { VEX_W_TABLE (VEX_W_0F7C_P_2) },
4014     { VEX_W_TABLE (VEX_W_0F7C_P_3) },
4015   },
4016 
4017   /* PREFIX_VEX_0F7D */
4018   {
4019     { Bad_Opcode },
4020     { Bad_Opcode },
4021     { VEX_W_TABLE (VEX_W_0F7D_P_2) },
4022     { VEX_W_TABLE (VEX_W_0F7D_P_3) },
4023   },
4024 
4025   /* PREFIX_VEX_0F7E */
4026   {
4027     { Bad_Opcode },
4028     { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) },
4029     { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
4030   },
4031 
4032   /* PREFIX_VEX_0F7F */
4033   {
4034     { Bad_Opcode },
4035     { VEX_W_TABLE (VEX_W_0F7F_P_1) },
4036     { VEX_W_TABLE (VEX_W_0F7F_P_2) },
4037   },
4038 
4039   /* PREFIX_VEX_0FC2 */
4040   {
4041     { VEX_W_TABLE (VEX_W_0FC2_P_0) },
4042     { VEX_LEN_TABLE (VEX_LEN_0FC2_P_1) },
4043     { VEX_W_TABLE (VEX_W_0FC2_P_2) },
4044     { VEX_LEN_TABLE (VEX_LEN_0FC2_P_3) },
4045   },
4046 
4047   /* PREFIX_VEX_0FC4 */
4048   {
4049     { Bad_Opcode },
4050     { Bad_Opcode },
4051     { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) },
4052   },
4053 
4054   /* PREFIX_VEX_0FC5 */
4055   {
4056     { Bad_Opcode },
4057     { Bad_Opcode },
4058     { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) },
4059   },
4060 
4061   /* PREFIX_VEX_0FD0 */
4062   {
4063     { Bad_Opcode },
4064     { Bad_Opcode },
4065     { VEX_W_TABLE (VEX_W_0FD0_P_2) },
4066     { VEX_W_TABLE (VEX_W_0FD0_P_3) },
4067   },
4068 
4069   /* PREFIX_VEX_0FD1 */
4070   {
4071     { Bad_Opcode },
4072     { Bad_Opcode },
4073     { VEX_LEN_TABLE (VEX_LEN_0FD1_P_2) },
4074   },
4075 
4076   /* PREFIX_VEX_0FD2 */
4077   {
4078     { Bad_Opcode },
4079     { Bad_Opcode },
4080     { VEX_LEN_TABLE (VEX_LEN_0FD2_P_2) },
4081   },
4082 
4083   /* PREFIX_VEX_0FD3 */
4084   {
4085     { Bad_Opcode },
4086     { Bad_Opcode },
4087     { VEX_LEN_TABLE (VEX_LEN_0FD3_P_2) },
4088   },
4089 
4090   /* PREFIX_VEX_0FD4 */
4091   {
4092     { Bad_Opcode },
4093     { Bad_Opcode },
4094     { VEX_LEN_TABLE (VEX_LEN_0FD4_P_2) },
4095   },
4096 
4097   /* PREFIX_VEX_0FD5 */
4098   {
4099     { Bad_Opcode },
4100     { Bad_Opcode },
4101     { VEX_LEN_TABLE (VEX_LEN_0FD5_P_2) },
4102   },
4103 
4104   /* PREFIX_VEX_0FD6 */
4105   {
4106     { Bad_Opcode },
4107     { Bad_Opcode },
4108     { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) },
4109   },
4110 
4111   /* PREFIX_VEX_0FD7 */
4112   {
4113     { Bad_Opcode },
4114     { Bad_Opcode },
4115     { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) },
4116   },
4117 
4118   /* PREFIX_VEX_0FD8 */
4119   {
4120     { Bad_Opcode },
4121     { Bad_Opcode },
4122     { VEX_LEN_TABLE (VEX_LEN_0FD8_P_2) },
4123   },
4124 
4125   /* PREFIX_VEX_0FD9 */
4126   {
4127     { Bad_Opcode },
4128     { Bad_Opcode },
4129     { VEX_LEN_TABLE (VEX_LEN_0FD9_P_2) },
4130   },
4131 
4132   /* PREFIX_VEX_0FDA */
4133   {
4134     { Bad_Opcode },
4135     { Bad_Opcode },
4136     { VEX_LEN_TABLE (VEX_LEN_0FDA_P_2) },
4137   },
4138 
4139   /* PREFIX_VEX_0FDB */
4140   {
4141     { Bad_Opcode },
4142     { Bad_Opcode },
4143     { VEX_LEN_TABLE (VEX_LEN_0FDB_P_2) },
4144   },
4145 
4146   /* PREFIX_VEX_0FDC */
4147   {
4148     { Bad_Opcode },
4149     { Bad_Opcode },
4150     { VEX_LEN_TABLE (VEX_LEN_0FDC_P_2) },
4151   },
4152 
4153   /* PREFIX_VEX_0FDD */
4154   {
4155     { Bad_Opcode },
4156     { Bad_Opcode },
4157     { VEX_LEN_TABLE (VEX_LEN_0FDD_P_2) },
4158   },
4159 
4160   /* PREFIX_VEX_0FDE */
4161   {
4162     { Bad_Opcode },
4163     { Bad_Opcode },
4164     { VEX_LEN_TABLE (VEX_LEN_0FDE_P_2) },
4165   },
4166 
4167   /* PREFIX_VEX_0FDF */
4168   {
4169     { Bad_Opcode },
4170     { Bad_Opcode },
4171     { VEX_LEN_TABLE (VEX_LEN_0FDF_P_2) },
4172   },
4173 
4174   /* PREFIX_VEX_0FE0 */
4175   {
4176     { Bad_Opcode },
4177     { Bad_Opcode },
4178     { VEX_LEN_TABLE (VEX_LEN_0FE0_P_2) },
4179   },
4180 
4181   /* PREFIX_VEX_0FE1 */
4182   {
4183     { Bad_Opcode },
4184     { Bad_Opcode },
4185     { VEX_LEN_TABLE (VEX_LEN_0FE1_P_2) },
4186   },
4187 
4188   /* PREFIX_VEX_0FE2 */
4189   {
4190     { Bad_Opcode },
4191     { Bad_Opcode },
4192     { VEX_LEN_TABLE (VEX_LEN_0FE2_P_2) },
4193   },
4194 
4195   /* PREFIX_VEX_0FE3 */
4196   {
4197     { Bad_Opcode },
4198     { Bad_Opcode },
4199     { VEX_LEN_TABLE (VEX_LEN_0FE3_P_2) },
4200   },
4201 
4202   /* PREFIX_VEX_0FE4 */
4203   {
4204     { Bad_Opcode },
4205     { Bad_Opcode },
4206     { VEX_LEN_TABLE (VEX_LEN_0FE4_P_2) },
4207   },
4208 
4209   /* PREFIX_VEX_0FE5 */
4210   {
4211     { Bad_Opcode },
4212     { Bad_Opcode },
4213     { VEX_LEN_TABLE (VEX_LEN_0FE5_P_2) },
4214   },
4215 
4216   /* PREFIX_VEX_0FE6 */
4217   {
4218     { Bad_Opcode },
4219     { VEX_W_TABLE (VEX_W_0FE6_P_1) },
4220     { VEX_W_TABLE (VEX_W_0FE6_P_2) },
4221     { VEX_W_TABLE (VEX_W_0FE6_P_3) },
4222   },
4223 
4224   /* PREFIX_VEX_0FE7 */
4225   {
4226     { Bad_Opcode },
4227     { Bad_Opcode },
4228     { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) },
4229   },
4230 
4231   /* PREFIX_VEX_0FE8 */
4232   {
4233     { Bad_Opcode },
4234     { Bad_Opcode },
4235     { VEX_LEN_TABLE (VEX_LEN_0FE8_P_2) },
4236   },
4237 
4238   /* PREFIX_VEX_0FE9 */
4239   {
4240     { Bad_Opcode },
4241     { Bad_Opcode },
4242     { VEX_LEN_TABLE (VEX_LEN_0FE9_P_2) },
4243   },
4244 
4245   /* PREFIX_VEX_0FEA */
4246   {
4247     { Bad_Opcode },
4248     { Bad_Opcode },
4249     { VEX_LEN_TABLE (VEX_LEN_0FEA_P_2) },
4250   },
4251 
4252   /* PREFIX_VEX_0FEB */
4253   {
4254     { Bad_Opcode },
4255     { Bad_Opcode },
4256     { VEX_LEN_TABLE (VEX_LEN_0FEB_P_2) },
4257   },
4258 
4259   /* PREFIX_VEX_0FEC */
4260   {
4261     { Bad_Opcode },
4262     { Bad_Opcode },
4263     { VEX_LEN_TABLE (VEX_LEN_0FEC_P_2) },
4264   },
4265 
4266   /* PREFIX_VEX_0FED */
4267   {
4268     { Bad_Opcode },
4269     { Bad_Opcode },
4270     { VEX_LEN_TABLE (VEX_LEN_0FED_P_2) },
4271   },
4272 
4273   /* PREFIX_VEX_0FEE */
4274   {
4275     { Bad_Opcode },
4276     { Bad_Opcode },
4277     { VEX_LEN_TABLE (VEX_LEN_0FEE_P_2) },
4278   },
4279 
4280   /* PREFIX_VEX_0FEF */
4281   {
4282     { Bad_Opcode },
4283     { Bad_Opcode },
4284     { VEX_LEN_TABLE (VEX_LEN_0FEF_P_2) },
4285   },
4286 
4287   /* PREFIX_VEX_0FF0 */
4288   {
4289     { Bad_Opcode },
4290     { Bad_Opcode },
4291     { Bad_Opcode },
4292     { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) },
4293   },
4294 
4295   /* PREFIX_VEX_0FF1 */
4296   {
4297     { Bad_Opcode },
4298     { Bad_Opcode },
4299     { VEX_LEN_TABLE (VEX_LEN_0FF1_P_2) },
4300   },
4301 
4302   /* PREFIX_VEX_0FF2 */
4303   {
4304     { Bad_Opcode },
4305     { Bad_Opcode },
4306     { VEX_LEN_TABLE (VEX_LEN_0FF2_P_2) },
4307   },
4308 
4309   /* PREFIX_VEX_0FF3 */
4310   {
4311     { Bad_Opcode },
4312     { Bad_Opcode },
4313     { VEX_LEN_TABLE (VEX_LEN_0FF3_P_2) },
4314   },
4315 
4316   /* PREFIX_VEX_0FF4 */
4317   {
4318     { Bad_Opcode },
4319     { Bad_Opcode },
4320     { VEX_LEN_TABLE (VEX_LEN_0FF4_P_2) },
4321   },
4322 
4323   /* PREFIX_VEX_0FF5 */
4324   {
4325     { Bad_Opcode },
4326     { Bad_Opcode },
4327     { VEX_LEN_TABLE (VEX_LEN_0FF5_P_2) },
4328   },
4329 
4330   /* PREFIX_VEX_0FF6 */
4331   {
4332     { Bad_Opcode },
4333     { Bad_Opcode },
4334     { VEX_LEN_TABLE (VEX_LEN_0FF6_P_2) },
4335   },
4336 
4337   /* PREFIX_VEX_0FF7 */
4338   {
4339     { Bad_Opcode },
4340     { Bad_Opcode },
4341     { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) },
4342   },
4343 
4344   /* PREFIX_VEX_0FF8 */
4345   {
4346     { Bad_Opcode },
4347     { Bad_Opcode },
4348     { VEX_LEN_TABLE (VEX_LEN_0FF8_P_2) },
4349   },
4350 
4351   /* PREFIX_VEX_0FF9 */
4352   {
4353     { Bad_Opcode },
4354     { Bad_Opcode },
4355     { VEX_LEN_TABLE (VEX_LEN_0FF9_P_2) },
4356   },
4357 
4358   /* PREFIX_VEX_0FFA */
4359   {
4360     { Bad_Opcode },
4361     { Bad_Opcode },
4362     { VEX_LEN_TABLE (VEX_LEN_0FFA_P_2) },
4363   },
4364 
4365   /* PREFIX_VEX_0FFB */
4366   {
4367     { Bad_Opcode },
4368     { Bad_Opcode },
4369     { VEX_LEN_TABLE (VEX_LEN_0FFB_P_2) },
4370   },
4371 
4372   /* PREFIX_VEX_0FFC */
4373   {
4374     { Bad_Opcode },
4375     { Bad_Opcode },
4376     { VEX_LEN_TABLE (VEX_LEN_0FFC_P_2) },
4377   },
4378 
4379   /* PREFIX_VEX_0FFD */
4380   {
4381     { Bad_Opcode },
4382     { Bad_Opcode },
4383     { VEX_LEN_TABLE (VEX_LEN_0FFD_P_2) },
4384   },
4385 
4386   /* PREFIX_VEX_0FFE */
4387   {
4388     { Bad_Opcode },
4389     { Bad_Opcode },
4390     { VEX_LEN_TABLE (VEX_LEN_0FFE_P_2) },
4391   },
4392 
4393   /* PREFIX_VEX_0F3800 */
4394   {
4395     { Bad_Opcode },
4396     { Bad_Opcode },
4397     { VEX_LEN_TABLE (VEX_LEN_0F3800_P_2) },
4398   },
4399 
4400   /* PREFIX_VEX_0F3801 */
4401   {
4402     { Bad_Opcode },
4403     { Bad_Opcode },
4404     { VEX_LEN_TABLE (VEX_LEN_0F3801_P_2) },
4405   },
4406 
4407   /* PREFIX_VEX_0F3802 */
4408   {
4409     { Bad_Opcode },
4410     { Bad_Opcode },
4411     { VEX_LEN_TABLE (VEX_LEN_0F3802_P_2) },
4412   },
4413 
4414   /* PREFIX_VEX_0F3803 */
4415   {
4416     { Bad_Opcode },
4417     { Bad_Opcode },
4418     { VEX_LEN_TABLE (VEX_LEN_0F3803_P_2) },
4419   },
4420 
4421   /* PREFIX_VEX_0F3804 */
4422   {
4423     { Bad_Opcode },
4424     { Bad_Opcode },
4425     { VEX_LEN_TABLE (VEX_LEN_0F3804_P_2) },
4426   },
4427 
4428   /* PREFIX_VEX_0F3805 */
4429   {
4430     { Bad_Opcode },
4431     { Bad_Opcode },
4432     { VEX_LEN_TABLE (VEX_LEN_0F3805_P_2) },
4433   },
4434 
4435   /* PREFIX_VEX_0F3806 */
4436   {
4437     { Bad_Opcode },
4438     { Bad_Opcode },
4439     { VEX_LEN_TABLE (VEX_LEN_0F3806_P_2) },
4440   },
4441 
4442   /* PREFIX_VEX_0F3807 */
4443   {
4444     { Bad_Opcode },
4445     { Bad_Opcode },
4446     { VEX_LEN_TABLE (VEX_LEN_0F3807_P_2) },
4447   },
4448 
4449   /* PREFIX_VEX_0F3808 */
4450   {
4451     { Bad_Opcode },
4452     { Bad_Opcode },
4453     { VEX_LEN_TABLE (VEX_LEN_0F3808_P_2) },
4454   },
4455 
4456   /* PREFIX_VEX_0F3809 */
4457   {
4458     { Bad_Opcode },
4459     { Bad_Opcode },
4460     { VEX_LEN_TABLE (VEX_LEN_0F3809_P_2) },
4461   },
4462 
4463   /* PREFIX_VEX_0F380A */
4464   {
4465     { Bad_Opcode },
4466     { Bad_Opcode },
4467     { VEX_LEN_TABLE (VEX_LEN_0F380A_P_2) },
4468   },
4469 
4470   /* PREFIX_VEX_0F380B */
4471   {
4472     { Bad_Opcode },
4473     { Bad_Opcode },
4474     { VEX_LEN_TABLE (VEX_LEN_0F380B_P_2) },
4475   },
4476 
4477   /* PREFIX_VEX_0F380C */
4478   {
4479     { Bad_Opcode },
4480     { Bad_Opcode },
4481     { VEX_W_TABLE (VEX_W_0F380C_P_2) },
4482   },
4483 
4484   /* PREFIX_VEX_0F380D */
4485   {
4486     { Bad_Opcode },
4487     { Bad_Opcode },
4488     { VEX_W_TABLE (VEX_W_0F380D_P_2) },
4489   },
4490 
4491   /* PREFIX_VEX_0F380E */
4492   {
4493     { Bad_Opcode },
4494     { Bad_Opcode },
4495     { VEX_W_TABLE (VEX_W_0F380E_P_2) },
4496   },
4497 
4498   /* PREFIX_VEX_0F380F */
4499   {
4500     { Bad_Opcode },
4501     { Bad_Opcode },
4502     { VEX_W_TABLE (VEX_W_0F380F_P_2) },
4503   },
4504 
4505   /* PREFIX_VEX_0F3813 */
4506   {
4507     { Bad_Opcode },
4508     { Bad_Opcode },
4509     { "vcvtph2ps", { XM, EXxmmq } },
4510   },
4511 
4512   /* PREFIX_VEX_0F3817 */
4513   {
4514     { Bad_Opcode },
4515     { Bad_Opcode },
4516     { VEX_W_TABLE (VEX_W_0F3817_P_2) },
4517   },
4518 
4519   /* PREFIX_VEX_0F3818 */
4520   {
4521     { Bad_Opcode },
4522     { Bad_Opcode },
4523     { MOD_TABLE (MOD_VEX_0F3818_PREFIX_2) },
4524   },
4525 
4526   /* PREFIX_VEX_0F3819 */
4527   {
4528     { Bad_Opcode },
4529     { Bad_Opcode },
4530     { MOD_TABLE (MOD_VEX_0F3819_PREFIX_2) },
4531   },
4532 
4533   /* PREFIX_VEX_0F381A */
4534   {
4535     { Bad_Opcode },
4536     { Bad_Opcode },
4537     { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) },
4538   },
4539 
4540   /* PREFIX_VEX_0F381C */
4541   {
4542     { Bad_Opcode },
4543     { Bad_Opcode },
4544     { VEX_LEN_TABLE (VEX_LEN_0F381C_P_2) },
4545   },
4546 
4547   /* PREFIX_VEX_0F381D */
4548   {
4549     { Bad_Opcode },
4550     { Bad_Opcode },
4551     { VEX_LEN_TABLE (VEX_LEN_0F381D_P_2) },
4552   },
4553 
4554   /* PREFIX_VEX_0F381E */
4555   {
4556     { Bad_Opcode },
4557     { Bad_Opcode },
4558     { VEX_LEN_TABLE (VEX_LEN_0F381E_P_2) },
4559   },
4560 
4561   /* PREFIX_VEX_0F3820 */
4562   {
4563     { Bad_Opcode },
4564     { Bad_Opcode },
4565     { VEX_LEN_TABLE (VEX_LEN_0F3820_P_2) },
4566   },
4567 
4568   /* PREFIX_VEX_0F3821 */
4569   {
4570     { Bad_Opcode },
4571     { Bad_Opcode },
4572     { VEX_LEN_TABLE (VEX_LEN_0F3821_P_2) },
4573   },
4574 
4575   /* PREFIX_VEX_0F3822 */
4576   {
4577     { Bad_Opcode },
4578     { Bad_Opcode },
4579     { VEX_LEN_TABLE (VEX_LEN_0F3822_P_2) },
4580   },
4581 
4582   /* PREFIX_VEX_0F3823 */
4583   {
4584     { Bad_Opcode },
4585     { Bad_Opcode },
4586     { VEX_LEN_TABLE (VEX_LEN_0F3823_P_2) },
4587   },
4588 
4589   /* PREFIX_VEX_0F3824 */
4590   {
4591     { Bad_Opcode },
4592     { Bad_Opcode },
4593     { VEX_LEN_TABLE (VEX_LEN_0F3824_P_2) },
4594   },
4595 
4596   /* PREFIX_VEX_0F3825 */
4597   {
4598     { Bad_Opcode },
4599     { Bad_Opcode },
4600     { VEX_LEN_TABLE (VEX_LEN_0F3825_P_2) },
4601   },
4602 
4603   /* PREFIX_VEX_0F3828 */
4604   {
4605     { Bad_Opcode },
4606     { Bad_Opcode },
4607     { VEX_LEN_TABLE (VEX_LEN_0F3828_P_2) },
4608   },
4609 
4610   /* PREFIX_VEX_0F3829 */
4611   {
4612     { Bad_Opcode },
4613     { Bad_Opcode },
4614     { VEX_LEN_TABLE (VEX_LEN_0F3829_P_2) },
4615   },
4616 
4617   /* PREFIX_VEX_0F382A */
4618   {
4619     { Bad_Opcode },
4620     { Bad_Opcode },
4621     { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) },
4622   },
4623 
4624   /* PREFIX_VEX_0F382B */
4625   {
4626     { Bad_Opcode },
4627     { Bad_Opcode },
4628     { VEX_LEN_TABLE (VEX_LEN_0F382B_P_2) },
4629   },
4630 
4631   /* PREFIX_VEX_0F382C */
4632   {
4633     { Bad_Opcode },
4634     { Bad_Opcode },
4635      { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) },
4636   },
4637 
4638   /* PREFIX_VEX_0F382D */
4639   {
4640     { Bad_Opcode },
4641     { Bad_Opcode },
4642      { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) },
4643   },
4644 
4645   /* PREFIX_VEX_0F382E */
4646   {
4647     { Bad_Opcode },
4648     { Bad_Opcode },
4649      { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) },
4650   },
4651 
4652   /* PREFIX_VEX_0F382F */
4653   {
4654     { Bad_Opcode },
4655     { Bad_Opcode },
4656      { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) },
4657   },
4658 
4659   /* PREFIX_VEX_0F3830 */
4660   {
4661     { Bad_Opcode },
4662     { Bad_Opcode },
4663     { VEX_LEN_TABLE (VEX_LEN_0F3830_P_2) },
4664   },
4665 
4666   /* PREFIX_VEX_0F3831 */
4667   {
4668     { Bad_Opcode },
4669     { Bad_Opcode },
4670     { VEX_LEN_TABLE (VEX_LEN_0F3831_P_2) },
4671   },
4672 
4673   /* PREFIX_VEX_0F3832 */
4674   {
4675     { Bad_Opcode },
4676     { Bad_Opcode },
4677     { VEX_LEN_TABLE (VEX_LEN_0F3832_P_2) },
4678   },
4679 
4680   /* PREFIX_VEX_0F3833 */
4681   {
4682     { Bad_Opcode },
4683     { Bad_Opcode },
4684     { VEX_LEN_TABLE (VEX_LEN_0F3833_P_2) },
4685   },
4686 
4687   /* PREFIX_VEX_0F3834 */
4688   {
4689     { Bad_Opcode },
4690     { Bad_Opcode },
4691     { VEX_LEN_TABLE (VEX_LEN_0F3834_P_2) },
4692   },
4693 
4694   /* PREFIX_VEX_0F3835 */
4695   {
4696     { Bad_Opcode },
4697     { Bad_Opcode },
4698     { VEX_LEN_TABLE (VEX_LEN_0F3835_P_2) },
4699   },
4700 
4701   /* PREFIX_VEX_0F3837 */
4702   {
4703     { Bad_Opcode },
4704     { Bad_Opcode },
4705     { VEX_LEN_TABLE (VEX_LEN_0F3837_P_2) },
4706   },
4707 
4708   /* PREFIX_VEX_0F3838 */
4709   {
4710     { Bad_Opcode },
4711     { Bad_Opcode },
4712     { VEX_LEN_TABLE (VEX_LEN_0F3838_P_2) },
4713   },
4714 
4715   /* PREFIX_VEX_0F3839 */
4716   {
4717     { Bad_Opcode },
4718     { Bad_Opcode },
4719     { VEX_LEN_TABLE (VEX_LEN_0F3839_P_2) },
4720   },
4721 
4722   /* PREFIX_VEX_0F383A */
4723   {
4724     { Bad_Opcode },
4725     { Bad_Opcode },
4726     { VEX_LEN_TABLE (VEX_LEN_0F383A_P_2) },
4727   },
4728 
4729   /* PREFIX_VEX_0F383B */
4730   {
4731     { Bad_Opcode },
4732     { Bad_Opcode },
4733     { VEX_LEN_TABLE (VEX_LEN_0F383B_P_2) },
4734   },
4735 
4736   /* PREFIX_VEX_0F383C */
4737   {
4738     { Bad_Opcode },
4739     { Bad_Opcode },
4740     { VEX_LEN_TABLE (VEX_LEN_0F383C_P_2) },
4741   },
4742 
4743   /* PREFIX_VEX_0F383D */
4744   {
4745     { Bad_Opcode },
4746     { Bad_Opcode },
4747     { VEX_LEN_TABLE (VEX_LEN_0F383D_P_2) },
4748   },
4749 
4750   /* PREFIX_VEX_0F383E */
4751   {
4752     { Bad_Opcode },
4753     { Bad_Opcode },
4754     { VEX_LEN_TABLE (VEX_LEN_0F383E_P_2) },
4755   },
4756 
4757   /* PREFIX_VEX_0F383F */
4758   {
4759     { Bad_Opcode },
4760     { Bad_Opcode },
4761     { VEX_LEN_TABLE (VEX_LEN_0F383F_P_2) },
4762   },
4763 
4764   /* PREFIX_VEX_0F3840 */
4765   {
4766     { Bad_Opcode },
4767     { Bad_Opcode },
4768     { VEX_LEN_TABLE (VEX_LEN_0F3840_P_2) },
4769   },
4770 
4771   /* PREFIX_VEX_0F3841 */
4772   {
4773     { Bad_Opcode },
4774     { Bad_Opcode },
4775     { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) },
4776   },
4777 
4778   /* PREFIX_VEX_0F3896 */
4779   {
4780     { Bad_Opcode },
4781     { Bad_Opcode },
4782     { "vfmaddsub132p%XW", { XM, Vex, EXx } },
4783   },
4784 
4785   /* PREFIX_VEX_0F3897 */
4786   {
4787     { Bad_Opcode },
4788     { Bad_Opcode },
4789     { "vfmsubadd132p%XW", { XM, Vex, EXx } },
4790   },
4791 
4792   /* PREFIX_VEX_0F3898 */
4793   {
4794     { Bad_Opcode },
4795     { Bad_Opcode },
4796     { "vfmadd132p%XW", { XM, Vex, EXx } },
4797   },
4798 
4799   /* PREFIX_VEX_0F3899 */
4800   {
4801     { Bad_Opcode },
4802     { Bad_Opcode },
4803     { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
4804   },
4805 
4806   /* PREFIX_VEX_0F389A */
4807   {
4808     { Bad_Opcode },
4809     { Bad_Opcode },
4810     { "vfmsub132p%XW", { XM, Vex, EXx } },
4811   },
4812 
4813   /* PREFIX_VEX_0F389B */
4814   {
4815     { Bad_Opcode },
4816     { Bad_Opcode },
4817     { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
4818   },
4819 
4820   /* PREFIX_VEX_0F389C */
4821   {
4822     { Bad_Opcode },
4823     { Bad_Opcode },
4824     { "vfnmadd132p%XW", { XM, Vex, EXx } },
4825   },
4826 
4827   /* PREFIX_VEX_0F389D */
4828   {
4829     { Bad_Opcode },
4830     { Bad_Opcode },
4831     { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
4832   },
4833 
4834   /* PREFIX_VEX_0F389E */
4835   {
4836     { Bad_Opcode },
4837     { Bad_Opcode },
4838     { "vfnmsub132p%XW", { XM, Vex, EXx } },
4839   },
4840 
4841   /* PREFIX_VEX_0F389F */
4842   {
4843     { Bad_Opcode },
4844     { Bad_Opcode },
4845     { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
4846   },
4847 
4848   /* PREFIX_VEX_0F38A6 */
4849   {
4850     { Bad_Opcode },
4851     { Bad_Opcode },
4852     { "vfmaddsub213p%XW", { XM, Vex, EXx } },
4853     { Bad_Opcode },
4854   },
4855 
4856   /* PREFIX_VEX_0F38A7 */
4857   {
4858     { Bad_Opcode },
4859     { Bad_Opcode },
4860     { "vfmsubadd213p%XW", { XM, Vex, EXx } },
4861   },
4862 
4863   /* PREFIX_VEX_0F38A8 */
4864   {
4865     { Bad_Opcode },
4866     { Bad_Opcode },
4867     { "vfmadd213p%XW", { XM, Vex, EXx } },
4868   },
4869 
4870   /* PREFIX_VEX_0F38A9 */
4871   {
4872     { Bad_Opcode },
4873     { Bad_Opcode },
4874     { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
4875   },
4876 
4877   /* PREFIX_VEX_0F38AA */
4878   {
4879     { Bad_Opcode },
4880     { Bad_Opcode },
4881     { "vfmsub213p%XW", { XM, Vex, EXx } },
4882   },
4883 
4884   /* PREFIX_VEX_0F38AB */
4885   {
4886     { Bad_Opcode },
4887     { Bad_Opcode },
4888     { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
4889   },
4890 
4891   /* PREFIX_VEX_0F38AC */
4892   {
4893     { Bad_Opcode },
4894     { Bad_Opcode },
4895     { "vfnmadd213p%XW", { XM, Vex, EXx } },
4896   },
4897 
4898   /* PREFIX_VEX_0F38AD */
4899   {
4900     { Bad_Opcode },
4901     { Bad_Opcode },
4902     { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
4903   },
4904 
4905   /* PREFIX_VEX_0F38AE */
4906   {
4907     { Bad_Opcode },
4908     { Bad_Opcode },
4909     { "vfnmsub213p%XW", { XM, Vex, EXx } },
4910   },
4911 
4912   /* PREFIX_VEX_0F38AF */
4913   {
4914     { Bad_Opcode },
4915     { Bad_Opcode },
4916     { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
4917   },
4918 
4919   /* PREFIX_VEX_0F38B6 */
4920   {
4921     { Bad_Opcode },
4922     { Bad_Opcode },
4923     { "vfmaddsub231p%XW", { XM, Vex, EXx } },
4924   },
4925 
4926   /* PREFIX_VEX_0F38B7 */
4927   {
4928     { Bad_Opcode },
4929     { Bad_Opcode },
4930     { "vfmsubadd231p%XW", { XM, Vex, EXx } },
4931   },
4932 
4933   /* PREFIX_VEX_0F38B8 */
4934   {
4935     { Bad_Opcode },
4936     { Bad_Opcode },
4937     { "vfmadd231p%XW", { XM, Vex, EXx } },
4938   },
4939 
4940   /* PREFIX_VEX_0F38B9 */
4941   {
4942     { Bad_Opcode },
4943     { Bad_Opcode },
4944     { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
4945   },
4946 
4947   /* PREFIX_VEX_0F38BA */
4948   {
4949     { Bad_Opcode },
4950     { Bad_Opcode },
4951     { "vfmsub231p%XW", { XM, Vex, EXx } },
4952   },
4953 
4954   /* PREFIX_VEX_0F38BB */
4955   {
4956     { Bad_Opcode },
4957     { Bad_Opcode },
4958     { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
4959   },
4960 
4961   /* PREFIX_VEX_0F38BC */
4962   {
4963     { Bad_Opcode },
4964     { Bad_Opcode },
4965     { "vfnmadd231p%XW", { XM, Vex, EXx } },
4966   },
4967 
4968   /* PREFIX_VEX_0F38BD */
4969   {
4970     { Bad_Opcode },
4971     { Bad_Opcode },
4972     { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
4973   },
4974 
4975   /* PREFIX_VEX_0F38BE */
4976   {
4977     { Bad_Opcode },
4978     { Bad_Opcode },
4979     { "vfnmsub231p%XW", { XM, Vex, EXx } },
4980   },
4981 
4982   /* PREFIX_VEX_0F38BF */
4983   {
4984     { Bad_Opcode },
4985     { Bad_Opcode },
4986     { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
4987   },
4988 
4989   /* PREFIX_VEX_0F38DB */
4990   {
4991     { Bad_Opcode },
4992     { Bad_Opcode },
4993     { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
4994   },
4995 
4996   /* PREFIX_VEX_0F38DC */
4997   {
4998     { Bad_Opcode },
4999     { Bad_Opcode },
5000     { VEX_LEN_TABLE (VEX_LEN_0F38DC_P_2) },
5001   },
5002 
5003   /* PREFIX_VEX_0F38DD */
5004   {
5005     { Bad_Opcode },
5006     { Bad_Opcode },
5007     { VEX_LEN_TABLE (VEX_LEN_0F38DD_P_2) },
5008   },
5009 
5010   /* PREFIX_VEX_0F38DE */
5011   {
5012     { Bad_Opcode },
5013     { Bad_Opcode },
5014     { VEX_LEN_TABLE (VEX_LEN_0F38DE_P_2) },
5015   },
5016 
5017   /* PREFIX_VEX_0F38DF */
5018   {
5019     { Bad_Opcode },
5020     { Bad_Opcode },
5021     { VEX_LEN_TABLE (VEX_LEN_0F38DF_P_2) },
5022   },
5023 
5024   /* PREFIX_VEX_0F38F2 */
5025   {
5026     { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
5027   },
5028 
5029   /* PREFIX_VEX_0F38F3_REG_1 */
5030   {
5031     { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
5032   },
5033 
5034   /* PREFIX_VEX_0F38F3_REG_2 */
5035   {
5036     { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
5037   },
5038 
5039   /* PREFIX_VEX_0F38F3_REG_3 */
5040   {
5041     { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
5042   },
5043 
5044   /* PREFIX_VEX_0F38F7 */
5045   {
5046     { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
5047   },
5048 
5049   /* PREFIX_VEX_0F3A04 */
5050   {
5051     { Bad_Opcode },
5052     { Bad_Opcode },
5053     { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
5054   },
5055 
5056   /* PREFIX_VEX_0F3A05 */
5057   {
5058     { Bad_Opcode },
5059     { Bad_Opcode },
5060     { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
5061   },
5062 
5063   /* PREFIX_VEX_0F3A06 */
5064   {
5065     { Bad_Opcode },
5066     { Bad_Opcode },
5067     { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
5068   },
5069 
5070   /* PREFIX_VEX_0F3A08 */
5071   {
5072     { Bad_Opcode },
5073     { Bad_Opcode },
5074     { VEX_W_TABLE (VEX_W_0F3A08_P_2) },
5075   },
5076 
5077   /* PREFIX_VEX_0F3A09 */
5078   {
5079     { Bad_Opcode },
5080     { Bad_Opcode },
5081     { VEX_W_TABLE (VEX_W_0F3A09_P_2) },
5082   },
5083 
5084   /* PREFIX_VEX_0F3A0A */
5085   {
5086     { Bad_Opcode },
5087     { Bad_Opcode },
5088     { VEX_LEN_TABLE (VEX_LEN_0F3A0A_P_2) },
5089   },
5090 
5091   /* PREFIX_VEX_0F3A0B */
5092   {
5093     { Bad_Opcode },
5094     { Bad_Opcode },
5095     { VEX_LEN_TABLE (VEX_LEN_0F3A0B_P_2) },
5096   },
5097 
5098   /* PREFIX_VEX_0F3A0C */
5099   {
5100     { Bad_Opcode },
5101     { Bad_Opcode },
5102     { VEX_W_TABLE (VEX_W_0F3A0C_P_2) },
5103   },
5104 
5105   /* PREFIX_VEX_0F3A0D */
5106   {
5107     { Bad_Opcode },
5108     { Bad_Opcode },
5109     { VEX_W_TABLE (VEX_W_0F3A0D_P_2) },
5110   },
5111 
5112   /* PREFIX_VEX_0F3A0E */
5113   {
5114     { Bad_Opcode },
5115     { Bad_Opcode },
5116     { VEX_LEN_TABLE (VEX_LEN_0F3A0E_P_2) },
5117   },
5118 
5119   /* PREFIX_VEX_0F3A0F */
5120   {
5121     { Bad_Opcode },
5122     { Bad_Opcode },
5123     { VEX_LEN_TABLE (VEX_LEN_0F3A0F_P_2) },
5124   },
5125 
5126   /* PREFIX_VEX_0F3A14 */
5127   {
5128     { Bad_Opcode },
5129     { Bad_Opcode },
5130     { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
5131   },
5132 
5133   /* PREFIX_VEX_0F3A15 */
5134   {
5135     { Bad_Opcode },
5136     { Bad_Opcode },
5137     { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
5138   },
5139 
5140   /* PREFIX_VEX_0F3A16 */
5141   {
5142     { Bad_Opcode },
5143     { Bad_Opcode },
5144     { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
5145   },
5146 
5147   /* PREFIX_VEX_0F3A17 */
5148   {
5149     { Bad_Opcode },
5150     { Bad_Opcode },
5151     { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
5152   },
5153 
5154   /* PREFIX_VEX_0F3A18 */
5155   {
5156     { Bad_Opcode },
5157     { Bad_Opcode },
5158     { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
5159   },
5160 
5161   /* PREFIX_VEX_0F3A19 */
5162   {
5163     { Bad_Opcode },
5164     { Bad_Opcode },
5165     { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
5166   },
5167 
5168   /* PREFIX_VEX_0F3A1D */
5169   {
5170     { Bad_Opcode },
5171     { Bad_Opcode },
5172     { "vcvtps2ph", { EXxmmq, XM, Ib } },
5173   },
5174 
5175   /* PREFIX_VEX_0F3A20 */
5176   {
5177     { Bad_Opcode },
5178     { Bad_Opcode },
5179     { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
5180   },
5181 
5182   /* PREFIX_VEX_0F3A21 */
5183   {
5184     { Bad_Opcode },
5185     { Bad_Opcode },
5186     { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
5187   },
5188 
5189   /* PREFIX_VEX_0F3A22 */
5190   {
5191     { Bad_Opcode },
5192     { Bad_Opcode },
5193     { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
5194   },
5195 
5196   /* PREFIX_VEX_0F3A40 */
5197   {
5198     { Bad_Opcode },
5199     { Bad_Opcode },
5200     { VEX_W_TABLE (VEX_W_0F3A40_P_2) },
5201   },
5202 
5203   /* PREFIX_VEX_0F3A41 */
5204   {
5205     { Bad_Opcode },
5206     { Bad_Opcode },
5207     { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
5208   },
5209 
5210   /* PREFIX_VEX_0F3A42 */
5211   {
5212     { Bad_Opcode },
5213     { Bad_Opcode },
5214     { VEX_LEN_TABLE (VEX_LEN_0F3A42_P_2) },
5215   },
5216 
5217   /* PREFIX_VEX_0F3A44 */
5218   {
5219     { Bad_Opcode },
5220     { Bad_Opcode },
5221     { VEX_LEN_TABLE (VEX_LEN_0F3A44_P_2) },
5222   },
5223 
5224   /* PREFIX_VEX_0F3A48 */
5225   {
5226     { Bad_Opcode },
5227     { Bad_Opcode },
5228     { VEX_W_TABLE (VEX_W_0F3A48_P_2) },
5229   },
5230 
5231   /* PREFIX_VEX_0F3A49 */
5232   {
5233     { Bad_Opcode },
5234     { Bad_Opcode },
5235     { VEX_W_TABLE (VEX_W_0F3A49_P_2) },
5236   },
5237 
5238   /* PREFIX_VEX_0F3A4A */
5239   {
5240     { Bad_Opcode },
5241     { Bad_Opcode },
5242     { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
5243   },
5244 
5245   /* PREFIX_VEX_0F3A4B */
5246   {
5247     { Bad_Opcode },
5248     { Bad_Opcode },
5249     { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
5250   },
5251 
5252   /* PREFIX_VEX_0F3A4C */
5253   {
5254     { Bad_Opcode },
5255     { Bad_Opcode },
5256     { VEX_LEN_TABLE (VEX_LEN_0F3A4C_P_2) },
5257   },
5258 
5259   /* PREFIX_VEX_0F3A5C */
5260   {
5261     { Bad_Opcode },
5262     { Bad_Opcode },
5263     { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
5264   },
5265 
5266   /* PREFIX_VEX_0F3A5D */
5267   {
5268     { Bad_Opcode },
5269     { Bad_Opcode },
5270     { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
5271   },
5272 
5273   /* PREFIX_VEX_0F3A5E */
5274   {
5275     { Bad_Opcode },
5276     { Bad_Opcode },
5277     { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
5278   },
5279 
5280   /* PREFIX_VEX_0F3A5F */
5281   {
5282     { Bad_Opcode },
5283     { Bad_Opcode },
5284     { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
5285   },
5286 
5287   /* PREFIX_VEX_0F3A60 */
5288   {
5289     { Bad_Opcode },
5290     { Bad_Opcode },
5291     { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
5292     { Bad_Opcode },
5293   },
5294 
5295   /* PREFIX_VEX_0F3A61 */
5296   {
5297     { Bad_Opcode },
5298     { Bad_Opcode },
5299     { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
5300   },
5301 
5302   /* PREFIX_VEX_0F3A62 */
5303   {
5304     { Bad_Opcode },
5305     { Bad_Opcode },
5306     { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
5307   },
5308 
5309   /* PREFIX_VEX_0F3A63 */
5310   {
5311     { Bad_Opcode },
5312     { Bad_Opcode },
5313     { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
5314   },
5315 
5316   /* PREFIX_VEX_0F3A68 */
5317   {
5318     { Bad_Opcode },
5319     { Bad_Opcode },
5320     { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
5321   },
5322 
5323   /* PREFIX_VEX_0F3A69 */
5324   {
5325     { Bad_Opcode },
5326     { Bad_Opcode },
5327     { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
5328   },
5329 
5330   /* PREFIX_VEX_0F3A6A */
5331   {
5332     { Bad_Opcode },
5333     { Bad_Opcode },
5334     { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) },
5335   },
5336 
5337   /* PREFIX_VEX_0F3A6B */
5338   {
5339     { Bad_Opcode },
5340     { Bad_Opcode },
5341     { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) },
5342   },
5343 
5344   /* PREFIX_VEX_0F3A6C */
5345   {
5346     { Bad_Opcode },
5347     { Bad_Opcode },
5348     { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
5349   },
5350 
5351   /* PREFIX_VEX_0F3A6D */
5352   {
5353     { Bad_Opcode },
5354     { Bad_Opcode },
5355     { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
5356   },
5357 
5358   /* PREFIX_VEX_0F3A6E */
5359   {
5360     { Bad_Opcode },
5361     { Bad_Opcode },
5362     { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) },
5363   },
5364 
5365   /* PREFIX_VEX_0F3A6F */
5366   {
5367     { Bad_Opcode },
5368     { Bad_Opcode },
5369     { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) },
5370   },
5371 
5372   /* PREFIX_VEX_0F3A78 */
5373   {
5374     { Bad_Opcode },
5375     { Bad_Opcode },
5376     { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
5377   },
5378 
5379   /* PREFIX_VEX_0F3A79 */
5380   {
5381     { Bad_Opcode },
5382     { Bad_Opcode },
5383     { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
5384   },
5385 
5386   /* PREFIX_VEX_0F3A7A */
5387   {
5388     { Bad_Opcode },
5389     { Bad_Opcode },
5390     { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) },
5391   },
5392 
5393   /* PREFIX_VEX_0F3A7B */
5394   {
5395     { Bad_Opcode },
5396     { Bad_Opcode },
5397     { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) },
5398   },
5399 
5400   /* PREFIX_VEX_0F3A7C */
5401   {
5402     { Bad_Opcode },
5403     { Bad_Opcode },
5404     { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
5405     { Bad_Opcode },
5406   },
5407 
5408   /* PREFIX_VEX_0F3A7D */
5409   {
5410     { Bad_Opcode },
5411     { Bad_Opcode },
5412     { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
5413   },
5414 
5415   /* PREFIX_VEX_0F3A7E */
5416   {
5417     { Bad_Opcode },
5418     { Bad_Opcode },
5419     { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) },
5420   },
5421 
5422   /* PREFIX_VEX_0F3A7F */
5423   {
5424     { Bad_Opcode },
5425     { Bad_Opcode },
5426     { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) },
5427   },
5428 
5429   /* PREFIX_VEX_0F3ADF */
5430   {
5431     { Bad_Opcode },
5432     { Bad_Opcode },
5433     { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
5434   },
5435 };
5436 
5437 static const struct dis386 x86_64_table[][2] = {
5438   /* X86_64_06 */
5439   {
5440     { "pushP", { es } },
5441   },
5442 
5443   /* X86_64_07 */
5444   {
5445     { "popP", { es } },
5446   },
5447 
5448   /* X86_64_0D */
5449   {
5450     { "pushP", { cs } },
5451   },
5452 
5453   /* X86_64_16 */
5454   {
5455     { "pushP", { ss } },
5456   },
5457 
5458   /* X86_64_17 */
5459   {
5460     { "popP", { ss } },
5461   },
5462 
5463   /* X86_64_1E */
5464   {
5465     { "pushP", { ds } },
5466   },
5467 
5468   /* X86_64_1F */
5469   {
5470     { "popP", { ds } },
5471   },
5472 
5473   /* X86_64_27 */
5474   {
5475     { "daa", { XX } },
5476   },
5477 
5478   /* X86_64_2F */
5479   {
5480     { "das", { XX } },
5481   },
5482 
5483   /* X86_64_37 */
5484   {
5485     { "aaa", { XX } },
5486   },
5487 
5488   /* X86_64_3F */
5489   {
5490     { "aas", { XX } },
5491   },
5492 
5493   /* X86_64_60 */
5494   {
5495     { "pushaP", { XX } },
5496   },
5497 
5498   /* X86_64_61 */
5499   {
5500     { "popaP", { XX } },
5501   },
5502 
5503   /* X86_64_62 */
5504   {
5505     { MOD_TABLE (MOD_62_32BIT) },
5506   },
5507 
5508   /* X86_64_63 */
5509   {
5510     { "arpl", { Ew, Gw } },
5511     { "movs{lq|xd}", { Gv, Ed } },
5512   },
5513 
5514   /* X86_64_6D */
5515   {
5516     { "ins{R|}", { Yzr, indirDX } },
5517     { "ins{G|}", { Yzr, indirDX } },
5518   },
5519 
5520   /* X86_64_6F */
5521   {
5522     { "outs{R|}", { indirDXr, Xz } },
5523     { "outs{G|}", { indirDXr, Xz } },
5524   },
5525 
5526   /* X86_64_9A */
5527   {
5528     { "Jcall{T|}", { Ap } },
5529   },
5530 
5531   /* X86_64_C4 */
5532   {
5533     { MOD_TABLE (MOD_C4_32BIT) },
5534     { VEX_C4_TABLE (VEX_0F) },
5535   },
5536 
5537   /* X86_64_C5 */
5538   {
5539     { MOD_TABLE (MOD_C5_32BIT) },
5540     { VEX_C5_TABLE (VEX_0F) },
5541   },
5542 
5543   /* X86_64_CE */
5544   {
5545     { "into", { XX } },
5546   },
5547 
5548   /* X86_64_D4 */
5549   {
5550     { "aam", { Ib } },
5551   },
5552 
5553   /* X86_64_D5 */
5554   {
5555     { "aad", { Ib } },
5556   },
5557 
5558   /* X86_64_EA */
5559   {
5560     { "Jjmp{T|}", { Ap } },
5561   },
5562 
5563   /* X86_64_0F01_REG_0 */
5564   {
5565     { "sgdt{Q|IQ}", { M } },
5566     { "sgdt", { M } },
5567   },
5568 
5569   /* X86_64_0F01_REG_1 */
5570   {
5571     { "sidt{Q|IQ}", { M } },
5572     { "sidt", { M } },
5573   },
5574 
5575   /* X86_64_0F01_REG_2 */
5576   {
5577     { "lgdt{Q|Q}", { M } },
5578     { "lgdt", { M } },
5579   },
5580 
5581   /* X86_64_0F01_REG_3 */
5582   {
5583     { "lidt{Q|Q}", { M } },
5584     { "lidt", { M } },
5585   },
5586 };
5587 
5588 static const struct dis386 three_byte_table[][256] = {
5589 
5590   /* THREE_BYTE_0F38 */
5591   {
5592     /* 00 */
5593     { "pshufb",		{ MX, EM } },
5594     { "phaddw",		{ MX, EM } },
5595     { "phaddd",		{ MX, EM } },
5596     { "phaddsw",	{ MX, EM } },
5597     { "pmaddubsw",	{ MX, EM } },
5598     { "phsubw",		{ MX, EM } },
5599     { "phsubd",		{ MX, EM } },
5600     { "phsubsw",	{ MX, EM } },
5601     /* 08 */
5602     { "psignb",		{ MX, EM } },
5603     { "psignw",		{ MX, EM } },
5604     { "psignd",		{ MX, EM } },
5605     { "pmulhrsw",	{ MX, EM } },
5606     { Bad_Opcode },
5607     { Bad_Opcode },
5608     { Bad_Opcode },
5609     { Bad_Opcode },
5610     /* 10 */
5611     { PREFIX_TABLE (PREFIX_0F3810) },
5612     { Bad_Opcode },
5613     { Bad_Opcode },
5614     { Bad_Opcode },
5615     { PREFIX_TABLE (PREFIX_0F3814) },
5616     { PREFIX_TABLE (PREFIX_0F3815) },
5617     { Bad_Opcode },
5618     { PREFIX_TABLE (PREFIX_0F3817) },
5619     /* 18 */
5620     { Bad_Opcode },
5621     { Bad_Opcode },
5622     { Bad_Opcode },
5623     { Bad_Opcode },
5624     { "pabsb",		{ MX, EM } },
5625     { "pabsw",		{ MX, EM } },
5626     { "pabsd",		{ MX, EM } },
5627     { Bad_Opcode },
5628     /* 20 */
5629     { PREFIX_TABLE (PREFIX_0F3820) },
5630     { PREFIX_TABLE (PREFIX_0F3821) },
5631     { PREFIX_TABLE (PREFIX_0F3822) },
5632     { PREFIX_TABLE (PREFIX_0F3823) },
5633     { PREFIX_TABLE (PREFIX_0F3824) },
5634     { PREFIX_TABLE (PREFIX_0F3825) },
5635     { Bad_Opcode },
5636     { Bad_Opcode },
5637     /* 28 */
5638     { PREFIX_TABLE (PREFIX_0F3828) },
5639     { PREFIX_TABLE (PREFIX_0F3829) },
5640     { PREFIX_TABLE (PREFIX_0F382A) },
5641     { PREFIX_TABLE (PREFIX_0F382B) },
5642     { Bad_Opcode },
5643     { Bad_Opcode },
5644     { Bad_Opcode },
5645     { Bad_Opcode },
5646     /* 30 */
5647     { PREFIX_TABLE (PREFIX_0F3830) },
5648     { PREFIX_TABLE (PREFIX_0F3831) },
5649     { PREFIX_TABLE (PREFIX_0F3832) },
5650     { PREFIX_TABLE (PREFIX_0F3833) },
5651     { PREFIX_TABLE (PREFIX_0F3834) },
5652     { PREFIX_TABLE (PREFIX_0F3835) },
5653     { Bad_Opcode },
5654     { PREFIX_TABLE (PREFIX_0F3837) },
5655     /* 38 */
5656     { PREFIX_TABLE (PREFIX_0F3838) },
5657     { PREFIX_TABLE (PREFIX_0F3839) },
5658     { PREFIX_TABLE (PREFIX_0F383A) },
5659     { PREFIX_TABLE (PREFIX_0F383B) },
5660     { PREFIX_TABLE (PREFIX_0F383C) },
5661     { PREFIX_TABLE (PREFIX_0F383D) },
5662     { PREFIX_TABLE (PREFIX_0F383E) },
5663     { PREFIX_TABLE (PREFIX_0F383F) },
5664     /* 40 */
5665     { PREFIX_TABLE (PREFIX_0F3840) },
5666     { PREFIX_TABLE (PREFIX_0F3841) },
5667     { Bad_Opcode },
5668     { Bad_Opcode },
5669     { Bad_Opcode },
5670     { Bad_Opcode },
5671     { Bad_Opcode },
5672     { Bad_Opcode },
5673     /* 48 */
5674     { Bad_Opcode },
5675     { Bad_Opcode },
5676     { Bad_Opcode },
5677     { Bad_Opcode },
5678     { Bad_Opcode },
5679     { Bad_Opcode },
5680     { Bad_Opcode },
5681     { Bad_Opcode },
5682     /* 50 */
5683     { Bad_Opcode },
5684     { Bad_Opcode },
5685     { Bad_Opcode },
5686     { Bad_Opcode },
5687     { Bad_Opcode },
5688     { Bad_Opcode },
5689     { Bad_Opcode },
5690     { Bad_Opcode },
5691     /* 58 */
5692     { Bad_Opcode },
5693     { Bad_Opcode },
5694     { Bad_Opcode },
5695     { Bad_Opcode },
5696     { Bad_Opcode },
5697     { Bad_Opcode },
5698     { Bad_Opcode },
5699     { Bad_Opcode },
5700     /* 60 */
5701     { Bad_Opcode },
5702     { Bad_Opcode },
5703     { Bad_Opcode },
5704     { Bad_Opcode },
5705     { Bad_Opcode },
5706     { Bad_Opcode },
5707     { Bad_Opcode },
5708     { Bad_Opcode },
5709     /* 68 */
5710     { Bad_Opcode },
5711     { Bad_Opcode },
5712     { Bad_Opcode },
5713     { Bad_Opcode },
5714     { Bad_Opcode },
5715     { Bad_Opcode },
5716     { Bad_Opcode },
5717     { Bad_Opcode },
5718     /* 70 */
5719     { Bad_Opcode },
5720     { Bad_Opcode },
5721     { Bad_Opcode },
5722     { Bad_Opcode },
5723     { Bad_Opcode },
5724     { Bad_Opcode },
5725     { Bad_Opcode },
5726     { Bad_Opcode },
5727     /* 78 */
5728     { Bad_Opcode },
5729     { Bad_Opcode },
5730     { Bad_Opcode },
5731     { Bad_Opcode },
5732     { Bad_Opcode },
5733     { Bad_Opcode },
5734     { Bad_Opcode },
5735     { Bad_Opcode },
5736     /* 80 */
5737     { PREFIX_TABLE (PREFIX_0F3880) },
5738     { PREFIX_TABLE (PREFIX_0F3881) },
5739     { Bad_Opcode },
5740     { Bad_Opcode },
5741     { Bad_Opcode },
5742     { Bad_Opcode },
5743     { Bad_Opcode },
5744     { Bad_Opcode },
5745     /* 88 */
5746     { Bad_Opcode },
5747     { Bad_Opcode },
5748     { Bad_Opcode },
5749     { Bad_Opcode },
5750     { Bad_Opcode },
5751     { Bad_Opcode },
5752     { Bad_Opcode },
5753     { Bad_Opcode },
5754     /* 90 */
5755     { Bad_Opcode },
5756     { Bad_Opcode },
5757     { Bad_Opcode },
5758     { Bad_Opcode },
5759     { Bad_Opcode },
5760     { Bad_Opcode },
5761     { Bad_Opcode },
5762     { Bad_Opcode },
5763     /* 98 */
5764     { Bad_Opcode },
5765     { Bad_Opcode },
5766     { Bad_Opcode },
5767     { Bad_Opcode },
5768     { Bad_Opcode },
5769     { Bad_Opcode },
5770     { Bad_Opcode },
5771     { Bad_Opcode },
5772     /* a0 */
5773     { Bad_Opcode },
5774     { Bad_Opcode },
5775     { Bad_Opcode },
5776     { Bad_Opcode },
5777     { Bad_Opcode },
5778     { Bad_Opcode },
5779     { Bad_Opcode },
5780     { Bad_Opcode },
5781     /* a8 */
5782     { Bad_Opcode },
5783     { Bad_Opcode },
5784     { Bad_Opcode },
5785     { Bad_Opcode },
5786     { Bad_Opcode },
5787     { Bad_Opcode },
5788     { Bad_Opcode },
5789     { Bad_Opcode },
5790     /* b0 */
5791     { Bad_Opcode },
5792     { Bad_Opcode },
5793     { Bad_Opcode },
5794     { Bad_Opcode },
5795     { Bad_Opcode },
5796     { Bad_Opcode },
5797     { Bad_Opcode },
5798     { Bad_Opcode },
5799     /* b8 */
5800     { Bad_Opcode },
5801     { Bad_Opcode },
5802     { Bad_Opcode },
5803     { Bad_Opcode },
5804     { Bad_Opcode },
5805     { Bad_Opcode },
5806     { Bad_Opcode },
5807     { Bad_Opcode },
5808     /* c0 */
5809     { Bad_Opcode },
5810     { Bad_Opcode },
5811     { Bad_Opcode },
5812     { Bad_Opcode },
5813     { Bad_Opcode },
5814     { Bad_Opcode },
5815     { Bad_Opcode },
5816     { Bad_Opcode },
5817     /* c8 */
5818     { Bad_Opcode },
5819     { Bad_Opcode },
5820     { Bad_Opcode },
5821     { Bad_Opcode },
5822     { Bad_Opcode },
5823     { Bad_Opcode },
5824     { Bad_Opcode },
5825     { Bad_Opcode },
5826     /* d0 */
5827     { Bad_Opcode },
5828     { Bad_Opcode },
5829     { Bad_Opcode },
5830     { Bad_Opcode },
5831     { Bad_Opcode },
5832     { Bad_Opcode },
5833     { Bad_Opcode },
5834     { Bad_Opcode },
5835     /* d8 */
5836     { Bad_Opcode },
5837     { Bad_Opcode },
5838     { Bad_Opcode },
5839     { PREFIX_TABLE (PREFIX_0F38DB) },
5840     { PREFIX_TABLE (PREFIX_0F38DC) },
5841     { PREFIX_TABLE (PREFIX_0F38DD) },
5842     { PREFIX_TABLE (PREFIX_0F38DE) },
5843     { PREFIX_TABLE (PREFIX_0F38DF) },
5844     /* e0 */
5845     { Bad_Opcode },
5846     { Bad_Opcode },
5847     { Bad_Opcode },
5848     { Bad_Opcode },
5849     { Bad_Opcode },
5850     { Bad_Opcode },
5851     { Bad_Opcode },
5852     { Bad_Opcode },
5853     /* e8 */
5854     { Bad_Opcode },
5855     { Bad_Opcode },
5856     { Bad_Opcode },
5857     { Bad_Opcode },
5858     { Bad_Opcode },
5859     { Bad_Opcode },
5860     { Bad_Opcode },
5861     { Bad_Opcode },
5862     /* f0 */
5863     { PREFIX_TABLE (PREFIX_0F38F0) },
5864     { PREFIX_TABLE (PREFIX_0F38F1) },
5865     { Bad_Opcode },
5866     { Bad_Opcode },
5867     { Bad_Opcode },
5868     { Bad_Opcode },
5869     { Bad_Opcode },
5870     { Bad_Opcode },
5871     /* f8 */
5872     { Bad_Opcode },
5873     { Bad_Opcode },
5874     { Bad_Opcode },
5875     { Bad_Opcode },
5876     { Bad_Opcode },
5877     { Bad_Opcode },
5878     { Bad_Opcode },
5879     { Bad_Opcode },
5880   },
5881   /* THREE_BYTE_0F3A */
5882   {
5883     /* 00 */
5884     { Bad_Opcode },
5885     { Bad_Opcode },
5886     { Bad_Opcode },
5887     { Bad_Opcode },
5888     { Bad_Opcode },
5889     { Bad_Opcode },
5890     { Bad_Opcode },
5891     { Bad_Opcode },
5892     /* 08 */
5893     { PREFIX_TABLE (PREFIX_0F3A08) },
5894     { PREFIX_TABLE (PREFIX_0F3A09) },
5895     { PREFIX_TABLE (PREFIX_0F3A0A) },
5896     { PREFIX_TABLE (PREFIX_0F3A0B) },
5897     { PREFIX_TABLE (PREFIX_0F3A0C) },
5898     { PREFIX_TABLE (PREFIX_0F3A0D) },
5899     { PREFIX_TABLE (PREFIX_0F3A0E) },
5900     { "palignr",	{ MX, EM, Ib } },
5901     /* 10 */
5902     { Bad_Opcode },
5903     { Bad_Opcode },
5904     { Bad_Opcode },
5905     { Bad_Opcode },
5906     { PREFIX_TABLE (PREFIX_0F3A14) },
5907     { PREFIX_TABLE (PREFIX_0F3A15) },
5908     { PREFIX_TABLE (PREFIX_0F3A16) },
5909     { PREFIX_TABLE (PREFIX_0F3A17) },
5910     /* 18 */
5911     { Bad_Opcode },
5912     { Bad_Opcode },
5913     { Bad_Opcode },
5914     { Bad_Opcode },
5915     { Bad_Opcode },
5916     { Bad_Opcode },
5917     { Bad_Opcode },
5918     { Bad_Opcode },
5919     /* 20 */
5920     { PREFIX_TABLE (PREFIX_0F3A20) },
5921     { PREFIX_TABLE (PREFIX_0F3A21) },
5922     { PREFIX_TABLE (PREFIX_0F3A22) },
5923     { Bad_Opcode },
5924     { Bad_Opcode },
5925     { Bad_Opcode },
5926     { Bad_Opcode },
5927     { Bad_Opcode },
5928     /* 28 */
5929     { Bad_Opcode },
5930     { Bad_Opcode },
5931     { Bad_Opcode },
5932     { Bad_Opcode },
5933     { Bad_Opcode },
5934     { Bad_Opcode },
5935     { Bad_Opcode },
5936     { Bad_Opcode },
5937     /* 30 */
5938     { Bad_Opcode },
5939     { Bad_Opcode },
5940     { Bad_Opcode },
5941     { Bad_Opcode },
5942     { Bad_Opcode },
5943     { Bad_Opcode },
5944     { Bad_Opcode },
5945     { Bad_Opcode },
5946     /* 38 */
5947     { Bad_Opcode },
5948     { Bad_Opcode },
5949     { Bad_Opcode },
5950     { Bad_Opcode },
5951     { Bad_Opcode },
5952     { Bad_Opcode },
5953     { Bad_Opcode },
5954     { Bad_Opcode },
5955     /* 40 */
5956     { PREFIX_TABLE (PREFIX_0F3A40) },
5957     { PREFIX_TABLE (PREFIX_0F3A41) },
5958     { PREFIX_TABLE (PREFIX_0F3A42) },
5959     { Bad_Opcode },
5960     { PREFIX_TABLE (PREFIX_0F3A44) },
5961     { Bad_Opcode },
5962     { Bad_Opcode },
5963     { Bad_Opcode },
5964     /* 48 */
5965     { Bad_Opcode },
5966     { Bad_Opcode },
5967     { Bad_Opcode },
5968     { Bad_Opcode },
5969     { Bad_Opcode },
5970     { Bad_Opcode },
5971     { Bad_Opcode },
5972     { Bad_Opcode },
5973     /* 50 */
5974     { Bad_Opcode },
5975     { Bad_Opcode },
5976     { Bad_Opcode },
5977     { Bad_Opcode },
5978     { Bad_Opcode },
5979     { Bad_Opcode },
5980     { Bad_Opcode },
5981     { Bad_Opcode },
5982     /* 58 */
5983     { Bad_Opcode },
5984     { Bad_Opcode },
5985     { Bad_Opcode },
5986     { Bad_Opcode },
5987     { Bad_Opcode },
5988     { Bad_Opcode },
5989     { Bad_Opcode },
5990     { Bad_Opcode },
5991     /* 60 */
5992     { PREFIX_TABLE (PREFIX_0F3A60) },
5993     { PREFIX_TABLE (PREFIX_0F3A61) },
5994     { PREFIX_TABLE (PREFIX_0F3A62) },
5995     { PREFIX_TABLE (PREFIX_0F3A63) },
5996     { Bad_Opcode },
5997     { Bad_Opcode },
5998     { Bad_Opcode },
5999     { Bad_Opcode },
6000     /* 68 */
6001     { Bad_Opcode },
6002     { Bad_Opcode },
6003     { Bad_Opcode },
6004     { Bad_Opcode },
6005     { Bad_Opcode },
6006     { Bad_Opcode },
6007     { Bad_Opcode },
6008     { Bad_Opcode },
6009     /* 70 */
6010     { Bad_Opcode },
6011     { Bad_Opcode },
6012     { Bad_Opcode },
6013     { Bad_Opcode },
6014     { Bad_Opcode },
6015     { Bad_Opcode },
6016     { Bad_Opcode },
6017     { Bad_Opcode },
6018     /* 78 */
6019     { Bad_Opcode },
6020     { Bad_Opcode },
6021     { Bad_Opcode },
6022     { Bad_Opcode },
6023     { Bad_Opcode },
6024     { Bad_Opcode },
6025     { Bad_Opcode },
6026     { Bad_Opcode },
6027     /* 80 */
6028     { Bad_Opcode },
6029     { Bad_Opcode },
6030     { Bad_Opcode },
6031     { Bad_Opcode },
6032     { Bad_Opcode },
6033     { Bad_Opcode },
6034     { Bad_Opcode },
6035     { Bad_Opcode },
6036     /* 88 */
6037     { Bad_Opcode },
6038     { Bad_Opcode },
6039     { Bad_Opcode },
6040     { Bad_Opcode },
6041     { Bad_Opcode },
6042     { Bad_Opcode },
6043     { Bad_Opcode },
6044     { Bad_Opcode },
6045     /* 90 */
6046     { Bad_Opcode },
6047     { Bad_Opcode },
6048     { Bad_Opcode },
6049     { Bad_Opcode },
6050     { Bad_Opcode },
6051     { Bad_Opcode },
6052     { Bad_Opcode },
6053     { Bad_Opcode },
6054     /* 98 */
6055     { Bad_Opcode },
6056     { Bad_Opcode },
6057     { Bad_Opcode },
6058     { Bad_Opcode },
6059     { Bad_Opcode },
6060     { Bad_Opcode },
6061     { Bad_Opcode },
6062     { Bad_Opcode },
6063     /* a0 */
6064     { Bad_Opcode },
6065     { Bad_Opcode },
6066     { Bad_Opcode },
6067     { Bad_Opcode },
6068     { Bad_Opcode },
6069     { Bad_Opcode },
6070     { Bad_Opcode },
6071     { Bad_Opcode },
6072     /* a8 */
6073     { Bad_Opcode },
6074     { Bad_Opcode },
6075     { Bad_Opcode },
6076     { Bad_Opcode },
6077     { Bad_Opcode },
6078     { Bad_Opcode },
6079     { Bad_Opcode },
6080     { Bad_Opcode },
6081     /* b0 */
6082     { Bad_Opcode },
6083     { Bad_Opcode },
6084     { Bad_Opcode },
6085     { Bad_Opcode },
6086     { Bad_Opcode },
6087     { Bad_Opcode },
6088     { Bad_Opcode },
6089     { Bad_Opcode },
6090     /* b8 */
6091     { Bad_Opcode },
6092     { Bad_Opcode },
6093     { Bad_Opcode },
6094     { Bad_Opcode },
6095     { Bad_Opcode },
6096     { Bad_Opcode },
6097     { Bad_Opcode },
6098     { Bad_Opcode },
6099     /* c0 */
6100     { Bad_Opcode },
6101     { Bad_Opcode },
6102     { Bad_Opcode },
6103     { Bad_Opcode },
6104     { Bad_Opcode },
6105     { Bad_Opcode },
6106     { Bad_Opcode },
6107     { Bad_Opcode },
6108     /* c8 */
6109     { Bad_Opcode },
6110     { Bad_Opcode },
6111     { Bad_Opcode },
6112     { Bad_Opcode },
6113     { Bad_Opcode },
6114     { Bad_Opcode },
6115     { Bad_Opcode },
6116     { Bad_Opcode },
6117     /* d0 */
6118     { Bad_Opcode },
6119     { Bad_Opcode },
6120     { Bad_Opcode },
6121     { Bad_Opcode },
6122     { Bad_Opcode },
6123     { Bad_Opcode },
6124     { Bad_Opcode },
6125     { Bad_Opcode },
6126     /* d8 */
6127     { Bad_Opcode },
6128     { Bad_Opcode },
6129     { Bad_Opcode },
6130     { Bad_Opcode },
6131     { Bad_Opcode },
6132     { Bad_Opcode },
6133     { Bad_Opcode },
6134     { PREFIX_TABLE (PREFIX_0F3ADF) },
6135     /* e0 */
6136     { Bad_Opcode },
6137     { Bad_Opcode },
6138     { Bad_Opcode },
6139     { Bad_Opcode },
6140     { Bad_Opcode },
6141     { Bad_Opcode },
6142     { Bad_Opcode },
6143     { Bad_Opcode },
6144     /* e8 */
6145     { Bad_Opcode },
6146     { Bad_Opcode },
6147     { Bad_Opcode },
6148     { Bad_Opcode },
6149     { Bad_Opcode },
6150     { Bad_Opcode },
6151     { Bad_Opcode },
6152     { Bad_Opcode },
6153     /* f0 */
6154     { Bad_Opcode },
6155     { Bad_Opcode },
6156     { Bad_Opcode },
6157     { Bad_Opcode },
6158     { Bad_Opcode },
6159     { Bad_Opcode },
6160     { Bad_Opcode },
6161     { Bad_Opcode },
6162     /* f8 */
6163     { Bad_Opcode },
6164     { Bad_Opcode },
6165     { Bad_Opcode },
6166     { Bad_Opcode },
6167     { Bad_Opcode },
6168     { Bad_Opcode },
6169     { Bad_Opcode },
6170     { Bad_Opcode },
6171   },
6172 
6173   /* THREE_BYTE_0F7A */
6174   {
6175     /* 00 */
6176     { Bad_Opcode },
6177     { Bad_Opcode },
6178     { Bad_Opcode },
6179     { Bad_Opcode },
6180     { Bad_Opcode },
6181     { Bad_Opcode },
6182     { Bad_Opcode },
6183     { Bad_Opcode },
6184     /* 08 */
6185     { Bad_Opcode },
6186     { Bad_Opcode },
6187     { Bad_Opcode },
6188     { Bad_Opcode },
6189     { Bad_Opcode },
6190     { Bad_Opcode },
6191     { Bad_Opcode },
6192     { Bad_Opcode },
6193     /* 10 */
6194     { Bad_Opcode },
6195     { Bad_Opcode },
6196     { Bad_Opcode },
6197     { Bad_Opcode },
6198     { Bad_Opcode },
6199     { Bad_Opcode },
6200     { Bad_Opcode },
6201     { Bad_Opcode },
6202     /* 18 */
6203     { Bad_Opcode },
6204     { Bad_Opcode },
6205     { Bad_Opcode },
6206     { Bad_Opcode },
6207     { Bad_Opcode },
6208     { Bad_Opcode },
6209     { Bad_Opcode },
6210     { Bad_Opcode },
6211     /* 20 */
6212     { "ptest",		{ XX } },
6213     { Bad_Opcode },
6214     { Bad_Opcode },
6215     { Bad_Opcode },
6216     { Bad_Opcode },
6217     { Bad_Opcode },
6218     { Bad_Opcode },
6219     { Bad_Opcode },
6220     /* 28 */
6221     { Bad_Opcode },
6222     { Bad_Opcode },
6223     { Bad_Opcode },
6224     { Bad_Opcode },
6225     { Bad_Opcode },
6226     { Bad_Opcode },
6227     { Bad_Opcode },
6228     { Bad_Opcode },
6229     /* 30 */
6230     { Bad_Opcode },
6231     { Bad_Opcode },
6232     { Bad_Opcode },
6233     { Bad_Opcode },
6234     { Bad_Opcode },
6235     { Bad_Opcode },
6236     { Bad_Opcode },
6237     { Bad_Opcode },
6238     /* 38 */
6239     { Bad_Opcode },
6240     { Bad_Opcode },
6241     { Bad_Opcode },
6242     { Bad_Opcode },
6243     { Bad_Opcode },
6244     { Bad_Opcode },
6245     { Bad_Opcode },
6246     { Bad_Opcode },
6247     /* 40 */
6248     { Bad_Opcode },
6249     { "phaddbw",	{ XM, EXq } },
6250     { "phaddbd",	{ XM, EXq } },
6251     { "phaddbq",	{ XM, EXq } },
6252     { Bad_Opcode },
6253     { Bad_Opcode },
6254     { "phaddwd",	{ XM, EXq } },
6255     { "phaddwq",	{ XM, EXq } },
6256     /* 48 */
6257     { Bad_Opcode },
6258     { Bad_Opcode },
6259     { Bad_Opcode },
6260     { "phadddq",	{ XM, EXq } },
6261     { Bad_Opcode },
6262     { Bad_Opcode },
6263     { Bad_Opcode },
6264     { Bad_Opcode },
6265     /* 50 */
6266     { Bad_Opcode },
6267     { "phaddubw",	{ XM, EXq } },
6268     { "phaddubd",	{ XM, EXq } },
6269     { "phaddubq",	{ XM, EXq } },
6270     { Bad_Opcode },
6271     { Bad_Opcode },
6272     { "phadduwd",	{ XM, EXq } },
6273     { "phadduwq",	{ XM, EXq } },
6274     /* 58 */
6275     { Bad_Opcode },
6276     { Bad_Opcode },
6277     { Bad_Opcode },
6278     { "phaddudq",	{ XM, EXq } },
6279     { Bad_Opcode },
6280     { Bad_Opcode },
6281     { Bad_Opcode },
6282     { Bad_Opcode },
6283     /* 60 */
6284     { Bad_Opcode },
6285     { "phsubbw",	{ XM, EXq } },
6286     { "phsubbd",	{ XM, EXq } },
6287     { "phsubbq",	{ XM, EXq } },
6288     { Bad_Opcode },
6289     { Bad_Opcode },
6290     { Bad_Opcode },
6291     { Bad_Opcode },
6292     /* 68 */
6293     { Bad_Opcode },
6294     { Bad_Opcode },
6295     { Bad_Opcode },
6296     { Bad_Opcode },
6297     { Bad_Opcode },
6298     { Bad_Opcode },
6299     { Bad_Opcode },
6300     { Bad_Opcode },
6301     /* 70 */
6302     { Bad_Opcode },
6303     { Bad_Opcode },
6304     { Bad_Opcode },
6305     { Bad_Opcode },
6306     { Bad_Opcode },
6307     { Bad_Opcode },
6308     { Bad_Opcode },
6309     { Bad_Opcode },
6310     /* 78 */
6311     { Bad_Opcode },
6312     { Bad_Opcode },
6313     { Bad_Opcode },
6314     { Bad_Opcode },
6315     { Bad_Opcode },
6316     { Bad_Opcode },
6317     { Bad_Opcode },
6318     { Bad_Opcode },
6319     /* 80 */
6320     { Bad_Opcode },
6321     { Bad_Opcode },
6322     { Bad_Opcode },
6323     { Bad_Opcode },
6324     { Bad_Opcode },
6325     { Bad_Opcode },
6326     { Bad_Opcode },
6327     { Bad_Opcode },
6328     /* 88 */
6329     { Bad_Opcode },
6330     { Bad_Opcode },
6331     { Bad_Opcode },
6332     { Bad_Opcode },
6333     { Bad_Opcode },
6334     { Bad_Opcode },
6335     { Bad_Opcode },
6336     { Bad_Opcode },
6337     /* 90 */
6338     { Bad_Opcode },
6339     { Bad_Opcode },
6340     { Bad_Opcode },
6341     { Bad_Opcode },
6342     { Bad_Opcode },
6343     { Bad_Opcode },
6344     { Bad_Opcode },
6345     { Bad_Opcode },
6346     /* 98 */
6347     { Bad_Opcode },
6348     { Bad_Opcode },
6349     { Bad_Opcode },
6350     { Bad_Opcode },
6351     { Bad_Opcode },
6352     { Bad_Opcode },
6353     { Bad_Opcode },
6354     { Bad_Opcode },
6355     /* a0 */
6356     { Bad_Opcode },
6357     { Bad_Opcode },
6358     { Bad_Opcode },
6359     { Bad_Opcode },
6360     { Bad_Opcode },
6361     { Bad_Opcode },
6362     { Bad_Opcode },
6363     { Bad_Opcode },
6364     /* a8 */
6365     { Bad_Opcode },
6366     { Bad_Opcode },
6367     { Bad_Opcode },
6368     { Bad_Opcode },
6369     { Bad_Opcode },
6370     { Bad_Opcode },
6371     { Bad_Opcode },
6372     { Bad_Opcode },
6373     /* b0 */
6374     { Bad_Opcode },
6375     { Bad_Opcode },
6376     { Bad_Opcode },
6377     { Bad_Opcode },
6378     { Bad_Opcode },
6379     { Bad_Opcode },
6380     { Bad_Opcode },
6381     { Bad_Opcode },
6382     /* b8 */
6383     { Bad_Opcode },
6384     { Bad_Opcode },
6385     { Bad_Opcode },
6386     { Bad_Opcode },
6387     { Bad_Opcode },
6388     { Bad_Opcode },
6389     { Bad_Opcode },
6390     { Bad_Opcode },
6391     /* c0 */
6392     { Bad_Opcode },
6393     { Bad_Opcode },
6394     { Bad_Opcode },
6395     { Bad_Opcode },
6396     { Bad_Opcode },
6397     { Bad_Opcode },
6398     { Bad_Opcode },
6399     { Bad_Opcode },
6400     /* c8 */
6401     { Bad_Opcode },
6402     { Bad_Opcode },
6403     { Bad_Opcode },
6404     { Bad_Opcode },
6405     { Bad_Opcode },
6406     { Bad_Opcode },
6407     { Bad_Opcode },
6408     { Bad_Opcode },
6409     /* d0 */
6410     { Bad_Opcode },
6411     { Bad_Opcode },
6412     { Bad_Opcode },
6413     { Bad_Opcode },
6414     { Bad_Opcode },
6415     { Bad_Opcode },
6416     { Bad_Opcode },
6417     { Bad_Opcode },
6418     /* d8 */
6419     { Bad_Opcode },
6420     { Bad_Opcode },
6421     { Bad_Opcode },
6422     { Bad_Opcode },
6423     { Bad_Opcode },
6424     { Bad_Opcode },
6425     { Bad_Opcode },
6426     { Bad_Opcode },
6427     /* e0 */
6428     { Bad_Opcode },
6429     { Bad_Opcode },
6430     { Bad_Opcode },
6431     { Bad_Opcode },
6432     { Bad_Opcode },
6433     { Bad_Opcode },
6434     { Bad_Opcode },
6435     { Bad_Opcode },
6436     /* e8 */
6437     { Bad_Opcode },
6438     { Bad_Opcode },
6439     { Bad_Opcode },
6440     { Bad_Opcode },
6441     { Bad_Opcode },
6442     { Bad_Opcode },
6443     { Bad_Opcode },
6444     { Bad_Opcode },
6445     /* f0 */
6446     { Bad_Opcode },
6447     { Bad_Opcode },
6448     { Bad_Opcode },
6449     { Bad_Opcode },
6450     { Bad_Opcode },
6451     { Bad_Opcode },
6452     { Bad_Opcode },
6453     { Bad_Opcode },
6454     /* f8 */
6455     { Bad_Opcode },
6456     { Bad_Opcode },
6457     { Bad_Opcode },
6458     { Bad_Opcode },
6459     { Bad_Opcode },
6460     { Bad_Opcode },
6461     { Bad_Opcode },
6462     { Bad_Opcode },
6463   },
6464 };
6465 
6466 static const struct dis386 xop_table[][256] = {
6467   /* XOP_08 */
6468   {
6469     /* 00 */
6470     { Bad_Opcode },
6471     { Bad_Opcode },
6472     { Bad_Opcode },
6473     { Bad_Opcode },
6474     { Bad_Opcode },
6475     { Bad_Opcode },
6476     { Bad_Opcode },
6477     { Bad_Opcode },
6478     /* 08 */
6479     { Bad_Opcode },
6480     { Bad_Opcode },
6481     { Bad_Opcode },
6482     { Bad_Opcode },
6483     { Bad_Opcode },
6484     { Bad_Opcode },
6485     { Bad_Opcode },
6486     { Bad_Opcode },
6487     /* 10 */
6488     { "bextr",	{ Gv, Ev, Iq } },
6489     { Bad_Opcode },
6490     { Bad_Opcode },
6491     { Bad_Opcode },
6492     { Bad_Opcode },
6493     { Bad_Opcode },
6494     { Bad_Opcode },
6495     { Bad_Opcode },
6496     /* 18 */
6497     { Bad_Opcode },
6498     { Bad_Opcode },
6499     { Bad_Opcode },
6500     { Bad_Opcode },
6501     { Bad_Opcode },
6502     { Bad_Opcode },
6503     { Bad_Opcode },
6504     { Bad_Opcode },
6505     /* 20 */
6506     { Bad_Opcode },
6507     { Bad_Opcode },
6508     { Bad_Opcode },
6509     { Bad_Opcode },
6510     { Bad_Opcode },
6511     { Bad_Opcode },
6512     { Bad_Opcode },
6513     { Bad_Opcode },
6514     /* 28 */
6515     { Bad_Opcode },
6516     { Bad_Opcode },
6517     { Bad_Opcode },
6518     { Bad_Opcode },
6519     { Bad_Opcode },
6520     { Bad_Opcode },
6521     { Bad_Opcode },
6522     { Bad_Opcode },
6523     /* 30 */
6524     { Bad_Opcode },
6525     { Bad_Opcode },
6526     { Bad_Opcode },
6527     { Bad_Opcode },
6528     { Bad_Opcode },
6529     { Bad_Opcode },
6530     { Bad_Opcode },
6531     { Bad_Opcode },
6532     /* 38 */
6533     { Bad_Opcode },
6534     { Bad_Opcode },
6535     { Bad_Opcode },
6536     { Bad_Opcode },
6537     { Bad_Opcode },
6538     { Bad_Opcode },
6539     { Bad_Opcode },
6540     { Bad_Opcode },
6541     /* 40 */
6542     { Bad_Opcode },
6543     { Bad_Opcode },
6544     { Bad_Opcode },
6545     { Bad_Opcode },
6546     { Bad_Opcode },
6547     { Bad_Opcode },
6548     { Bad_Opcode },
6549     { Bad_Opcode },
6550     /* 48 */
6551     { Bad_Opcode },
6552     { Bad_Opcode },
6553     { Bad_Opcode },
6554     { Bad_Opcode },
6555     { Bad_Opcode },
6556     { Bad_Opcode },
6557     { Bad_Opcode },
6558     { Bad_Opcode },
6559     /* 50 */
6560     { Bad_Opcode },
6561     { Bad_Opcode },
6562     { Bad_Opcode },
6563     { Bad_Opcode },
6564     { Bad_Opcode },
6565     { Bad_Opcode },
6566     { Bad_Opcode },
6567     { Bad_Opcode },
6568     /* 58 */
6569     { Bad_Opcode },
6570     { Bad_Opcode },
6571     { Bad_Opcode },
6572     { Bad_Opcode },
6573     { Bad_Opcode },
6574     { Bad_Opcode },
6575     { Bad_Opcode },
6576     { Bad_Opcode },
6577     /* 60 */
6578     { Bad_Opcode },
6579     { Bad_Opcode },
6580     { Bad_Opcode },
6581     { Bad_Opcode },
6582     { Bad_Opcode },
6583     { Bad_Opcode },
6584     { Bad_Opcode },
6585     { Bad_Opcode },
6586     /* 68 */
6587     { Bad_Opcode },
6588     { Bad_Opcode },
6589     { Bad_Opcode },
6590     { Bad_Opcode },
6591     { Bad_Opcode },
6592     { Bad_Opcode },
6593     { Bad_Opcode },
6594     { Bad_Opcode },
6595     /* 70 */
6596     { Bad_Opcode },
6597     { Bad_Opcode },
6598     { Bad_Opcode },
6599     { Bad_Opcode },
6600     { Bad_Opcode },
6601     { Bad_Opcode },
6602     { Bad_Opcode },
6603     { Bad_Opcode },
6604     /* 78 */
6605     { Bad_Opcode },
6606     { Bad_Opcode },
6607     { Bad_Opcode },
6608     { Bad_Opcode },
6609     { Bad_Opcode },
6610     { Bad_Opcode },
6611     { Bad_Opcode },
6612     { Bad_Opcode },
6613     /* 80 */
6614     { Bad_Opcode },
6615     { Bad_Opcode },
6616     { Bad_Opcode },
6617     { Bad_Opcode },
6618     { Bad_Opcode },
6619     { "vpmacssww", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6620     { "vpmacsswd", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6621     { "vpmacssdql", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6622     /* 88 */
6623     { Bad_Opcode },
6624     { Bad_Opcode },
6625     { Bad_Opcode },
6626     { Bad_Opcode },
6627     { Bad_Opcode },
6628     { Bad_Opcode },
6629     { "vpmacssdd", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6630     { "vpmacssdqh", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6631     /* 90 */
6632     { Bad_Opcode },
6633     { Bad_Opcode },
6634     { Bad_Opcode },
6635     { Bad_Opcode },
6636     { Bad_Opcode },
6637     { "vpmacsww", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6638     { "vpmacswd", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6639     { "vpmacsdql", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6640     /* 98 */
6641     { Bad_Opcode },
6642     { Bad_Opcode },
6643     { Bad_Opcode },
6644     { Bad_Opcode },
6645     { Bad_Opcode },
6646     { Bad_Opcode },
6647     { "vpmacsdd", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6648     { "vpmacsdqh", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6649     /* a0 */
6650     { Bad_Opcode },
6651     { Bad_Opcode },
6652     { "vpcmov", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6653     { "vpperm", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6654     { Bad_Opcode },
6655     { Bad_Opcode },
6656     { "vpmadcsswd", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6657     { Bad_Opcode },
6658     /* a8 */
6659     { Bad_Opcode },
6660     { Bad_Opcode },
6661     { Bad_Opcode },
6662     { Bad_Opcode },
6663     { Bad_Opcode },
6664     { Bad_Opcode },
6665     { Bad_Opcode },
6666     { Bad_Opcode },
6667     /* b0 */
6668     { Bad_Opcode },
6669     { Bad_Opcode },
6670     { Bad_Opcode },
6671     { Bad_Opcode },
6672     { Bad_Opcode },
6673     { Bad_Opcode },
6674     { "vpmadcswd", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6675     { Bad_Opcode },
6676     /* b8 */
6677     { Bad_Opcode },
6678     { Bad_Opcode },
6679     { Bad_Opcode },
6680     { Bad_Opcode },
6681     { Bad_Opcode },
6682     { Bad_Opcode },
6683     { Bad_Opcode },
6684     { Bad_Opcode },
6685     /* c0 */
6686     { "vprotb", 	{ XM, Vex_2src_1, Ib } },
6687     { "vprotw", 	{ XM, Vex_2src_1, Ib } },
6688     { "vprotd", 	{ XM, Vex_2src_1, Ib } },
6689     { "vprotq", 	{ XM, Vex_2src_1, Ib } },
6690     { Bad_Opcode },
6691     { Bad_Opcode },
6692     { Bad_Opcode },
6693     { Bad_Opcode },
6694     /* c8 */
6695     { Bad_Opcode },
6696     { Bad_Opcode },
6697     { Bad_Opcode },
6698     { Bad_Opcode },
6699     { "vpcomb", 	{ XM, Vex128, EXx, Ib } },
6700     { "vpcomw", 	{ XM, Vex128, EXx, Ib } },
6701     { "vpcomd", 	{ XM, Vex128, EXx, Ib } },
6702     { "vpcomq", 	{ XM, Vex128, EXx, Ib } },
6703     /* d0 */
6704     { Bad_Opcode },
6705     { Bad_Opcode },
6706     { Bad_Opcode },
6707     { Bad_Opcode },
6708     { Bad_Opcode },
6709     { Bad_Opcode },
6710     { Bad_Opcode },
6711     { Bad_Opcode },
6712     /* d8 */
6713     { Bad_Opcode },
6714     { Bad_Opcode },
6715     { Bad_Opcode },
6716     { Bad_Opcode },
6717     { Bad_Opcode },
6718     { Bad_Opcode },
6719     { Bad_Opcode },
6720     { Bad_Opcode },
6721     /* e0 */
6722     { Bad_Opcode },
6723     { Bad_Opcode },
6724     { Bad_Opcode },
6725     { Bad_Opcode },
6726     { Bad_Opcode },
6727     { Bad_Opcode },
6728     { Bad_Opcode },
6729     { Bad_Opcode },
6730     /* e8 */
6731     { Bad_Opcode },
6732     { Bad_Opcode },
6733     { Bad_Opcode },
6734     { Bad_Opcode },
6735     { "vpcomub",	{ XM, Vex128, EXx, Ib } },
6736     { "vpcomuw",	{ XM, Vex128, EXx, Ib } },
6737     { "vpcomud",	{ XM, Vex128, EXx, Ib } },
6738     { "vpcomuq",	{ XM, Vex128, EXx, Ib } },
6739     /* f0 */
6740     { Bad_Opcode },
6741     { Bad_Opcode },
6742     { Bad_Opcode },
6743     { Bad_Opcode },
6744     { Bad_Opcode },
6745     { Bad_Opcode },
6746     { Bad_Opcode },
6747     { Bad_Opcode },
6748     /* f8 */
6749     { Bad_Opcode },
6750     { Bad_Opcode },
6751     { Bad_Opcode },
6752     { Bad_Opcode },
6753     { Bad_Opcode },
6754     { Bad_Opcode },
6755     { Bad_Opcode },
6756     { Bad_Opcode },
6757   },
6758   /* XOP_09 */
6759   {
6760     /* 00 */
6761     { Bad_Opcode },
6762     { REG_TABLE (REG_XOP_TBM_01) },
6763     { REG_TABLE (REG_XOP_TBM_02) },
6764     { Bad_Opcode },
6765     { Bad_Opcode },
6766     { Bad_Opcode },
6767     { Bad_Opcode },
6768     { Bad_Opcode },
6769     /* 08 */
6770     { Bad_Opcode },
6771     { Bad_Opcode },
6772     { Bad_Opcode },
6773     { Bad_Opcode },
6774     { Bad_Opcode },
6775     { Bad_Opcode },
6776     { Bad_Opcode },
6777     { Bad_Opcode },
6778     /* 10 */
6779     { Bad_Opcode },
6780     { Bad_Opcode },
6781     { REG_TABLE (REG_XOP_LWPCB) },
6782     { Bad_Opcode },
6783     { Bad_Opcode },
6784     { Bad_Opcode },
6785     { Bad_Opcode },
6786     { Bad_Opcode },
6787     /* 18 */
6788     { Bad_Opcode },
6789     { Bad_Opcode },
6790     { Bad_Opcode },
6791     { Bad_Opcode },
6792     { Bad_Opcode },
6793     { Bad_Opcode },
6794     { Bad_Opcode },
6795     { Bad_Opcode },
6796     /* 20 */
6797     { Bad_Opcode },
6798     { Bad_Opcode },
6799     { Bad_Opcode },
6800     { Bad_Opcode },
6801     { Bad_Opcode },
6802     { Bad_Opcode },
6803     { Bad_Opcode },
6804     { Bad_Opcode },
6805     /* 28 */
6806     { Bad_Opcode },
6807     { Bad_Opcode },
6808     { Bad_Opcode },
6809     { Bad_Opcode },
6810     { Bad_Opcode },
6811     { Bad_Opcode },
6812     { Bad_Opcode },
6813     { Bad_Opcode },
6814     /* 30 */
6815     { Bad_Opcode },
6816     { Bad_Opcode },
6817     { Bad_Opcode },
6818     { Bad_Opcode },
6819     { Bad_Opcode },
6820     { Bad_Opcode },
6821     { Bad_Opcode },
6822     { Bad_Opcode },
6823     /* 38 */
6824     { Bad_Opcode },
6825     { Bad_Opcode },
6826     { Bad_Opcode },
6827     { Bad_Opcode },
6828     { Bad_Opcode },
6829     { Bad_Opcode },
6830     { Bad_Opcode },
6831     { Bad_Opcode },
6832     /* 40 */
6833     { Bad_Opcode },
6834     { Bad_Opcode },
6835     { Bad_Opcode },
6836     { Bad_Opcode },
6837     { Bad_Opcode },
6838     { Bad_Opcode },
6839     { Bad_Opcode },
6840     { Bad_Opcode },
6841     /* 48 */
6842     { Bad_Opcode },
6843     { Bad_Opcode },
6844     { Bad_Opcode },
6845     { Bad_Opcode },
6846     { Bad_Opcode },
6847     { Bad_Opcode },
6848     { Bad_Opcode },
6849     { Bad_Opcode },
6850     /* 50 */
6851     { Bad_Opcode },
6852     { Bad_Opcode },
6853     { Bad_Opcode },
6854     { Bad_Opcode },
6855     { Bad_Opcode },
6856     { Bad_Opcode },
6857     { Bad_Opcode },
6858     { Bad_Opcode },
6859     /* 58 */
6860     { Bad_Opcode },
6861     { Bad_Opcode },
6862     { Bad_Opcode },
6863     { Bad_Opcode },
6864     { Bad_Opcode },
6865     { Bad_Opcode },
6866     { Bad_Opcode },
6867     { Bad_Opcode },
6868     /* 60 */
6869     { Bad_Opcode },
6870     { Bad_Opcode },
6871     { Bad_Opcode },
6872     { Bad_Opcode },
6873     { Bad_Opcode },
6874     { Bad_Opcode },
6875     { Bad_Opcode },
6876     { Bad_Opcode },
6877     /* 68 */
6878     { Bad_Opcode },
6879     { Bad_Opcode },
6880     { Bad_Opcode },
6881     { Bad_Opcode },
6882     { Bad_Opcode },
6883     { Bad_Opcode },
6884     { Bad_Opcode },
6885     { Bad_Opcode },
6886     /* 70 */
6887     { Bad_Opcode },
6888     { Bad_Opcode },
6889     { Bad_Opcode },
6890     { Bad_Opcode },
6891     { Bad_Opcode },
6892     { Bad_Opcode },
6893     { Bad_Opcode },
6894     { Bad_Opcode },
6895     /* 78 */
6896     { Bad_Opcode },
6897     { Bad_Opcode },
6898     { Bad_Opcode },
6899     { Bad_Opcode },
6900     { Bad_Opcode },
6901     { Bad_Opcode },
6902     { Bad_Opcode },
6903     { Bad_Opcode },
6904     /* 80 */
6905     { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) },
6906     { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) },
6907     { "vfrczss", 	{ XM, EXd } },
6908     { "vfrczsd", 	{ XM, EXq } },
6909     { Bad_Opcode },
6910     { Bad_Opcode },
6911     { Bad_Opcode },
6912     { Bad_Opcode },
6913     /* 88 */
6914     { Bad_Opcode },
6915     { Bad_Opcode },
6916     { Bad_Opcode },
6917     { Bad_Opcode },
6918     { Bad_Opcode },
6919     { Bad_Opcode },
6920     { Bad_Opcode },
6921     { Bad_Opcode },
6922     /* 90 */
6923     { "vprotb",		{ XM, Vex_2src_1, Vex_2src_2 } },
6924     { "vprotw",		{ XM, Vex_2src_1, Vex_2src_2 } },
6925     { "vprotd",		{ XM, Vex_2src_1, Vex_2src_2 } },
6926     { "vprotq",		{ XM, Vex_2src_1, Vex_2src_2 } },
6927     { "vpshlb",		{ XM, Vex_2src_1, Vex_2src_2 } },
6928     { "vpshlw",		{ XM, Vex_2src_1, Vex_2src_2 } },
6929     { "vpshld",		{ XM, Vex_2src_1, Vex_2src_2 } },
6930     { "vpshlq",		{ XM, Vex_2src_1, Vex_2src_2 } },
6931     /* 98 */
6932     { "vpshab",		{ XM, Vex_2src_1, Vex_2src_2 } },
6933     { "vpshaw",		{ XM, Vex_2src_1, Vex_2src_2 } },
6934     { "vpshad",		{ XM, Vex_2src_1, Vex_2src_2 } },
6935     { "vpshaq",		{ XM, Vex_2src_1, Vex_2src_2 } },
6936     { Bad_Opcode },
6937     { Bad_Opcode },
6938     { Bad_Opcode },
6939     { Bad_Opcode },
6940     /* a0 */
6941     { Bad_Opcode },
6942     { Bad_Opcode },
6943     { Bad_Opcode },
6944     { Bad_Opcode },
6945     { Bad_Opcode },
6946     { Bad_Opcode },
6947     { Bad_Opcode },
6948     { Bad_Opcode },
6949     /* a8 */
6950     { Bad_Opcode },
6951     { Bad_Opcode },
6952     { Bad_Opcode },
6953     { Bad_Opcode },
6954     { Bad_Opcode },
6955     { Bad_Opcode },
6956     { Bad_Opcode },
6957     { Bad_Opcode },
6958     /* b0 */
6959     { Bad_Opcode },
6960     { Bad_Opcode },
6961     { Bad_Opcode },
6962     { Bad_Opcode },
6963     { Bad_Opcode },
6964     { Bad_Opcode },
6965     { Bad_Opcode },
6966     { Bad_Opcode },
6967     /* b8 */
6968     { Bad_Opcode },
6969     { Bad_Opcode },
6970     { Bad_Opcode },
6971     { Bad_Opcode },
6972     { Bad_Opcode },
6973     { Bad_Opcode },
6974     { Bad_Opcode },
6975     { Bad_Opcode },
6976     /* c0 */
6977     { Bad_Opcode },
6978     { "vphaddbw",	{ XM, EXxmm } },
6979     { "vphaddbd",	{ XM, EXxmm } },
6980     { "vphaddbq",	{ XM, EXxmm } },
6981     { Bad_Opcode },
6982     { Bad_Opcode },
6983     { "vphaddwd",	{ XM, EXxmm } },
6984     { "vphaddwq",	{ XM, EXxmm } },
6985     /* c8 */
6986     { Bad_Opcode },
6987     { Bad_Opcode },
6988     { Bad_Opcode },
6989     { "vphadddq",	{ XM, EXxmm } },
6990     { Bad_Opcode },
6991     { Bad_Opcode },
6992     { Bad_Opcode },
6993     { Bad_Opcode },
6994     /* d0 */
6995     { Bad_Opcode },
6996     { "vphaddubw",	{ XM, EXxmm } },
6997     { "vphaddubd",	{ XM, EXxmm } },
6998     { "vphaddubq",	{ XM, EXxmm } },
6999     { Bad_Opcode },
7000     { Bad_Opcode },
7001     { "vphadduwd",	{ XM, EXxmm } },
7002     { "vphadduwq",	{ XM, EXxmm } },
7003     /* d8 */
7004     { Bad_Opcode },
7005     { Bad_Opcode },
7006     { Bad_Opcode },
7007     { "vphaddudq",	{ XM, EXxmm } },
7008     { Bad_Opcode },
7009     { Bad_Opcode },
7010     { Bad_Opcode },
7011     { Bad_Opcode },
7012     /* e0 */
7013     { Bad_Opcode },
7014     { "vphsubbw",	{ XM, EXxmm } },
7015     { "vphsubwd",	{ XM, EXxmm } },
7016     { "vphsubdq",	{ XM, EXxmm } },
7017     { Bad_Opcode },
7018     { Bad_Opcode },
7019     { Bad_Opcode },
7020     { Bad_Opcode },
7021     /* e8 */
7022     { Bad_Opcode },
7023     { Bad_Opcode },
7024     { Bad_Opcode },
7025     { Bad_Opcode },
7026     { Bad_Opcode },
7027     { Bad_Opcode },
7028     { Bad_Opcode },
7029     { Bad_Opcode },
7030     /* f0 */
7031     { Bad_Opcode },
7032     { Bad_Opcode },
7033     { Bad_Opcode },
7034     { Bad_Opcode },
7035     { Bad_Opcode },
7036     { Bad_Opcode },
7037     { Bad_Opcode },
7038     { Bad_Opcode },
7039     /* f8 */
7040     { Bad_Opcode },
7041     { Bad_Opcode },
7042     { Bad_Opcode },
7043     { Bad_Opcode },
7044     { Bad_Opcode },
7045     { Bad_Opcode },
7046     { Bad_Opcode },
7047     { Bad_Opcode },
7048   },
7049   /* XOP_0A */
7050   {
7051     /* 00 */
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     /* 08 */
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     /* 10 */
7070     { "bextr",	{ Gv, Ev, Iq } },
7071     { Bad_Opcode },
7072     { REG_TABLE (REG_XOP_LWP) },
7073     { Bad_Opcode },
7074     { Bad_Opcode },
7075     { Bad_Opcode },
7076     { Bad_Opcode },
7077     { Bad_Opcode },
7078     /* 18 */
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     /* 20 */
7088     { Bad_Opcode },
7089     { Bad_Opcode },
7090     { Bad_Opcode },
7091     { Bad_Opcode },
7092     { Bad_Opcode },
7093     { Bad_Opcode },
7094     { Bad_Opcode },
7095     { Bad_Opcode },
7096     /* 28 */
7097     { Bad_Opcode },
7098     { Bad_Opcode },
7099     { Bad_Opcode },
7100     { Bad_Opcode },
7101     { Bad_Opcode },
7102     { Bad_Opcode },
7103     { Bad_Opcode },
7104     { Bad_Opcode },
7105     /* 30 */
7106     { Bad_Opcode },
7107     { Bad_Opcode },
7108     { Bad_Opcode },
7109     { Bad_Opcode },
7110     { Bad_Opcode },
7111     { Bad_Opcode },
7112     { Bad_Opcode },
7113     { Bad_Opcode },
7114     /* 38 */
7115     { Bad_Opcode },
7116     { Bad_Opcode },
7117     { Bad_Opcode },
7118     { Bad_Opcode },
7119     { Bad_Opcode },
7120     { Bad_Opcode },
7121     { Bad_Opcode },
7122     { Bad_Opcode },
7123     /* 40 */
7124     { Bad_Opcode },
7125     { Bad_Opcode },
7126     { Bad_Opcode },
7127     { Bad_Opcode },
7128     { Bad_Opcode },
7129     { Bad_Opcode },
7130     { Bad_Opcode },
7131     { Bad_Opcode },
7132     /* 48 */
7133     { Bad_Opcode },
7134     { Bad_Opcode },
7135     { Bad_Opcode },
7136     { Bad_Opcode },
7137     { Bad_Opcode },
7138     { Bad_Opcode },
7139     { Bad_Opcode },
7140     { Bad_Opcode },
7141     /* 50 */
7142     { Bad_Opcode },
7143     { Bad_Opcode },
7144     { Bad_Opcode },
7145     { Bad_Opcode },
7146     { Bad_Opcode },
7147     { Bad_Opcode },
7148     { Bad_Opcode },
7149     { Bad_Opcode },
7150     /* 58 */
7151     { Bad_Opcode },
7152     { Bad_Opcode },
7153     { Bad_Opcode },
7154     { Bad_Opcode },
7155     { Bad_Opcode },
7156     { Bad_Opcode },
7157     { Bad_Opcode },
7158     { Bad_Opcode },
7159     /* 60 */
7160     { Bad_Opcode },
7161     { Bad_Opcode },
7162     { Bad_Opcode },
7163     { Bad_Opcode },
7164     { Bad_Opcode },
7165     { Bad_Opcode },
7166     { Bad_Opcode },
7167     { Bad_Opcode },
7168     /* 68 */
7169     { Bad_Opcode },
7170     { Bad_Opcode },
7171     { Bad_Opcode },
7172     { Bad_Opcode },
7173     { Bad_Opcode },
7174     { Bad_Opcode },
7175     { Bad_Opcode },
7176     { Bad_Opcode },
7177     /* 70 */
7178     { Bad_Opcode },
7179     { Bad_Opcode },
7180     { Bad_Opcode },
7181     { Bad_Opcode },
7182     { Bad_Opcode },
7183     { Bad_Opcode },
7184     { Bad_Opcode },
7185     { Bad_Opcode },
7186     /* 78 */
7187     { Bad_Opcode },
7188     { Bad_Opcode },
7189     { Bad_Opcode },
7190     { Bad_Opcode },
7191     { Bad_Opcode },
7192     { Bad_Opcode },
7193     { Bad_Opcode },
7194     { Bad_Opcode },
7195     /* 80 */
7196     { Bad_Opcode },
7197     { Bad_Opcode },
7198     { Bad_Opcode },
7199     { Bad_Opcode },
7200     { Bad_Opcode },
7201     { Bad_Opcode },
7202     { Bad_Opcode },
7203     { Bad_Opcode },
7204     /* 88 */
7205     { Bad_Opcode },
7206     { Bad_Opcode },
7207     { Bad_Opcode },
7208     { Bad_Opcode },
7209     { Bad_Opcode },
7210     { Bad_Opcode },
7211     { Bad_Opcode },
7212     { Bad_Opcode },
7213     /* 90 */
7214     { Bad_Opcode },
7215     { Bad_Opcode },
7216     { Bad_Opcode },
7217     { Bad_Opcode },
7218     { Bad_Opcode },
7219     { Bad_Opcode },
7220     { Bad_Opcode },
7221     { Bad_Opcode },
7222     /* 98 */
7223     { Bad_Opcode },
7224     { Bad_Opcode },
7225     { Bad_Opcode },
7226     { Bad_Opcode },
7227     { Bad_Opcode },
7228     { Bad_Opcode },
7229     { Bad_Opcode },
7230     { Bad_Opcode },
7231     /* a0 */
7232     { Bad_Opcode },
7233     { Bad_Opcode },
7234     { Bad_Opcode },
7235     { Bad_Opcode },
7236     { Bad_Opcode },
7237     { Bad_Opcode },
7238     { Bad_Opcode },
7239     { Bad_Opcode },
7240     /* a8 */
7241     { Bad_Opcode },
7242     { Bad_Opcode },
7243     { Bad_Opcode },
7244     { Bad_Opcode },
7245     { Bad_Opcode },
7246     { Bad_Opcode },
7247     { Bad_Opcode },
7248     { Bad_Opcode },
7249     /* b0 */
7250     { Bad_Opcode },
7251     { Bad_Opcode },
7252     { Bad_Opcode },
7253     { Bad_Opcode },
7254     { Bad_Opcode },
7255     { Bad_Opcode },
7256     { Bad_Opcode },
7257     { Bad_Opcode },
7258     /* b8 */
7259     { Bad_Opcode },
7260     { Bad_Opcode },
7261     { Bad_Opcode },
7262     { Bad_Opcode },
7263     { Bad_Opcode },
7264     { Bad_Opcode },
7265     { Bad_Opcode },
7266     { Bad_Opcode },
7267     /* c0 */
7268     { Bad_Opcode },
7269     { Bad_Opcode },
7270     { Bad_Opcode },
7271     { Bad_Opcode },
7272     { Bad_Opcode },
7273     { Bad_Opcode },
7274     { Bad_Opcode },
7275     { Bad_Opcode },
7276     /* c8 */
7277     { Bad_Opcode },
7278     { Bad_Opcode },
7279     { Bad_Opcode },
7280     { Bad_Opcode },
7281     { Bad_Opcode },
7282     { Bad_Opcode },
7283     { Bad_Opcode },
7284     { Bad_Opcode },
7285     /* d0 */
7286     { Bad_Opcode },
7287     { Bad_Opcode },
7288     { Bad_Opcode },
7289     { Bad_Opcode },
7290     { Bad_Opcode },
7291     { Bad_Opcode },
7292     { Bad_Opcode },
7293     { Bad_Opcode },
7294     /* d8 */
7295     { Bad_Opcode },
7296     { Bad_Opcode },
7297     { Bad_Opcode },
7298     { Bad_Opcode },
7299     { Bad_Opcode },
7300     { Bad_Opcode },
7301     { Bad_Opcode },
7302     { Bad_Opcode },
7303     /* e0 */
7304     { Bad_Opcode },
7305     { Bad_Opcode },
7306     { Bad_Opcode },
7307     { Bad_Opcode },
7308     { Bad_Opcode },
7309     { Bad_Opcode },
7310     { Bad_Opcode },
7311     { Bad_Opcode },
7312     /* e8 */
7313     { Bad_Opcode },
7314     { Bad_Opcode },
7315     { Bad_Opcode },
7316     { Bad_Opcode },
7317     { Bad_Opcode },
7318     { Bad_Opcode },
7319     { Bad_Opcode },
7320     { Bad_Opcode },
7321     /* f0 */
7322     { Bad_Opcode },
7323     { Bad_Opcode },
7324     { Bad_Opcode },
7325     { Bad_Opcode },
7326     { Bad_Opcode },
7327     { Bad_Opcode },
7328     { Bad_Opcode },
7329     { Bad_Opcode },
7330     /* f8 */
7331     { Bad_Opcode },
7332     { Bad_Opcode },
7333     { Bad_Opcode },
7334     { Bad_Opcode },
7335     { Bad_Opcode },
7336     { Bad_Opcode },
7337     { Bad_Opcode },
7338     { Bad_Opcode },
7339   },
7340 };
7341 
7342 static const struct dis386 vex_table[][256] = {
7343   /* VEX_0F */
7344   {
7345     /* 00 */
7346     { Bad_Opcode },
7347     { Bad_Opcode },
7348     { Bad_Opcode },
7349     { Bad_Opcode },
7350     { Bad_Opcode },
7351     { Bad_Opcode },
7352     { Bad_Opcode },
7353     { Bad_Opcode },
7354     /* 08 */
7355     { Bad_Opcode },
7356     { Bad_Opcode },
7357     { Bad_Opcode },
7358     { Bad_Opcode },
7359     { Bad_Opcode },
7360     { Bad_Opcode },
7361     { Bad_Opcode },
7362     { Bad_Opcode },
7363     /* 10 */
7364     { PREFIX_TABLE (PREFIX_VEX_0F10) },
7365     { PREFIX_TABLE (PREFIX_VEX_0F11) },
7366     { PREFIX_TABLE (PREFIX_VEX_0F12) },
7367     { MOD_TABLE (MOD_VEX_0F13) },
7368     { VEX_W_TABLE (VEX_W_0F14) },
7369     { VEX_W_TABLE (VEX_W_0F15) },
7370     { PREFIX_TABLE (PREFIX_VEX_0F16) },
7371     { MOD_TABLE (MOD_VEX_0F17) },
7372     /* 18 */
7373     { Bad_Opcode },
7374     { Bad_Opcode },
7375     { Bad_Opcode },
7376     { Bad_Opcode },
7377     { Bad_Opcode },
7378     { Bad_Opcode },
7379     { Bad_Opcode },
7380     { Bad_Opcode },
7381     /* 20 */
7382     { Bad_Opcode },
7383     { Bad_Opcode },
7384     { Bad_Opcode },
7385     { Bad_Opcode },
7386     { Bad_Opcode },
7387     { Bad_Opcode },
7388     { Bad_Opcode },
7389     { Bad_Opcode },
7390     /* 28 */
7391     { VEX_W_TABLE (VEX_W_0F28) },
7392     { VEX_W_TABLE (VEX_W_0F29) },
7393     { PREFIX_TABLE (PREFIX_VEX_0F2A) },
7394     { MOD_TABLE (MOD_VEX_0F2B) },
7395     { PREFIX_TABLE (PREFIX_VEX_0F2C) },
7396     { PREFIX_TABLE (PREFIX_VEX_0F2D) },
7397     { PREFIX_TABLE (PREFIX_VEX_0F2E) },
7398     { PREFIX_TABLE (PREFIX_VEX_0F2F) },
7399     /* 30 */
7400     { Bad_Opcode },
7401     { Bad_Opcode },
7402     { Bad_Opcode },
7403     { Bad_Opcode },
7404     { Bad_Opcode },
7405     { Bad_Opcode },
7406     { Bad_Opcode },
7407     { Bad_Opcode },
7408     /* 38 */
7409     { Bad_Opcode },
7410     { Bad_Opcode },
7411     { Bad_Opcode },
7412     { Bad_Opcode },
7413     { Bad_Opcode },
7414     { Bad_Opcode },
7415     { Bad_Opcode },
7416     { Bad_Opcode },
7417     /* 40 */
7418     { Bad_Opcode },
7419     { Bad_Opcode },
7420     { Bad_Opcode },
7421     { Bad_Opcode },
7422     { Bad_Opcode },
7423     { Bad_Opcode },
7424     { Bad_Opcode },
7425     { Bad_Opcode },
7426     /* 48 */
7427     { Bad_Opcode },
7428     { Bad_Opcode },
7429     { Bad_Opcode },
7430     { Bad_Opcode },
7431     { Bad_Opcode },
7432     { Bad_Opcode },
7433     { Bad_Opcode },
7434     { Bad_Opcode },
7435     /* 50 */
7436     { MOD_TABLE (MOD_VEX_0F50) },
7437     { PREFIX_TABLE (PREFIX_VEX_0F51) },
7438     { PREFIX_TABLE (PREFIX_VEX_0F52) },
7439     { PREFIX_TABLE (PREFIX_VEX_0F53) },
7440     { "vandpX",		{ XM, Vex, EXx } },
7441     { "vandnpX",	{ XM, Vex, EXx } },
7442     { "vorpX",		{ XM, Vex, EXx } },
7443     { "vxorpX",		{ XM, Vex, EXx } },
7444     /* 58 */
7445     { PREFIX_TABLE (PREFIX_VEX_0F58) },
7446     { PREFIX_TABLE (PREFIX_VEX_0F59) },
7447     { PREFIX_TABLE (PREFIX_VEX_0F5A) },
7448     { PREFIX_TABLE (PREFIX_VEX_0F5B) },
7449     { PREFIX_TABLE (PREFIX_VEX_0F5C) },
7450     { PREFIX_TABLE (PREFIX_VEX_0F5D) },
7451     { PREFIX_TABLE (PREFIX_VEX_0F5E) },
7452     { PREFIX_TABLE (PREFIX_VEX_0F5F) },
7453     /* 60 */
7454     { PREFIX_TABLE (PREFIX_VEX_0F60) },
7455     { PREFIX_TABLE (PREFIX_VEX_0F61) },
7456     { PREFIX_TABLE (PREFIX_VEX_0F62) },
7457     { PREFIX_TABLE (PREFIX_VEX_0F63) },
7458     { PREFIX_TABLE (PREFIX_VEX_0F64) },
7459     { PREFIX_TABLE (PREFIX_VEX_0F65) },
7460     { PREFIX_TABLE (PREFIX_VEX_0F66) },
7461     { PREFIX_TABLE (PREFIX_VEX_0F67) },
7462     /* 68 */
7463     { PREFIX_TABLE (PREFIX_VEX_0F68) },
7464     { PREFIX_TABLE (PREFIX_VEX_0F69) },
7465     { PREFIX_TABLE (PREFIX_VEX_0F6A) },
7466     { PREFIX_TABLE (PREFIX_VEX_0F6B) },
7467     { PREFIX_TABLE (PREFIX_VEX_0F6C) },
7468     { PREFIX_TABLE (PREFIX_VEX_0F6D) },
7469     { PREFIX_TABLE (PREFIX_VEX_0F6E) },
7470     { PREFIX_TABLE (PREFIX_VEX_0F6F) },
7471     /* 70 */
7472     { PREFIX_TABLE (PREFIX_VEX_0F70) },
7473     { REG_TABLE (REG_VEX_0F71) },
7474     { REG_TABLE (REG_VEX_0F72) },
7475     { REG_TABLE (REG_VEX_0F73) },
7476     { PREFIX_TABLE (PREFIX_VEX_0F74) },
7477     { PREFIX_TABLE (PREFIX_VEX_0F75) },
7478     { PREFIX_TABLE (PREFIX_VEX_0F76) },
7479     { PREFIX_TABLE (PREFIX_VEX_0F77) },
7480     /* 78 */
7481     { Bad_Opcode },
7482     { Bad_Opcode },
7483     { Bad_Opcode },
7484     { Bad_Opcode },
7485     { PREFIX_TABLE (PREFIX_VEX_0F7C) },
7486     { PREFIX_TABLE (PREFIX_VEX_0F7D) },
7487     { PREFIX_TABLE (PREFIX_VEX_0F7E) },
7488     { PREFIX_TABLE (PREFIX_VEX_0F7F) },
7489     /* 80 */
7490     { Bad_Opcode },
7491     { Bad_Opcode },
7492     { Bad_Opcode },
7493     { Bad_Opcode },
7494     { Bad_Opcode },
7495     { Bad_Opcode },
7496     { Bad_Opcode },
7497     { Bad_Opcode },
7498     /* 88 */
7499     { Bad_Opcode },
7500     { Bad_Opcode },
7501     { Bad_Opcode },
7502     { Bad_Opcode },
7503     { Bad_Opcode },
7504     { Bad_Opcode },
7505     { Bad_Opcode },
7506     { Bad_Opcode },
7507     /* 90 */
7508     { Bad_Opcode },
7509     { Bad_Opcode },
7510     { Bad_Opcode },
7511     { Bad_Opcode },
7512     { Bad_Opcode },
7513     { Bad_Opcode },
7514     { Bad_Opcode },
7515     { Bad_Opcode },
7516     /* 98 */
7517     { Bad_Opcode },
7518     { Bad_Opcode },
7519     { Bad_Opcode },
7520     { Bad_Opcode },
7521     { Bad_Opcode },
7522     { Bad_Opcode },
7523     { Bad_Opcode },
7524     { Bad_Opcode },
7525     /* a0 */
7526     { Bad_Opcode },
7527     { Bad_Opcode },
7528     { Bad_Opcode },
7529     { Bad_Opcode },
7530     { Bad_Opcode },
7531     { Bad_Opcode },
7532     { Bad_Opcode },
7533     { Bad_Opcode },
7534     /* a8 */
7535     { Bad_Opcode },
7536     { Bad_Opcode },
7537     { Bad_Opcode },
7538     { Bad_Opcode },
7539     { Bad_Opcode },
7540     { Bad_Opcode },
7541     { REG_TABLE (REG_VEX_0FAE) },
7542     { Bad_Opcode },
7543     /* b0 */
7544     { Bad_Opcode },
7545     { Bad_Opcode },
7546     { Bad_Opcode },
7547     { Bad_Opcode },
7548     { Bad_Opcode },
7549     { Bad_Opcode },
7550     { Bad_Opcode },
7551     { Bad_Opcode },
7552     /* b8 */
7553     { Bad_Opcode },
7554     { Bad_Opcode },
7555     { Bad_Opcode },
7556     { Bad_Opcode },
7557     { Bad_Opcode },
7558     { Bad_Opcode },
7559     { Bad_Opcode },
7560     { Bad_Opcode },
7561     /* c0 */
7562     { Bad_Opcode },
7563     { Bad_Opcode },
7564     { PREFIX_TABLE (PREFIX_VEX_0FC2) },
7565     { Bad_Opcode },
7566     { PREFIX_TABLE (PREFIX_VEX_0FC4) },
7567     { PREFIX_TABLE (PREFIX_VEX_0FC5) },
7568     { "vshufpX",	{ XM, Vex, EXx, Ib } },
7569     { Bad_Opcode },
7570     /* c8 */
7571     { Bad_Opcode },
7572     { Bad_Opcode },
7573     { Bad_Opcode },
7574     { Bad_Opcode },
7575     { Bad_Opcode },
7576     { Bad_Opcode },
7577     { Bad_Opcode },
7578     { Bad_Opcode },
7579     /* d0 */
7580     { PREFIX_TABLE (PREFIX_VEX_0FD0) },
7581     { PREFIX_TABLE (PREFIX_VEX_0FD1) },
7582     { PREFIX_TABLE (PREFIX_VEX_0FD2) },
7583     { PREFIX_TABLE (PREFIX_VEX_0FD3) },
7584     { PREFIX_TABLE (PREFIX_VEX_0FD4) },
7585     { PREFIX_TABLE (PREFIX_VEX_0FD5) },
7586     { PREFIX_TABLE (PREFIX_VEX_0FD6) },
7587     { PREFIX_TABLE (PREFIX_VEX_0FD7) },
7588     /* d8 */
7589     { PREFIX_TABLE (PREFIX_VEX_0FD8) },
7590     { PREFIX_TABLE (PREFIX_VEX_0FD9) },
7591     { PREFIX_TABLE (PREFIX_VEX_0FDA) },
7592     { PREFIX_TABLE (PREFIX_VEX_0FDB) },
7593     { PREFIX_TABLE (PREFIX_VEX_0FDC) },
7594     { PREFIX_TABLE (PREFIX_VEX_0FDD) },
7595     { PREFIX_TABLE (PREFIX_VEX_0FDE) },
7596     { PREFIX_TABLE (PREFIX_VEX_0FDF) },
7597     /* e0 */
7598     { PREFIX_TABLE (PREFIX_VEX_0FE0) },
7599     { PREFIX_TABLE (PREFIX_VEX_0FE1) },
7600     { PREFIX_TABLE (PREFIX_VEX_0FE2) },
7601     { PREFIX_TABLE (PREFIX_VEX_0FE3) },
7602     { PREFIX_TABLE (PREFIX_VEX_0FE4) },
7603     { PREFIX_TABLE (PREFIX_VEX_0FE5) },
7604     { PREFIX_TABLE (PREFIX_VEX_0FE6) },
7605     { PREFIX_TABLE (PREFIX_VEX_0FE7) },
7606     /* e8 */
7607     { PREFIX_TABLE (PREFIX_VEX_0FE8) },
7608     { PREFIX_TABLE (PREFIX_VEX_0FE9) },
7609     { PREFIX_TABLE (PREFIX_VEX_0FEA) },
7610     { PREFIX_TABLE (PREFIX_VEX_0FEB) },
7611     { PREFIX_TABLE (PREFIX_VEX_0FEC) },
7612     { PREFIX_TABLE (PREFIX_VEX_0FED) },
7613     { PREFIX_TABLE (PREFIX_VEX_0FEE) },
7614     { PREFIX_TABLE (PREFIX_VEX_0FEF) },
7615     /* f0 */
7616     { PREFIX_TABLE (PREFIX_VEX_0FF0) },
7617     { PREFIX_TABLE (PREFIX_VEX_0FF1) },
7618     { PREFIX_TABLE (PREFIX_VEX_0FF2) },
7619     { PREFIX_TABLE (PREFIX_VEX_0FF3) },
7620     { PREFIX_TABLE (PREFIX_VEX_0FF4) },
7621     { PREFIX_TABLE (PREFIX_VEX_0FF5) },
7622     { PREFIX_TABLE (PREFIX_VEX_0FF6) },
7623     { PREFIX_TABLE (PREFIX_VEX_0FF7) },
7624     /* f8 */
7625     { PREFIX_TABLE (PREFIX_VEX_0FF8) },
7626     { PREFIX_TABLE (PREFIX_VEX_0FF9) },
7627     { PREFIX_TABLE (PREFIX_VEX_0FFA) },
7628     { PREFIX_TABLE (PREFIX_VEX_0FFB) },
7629     { PREFIX_TABLE (PREFIX_VEX_0FFC) },
7630     { PREFIX_TABLE (PREFIX_VEX_0FFD) },
7631     { PREFIX_TABLE (PREFIX_VEX_0FFE) },
7632     { Bad_Opcode },
7633   },
7634   /* VEX_0F38 */
7635   {
7636     /* 00 */
7637     { PREFIX_TABLE (PREFIX_VEX_0F3800) },
7638     { PREFIX_TABLE (PREFIX_VEX_0F3801) },
7639     { PREFIX_TABLE (PREFIX_VEX_0F3802) },
7640     { PREFIX_TABLE (PREFIX_VEX_0F3803) },
7641     { PREFIX_TABLE (PREFIX_VEX_0F3804) },
7642     { PREFIX_TABLE (PREFIX_VEX_0F3805) },
7643     { PREFIX_TABLE (PREFIX_VEX_0F3806) },
7644     { PREFIX_TABLE (PREFIX_VEX_0F3807) },
7645     /* 08 */
7646     { PREFIX_TABLE (PREFIX_VEX_0F3808) },
7647     { PREFIX_TABLE (PREFIX_VEX_0F3809) },
7648     { PREFIX_TABLE (PREFIX_VEX_0F380A) },
7649     { PREFIX_TABLE (PREFIX_VEX_0F380B) },
7650     { PREFIX_TABLE (PREFIX_VEX_0F380C) },
7651     { PREFIX_TABLE (PREFIX_VEX_0F380D) },
7652     { PREFIX_TABLE (PREFIX_VEX_0F380E) },
7653     { PREFIX_TABLE (PREFIX_VEX_0F380F) },
7654     /* 10 */
7655     { Bad_Opcode },
7656     { Bad_Opcode },
7657     { Bad_Opcode },
7658     { PREFIX_TABLE (PREFIX_VEX_0F3813) },
7659     { Bad_Opcode },
7660     { Bad_Opcode },
7661     { Bad_Opcode },
7662     { PREFIX_TABLE (PREFIX_VEX_0F3817) },
7663     /* 18 */
7664     { PREFIX_TABLE (PREFIX_VEX_0F3818) },
7665     { PREFIX_TABLE (PREFIX_VEX_0F3819) },
7666     { PREFIX_TABLE (PREFIX_VEX_0F381A) },
7667     { Bad_Opcode },
7668     { PREFIX_TABLE (PREFIX_VEX_0F381C) },
7669     { PREFIX_TABLE (PREFIX_VEX_0F381D) },
7670     { PREFIX_TABLE (PREFIX_VEX_0F381E) },
7671     { Bad_Opcode },
7672     /* 20 */
7673     { PREFIX_TABLE (PREFIX_VEX_0F3820) },
7674     { PREFIX_TABLE (PREFIX_VEX_0F3821) },
7675     { PREFIX_TABLE (PREFIX_VEX_0F3822) },
7676     { PREFIX_TABLE (PREFIX_VEX_0F3823) },
7677     { PREFIX_TABLE (PREFIX_VEX_0F3824) },
7678     { PREFIX_TABLE (PREFIX_VEX_0F3825) },
7679     { Bad_Opcode },
7680     { Bad_Opcode },
7681     /* 28 */
7682     { PREFIX_TABLE (PREFIX_VEX_0F3828) },
7683     { PREFIX_TABLE (PREFIX_VEX_0F3829) },
7684     { PREFIX_TABLE (PREFIX_VEX_0F382A) },
7685     { PREFIX_TABLE (PREFIX_VEX_0F382B) },
7686     { PREFIX_TABLE (PREFIX_VEX_0F382C) },
7687     { PREFIX_TABLE (PREFIX_VEX_0F382D) },
7688     { PREFIX_TABLE (PREFIX_VEX_0F382E) },
7689     { PREFIX_TABLE (PREFIX_VEX_0F382F) },
7690     /* 30 */
7691     { PREFIX_TABLE (PREFIX_VEX_0F3830) },
7692     { PREFIX_TABLE (PREFIX_VEX_0F3831) },
7693     { PREFIX_TABLE (PREFIX_VEX_0F3832) },
7694     { PREFIX_TABLE (PREFIX_VEX_0F3833) },
7695     { PREFIX_TABLE (PREFIX_VEX_0F3834) },
7696     { PREFIX_TABLE (PREFIX_VEX_0F3835) },
7697     { Bad_Opcode },
7698     { PREFIX_TABLE (PREFIX_VEX_0F3837) },
7699     /* 38 */
7700     { PREFIX_TABLE (PREFIX_VEX_0F3838) },
7701     { PREFIX_TABLE (PREFIX_VEX_0F3839) },
7702     { PREFIX_TABLE (PREFIX_VEX_0F383A) },
7703     { PREFIX_TABLE (PREFIX_VEX_0F383B) },
7704     { PREFIX_TABLE (PREFIX_VEX_0F383C) },
7705     { PREFIX_TABLE (PREFIX_VEX_0F383D) },
7706     { PREFIX_TABLE (PREFIX_VEX_0F383E) },
7707     { PREFIX_TABLE (PREFIX_VEX_0F383F) },
7708     /* 40 */
7709     { PREFIX_TABLE (PREFIX_VEX_0F3840) },
7710     { PREFIX_TABLE (PREFIX_VEX_0F3841) },
7711     { Bad_Opcode },
7712     { Bad_Opcode },
7713     { Bad_Opcode },
7714     { Bad_Opcode },
7715     { Bad_Opcode },
7716     { Bad_Opcode },
7717     /* 48 */
7718     { Bad_Opcode },
7719     { Bad_Opcode },
7720     { Bad_Opcode },
7721     { Bad_Opcode },
7722     { Bad_Opcode },
7723     { Bad_Opcode },
7724     { Bad_Opcode },
7725     { Bad_Opcode },
7726     /* 50 */
7727     { Bad_Opcode },
7728     { Bad_Opcode },
7729     { Bad_Opcode },
7730     { Bad_Opcode },
7731     { Bad_Opcode },
7732     { Bad_Opcode },
7733     { Bad_Opcode },
7734     { Bad_Opcode },
7735     /* 58 */
7736     { Bad_Opcode },
7737     { Bad_Opcode },
7738     { Bad_Opcode },
7739     { Bad_Opcode },
7740     { Bad_Opcode },
7741     { Bad_Opcode },
7742     { Bad_Opcode },
7743     { Bad_Opcode },
7744     /* 60 */
7745     { Bad_Opcode },
7746     { Bad_Opcode },
7747     { Bad_Opcode },
7748     { Bad_Opcode },
7749     { Bad_Opcode },
7750     { Bad_Opcode },
7751     { Bad_Opcode },
7752     { Bad_Opcode },
7753     /* 68 */
7754     { Bad_Opcode },
7755     { Bad_Opcode },
7756     { Bad_Opcode },
7757     { Bad_Opcode },
7758     { Bad_Opcode },
7759     { Bad_Opcode },
7760     { Bad_Opcode },
7761     { Bad_Opcode },
7762     /* 70 */
7763     { Bad_Opcode },
7764     { Bad_Opcode },
7765     { Bad_Opcode },
7766     { Bad_Opcode },
7767     { Bad_Opcode },
7768     { Bad_Opcode },
7769     { Bad_Opcode },
7770     { Bad_Opcode },
7771     /* 78 */
7772     { Bad_Opcode },
7773     { Bad_Opcode },
7774     { Bad_Opcode },
7775     { Bad_Opcode },
7776     { Bad_Opcode },
7777     { Bad_Opcode },
7778     { Bad_Opcode },
7779     { Bad_Opcode },
7780     /* 80 */
7781     { Bad_Opcode },
7782     { Bad_Opcode },
7783     { Bad_Opcode },
7784     { Bad_Opcode },
7785     { Bad_Opcode },
7786     { Bad_Opcode },
7787     { Bad_Opcode },
7788     { Bad_Opcode },
7789     /* 88 */
7790     { Bad_Opcode },
7791     { Bad_Opcode },
7792     { Bad_Opcode },
7793     { Bad_Opcode },
7794     { Bad_Opcode },
7795     { Bad_Opcode },
7796     { Bad_Opcode },
7797     { Bad_Opcode },
7798     /* 90 */
7799     { Bad_Opcode },
7800     { Bad_Opcode },
7801     { Bad_Opcode },
7802     { Bad_Opcode },
7803     { Bad_Opcode },
7804     { Bad_Opcode },
7805     { PREFIX_TABLE (PREFIX_VEX_0F3896) },
7806     { PREFIX_TABLE (PREFIX_VEX_0F3897) },
7807     /* 98 */
7808     { PREFIX_TABLE (PREFIX_VEX_0F3898) },
7809     { PREFIX_TABLE (PREFIX_VEX_0F3899) },
7810     { PREFIX_TABLE (PREFIX_VEX_0F389A) },
7811     { PREFIX_TABLE (PREFIX_VEX_0F389B) },
7812     { PREFIX_TABLE (PREFIX_VEX_0F389C) },
7813     { PREFIX_TABLE (PREFIX_VEX_0F389D) },
7814     { PREFIX_TABLE (PREFIX_VEX_0F389E) },
7815     { PREFIX_TABLE (PREFIX_VEX_0F389F) },
7816     /* a0 */
7817     { Bad_Opcode },
7818     { Bad_Opcode },
7819     { Bad_Opcode },
7820     { Bad_Opcode },
7821     { Bad_Opcode },
7822     { Bad_Opcode },
7823     { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
7824     { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
7825     /* a8 */
7826     { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
7827     { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
7828     { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
7829     { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
7830     { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
7831     { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
7832     { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
7833     { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
7834     /* b0 */
7835     { Bad_Opcode },
7836     { Bad_Opcode },
7837     { Bad_Opcode },
7838     { Bad_Opcode },
7839     { Bad_Opcode },
7840     { Bad_Opcode },
7841     { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
7842     { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
7843     /* b8 */
7844     { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
7845     { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
7846     { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
7847     { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
7848     { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
7849     { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
7850     { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
7851     { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
7852     /* c0 */
7853     { Bad_Opcode },
7854     { Bad_Opcode },
7855     { Bad_Opcode },
7856     { Bad_Opcode },
7857     { Bad_Opcode },
7858     { Bad_Opcode },
7859     { Bad_Opcode },
7860     { Bad_Opcode },
7861     /* c8 */
7862     { Bad_Opcode },
7863     { Bad_Opcode },
7864     { Bad_Opcode },
7865     { Bad_Opcode },
7866     { Bad_Opcode },
7867     { Bad_Opcode },
7868     { Bad_Opcode },
7869     { Bad_Opcode },
7870     /* d0 */
7871     { Bad_Opcode },
7872     { Bad_Opcode },
7873     { Bad_Opcode },
7874     { Bad_Opcode },
7875     { Bad_Opcode },
7876     { Bad_Opcode },
7877     { Bad_Opcode },
7878     { Bad_Opcode },
7879     /* d8 */
7880     { Bad_Opcode },
7881     { Bad_Opcode },
7882     { Bad_Opcode },
7883     { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
7884     { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
7885     { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
7886     { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
7887     { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
7888     /* e0 */
7889     { Bad_Opcode },
7890     { Bad_Opcode },
7891     { Bad_Opcode },
7892     { Bad_Opcode },
7893     { Bad_Opcode },
7894     { Bad_Opcode },
7895     { Bad_Opcode },
7896     { Bad_Opcode },
7897     /* e8 */
7898     { Bad_Opcode },
7899     { Bad_Opcode },
7900     { Bad_Opcode },
7901     { Bad_Opcode },
7902     { Bad_Opcode },
7903     { Bad_Opcode },
7904     { Bad_Opcode },
7905     { Bad_Opcode },
7906     /* f0 */
7907     { Bad_Opcode },
7908     { Bad_Opcode },
7909     { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
7910     { REG_TABLE (REG_VEX_0F38F3) },
7911     { Bad_Opcode },
7912     { Bad_Opcode },
7913     { Bad_Opcode },
7914     { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
7915     /* f8 */
7916     { Bad_Opcode },
7917     { Bad_Opcode },
7918     { Bad_Opcode },
7919     { Bad_Opcode },
7920     { Bad_Opcode },
7921     { Bad_Opcode },
7922     { Bad_Opcode },
7923     { Bad_Opcode },
7924   },
7925   /* VEX_0F3A */
7926   {
7927     /* 00 */
7928     { Bad_Opcode },
7929     { Bad_Opcode },
7930     { Bad_Opcode },
7931     { Bad_Opcode },
7932     { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
7933     { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
7934     { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
7935     { Bad_Opcode },
7936     /* 08 */
7937     { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
7938     { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
7939     { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
7940     { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
7941     { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
7942     { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
7943     { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
7944     { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
7945     /* 10 */
7946     { Bad_Opcode },
7947     { Bad_Opcode },
7948     { Bad_Opcode },
7949     { Bad_Opcode },
7950     { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
7951     { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
7952     { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
7953     { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
7954     /* 18 */
7955     { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
7956     { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
7957     { Bad_Opcode },
7958     { Bad_Opcode },
7959     { Bad_Opcode },
7960     { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
7961     { Bad_Opcode },
7962     { Bad_Opcode },
7963     /* 20 */
7964     { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
7965     { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
7966     { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
7967     { Bad_Opcode },
7968     { Bad_Opcode },
7969     { Bad_Opcode },
7970     { Bad_Opcode },
7971     { Bad_Opcode },
7972     /* 28 */
7973     { Bad_Opcode },
7974     { Bad_Opcode },
7975     { Bad_Opcode },
7976     { Bad_Opcode },
7977     { Bad_Opcode },
7978     { Bad_Opcode },
7979     { Bad_Opcode },
7980     { Bad_Opcode },
7981     /* 30 */
7982     { Bad_Opcode },
7983     { Bad_Opcode },
7984     { Bad_Opcode },
7985     { Bad_Opcode },
7986     { Bad_Opcode },
7987     { Bad_Opcode },
7988     { Bad_Opcode },
7989     { Bad_Opcode },
7990     /* 38 */
7991     { Bad_Opcode },
7992     { Bad_Opcode },
7993     { Bad_Opcode },
7994     { Bad_Opcode },
7995     { Bad_Opcode },
7996     { Bad_Opcode },
7997     { Bad_Opcode },
7998     { Bad_Opcode },
7999     /* 40 */
8000     { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
8001     { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
8002     { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
8003     { Bad_Opcode },
8004     { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
8005     { Bad_Opcode },
8006     { Bad_Opcode },
8007     { Bad_Opcode },
8008     /* 48 */
8009     { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
8010     { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
8011     { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
8012     { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
8013     { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
8014     { Bad_Opcode },
8015     { Bad_Opcode },
8016     { Bad_Opcode },
8017     /* 50 */
8018     { Bad_Opcode },
8019     { Bad_Opcode },
8020     { Bad_Opcode },
8021     { Bad_Opcode },
8022     { Bad_Opcode },
8023     { Bad_Opcode },
8024     { Bad_Opcode },
8025     { Bad_Opcode },
8026     /* 58 */
8027     { Bad_Opcode },
8028     { Bad_Opcode },
8029     { Bad_Opcode },
8030     { Bad_Opcode },
8031     { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
8032     { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
8033     { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
8034     { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
8035     /* 60 */
8036     { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
8037     { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
8038     { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
8039     { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
8040     { Bad_Opcode },
8041     { Bad_Opcode },
8042     { Bad_Opcode },
8043     { Bad_Opcode },
8044     /* 68 */
8045     { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
8046     { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
8047     { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
8048     { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
8049     { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
8050     { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
8051     { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
8052     { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
8053     /* 70 */
8054     { Bad_Opcode },
8055     { Bad_Opcode },
8056     { Bad_Opcode },
8057     { Bad_Opcode },
8058     { Bad_Opcode },
8059     { Bad_Opcode },
8060     { Bad_Opcode },
8061     { Bad_Opcode },
8062     /* 78 */
8063     { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
8064     { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
8065     { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
8066     { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
8067     { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
8068     { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
8069     { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
8070     { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
8071     /* 80 */
8072     { Bad_Opcode },
8073     { Bad_Opcode },
8074     { Bad_Opcode },
8075     { Bad_Opcode },
8076     { Bad_Opcode },
8077     { Bad_Opcode },
8078     { Bad_Opcode },
8079     { Bad_Opcode },
8080     /* 88 */
8081     { Bad_Opcode },
8082     { Bad_Opcode },
8083     { Bad_Opcode },
8084     { Bad_Opcode },
8085     { Bad_Opcode },
8086     { Bad_Opcode },
8087     { Bad_Opcode },
8088     { Bad_Opcode },
8089     /* 90 */
8090     { Bad_Opcode },
8091     { Bad_Opcode },
8092     { Bad_Opcode },
8093     { Bad_Opcode },
8094     { Bad_Opcode },
8095     { Bad_Opcode },
8096     { Bad_Opcode },
8097     { Bad_Opcode },
8098     /* 98 */
8099     { Bad_Opcode },
8100     { Bad_Opcode },
8101     { Bad_Opcode },
8102     { Bad_Opcode },
8103     { Bad_Opcode },
8104     { Bad_Opcode },
8105     { Bad_Opcode },
8106     { Bad_Opcode },
8107     /* a0 */
8108     { Bad_Opcode },
8109     { Bad_Opcode },
8110     { Bad_Opcode },
8111     { Bad_Opcode },
8112     { Bad_Opcode },
8113     { Bad_Opcode },
8114     { Bad_Opcode },
8115     { Bad_Opcode },
8116     /* a8 */
8117     { Bad_Opcode },
8118     { Bad_Opcode },
8119     { Bad_Opcode },
8120     { Bad_Opcode },
8121     { Bad_Opcode },
8122     { Bad_Opcode },
8123     { Bad_Opcode },
8124     { Bad_Opcode },
8125     /* b0 */
8126     { Bad_Opcode },
8127     { Bad_Opcode },
8128     { Bad_Opcode },
8129     { Bad_Opcode },
8130     { Bad_Opcode },
8131     { Bad_Opcode },
8132     { Bad_Opcode },
8133     { Bad_Opcode },
8134     /* b8 */
8135     { Bad_Opcode },
8136     { Bad_Opcode },
8137     { Bad_Opcode },
8138     { Bad_Opcode },
8139     { Bad_Opcode },
8140     { Bad_Opcode },
8141     { Bad_Opcode },
8142     { Bad_Opcode },
8143     /* c0 */
8144     { Bad_Opcode },
8145     { Bad_Opcode },
8146     { Bad_Opcode },
8147     { Bad_Opcode },
8148     { Bad_Opcode },
8149     { Bad_Opcode },
8150     { Bad_Opcode },
8151     { Bad_Opcode },
8152     /* c8 */
8153     { Bad_Opcode },
8154     { Bad_Opcode },
8155     { Bad_Opcode },
8156     { Bad_Opcode },
8157     { Bad_Opcode },
8158     { Bad_Opcode },
8159     { Bad_Opcode },
8160     { Bad_Opcode },
8161     /* d0 */
8162     { Bad_Opcode },
8163     { Bad_Opcode },
8164     { Bad_Opcode },
8165     { Bad_Opcode },
8166     { Bad_Opcode },
8167     { Bad_Opcode },
8168     { Bad_Opcode },
8169     { Bad_Opcode },
8170     /* d8 */
8171     { Bad_Opcode },
8172     { Bad_Opcode },
8173     { Bad_Opcode },
8174     { Bad_Opcode },
8175     { Bad_Opcode },
8176     { Bad_Opcode },
8177     { Bad_Opcode },
8178     { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
8179     /* e0 */
8180     { Bad_Opcode },
8181     { Bad_Opcode },
8182     { Bad_Opcode },
8183     { Bad_Opcode },
8184     { Bad_Opcode },
8185     { Bad_Opcode },
8186     { Bad_Opcode },
8187     { Bad_Opcode },
8188     /* e8 */
8189     { Bad_Opcode },
8190     { Bad_Opcode },
8191     { Bad_Opcode },
8192     { Bad_Opcode },
8193     { Bad_Opcode },
8194     { Bad_Opcode },
8195     { Bad_Opcode },
8196     { Bad_Opcode },
8197     /* f0 */
8198     { Bad_Opcode },
8199     { Bad_Opcode },
8200     { Bad_Opcode },
8201     { Bad_Opcode },
8202     { Bad_Opcode },
8203     { Bad_Opcode },
8204     { Bad_Opcode },
8205     { Bad_Opcode },
8206     /* f8 */
8207     { Bad_Opcode },
8208     { Bad_Opcode },
8209     { Bad_Opcode },
8210     { Bad_Opcode },
8211     { Bad_Opcode },
8212     { Bad_Opcode },
8213     { Bad_Opcode },
8214     { Bad_Opcode },
8215   },
8216 };
8217 
8218 static const struct dis386 vex_len_table[][2] = {
8219   /* VEX_LEN_0F10_P_1 */
8220   {
8221     { VEX_W_TABLE (VEX_W_0F10_P_1) },
8222     { VEX_W_TABLE (VEX_W_0F10_P_1) },
8223   },
8224 
8225   /* VEX_LEN_0F10_P_3 */
8226   {
8227     { VEX_W_TABLE (VEX_W_0F10_P_3) },
8228     { VEX_W_TABLE (VEX_W_0F10_P_3) },
8229   },
8230 
8231   /* VEX_LEN_0F11_P_1 */
8232   {
8233     { VEX_W_TABLE (VEX_W_0F11_P_1) },
8234     { VEX_W_TABLE (VEX_W_0F11_P_1) },
8235   },
8236 
8237   /* VEX_LEN_0F11_P_3 */
8238   {
8239     { VEX_W_TABLE (VEX_W_0F11_P_3) },
8240     { VEX_W_TABLE (VEX_W_0F11_P_3) },
8241   },
8242 
8243   /* VEX_LEN_0F12_P_0_M_0 */
8244   {
8245     { VEX_W_TABLE (VEX_W_0F12_P_0_M_0) },
8246   },
8247 
8248   /* VEX_LEN_0F12_P_0_M_1 */
8249   {
8250     { VEX_W_TABLE (VEX_W_0F12_P_0_M_1) },
8251   },
8252 
8253   /* VEX_LEN_0F12_P_2 */
8254   {
8255     { VEX_W_TABLE (VEX_W_0F12_P_2) },
8256   },
8257 
8258   /* VEX_LEN_0F13_M_0 */
8259   {
8260     { VEX_W_TABLE (VEX_W_0F13_M_0) },
8261   },
8262 
8263   /* VEX_LEN_0F16_P_0_M_0 */
8264   {
8265     { VEX_W_TABLE (VEX_W_0F16_P_0_M_0) },
8266   },
8267 
8268   /* VEX_LEN_0F16_P_0_M_1 */
8269   {
8270     { VEX_W_TABLE (VEX_W_0F16_P_0_M_1) },
8271   },
8272 
8273   /* VEX_LEN_0F16_P_2 */
8274   {
8275     { VEX_W_TABLE (VEX_W_0F16_P_2) },
8276   },
8277 
8278   /* VEX_LEN_0F17_M_0 */
8279   {
8280     { VEX_W_TABLE (VEX_W_0F17_M_0) },
8281   },
8282 
8283   /* VEX_LEN_0F2A_P_1 */
8284   {
8285     { "vcvtsi2ss%LQ",	{ XMScalar, VexScalar, Ev } },
8286     { "vcvtsi2ss%LQ",	{ XMScalar, VexScalar, Ev } },
8287   },
8288 
8289   /* VEX_LEN_0F2A_P_3 */
8290   {
8291     { "vcvtsi2sd%LQ",	{ XMScalar, VexScalar, Ev } },
8292     { "vcvtsi2sd%LQ",	{ XMScalar, VexScalar, Ev } },
8293   },
8294 
8295   /* VEX_LEN_0F2C_P_1 */
8296   {
8297     { "vcvttss2siY",	{ Gv, EXdScalar } },
8298     { "vcvttss2siY",	{ Gv, EXdScalar } },
8299   },
8300 
8301   /* VEX_LEN_0F2C_P_3 */
8302   {
8303     { "vcvttsd2siY",	{ Gv, EXqScalar } },
8304     { "vcvttsd2siY",	{ Gv, EXqScalar } },
8305   },
8306 
8307   /* VEX_LEN_0F2D_P_1 */
8308   {
8309     { "vcvtss2siY",	{ Gv, EXdScalar } },
8310     { "vcvtss2siY",	{ Gv, EXdScalar } },
8311   },
8312 
8313   /* VEX_LEN_0F2D_P_3 */
8314   {
8315     { "vcvtsd2siY",	{ Gv, EXqScalar } },
8316     { "vcvtsd2siY",	{ Gv, EXqScalar } },
8317   },
8318 
8319   /* VEX_LEN_0F2E_P_0 */
8320   {
8321     { VEX_W_TABLE (VEX_W_0F2E_P_0) },
8322     { VEX_W_TABLE (VEX_W_0F2E_P_0) },
8323   },
8324 
8325   /* VEX_LEN_0F2E_P_2 */
8326   {
8327     { VEX_W_TABLE (VEX_W_0F2E_P_2) },
8328     { VEX_W_TABLE (VEX_W_0F2E_P_2) },
8329   },
8330 
8331   /* VEX_LEN_0F2F_P_0 */
8332   {
8333     { VEX_W_TABLE (VEX_W_0F2F_P_0) },
8334     { VEX_W_TABLE (VEX_W_0F2F_P_0) },
8335   },
8336 
8337   /* VEX_LEN_0F2F_P_2 */
8338   {
8339     { VEX_W_TABLE (VEX_W_0F2F_P_2) },
8340     { VEX_W_TABLE (VEX_W_0F2F_P_2) },
8341   },
8342 
8343   /* VEX_LEN_0F51_P_1 */
8344   {
8345     { VEX_W_TABLE (VEX_W_0F51_P_1) },
8346     { VEX_W_TABLE (VEX_W_0F51_P_1) },
8347   },
8348 
8349   /* VEX_LEN_0F51_P_3 */
8350   {
8351     { VEX_W_TABLE (VEX_W_0F51_P_3) },
8352     { VEX_W_TABLE (VEX_W_0F51_P_3) },
8353   },
8354 
8355   /* VEX_LEN_0F52_P_1 */
8356   {
8357     { VEX_W_TABLE (VEX_W_0F52_P_1) },
8358     { VEX_W_TABLE (VEX_W_0F52_P_1) },
8359   },
8360 
8361   /* VEX_LEN_0F53_P_1 */
8362   {
8363     { VEX_W_TABLE (VEX_W_0F53_P_1) },
8364     { VEX_W_TABLE (VEX_W_0F53_P_1) },
8365   },
8366 
8367   /* VEX_LEN_0F58_P_1 */
8368   {
8369     { VEX_W_TABLE (VEX_W_0F58_P_1) },
8370     { VEX_W_TABLE (VEX_W_0F58_P_1) },
8371   },
8372 
8373   /* VEX_LEN_0F58_P_3 */
8374   {
8375     { VEX_W_TABLE (VEX_W_0F58_P_3) },
8376     { VEX_W_TABLE (VEX_W_0F58_P_3) },
8377   },
8378 
8379   /* VEX_LEN_0F59_P_1 */
8380   {
8381     { VEX_W_TABLE (VEX_W_0F59_P_1) },
8382     { VEX_W_TABLE (VEX_W_0F59_P_1) },
8383   },
8384 
8385   /* VEX_LEN_0F59_P_3 */
8386   {
8387     { VEX_W_TABLE (VEX_W_0F59_P_3) },
8388     { VEX_W_TABLE (VEX_W_0F59_P_3) },
8389   },
8390 
8391   /* VEX_LEN_0F5A_P_1 */
8392   {
8393     { VEX_W_TABLE (VEX_W_0F5A_P_1) },
8394     { VEX_W_TABLE (VEX_W_0F5A_P_1) },
8395   },
8396 
8397   /* VEX_LEN_0F5A_P_3 */
8398   {
8399     { VEX_W_TABLE (VEX_W_0F5A_P_3) },
8400     { VEX_W_TABLE (VEX_W_0F5A_P_3) },
8401   },
8402 
8403   /* VEX_LEN_0F5C_P_1 */
8404   {
8405     { VEX_W_TABLE (VEX_W_0F5C_P_1) },
8406     { VEX_W_TABLE (VEX_W_0F5C_P_1) },
8407   },
8408 
8409   /* VEX_LEN_0F5C_P_3 */
8410   {
8411     { VEX_W_TABLE (VEX_W_0F5C_P_3) },
8412     { VEX_W_TABLE (VEX_W_0F5C_P_3) },
8413   },
8414 
8415   /* VEX_LEN_0F5D_P_1 */
8416   {
8417     { VEX_W_TABLE (VEX_W_0F5D_P_1) },
8418     { VEX_W_TABLE (VEX_W_0F5D_P_1) },
8419   },
8420 
8421   /* VEX_LEN_0F5D_P_3 */
8422   {
8423     { VEX_W_TABLE (VEX_W_0F5D_P_3) },
8424     { VEX_W_TABLE (VEX_W_0F5D_P_3) },
8425   },
8426 
8427   /* VEX_LEN_0F5E_P_1 */
8428   {
8429     { VEX_W_TABLE (VEX_W_0F5E_P_1) },
8430     { VEX_W_TABLE (VEX_W_0F5E_P_1) },
8431   },
8432 
8433   /* VEX_LEN_0F5E_P_3 */
8434   {
8435     { VEX_W_TABLE (VEX_W_0F5E_P_3) },
8436     { VEX_W_TABLE (VEX_W_0F5E_P_3) },
8437   },
8438 
8439   /* VEX_LEN_0F5F_P_1 */
8440   {
8441     { VEX_W_TABLE (VEX_W_0F5F_P_1) },
8442     { VEX_W_TABLE (VEX_W_0F5F_P_1) },
8443   },
8444 
8445   /* VEX_LEN_0F5F_P_3 */
8446   {
8447     { VEX_W_TABLE (VEX_W_0F5F_P_3) },
8448     { VEX_W_TABLE (VEX_W_0F5F_P_3) },
8449   },
8450 
8451   /* VEX_LEN_0F60_P_2 */
8452   {
8453     { VEX_W_TABLE (VEX_W_0F60_P_2) },
8454   },
8455 
8456   /* VEX_LEN_0F61_P_2 */
8457   {
8458     { VEX_W_TABLE (VEX_W_0F61_P_2) },
8459   },
8460 
8461   /* VEX_LEN_0F62_P_2 */
8462   {
8463     { VEX_W_TABLE (VEX_W_0F62_P_2) },
8464   },
8465 
8466   /* VEX_LEN_0F63_P_2 */
8467   {
8468     { VEX_W_TABLE (VEX_W_0F63_P_2) },
8469   },
8470 
8471   /* VEX_LEN_0F64_P_2 */
8472   {
8473     { VEX_W_TABLE (VEX_W_0F64_P_2) },
8474   },
8475 
8476   /* VEX_LEN_0F65_P_2 */
8477   {
8478     { VEX_W_TABLE (VEX_W_0F65_P_2) },
8479   },
8480 
8481   /* VEX_LEN_0F66_P_2 */
8482   {
8483     { VEX_W_TABLE (VEX_W_0F66_P_2) },
8484   },
8485 
8486   /* VEX_LEN_0F67_P_2 */
8487   {
8488     { VEX_W_TABLE (VEX_W_0F67_P_2) },
8489   },
8490 
8491   /* VEX_LEN_0F68_P_2 */
8492   {
8493     { VEX_W_TABLE (VEX_W_0F68_P_2) },
8494   },
8495 
8496   /* VEX_LEN_0F69_P_2 */
8497   {
8498     { VEX_W_TABLE (VEX_W_0F69_P_2) },
8499   },
8500 
8501   /* VEX_LEN_0F6A_P_2 */
8502   {
8503     { VEX_W_TABLE (VEX_W_0F6A_P_2) },
8504   },
8505 
8506   /* VEX_LEN_0F6B_P_2 */
8507   {
8508     { VEX_W_TABLE (VEX_W_0F6B_P_2) },
8509   },
8510 
8511   /* VEX_LEN_0F6C_P_2 */
8512   {
8513     { VEX_W_TABLE (VEX_W_0F6C_P_2) },
8514   },
8515 
8516   /* VEX_LEN_0F6D_P_2 */
8517   {
8518     { VEX_W_TABLE (VEX_W_0F6D_P_2) },
8519   },
8520 
8521   /* VEX_LEN_0F6E_P_2 */
8522   {
8523     { "vmovK",		{ XMScalar, Edq } },
8524     { "vmovK",		{ XMScalar, Edq } },
8525   },
8526 
8527   /* VEX_LEN_0F70_P_1 */
8528   {
8529     { VEX_W_TABLE (VEX_W_0F70_P_1) },
8530   },
8531 
8532   /* VEX_LEN_0F70_P_2 */
8533   {
8534     { VEX_W_TABLE (VEX_W_0F70_P_2) },
8535   },
8536 
8537   /* VEX_LEN_0F70_P_3 */
8538   {
8539     { VEX_W_TABLE (VEX_W_0F70_P_3) },
8540   },
8541 
8542   /* VEX_LEN_0F71_R_2_P_2 */
8543   {
8544     { VEX_W_TABLE (VEX_W_0F71_R_2_P_2) },
8545   },
8546 
8547   /* VEX_LEN_0F71_R_4_P_2 */
8548   {
8549     { VEX_W_TABLE (VEX_W_0F71_R_4_P_2) },
8550   },
8551 
8552   /* VEX_LEN_0F71_R_6_P_2 */
8553   {
8554     { VEX_W_TABLE (VEX_W_0F71_R_6_P_2) },
8555   },
8556 
8557   /* VEX_LEN_0F72_R_2_P_2 */
8558   {
8559     { VEX_W_TABLE (VEX_W_0F72_R_2_P_2) },
8560   },
8561 
8562   /* VEX_LEN_0F72_R_4_P_2 */
8563   {
8564     { VEX_W_TABLE (VEX_W_0F72_R_4_P_2) },
8565   },
8566 
8567   /* VEX_LEN_0F72_R_6_P_2 */
8568   {
8569     { VEX_W_TABLE (VEX_W_0F72_R_6_P_2) },
8570   },
8571 
8572   /* VEX_LEN_0F73_R_2_P_2 */
8573   {
8574     { VEX_W_TABLE (VEX_W_0F73_R_2_P_2) },
8575   },
8576 
8577   /* VEX_LEN_0F73_R_3_P_2 */
8578   {
8579     { VEX_W_TABLE (VEX_W_0F73_R_3_P_2) },
8580   },
8581 
8582   /* VEX_LEN_0F73_R_6_P_2 */
8583   {
8584     { VEX_W_TABLE (VEX_W_0F73_R_6_P_2) },
8585   },
8586 
8587   /* VEX_LEN_0F73_R_7_P_2 */
8588   {
8589     { VEX_W_TABLE (VEX_W_0F73_R_7_P_2) },
8590   },
8591 
8592   /* VEX_LEN_0F74_P_2 */
8593   {
8594     { VEX_W_TABLE (VEX_W_0F74_P_2) },
8595   },
8596 
8597   /* VEX_LEN_0F75_P_2 */
8598   {
8599     { VEX_W_TABLE (VEX_W_0F75_P_2) },
8600   },
8601 
8602   /* VEX_LEN_0F76_P_2 */
8603   {
8604     { VEX_W_TABLE (VEX_W_0F76_P_2) },
8605   },
8606 
8607   /* VEX_LEN_0F7E_P_1 */
8608   {
8609     { VEX_W_TABLE (VEX_W_0F7E_P_1) },
8610     { VEX_W_TABLE (VEX_W_0F7E_P_1) },
8611   },
8612 
8613   /* VEX_LEN_0F7E_P_2 */
8614   {
8615     { "vmovK",		{ Edq, XMScalar } },
8616     { "vmovK",		{ Edq, XMScalar } },
8617   },
8618 
8619   /* VEX_LEN_0FAE_R_2_M_0 */
8620   {
8621     { VEX_W_TABLE (VEX_W_0FAE_R_2_M_0) },
8622   },
8623 
8624   /* VEX_LEN_0FAE_R_3_M_0 */
8625   {
8626     { VEX_W_TABLE (VEX_W_0FAE_R_3_M_0) },
8627   },
8628 
8629   /* VEX_LEN_0FC2_P_1 */
8630   {
8631     { VEX_W_TABLE (VEX_W_0FC2_P_1) },
8632     { VEX_W_TABLE (VEX_W_0FC2_P_1) },
8633   },
8634 
8635   /* VEX_LEN_0FC2_P_3 */
8636   {
8637     { VEX_W_TABLE (VEX_W_0FC2_P_3) },
8638     { VEX_W_TABLE (VEX_W_0FC2_P_3) },
8639   },
8640 
8641   /* VEX_LEN_0FC4_P_2 */
8642   {
8643     { VEX_W_TABLE (VEX_W_0FC4_P_2) },
8644   },
8645 
8646   /* VEX_LEN_0FC5_P_2 */
8647   {
8648     { VEX_W_TABLE (VEX_W_0FC5_P_2) },
8649   },
8650 
8651   /* VEX_LEN_0FD1_P_2 */
8652   {
8653     { VEX_W_TABLE (VEX_W_0FD1_P_2) },
8654   },
8655 
8656   /* VEX_LEN_0FD2_P_2 */
8657   {
8658     { VEX_W_TABLE (VEX_W_0FD2_P_2) },
8659   },
8660 
8661   /* VEX_LEN_0FD3_P_2 */
8662   {
8663     { VEX_W_TABLE (VEX_W_0FD3_P_2) },
8664   },
8665 
8666   /* VEX_LEN_0FD4_P_2 */
8667   {
8668     { VEX_W_TABLE (VEX_W_0FD4_P_2) },
8669   },
8670 
8671   /* VEX_LEN_0FD5_P_2 */
8672   {
8673     { VEX_W_TABLE (VEX_W_0FD5_P_2) },
8674   },
8675 
8676   /* VEX_LEN_0FD6_P_2 */
8677   {
8678     { VEX_W_TABLE (VEX_W_0FD6_P_2) },
8679     { VEX_W_TABLE (VEX_W_0FD6_P_2) },
8680   },
8681 
8682   /* VEX_LEN_0FD7_P_2_M_1 */
8683   {
8684     { VEX_W_TABLE (VEX_W_0FD7_P_2_M_1) },
8685   },
8686 
8687   /* VEX_LEN_0FD8_P_2 */
8688   {
8689     { VEX_W_TABLE (VEX_W_0FD8_P_2) },
8690   },
8691 
8692   /* VEX_LEN_0FD9_P_2 */
8693   {
8694     { VEX_W_TABLE (VEX_W_0FD9_P_2) },
8695   },
8696 
8697   /* VEX_LEN_0FDA_P_2 */
8698   {
8699     { VEX_W_TABLE (VEX_W_0FDA_P_2) },
8700   },
8701 
8702   /* VEX_LEN_0FDB_P_2 */
8703   {
8704     { VEX_W_TABLE (VEX_W_0FDB_P_2) },
8705   },
8706 
8707   /* VEX_LEN_0FDC_P_2 */
8708   {
8709     { VEX_W_TABLE (VEX_W_0FDC_P_2) },
8710   },
8711 
8712   /* VEX_LEN_0FDD_P_2 */
8713   {
8714     { VEX_W_TABLE (VEX_W_0FDD_P_2) },
8715   },
8716 
8717   /* VEX_LEN_0FDE_P_2 */
8718   {
8719     { VEX_W_TABLE (VEX_W_0FDE_P_2) },
8720   },
8721 
8722   /* VEX_LEN_0FDF_P_2 */
8723   {
8724     { VEX_W_TABLE (VEX_W_0FDF_P_2) },
8725   },
8726 
8727   /* VEX_LEN_0FE0_P_2 */
8728   {
8729     { VEX_W_TABLE (VEX_W_0FE0_P_2) },
8730   },
8731 
8732   /* VEX_LEN_0FE1_P_2 */
8733   {
8734     { VEX_W_TABLE (VEX_W_0FE1_P_2) },
8735   },
8736 
8737   /* VEX_LEN_0FE2_P_2 */
8738   {
8739     { VEX_W_TABLE (VEX_W_0FE2_P_2) },
8740   },
8741 
8742   /* VEX_LEN_0FE3_P_2 */
8743   {
8744     { VEX_W_TABLE (VEX_W_0FE3_P_2) },
8745   },
8746 
8747   /* VEX_LEN_0FE4_P_2 */
8748   {
8749     { VEX_W_TABLE (VEX_W_0FE4_P_2) },
8750   },
8751 
8752   /* VEX_LEN_0FE5_P_2 */
8753   {
8754     { VEX_W_TABLE (VEX_W_0FE5_P_2) },
8755   },
8756 
8757   /* VEX_LEN_0FE8_P_2 */
8758   {
8759     { VEX_W_TABLE (VEX_W_0FE8_P_2) },
8760   },
8761 
8762   /* VEX_LEN_0FE9_P_2 */
8763   {
8764     { VEX_W_TABLE (VEX_W_0FE9_P_2) },
8765   },
8766 
8767   /* VEX_LEN_0FEA_P_2 */
8768   {
8769     { VEX_W_TABLE (VEX_W_0FEA_P_2) },
8770   },
8771 
8772   /* VEX_LEN_0FEB_P_2 */
8773   {
8774     { VEX_W_TABLE (VEX_W_0FEB_P_2) },
8775   },
8776 
8777   /* VEX_LEN_0FEC_P_2 */
8778   {
8779     { VEX_W_TABLE (VEX_W_0FEC_P_2) },
8780   },
8781 
8782   /* VEX_LEN_0FED_P_2 */
8783   {
8784     { VEX_W_TABLE (VEX_W_0FED_P_2) },
8785   },
8786 
8787   /* VEX_LEN_0FEE_P_2 */
8788   {
8789     { VEX_W_TABLE (VEX_W_0FEE_P_2) },
8790   },
8791 
8792   /* VEX_LEN_0FEF_P_2 */
8793   {
8794     { VEX_W_TABLE (VEX_W_0FEF_P_2) },
8795   },
8796 
8797   /* VEX_LEN_0FF1_P_2 */
8798   {
8799     { VEX_W_TABLE (VEX_W_0FF1_P_2) },
8800   },
8801 
8802   /* VEX_LEN_0FF2_P_2 */
8803   {
8804     { VEX_W_TABLE (VEX_W_0FF2_P_2) },
8805   },
8806 
8807   /* VEX_LEN_0FF3_P_2 */
8808   {
8809     { VEX_W_TABLE (VEX_W_0FF3_P_2) },
8810   },
8811 
8812   /* VEX_LEN_0FF4_P_2 */
8813   {
8814     { VEX_W_TABLE (VEX_W_0FF4_P_2) },
8815   },
8816 
8817   /* VEX_LEN_0FF5_P_2 */
8818   {
8819     { VEX_W_TABLE (VEX_W_0FF5_P_2) },
8820   },
8821 
8822   /* VEX_LEN_0FF6_P_2 */
8823   {
8824     { VEX_W_TABLE (VEX_W_0FF6_P_2) },
8825   },
8826 
8827   /* VEX_LEN_0FF7_P_2 */
8828   {
8829     { VEX_W_TABLE (VEX_W_0FF7_P_2) },
8830   },
8831 
8832   /* VEX_LEN_0FF8_P_2 */
8833   {
8834     { VEX_W_TABLE (VEX_W_0FF8_P_2) },
8835   },
8836 
8837   /* VEX_LEN_0FF9_P_2 */
8838   {
8839     { VEX_W_TABLE (VEX_W_0FF9_P_2) },
8840   },
8841 
8842   /* VEX_LEN_0FFA_P_2 */
8843   {
8844     { VEX_W_TABLE (VEX_W_0FFA_P_2) },
8845   },
8846 
8847   /* VEX_LEN_0FFB_P_2 */
8848   {
8849     { VEX_W_TABLE (VEX_W_0FFB_P_2) },
8850   },
8851 
8852   /* VEX_LEN_0FFC_P_2 */
8853   {
8854     { VEX_W_TABLE (VEX_W_0FFC_P_2) },
8855   },
8856 
8857   /* VEX_LEN_0FFD_P_2 */
8858   {
8859     { VEX_W_TABLE (VEX_W_0FFD_P_2) },
8860   },
8861 
8862   /* VEX_LEN_0FFE_P_2 */
8863   {
8864     { VEX_W_TABLE (VEX_W_0FFE_P_2) },
8865   },
8866 
8867   /* VEX_LEN_0F3800_P_2 */
8868   {
8869     { VEX_W_TABLE (VEX_W_0F3800_P_2) },
8870   },
8871 
8872   /* VEX_LEN_0F3801_P_2 */
8873   {
8874     { VEX_W_TABLE (VEX_W_0F3801_P_2) },
8875   },
8876 
8877   /* VEX_LEN_0F3802_P_2 */
8878   {
8879     { VEX_W_TABLE (VEX_W_0F3802_P_2) },
8880   },
8881 
8882   /* VEX_LEN_0F3803_P_2 */
8883   {
8884     { VEX_W_TABLE (VEX_W_0F3803_P_2) },
8885   },
8886 
8887   /* VEX_LEN_0F3804_P_2 */
8888   {
8889     { VEX_W_TABLE (VEX_W_0F3804_P_2) },
8890   },
8891 
8892   /* VEX_LEN_0F3805_P_2 */
8893   {
8894     { VEX_W_TABLE (VEX_W_0F3805_P_2) },
8895   },
8896 
8897   /* VEX_LEN_0F3806_P_2 */
8898   {
8899     { VEX_W_TABLE (VEX_W_0F3806_P_2) },
8900   },
8901 
8902   /* VEX_LEN_0F3807_P_2 */
8903   {
8904     { VEX_W_TABLE (VEX_W_0F3807_P_2) },
8905   },
8906 
8907   /* VEX_LEN_0F3808_P_2 */
8908   {
8909     { VEX_W_TABLE (VEX_W_0F3808_P_2) },
8910   },
8911 
8912   /* VEX_LEN_0F3809_P_2 */
8913   {
8914     { VEX_W_TABLE (VEX_W_0F3809_P_2) },
8915   },
8916 
8917   /* VEX_LEN_0F380A_P_2 */
8918   {
8919     { VEX_W_TABLE (VEX_W_0F380A_P_2) },
8920   },
8921 
8922   /* VEX_LEN_0F380B_P_2 */
8923   {
8924     { VEX_W_TABLE (VEX_W_0F380B_P_2) },
8925   },
8926 
8927   /* VEX_LEN_0F3819_P_2_M_0 */
8928   {
8929     { Bad_Opcode },
8930     { VEX_W_TABLE (VEX_W_0F3819_P_2_M_0) },
8931   },
8932 
8933   /* VEX_LEN_0F381A_P_2_M_0 */
8934   {
8935     { Bad_Opcode },
8936     { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
8937   },
8938 
8939   /* VEX_LEN_0F381C_P_2 */
8940   {
8941     { VEX_W_TABLE (VEX_W_0F381C_P_2) },
8942   },
8943 
8944   /* VEX_LEN_0F381D_P_2 */
8945   {
8946     { VEX_W_TABLE (VEX_W_0F381D_P_2) },
8947   },
8948 
8949   /* VEX_LEN_0F381E_P_2 */
8950   {
8951     { VEX_W_TABLE (VEX_W_0F381E_P_2) },
8952   },
8953 
8954   /* VEX_LEN_0F3820_P_2 */
8955   {
8956     { VEX_W_TABLE (VEX_W_0F3820_P_2) },
8957   },
8958 
8959   /* VEX_LEN_0F3821_P_2 */
8960   {
8961     { VEX_W_TABLE (VEX_W_0F3821_P_2) },
8962   },
8963 
8964   /* VEX_LEN_0F3822_P_2 */
8965   {
8966     { VEX_W_TABLE (VEX_W_0F3822_P_2) },
8967   },
8968 
8969   /* VEX_LEN_0F3823_P_2 */
8970   {
8971     { VEX_W_TABLE (VEX_W_0F3823_P_2) },
8972   },
8973 
8974   /* VEX_LEN_0F3824_P_2 */
8975   {
8976     { VEX_W_TABLE (VEX_W_0F3824_P_2) },
8977   },
8978 
8979   /* VEX_LEN_0F3825_P_2 */
8980   {
8981     { VEX_W_TABLE (VEX_W_0F3825_P_2) },
8982   },
8983 
8984   /* VEX_LEN_0F3828_P_2 */
8985   {
8986     { VEX_W_TABLE (VEX_W_0F3828_P_2) },
8987   },
8988 
8989   /* VEX_LEN_0F3829_P_2 */
8990   {
8991     { VEX_W_TABLE (VEX_W_0F3829_P_2) },
8992   },
8993 
8994   /* VEX_LEN_0F382A_P_2_M_0 */
8995   {
8996     { VEX_W_TABLE (VEX_W_0F382A_P_2_M_0) },
8997   },
8998 
8999   /* VEX_LEN_0F382B_P_2 */
9000   {
9001     { VEX_W_TABLE (VEX_W_0F382B_P_2) },
9002   },
9003 
9004   /* VEX_LEN_0F3830_P_2 */
9005   {
9006     { VEX_W_TABLE (VEX_W_0F3830_P_2) },
9007   },
9008 
9009   /* VEX_LEN_0F3831_P_2 */
9010   {
9011     { VEX_W_TABLE (VEX_W_0F3831_P_2) },
9012   },
9013 
9014   /* VEX_LEN_0F3832_P_2 */
9015   {
9016     { VEX_W_TABLE (VEX_W_0F3832_P_2) },
9017   },
9018 
9019   /* VEX_LEN_0F3833_P_2 */
9020   {
9021     { VEX_W_TABLE (VEX_W_0F3833_P_2) },
9022   },
9023 
9024   /* VEX_LEN_0F3834_P_2 */
9025   {
9026     { VEX_W_TABLE (VEX_W_0F3834_P_2) },
9027   },
9028 
9029   /* VEX_LEN_0F3835_P_2 */
9030   {
9031     { VEX_W_TABLE (VEX_W_0F3835_P_2) },
9032   },
9033 
9034   /* VEX_LEN_0F3837_P_2 */
9035   {
9036     { VEX_W_TABLE (VEX_W_0F3837_P_2) },
9037   },
9038 
9039   /* VEX_LEN_0F3838_P_2 */
9040   {
9041     { VEX_W_TABLE (VEX_W_0F3838_P_2) },
9042   },
9043 
9044   /* VEX_LEN_0F3839_P_2 */
9045   {
9046     { VEX_W_TABLE (VEX_W_0F3839_P_2) },
9047   },
9048 
9049   /* VEX_LEN_0F383A_P_2 */
9050   {
9051     { VEX_W_TABLE (VEX_W_0F383A_P_2) },
9052   },
9053 
9054   /* VEX_LEN_0F383B_P_2 */
9055   {
9056     { VEX_W_TABLE (VEX_W_0F383B_P_2) },
9057   },
9058 
9059   /* VEX_LEN_0F383C_P_2 */
9060   {
9061     { VEX_W_TABLE (VEX_W_0F383C_P_2) },
9062   },
9063 
9064   /* VEX_LEN_0F383D_P_2 */
9065   {
9066     { VEX_W_TABLE (VEX_W_0F383D_P_2) },
9067   },
9068 
9069   /* VEX_LEN_0F383E_P_2 */
9070   {
9071     { VEX_W_TABLE (VEX_W_0F383E_P_2) },
9072   },
9073 
9074   /* VEX_LEN_0F383F_P_2 */
9075   {
9076     { VEX_W_TABLE (VEX_W_0F383F_P_2) },
9077   },
9078 
9079   /* VEX_LEN_0F3840_P_2 */
9080   {
9081     { VEX_W_TABLE (VEX_W_0F3840_P_2) },
9082   },
9083 
9084   /* VEX_LEN_0F3841_P_2 */
9085   {
9086     { VEX_W_TABLE (VEX_W_0F3841_P_2) },
9087   },
9088 
9089   /* VEX_LEN_0F38DB_P_2 */
9090   {
9091     { VEX_W_TABLE (VEX_W_0F38DB_P_2) },
9092   },
9093 
9094   /* VEX_LEN_0F38DC_P_2 */
9095   {
9096     { VEX_W_TABLE (VEX_W_0F38DC_P_2) },
9097   },
9098 
9099   /* VEX_LEN_0F38DD_P_2 */
9100   {
9101     { VEX_W_TABLE (VEX_W_0F38DD_P_2) },
9102   },
9103 
9104   /* VEX_LEN_0F38DE_P_2 */
9105   {
9106     { VEX_W_TABLE (VEX_W_0F38DE_P_2) },
9107   },
9108 
9109   /* VEX_LEN_0F38DF_P_2 */
9110   {
9111     { VEX_W_TABLE (VEX_W_0F38DF_P_2) },
9112   },
9113 
9114   /* VEX_LEN_0F38F2_P_0 */
9115   {
9116     { "andnS",		{ Gdq, VexGdq, Edq } },
9117   },
9118 
9119   /* VEX_LEN_0F38F3_R_1_P_0 */
9120   {
9121     { "blsrS",		{ VexGdq, Edq } },
9122   },
9123 
9124   /* VEX_LEN_0F38F3_R_2_P_0 */
9125   {
9126     { "blsmskS",	{ VexGdq, Edq } },
9127   },
9128 
9129   /* VEX_LEN_0F38F3_R_3_P_0 */
9130   {
9131     { "blsiS",		{ VexGdq, Edq } },
9132   },
9133 
9134   /* VEX_LEN_0F38F7_P_0 */
9135   {
9136     { "bextrS",		{ Gdq, Edq, VexGdq } },
9137   },
9138 
9139   /* VEX_LEN_0F3A06_P_2 */
9140   {
9141     { Bad_Opcode },
9142     { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
9143   },
9144 
9145   /* VEX_LEN_0F3A0A_P_2 */
9146   {
9147     { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
9148     { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
9149   },
9150 
9151   /* VEX_LEN_0F3A0B_P_2 */
9152   {
9153     { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
9154     { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
9155   },
9156 
9157   /* VEX_LEN_0F3A0E_P_2 */
9158   {
9159     { VEX_W_TABLE (VEX_W_0F3A0E_P_2) },
9160   },
9161 
9162   /* VEX_LEN_0F3A0F_P_2 */
9163   {
9164     { VEX_W_TABLE (VEX_W_0F3A0F_P_2) },
9165   },
9166 
9167   /* VEX_LEN_0F3A14_P_2 */
9168   {
9169     { VEX_W_TABLE (VEX_W_0F3A14_P_2) },
9170   },
9171 
9172   /* VEX_LEN_0F3A15_P_2 */
9173   {
9174     { VEX_W_TABLE (VEX_W_0F3A15_P_2) },
9175   },
9176 
9177   /* VEX_LEN_0F3A16_P_2  */
9178   {
9179     { "vpextrK",	{ Edq, XM, Ib } },
9180   },
9181 
9182   /* VEX_LEN_0F3A17_P_2 */
9183   {
9184     { "vextractps",	{ Edqd, XM, Ib } },
9185   },
9186 
9187   /* VEX_LEN_0F3A18_P_2 */
9188   {
9189     { Bad_Opcode },
9190     { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
9191   },
9192 
9193   /* VEX_LEN_0F3A19_P_2 */
9194   {
9195     { Bad_Opcode },
9196     { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
9197   },
9198 
9199   /* VEX_LEN_0F3A20_P_2 */
9200   {
9201     { VEX_W_TABLE (VEX_W_0F3A20_P_2) },
9202   },
9203 
9204   /* VEX_LEN_0F3A21_P_2 */
9205   {
9206     { VEX_W_TABLE (VEX_W_0F3A21_P_2) },
9207   },
9208 
9209   /* VEX_LEN_0F3A22_P_2 */
9210   {
9211     { "vpinsrK",	{ XM, Vex128, Edq, Ib } },
9212   },
9213 
9214   /* VEX_LEN_0F3A41_P_2 */
9215   {
9216     { VEX_W_TABLE (VEX_W_0F3A41_P_2) },
9217   },
9218 
9219   /* VEX_LEN_0F3A42_P_2 */
9220   {
9221     { VEX_W_TABLE (VEX_W_0F3A42_P_2) },
9222   },
9223 
9224   /* VEX_LEN_0F3A44_P_2 */
9225   {
9226     { VEX_W_TABLE (VEX_W_0F3A44_P_2) },
9227   },
9228 
9229   /* VEX_LEN_0F3A4C_P_2 */
9230   {
9231     { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
9232   },
9233 
9234   /* VEX_LEN_0F3A60_P_2 */
9235   {
9236     { VEX_W_TABLE (VEX_W_0F3A60_P_2) },
9237   },
9238 
9239   /* VEX_LEN_0F3A61_P_2 */
9240   {
9241     { VEX_W_TABLE (VEX_W_0F3A61_P_2) },
9242   },
9243 
9244   /* VEX_LEN_0F3A62_P_2 */
9245   {
9246     { VEX_W_TABLE (VEX_W_0F3A62_P_2) },
9247   },
9248 
9249   /* VEX_LEN_0F3A63_P_2 */
9250   {
9251     { VEX_W_TABLE (VEX_W_0F3A63_P_2) },
9252   },
9253 
9254   /* VEX_LEN_0F3A6A_P_2 */
9255   {
9256     { "vfmaddss",	{ XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
9257   },
9258 
9259   /* VEX_LEN_0F3A6B_P_2 */
9260   {
9261     { "vfmaddsd",	{ XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
9262   },
9263 
9264   /* VEX_LEN_0F3A6E_P_2 */
9265   {
9266     { "vfmsubss",	{ XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
9267   },
9268 
9269   /* VEX_LEN_0F3A6F_P_2 */
9270   {
9271     { "vfmsubsd",	{ XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
9272   },
9273 
9274   /* VEX_LEN_0F3A7A_P_2 */
9275   {
9276     { "vfnmaddss",	{ XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
9277   },
9278 
9279   /* VEX_LEN_0F3A7B_P_2 */
9280   {
9281     { "vfnmaddsd",	{ XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
9282   },
9283 
9284   /* VEX_LEN_0F3A7E_P_2 */
9285   {
9286     { "vfnmsubss",	{ XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
9287   },
9288 
9289   /* VEX_LEN_0F3A7F_P_2 */
9290   {
9291     { "vfnmsubsd",	{ XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
9292   },
9293 
9294   /* VEX_LEN_0F3ADF_P_2 */
9295   {
9296     { VEX_W_TABLE (VEX_W_0F3ADF_P_2) },
9297   },
9298 
9299   /* VEX_LEN_0FXOP_09_80 */
9300   {
9301     { "vfrczps",	{ XM, EXxmm } },
9302     { "vfrczps",	{ XM, EXymmq } },
9303   },
9304 
9305   /* VEX_LEN_0FXOP_09_81 */
9306   {
9307     { "vfrczpd",	{ XM, EXxmm } },
9308     { "vfrczpd",	{ XM, EXymmq } },
9309   },
9310 };
9311 
9312 static const struct dis386 vex_w_table[][2] = {
9313   {
9314     /* VEX_W_0F10_P_0 */
9315     { "vmovups",	{ XM, EXx } },
9316   },
9317   {
9318     /* VEX_W_0F10_P_1 */
9319     { "vmovss",		{ XMVexScalar, VexScalar, EXdScalar } },
9320   },
9321   {
9322     /* VEX_W_0F10_P_2 */
9323     { "vmovupd",	{ XM, EXx } },
9324   },
9325   {
9326     /* VEX_W_0F10_P_3 */
9327     { "vmovsd",		{ XMVexScalar, VexScalar, EXqScalar } },
9328   },
9329   {
9330     /* VEX_W_0F11_P_0 */
9331     { "vmovups",	{ EXxS, XM } },
9332   },
9333   {
9334     /* VEX_W_0F11_P_1 */
9335     { "vmovss",		{ EXdVexScalarS, VexScalar, XMScalar } },
9336   },
9337   {
9338     /* VEX_W_0F11_P_2 */
9339     { "vmovupd",	{ EXxS, XM } },
9340   },
9341   {
9342     /* VEX_W_0F11_P_3 */
9343     { "vmovsd",		{ EXqVexScalarS, VexScalar, XMScalar } },
9344   },
9345   {
9346     /* VEX_W_0F12_P_0_M_0 */
9347     { "vmovlps",	{ XM, Vex128, EXq } },
9348   },
9349   {
9350     /* VEX_W_0F12_P_0_M_1 */
9351     { "vmovhlps",	{ XM, Vex128, EXq } },
9352   },
9353   {
9354     /* VEX_W_0F12_P_1 */
9355     { "vmovsldup",	{ XM, EXx } },
9356   },
9357   {
9358     /* VEX_W_0F12_P_2 */
9359     { "vmovlpd",	{ XM, Vex128, EXq } },
9360   },
9361   {
9362     /* VEX_W_0F12_P_3 */
9363     { "vmovddup",	{ XM, EXymmq } },
9364   },
9365   {
9366     /* VEX_W_0F13_M_0 */
9367     { "vmovlpX",	{ EXq, XM } },
9368   },
9369   {
9370     /* VEX_W_0F14 */
9371     { "vunpcklpX",	{ XM, Vex, EXx } },
9372   },
9373   {
9374     /* VEX_W_0F15 */
9375     { "vunpckhpX",	{ XM, Vex, EXx } },
9376   },
9377   {
9378     /* VEX_W_0F16_P_0_M_0 */
9379     { "vmovhps",	{ XM, Vex128, EXq } },
9380   },
9381   {
9382     /* VEX_W_0F16_P_0_M_1 */
9383     { "vmovlhps",	{ XM, Vex128, EXq } },
9384   },
9385   {
9386     /* VEX_W_0F16_P_1 */
9387     { "vmovshdup",	{ XM, EXx } },
9388   },
9389   {
9390     /* VEX_W_0F16_P_2 */
9391     { "vmovhpd",	{ XM, Vex128, EXq } },
9392   },
9393   {
9394     /* VEX_W_0F17_M_0 */
9395     { "vmovhpX",	{ EXq, XM } },
9396   },
9397   {
9398     /* VEX_W_0F28 */
9399     { "vmovapX",	{ XM, EXx } },
9400   },
9401   {
9402     /* VEX_W_0F29 */
9403     { "vmovapX",	{ EXxS, XM } },
9404   },
9405   {
9406     /* VEX_W_0F2B_M_0 */
9407     { "vmovntpX",	{ Mx, XM } },
9408   },
9409   {
9410     /* VEX_W_0F2E_P_0 */
9411     { "vucomiss",	{ XMScalar, EXdScalar } },
9412   },
9413   {
9414     /* VEX_W_0F2E_P_2 */
9415     { "vucomisd",	{ XMScalar, EXqScalar } },
9416   },
9417   {
9418     /* VEX_W_0F2F_P_0 */
9419     { "vcomiss",	{ XMScalar, EXdScalar } },
9420   },
9421   {
9422     /* VEX_W_0F2F_P_2 */
9423     { "vcomisd",	{ XMScalar, EXqScalar } },
9424   },
9425   {
9426     /* VEX_W_0F50_M_0 */
9427     { "vmovmskpX",	{ Gdq, XS } },
9428   },
9429   {
9430     /* VEX_W_0F51_P_0 */
9431     { "vsqrtps",	{ XM, EXx } },
9432   },
9433   {
9434     /* VEX_W_0F51_P_1 */
9435     { "vsqrtss",	{ XMScalar, VexScalar, EXdScalar } },
9436   },
9437   {
9438     /* VEX_W_0F51_P_2  */
9439     { "vsqrtpd",	{ XM, EXx } },
9440   },
9441   {
9442     /* VEX_W_0F51_P_3 */
9443     { "vsqrtsd",	{ XMScalar, VexScalar, EXqScalar } },
9444   },
9445   {
9446     /* VEX_W_0F52_P_0 */
9447     { "vrsqrtps",	{ XM, EXx } },
9448   },
9449   {
9450     /* VEX_W_0F52_P_1 */
9451     { "vrsqrtss",	{ XMScalar, VexScalar, EXdScalar } },
9452   },
9453   {
9454     /* VEX_W_0F53_P_0  */
9455     { "vrcpps",		{ XM, EXx } },
9456   },
9457   {
9458     /* VEX_W_0F53_P_1  */
9459     { "vrcpss",		{ XMScalar, VexScalar, EXdScalar } },
9460   },
9461   {
9462     /* VEX_W_0F58_P_0  */
9463     { "vaddps",		{ XM, Vex, EXx } },
9464   },
9465   {
9466     /* VEX_W_0F58_P_1  */
9467     { "vaddss",		{ XMScalar, VexScalar, EXdScalar } },
9468   },
9469   {
9470     /* VEX_W_0F58_P_2  */
9471     { "vaddpd",		{ XM, Vex, EXx } },
9472   },
9473   {
9474     /* VEX_W_0F58_P_3  */
9475     { "vaddsd",		{ XMScalar, VexScalar, EXqScalar } },
9476   },
9477   {
9478     /* VEX_W_0F59_P_0  */
9479     { "vmulps",		{ XM, Vex, EXx } },
9480   },
9481   {
9482     /* VEX_W_0F59_P_1  */
9483     { "vmulss",		{ XMScalar, VexScalar, EXdScalar } },
9484   },
9485   {
9486     /* VEX_W_0F59_P_2  */
9487     { "vmulpd",		{ XM, Vex, EXx } },
9488   },
9489   {
9490     /* VEX_W_0F59_P_3  */
9491     { "vmulsd",		{ XMScalar, VexScalar, EXqScalar } },
9492   },
9493   {
9494     /* VEX_W_0F5A_P_0  */
9495     { "vcvtps2pd",	{ XM, EXxmmq } },
9496   },
9497   {
9498     /* VEX_W_0F5A_P_1  */
9499     { "vcvtss2sd",	{ XMScalar, VexScalar, EXdScalar } },
9500   },
9501   {
9502     /* VEX_W_0F5A_P_3  */
9503     { "vcvtsd2ss",	{ XMScalar, VexScalar, EXqScalar } },
9504   },
9505   {
9506     /* VEX_W_0F5B_P_0  */
9507     { "vcvtdq2ps",	{ XM, EXx } },
9508   },
9509   {
9510     /* VEX_W_0F5B_P_1  */
9511     { "vcvttps2dq",	{ XM, EXx } },
9512   },
9513   {
9514     /* VEX_W_0F5B_P_2  */
9515     { "vcvtps2dq",	{ XM, EXx } },
9516   },
9517   {
9518     /* VEX_W_0F5C_P_0  */
9519     { "vsubps",		{ XM, Vex, EXx } },
9520   },
9521   {
9522     /* VEX_W_0F5C_P_1  */
9523     { "vsubss",		{ XMScalar, VexScalar, EXdScalar } },
9524   },
9525   {
9526     /* VEX_W_0F5C_P_2  */
9527     { "vsubpd",		{ XM, Vex, EXx } },
9528   },
9529   {
9530     /* VEX_W_0F5C_P_3  */
9531     { "vsubsd",		{ XMScalar, VexScalar, EXqScalar } },
9532   },
9533   {
9534     /* VEX_W_0F5D_P_0  */
9535     { "vminps",		{ XM, Vex, EXx } },
9536   },
9537   {
9538     /* VEX_W_0F5D_P_1  */
9539     { "vminss",		{ XMScalar, VexScalar, EXdScalar } },
9540   },
9541   {
9542     /* VEX_W_0F5D_P_2  */
9543     { "vminpd",		{ XM, Vex, EXx } },
9544   },
9545   {
9546     /* VEX_W_0F5D_P_3  */
9547     { "vminsd",		{ XMScalar, VexScalar, EXqScalar } },
9548   },
9549   {
9550     /* VEX_W_0F5E_P_0  */
9551     { "vdivps",		{ XM, Vex, EXx } },
9552   },
9553   {
9554     /* VEX_W_0F5E_P_1  */
9555     { "vdivss",		{ XMScalar, VexScalar, EXdScalar } },
9556   },
9557   {
9558     /* VEX_W_0F5E_P_2  */
9559     { "vdivpd",		{ XM, Vex, EXx } },
9560   },
9561   {
9562     /* VEX_W_0F5E_P_3  */
9563     { "vdivsd",		{ XMScalar, VexScalar, EXqScalar } },
9564   },
9565   {
9566     /* VEX_W_0F5F_P_0  */
9567     { "vmaxps",		{ XM, Vex, EXx } },
9568   },
9569   {
9570     /* VEX_W_0F5F_P_1  */
9571     { "vmaxss",		{ XMScalar, VexScalar, EXdScalar } },
9572   },
9573   {
9574     /* VEX_W_0F5F_P_2  */
9575     { "vmaxpd",		{ XM, Vex, EXx } },
9576   },
9577   {
9578     /* VEX_W_0F5F_P_3  */
9579     { "vmaxsd",		{ XMScalar, VexScalar, EXqScalar } },
9580   },
9581   {
9582     /* VEX_W_0F60_P_2  */
9583     { "vpunpcklbw",	{ XM, Vex128, EXx } },
9584   },
9585   {
9586     /* VEX_W_0F61_P_2  */
9587     { "vpunpcklwd",	{ XM, Vex128, EXx } },
9588   },
9589   {
9590     /* VEX_W_0F62_P_2  */
9591     { "vpunpckldq",	{ XM, Vex128, EXx } },
9592   },
9593   {
9594     /* VEX_W_0F63_P_2  */
9595     { "vpacksswb",	{ XM, Vex128, EXx } },
9596   },
9597   {
9598     /* VEX_W_0F64_P_2  */
9599     { "vpcmpgtb",	{ XM, Vex128, EXx } },
9600   },
9601   {
9602     /* VEX_W_0F65_P_2  */
9603     { "vpcmpgtw",	{ XM, Vex128, EXx } },
9604   },
9605   {
9606     /* VEX_W_0F66_P_2  */
9607     { "vpcmpgtd",	{ XM, Vex128, EXx } },
9608   },
9609   {
9610     /* VEX_W_0F67_P_2  */
9611     { "vpackuswb",	{ XM, Vex128, EXx } },
9612   },
9613   {
9614     /* VEX_W_0F68_P_2  */
9615     { "vpunpckhbw",	{ XM, Vex128, EXx } },
9616   },
9617   {
9618     /* VEX_W_0F69_P_2  */
9619     { "vpunpckhwd",	{ XM, Vex128, EXx } },
9620   },
9621   {
9622     /* VEX_W_0F6A_P_2  */
9623     { "vpunpckhdq",	{ XM, Vex128, EXx } },
9624   },
9625   {
9626     /* VEX_W_0F6B_P_2  */
9627     { "vpackssdw",	{ XM, Vex128, EXx } },
9628   },
9629   {
9630     /* VEX_W_0F6C_P_2  */
9631     { "vpunpcklqdq",	{ XM, Vex128, EXx } },
9632   },
9633   {
9634     /* VEX_W_0F6D_P_2  */
9635     { "vpunpckhqdq",	{ XM, Vex128, EXx } },
9636   },
9637   {
9638     /* VEX_W_0F6F_P_1  */
9639     { "vmovdqu",	{ XM, EXx } },
9640   },
9641   {
9642     /* VEX_W_0F6F_P_2  */
9643     { "vmovdqa",	{ XM, EXx } },
9644   },
9645   {
9646     /* VEX_W_0F70_P_1 */
9647     { "vpshufhw",	{ XM, EXx, Ib } },
9648   },
9649   {
9650     /* VEX_W_0F70_P_2 */
9651     { "vpshufd",	{ XM, EXx, Ib } },
9652   },
9653   {
9654     /* VEX_W_0F70_P_3 */
9655     { "vpshuflw",	{ XM, EXx, Ib } },
9656   },
9657   {
9658     /* VEX_W_0F71_R_2_P_2  */
9659     { "vpsrlw",		{ Vex128, XS, Ib } },
9660   },
9661   {
9662     /* VEX_W_0F71_R_4_P_2  */
9663     { "vpsraw",		{ Vex128, XS, Ib } },
9664   },
9665   {
9666     /* VEX_W_0F71_R_6_P_2  */
9667     { "vpsllw",		{ Vex128, XS, Ib } },
9668   },
9669   {
9670     /* VEX_W_0F72_R_2_P_2  */
9671     { "vpsrld",		{ Vex128, XS, Ib } },
9672   },
9673   {
9674     /* VEX_W_0F72_R_4_P_2  */
9675     { "vpsrad",		{ Vex128, XS, Ib } },
9676   },
9677   {
9678     /* VEX_W_0F72_R_6_P_2  */
9679     { "vpslld",		{ Vex128, XS, Ib } },
9680   },
9681   {
9682     /* VEX_W_0F73_R_2_P_2  */
9683     { "vpsrlq",		{ Vex128, XS, Ib } },
9684   },
9685   {
9686     /* VEX_W_0F73_R_3_P_2  */
9687     { "vpsrldq",	{ Vex128, XS, Ib } },
9688   },
9689   {
9690     /* VEX_W_0F73_R_6_P_2  */
9691     { "vpsllq",		{ Vex128, XS, Ib } },
9692   },
9693   {
9694     /* VEX_W_0F73_R_7_P_2  */
9695     { "vpslldq",	{ Vex128, XS, Ib } },
9696   },
9697   {
9698     /* VEX_W_0F74_P_2 */
9699     { "vpcmpeqb",	{ XM, Vex128, EXx } },
9700   },
9701   {
9702     /* VEX_W_0F75_P_2 */
9703     { "vpcmpeqw",	{ XM, Vex128, EXx } },
9704   },
9705   {
9706     /* VEX_W_0F76_P_2 */
9707     { "vpcmpeqd",	{ XM, Vex128, EXx } },
9708   },
9709   {
9710     /* VEX_W_0F77_P_0 */
9711     { "",		{ VZERO } },
9712   },
9713   {
9714     /* VEX_W_0F7C_P_2 */
9715     { "vhaddpd",	{ XM, Vex, EXx } },
9716   },
9717   {
9718     /* VEX_W_0F7C_P_3 */
9719     { "vhaddps",	{ XM, Vex, EXx } },
9720   },
9721   {
9722     /* VEX_W_0F7D_P_2 */
9723     { "vhsubpd",	{ XM, Vex, EXx } },
9724   },
9725   {
9726     /* VEX_W_0F7D_P_3 */
9727     { "vhsubps",	{ XM, Vex, EXx } },
9728   },
9729   {
9730     /* VEX_W_0F7E_P_1 */
9731     { "vmovq",		{ XMScalar, EXqScalar } },
9732   },
9733   {
9734     /* VEX_W_0F7F_P_1 */
9735     { "vmovdqu",	{ EXxS, XM } },
9736   },
9737   {
9738     /* VEX_W_0F7F_P_2 */
9739     { "vmovdqa",	{ EXxS, XM } },
9740   },
9741   {
9742     /* VEX_W_0FAE_R_2_M_0 */
9743     { "vldmxcsr",	{ Md } },
9744   },
9745   {
9746     /* VEX_W_0FAE_R_3_M_0 */
9747     { "vstmxcsr",	{ Md } },
9748   },
9749   {
9750     /* VEX_W_0FC2_P_0 */
9751     { "vcmpps",		{ XM, Vex, EXx, VCMP } },
9752   },
9753   {
9754     /* VEX_W_0FC2_P_1 */
9755     { "vcmpss",		{ XMScalar, VexScalar, EXdScalar, VCMP } },
9756   },
9757   {
9758     /* VEX_W_0FC2_P_2 */
9759     { "vcmppd",		{ XM, Vex, EXx, VCMP } },
9760   },
9761   {
9762     /* VEX_W_0FC2_P_3 */
9763     { "vcmpsd",		{ XMScalar, VexScalar, EXqScalar, VCMP } },
9764   },
9765   {
9766     /* VEX_W_0FC4_P_2 */
9767     { "vpinsrw",	{ XM, Vex128, Edqw, Ib } },
9768   },
9769   {
9770     /* VEX_W_0FC5_P_2 */
9771     { "vpextrw",	{ Gdq, XS, Ib } },
9772   },
9773   {
9774     /* VEX_W_0FD0_P_2 */
9775     { "vaddsubpd",	{ XM, Vex, EXx } },
9776   },
9777   {
9778     /* VEX_W_0FD0_P_3 */
9779     { "vaddsubps",	{ XM, Vex, EXx } },
9780   },
9781   {
9782     /* VEX_W_0FD1_P_2 */
9783     { "vpsrlw",		{ XM, Vex128, EXx } },
9784   },
9785   {
9786     /* VEX_W_0FD2_P_2 */
9787     { "vpsrld",		{ XM, Vex128, EXx } },
9788   },
9789   {
9790     /* VEX_W_0FD3_P_2 */
9791     { "vpsrlq",		{ XM, Vex128, EXx } },
9792   },
9793   {
9794     /* VEX_W_0FD4_P_2 */
9795     { "vpaddq",		{ XM, Vex128, EXx } },
9796   },
9797   {
9798     /* VEX_W_0FD5_P_2 */
9799     { "vpmullw",	{ XM, Vex128, EXx } },
9800   },
9801   {
9802     /* VEX_W_0FD6_P_2 */
9803     { "vmovq",		{ EXqScalarS, XMScalar } },
9804   },
9805   {
9806     /* VEX_W_0FD7_P_2_M_1 */
9807     { "vpmovmskb",	{ Gdq, XS } },
9808   },
9809   {
9810     /* VEX_W_0FD8_P_2 */
9811     { "vpsubusb",	{ XM, Vex128, EXx } },
9812   },
9813   {
9814     /* VEX_W_0FD9_P_2 */
9815     { "vpsubusw",	{ XM, Vex128, EXx } },
9816   },
9817   {
9818     /* VEX_W_0FDA_P_2 */
9819     { "vpminub",	{ XM, Vex128, EXx } },
9820   },
9821   {
9822     /* VEX_W_0FDB_P_2 */
9823     { "vpand",		{ XM, Vex128, EXx } },
9824   },
9825   {
9826     /* VEX_W_0FDC_P_2 */
9827     { "vpaddusb",	{ XM, Vex128, EXx } },
9828   },
9829   {
9830     /* VEX_W_0FDD_P_2 */
9831     { "vpaddusw",	{ XM, Vex128, EXx } },
9832   },
9833   {
9834     /* VEX_W_0FDE_P_2 */
9835     { "vpmaxub",	{ XM, Vex128, EXx } },
9836   },
9837   {
9838     /* VEX_W_0FDF_P_2 */
9839     { "vpandn",		{ XM, Vex128, EXx } },
9840   },
9841   {
9842     /* VEX_W_0FE0_P_2  */
9843     { "vpavgb",		{ XM, Vex128, EXx } },
9844   },
9845   {
9846     /* VEX_W_0FE1_P_2  */
9847     { "vpsraw",		{ XM, Vex128, EXx } },
9848   },
9849   {
9850     /* VEX_W_0FE2_P_2  */
9851     { "vpsrad",		{ XM, Vex128, EXx } },
9852   },
9853   {
9854     /* VEX_W_0FE3_P_2  */
9855     { "vpavgw",		{ XM, Vex128, EXx } },
9856   },
9857   {
9858     /* VEX_W_0FE4_P_2  */
9859     { "vpmulhuw",	{ XM, Vex128, EXx } },
9860   },
9861   {
9862     /* VEX_W_0FE5_P_2  */
9863     { "vpmulhw",	{ XM, Vex128, EXx } },
9864   },
9865   {
9866     /* VEX_W_0FE6_P_1  */
9867     { "vcvtdq2pd",	{ XM, EXxmmq } },
9868   },
9869   {
9870     /* VEX_W_0FE6_P_2  */
9871     { "vcvttpd2dq%XY",	{ XMM, EXx } },
9872   },
9873   {
9874     /* VEX_W_0FE6_P_3  */
9875     { "vcvtpd2dq%XY",	{ XMM, EXx } },
9876   },
9877   {
9878     /* VEX_W_0FE7_P_2_M_0 */
9879     { "vmovntdq",	{ Mx, XM } },
9880   },
9881   {
9882     /* VEX_W_0FE8_P_2  */
9883     { "vpsubsb",	{ XM, Vex128, EXx } },
9884   },
9885   {
9886     /* VEX_W_0FE9_P_2  */
9887     { "vpsubsw",	{ XM, Vex128, EXx } },
9888   },
9889   {
9890     /* VEX_W_0FEA_P_2  */
9891     { "vpminsw",	{ XM, Vex128, EXx } },
9892   },
9893   {
9894     /* VEX_W_0FEB_P_2  */
9895     { "vpor",		{ XM, Vex128, EXx } },
9896   },
9897   {
9898     /* VEX_W_0FEC_P_2  */
9899     { "vpaddsb",	{ XM, Vex128, EXx } },
9900   },
9901   {
9902     /* VEX_W_0FED_P_2  */
9903     { "vpaddsw",	{ XM, Vex128, EXx } },
9904   },
9905   {
9906     /* VEX_W_0FEE_P_2  */
9907     { "vpmaxsw",	{ XM, Vex128, EXx } },
9908   },
9909   {
9910     /* VEX_W_0FEF_P_2  */
9911     { "vpxor",		{ XM, Vex128, EXx } },
9912   },
9913   {
9914     /* VEX_W_0FF0_P_3_M_0 */
9915     { "vlddqu",		{ XM, M } },
9916   },
9917   {
9918     /* VEX_W_0FF1_P_2 */
9919     { "vpsllw",		{ XM, Vex128, EXx } },
9920   },
9921   {
9922     /* VEX_W_0FF2_P_2 */
9923     { "vpslld",		{ XM, Vex128, EXx } },
9924   },
9925   {
9926     /* VEX_W_0FF3_P_2 */
9927     { "vpsllq",		{ XM, Vex128, EXx } },
9928   },
9929   {
9930     /* VEX_W_0FF4_P_2 */
9931     { "vpmuludq",	{ XM, Vex128, EXx } },
9932   },
9933   {
9934     /* VEX_W_0FF5_P_2 */
9935     { "vpmaddwd",	{ XM, Vex128, EXx } },
9936   },
9937   {
9938     /* VEX_W_0FF6_P_2 */
9939     { "vpsadbw",	{ XM, Vex128, EXx } },
9940   },
9941   {
9942     /* VEX_W_0FF7_P_2 */
9943     { "vmaskmovdqu",	{ XM, XS } },
9944   },
9945   {
9946     /* VEX_W_0FF8_P_2 */
9947     { "vpsubb",		{ XM, Vex128, EXx } },
9948   },
9949   {
9950     /* VEX_W_0FF9_P_2 */
9951     { "vpsubw",		{ XM, Vex128, EXx } },
9952   },
9953   {
9954     /* VEX_W_0FFA_P_2 */
9955     { "vpsubd",		{ XM, Vex128, EXx } },
9956   },
9957   {
9958     /* VEX_W_0FFB_P_2 */
9959     { "vpsubq",		{ XM, Vex128, EXx } },
9960   },
9961   {
9962     /* VEX_W_0FFC_P_2 */
9963     { "vpaddb",		{ XM, Vex128, EXx } },
9964   },
9965   {
9966     /* VEX_W_0FFD_P_2 */
9967     { "vpaddw",		{ XM, Vex128, EXx } },
9968   },
9969   {
9970     /* VEX_W_0FFE_P_2 */
9971     { "vpaddd",		{ XM, Vex128, EXx } },
9972   },
9973   {
9974     /* VEX_W_0F3800_P_2  */
9975     { "vpshufb",	{ XM, Vex128, EXx } },
9976   },
9977   {
9978     /* VEX_W_0F3801_P_2  */
9979     { "vphaddw",	{ XM, Vex128, EXx } },
9980   },
9981   {
9982     /* VEX_W_0F3802_P_2  */
9983     { "vphaddd",	{ XM, Vex128, EXx } },
9984   },
9985   {
9986     /* VEX_W_0F3803_P_2  */
9987     { "vphaddsw",	{ XM, Vex128, EXx } },
9988   },
9989   {
9990     /* VEX_W_0F3804_P_2  */
9991     { "vpmaddubsw",	{ XM, Vex128, EXx } },
9992   },
9993   {
9994     /* VEX_W_0F3805_P_2  */
9995     { "vphsubw",	{ XM, Vex128, EXx } },
9996   },
9997   {
9998     /* VEX_W_0F3806_P_2  */
9999     { "vphsubd",	{ XM, Vex128, EXx } },
10000   },
10001   {
10002     /* VEX_W_0F3807_P_2  */
10003     { "vphsubsw",	{ XM, Vex128, EXx } },
10004   },
10005   {
10006     /* VEX_W_0F3808_P_2  */
10007     { "vpsignb",	{ XM, Vex128, EXx } },
10008   },
10009   {
10010     /* VEX_W_0F3809_P_2  */
10011     { "vpsignw",	{ XM, Vex128, EXx } },
10012   },
10013   {
10014     /* VEX_W_0F380A_P_2  */
10015     { "vpsignd",	{ XM, Vex128, EXx } },
10016   },
10017   {
10018     /* VEX_W_0F380B_P_2  */
10019     { "vpmulhrsw",	{ XM, Vex128, EXx } },
10020   },
10021   {
10022     /* VEX_W_0F380C_P_2  */
10023     { "vpermilps",	{ XM, Vex, EXx } },
10024   },
10025   {
10026     /* VEX_W_0F380D_P_2  */
10027     { "vpermilpd",	{ XM, Vex, EXx } },
10028   },
10029   {
10030     /* VEX_W_0F380E_P_2  */
10031     { "vtestps",	{ XM, EXx } },
10032   },
10033   {
10034     /* VEX_W_0F380F_P_2  */
10035     { "vtestpd",	{ XM, EXx } },
10036   },
10037   {
10038     /* VEX_W_0F3817_P_2 */
10039     { "vptest",		{ XM, EXx } },
10040   },
10041   {
10042     /* VEX_W_0F3818_P_2_M_0 */
10043     { "vbroadcastss",	{ XM, Md } },
10044   },
10045   {
10046     /* VEX_W_0F3819_P_2_M_0 */
10047     { "vbroadcastsd",	{ XM, Mq } },
10048   },
10049   {
10050     /* VEX_W_0F381A_P_2_M_0 */
10051     { "vbroadcastf128",	{ XM, Mxmm } },
10052   },
10053   {
10054     /* VEX_W_0F381C_P_2 */
10055     { "vpabsb",		{ XM, EXx } },
10056   },
10057   {
10058     /* VEX_W_0F381D_P_2 */
10059     { "vpabsw",		{ XM, EXx } },
10060   },
10061   {
10062     /* VEX_W_0F381E_P_2 */
10063     { "vpabsd",		{ XM, EXx } },
10064   },
10065   {
10066     /* VEX_W_0F3820_P_2 */
10067     { "vpmovsxbw",	{ XM, EXq } },
10068   },
10069   {
10070     /* VEX_W_0F3821_P_2 */
10071     { "vpmovsxbd",	{ XM, EXd } },
10072   },
10073   {
10074     /* VEX_W_0F3822_P_2 */
10075     { "vpmovsxbq",	{ XM, EXw } },
10076   },
10077   {
10078     /* VEX_W_0F3823_P_2 */
10079     { "vpmovsxwd",	{ XM, EXq } },
10080   },
10081   {
10082     /* VEX_W_0F3824_P_2 */
10083     { "vpmovsxwq",	{ XM, EXd } },
10084   },
10085   {
10086     /* VEX_W_0F3825_P_2 */
10087     { "vpmovsxdq",	{ XM, EXq } },
10088   },
10089   {
10090     /* VEX_W_0F3828_P_2 */
10091     { "vpmuldq",	{ XM, Vex128, EXx } },
10092   },
10093   {
10094     /* VEX_W_0F3829_P_2 */
10095     { "vpcmpeqq",	{ XM, Vex128, EXx } },
10096   },
10097   {
10098     /* VEX_W_0F382A_P_2_M_0 */
10099     { "vmovntdqa",	{ XM, Mx } },
10100   },
10101   {
10102     /* VEX_W_0F382B_P_2 */
10103     { "vpackusdw",	{ XM, Vex128, EXx } },
10104   },
10105   {
10106     /* VEX_W_0F382C_P_2_M_0 */
10107     { "vmaskmovps",	{ XM, Vex, Mx } },
10108   },
10109   {
10110     /* VEX_W_0F382D_P_2_M_0 */
10111     { "vmaskmovpd",	{ XM, Vex, Mx } },
10112   },
10113   {
10114     /* VEX_W_0F382E_P_2_M_0 */
10115     { "vmaskmovps",	{ Mx, Vex, XM } },
10116   },
10117   {
10118     /* VEX_W_0F382F_P_2_M_0 */
10119     { "vmaskmovpd",	{ Mx, Vex, XM } },
10120   },
10121   {
10122     /* VEX_W_0F3830_P_2 */
10123     { "vpmovzxbw",	{ XM, EXq } },
10124   },
10125   {
10126     /* VEX_W_0F3831_P_2 */
10127     { "vpmovzxbd",	{ XM, EXd } },
10128   },
10129   {
10130     /* VEX_W_0F3832_P_2 */
10131     { "vpmovzxbq",	{ XM, EXw } },
10132   },
10133   {
10134     /* VEX_W_0F3833_P_2 */
10135     { "vpmovzxwd",	{ XM, EXq } },
10136   },
10137   {
10138     /* VEX_W_0F3834_P_2 */
10139     { "vpmovzxwq",	{ XM, EXd } },
10140   },
10141   {
10142     /* VEX_W_0F3835_P_2 */
10143     { "vpmovzxdq",	{ XM, EXq } },
10144   },
10145   {
10146     /* VEX_W_0F3837_P_2 */
10147     { "vpcmpgtq",	{ XM, Vex128, EXx } },
10148   },
10149   {
10150     /* VEX_W_0F3838_P_2 */
10151     { "vpminsb",	{ XM, Vex128, EXx } },
10152   },
10153   {
10154     /* VEX_W_0F3839_P_2 */
10155     { "vpminsd",	{ XM, Vex128, EXx } },
10156   },
10157   {
10158     /* VEX_W_0F383A_P_2 */
10159     { "vpminuw",	{ XM, Vex128, EXx } },
10160   },
10161   {
10162     /* VEX_W_0F383B_P_2 */
10163     { "vpminud",	{ XM, Vex128, EXx } },
10164   },
10165   {
10166     /* VEX_W_0F383C_P_2 */
10167     { "vpmaxsb",	{ XM, Vex128, EXx } },
10168   },
10169   {
10170     /* VEX_W_0F383D_P_2 */
10171     { "vpmaxsd",	{ XM, Vex128, EXx } },
10172   },
10173   {
10174     /* VEX_W_0F383E_P_2 */
10175     { "vpmaxuw",	{ XM, Vex128, EXx } },
10176   },
10177   {
10178     /* VEX_W_0F383F_P_2 */
10179     { "vpmaxud",	{ XM, Vex128, EXx } },
10180   },
10181   {
10182     /* VEX_W_0F3840_P_2 */
10183     { "vpmulld",	{ XM, Vex128, EXx } },
10184   },
10185   {
10186     /* VEX_W_0F3841_P_2 */
10187     { "vphminposuw",	{ XM, EXx } },
10188   },
10189   {
10190     /* VEX_W_0F38DB_P_2 */
10191     { "vaesimc",	{ XM, EXx } },
10192   },
10193   {
10194     /* VEX_W_0F38DC_P_2 */
10195     { "vaesenc",	{ XM, Vex128, EXx } },
10196   },
10197   {
10198     /* VEX_W_0F38DD_P_2 */
10199     { "vaesenclast",	{ XM, Vex128, EXx } },
10200   },
10201   {
10202     /* VEX_W_0F38DE_P_2 */
10203     { "vaesdec",	{ XM, Vex128, EXx } },
10204   },
10205   {
10206     /* VEX_W_0F38DF_P_2 */
10207     { "vaesdeclast",	{ XM, Vex128, EXx } },
10208   },
10209   {
10210     /* VEX_W_0F3A04_P_2 */
10211     { "vpermilps",	{ XM, EXx, Ib } },
10212   },
10213   {
10214     /* VEX_W_0F3A05_P_2 */
10215     { "vpermilpd",	{ XM, EXx, Ib } },
10216   },
10217   {
10218     /* VEX_W_0F3A06_P_2 */
10219     { "vperm2f128",	{ XM, Vex256, EXx, Ib } },
10220   },
10221   {
10222     /* VEX_W_0F3A08_P_2 */
10223     { "vroundps",	{ XM, EXx, Ib } },
10224   },
10225   {
10226     /* VEX_W_0F3A09_P_2 */
10227     { "vroundpd",	{ XM, EXx, Ib } },
10228   },
10229   {
10230     /* VEX_W_0F3A0A_P_2 */
10231     { "vroundss",	{ XMScalar, VexScalar, EXdScalar, Ib } },
10232   },
10233   {
10234     /* VEX_W_0F3A0B_P_2 */
10235     { "vroundsd",	{ XMScalar, VexScalar, EXqScalar, Ib } },
10236   },
10237   {
10238     /* VEX_W_0F3A0C_P_2 */
10239     { "vblendps",	{ XM, Vex, EXx, Ib } },
10240   },
10241   {
10242     /* VEX_W_0F3A0D_P_2 */
10243     { "vblendpd",	{ XM, Vex, EXx, Ib } },
10244   },
10245   {
10246     /* VEX_W_0F3A0E_P_2 */
10247     { "vpblendw",	{ XM, Vex128, EXx, Ib } },
10248   },
10249   {
10250     /* VEX_W_0F3A0F_P_2 */
10251     { "vpalignr",	{ XM, Vex128, EXx, Ib } },
10252   },
10253   {
10254     /* VEX_W_0F3A14_P_2 */
10255     { "vpextrb",	{ Edqb, XM, Ib } },
10256   },
10257   {
10258     /* VEX_W_0F3A15_P_2 */
10259     { "vpextrw",	{ Edqw, XM, Ib } },
10260   },
10261   {
10262     /* VEX_W_0F3A18_P_2 */
10263     { "vinsertf128",	{ XM, Vex256, EXxmm, Ib } },
10264   },
10265   {
10266     /* VEX_W_0F3A19_P_2 */
10267     { "vextractf128",	{ EXxmm, XM, Ib } },
10268   },
10269   {
10270     /* VEX_W_0F3A20_P_2 */
10271     { "vpinsrb",	{ XM, Vex128, Edqb, Ib } },
10272   },
10273   {
10274     /* VEX_W_0F3A21_P_2 */
10275     { "vinsertps",	{ XM, Vex128, EXd, Ib } },
10276   },
10277   {
10278     /* VEX_W_0F3A40_P_2 */
10279     { "vdpps",		{ XM, Vex, EXx, Ib } },
10280   },
10281   {
10282     /* VEX_W_0F3A41_P_2 */
10283     { "vdppd",		{ XM, Vex128, EXx, Ib } },
10284   },
10285   {
10286     /* VEX_W_0F3A42_P_2 */
10287     { "vmpsadbw",	{ XM, Vex128, EXx, Ib } },
10288   },
10289   {
10290     /* VEX_W_0F3A44_P_2 */
10291     { "vpclmulqdq",	{ XM, Vex128, EXx, PCLMUL } },
10292   },
10293   {
10294     /* VEX_W_0F3A48_P_2 */
10295     { "vpermil2ps",	{ XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10296     { "vpermil2ps",	{ XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10297   },
10298   {
10299     /* VEX_W_0F3A49_P_2 */
10300     { "vpermil2pd",	{ XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10301     { "vpermil2pd",	{ XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10302   },
10303   {
10304     /* VEX_W_0F3A4A_P_2 */
10305     { "vblendvps",	{ XM, Vex, EXx, XMVexI4 } },
10306   },
10307   {
10308     /* VEX_W_0F3A4B_P_2 */
10309     { "vblendvpd",	{ XM, Vex, EXx, XMVexI4 } },
10310   },
10311   {
10312     /* VEX_W_0F3A4C_P_2 */
10313     { "vpblendvb",	{ XM, Vex128, EXx, XMVexI4 } },
10314   },
10315   {
10316     /* VEX_W_0F3A60_P_2 */
10317     { "vpcmpestrm",	{ XM, EXx, Ib } },
10318   },
10319   {
10320     /* VEX_W_0F3A61_P_2 */
10321     { "vpcmpestri",	{ XM, EXx, Ib } },
10322   },
10323   {
10324     /* VEX_W_0F3A62_P_2 */
10325     { "vpcmpistrm",	{ XM, EXx, Ib } },
10326   },
10327   {
10328     /* VEX_W_0F3A63_P_2 */
10329     { "vpcmpistri",	{ XM, EXx, Ib } },
10330   },
10331   {
10332     /* VEX_W_0F3ADF_P_2 */
10333     { "vaeskeygenassist", { XM, EXx, Ib } },
10334   },
10335 };
10336 
10337 static const struct dis386 mod_table[][2] = {
10338   {
10339     /* MOD_8D */
10340     { "leaS",		{ Gv, M } },
10341   },
10342   {
10343     /* MOD_0F01_REG_0 */
10344     { X86_64_TABLE (X86_64_0F01_REG_0) },
10345     { RM_TABLE (RM_0F01_REG_0) },
10346   },
10347   {
10348     /* MOD_0F01_REG_1 */
10349     { X86_64_TABLE (X86_64_0F01_REG_1) },
10350     { RM_TABLE (RM_0F01_REG_1) },
10351   },
10352   {
10353     /* MOD_0F01_REG_2 */
10354     { X86_64_TABLE (X86_64_0F01_REG_2) },
10355     { RM_TABLE (RM_0F01_REG_2) },
10356   },
10357   {
10358     /* MOD_0F01_REG_3 */
10359     { X86_64_TABLE (X86_64_0F01_REG_3) },
10360     { RM_TABLE (RM_0F01_REG_3) },
10361   },
10362   {
10363     /* MOD_0F01_REG_7 */
10364     { "invlpg",		{ Mb } },
10365     { RM_TABLE (RM_0F01_REG_7) },
10366   },
10367   {
10368     /* MOD_0F12_PREFIX_0 */
10369     { "movlps",		{ XM, EXq } },
10370     { "movhlps",	{ XM, EXq } },
10371   },
10372   {
10373     /* MOD_0F13 */
10374     { "movlpX",		{ EXq, XM } },
10375   },
10376   {
10377     /* MOD_0F16_PREFIX_0 */
10378     { "movhps",		{ XM, EXq } },
10379     { "movlhps",	{ XM, EXq } },
10380   },
10381   {
10382     /* MOD_0F17 */
10383     { "movhpX",		{ EXq, XM } },
10384   },
10385   {
10386     /* MOD_0F18_REG_0 */
10387     { "prefetchnta",	{ Mb } },
10388   },
10389   {
10390     /* MOD_0F18_REG_1 */
10391     { "prefetcht0",	{ Mb } },
10392   },
10393   {
10394     /* MOD_0F18_REG_2 */
10395     { "prefetcht1",	{ Mb } },
10396   },
10397   {
10398     /* MOD_0F18_REG_3 */
10399     { "prefetcht2",	{ Mb } },
10400   },
10401   {
10402     /* MOD_0F20 */
10403     { Bad_Opcode },
10404     { "movZ",		{ Rm, Cm } },
10405   },
10406   {
10407     /* MOD_0F21 */
10408     { Bad_Opcode },
10409     { "movZ",		{ Rm, Dm } },
10410   },
10411   {
10412     /* MOD_0F22 */
10413     { Bad_Opcode },
10414     { "movZ",		{ Cm, Rm } },
10415   },
10416   {
10417     /* MOD_0F23 */
10418     { Bad_Opcode },
10419     { "movZ",		{ Dm, Rm } },
10420   },
10421   {
10422     /* MOD_0F24 */
10423     { Bad_Opcode },
10424     { "movL",		{ Rd, Td } },
10425   },
10426   {
10427     /* MOD_0F26 */
10428     { Bad_Opcode },
10429     { "movL",		{ Td, Rd } },
10430   },
10431   {
10432     /* MOD_0F2B_PREFIX_0 */
10433     {"movntps",		{ Mx, XM } },
10434   },
10435   {
10436     /* MOD_0F2B_PREFIX_1 */
10437     {"movntss",		{ Md, XM } },
10438   },
10439   {
10440     /* MOD_0F2B_PREFIX_2 */
10441     {"movntpd",		{ Mx, XM } },
10442   },
10443   {
10444     /* MOD_0F2B_PREFIX_3 */
10445     {"movntsd",		{ Mq, XM } },
10446   },
10447   {
10448     /* MOD_0F51 */
10449     { Bad_Opcode },
10450     { "movmskpX",	{ Gdq, XS } },
10451   },
10452   {
10453     /* MOD_0F71_REG_2 */
10454     { Bad_Opcode },
10455     { "psrlw",		{ MS, Ib } },
10456   },
10457   {
10458     /* MOD_0F71_REG_4 */
10459     { Bad_Opcode },
10460     { "psraw",		{ MS, Ib } },
10461   },
10462   {
10463     /* MOD_0F71_REG_6 */
10464     { Bad_Opcode },
10465     { "psllw",		{ MS, Ib } },
10466   },
10467   {
10468     /* MOD_0F72_REG_2 */
10469     { Bad_Opcode },
10470     { "psrld",		{ MS, Ib } },
10471   },
10472   {
10473     /* MOD_0F72_REG_4 */
10474     { Bad_Opcode },
10475     { "psrad",		{ MS, Ib } },
10476   },
10477   {
10478     /* MOD_0F72_REG_6 */
10479     { Bad_Opcode },
10480     { "pslld",		{ MS, Ib } },
10481   },
10482   {
10483     /* MOD_0F73_REG_2 */
10484     { Bad_Opcode },
10485     { "psrlq",		{ MS, Ib } },
10486   },
10487   {
10488     /* MOD_0F73_REG_3 */
10489     { Bad_Opcode },
10490     { PREFIX_TABLE (PREFIX_0F73_REG_3) },
10491   },
10492   {
10493     /* MOD_0F73_REG_6 */
10494     { Bad_Opcode },
10495     { "psllq",		{ MS, Ib } },
10496   },
10497   {
10498     /* MOD_0F73_REG_7 */
10499     { Bad_Opcode },
10500     { PREFIX_TABLE (PREFIX_0F73_REG_7) },
10501   },
10502   {
10503     /* MOD_0FAE_REG_0 */
10504     { "fxsave",		{ FXSAVE } },
10505     { PREFIX_TABLE (PREFIX_0FAE_REG_0) },
10506   },
10507   {
10508     /* MOD_0FAE_REG_1 */
10509     { "fxrstor",	{ FXSAVE } },
10510     { PREFIX_TABLE (PREFIX_0FAE_REG_1) },
10511   },
10512   {
10513     /* MOD_0FAE_REG_2 */
10514     { "ldmxcsr",	{ Md } },
10515     { PREFIX_TABLE (PREFIX_0FAE_REG_2) },
10516   },
10517   {
10518     /* MOD_0FAE_REG_3 */
10519     { "stmxcsr",	{ Md } },
10520     { PREFIX_TABLE (PREFIX_0FAE_REG_3) },
10521   },
10522   {
10523     /* MOD_0FAE_REG_4 */
10524     { "xsave",		{ FXSAVE } },
10525   },
10526   {
10527     /* MOD_0FAE_REG_5 */
10528     { "xrstor",		{ FXSAVE } },
10529     { RM_TABLE (RM_0FAE_REG_5) },
10530   },
10531   {
10532     /* MOD_0FAE_REG_6 */
10533     { "xsaveopt",	{ FXSAVE } },
10534     { RM_TABLE (RM_0FAE_REG_6) },
10535   },
10536   {
10537     /* MOD_0FAE_REG_7 */
10538     { "clflush",	{ Mb } },
10539     { RM_TABLE (RM_0FAE_REG_7) },
10540   },
10541   {
10542     /* MOD_0FB2 */
10543     { "lssS",		{ Gv, Mp } },
10544   },
10545   {
10546     /* MOD_0FB4 */
10547     { "lfsS",		{ Gv, Mp } },
10548   },
10549   {
10550     /* MOD_0FB5 */
10551     { "lgsS",		{ Gv, Mp } },
10552   },
10553   {
10554     /* MOD_0FC7_REG_6 */
10555     { PREFIX_TABLE (PREFIX_0FC7_REG_6) },
10556     { "rdrand",		{ Ev } },
10557   },
10558   {
10559     /* MOD_0FC7_REG_7 */
10560     { "vmptrst",	{ Mq } },
10561   },
10562   {
10563     /* MOD_0FD7 */
10564     { Bad_Opcode },
10565     { "pmovmskb",	{ Gdq, MS } },
10566   },
10567   {
10568     /* MOD_0FE7_PREFIX_2 */
10569     { "movntdq",	{ Mx, XM } },
10570   },
10571   {
10572     /* MOD_0FF0_PREFIX_3 */
10573     { "lddqu",		{ XM, M } },
10574   },
10575   {
10576     /* MOD_0F382A_PREFIX_2 */
10577     { "movntdqa",	{ XM, Mx } },
10578   },
10579   {
10580     /* MOD_62_32BIT */
10581     { "bound{S|}",	{ Gv, Ma } },
10582   },
10583   {
10584     /* MOD_C4_32BIT */
10585     { "lesS",		{ Gv, Mp } },
10586     { VEX_C4_TABLE (VEX_0F) },
10587   },
10588   {
10589     /* MOD_C5_32BIT */
10590     { "ldsS",		{ Gv, Mp } },
10591     { VEX_C5_TABLE (VEX_0F) },
10592   },
10593   {
10594     /* MOD_VEX_0F12_PREFIX_0 */
10595     { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
10596     { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
10597   },
10598   {
10599     /* MOD_VEX_0F13 */
10600     { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
10601   },
10602   {
10603     /* MOD_VEX_0F16_PREFIX_0 */
10604     { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
10605     { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
10606   },
10607   {
10608     /* MOD_VEX_0F17 */
10609     { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
10610   },
10611   {
10612     /* MOD_VEX_0F2B */
10613     { VEX_W_TABLE (VEX_W_0F2B_M_0) },
10614   },
10615   {
10616     /* MOD_VEX_0F50 */
10617     { Bad_Opcode },
10618     { VEX_W_TABLE (VEX_W_0F50_M_0) },
10619   },
10620   {
10621     /* MOD_VEX_0F71_REG_2 */
10622     { Bad_Opcode },
10623     { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
10624   },
10625   {
10626     /* MOD_VEX_0F71_REG_4 */
10627     { Bad_Opcode },
10628     { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
10629   },
10630   {
10631     /* MOD_VEX_0F71_REG_6 */
10632     { Bad_Opcode },
10633     { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
10634   },
10635   {
10636     /* MOD_VEX_0F72_REG_2 */
10637     { Bad_Opcode },
10638     { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
10639   },
10640   {
10641     /* MOD_VEX_0F72_REG_4 */
10642     { Bad_Opcode },
10643     { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
10644   },
10645   {
10646     /* MOD_VEX_0F72_REG_6 */
10647     { Bad_Opcode },
10648     { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
10649   },
10650   {
10651     /* MOD_VEX_0F73_REG_2 */
10652     { Bad_Opcode },
10653     { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
10654   },
10655   {
10656     /* MOD_VEX_0F73_REG_3 */
10657     { Bad_Opcode },
10658     { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
10659   },
10660   {
10661     /* MOD_VEX_0F73_REG_6 */
10662     { Bad_Opcode },
10663     { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
10664   },
10665   {
10666     /* MOD_VEX_0F73_REG_7 */
10667     { Bad_Opcode },
10668     { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
10669   },
10670   {
10671     /* MOD_VEX_0FAE_REG_2 */
10672     { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
10673   },
10674   {
10675     /* MOD_VEX_0FAE_REG_3 */
10676     { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
10677   },
10678   {
10679     /* MOD_VEX_0FD7_PREFIX_2 */
10680     { Bad_Opcode },
10681     { VEX_LEN_TABLE (VEX_LEN_0FD7_P_2_M_1) },
10682   },
10683   {
10684     /* MOD_VEX_0FE7_PREFIX_2 */
10685     { VEX_W_TABLE (VEX_W_0FE7_P_2_M_0) },
10686   },
10687   {
10688     /* MOD_VEX_0FF0_PREFIX_3 */
10689     { VEX_W_TABLE (VEX_W_0FF0_P_3_M_0) },
10690   },
10691   {
10692     /* MOD_VEX_0F3818_PREFIX_2 */
10693     { VEX_W_TABLE (VEX_W_0F3818_P_2_M_0) },
10694   },
10695   {
10696     /* MOD_VEX_0F3819_PREFIX_2 */
10697     { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2_M_0) },
10698   },
10699   {
10700     /* MOD_VEX_0F381A_PREFIX_2 */
10701     { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
10702   },
10703   {
10704     /* MOD_VEX_0F382A_PREFIX_2 */
10705     { VEX_LEN_TABLE (VEX_LEN_0F382A_P_2_M_0) },
10706   },
10707   {
10708     /* MOD_VEX_0F382C_PREFIX_2 */
10709     { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
10710   },
10711   {
10712     /* MOD_VEX_0F382D_PREFIX_2 */
10713     { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
10714   },
10715   {
10716     /* MOD_VEX_0F382E_PREFIX_2 */
10717     { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
10718   },
10719   {
10720     /* MOD_VEX_0F382F_PREFIX_2 */
10721     { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
10722   },
10723 };
10724 
10725 static const struct dis386 rm_table[][8] = {
10726   {
10727     /* RM_0F01_REG_0 */
10728     { Bad_Opcode },
10729     { "vmcall",		{ Skip_MODRM } },
10730     { "vmlaunch",	{ Skip_MODRM } },
10731     { "vmresume",	{ Skip_MODRM } },
10732     { "vmxoff",		{ Skip_MODRM } },
10733   },
10734   {
10735     /* RM_0F01_REG_1 */
10736     { "monitor",	{ { OP_Monitor, 0 } } },
10737     { "mwait",		{ { OP_Mwait, 0 } } },
10738   },
10739   {
10740     /* RM_0F01_REG_2 */
10741     { "xgetbv",		{ Skip_MODRM } },
10742     { "xsetbv",		{ Skip_MODRM } },
10743   },
10744   {
10745     /* RM_0F01_REG_3 */
10746     { "vmrun",		{ Skip_MODRM } },
10747     { "vmmcall",	{ Skip_MODRM } },
10748     { "vmload",		{ Skip_MODRM } },
10749     { "vmsave",		{ Skip_MODRM } },
10750     { "stgi",		{ Skip_MODRM } },
10751     { "clgi",		{ Skip_MODRM } },
10752     { "skinit",		{ Skip_MODRM } },
10753     { "invlpga",	{ Skip_MODRM } },
10754   },
10755   {
10756     /* RM_0F01_REG_7 */
10757     { "swapgs",		{ Skip_MODRM } },
10758     { "rdtscp",		{ Skip_MODRM } },
10759   },
10760   {
10761     /* RM_0FAE_REG_5 */
10762     { "lfence",		{ Skip_MODRM } },
10763   },
10764   {
10765     /* RM_0FAE_REG_6 */
10766     { "mfence",		{ Skip_MODRM } },
10767   },
10768   {
10769     /* RM_0FAE_REG_7 */
10770     { "sfence",		{ Skip_MODRM } },
10771   },
10772 };
10773 
10774 #define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
10775 
10776 /* We use the high bit to indicate different name for the same
10777    prefix.  */
10778 #define ADDR16_PREFIX	(0x67 | 0x100)
10779 #define ADDR32_PREFIX	(0x67 | 0x200)
10780 #define DATA16_PREFIX	(0x66 | 0x100)
10781 #define DATA32_PREFIX	(0x66 | 0x200)
10782 #define REP_PREFIX	(0xf3 | 0x100)
10783 
10784 static int
10785 ckprefix (void)
10786 {
10787   int newrex, i, length;
10788   rex = 0;
10789   rex_ignored = 0;
10790   prefixes = 0;
10791   used_prefixes = 0;
10792   rex_used = 0;
10793   last_lock_prefix = -1;
10794   last_repz_prefix = -1;
10795   last_repnz_prefix = -1;
10796   last_data_prefix = -1;
10797   last_addr_prefix = -1;
10798   last_rex_prefix = -1;
10799   last_seg_prefix = -1;
10800   for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
10801     all_prefixes[i] = 0;
10802   i = 0;
10803   length = 0;
10804   /* The maximum instruction length is 15bytes.  */
10805   while (length < MAX_CODE_LENGTH - 1)
10806     {
10807       FETCH_DATA (the_info, codep + 1);
10808       newrex = 0;
10809       switch (*codep)
10810 	{
10811 	/* REX prefixes family.  */
10812 	case 0x40:
10813 	case 0x41:
10814 	case 0x42:
10815 	case 0x43:
10816 	case 0x44:
10817 	case 0x45:
10818 	case 0x46:
10819 	case 0x47:
10820 	case 0x48:
10821 	case 0x49:
10822 	case 0x4a:
10823 	case 0x4b:
10824 	case 0x4c:
10825 	case 0x4d:
10826 	case 0x4e:
10827 	case 0x4f:
10828 	  if (address_mode == mode_64bit)
10829 	    newrex = *codep;
10830 	  else
10831 	    return 1;
10832 	  last_rex_prefix = i;
10833 	  break;
10834 	case 0xf3:
10835 	  prefixes |= PREFIX_REPZ;
10836 	  last_repz_prefix = i;
10837 	  break;
10838 	case 0xf2:
10839 	  prefixes |= PREFIX_REPNZ;
10840 	  last_repnz_prefix = i;
10841 	  break;
10842 	case 0xf0:
10843 	  prefixes |= PREFIX_LOCK;
10844 	  last_lock_prefix = i;
10845 	  break;
10846 	case 0x2e:
10847 	  prefixes |= PREFIX_CS;
10848 	  last_seg_prefix = i;
10849 	  break;
10850 	case 0x36:
10851 	  prefixes |= PREFIX_SS;
10852 	  last_seg_prefix = i;
10853 	  break;
10854 	case 0x3e:
10855 	  prefixes |= PREFIX_DS;
10856 	  last_seg_prefix = i;
10857 	  break;
10858 	case 0x26:
10859 	  prefixes |= PREFIX_ES;
10860 	  last_seg_prefix = i;
10861 	  break;
10862 	case 0x64:
10863 	  prefixes |= PREFIX_FS;
10864 	  last_seg_prefix = i;
10865 	  break;
10866 	case 0x65:
10867 	  prefixes |= PREFIX_GS;
10868 	  last_seg_prefix = i;
10869 	  break;
10870 	case 0x66:
10871 	  prefixes |= PREFIX_DATA;
10872 	  last_data_prefix = i;
10873 	  break;
10874 	case 0x67:
10875 	  prefixes |= PREFIX_ADDR;
10876 	  last_addr_prefix = i;
10877 	  break;
10878 	case FWAIT_OPCODE:
10879 	  /* fwait is really an instruction.  If there are prefixes
10880 	     before the fwait, they belong to the fwait, *not* to the
10881 	     following instruction.  */
10882 	  if (prefixes || rex)
10883 	    {
10884 	      prefixes |= PREFIX_FWAIT;
10885 	      codep++;
10886 	      return 1;
10887 	    }
10888 	  prefixes = PREFIX_FWAIT;
10889 	  break;
10890 	default:
10891 	  return 1;
10892 	}
10893       /* Rex is ignored when followed by another prefix.  */
10894       if (rex)
10895 	{
10896 	  rex_used = rex;
10897 	  return 1;
10898 	}
10899       if (*codep != FWAIT_OPCODE)
10900 	all_prefixes[i++] = *codep;
10901       rex = newrex;
10902       codep++;
10903       length++;
10904     }
10905   return 0;
10906 }
10907 
10908 static int
10909 seg_prefix (int pref)
10910 {
10911   switch (pref)
10912     {
10913     case 0x2e:
10914       return PREFIX_CS;
10915     case 0x36:
10916       return PREFIX_SS;
10917     case 0x3e:
10918       return PREFIX_DS;
10919     case 0x26:
10920       return PREFIX_ES;
10921     case 0x64:
10922       return PREFIX_FS;
10923     case 0x65:
10924       return PREFIX_GS;
10925     default:
10926       return 0;
10927     }
10928 }
10929 
10930 /* Return the name of the prefix byte PREF, or NULL if PREF is not a
10931    prefix byte.  */
10932 
10933 static const char *
10934 prefix_name (int pref, int sizeflag)
10935 {
10936   static const char *rexes [16] =
10937     {
10938       "rex",		/* 0x40 */
10939       "rex.B",		/* 0x41 */
10940       "rex.X",		/* 0x42 */
10941       "rex.XB",		/* 0x43 */
10942       "rex.R",		/* 0x44 */
10943       "rex.RB",		/* 0x45 */
10944       "rex.RX",		/* 0x46 */
10945       "rex.RXB",	/* 0x47 */
10946       "rex.W",		/* 0x48 */
10947       "rex.WB",		/* 0x49 */
10948       "rex.WX",		/* 0x4a */
10949       "rex.WXB",	/* 0x4b */
10950       "rex.WR",		/* 0x4c */
10951       "rex.WRB",	/* 0x4d */
10952       "rex.WRX",	/* 0x4e */
10953       "rex.WRXB",	/* 0x4f */
10954     };
10955 
10956   switch (pref)
10957     {
10958     /* REX prefixes family.  */
10959     case 0x40:
10960     case 0x41:
10961     case 0x42:
10962     case 0x43:
10963     case 0x44:
10964     case 0x45:
10965     case 0x46:
10966     case 0x47:
10967     case 0x48:
10968     case 0x49:
10969     case 0x4a:
10970     case 0x4b:
10971     case 0x4c:
10972     case 0x4d:
10973     case 0x4e:
10974     case 0x4f:
10975       return rexes [pref - 0x40];
10976     case 0xf3:
10977       return "repz";
10978     case 0xf2:
10979       return "repnz";
10980     case 0xf0:
10981       return "lock";
10982     case 0x2e:
10983       return "cs";
10984     case 0x36:
10985       return "ss";
10986     case 0x3e:
10987       return "ds";
10988     case 0x26:
10989       return "es";
10990     case 0x64:
10991       return "fs";
10992     case 0x65:
10993       return "gs";
10994     case 0x66:
10995       return (sizeflag & DFLAG) ? "data16" : "data32";
10996     case 0x67:
10997       if (address_mode == mode_64bit)
10998 	return (sizeflag & AFLAG) ? "addr32" : "addr64";
10999       else
11000 	return (sizeflag & AFLAG) ? "addr16" : "addr32";
11001     case FWAIT_OPCODE:
11002       return "fwait";
11003     case ADDR16_PREFIX:
11004       return "addr16";
11005     case ADDR32_PREFIX:
11006       return "addr32";
11007     case DATA16_PREFIX:
11008       return "data16";
11009     case DATA32_PREFIX:
11010       return "data32";
11011     case REP_PREFIX:
11012       return "rep";
11013     default:
11014       return NULL;
11015     }
11016 }
11017 
11018 static char op_out[MAX_OPERANDS][100];
11019 static int op_ad, op_index[MAX_OPERANDS];
11020 static int two_source_ops;
11021 static bfd_vma op_address[MAX_OPERANDS];
11022 static bfd_vma op_riprel[MAX_OPERANDS];
11023 static bfd_vma start_pc;
11024 
11025 /*
11026  *   On the 386's of 1988, the maximum length of an instruction is 15 bytes.
11027  *   (see topic "Redundant prefixes" in the "Differences from 8086"
11028  *   section of the "Virtual 8086 Mode" chapter.)
11029  * 'pc' should be the address of this instruction, it will
11030  *   be used to print the target address if this is a relative jump or call
11031  * The function returns the length of this instruction in bytes.
11032  */
11033 
11034 static char intel_syntax;
11035 static char intel_mnemonic = !SYSV386_COMPAT;
11036 static char open_char;
11037 static char close_char;
11038 static char separator_char;
11039 static char scale_char;
11040 
11041 /* Here for backwards compatibility.  When gdb stops using
11042    print_insn_i386_att and print_insn_i386_intel these functions can
11043    disappear, and print_insn_i386 be merged into print_insn.  */
11044 int
11045 print_insn_i386_att (bfd_vma pc, disassemble_info *info)
11046 {
11047   intel_syntax = 0;
11048 
11049   return print_insn (pc, info);
11050 }
11051 
11052 int
11053 print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
11054 {
11055   intel_syntax = 1;
11056 
11057   return print_insn (pc, info);
11058 }
11059 
11060 int
11061 print_insn_i386 (bfd_vma pc, disassemble_info *info)
11062 {
11063   intel_syntax = -1;
11064 
11065   return print_insn (pc, info);
11066 }
11067 
11068 void
11069 print_i386_disassembler_options (FILE *stream)
11070 {
11071   fprintf (stream, _("\n\
11072 The following i386/x86-64 specific disassembler options are supported for use\n\
11073 with the -M switch (multiple options should be separated by commas):\n"));
11074 
11075   fprintf (stream, _("  x86-64      Disassemble in 64bit mode\n"));
11076   fprintf (stream, _("  i386        Disassemble in 32bit mode\n"));
11077   fprintf (stream, _("  i8086       Disassemble in 16bit mode\n"));
11078   fprintf (stream, _("  att         Display instruction in AT&T syntax\n"));
11079   fprintf (stream, _("  intel       Display instruction in Intel syntax\n"));
11080   fprintf (stream, _("  att-mnemonic\n"
11081 		     "              Display instruction in AT&T mnemonic\n"));
11082   fprintf (stream, _("  intel-mnemonic\n"
11083 		     "              Display instruction in Intel mnemonic\n"));
11084   fprintf (stream, _("  addr64      Assume 64bit address size\n"));
11085   fprintf (stream, _("  addr32      Assume 32bit address size\n"));
11086   fprintf (stream, _("  addr16      Assume 16bit address size\n"));
11087   fprintf (stream, _("  data32      Assume 32bit data size\n"));
11088   fprintf (stream, _("  data16      Assume 16bit data size\n"));
11089   fprintf (stream, _("  suffix      Always display instruction suffix in AT&T syntax\n"));
11090 }
11091 
11092 /* Bad opcode.  */
11093 static const struct dis386 bad_opcode = { "(bad)", { XX } };
11094 
11095 /* Get a pointer to struct dis386 with a valid name.  */
11096 
11097 static const struct dis386 *
11098 get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
11099 {
11100   int vindex, vex_table_index;
11101 
11102   if (dp->name != NULL)
11103     return dp;
11104 
11105   switch (dp->op[0].bytemode)
11106     {
11107     case USE_REG_TABLE:
11108       dp = &reg_table[dp->op[1].bytemode][modrm.reg];
11109       break;
11110 
11111     case USE_MOD_TABLE:
11112       vindex = modrm.mod == 0x3 ? 1 : 0;
11113       dp = &mod_table[dp->op[1].bytemode][vindex];
11114       break;
11115 
11116     case USE_RM_TABLE:
11117       dp = &rm_table[dp->op[1].bytemode][modrm.rm];
11118       break;
11119 
11120     case USE_PREFIX_TABLE:
11121       if (need_vex)
11122 	{
11123 	  /* The prefix in VEX is implicit.  */
11124 	  switch (vex.prefix)
11125 	    {
11126 	    case 0:
11127 	      vindex = 0;
11128 	      break;
11129 	    case REPE_PREFIX_OPCODE:
11130 	      vindex = 1;
11131 	      break;
11132 	    case DATA_PREFIX_OPCODE:
11133 	      vindex = 2;
11134 	      break;
11135 	    case REPNE_PREFIX_OPCODE:
11136 	      vindex = 3;
11137 	      break;
11138 	    default:
11139 	      abort ();
11140 	      break;
11141 	    }
11142 	}
11143       else
11144 	{
11145 	  vindex = 0;
11146 	  used_prefixes |= (prefixes & PREFIX_REPZ);
11147 	  if (prefixes & PREFIX_REPZ)
11148 	    {
11149 	      vindex = 1;
11150 	      all_prefixes[last_repz_prefix] = 0;
11151 	    }
11152 	  else
11153 	    {
11154 	      /* We should check PREFIX_REPNZ and PREFIX_REPZ before
11155 		 PREFIX_DATA.  */
11156 	      used_prefixes |= (prefixes & PREFIX_REPNZ);
11157 	      if (prefixes & PREFIX_REPNZ)
11158 		{
11159 		  vindex = 3;
11160 		  all_prefixes[last_repnz_prefix] = 0;
11161 		}
11162 	      else
11163 		{
11164 		  used_prefixes |= (prefixes & PREFIX_DATA);
11165 		  if (prefixes & PREFIX_DATA)
11166 		    {
11167 		      vindex = 2;
11168 		      all_prefixes[last_data_prefix] = 0;
11169 		    }
11170 		}
11171 	    }
11172 	}
11173       dp = &prefix_table[dp->op[1].bytemode][vindex];
11174       break;
11175 
11176     case USE_X86_64_TABLE:
11177       vindex = address_mode == mode_64bit ? 1 : 0;
11178       dp = &x86_64_table[dp->op[1].bytemode][vindex];
11179       break;
11180 
11181     case USE_3BYTE_TABLE:
11182       FETCH_DATA (info, codep + 2);
11183       vindex = *codep++;
11184       dp = &three_byte_table[dp->op[1].bytemode][vindex];
11185       modrm.mod = (*codep >> 6) & 3;
11186       modrm.reg = (*codep >> 3) & 7;
11187       modrm.rm = *codep & 7;
11188       break;
11189 
11190     case USE_VEX_LEN_TABLE:
11191       if (!need_vex)
11192 	abort ();
11193 
11194       switch (vex.length)
11195 	{
11196 	case 128:
11197 	  vindex = 0;
11198 	  break;
11199 	case 256:
11200 	  vindex = 1;
11201 	  break;
11202 	default:
11203 	  abort ();
11204 	  break;
11205 	}
11206 
11207       dp = &vex_len_table[dp->op[1].bytemode][vindex];
11208       break;
11209 
11210     case USE_XOP_8F_TABLE:
11211       FETCH_DATA (info, codep + 3);
11212       /* All bits in the REX prefix are ignored.  */
11213       rex_ignored = rex;
11214       rex = ~(*codep >> 5) & 0x7;
11215 
11216       /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm".  */
11217       switch ((*codep & 0x1f))
11218 	{
11219 	default:
11220 	  dp = &bad_opcode;
11221 	  return dp;
11222 	case 0x8:
11223 	  vex_table_index = XOP_08;
11224 	  break;
11225 	case 0x9:
11226 	  vex_table_index = XOP_09;
11227 	  break;
11228 	case 0xa:
11229 	  vex_table_index = XOP_0A;
11230 	  break;
11231 	}
11232       codep++;
11233       vex.w = *codep & 0x80;
11234       if (vex.w && address_mode == mode_64bit)
11235 	rex |= REX_W;
11236 
11237       vex.register_specifier = (~(*codep >> 3)) & 0xf;
11238       if (address_mode != mode_64bit
11239 	  && vex.register_specifier > 0x7)
11240 	{
11241 	  dp = &bad_opcode;
11242 	  return dp;
11243 	}
11244 
11245       vex.length = (*codep & 0x4) ? 256 : 128;
11246       switch ((*codep & 0x3))
11247 	{
11248 	case 0:
11249 	  vex.prefix = 0;
11250 	  break;
11251 	case 1:
11252 	  vex.prefix = DATA_PREFIX_OPCODE;
11253 	  break;
11254 	case 2:
11255 	  vex.prefix = REPE_PREFIX_OPCODE;
11256 	  break;
11257 	case 3:
11258 	  vex.prefix = REPNE_PREFIX_OPCODE;
11259 	  break;
11260 	}
11261       need_vex = 1;
11262       need_vex_reg = 1;
11263       codep++;
11264       vindex = *codep++;
11265       dp = &xop_table[vex_table_index][vindex];
11266 
11267       FETCH_DATA (info, codep + 1);
11268       modrm.mod = (*codep >> 6) & 3;
11269       modrm.reg = (*codep >> 3) & 7;
11270       modrm.rm = *codep & 7;
11271       break;
11272 
11273     case USE_VEX_C4_TABLE:
11274       FETCH_DATA (info, codep + 3);
11275       /* All bits in the REX prefix are ignored.  */
11276       rex_ignored = rex;
11277       rex = ~(*codep >> 5) & 0x7;
11278       switch ((*codep & 0x1f))
11279 	{
11280 	default:
11281 	  dp = &bad_opcode;
11282 	  return dp;
11283 	case 0x1:
11284 	  vex_table_index = VEX_0F;
11285 	  break;
11286 	case 0x2:
11287 	  vex_table_index = VEX_0F38;
11288 	  break;
11289 	case 0x3:
11290 	  vex_table_index = VEX_0F3A;
11291 	  break;
11292 	}
11293       codep++;
11294       vex.w = *codep & 0x80;
11295       if (vex.w && address_mode == mode_64bit)
11296 	rex |= REX_W;
11297 
11298       vex.register_specifier = (~(*codep >> 3)) & 0xf;
11299       if (address_mode != mode_64bit
11300 	  && vex.register_specifier > 0x7)
11301 	{
11302 	  dp = &bad_opcode;
11303 	  return dp;
11304 	}
11305 
11306       vex.length = (*codep & 0x4) ? 256 : 128;
11307       switch ((*codep & 0x3))
11308 	{
11309 	case 0:
11310 	  vex.prefix = 0;
11311 	  break;
11312 	case 1:
11313 	  vex.prefix = DATA_PREFIX_OPCODE;
11314 	  break;
11315 	case 2:
11316 	  vex.prefix = REPE_PREFIX_OPCODE;
11317 	  break;
11318 	case 3:
11319 	  vex.prefix = REPNE_PREFIX_OPCODE;
11320 	  break;
11321 	}
11322       need_vex = 1;
11323       need_vex_reg = 1;
11324       codep++;
11325       vindex = *codep++;
11326       dp = &vex_table[vex_table_index][vindex];
11327       /* There is no MODRM byte for VEX [82|77].  */
11328       if (vindex != 0x77 && vindex != 0x82)
11329 	{
11330 	  FETCH_DATA (info, codep + 1);
11331 	  modrm.mod = (*codep >> 6) & 3;
11332 	  modrm.reg = (*codep >> 3) & 7;
11333 	  modrm.rm = *codep & 7;
11334 	}
11335       break;
11336 
11337     case USE_VEX_C5_TABLE:
11338       FETCH_DATA (info, codep + 2);
11339       /* All bits in the REX prefix are ignored.  */
11340       rex_ignored = rex;
11341       rex = (*codep & 0x80) ? 0 : REX_R;
11342 
11343       vex.register_specifier = (~(*codep >> 3)) & 0xf;
11344       if (address_mode != mode_64bit
11345 	  && vex.register_specifier > 0x7)
11346 	{
11347 	  dp = &bad_opcode;
11348 	  return dp;
11349 	}
11350 
11351       vex.w = 0;
11352 
11353       vex.length = (*codep & 0x4) ? 256 : 128;
11354       switch ((*codep & 0x3))
11355 	{
11356 	case 0:
11357 	  vex.prefix = 0;
11358 	  break;
11359 	case 1:
11360 	  vex.prefix = DATA_PREFIX_OPCODE;
11361 	  break;
11362 	case 2:
11363 	  vex.prefix = REPE_PREFIX_OPCODE;
11364 	  break;
11365 	case 3:
11366 	  vex.prefix = REPNE_PREFIX_OPCODE;
11367 	  break;
11368 	}
11369       need_vex = 1;
11370       need_vex_reg = 1;
11371       codep++;
11372       vindex = *codep++;
11373       dp = &vex_table[dp->op[1].bytemode][vindex];
11374       /* There is no MODRM byte for VEX [82|77].  */
11375       if (vindex != 0x77 && vindex != 0x82)
11376 	{
11377 	  FETCH_DATA (info, codep + 1);
11378 	  modrm.mod = (*codep >> 6) & 3;
11379 	  modrm.reg = (*codep >> 3) & 7;
11380 	  modrm.rm = *codep & 7;
11381 	}
11382       break;
11383 
11384     case USE_VEX_W_TABLE:
11385       if (!need_vex)
11386 	abort ();
11387 
11388       dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
11389       break;
11390 
11391     case 0:
11392       dp = &bad_opcode;
11393       break;
11394 
11395     default:
11396       abort ();
11397     }
11398 
11399   if (dp->name != NULL)
11400     return dp;
11401   else
11402     return get_valid_dis386 (dp, info);
11403 }
11404 
11405 static void
11406 get_sib (disassemble_info *info)
11407 {
11408   /* If modrm.mod == 3, operand must be register.  */
11409   if (need_modrm
11410       && address_mode != mode_16bit
11411       && modrm.mod != 3
11412       && modrm.rm == 4)
11413     {
11414       FETCH_DATA (info, codep + 2);
11415       sib.index = (codep [1] >> 3) & 7;
11416       sib.scale = (codep [1] >> 6) & 3;
11417       sib.base = codep [1] & 7;
11418     }
11419 }
11420 
11421 static int
11422 print_insn (bfd_vma pc, disassemble_info *info)
11423 {
11424   const struct dis386 *dp;
11425   int i;
11426   char *op_txt[MAX_OPERANDS];
11427   int needcomma;
11428   int sizeflag;
11429   const char *p;
11430   struct dis_private priv;
11431   int prefix_length;
11432   int default_prefixes;
11433 
11434   if (info->mach == bfd_mach_x86_64_intel_syntax
11435       || info->mach == bfd_mach_x86_64
11436       || info->mach == bfd_mach_x64_32_intel_syntax
11437       || info->mach == bfd_mach_x64_32
11438       || info->mach == bfd_mach_l1om
11439       || info->mach == bfd_mach_l1om_intel_syntax)
11440     address_mode = mode_64bit;
11441   else
11442     address_mode = mode_32bit;
11443 
11444   if (intel_syntax == (char) -1)
11445     intel_syntax = (info->mach == bfd_mach_i386_i386_intel_syntax
11446 		    || info->mach == bfd_mach_x86_64_intel_syntax
11447 		    || info->mach == bfd_mach_x64_32_intel_syntax
11448 		    || info->mach == bfd_mach_l1om_intel_syntax);
11449 
11450   if (info->mach == bfd_mach_i386_i386
11451       || info->mach == bfd_mach_x86_64
11452       || info->mach == bfd_mach_x64_32
11453       || info->mach == bfd_mach_l1om
11454       || info->mach == bfd_mach_i386_i386_intel_syntax
11455       || info->mach == bfd_mach_x86_64_intel_syntax
11456       || info->mach == bfd_mach_x64_32_intel_syntax
11457       || info->mach == bfd_mach_l1om_intel_syntax)
11458     priv.orig_sizeflag = AFLAG | DFLAG;
11459   else if (info->mach == bfd_mach_i386_i8086)
11460     priv.orig_sizeflag = 0;
11461   else
11462     abort ();
11463 
11464   for (p = info->disassembler_options; p != NULL; )
11465     {
11466       if (CONST_STRNEQ (p, "x86-64"))
11467 	{
11468 	  address_mode = mode_64bit;
11469 	  priv.orig_sizeflag = AFLAG | DFLAG;
11470 	}
11471       else if (CONST_STRNEQ (p, "i386"))
11472 	{
11473 	  address_mode = mode_32bit;
11474 	  priv.orig_sizeflag = AFLAG | DFLAG;
11475 	}
11476       else if (CONST_STRNEQ (p, "i8086"))
11477 	{
11478 	  address_mode = mode_16bit;
11479 	  priv.orig_sizeflag = 0;
11480 	}
11481       else if (CONST_STRNEQ (p, "intel"))
11482 	{
11483 	  intel_syntax = 1;
11484 	  if (CONST_STRNEQ (p + 5, "-mnemonic"))
11485 	    intel_mnemonic = 1;
11486 	}
11487       else if (CONST_STRNEQ (p, "att"))
11488 	{
11489 	  intel_syntax = 0;
11490 	  if (CONST_STRNEQ (p + 3, "-mnemonic"))
11491 	    intel_mnemonic = 0;
11492 	}
11493       else if (CONST_STRNEQ (p, "addr"))
11494 	{
11495 	  if (address_mode == mode_64bit)
11496 	    {
11497 	      if (p[4] == '3' && p[5] == '2')
11498 		priv.orig_sizeflag &= ~AFLAG;
11499 	      else if (p[4] == '6' && p[5] == '4')
11500 		priv.orig_sizeflag |= AFLAG;
11501 	    }
11502 	  else
11503 	    {
11504 	      if (p[4] == '1' && p[5] == '6')
11505 		priv.orig_sizeflag &= ~AFLAG;
11506 	      else if (p[4] == '3' && p[5] == '2')
11507 		priv.orig_sizeflag |= AFLAG;
11508 	    }
11509 	}
11510       else if (CONST_STRNEQ (p, "data"))
11511 	{
11512 	  if (p[4] == '1' && p[5] == '6')
11513 	    priv.orig_sizeflag &= ~DFLAG;
11514 	  else if (p[4] == '3' && p[5] == '2')
11515 	    priv.orig_sizeflag |= DFLAG;
11516 	}
11517       else if (CONST_STRNEQ (p, "suffix"))
11518 	priv.orig_sizeflag |= SUFFIX_ALWAYS;
11519 
11520       p = strchr (p, ',');
11521       if (p != NULL)
11522 	p++;
11523     }
11524 
11525   if (intel_syntax)
11526     {
11527       names64 = intel_names64;
11528       names32 = intel_names32;
11529       names16 = intel_names16;
11530       names8 = intel_names8;
11531       names8rex = intel_names8rex;
11532       names_seg = intel_names_seg;
11533       names_mm = intel_names_mm;
11534       names_xmm = intel_names_xmm;
11535       names_ymm = intel_names_ymm;
11536       index64 = intel_index64;
11537       index32 = intel_index32;
11538       index16 = intel_index16;
11539       open_char = '[';
11540       close_char = ']';
11541       separator_char = '+';
11542       scale_char = '*';
11543     }
11544   else
11545     {
11546       names64 = att_names64;
11547       names32 = att_names32;
11548       names16 = att_names16;
11549       names8 = att_names8;
11550       names8rex = att_names8rex;
11551       names_seg = att_names_seg;
11552       names_mm = att_names_mm;
11553       names_xmm = att_names_xmm;
11554       names_ymm = att_names_ymm;
11555       index64 = att_index64;
11556       index32 = att_index32;
11557       index16 = att_index16;
11558       open_char = '(';
11559       close_char =  ')';
11560       separator_char = ',';
11561       scale_char = ',';
11562     }
11563 
11564   /* The output looks better if we put 7 bytes on a line, since that
11565      puts most long word instructions on a single line.  Use 8 bytes
11566      for Intel L1OM.  */
11567   if (info->mach == bfd_mach_l1om
11568       || info->mach == bfd_mach_l1om_intel_syntax)
11569     info->bytes_per_line = 8;
11570   else
11571     info->bytes_per_line = 7;
11572 
11573   info->private_data = &priv;
11574   priv.max_fetched = priv.the_buffer;
11575   priv.insn_start = pc;
11576 
11577   obuf[0] = 0;
11578   for (i = 0; i < MAX_OPERANDS; ++i)
11579     {
11580       op_out[i][0] = 0;
11581       op_index[i] = -1;
11582     }
11583 
11584   the_info = info;
11585   start_pc = pc;
11586   start_codep = priv.the_buffer;
11587   codep = priv.the_buffer;
11588 
11589   if (setjmp (priv.bailout) != 0)
11590     {
11591       const char *name;
11592 
11593       /* Getting here means we tried for data but didn't get it.  That
11594 	 means we have an incomplete instruction of some sort.  Just
11595 	 print the first byte as a prefix or a .byte pseudo-op.  */
11596       if (codep > priv.the_buffer)
11597 	{
11598 	  name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
11599 	  if (name != NULL)
11600 	    (*info->fprintf_func) (info->stream, "%s", name);
11601 	  else
11602 	    {
11603 	      /* Just print the first byte as a .byte instruction.  */
11604 	      (*info->fprintf_func) (info->stream, ".byte 0x%x",
11605 				     (unsigned int) priv.the_buffer[0]);
11606 	    }
11607 
11608 	  return 1;
11609 	}
11610 
11611       return -1;
11612     }
11613 
11614   obufp = obuf;
11615   sizeflag = priv.orig_sizeflag;
11616 
11617   if (!ckprefix () || rex_used)
11618     {
11619       /* Too many prefixes or unused REX prefixes.  */
11620       for (i = 0;
11621 	   all_prefixes[i] && i < (int) ARRAY_SIZE (all_prefixes);
11622 	   i++)
11623 	(*info->fprintf_func) (info->stream, "%s",
11624 			       prefix_name (all_prefixes[i], sizeflag));
11625       return 1;
11626     }
11627 
11628   insn_codep = codep;
11629 
11630   FETCH_DATA (info, codep + 1);
11631   two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
11632 
11633   if (((prefixes & PREFIX_FWAIT)
11634        && ((*codep < 0xd8) || (*codep > 0xdf))))
11635     {
11636       (*info->fprintf_func) (info->stream, "fwait");
11637       return 1;
11638     }
11639 
11640   if (*codep == 0x0f)
11641     {
11642       unsigned char threebyte;
11643       FETCH_DATA (info, codep + 2);
11644       threebyte = *++codep;
11645       dp = &dis386_twobyte[threebyte];
11646       need_modrm = twobyte_has_modrm[*codep];
11647       codep++;
11648     }
11649   else
11650     {
11651       dp = &dis386[*codep];
11652       need_modrm = onebyte_has_modrm[*codep];
11653       codep++;
11654     }
11655 
11656   if ((prefixes & PREFIX_REPZ))
11657     used_prefixes |= PREFIX_REPZ;
11658   if ((prefixes & PREFIX_REPNZ))
11659     used_prefixes |= PREFIX_REPNZ;
11660   if ((prefixes & PREFIX_LOCK))
11661     used_prefixes |= PREFIX_LOCK;
11662 
11663   default_prefixes = 0;
11664   if (prefixes & PREFIX_ADDR)
11665     {
11666       sizeflag ^= AFLAG;
11667       if (dp->op[2].bytemode != loop_jcxz_mode || intel_syntax)
11668 	{
11669 	  if ((sizeflag & AFLAG) || address_mode == mode_64bit)
11670 	    all_prefixes[last_addr_prefix] = ADDR32_PREFIX;
11671 	  else
11672 	    all_prefixes[last_addr_prefix] = ADDR16_PREFIX;
11673 	  default_prefixes |= PREFIX_ADDR;
11674 	}
11675     }
11676 
11677   if ((prefixes & PREFIX_DATA))
11678     {
11679       sizeflag ^= DFLAG;
11680       if (dp->op[2].bytemode == cond_jump_mode
11681 	  && dp->op[0].bytemode == v_mode
11682 	  && !intel_syntax)
11683 	{
11684 	  if (sizeflag & DFLAG)
11685 	    all_prefixes[last_data_prefix] = DATA32_PREFIX;
11686 	  else
11687 	    all_prefixes[last_data_prefix] = DATA16_PREFIX;
11688 	  default_prefixes |= PREFIX_DATA;
11689 	}
11690       else if (rex & REX_W)
11691 	{
11692 	  /* REX_W will override PREFIX_DATA.  */
11693 	  default_prefixes |= PREFIX_DATA;
11694 	}
11695     }
11696 
11697   if (need_modrm)
11698     {
11699       FETCH_DATA (info, codep + 1);
11700       modrm.mod = (*codep >> 6) & 3;
11701       modrm.reg = (*codep >> 3) & 7;
11702       modrm.rm = *codep & 7;
11703     }
11704 
11705   need_vex = 0;
11706   need_vex_reg = 0;
11707   vex_w_done = 0;
11708 
11709   if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
11710     {
11711       get_sib (info);
11712       dofloat (sizeflag);
11713     }
11714   else
11715     {
11716       dp = get_valid_dis386 (dp, info);
11717       if (dp != NULL && putop (dp->name, sizeflag) == 0)
11718         {
11719 	  get_sib (info);
11720 	  for (i = 0; i < MAX_OPERANDS; ++i)
11721 	    {
11722 	      obufp = op_out[i];
11723 	      op_ad = MAX_OPERANDS - 1 - i;
11724 	      if (dp->op[i].rtn)
11725 		(*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
11726 	    }
11727 	}
11728     }
11729 
11730   /* See if any prefixes were not used.  If so, print the first one
11731      separately.  If we don't do this, we'll wind up printing an
11732      instruction stream which does not precisely correspond to the
11733      bytes we are disassembling.  */
11734   if ((prefixes & ~(used_prefixes | default_prefixes)) != 0)
11735     {
11736       for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
11737 	if (all_prefixes[i])
11738 	  {
11739 	    const char *name;
11740 	    name = prefix_name (all_prefixes[i], priv.orig_sizeflag);
11741 	    if (name == NULL)
11742 	      name = INTERNAL_DISASSEMBLER_ERROR;
11743 	    (*info->fprintf_func) (info->stream, "%s", name);
11744 	    return 1;
11745 	  }
11746     }
11747 
11748   /* Check if the REX prefix is used.  */
11749   if (rex_ignored == 0 && (rex ^ rex_used) == 0)
11750     all_prefixes[last_rex_prefix] = 0;
11751 
11752   /* Check if the SEG prefix is used.  */
11753   if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
11754 		   | PREFIX_FS | PREFIX_GS)) != 0
11755       && (used_prefixes
11756 	  & seg_prefix (all_prefixes[last_seg_prefix])) != 0)
11757     all_prefixes[last_seg_prefix] = 0;
11758 
11759   /* Check if the ADDR prefix is used.  */
11760   if ((prefixes & PREFIX_ADDR) != 0
11761       && (used_prefixes & PREFIX_ADDR) != 0)
11762     all_prefixes[last_addr_prefix] = 0;
11763 
11764   /* Check if the DATA prefix is used.  */
11765   if ((prefixes & PREFIX_DATA) != 0
11766       && (used_prefixes & PREFIX_DATA) != 0)
11767     all_prefixes[last_data_prefix] = 0;
11768 
11769   prefix_length = 0;
11770   for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
11771     if (all_prefixes[i])
11772       {
11773 	const char *name;
11774 	name = prefix_name (all_prefixes[i], sizeflag);
11775 	if (name == NULL)
11776 	  abort ();
11777 	prefix_length += strlen (name) + 1;
11778 	(*info->fprintf_func) (info->stream, "%s ", name);
11779       }
11780 
11781   /* Check maximum code length.  */
11782   if ((codep - start_codep) > MAX_CODE_LENGTH)
11783     {
11784       (*info->fprintf_func) (info->stream, "(bad)");
11785       return MAX_CODE_LENGTH;
11786     }
11787 
11788   obufp = mnemonicendp;
11789   for (i = strlen (obuf) + prefix_length; i < 6; i++)
11790     oappend (" ");
11791   oappend (" ");
11792   (*info->fprintf_func) (info->stream, "%s", obuf);
11793 
11794   /* The enter and bound instructions are printed with operands in the same
11795      order as the intel book; everything else is printed in reverse order.  */
11796   if (intel_syntax || two_source_ops)
11797     {
11798       bfd_vma riprel;
11799 
11800       for (i = 0; i < MAX_OPERANDS; ++i)
11801         op_txt[i] = op_out[i];
11802 
11803       for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
11804 	{
11805           op_ad = op_index[i];
11806           op_index[i] = op_index[MAX_OPERANDS - 1 - i];
11807           op_index[MAX_OPERANDS - 1 - i] = op_ad;
11808 	  riprel = op_riprel[i];
11809 	  op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
11810 	  op_riprel[MAX_OPERANDS - 1 - i] = riprel;
11811 	}
11812     }
11813   else
11814     {
11815       for (i = 0; i < MAX_OPERANDS; ++i)
11816         op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
11817     }
11818 
11819   needcomma = 0;
11820   for (i = 0; i < MAX_OPERANDS; ++i)
11821     if (*op_txt[i])
11822       {
11823 	if (needcomma)
11824 	  (*info->fprintf_func) (info->stream, ",");
11825 	if (op_index[i] != -1 && !op_riprel[i])
11826 	  (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
11827 	else
11828 	  (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
11829 	needcomma = 1;
11830       }
11831 
11832   for (i = 0; i < MAX_OPERANDS; i++)
11833     if (op_index[i] != -1 && op_riprel[i])
11834       {
11835 	(*info->fprintf_func) (info->stream, "        # ");
11836 	(*info->print_address_func) ((bfd_vma) (start_pc + codep - start_codep
11837 						+ op_address[op_index[i]]), info);
11838 	break;
11839       }
11840   return codep - priv.the_buffer;
11841 }
11842 
11843 static const char *float_mem[] = {
11844   /* d8 */
11845   "fadd{s|}",
11846   "fmul{s|}",
11847   "fcom{s|}",
11848   "fcomp{s|}",
11849   "fsub{s|}",
11850   "fsubr{s|}",
11851   "fdiv{s|}",
11852   "fdivr{s|}",
11853   /* d9 */
11854   "fld{s|}",
11855   "(bad)",
11856   "fst{s|}",
11857   "fstp{s|}",
11858   "fldenvIC",
11859   "fldcw",
11860   "fNstenvIC",
11861   "fNstcw",
11862   /* da */
11863   "fiadd{l|}",
11864   "fimul{l|}",
11865   "ficom{l|}",
11866   "ficomp{l|}",
11867   "fisub{l|}",
11868   "fisubr{l|}",
11869   "fidiv{l|}",
11870   "fidivr{l|}",
11871   /* db */
11872   "fild{l|}",
11873   "fisttp{l|}",
11874   "fist{l|}",
11875   "fistp{l|}",
11876   "(bad)",
11877   "fld{t||t|}",
11878   "(bad)",
11879   "fstp{t||t|}",
11880   /* dc */
11881   "fadd{l|}",
11882   "fmul{l|}",
11883   "fcom{l|}",
11884   "fcomp{l|}",
11885   "fsub{l|}",
11886   "fsubr{l|}",
11887   "fdiv{l|}",
11888   "fdivr{l|}",
11889   /* dd */
11890   "fld{l|}",
11891   "fisttp{ll|}",
11892   "fst{l||}",
11893   "fstp{l|}",
11894   "frstorIC",
11895   "(bad)",
11896   "fNsaveIC",
11897   "fNstsw",
11898   /* de */
11899   "fiadd",
11900   "fimul",
11901   "ficom",
11902   "ficomp",
11903   "fisub",
11904   "fisubr",
11905   "fidiv",
11906   "fidivr",
11907   /* df */
11908   "fild",
11909   "fisttp",
11910   "fist",
11911   "fistp",
11912   "fbld",
11913   "fild{ll|}",
11914   "fbstp",
11915   "fistp{ll|}",
11916 };
11917 
11918 static const unsigned char float_mem_mode[] = {
11919   /* d8 */
11920   d_mode,
11921   d_mode,
11922   d_mode,
11923   d_mode,
11924   d_mode,
11925   d_mode,
11926   d_mode,
11927   d_mode,
11928   /* d9 */
11929   d_mode,
11930   0,
11931   d_mode,
11932   d_mode,
11933   0,
11934   w_mode,
11935   0,
11936   w_mode,
11937   /* da */
11938   d_mode,
11939   d_mode,
11940   d_mode,
11941   d_mode,
11942   d_mode,
11943   d_mode,
11944   d_mode,
11945   d_mode,
11946   /* db */
11947   d_mode,
11948   d_mode,
11949   d_mode,
11950   d_mode,
11951   0,
11952   t_mode,
11953   0,
11954   t_mode,
11955   /* dc */
11956   q_mode,
11957   q_mode,
11958   q_mode,
11959   q_mode,
11960   q_mode,
11961   q_mode,
11962   q_mode,
11963   q_mode,
11964   /* dd */
11965   q_mode,
11966   q_mode,
11967   q_mode,
11968   q_mode,
11969   0,
11970   0,
11971   0,
11972   w_mode,
11973   /* de */
11974   w_mode,
11975   w_mode,
11976   w_mode,
11977   w_mode,
11978   w_mode,
11979   w_mode,
11980   w_mode,
11981   w_mode,
11982   /* df */
11983   w_mode,
11984   w_mode,
11985   w_mode,
11986   w_mode,
11987   t_mode,
11988   q_mode,
11989   t_mode,
11990   q_mode
11991 };
11992 
11993 #define ST { OP_ST, 0 }
11994 #define STi { OP_STi, 0 }
11995 
11996 #define FGRPd9_2 NULL, { { NULL, 0 } }
11997 #define FGRPd9_4 NULL, { { NULL, 1 } }
11998 #define FGRPd9_5 NULL, { { NULL, 2 } }
11999 #define FGRPd9_6 NULL, { { NULL, 3 } }
12000 #define FGRPd9_7 NULL, { { NULL, 4 } }
12001 #define FGRPda_5 NULL, { { NULL, 5 } }
12002 #define FGRPdb_4 NULL, { { NULL, 6 } }
12003 #define FGRPde_3 NULL, { { NULL, 7 } }
12004 #define FGRPdf_4 NULL, { { NULL, 8 } }
12005 
12006 static const struct dis386 float_reg[][8] = {
12007   /* d8 */
12008   {
12009     { "fadd",	{ ST, STi } },
12010     { "fmul",	{ ST, STi } },
12011     { "fcom",	{ STi } },
12012     { "fcomp",	{ STi } },
12013     { "fsub",	{ ST, STi } },
12014     { "fsubr",	{ ST, STi } },
12015     { "fdiv",	{ ST, STi } },
12016     { "fdivr",	{ ST, STi } },
12017   },
12018   /* d9 */
12019   {
12020     { "fld",	{ STi } },
12021     { "fxch",	{ STi } },
12022     { FGRPd9_2 },
12023     { Bad_Opcode },
12024     { FGRPd9_4 },
12025     { FGRPd9_5 },
12026     { FGRPd9_6 },
12027     { FGRPd9_7 },
12028   },
12029   /* da */
12030   {
12031     { "fcmovb",	{ ST, STi } },
12032     { "fcmove",	{ ST, STi } },
12033     { "fcmovbe",{ ST, STi } },
12034     { "fcmovu",	{ ST, STi } },
12035     { Bad_Opcode },
12036     { FGRPda_5 },
12037     { Bad_Opcode },
12038     { Bad_Opcode },
12039   },
12040   /* db */
12041   {
12042     { "fcmovnb",{ ST, STi } },
12043     { "fcmovne",{ ST, STi } },
12044     { "fcmovnbe",{ ST, STi } },
12045     { "fcmovnu",{ ST, STi } },
12046     { FGRPdb_4 },
12047     { "fucomi",	{ ST, STi } },
12048     { "fcomi",	{ ST, STi } },
12049     { Bad_Opcode },
12050   },
12051   /* dc */
12052   {
12053     { "fadd",	{ STi, ST } },
12054     { "fmul",	{ STi, ST } },
12055     { Bad_Opcode },
12056     { Bad_Opcode },
12057     { "fsub!M",	{ STi, ST } },
12058     { "fsubM",	{ STi, ST } },
12059     { "fdiv!M",	{ STi, ST } },
12060     { "fdivM",	{ STi, ST } },
12061   },
12062   /* dd */
12063   {
12064     { "ffree",	{ STi } },
12065     { Bad_Opcode },
12066     { "fst",	{ STi } },
12067     { "fstp",	{ STi } },
12068     { "fucom",	{ STi } },
12069     { "fucomp",	{ STi } },
12070     { Bad_Opcode },
12071     { Bad_Opcode },
12072   },
12073   /* de */
12074   {
12075     { "faddp",	{ STi, ST } },
12076     { "fmulp",	{ STi, ST } },
12077     { Bad_Opcode },
12078     { FGRPde_3 },
12079     { "fsub!Mp", { STi, ST } },
12080     { "fsubMp",	{ STi, ST } },
12081     { "fdiv!Mp", { STi, ST } },
12082     { "fdivMp",	{ STi, ST } },
12083   },
12084   /* df */
12085   {
12086     { "ffreep",	{ STi } },
12087     { Bad_Opcode },
12088     { Bad_Opcode },
12089     { Bad_Opcode },
12090     { FGRPdf_4 },
12091     { "fucomip", { ST, STi } },
12092     { "fcomip", { ST, STi } },
12093     { Bad_Opcode },
12094   },
12095 };
12096 
12097 static char *fgrps[][8] = {
12098   /* d9_2  0 */
12099   {
12100     "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12101   },
12102 
12103   /* d9_4  1 */
12104   {
12105     "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
12106   },
12107 
12108   /* d9_5  2 */
12109   {
12110     "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
12111   },
12112 
12113   /* d9_6  3 */
12114   {
12115     "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
12116   },
12117 
12118   /* d9_7  4 */
12119   {
12120     "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
12121   },
12122 
12123   /* da_5  5 */
12124   {
12125     "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12126   },
12127 
12128   /* db_4  6 */
12129   {
12130     "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
12131     "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
12132   },
12133 
12134   /* de_3  7 */
12135   {
12136     "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12137   },
12138 
12139   /* df_4  8 */
12140   {
12141     "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12142   },
12143 };
12144 
12145 static void
12146 swap_operand (void)
12147 {
12148   mnemonicendp[0] = '.';
12149   mnemonicendp[1] = 's';
12150   mnemonicendp += 2;
12151 }
12152 
12153 static void
12154 OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
12155 	       int sizeflag ATTRIBUTE_UNUSED)
12156 {
12157   /* Skip mod/rm byte.  */
12158   MODRM_CHECK;
12159   codep++;
12160 }
12161 
12162 static void
12163 dofloat (int sizeflag)
12164 {
12165   const struct dis386 *dp;
12166   unsigned char floatop;
12167 
12168   floatop = codep[-1];
12169 
12170   if (modrm.mod != 3)
12171     {
12172       int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
12173 
12174       putop (float_mem[fp_indx], sizeflag);
12175       obufp = op_out[0];
12176       op_ad = 2;
12177       OP_E (float_mem_mode[fp_indx], sizeflag);
12178       return;
12179     }
12180   /* Skip mod/rm byte.  */
12181   MODRM_CHECK;
12182   codep++;
12183 
12184   dp = &float_reg[floatop - 0xd8][modrm.reg];
12185   if (dp->name == NULL)
12186     {
12187       putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
12188 
12189       /* Instruction fnstsw is only one with strange arg.  */
12190       if (floatop == 0xdf && codep[-1] == 0xe0)
12191 	strcpy (op_out[0], names16[0]);
12192     }
12193   else
12194     {
12195       putop (dp->name, sizeflag);
12196 
12197       obufp = op_out[0];
12198       op_ad = 2;
12199       if (dp->op[0].rtn)
12200 	(*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
12201 
12202       obufp = op_out[1];
12203       op_ad = 1;
12204       if (dp->op[1].rtn)
12205 	(*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
12206     }
12207 }
12208 
12209 static void
12210 OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
12211 {
12212   oappend ("%st" + intel_syntax);
12213 }
12214 
12215 static void
12216 OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
12217 {
12218   sprintf (scratchbuf, "%%st(%d)", modrm.rm);
12219   oappend (scratchbuf + intel_syntax);
12220 }
12221 
12222 /* Capital letters in template are macros.  */
12223 static int
12224 putop (const char *in_template, int sizeflag)
12225 {
12226   const char *p;
12227   int alt = 0;
12228   int cond = 1;
12229   unsigned int l = 0, len = 1;
12230   char last[4];
12231 
12232 #define SAVE_LAST(c)			\
12233   if (l < len && l < sizeof (last))	\
12234     last[l++] = c;			\
12235   else					\
12236     abort ();
12237 
12238   for (p = in_template; *p; p++)
12239     {
12240       switch (*p)
12241 	{
12242 	default:
12243 	  *obufp++ = *p;
12244 	  break;
12245 	case '%':
12246 	  len++;
12247 	  break;
12248 	case '!':
12249 	  cond = 0;
12250 	  break;
12251 	case '{':
12252 	  alt = 0;
12253 	  if (intel_syntax)
12254 	    {
12255 	      while (*++p != '|')
12256 		if (*p == '}' || *p == '\0')
12257 		  abort ();
12258 	    }
12259 	  /* Fall through.  */
12260 	case 'I':
12261 	  alt = 1;
12262 	  continue;
12263 	case '|':
12264 	  while (*++p != '}')
12265 	    {
12266 	      if (*p == '\0')
12267 		abort ();
12268 	    }
12269 	  break;
12270 	case '}':
12271 	  break;
12272 	case 'A':
12273 	  if (intel_syntax)
12274 	    break;
12275 	  if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
12276 	    *obufp++ = 'b';
12277 	  break;
12278 	case 'B':
12279 	  if (l == 0 && len == 1)
12280 	    {
12281 case_B:
12282 	      if (intel_syntax)
12283 		break;
12284 	      if (sizeflag & SUFFIX_ALWAYS)
12285 		*obufp++ = 'b';
12286 	    }
12287 	  else
12288 	    {
12289 	      if (l != 1
12290 		  || len != 2
12291 		  || last[0] != 'L')
12292 		{
12293 		  SAVE_LAST (*p);
12294 		  break;
12295 		}
12296 
12297 	      if (address_mode == mode_64bit
12298 		  && !(prefixes & PREFIX_ADDR))
12299 		{
12300 		  *obufp++ = 'a';
12301 		  *obufp++ = 'b';
12302 		  *obufp++ = 's';
12303 		}
12304 
12305 	      goto case_B;
12306 	    }
12307 	  break;
12308 	case 'C':
12309 	  if (intel_syntax && !alt)
12310 	    break;
12311 	  if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
12312 	    {
12313 	      if (sizeflag & DFLAG)
12314 		*obufp++ = intel_syntax ? 'd' : 'l';
12315 	      else
12316 		*obufp++ = intel_syntax ? 'w' : 's';
12317 	      used_prefixes |= (prefixes & PREFIX_DATA);
12318 	    }
12319 	  break;
12320 	case 'D':
12321 	  if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
12322 	    break;
12323 	  USED_REX (REX_W);
12324 	  if (modrm.mod == 3)
12325 	    {
12326 	      if (rex & REX_W)
12327 		*obufp++ = 'q';
12328 	      else
12329 		{
12330 		  if (sizeflag & DFLAG)
12331 		    *obufp++ = intel_syntax ? 'd' : 'l';
12332 		  else
12333 		    *obufp++ = 'w';
12334 		  used_prefixes |= (prefixes & PREFIX_DATA);
12335 		}
12336 	    }
12337 	  else
12338 	    *obufp++ = 'w';
12339 	  break;
12340 	case 'E':		/* For jcxz/jecxz */
12341 	  if (address_mode == mode_64bit)
12342 	    {
12343 	      if (sizeflag & AFLAG)
12344 		*obufp++ = 'r';
12345 	      else
12346 		*obufp++ = 'e';
12347 	    }
12348 	  else
12349 	    if (sizeflag & AFLAG)
12350 	      *obufp++ = 'e';
12351 	  used_prefixes |= (prefixes & PREFIX_ADDR);
12352 	  break;
12353 	case 'F':
12354 	  if (intel_syntax)
12355 	    break;
12356 	  if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
12357 	    {
12358 	      if (sizeflag & AFLAG)
12359 		*obufp++ = address_mode == mode_64bit ? 'q' : 'l';
12360 	      else
12361 		*obufp++ = address_mode == mode_64bit ? 'l' : 'w';
12362 	      used_prefixes |= (prefixes & PREFIX_ADDR);
12363 	    }
12364 	  break;
12365 	case 'G':
12366 	  if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
12367 	    break;
12368 	  if ((rex & REX_W) || (sizeflag & DFLAG))
12369 	    *obufp++ = 'l';
12370 	  else
12371 	    *obufp++ = 'w';
12372 	  if (!(rex & REX_W))
12373 	    used_prefixes |= (prefixes & PREFIX_DATA);
12374 	  break;
12375 	case 'H':
12376 	  if (intel_syntax)
12377 	    break;
12378 	  if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
12379 	      || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
12380 	    {
12381 	      used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
12382 	      *obufp++ = ',';
12383 	      *obufp++ = 'p';
12384 	      if (prefixes & PREFIX_DS)
12385 		*obufp++ = 't';
12386 	      else
12387 		*obufp++ = 'n';
12388 	    }
12389 	  break;
12390 	case 'J':
12391 	  if (intel_syntax)
12392 	    break;
12393 	  *obufp++ = 'l';
12394 	  break;
12395 	case 'K':
12396 	  USED_REX (REX_W);
12397 	  if (rex & REX_W)
12398 	    *obufp++ = 'q';
12399 	  else
12400 	    *obufp++ = 'd';
12401 	  break;
12402 	case 'Z':
12403 	  if (intel_syntax)
12404 	    break;
12405 	  if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
12406 	    {
12407 	      *obufp++ = 'q';
12408 	      break;
12409 	    }
12410 	  /* Fall through.  */
12411 	  goto case_L;
12412 	case 'L':
12413 	  if (l != 0 || len != 1)
12414 	    {
12415 	      SAVE_LAST (*p);
12416 	      break;
12417 	    }
12418 case_L:
12419 	  if (intel_syntax)
12420 	    break;
12421 	  if (sizeflag & SUFFIX_ALWAYS)
12422 	    *obufp++ = 'l';
12423 	  break;
12424 	case 'M':
12425 	  if (intel_mnemonic != cond)
12426 	    *obufp++ = 'r';
12427 	  break;
12428 	case 'N':
12429 	  if ((prefixes & PREFIX_FWAIT) == 0)
12430 	    *obufp++ = 'n';
12431 	  else
12432 	    used_prefixes |= PREFIX_FWAIT;
12433 	  break;
12434 	case 'O':
12435 	  USED_REX (REX_W);
12436 	  if (rex & REX_W)
12437 	    *obufp++ = 'o';
12438 	  else if (intel_syntax && (sizeflag & DFLAG))
12439 	    *obufp++ = 'q';
12440 	  else
12441 	    *obufp++ = 'd';
12442 	  if (!(rex & REX_W))
12443 	    used_prefixes |= (prefixes & PREFIX_DATA);
12444 	  break;
12445 	case 'T':
12446 	  if (!intel_syntax
12447 	      && address_mode == mode_64bit
12448 	      && (sizeflag & DFLAG))
12449 	    {
12450 	      *obufp++ = 'q';
12451 	      break;
12452 	    }
12453 	  /* Fall through.  */
12454 	case 'P':
12455 	  if (intel_syntax)
12456 	    {
12457 	      if ((rex & REX_W) == 0
12458 		  && (prefixes & PREFIX_DATA))
12459 		{
12460 		  if ((sizeflag & DFLAG) == 0)
12461 		    *obufp++ = 'w';
12462 		   used_prefixes |= (prefixes & PREFIX_DATA);
12463 		}
12464 	      break;
12465 	    }
12466 	  if ((prefixes & PREFIX_DATA)
12467 	      || (rex & REX_W)
12468 	      || (sizeflag & SUFFIX_ALWAYS))
12469 	    {
12470 	      USED_REX (REX_W);
12471 	      if (rex & REX_W)
12472 		*obufp++ = 'q';
12473 	      else
12474 		{
12475 		   if (sizeflag & DFLAG)
12476 		      *obufp++ = 'l';
12477 		   else
12478 		     *obufp++ = 'w';
12479 		   used_prefixes |= (prefixes & PREFIX_DATA);
12480 		}
12481 	    }
12482 	  break;
12483 	case 'U':
12484 	  if (intel_syntax)
12485 	    break;
12486 	  if (address_mode == mode_64bit && (sizeflag & DFLAG))
12487 	    {
12488 	      if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
12489 		*obufp++ = 'q';
12490 	      break;
12491 	    }
12492 	  /* Fall through.  */
12493 	  goto case_Q;
12494 	case 'Q':
12495 	  if (l == 0 && len == 1)
12496 	    {
12497 case_Q:
12498 	      if (intel_syntax && !alt)
12499 		break;
12500 	      USED_REX (REX_W);
12501 	      if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
12502 		{
12503 		  if (rex & REX_W)
12504 		    *obufp++ = 'q';
12505 		  else
12506 		    {
12507 		      if (sizeflag & DFLAG)
12508 			*obufp++ = intel_syntax ? 'd' : 'l';
12509 		      else
12510 			*obufp++ = 'w';
12511 		      used_prefixes |= (prefixes & PREFIX_DATA);
12512 		    }
12513 		}
12514 	    }
12515 	  else
12516 	    {
12517 	      if (l != 1 || len != 2 || last[0] != 'L')
12518 		{
12519 		  SAVE_LAST (*p);
12520 		  break;
12521 		}
12522 	      if (intel_syntax
12523 		  || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
12524 		break;
12525 	      if ((rex & REX_W))
12526 		{
12527 		  USED_REX (REX_W);
12528 		  *obufp++ = 'q';
12529 		}
12530 	      else
12531 		*obufp++ = 'l';
12532 	    }
12533 	  break;
12534 	case 'R':
12535 	  USED_REX (REX_W);
12536 	  if (rex & REX_W)
12537 	    *obufp++ = 'q';
12538 	  else if (sizeflag & DFLAG)
12539 	    {
12540 	      if (intel_syntax)
12541 		  *obufp++ = 'd';
12542 	      else
12543 		  *obufp++ = 'l';
12544 	    }
12545 	  else
12546 	    *obufp++ = 'w';
12547 	  if (intel_syntax && !p[1]
12548 	      && ((rex & REX_W) || (sizeflag & DFLAG)))
12549 	    *obufp++ = 'e';
12550 	  if (!(rex & REX_W))
12551 	    used_prefixes |= (prefixes & PREFIX_DATA);
12552 	  break;
12553 	case 'V':
12554 	  if (l == 0 && len == 1)
12555 	    {
12556 	      if (intel_syntax)
12557 		break;
12558 	      if (address_mode == mode_64bit && (sizeflag & DFLAG))
12559 		{
12560 		  if (sizeflag & SUFFIX_ALWAYS)
12561 		    *obufp++ = 'q';
12562 		  break;
12563 		}
12564 	    }
12565 	  else
12566 	    {
12567 	      if (l != 1
12568 		  || len != 2
12569 		  || last[0] != 'L')
12570 		{
12571 		  SAVE_LAST (*p);
12572 		  break;
12573 		}
12574 
12575 	      if (rex & REX_W)
12576 		{
12577 		  *obufp++ = 'a';
12578 		  *obufp++ = 'b';
12579 		  *obufp++ = 's';
12580 		}
12581 	    }
12582 	  /* Fall through.  */
12583 	  goto case_S;
12584 	case 'S':
12585 	  if (l == 0 && len == 1)
12586 	    {
12587 case_S:
12588 	      if (intel_syntax)
12589 		break;
12590 	      if (sizeflag & SUFFIX_ALWAYS)
12591 		{
12592 		  if (rex & REX_W)
12593 		    *obufp++ = 'q';
12594 		  else
12595 		    {
12596 		      if (sizeflag & DFLAG)
12597 			*obufp++ = 'l';
12598 		      else
12599 			*obufp++ = 'w';
12600 		      used_prefixes |= (prefixes & PREFIX_DATA);
12601 		    }
12602 		}
12603 	    }
12604 	  else
12605 	    {
12606 	      if (l != 1
12607 		  || len != 2
12608 		  || last[0] != 'L')
12609 		{
12610 		  SAVE_LAST (*p);
12611 		  break;
12612 		}
12613 
12614 	      if (address_mode == mode_64bit
12615 		  && !(prefixes & PREFIX_ADDR))
12616 		{
12617 		  *obufp++ = 'a';
12618 		  *obufp++ = 'b';
12619 		  *obufp++ = 's';
12620 		}
12621 
12622 	      goto case_S;
12623 	    }
12624 	  break;
12625 	case 'X':
12626 	  if (l != 0 || len != 1)
12627 	    {
12628 	      SAVE_LAST (*p);
12629 	      break;
12630 	    }
12631 	  if (need_vex && vex.prefix)
12632 	    {
12633 	      if (vex.prefix == DATA_PREFIX_OPCODE)
12634 		*obufp++ = 'd';
12635 	      else
12636 		*obufp++ = 's';
12637 	    }
12638 	  else
12639 	    {
12640 	      if (prefixes & PREFIX_DATA)
12641 		*obufp++ = 'd';
12642 	      else
12643 		*obufp++ = 's';
12644 	      used_prefixes |= (prefixes & PREFIX_DATA);
12645 	    }
12646 	  break;
12647 	case 'Y':
12648 	  if (l == 0 && len == 1)
12649 	    {
12650 	      if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
12651 		break;
12652 	      if (rex & REX_W)
12653 		{
12654 		  USED_REX (REX_W);
12655 		  *obufp++ = 'q';
12656 		}
12657 	      break;
12658 	    }
12659 	  else
12660 	    {
12661 	      if (l != 1 || len != 2 || last[0] != 'X')
12662 		{
12663 		  SAVE_LAST (*p);
12664 		  break;
12665 		}
12666 	      if (!need_vex)
12667 		abort ();
12668 	      if (intel_syntax
12669 		  || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
12670 		break;
12671 	      switch (vex.length)
12672 		{
12673 		case 128:
12674 		  *obufp++ = 'x';
12675 		  break;
12676 		case 256:
12677 		  *obufp++ = 'y';
12678 		  break;
12679 		default:
12680 		  abort ();
12681 		}
12682 	    }
12683 	  break;
12684 	case 'W':
12685 	  if (l == 0 && len == 1)
12686 	    {
12687 	      /* operand size flag for cwtl, cbtw */
12688 	      USED_REX (REX_W);
12689 	      if (rex & REX_W)
12690 		{
12691 		  if (intel_syntax)
12692 		    *obufp++ = 'd';
12693 		  else
12694 		    *obufp++ = 'l';
12695 		}
12696 	      else if (sizeflag & DFLAG)
12697 		*obufp++ = 'w';
12698 	      else
12699 		*obufp++ = 'b';
12700 	      if (!(rex & REX_W))
12701 		used_prefixes |= (prefixes & PREFIX_DATA);
12702 	    }
12703 	  else
12704 	    {
12705 	      if (l != 1 || len != 2 || last[0] != 'X')
12706 		{
12707 		  SAVE_LAST (*p);
12708 		  break;
12709 		}
12710 	      if (!need_vex)
12711 		abort ();
12712 	      *obufp++ = vex.w ? 'd': 's';
12713 	    }
12714 	  break;
12715 	}
12716       alt = 0;
12717     }
12718   *obufp = 0;
12719   mnemonicendp = obufp;
12720   return 0;
12721 }
12722 
12723 static void
12724 oappend (const char *s)
12725 {
12726   obufp = stpcpy (obufp, s);
12727 }
12728 
12729 static void
12730 append_seg (void)
12731 {
12732   if (prefixes & PREFIX_CS)
12733     {
12734       used_prefixes |= PREFIX_CS;
12735       oappend ("%cs:" + intel_syntax);
12736     }
12737   if (prefixes & PREFIX_DS)
12738     {
12739       used_prefixes |= PREFIX_DS;
12740       oappend ("%ds:" + intel_syntax);
12741     }
12742   if (prefixes & PREFIX_SS)
12743     {
12744       used_prefixes |= PREFIX_SS;
12745       oappend ("%ss:" + intel_syntax);
12746     }
12747   if (prefixes & PREFIX_ES)
12748     {
12749       used_prefixes |= PREFIX_ES;
12750       oappend ("%es:" + intel_syntax);
12751     }
12752   if (prefixes & PREFIX_FS)
12753     {
12754       used_prefixes |= PREFIX_FS;
12755       oappend ("%fs:" + intel_syntax);
12756     }
12757   if (prefixes & PREFIX_GS)
12758     {
12759       used_prefixes |= PREFIX_GS;
12760       oappend ("%gs:" + intel_syntax);
12761     }
12762 }
12763 
12764 static void
12765 OP_indirE (int bytemode, int sizeflag)
12766 {
12767   if (!intel_syntax)
12768     oappend ("*");
12769   OP_E (bytemode, sizeflag);
12770 }
12771 
12772 static void
12773 print_operand_value (char *buf, int hex, bfd_vma disp)
12774 {
12775   if (address_mode == mode_64bit)
12776     {
12777       if (hex)
12778 	{
12779 	  char tmp[30];
12780 	  int i;
12781 	  buf[0] = '0';
12782 	  buf[1] = 'x';
12783 	  sprintf_vma (tmp, disp);
12784 	  for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
12785 	  strcpy (buf + 2, tmp + i);
12786 	}
12787       else
12788 	{
12789 	  bfd_signed_vma v = disp;
12790 	  char tmp[30];
12791 	  int i;
12792 	  if (v < 0)
12793 	    {
12794 	      *(buf++) = '-';
12795 	      v = -disp;
12796 	      /* Check for possible overflow on 0x8000000000000000.  */
12797 	      if (v < 0)
12798 		{
12799 		  strcpy (buf, "9223372036854775808");
12800 		  return;
12801 		}
12802 	    }
12803 	  if (!v)
12804 	    {
12805 	      strcpy (buf, "0");
12806 	      return;
12807 	    }
12808 
12809 	  i = 0;
12810 	  tmp[29] = 0;
12811 	  while (v)
12812 	    {
12813 	      tmp[28 - i] = (v % 10) + '0';
12814 	      v /= 10;
12815 	      i++;
12816 	    }
12817 	  strcpy (buf, tmp + 29 - i);
12818 	}
12819     }
12820   else
12821     {
12822       if (hex)
12823 	sprintf (buf, "0x%x", (unsigned int) disp);
12824       else
12825 	sprintf (buf, "%d", (int) disp);
12826     }
12827 }
12828 
12829 /* Put DISP in BUF as signed hex number.  */
12830 
12831 static void
12832 print_displacement (char *buf, bfd_vma disp)
12833 {
12834   bfd_signed_vma val = disp;
12835   char tmp[30];
12836   int i, j = 0;
12837 
12838   if (val < 0)
12839     {
12840       buf[j++] = '-';
12841       val = -disp;
12842 
12843       /* Check for possible overflow.  */
12844       if (val < 0)
12845 	{
12846 	  switch (address_mode)
12847 	    {
12848 	    case mode_64bit:
12849 	      strcpy (buf + j, "0x8000000000000000");
12850 	      break;
12851 	    case mode_32bit:
12852 	      strcpy (buf + j, "0x80000000");
12853 	      break;
12854 	    case mode_16bit:
12855 	      strcpy (buf + j, "0x8000");
12856 	      break;
12857 	    }
12858 	  return;
12859 	}
12860     }
12861 
12862   buf[j++] = '0';
12863   buf[j++] = 'x';
12864 
12865   sprintf_vma (tmp, (bfd_vma) val);
12866   for (i = 0; tmp[i] == '0'; i++)
12867     continue;
12868   if (tmp[i] == '\0')
12869     i--;
12870   strcpy (buf + j, tmp + i);
12871 }
12872 
12873 static void
12874 intel_operand_size (int bytemode, int sizeflag)
12875 {
12876   switch (bytemode)
12877     {
12878     case b_mode:
12879     case b_swap_mode:
12880     case dqb_mode:
12881       oappend ("BYTE PTR ");
12882       break;
12883     case w_mode:
12884     case dqw_mode:
12885       oappend ("WORD PTR ");
12886       break;
12887     case stack_v_mode:
12888       if (address_mode == mode_64bit && (sizeflag & DFLAG))
12889 	{
12890 	  oappend ("QWORD PTR ");
12891 	  break;
12892 	}
12893       /* FALLTHRU */
12894     case v_mode:
12895     case v_swap_mode:
12896     case dq_mode:
12897       USED_REX (REX_W);
12898       if (rex & REX_W)
12899 	oappend ("QWORD PTR ");
12900       else
12901 	{
12902 	  if ((sizeflag & DFLAG) || bytemode == dq_mode)
12903 	    oappend ("DWORD PTR ");
12904 	  else
12905 	    oappend ("WORD PTR ");
12906 	  used_prefixes |= (prefixes & PREFIX_DATA);
12907 	}
12908       break;
12909     case z_mode:
12910       if ((rex & REX_W) || (sizeflag & DFLAG))
12911 	*obufp++ = 'D';
12912       oappend ("WORD PTR ");
12913       if (!(rex & REX_W))
12914 	used_prefixes |= (prefixes & PREFIX_DATA);
12915       break;
12916     case a_mode:
12917       if (sizeflag & DFLAG)
12918 	oappend ("QWORD PTR ");
12919       else
12920 	oappend ("DWORD PTR ");
12921       used_prefixes |= (prefixes & PREFIX_DATA);
12922       break;
12923     case d_mode:
12924     case d_scalar_mode:
12925     case d_scalar_swap_mode:
12926     case d_swap_mode:
12927     case dqd_mode:
12928       oappend ("DWORD PTR ");
12929       break;
12930     case q_mode:
12931     case q_scalar_mode:
12932     case q_scalar_swap_mode:
12933     case q_swap_mode:
12934       oappend ("QWORD PTR ");
12935       break;
12936     case m_mode:
12937       if (address_mode == mode_64bit)
12938 	oappend ("QWORD PTR ");
12939       else
12940 	oappend ("DWORD PTR ");
12941       break;
12942     case f_mode:
12943       if (sizeflag & DFLAG)
12944 	oappend ("FWORD PTR ");
12945       else
12946 	oappend ("DWORD PTR ");
12947       used_prefixes |= (prefixes & PREFIX_DATA);
12948       break;
12949     case t_mode:
12950       oappend ("TBYTE PTR ");
12951       break;
12952     case x_mode:
12953     case x_swap_mode:
12954       if (need_vex)
12955 	{
12956 	  switch (vex.length)
12957 	    {
12958 	    case 128:
12959 	      oappend ("XMMWORD PTR ");
12960 	      break;
12961 	    case 256:
12962 	      oappend ("YMMWORD PTR ");
12963 	      break;
12964 	    default:
12965 	      abort ();
12966 	    }
12967 	}
12968       else
12969 	oappend ("XMMWORD PTR ");
12970       break;
12971     case xmm_mode:
12972       oappend ("XMMWORD PTR ");
12973       break;
12974     case xmmq_mode:
12975       if (!need_vex)
12976 	abort ();
12977 
12978       switch (vex.length)
12979 	{
12980 	case 128:
12981 	  oappend ("QWORD PTR ");
12982 	  break;
12983 	case 256:
12984 	  oappend ("XMMWORD PTR ");
12985 	  break;
12986 	default:
12987 	  abort ();
12988 	}
12989       break;
12990     case ymmq_mode:
12991       if (!need_vex)
12992 	abort ();
12993 
12994       switch (vex.length)
12995 	{
12996 	case 128:
12997 	  oappend ("QWORD PTR ");
12998 	  break;
12999 	case 256:
13000 	  oappend ("YMMWORD PTR ");
13001 	  break;
13002 	default:
13003 	  abort ();
13004 	}
13005       break;
13006     case o_mode:
13007       oappend ("OWORD PTR ");
13008       break;
13009     case vex_w_dq_mode:
13010     case vex_scalar_w_dq_mode:
13011       if (!need_vex)
13012 	abort ();
13013 
13014       if (vex.w)
13015 	oappend ("QWORD PTR ");
13016       else
13017 	oappend ("DWORD PTR ");
13018       break;
13019     default:
13020       break;
13021     }
13022 }
13023 
13024 static void
13025 OP_E_register (int bytemode, int sizeflag)
13026 {
13027   int reg = modrm.rm;
13028   const char **names;
13029 
13030   USED_REX (REX_B);
13031   if ((rex & REX_B))
13032     reg += 8;
13033 
13034   if ((sizeflag & SUFFIX_ALWAYS)
13035       && (bytemode == b_swap_mode || bytemode == v_swap_mode))
13036     swap_operand ();
13037 
13038   switch (bytemode)
13039     {
13040     case b_mode:
13041     case b_swap_mode:
13042       USED_REX (0);
13043       if (rex)
13044 	names = names8rex;
13045       else
13046 	names = names8;
13047       break;
13048     case w_mode:
13049       names = names16;
13050       break;
13051     case d_mode:
13052       names = names32;
13053       break;
13054     case q_mode:
13055       names = names64;
13056       break;
13057     case m_mode:
13058       names = address_mode == mode_64bit ? names64 : names32;
13059       break;
13060     case stack_v_mode:
13061       if (address_mode == mode_64bit && (sizeflag & DFLAG))
13062 	{
13063 	  names = names64;
13064 	  break;
13065 	}
13066       bytemode = v_mode;
13067       /* FALLTHRU */
13068     case v_mode:
13069     case v_swap_mode:
13070     case dq_mode:
13071     case dqb_mode:
13072     case dqd_mode:
13073     case dqw_mode:
13074       USED_REX (REX_W);
13075       if (rex & REX_W)
13076 	names = names64;
13077       else
13078 	{
13079 	  if ((sizeflag & DFLAG)
13080 	      || (bytemode != v_mode
13081 		  && bytemode != v_swap_mode))
13082 	    names = names32;
13083 	  else
13084 	    names = names16;
13085 	  used_prefixes |= (prefixes & PREFIX_DATA);
13086 	}
13087       break;
13088     case 0:
13089       return;
13090     default:
13091       oappend (INTERNAL_DISASSEMBLER_ERROR);
13092       return;
13093     }
13094   oappend (names[reg]);
13095 }
13096 
13097 static void
13098 OP_E_memory (int bytemode, int sizeflag)
13099 {
13100   bfd_vma disp = 0;
13101   int add = (rex & REX_B) ? 8 : 0;
13102   int riprel = 0;
13103 
13104   USED_REX (REX_B);
13105   if (intel_syntax)
13106     intel_operand_size (bytemode, sizeflag);
13107   append_seg ();
13108 
13109   if ((sizeflag & AFLAG) || address_mode == mode_64bit)
13110     {
13111       /* 32/64 bit address mode */
13112       int havedisp;
13113       int havesib;
13114       int havebase;
13115       int haveindex;
13116       int needindex;
13117       int base, rbase;
13118       int vindex = 0;
13119       int scale = 0;
13120 
13121       havesib = 0;
13122       havebase = 1;
13123       haveindex = 0;
13124       base = modrm.rm;
13125 
13126       if (base == 4)
13127 	{
13128 	  havesib = 1;
13129 	  vindex = sib.index;
13130 	  scale = sib.scale;
13131 	  base = sib.base;
13132 	  USED_REX (REX_X);
13133 	  if (rex & REX_X)
13134 	    vindex += 8;
13135 	  haveindex = vindex != 4;
13136 	  codep++;
13137 	}
13138       rbase = base + add;
13139 
13140       switch (modrm.mod)
13141 	{
13142 	case 0:
13143 	  if (base == 5)
13144 	    {
13145 	      havebase = 0;
13146 	      if (address_mode == mode_64bit && !havesib)
13147 		riprel = 1;
13148 	      disp = get32s ();
13149 	    }
13150 	  break;
13151 	case 1:
13152 	  FETCH_DATA (the_info, codep + 1);
13153 	  disp = *codep++;
13154 	  if ((disp & 0x80) != 0)
13155 	    disp -= 0x100;
13156 	  break;
13157 	case 2:
13158 	  disp = get32s ();
13159 	  break;
13160 	}
13161 
13162       /* In 32bit mode, we need index register to tell [offset] from
13163 	 [eiz*1 + offset].  */
13164       needindex = (havesib
13165 		   && !havebase
13166 		   && !haveindex
13167 		   && address_mode == mode_32bit);
13168       havedisp = (havebase
13169 		  || needindex
13170 		  || (havesib && (haveindex || scale != 0)));
13171 
13172       if (!intel_syntax)
13173 	if (modrm.mod != 0 || base == 5)
13174 	  {
13175 	    if (havedisp || riprel)
13176 	      print_displacement (scratchbuf, disp);
13177 	    else
13178 	      print_operand_value (scratchbuf, 1, disp);
13179 	    oappend (scratchbuf);
13180 	    if (riprel)
13181 	      {
13182 		set_op (disp, 1);
13183 		oappend (sizeflag & AFLAG ? "(%rip)" : "(%eip)");
13184 	      }
13185 	  }
13186 
13187       if (havebase || haveindex || riprel)
13188 	used_prefixes |= PREFIX_ADDR;
13189 
13190       if (havedisp || (intel_syntax && riprel))
13191 	{
13192 	  *obufp++ = open_char;
13193 	  if (intel_syntax && riprel)
13194 	    {
13195 	      set_op (disp, 1);
13196 	      oappend (sizeflag & AFLAG ? "rip" : "eip");
13197 	    }
13198 	  *obufp = '\0';
13199 	  if (havebase)
13200 	    oappend (address_mode == mode_64bit && (sizeflag & AFLAG)
13201 		     ? names64[rbase] : names32[rbase]);
13202 	  if (havesib)
13203 	    {
13204 	      /* ESP/RSP won't allow index.  If base isn't ESP/RSP,
13205 		 print index to tell base + index from base.  */
13206 	      if (scale != 0
13207 		  || needindex
13208 		  || haveindex
13209 		  || (havebase && base != ESP_REG_NUM))
13210 		{
13211 		  if (!intel_syntax || havebase)
13212 		    {
13213 		      *obufp++ = separator_char;
13214 		      *obufp = '\0';
13215 		    }
13216 		  if (haveindex)
13217 		    oappend (address_mode == mode_64bit
13218 			     && (sizeflag & AFLAG)
13219 			     ? names64[vindex] : names32[vindex]);
13220 		  else
13221 		    oappend (address_mode == mode_64bit
13222 			     && (sizeflag & AFLAG)
13223 			     ? index64 : index32);
13224 
13225 		  *obufp++ = scale_char;
13226 		  *obufp = '\0';
13227 		  sprintf (scratchbuf, "%d", 1 << scale);
13228 		  oappend (scratchbuf);
13229 		}
13230 	    }
13231 	  if (intel_syntax
13232 	      && (disp || modrm.mod != 0 || base == 5))
13233 	    {
13234 	      if (!havedisp || (bfd_signed_vma) disp >= 0)
13235 		{
13236 		  *obufp++ = '+';
13237 		  *obufp = '\0';
13238 		}
13239 	      else if (modrm.mod != 1 && disp != -disp)
13240 		{
13241 		  *obufp++ = '-';
13242 		  *obufp = '\0';
13243 		  disp = - (bfd_signed_vma) disp;
13244 		}
13245 
13246 	      if (havedisp)
13247 		print_displacement (scratchbuf, disp);
13248 	      else
13249 		print_operand_value (scratchbuf, 1, disp);
13250 	      oappend (scratchbuf);
13251 	    }
13252 
13253 	  *obufp++ = close_char;
13254 	  *obufp = '\0';
13255 	}
13256       else if (intel_syntax)
13257 	{
13258 	  if (modrm.mod != 0 || base == 5)
13259 	    {
13260 	      if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
13261 			      | PREFIX_ES | PREFIX_FS | PREFIX_GS))
13262 		;
13263 	      else
13264 		{
13265 		  oappend (names_seg[ds_reg - es_reg]);
13266 		  oappend (":");
13267 		}
13268 	      print_operand_value (scratchbuf, 1, disp);
13269 	      oappend (scratchbuf);
13270 	    }
13271 	}
13272     }
13273   else
13274     {
13275       /* 16 bit address mode */
13276       used_prefixes |= prefixes & PREFIX_ADDR;
13277       switch (modrm.mod)
13278 	{
13279 	case 0:
13280 	  if (modrm.rm == 6)
13281 	    {
13282 	      disp = get16 ();
13283 	      if ((disp & 0x8000) != 0)
13284 		disp -= 0x10000;
13285 	    }
13286 	  break;
13287 	case 1:
13288 	  FETCH_DATA (the_info, codep + 1);
13289 	  disp = *codep++;
13290 	  if ((disp & 0x80) != 0)
13291 	    disp -= 0x100;
13292 	  break;
13293 	case 2:
13294 	  disp = get16 ();
13295 	  if ((disp & 0x8000) != 0)
13296 	    disp -= 0x10000;
13297 	  break;
13298 	}
13299 
13300       if (!intel_syntax)
13301 	if (modrm.mod != 0 || modrm.rm == 6)
13302 	  {
13303 	    print_displacement (scratchbuf, disp);
13304 	    oappend (scratchbuf);
13305 	  }
13306 
13307       if (modrm.mod != 0 || modrm.rm != 6)
13308 	{
13309 	  *obufp++ = open_char;
13310 	  *obufp = '\0';
13311 	  oappend (index16[modrm.rm]);
13312 	  if (intel_syntax
13313 	      && (disp || modrm.mod != 0 || modrm.rm == 6))
13314 	    {
13315 	      if ((bfd_signed_vma) disp >= 0)
13316 		{
13317 		  *obufp++ = '+';
13318 		  *obufp = '\0';
13319 		}
13320 	      else if (modrm.mod != 1)
13321 		{
13322 		  *obufp++ = '-';
13323 		  *obufp = '\0';
13324 		  disp = - (bfd_signed_vma) disp;
13325 		}
13326 
13327 	      print_displacement (scratchbuf, disp);
13328 	      oappend (scratchbuf);
13329 	    }
13330 
13331 	  *obufp++ = close_char;
13332 	  *obufp = '\0';
13333 	}
13334       else if (intel_syntax)
13335 	{
13336 	  if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
13337 			  | PREFIX_ES | PREFIX_FS | PREFIX_GS))
13338 	    ;
13339 	  else
13340 	    {
13341 	      oappend (names_seg[ds_reg - es_reg]);
13342 	      oappend (":");
13343 	    }
13344 	  print_operand_value (scratchbuf, 1, disp & 0xffff);
13345 	  oappend (scratchbuf);
13346 	}
13347     }
13348 }
13349 
13350 static void
13351 OP_E (int bytemode, int sizeflag)
13352 {
13353   /* Skip mod/rm byte.  */
13354   MODRM_CHECK;
13355   codep++;
13356 
13357   if (modrm.mod == 3)
13358     OP_E_register (bytemode, sizeflag);
13359   else
13360     OP_E_memory (bytemode, sizeflag);
13361 }
13362 
13363 static void
13364 OP_G (int bytemode, int sizeflag)
13365 {
13366   int add = 0;
13367   USED_REX (REX_R);
13368   if (rex & REX_R)
13369     add += 8;
13370   switch (bytemode)
13371     {
13372     case b_mode:
13373       USED_REX (0);
13374       if (rex)
13375 	oappend (names8rex[modrm.reg + add]);
13376       else
13377 	oappend (names8[modrm.reg + add]);
13378       break;
13379     case w_mode:
13380       oappend (names16[modrm.reg + add]);
13381       break;
13382     case d_mode:
13383       oappend (names32[modrm.reg + add]);
13384       break;
13385     case q_mode:
13386       oappend (names64[modrm.reg + add]);
13387       break;
13388     case v_mode:
13389     case dq_mode:
13390     case dqb_mode:
13391     case dqd_mode:
13392     case dqw_mode:
13393       USED_REX (REX_W);
13394       if (rex & REX_W)
13395 	oappend (names64[modrm.reg + add]);
13396       else
13397 	{
13398 	  if ((sizeflag & DFLAG) || bytemode != v_mode)
13399 	    oappend (names32[modrm.reg + add]);
13400 	  else
13401 	    oappend (names16[modrm.reg + add]);
13402 	  used_prefixes |= (prefixes & PREFIX_DATA);
13403 	}
13404       break;
13405     case m_mode:
13406       if (address_mode == mode_64bit)
13407 	oappend (names64[modrm.reg + add]);
13408       else
13409 	oappend (names32[modrm.reg + add]);
13410       break;
13411     default:
13412       oappend (INTERNAL_DISASSEMBLER_ERROR);
13413       break;
13414     }
13415 }
13416 
13417 static bfd_vma
13418 get64 (void)
13419 {
13420   bfd_vma x;
13421 #ifdef BFD64
13422   unsigned int a;
13423   unsigned int b;
13424 
13425   FETCH_DATA (the_info, codep + 8);
13426   a = *codep++ & 0xff;
13427   a |= (*codep++ & 0xff) << 8;
13428   a |= (*codep++ & 0xff) << 16;
13429   a |= (*codep++ & 0xff) << 24;
13430   b = *codep++ & 0xff;
13431   b |= (*codep++ & 0xff) << 8;
13432   b |= (*codep++ & 0xff) << 16;
13433   b |= (*codep++ & 0xff) << 24;
13434   x = a + ((bfd_vma) b << 32);
13435 #else
13436   abort ();
13437   x = 0;
13438 #endif
13439   return x;
13440 }
13441 
13442 static bfd_signed_vma
13443 get32 (void)
13444 {
13445   bfd_signed_vma x = 0;
13446 
13447   FETCH_DATA (the_info, codep + 4);
13448   x = *codep++ & (bfd_signed_vma) 0xff;
13449   x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
13450   x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
13451   x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
13452   return x;
13453 }
13454 
13455 static bfd_signed_vma
13456 get32s (void)
13457 {
13458   bfd_signed_vma x = 0;
13459 
13460   FETCH_DATA (the_info, codep + 4);
13461   x = *codep++ & (bfd_signed_vma) 0xff;
13462   x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
13463   x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
13464   x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
13465 
13466   x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
13467 
13468   return x;
13469 }
13470 
13471 static int
13472 get16 (void)
13473 {
13474   int x = 0;
13475 
13476   FETCH_DATA (the_info, codep + 2);
13477   x = *codep++ & 0xff;
13478   x |= (*codep++ & 0xff) << 8;
13479   return x;
13480 }
13481 
13482 static void
13483 set_op (bfd_vma op, int riprel)
13484 {
13485   op_index[op_ad] = op_ad;
13486   if (address_mode == mode_64bit)
13487     {
13488       op_address[op_ad] = op;
13489       op_riprel[op_ad] = riprel;
13490     }
13491   else
13492     {
13493       /* Mask to get a 32-bit address.  */
13494       op_address[op_ad] = op & 0xffffffff;
13495       op_riprel[op_ad] = riprel & 0xffffffff;
13496     }
13497 }
13498 
13499 static void
13500 OP_REG (int code, int sizeflag)
13501 {
13502   const char *s;
13503   int add;
13504   USED_REX (REX_B);
13505   if (rex & REX_B)
13506     add = 8;
13507   else
13508     add = 0;
13509 
13510   switch (code)
13511     {
13512     case ax_reg: case cx_reg: case dx_reg: case bx_reg:
13513     case sp_reg: case bp_reg: case si_reg: case di_reg:
13514       s = names16[code - ax_reg + add];
13515       break;
13516     case es_reg: case ss_reg: case cs_reg:
13517     case ds_reg: case fs_reg: case gs_reg:
13518       s = names_seg[code - es_reg + add];
13519       break;
13520     case al_reg: case ah_reg: case cl_reg: case ch_reg:
13521     case dl_reg: case dh_reg: case bl_reg: case bh_reg:
13522       USED_REX (0);
13523       if (rex)
13524 	s = names8rex[code - al_reg + add];
13525       else
13526 	s = names8[code - al_reg];
13527       break;
13528     case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
13529     case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
13530       if (address_mode == mode_64bit && (sizeflag & DFLAG))
13531 	{
13532 	  s = names64[code - rAX_reg + add];
13533 	  break;
13534 	}
13535       code += eAX_reg - rAX_reg;
13536       /* Fall through.  */
13537     case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
13538     case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
13539       USED_REX (REX_W);
13540       if (rex & REX_W)
13541 	s = names64[code - eAX_reg + add];
13542       else
13543 	{
13544 	  if (sizeflag & DFLAG)
13545 	    s = names32[code - eAX_reg + add];
13546 	  else
13547 	    s = names16[code - eAX_reg + add];
13548 	  used_prefixes |= (prefixes & PREFIX_DATA);
13549 	}
13550       break;
13551     default:
13552       s = INTERNAL_DISASSEMBLER_ERROR;
13553       break;
13554     }
13555   oappend (s);
13556 }
13557 
13558 static void
13559 OP_IMREG (int code, int sizeflag)
13560 {
13561   const char *s;
13562 
13563   switch (code)
13564     {
13565     case indir_dx_reg:
13566       if (intel_syntax)
13567 	s = "dx";
13568       else
13569 	s = "(%dx)";
13570       break;
13571     case ax_reg: case cx_reg: case dx_reg: case bx_reg:
13572     case sp_reg: case bp_reg: case si_reg: case di_reg:
13573       s = names16[code - ax_reg];
13574       break;
13575     case es_reg: case ss_reg: case cs_reg:
13576     case ds_reg: case fs_reg: case gs_reg:
13577       s = names_seg[code - es_reg];
13578       break;
13579     case al_reg: case ah_reg: case cl_reg: case ch_reg:
13580     case dl_reg: case dh_reg: case bl_reg: case bh_reg:
13581       USED_REX (0);
13582       if (rex)
13583 	s = names8rex[code - al_reg];
13584       else
13585 	s = names8[code - al_reg];
13586       break;
13587     case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
13588     case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
13589       USED_REX (REX_W);
13590       if (rex & REX_W)
13591 	s = names64[code - eAX_reg];
13592       else
13593 	{
13594 	  if (sizeflag & DFLAG)
13595 	    s = names32[code - eAX_reg];
13596 	  else
13597 	    s = names16[code - eAX_reg];
13598 	  used_prefixes |= (prefixes & PREFIX_DATA);
13599 	}
13600       break;
13601     case z_mode_ax_reg:
13602       if ((rex & REX_W) || (sizeflag & DFLAG))
13603 	s = *names32;
13604       else
13605 	s = *names16;
13606       if (!(rex & REX_W))
13607 	used_prefixes |= (prefixes & PREFIX_DATA);
13608       break;
13609     default:
13610       s = INTERNAL_DISASSEMBLER_ERROR;
13611       break;
13612     }
13613   oappend (s);
13614 }
13615 
13616 static void
13617 OP_I (int bytemode, int sizeflag)
13618 {
13619   bfd_signed_vma op;
13620   bfd_signed_vma mask = -1;
13621 
13622   switch (bytemode)
13623     {
13624     case b_mode:
13625       FETCH_DATA (the_info, codep + 1);
13626       op = *codep++;
13627       mask = 0xff;
13628       break;
13629     case q_mode:
13630       if (address_mode == mode_64bit)
13631 	{
13632 	  op = get32s ();
13633 	  break;
13634 	}
13635       /* Fall through.  */
13636     case v_mode:
13637       USED_REX (REX_W);
13638       if (rex & REX_W)
13639 	op = get32s ();
13640       else
13641 	{
13642 	  if (sizeflag & DFLAG)
13643 	    {
13644 	      op = get32 ();
13645 	      mask = 0xffffffff;
13646 	    }
13647 	  else
13648 	    {
13649 	      op = get16 ();
13650 	      mask = 0xfffff;
13651 	    }
13652 	  used_prefixes |= (prefixes & PREFIX_DATA);
13653 	}
13654       break;
13655     case w_mode:
13656       mask = 0xfffff;
13657       op = get16 ();
13658       break;
13659     case const_1_mode:
13660       if (intel_syntax)
13661         oappend ("1");
13662       return;
13663     default:
13664       oappend (INTERNAL_DISASSEMBLER_ERROR);
13665       return;
13666     }
13667 
13668   op &= mask;
13669   scratchbuf[0] = '$';
13670   print_operand_value (scratchbuf + 1, 1, op);
13671   oappend (scratchbuf + intel_syntax);
13672   scratchbuf[0] = '\0';
13673 }
13674 
13675 static void
13676 OP_I64 (int bytemode, int sizeflag)
13677 {
13678   bfd_signed_vma op;
13679   bfd_signed_vma mask = -1;
13680 
13681   if (address_mode != mode_64bit)
13682     {
13683       OP_I (bytemode, sizeflag);
13684       return;
13685     }
13686 
13687   switch (bytemode)
13688     {
13689     case b_mode:
13690       FETCH_DATA (the_info, codep + 1);
13691       op = *codep++;
13692       mask = 0xff;
13693       break;
13694     case v_mode:
13695       USED_REX (REX_W);
13696       if (rex & REX_W)
13697 	op = get64 ();
13698       else
13699 	{
13700 	  if (sizeflag & DFLAG)
13701 	    {
13702 	      op = get32 ();
13703 	      mask = 0xffffffff;
13704 	    }
13705 	  else
13706 	    {
13707 	      op = get16 ();
13708 	      mask = 0xfffff;
13709 	    }
13710 	  used_prefixes |= (prefixes & PREFIX_DATA);
13711 	}
13712       break;
13713     case w_mode:
13714       mask = 0xfffff;
13715       op = get16 ();
13716       break;
13717     default:
13718       oappend (INTERNAL_DISASSEMBLER_ERROR);
13719       return;
13720     }
13721 
13722   op &= mask;
13723   scratchbuf[0] = '$';
13724   print_operand_value (scratchbuf + 1, 1, op);
13725   oappend (scratchbuf + intel_syntax);
13726   scratchbuf[0] = '\0';
13727 }
13728 
13729 static void
13730 OP_sI (int bytemode, int sizeflag)
13731 {
13732   bfd_signed_vma op;
13733 
13734   switch (bytemode)
13735     {
13736     case b_mode:
13737     case b_T_mode:
13738       FETCH_DATA (the_info, codep + 1);
13739       op = *codep++;
13740       if ((op & 0x80) != 0)
13741 	op -= 0x100;
13742       if (bytemode == b_T_mode)
13743 	{
13744 	  if (address_mode != mode_64bit
13745 	      || !(sizeflag & DFLAG))
13746 	    {
13747 	      if (sizeflag & DFLAG)
13748 		op &= 0xffffffff;
13749 	      else
13750 		op &= 0xffff;
13751 	  }
13752 	}
13753       else
13754 	{
13755 	  if (!(rex & REX_W))
13756 	    {
13757 	      if (sizeflag & DFLAG)
13758 		op &= 0xffffffff;
13759 	      else
13760 		op &= 0xffff;
13761 	    }
13762 	}
13763       break;
13764     case v_mode:
13765       if (sizeflag & DFLAG)
13766 	op = get32s ();
13767       else
13768 	op = get16 ();
13769       break;
13770     default:
13771       oappend (INTERNAL_DISASSEMBLER_ERROR);
13772       return;
13773     }
13774 
13775   scratchbuf[0] = '$';
13776   print_operand_value (scratchbuf + 1, 1, op);
13777   oappend (scratchbuf + intel_syntax);
13778 }
13779 
13780 static void
13781 OP_J (int bytemode, int sizeflag)
13782 {
13783   bfd_vma disp;
13784   bfd_vma mask = -1;
13785   bfd_vma segment = 0;
13786 
13787   switch (bytemode)
13788     {
13789     case b_mode:
13790       FETCH_DATA (the_info, codep + 1);
13791       disp = *codep++;
13792       if ((disp & 0x80) != 0)
13793 	disp -= 0x100;
13794       break;
13795     case v_mode:
13796       USED_REX (REX_W);
13797       if ((sizeflag & DFLAG) || (rex & REX_W))
13798 	disp = get32s ();
13799       else
13800 	{
13801 	  disp = get16 ();
13802 	  if ((disp & 0x8000) != 0)
13803 	    disp -= 0x10000;
13804 	  /* In 16bit mode, address is wrapped around at 64k within
13805 	     the same segment.  Otherwise, a data16 prefix on a jump
13806 	     instruction means that the pc is masked to 16 bits after
13807 	     the displacement is added!  */
13808 	  mask = 0xffff;
13809 	  if ((prefixes & PREFIX_DATA) == 0)
13810 	    segment = ((start_pc + codep - start_codep)
13811 		       & ~((bfd_vma) 0xffff));
13812 	}
13813       if (!(rex & REX_W))
13814 	used_prefixes |= (prefixes & PREFIX_DATA);
13815       break;
13816     default:
13817       oappend (INTERNAL_DISASSEMBLER_ERROR);
13818       return;
13819     }
13820   disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
13821   set_op (disp, 0);
13822   print_operand_value (scratchbuf, 1, disp);
13823   oappend (scratchbuf);
13824 }
13825 
13826 static void
13827 OP_SEG (int bytemode, int sizeflag)
13828 {
13829   if (bytemode == w_mode)
13830     oappend (names_seg[modrm.reg]);
13831   else
13832     OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
13833 }
13834 
13835 static void
13836 OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
13837 {
13838   int seg, offset;
13839 
13840   if (sizeflag & DFLAG)
13841     {
13842       offset = get32 ();
13843       seg = get16 ();
13844     }
13845   else
13846     {
13847       offset = get16 ();
13848       seg = get16 ();
13849     }
13850   used_prefixes |= (prefixes & PREFIX_DATA);
13851   if (intel_syntax)
13852     sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
13853   else
13854     sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
13855   oappend (scratchbuf);
13856 }
13857 
13858 static void
13859 OP_OFF (int bytemode, int sizeflag)
13860 {
13861   bfd_vma off;
13862 
13863   if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
13864     intel_operand_size (bytemode, sizeflag);
13865   append_seg ();
13866 
13867   if ((sizeflag & AFLAG) || address_mode == mode_64bit)
13868     off = get32 ();
13869   else
13870     off = get16 ();
13871 
13872   if (intel_syntax)
13873     {
13874       if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
13875 			| PREFIX_ES | PREFIX_FS | PREFIX_GS)))
13876 	{
13877 	  oappend (names_seg[ds_reg - es_reg]);
13878 	  oappend (":");
13879 	}
13880     }
13881   print_operand_value (scratchbuf, 1, off);
13882   oappend (scratchbuf);
13883 }
13884 
13885 static void
13886 OP_OFF64 (int bytemode, int sizeflag)
13887 {
13888   bfd_vma off;
13889 
13890   if (address_mode != mode_64bit
13891       || (prefixes & PREFIX_ADDR))
13892     {
13893       OP_OFF (bytemode, sizeflag);
13894       return;
13895     }
13896 
13897   if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
13898     intel_operand_size (bytemode, sizeflag);
13899   append_seg ();
13900 
13901   off = get64 ();
13902 
13903   if (intel_syntax)
13904     {
13905       if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
13906 			| PREFIX_ES | PREFIX_FS | PREFIX_GS)))
13907 	{
13908 	  oappend (names_seg[ds_reg - es_reg]);
13909 	  oappend (":");
13910 	}
13911     }
13912   print_operand_value (scratchbuf, 1, off);
13913   oappend (scratchbuf);
13914 }
13915 
13916 static void
13917 ptr_reg (int code, int sizeflag)
13918 {
13919   const char *s;
13920 
13921   *obufp++ = open_char;
13922   used_prefixes |= (prefixes & PREFIX_ADDR);
13923   if (address_mode == mode_64bit)
13924     {
13925       if (!(sizeflag & AFLAG))
13926 	s = names32[code - eAX_reg];
13927       else
13928 	s = names64[code - eAX_reg];
13929     }
13930   else if (sizeflag & AFLAG)
13931     s = names32[code - eAX_reg];
13932   else
13933     s = names16[code - eAX_reg];
13934   oappend (s);
13935   *obufp++ = close_char;
13936   *obufp = 0;
13937 }
13938 
13939 static void
13940 OP_ESreg (int code, int sizeflag)
13941 {
13942   if (intel_syntax)
13943     {
13944       switch (codep[-1])
13945 	{
13946 	case 0x6d:	/* insw/insl */
13947 	  intel_operand_size (z_mode, sizeflag);
13948 	  break;
13949 	case 0xa5:	/* movsw/movsl/movsq */
13950 	case 0xa7:	/* cmpsw/cmpsl/cmpsq */
13951 	case 0xab:	/* stosw/stosl */
13952 	case 0xaf:	/* scasw/scasl */
13953 	  intel_operand_size (v_mode, sizeflag);
13954 	  break;
13955 	default:
13956 	  intel_operand_size (b_mode, sizeflag);
13957 	}
13958     }
13959   oappend ("%es:" + intel_syntax);
13960   ptr_reg (code, sizeflag);
13961 }
13962 
13963 static void
13964 OP_DSreg (int code, int sizeflag)
13965 {
13966   if (intel_syntax)
13967     {
13968       switch (codep[-1])
13969 	{
13970 	case 0x6f:	/* outsw/outsl */
13971 	  intel_operand_size (z_mode, sizeflag);
13972 	  break;
13973 	case 0xa5:	/* movsw/movsl/movsq */
13974 	case 0xa7:	/* cmpsw/cmpsl/cmpsq */
13975 	case 0xad:	/* lodsw/lodsl/lodsq */
13976 	  intel_operand_size (v_mode, sizeflag);
13977 	  break;
13978 	default:
13979 	  intel_operand_size (b_mode, sizeflag);
13980 	}
13981     }
13982   if ((prefixes
13983        & (PREFIX_CS
13984 	  | PREFIX_DS
13985 	  | PREFIX_SS
13986 	  | PREFIX_ES
13987 	  | PREFIX_FS
13988 	  | PREFIX_GS)) == 0)
13989     prefixes |= PREFIX_DS;
13990   append_seg ();
13991   ptr_reg (code, sizeflag);
13992 }
13993 
13994 static void
13995 OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
13996 {
13997   int add;
13998   if (rex & REX_R)
13999     {
14000       USED_REX (REX_R);
14001       add = 8;
14002     }
14003   else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
14004     {
14005       all_prefixes[last_lock_prefix] = 0;
14006       used_prefixes |= PREFIX_LOCK;
14007       add = 8;
14008     }
14009   else
14010     add = 0;
14011   sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
14012   oappend (scratchbuf + intel_syntax);
14013 }
14014 
14015 static void
14016 OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
14017 {
14018   int add;
14019   USED_REX (REX_R);
14020   if (rex & REX_R)
14021     add = 8;
14022   else
14023     add = 0;
14024   if (intel_syntax)
14025     sprintf (scratchbuf, "db%d", modrm.reg + add);
14026   else
14027     sprintf (scratchbuf, "%%db%d", modrm.reg + add);
14028   oappend (scratchbuf);
14029 }
14030 
14031 static void
14032 OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
14033 {
14034   sprintf (scratchbuf, "%%tr%d", modrm.reg);
14035   oappend (scratchbuf + intel_syntax);
14036 }
14037 
14038 static void
14039 OP_R (int bytemode, int sizeflag)
14040 {
14041   if (modrm.mod == 3)
14042     OP_E (bytemode, sizeflag);
14043   else
14044     BadOp ();
14045 }
14046 
14047 static void
14048 OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
14049 {
14050   int reg = modrm.reg;
14051   const char **names;
14052 
14053   used_prefixes |= (prefixes & PREFIX_DATA);
14054   if (prefixes & PREFIX_DATA)
14055     {
14056       names = names_xmm;
14057       USED_REX (REX_R);
14058       if (rex & REX_R)
14059 	reg += 8;
14060     }
14061   else
14062     names = names_mm;
14063   oappend (names[reg]);
14064 }
14065 
14066 static void
14067 OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
14068 {
14069   int reg = modrm.reg;
14070   const char **names;
14071 
14072   USED_REX (REX_R);
14073   if (rex & REX_R)
14074     reg += 8;
14075   if (need_vex
14076       && bytemode != xmm_mode
14077       && bytemode != scalar_mode)
14078     {
14079       switch (vex.length)
14080 	{
14081 	case 128:
14082 	  names = names_xmm;
14083 	  break;
14084 	case 256:
14085 	  names = names_ymm;
14086 	  break;
14087 	default:
14088 	  abort ();
14089 	}
14090     }
14091   else
14092     names = names_xmm;
14093   oappend (names[reg]);
14094 }
14095 
14096 static void
14097 OP_EM (int bytemode, int sizeflag)
14098 {
14099   int reg;
14100   const char **names;
14101 
14102   if (modrm.mod != 3)
14103     {
14104       if (intel_syntax
14105 	  && (bytemode == v_mode || bytemode == v_swap_mode))
14106 	{
14107 	  bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
14108 	  used_prefixes |= (prefixes & PREFIX_DATA);
14109  	}
14110       OP_E (bytemode, sizeflag);
14111       return;
14112     }
14113 
14114   if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
14115     swap_operand ();
14116 
14117   /* Skip mod/rm byte.  */
14118   MODRM_CHECK;
14119   codep++;
14120   used_prefixes |= (prefixes & PREFIX_DATA);
14121   reg = modrm.rm;
14122   if (prefixes & PREFIX_DATA)
14123     {
14124       names = names_xmm;
14125       USED_REX (REX_B);
14126       if (rex & REX_B)
14127 	reg += 8;
14128     }
14129   else
14130     names = names_mm;
14131   oappend (names[reg]);
14132 }
14133 
14134 /* cvt* are the only instructions in sse2 which have
14135    both SSE and MMX operands and also have 0x66 prefix
14136    in their opcode. 0x66 was originally used to differentiate
14137    between SSE and MMX instruction(operands). So we have to handle the
14138    cvt* separately using OP_EMC and OP_MXC */
14139 static void
14140 OP_EMC (int bytemode, int sizeflag)
14141 {
14142   if (modrm.mod != 3)
14143     {
14144       if (intel_syntax && bytemode == v_mode)
14145 	{
14146 	  bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
14147 	  used_prefixes |= (prefixes & PREFIX_DATA);
14148  	}
14149       OP_E (bytemode, sizeflag);
14150       return;
14151     }
14152 
14153   /* Skip mod/rm byte.  */
14154   MODRM_CHECK;
14155   codep++;
14156   used_prefixes |= (prefixes & PREFIX_DATA);
14157   oappend (names_mm[modrm.rm]);
14158 }
14159 
14160 static void
14161 OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
14162 {
14163   used_prefixes |= (prefixes & PREFIX_DATA);
14164   oappend (names_mm[modrm.reg]);
14165 }
14166 
14167 static void
14168 OP_EX (int bytemode, int sizeflag)
14169 {
14170   int reg;
14171   const char **names;
14172 
14173   /* Skip mod/rm byte.  */
14174   MODRM_CHECK;
14175   codep++;
14176 
14177   if (modrm.mod != 3)
14178     {
14179       OP_E_memory (bytemode, sizeflag);
14180       return;
14181     }
14182 
14183   reg = modrm.rm;
14184   USED_REX (REX_B);
14185   if (rex & REX_B)
14186     reg += 8;
14187 
14188   if ((sizeflag & SUFFIX_ALWAYS)
14189       && (bytemode == x_swap_mode
14190 	  || bytemode == d_swap_mode
14191 	  || bytemode == d_scalar_swap_mode
14192 	  || bytemode == q_swap_mode
14193 	  || bytemode == q_scalar_swap_mode))
14194     swap_operand ();
14195 
14196   if (need_vex
14197       && bytemode != xmm_mode
14198       && bytemode != xmmq_mode
14199       && bytemode != d_scalar_mode
14200       && bytemode != d_scalar_swap_mode
14201       && bytemode != q_scalar_mode
14202       && bytemode != q_scalar_swap_mode
14203       && bytemode != vex_scalar_w_dq_mode)
14204     {
14205       switch (vex.length)
14206 	{
14207 	case 128:
14208 	  names = names_xmm;
14209 	  break;
14210 	case 256:
14211 	  names = names_ymm;
14212 	  break;
14213 	default:
14214 	  abort ();
14215 	}
14216     }
14217   else
14218     names = names_xmm;
14219   oappend (names[reg]);
14220 }
14221 
14222 static void
14223 OP_MS (int bytemode, int sizeflag)
14224 {
14225   if (modrm.mod == 3)
14226     OP_EM (bytemode, sizeflag);
14227   else
14228     BadOp ();
14229 }
14230 
14231 static void
14232 OP_XS (int bytemode, int sizeflag)
14233 {
14234   if (modrm.mod == 3)
14235     OP_EX (bytemode, sizeflag);
14236   else
14237     BadOp ();
14238 }
14239 
14240 static void
14241 OP_M (int bytemode, int sizeflag)
14242 {
14243   if (modrm.mod == 3)
14244     /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
14245     BadOp ();
14246   else
14247     OP_E (bytemode, sizeflag);
14248 }
14249 
14250 static void
14251 OP_0f07 (int bytemode, int sizeflag)
14252 {
14253   if (modrm.mod != 3 || modrm.rm != 0)
14254     BadOp ();
14255   else
14256     OP_E (bytemode, sizeflag);
14257 }
14258 
14259 /* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
14260    32bit mode and "xchg %rax,%rax" in 64bit mode.  */
14261 
14262 static void
14263 NOP_Fixup1 (int bytemode, int sizeflag)
14264 {
14265   if ((prefixes & PREFIX_DATA) != 0
14266       || (rex != 0
14267 	  && rex != 0x48
14268 	  && address_mode == mode_64bit))
14269     OP_REG (bytemode, sizeflag);
14270   else
14271     strcpy (obuf, "nop");
14272 }
14273 
14274 static void
14275 NOP_Fixup2 (int bytemode, int sizeflag)
14276 {
14277   if ((prefixes & PREFIX_DATA) != 0
14278       || (rex != 0
14279 	  && rex != 0x48
14280 	  && address_mode == mode_64bit))
14281     OP_IMREG (bytemode, sizeflag);
14282 }
14283 
14284 static const char *const Suffix3DNow[] = {
14285 /* 00 */	NULL,		NULL,		NULL,		NULL,
14286 /* 04 */	NULL,		NULL,		NULL,		NULL,
14287 /* 08 */	NULL,		NULL,		NULL,		NULL,
14288 /* 0C */	"pi2fw",	"pi2fd",	NULL,		NULL,
14289 /* 10 */	NULL,		NULL,		NULL,		NULL,
14290 /* 14 */	NULL,		NULL,		NULL,		NULL,
14291 /* 18 */	NULL,		NULL,		NULL,		NULL,
14292 /* 1C */	"pf2iw",	"pf2id",	NULL,		NULL,
14293 /* 20 */	NULL,		NULL,		NULL,		NULL,
14294 /* 24 */	NULL,		NULL,		NULL,		NULL,
14295 /* 28 */	NULL,		NULL,		NULL,		NULL,
14296 /* 2C */	NULL,		NULL,		NULL,		NULL,
14297 /* 30 */	NULL,		NULL,		NULL,		NULL,
14298 /* 34 */	NULL,		NULL,		NULL,		NULL,
14299 /* 38 */	NULL,		NULL,		NULL,		NULL,
14300 /* 3C */	NULL,		NULL,		NULL,		NULL,
14301 /* 40 */	NULL,		NULL,		NULL,		NULL,
14302 /* 44 */	NULL,		NULL,		NULL,		NULL,
14303 /* 48 */	NULL,		NULL,		NULL,		NULL,
14304 /* 4C */	NULL,		NULL,		NULL,		NULL,
14305 /* 50 */	NULL,		NULL,		NULL,		NULL,
14306 /* 54 */	NULL,		NULL,		NULL,		NULL,
14307 /* 58 */	NULL,		NULL,		NULL,		NULL,
14308 /* 5C */	NULL,		NULL,		NULL,		NULL,
14309 /* 60 */	NULL,		NULL,		NULL,		NULL,
14310 /* 64 */	NULL,		NULL,		NULL,		NULL,
14311 /* 68 */	NULL,		NULL,		NULL,		NULL,
14312 /* 6C */	NULL,		NULL,		NULL,		NULL,
14313 /* 70 */	NULL,		NULL,		NULL,		NULL,
14314 /* 74 */	NULL,		NULL,		NULL,		NULL,
14315 /* 78 */	NULL,		NULL,		NULL,		NULL,
14316 /* 7C */	NULL,		NULL,		NULL,		NULL,
14317 /* 80 */	NULL,		NULL,		NULL,		NULL,
14318 /* 84 */	NULL,		NULL,		NULL,		NULL,
14319 /* 88 */	NULL,		NULL,		"pfnacc",	NULL,
14320 /* 8C */	NULL,		NULL,		"pfpnacc",	NULL,
14321 /* 90 */	"pfcmpge",	NULL,		NULL,		NULL,
14322 /* 94 */	"pfmin",	NULL,		"pfrcp",	"pfrsqrt",
14323 /* 98 */	NULL,		NULL,		"pfsub",	NULL,
14324 /* 9C */	NULL,		NULL,		"pfadd",	NULL,
14325 /* A0 */	"pfcmpgt",	NULL,		NULL,		NULL,
14326 /* A4 */	"pfmax",	NULL,		"pfrcpit1",	"pfrsqit1",
14327 /* A8 */	NULL,		NULL,		"pfsubr",	NULL,
14328 /* AC */	NULL,		NULL,		"pfacc",	NULL,
14329 /* B0 */	"pfcmpeq",	NULL,		NULL,		NULL,
14330 /* B4 */	"pfmul",	NULL,		"pfrcpit2",	"pmulhrw",
14331 /* B8 */	NULL,		NULL,		NULL,		"pswapd",
14332 /* BC */	NULL,		NULL,		NULL,		"pavgusb",
14333 /* C0 */	NULL,		NULL,		NULL,		NULL,
14334 /* C4 */	NULL,		NULL,		NULL,		NULL,
14335 /* C8 */	NULL,		NULL,		NULL,		NULL,
14336 /* CC */	NULL,		NULL,		NULL,		NULL,
14337 /* D0 */	NULL,		NULL,		NULL,		NULL,
14338 /* D4 */	NULL,		NULL,		NULL,		NULL,
14339 /* D8 */	NULL,		NULL,		NULL,		NULL,
14340 /* DC */	NULL,		NULL,		NULL,		NULL,
14341 /* E0 */	NULL,		NULL,		NULL,		NULL,
14342 /* E4 */	NULL,		NULL,		NULL,		NULL,
14343 /* E8 */	NULL,		NULL,		NULL,		NULL,
14344 /* EC */	NULL,		NULL,		NULL,		NULL,
14345 /* F0 */	NULL,		NULL,		NULL,		NULL,
14346 /* F4 */	NULL,		NULL,		NULL,		NULL,
14347 /* F8 */	NULL,		NULL,		NULL,		NULL,
14348 /* FC */	NULL,		NULL,		NULL,		NULL,
14349 };
14350 
14351 static void
14352 OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
14353 {
14354   const char *mnemonic;
14355 
14356   FETCH_DATA (the_info, codep + 1);
14357   /* AMD 3DNow! instructions are specified by an opcode suffix in the
14358      place where an 8-bit immediate would normally go.  ie. the last
14359      byte of the instruction.  */
14360   obufp = mnemonicendp;
14361   mnemonic = Suffix3DNow[*codep++ & 0xff];
14362   if (mnemonic)
14363     oappend (mnemonic);
14364   else
14365     {
14366       /* Since a variable sized modrm/sib chunk is between the start
14367 	 of the opcode (0x0f0f) and the opcode suffix, we need to do
14368 	 all the modrm processing first, and don't know until now that
14369 	 we have a bad opcode.  This necessitates some cleaning up.  */
14370       op_out[0][0] = '\0';
14371       op_out[1][0] = '\0';
14372       BadOp ();
14373     }
14374   mnemonicendp = obufp;
14375 }
14376 
14377 static struct op simd_cmp_op[] =
14378 {
14379   { STRING_COMMA_LEN ("eq") },
14380   { STRING_COMMA_LEN ("lt") },
14381   { STRING_COMMA_LEN ("le") },
14382   { STRING_COMMA_LEN ("unord") },
14383   { STRING_COMMA_LEN ("neq") },
14384   { STRING_COMMA_LEN ("nlt") },
14385   { STRING_COMMA_LEN ("nle") },
14386   { STRING_COMMA_LEN ("ord") }
14387 };
14388 
14389 static void
14390 CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
14391 {
14392   unsigned int cmp_type;
14393 
14394   FETCH_DATA (the_info, codep + 1);
14395   cmp_type = *codep++ & 0xff;
14396   if (cmp_type < ARRAY_SIZE (simd_cmp_op))
14397     {
14398       char suffix [3];
14399       char *p = mnemonicendp - 2;
14400       suffix[0] = p[0];
14401       suffix[1] = p[1];
14402       suffix[2] = '\0';
14403       sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
14404       mnemonicendp += simd_cmp_op[cmp_type].len;
14405     }
14406   else
14407     {
14408       /* We have a reserved extension byte.  Output it directly.  */
14409       scratchbuf[0] = '$';
14410       print_operand_value (scratchbuf + 1, 1, cmp_type);
14411       oappend (scratchbuf + intel_syntax);
14412       scratchbuf[0] = '\0';
14413     }
14414 }
14415 
14416 static void
14417 OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
14418 	  int sizeflag ATTRIBUTE_UNUSED)
14419 {
14420   /* mwait %eax,%ecx  */
14421   if (!intel_syntax)
14422     {
14423       const char **names = (address_mode == mode_64bit
14424 			    ? names64 : names32);
14425       strcpy (op_out[0], names[0]);
14426       strcpy (op_out[1], names[1]);
14427       two_source_ops = 1;
14428     }
14429   /* Skip mod/rm byte.  */
14430   MODRM_CHECK;
14431   codep++;
14432 }
14433 
14434 static void
14435 OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
14436 	    int sizeflag ATTRIBUTE_UNUSED)
14437 {
14438   /* monitor %eax,%ecx,%edx"  */
14439   if (!intel_syntax)
14440     {
14441       const char **op1_names;
14442       const char **names = (address_mode == mode_64bit
14443 			    ? names64 : names32);
14444 
14445       if (!(prefixes & PREFIX_ADDR))
14446 	op1_names = (address_mode == mode_16bit
14447 		     ? names16 : names);
14448       else
14449 	{
14450 	  /* Remove "addr16/addr32".  */
14451 	  all_prefixes[last_addr_prefix] = 0;
14452 	  op1_names = (address_mode != mode_32bit
14453 		       ? names32 : names16);
14454 	  used_prefixes |= PREFIX_ADDR;
14455 	}
14456       strcpy (op_out[0], op1_names[0]);
14457       strcpy (op_out[1], names[1]);
14458       strcpy (op_out[2], names[2]);
14459       two_source_ops = 1;
14460     }
14461   /* Skip mod/rm byte.  */
14462   MODRM_CHECK;
14463   codep++;
14464 }
14465 
14466 static void
14467 BadOp (void)
14468 {
14469   /* Throw away prefixes and 1st. opcode byte.  */
14470   codep = insn_codep + 1;
14471   oappend ("(bad)");
14472 }
14473 
14474 static void
14475 REP_Fixup (int bytemode, int sizeflag)
14476 {
14477   /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
14478      lods and stos.  */
14479   if (prefixes & PREFIX_REPZ)
14480     all_prefixes[last_repz_prefix] = REP_PREFIX;
14481 
14482   switch (bytemode)
14483     {
14484     case al_reg:
14485     case eAX_reg:
14486     case indir_dx_reg:
14487       OP_IMREG (bytemode, sizeflag);
14488       break;
14489     case eDI_reg:
14490       OP_ESreg (bytemode, sizeflag);
14491       break;
14492     case eSI_reg:
14493       OP_DSreg (bytemode, sizeflag);
14494       break;
14495     default:
14496       abort ();
14497       break;
14498     }
14499 }
14500 
14501 static void
14502 CMPXCHG8B_Fixup (int bytemode, int sizeflag)
14503 {
14504   USED_REX (REX_W);
14505   if (rex & REX_W)
14506     {
14507       /* Change cmpxchg8b to cmpxchg16b.  */
14508       char *p = mnemonicendp - 2;
14509       mnemonicendp = stpcpy (p, "16b");
14510       bytemode = o_mode;
14511     }
14512   OP_M (bytemode, sizeflag);
14513 }
14514 
14515 static void
14516 XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
14517 {
14518   const char **names;
14519 
14520   if (need_vex)
14521     {
14522       switch (vex.length)
14523 	{
14524 	case 128:
14525 	  names = names_xmm;
14526 	  break;
14527 	case 256:
14528 	  names = names_ymm;
14529 	  break;
14530 	default:
14531 	  abort ();
14532 	}
14533     }
14534   else
14535     names = names_xmm;
14536   oappend (names[reg]);
14537 }
14538 
14539 static void
14540 CRC32_Fixup (int bytemode, int sizeflag)
14541 {
14542   /* Add proper suffix to "crc32".  */
14543   char *p = mnemonicendp;
14544 
14545   switch (bytemode)
14546     {
14547     case b_mode:
14548       if (intel_syntax)
14549 	goto skip;
14550 
14551       *p++ = 'b';
14552       break;
14553     case v_mode:
14554       if (intel_syntax)
14555 	goto skip;
14556 
14557       USED_REX (REX_W);
14558       if (rex & REX_W)
14559 	*p++ = 'q';
14560       else
14561 	{
14562 	  if (sizeflag & DFLAG)
14563 	    *p++ = 'l';
14564 	  else
14565 	    *p++ = 'w';
14566 	  used_prefixes |= (prefixes & PREFIX_DATA);
14567 	}
14568       break;
14569     default:
14570       oappend (INTERNAL_DISASSEMBLER_ERROR);
14571       break;
14572     }
14573   mnemonicendp = p;
14574   *p = '\0';
14575 
14576 skip:
14577   if (modrm.mod == 3)
14578     {
14579       int add;
14580 
14581       /* Skip mod/rm byte.  */
14582       MODRM_CHECK;
14583       codep++;
14584 
14585       USED_REX (REX_B);
14586       add = (rex & REX_B) ? 8 : 0;
14587       if (bytemode == b_mode)
14588 	{
14589 	  USED_REX (0);
14590 	  if (rex)
14591 	    oappend (names8rex[modrm.rm + add]);
14592 	  else
14593 	    oappend (names8[modrm.rm + add]);
14594 	}
14595       else
14596 	{
14597 	  USED_REX (REX_W);
14598 	  if (rex & REX_W)
14599 	    oappend (names64[modrm.rm + add]);
14600 	  else if ((prefixes & PREFIX_DATA))
14601 	    oappend (names16[modrm.rm + add]);
14602 	  else
14603 	    oappend (names32[modrm.rm + add]);
14604 	}
14605     }
14606   else
14607     OP_E (bytemode, sizeflag);
14608 }
14609 
14610 static void
14611 FXSAVE_Fixup (int bytemode, int sizeflag)
14612 {
14613   /* Add proper suffix to "fxsave" and "fxrstor".  */
14614   USED_REX (REX_W);
14615   if (rex & REX_W)
14616     {
14617       char *p = mnemonicendp;
14618       *p++ = '6';
14619       *p++ = '4';
14620       *p = '\0';
14621       mnemonicendp = p;
14622     }
14623   OP_M (bytemode, sizeflag);
14624 }
14625 
14626 /* Display the destination register operand for instructions with
14627    VEX. */
14628 
14629 static void
14630 OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
14631 {
14632   int reg;
14633   const char **names;
14634 
14635   if (!need_vex)
14636     abort ();
14637 
14638   if (!need_vex_reg)
14639     return;
14640 
14641   reg = vex.register_specifier;
14642   if (bytemode == vex_scalar_mode)
14643     {
14644       oappend (names_xmm[reg]);
14645       return;
14646     }
14647 
14648   switch (vex.length)
14649     {
14650     case 128:
14651       switch (bytemode)
14652 	{
14653 	case vex_mode:
14654 	case vex128_mode:
14655 	  names = names_xmm;
14656 	  break;
14657 	case dq_mode:
14658 	  if (vex.w)
14659 	    names = names64;
14660 	  else
14661 	    names = names32;
14662 	  break;
14663 	default:
14664 	  abort ();
14665 	  return;
14666 	}
14667       break;
14668     case 256:
14669       switch (bytemode)
14670 	{
14671 	case vex_mode:
14672 	case vex256_mode:
14673 	  break;
14674 	default:
14675 	  abort ();
14676 	  return;
14677 	}
14678 
14679       names = names_ymm;
14680       break;
14681     default:
14682       abort ();
14683       break;
14684     }
14685   oappend (names[reg]);
14686 }
14687 
14688 /* Get the VEX immediate byte without moving codep.  */
14689 
14690 static unsigned char
14691 get_vex_imm8 (int sizeflag, int opnum)
14692 {
14693   int bytes_before_imm = 0;
14694 
14695   if (modrm.mod != 3)
14696     {
14697       /* There are SIB/displacement bytes.  */
14698       if ((sizeflag & AFLAG) || address_mode == mode_64bit)
14699         {
14700 	  /* 32/64 bit address mode */
14701           int base = modrm.rm;
14702 
14703 	  /* Check SIB byte.  */
14704           if (base == 4)
14705             {
14706               FETCH_DATA (the_info, codep + 1);
14707               base = *codep & 7;
14708               /* When decoding the third source, don't increase
14709                  bytes_before_imm as this has already been incremented
14710                  by one in OP_E_memory while decoding the second
14711                  source operand.  */
14712               if (opnum == 0)
14713                 bytes_before_imm++;
14714             }
14715 
14716           /* Don't increase bytes_before_imm when decoding the third source,
14717              it has already been incremented by OP_E_memory while decoding
14718              the second source operand.  */
14719           if (opnum == 0)
14720             {
14721               switch (modrm.mod)
14722                 {
14723                   case 0:
14724                     /* When modrm.rm == 5 or modrm.rm == 4 and base in
14725                        SIB == 5, there is a 4 byte displacement.  */
14726                     if (base != 5)
14727                       /* No displacement. */
14728                       break;
14729                   case 2:
14730                     /* 4 byte displacement.  */
14731                     bytes_before_imm += 4;
14732                     break;
14733                   case 1:
14734                     /* 1 byte displacement.  */
14735                     bytes_before_imm++;
14736                     break;
14737                 }
14738             }
14739         }
14740       else
14741 	{
14742 	  /* 16 bit address mode */
14743           /* Don't increase bytes_before_imm when decoding the third source,
14744              it has already been incremented by OP_E_memory while decoding
14745              the second source operand.  */
14746           if (opnum == 0)
14747             {
14748 	      switch (modrm.mod)
14749 		{
14750 		case 0:
14751 		  /* When modrm.rm == 6, there is a 2 byte displacement.  */
14752 		  if (modrm.rm != 6)
14753 		    /* No displacement. */
14754 		    break;
14755 		case 2:
14756 		  /* 2 byte displacement.  */
14757 		  bytes_before_imm += 2;
14758 		  break;
14759 		case 1:
14760 		  /* 1 byte displacement: when decoding the third source,
14761 		     don't increase bytes_before_imm as this has already
14762 		     been incremented by one in OP_E_memory while decoding
14763 		     the second source operand.  */
14764 		  if (opnum == 0)
14765 		    bytes_before_imm++;
14766 
14767 		  break;
14768 		}
14769 	    }
14770 	}
14771     }
14772 
14773   FETCH_DATA (the_info, codep + bytes_before_imm + 1);
14774   return codep [bytes_before_imm];
14775 }
14776 
14777 static void
14778 OP_EX_VexReg (int bytemode, int sizeflag, int reg)
14779 {
14780   const char **names;
14781 
14782   if (reg == -1 && modrm.mod != 3)
14783     {
14784       OP_E_memory (bytemode, sizeflag);
14785       return;
14786     }
14787   else
14788     {
14789       if (reg == -1)
14790 	{
14791 	  reg = modrm.rm;
14792 	  USED_REX (REX_B);
14793 	  if (rex & REX_B)
14794 	    reg += 8;
14795 	}
14796       else if (reg > 7 && address_mode != mode_64bit)
14797 	BadOp ();
14798     }
14799 
14800   switch (vex.length)
14801     {
14802     case 128:
14803       names = names_xmm;
14804       break;
14805     case 256:
14806       names = names_ymm;
14807       break;
14808     default:
14809       abort ();
14810     }
14811   oappend (names[reg]);
14812 }
14813 
14814 static void
14815 OP_EX_VexImmW (int bytemode, int sizeflag)
14816 {
14817   int reg = -1;
14818   static unsigned char vex_imm8;
14819 
14820   if (vex_w_done == 0)
14821     {
14822       vex_w_done = 1;
14823 
14824       /* Skip mod/rm byte.  */
14825       MODRM_CHECK;
14826       codep++;
14827 
14828       vex_imm8 = get_vex_imm8 (sizeflag, 0);
14829 
14830       if (vex.w)
14831 	  reg = vex_imm8 >> 4;
14832 
14833       OP_EX_VexReg (bytemode, sizeflag, reg);
14834     }
14835   else if (vex_w_done == 1)
14836     {
14837       vex_w_done = 2;
14838 
14839       if (!vex.w)
14840 	  reg = vex_imm8 >> 4;
14841 
14842       OP_EX_VexReg (bytemode, sizeflag, reg);
14843     }
14844   else
14845     {
14846       /* Output the imm8 directly.  */
14847       scratchbuf[0] = '$';
14848       print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
14849       oappend (scratchbuf + intel_syntax);
14850       scratchbuf[0] = '\0';
14851       codep++;
14852     }
14853 }
14854 
14855 static void
14856 OP_Vex_2src (int bytemode, int sizeflag)
14857 {
14858   if (modrm.mod == 3)
14859     {
14860       int reg = modrm.rm;
14861       USED_REX (REX_B);
14862       if (rex & REX_B)
14863 	reg += 8;
14864       oappend (names_xmm[reg]);
14865     }
14866   else
14867     {
14868       if (intel_syntax
14869 	  && (bytemode == v_mode || bytemode == v_swap_mode))
14870 	{
14871 	  bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
14872 	  used_prefixes |= (prefixes & PREFIX_DATA);
14873 	}
14874       OP_E (bytemode, sizeflag);
14875     }
14876 }
14877 
14878 static void
14879 OP_Vex_2src_1 (int bytemode, int sizeflag)
14880 {
14881   if (modrm.mod == 3)
14882     {
14883       /* Skip mod/rm byte.   */
14884       MODRM_CHECK;
14885       codep++;
14886     }
14887 
14888   if (vex.w)
14889     oappend (names_xmm[vex.register_specifier]);
14890   else
14891     OP_Vex_2src (bytemode, sizeflag);
14892 }
14893 
14894 static void
14895 OP_Vex_2src_2 (int bytemode, int sizeflag)
14896 {
14897   if (vex.w)
14898     OP_Vex_2src (bytemode, sizeflag);
14899   else
14900     oappend (names_xmm[vex.register_specifier]);
14901 }
14902 
14903 static void
14904 OP_EX_VexW (int bytemode, int sizeflag)
14905 {
14906   int reg = -1;
14907 
14908   if (!vex_w_done)
14909     {
14910       vex_w_done = 1;
14911 
14912       /* Skip mod/rm byte.  */
14913       MODRM_CHECK;
14914       codep++;
14915 
14916       if (vex.w)
14917 	reg = get_vex_imm8 (sizeflag, 0) >> 4;
14918     }
14919   else
14920     {
14921       if (!vex.w)
14922 	reg = get_vex_imm8 (sizeflag, 1) >> 4;
14923     }
14924 
14925   OP_EX_VexReg (bytemode, sizeflag, reg);
14926 }
14927 
14928 static void
14929 VEXI4_Fixup (int bytemode ATTRIBUTE_UNUSED,
14930 	     int sizeflag ATTRIBUTE_UNUSED)
14931 {
14932   /* Skip the immediate byte and check for invalid bits.  */
14933   FETCH_DATA (the_info, codep + 1);
14934   if (*codep++ & 0xf)
14935     BadOp ();
14936 }
14937 
14938 static void
14939 OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
14940 {
14941   int reg;
14942   const char **names;
14943 
14944   FETCH_DATA (the_info, codep + 1);
14945   reg = *codep++;
14946 
14947   if (bytemode != x_mode)
14948     abort ();
14949 
14950   if (reg & 0xf)
14951       BadOp ();
14952 
14953   reg >>= 4;
14954   if (reg > 7 && address_mode != mode_64bit)
14955     BadOp ();
14956 
14957   switch (vex.length)
14958     {
14959     case 128:
14960       names = names_xmm;
14961       break;
14962     case 256:
14963       names = names_ymm;
14964       break;
14965     default:
14966       abort ();
14967     }
14968   oappend (names[reg]);
14969 }
14970 
14971 static void
14972 OP_XMM_VexW (int bytemode, int sizeflag)
14973 {
14974   /* Turn off the REX.W bit since it is used for swapping operands
14975      now.  */
14976   rex &= ~REX_W;
14977   OP_XMM (bytemode, sizeflag);
14978 }
14979 
14980 static void
14981 OP_EX_Vex (int bytemode, int sizeflag)
14982 {
14983   if (modrm.mod != 3)
14984     {
14985       if (vex.register_specifier != 0)
14986 	BadOp ();
14987       need_vex_reg = 0;
14988     }
14989   OP_EX (bytemode, sizeflag);
14990 }
14991 
14992 static void
14993 OP_XMM_Vex (int bytemode, int sizeflag)
14994 {
14995   if (modrm.mod != 3)
14996     {
14997       if (vex.register_specifier != 0)
14998 	BadOp ();
14999       need_vex_reg = 0;
15000     }
15001   OP_XMM (bytemode, sizeflag);
15002 }
15003 
15004 static void
15005 VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15006 {
15007   switch (vex.length)
15008     {
15009     case 128:
15010       mnemonicendp = stpcpy (obuf, "vzeroupper");
15011       break;
15012     case 256:
15013       mnemonicendp = stpcpy (obuf, "vzeroall");
15014       break;
15015     default:
15016       abort ();
15017     }
15018 }
15019 
15020 static struct op vex_cmp_op[] =
15021 {
15022   { STRING_COMMA_LEN ("eq") },
15023   { STRING_COMMA_LEN ("lt") },
15024   { STRING_COMMA_LEN ("le") },
15025   { STRING_COMMA_LEN ("unord") },
15026   { STRING_COMMA_LEN ("neq") },
15027   { STRING_COMMA_LEN ("nlt") },
15028   { STRING_COMMA_LEN ("nle") },
15029   { STRING_COMMA_LEN ("ord") },
15030   { STRING_COMMA_LEN ("eq_uq") },
15031   { STRING_COMMA_LEN ("nge") },
15032   { STRING_COMMA_LEN ("ngt") },
15033   { STRING_COMMA_LEN ("false") },
15034   { STRING_COMMA_LEN ("neq_oq") },
15035   { STRING_COMMA_LEN ("ge") },
15036   { STRING_COMMA_LEN ("gt") },
15037   { STRING_COMMA_LEN ("true") },
15038   { STRING_COMMA_LEN ("eq_os") },
15039   { STRING_COMMA_LEN ("lt_oq") },
15040   { STRING_COMMA_LEN ("le_oq") },
15041   { STRING_COMMA_LEN ("unord_s") },
15042   { STRING_COMMA_LEN ("neq_us") },
15043   { STRING_COMMA_LEN ("nlt_uq") },
15044   { STRING_COMMA_LEN ("nle_uq") },
15045   { STRING_COMMA_LEN ("ord_s") },
15046   { STRING_COMMA_LEN ("eq_us") },
15047   { STRING_COMMA_LEN ("nge_uq") },
15048   { STRING_COMMA_LEN ("ngt_uq") },
15049   { STRING_COMMA_LEN ("false_os") },
15050   { STRING_COMMA_LEN ("neq_os") },
15051   { STRING_COMMA_LEN ("ge_oq") },
15052   { STRING_COMMA_LEN ("gt_oq") },
15053   { STRING_COMMA_LEN ("true_us") },
15054 };
15055 
15056 static void
15057 VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15058 {
15059   unsigned int cmp_type;
15060 
15061   FETCH_DATA (the_info, codep + 1);
15062   cmp_type = *codep++ & 0xff;
15063   if (cmp_type < ARRAY_SIZE (vex_cmp_op))
15064     {
15065       char suffix [3];
15066       char *p = mnemonicendp - 2;
15067       suffix[0] = p[0];
15068       suffix[1] = p[1];
15069       suffix[2] = '\0';
15070       sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
15071       mnemonicendp += vex_cmp_op[cmp_type].len;
15072     }
15073   else
15074     {
15075       /* We have a reserved extension byte.  Output it directly.  */
15076       scratchbuf[0] = '$';
15077       print_operand_value (scratchbuf + 1, 1, cmp_type);
15078       oappend (scratchbuf + intel_syntax);
15079       scratchbuf[0] = '\0';
15080     }
15081 }
15082 
15083 static const struct op pclmul_op[] =
15084 {
15085   { STRING_COMMA_LEN ("lql") },
15086   { STRING_COMMA_LEN ("hql") },
15087   { STRING_COMMA_LEN ("lqh") },
15088   { STRING_COMMA_LEN ("hqh") }
15089 };
15090 
15091 static void
15092 PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
15093 	      int sizeflag ATTRIBUTE_UNUSED)
15094 {
15095   unsigned int pclmul_type;
15096 
15097   FETCH_DATA (the_info, codep + 1);
15098   pclmul_type = *codep++ & 0xff;
15099   switch (pclmul_type)
15100     {
15101     case 0x10:
15102       pclmul_type = 2;
15103       break;
15104     case 0x11:
15105       pclmul_type = 3;
15106       break;
15107     default:
15108       break;
15109     }
15110   if (pclmul_type < ARRAY_SIZE (pclmul_op))
15111     {
15112       char suffix [4];
15113       char *p = mnemonicendp - 3;
15114       suffix[0] = p[0];
15115       suffix[1] = p[1];
15116       suffix[2] = p[2];
15117       suffix[3] = '\0';
15118       sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
15119       mnemonicendp += pclmul_op[pclmul_type].len;
15120     }
15121   else
15122     {
15123       /* We have a reserved extension byte.  Output it directly.  */
15124       scratchbuf[0] = '$';
15125       print_operand_value (scratchbuf + 1, 1, pclmul_type);
15126       oappend (scratchbuf + intel_syntax);
15127       scratchbuf[0] = '\0';
15128     }
15129 }
15130 
15131 static void
15132 MOVBE_Fixup (int bytemode, int sizeflag)
15133 {
15134   /* Add proper suffix to "movbe".  */
15135   char *p = mnemonicendp;
15136 
15137   switch (bytemode)
15138     {
15139     case v_mode:
15140       if (intel_syntax)
15141 	goto skip;
15142 
15143       USED_REX (REX_W);
15144       if (sizeflag & SUFFIX_ALWAYS)
15145 	{
15146 	  if (rex & REX_W)
15147 	    *p++ = 'q';
15148 	  else
15149 	    {
15150 	      if (sizeflag & DFLAG)
15151 		*p++ = 'l';
15152 	      else
15153 		*p++ = 'w';
15154 	      used_prefixes |= (prefixes & PREFIX_DATA);
15155 	    }
15156 	}
15157       break;
15158     default:
15159       oappend (INTERNAL_DISASSEMBLER_ERROR);
15160       break;
15161     }
15162   mnemonicendp = p;
15163   *p = '\0';
15164 
15165 skip:
15166   OP_M (bytemode, sizeflag);
15167 }
15168 
15169 static void
15170 OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15171 {
15172   int reg;
15173   const char **names;
15174 
15175   /* Skip mod/rm byte.  */
15176   MODRM_CHECK;
15177   codep++;
15178 
15179   if (vex.w)
15180     names = names64;
15181   else
15182     names = names32;
15183 
15184   reg = modrm.rm;
15185   USED_REX (REX_B);
15186   if (rex & REX_B)
15187     reg += 8;
15188 
15189   oappend (names[reg]);
15190 }
15191 
15192 static void
15193 OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15194 {
15195   const char **names;
15196 
15197   if (vex.w)
15198     names = names64;
15199   else
15200     names = names32;
15201 
15202   oappend (names[vex.register_specifier]);
15203 }
15204 
15205