/* Print i386 instructions for GDB, the GNU debugger.
   Copyright 1988, 1989, 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
   2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.

   This file is part of GDB.

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */

/* 80386 instruction printer by Pace Willisson (pace@prep.ai.mit.edu)
   July 1988
    modified by John Hassey (hassey@dg-rtp.dg.com)
    x86-64 support added by Jan Hubicka (jh@suse.cz)
    VIA PadLock support by Michal Ludvig (mludvig@suse.cz).  */

/* The main tables describing the instructions is essentially a copy
   of the "Opcode Map" chapter (Appendix A) of the Intel 80386
   Programmers Manual.  Usually, there is a capital letter, followed
   by a small letter.  The capital letter tell the addressing mode,
   and the small letter tells about the operand size.  Refer to
   the Intel manual for details.  */

#include "dis-asm.h"
#include "sysdep.h"
#include "opintl.h"

#define MAXLEN 15

#include <setjmp.h>

#ifndef UNIXWARE_COMPAT
/* Set non-zero for broken, compatible instructions.  Set to zero for
   non-broken opcodes.  */
#define UNIXWARE_COMPAT 1
#endif

static int fetch_data (struct disassemble_info *, bfd_byte *);
static void ckprefix (void);
static const char *prefix_name (int, int);
static int print_insn (bfd_vma, disassemble_info *);
static void dofloat (int);
static void OP_ST (int, int);
static void OP_STi (int, int);
static int putop (const char *, int);
static void oappend (const char *);
static void append_seg (void);
static void OP_indirE (int, int);
static void print_operand_value (char *, int, bfd_vma);
static void OP_E (int, int);
static void OP_G (int, int);
static bfd_vma get64 (void);
static bfd_signed_vma get32 (void);
static bfd_signed_vma get32s (void);
static int get16 (void);
static void set_op (bfd_vma, int);
static void OP_REG (int, int);
static void OP_IMREG (int, int);
static void OP_I (int, int);
static void OP_I64 (int, int);
static void OP_sI (int, int);
static void OP_J (int, int);
static void OP_SEG (int, int);
static void OP_DIR (int, int);
static void OP_OFF (int, int);
static void OP_OFF64 (int, int);
static void ptr_reg (int, int);
static void OP_ESreg (int, int);
static void OP_DSreg (int, int);
static void OP_C (int, int);
static void OP_D (int, int);
static void OP_T (int, int);
static void OP_Rd (int, int);
static void OP_MMX (int, int);
static void OP_XMM (int, int);
static void OP_EM (int, int);
static void OP_EX (int, int);
static void OP_MS (int, int);
static void OP_XS (int, int);
static void OP_M (int, int);
static void OP_VMX (int, int);
static void OP_0fae (int, int);
static void OP_0f07 (int, int);
static void NOP_Fixup1 (int, int);
static void NOP_Fixup2 (int, int);
static void OP_3DNowSuffix (int, int);
static void OP_SIMD_Suffix (int, int);
static void SIMD_Fixup (int, int);
static void PNI_Fixup (int, int);
static void SVME_Fixup (int, int);
static void INVLPG_Fixup (int, int);
static void BadOp (void);
static void SEG_Fixup (int, int);
static void VMX_Fixup (int, int);
static void REP_Fixup (int, int);

struct dis_private {
  /* Points to first byte not fetched.  */
  bfd_byte *max_fetched;
  bfd_byte the_buffer[MAXLEN];
  bfd_vma insn_start;
  int orig_sizeflag;
  jmp_buf bailout;
};

/* The opcode for the fwait instruction, which we treat as a prefix
   when we can.  */
#define FWAIT_OPCODE (0x9b)

enum address_mode
{
  mode_16bit,
  mode_32bit,
  mode_64bit
};

enum address_mode address_mode;

/* Flags for the prefixes for the current instruction.  See below.  */
static int prefixes;

/* REX prefix the current instruction.  See below.  */
static int rex;
/* Bits of REX we've already used.  */
static int rex_used;
#define REX_MODE64	8
#define REX_EXTX	4
#define REX_EXTY	2
#define REX_EXTZ	1
/* Mark parts used in the REX prefix.  When we are testing for
   empty prefix (for 8bit register REX extension), just mask it
   out.  Otherwise test for REX bit is excuse for existence of REX
   only in case value is nonzero.  */
#define USED_REX(value)					\
  {							\
    if (value)						\
      rex_used |= (rex & value) ? (value) | 0x40 : 0;	\
    else						\
      rex_used |= 0x40;					\
  }

/* Flags for prefixes which we somehow handled when printing the
   current instruction.  */
static int used_prefixes;

/* Flags stored in PREFIXES.  */
#define PREFIX_REPZ 1
#define PREFIX_REPNZ 2
#define PREFIX_LOCK 4
#define PREFIX_CS 8
#define PREFIX_SS 0x10
#define PREFIX_DS 0x20
#define PREFIX_ES 0x40
#define PREFIX_FS 0x80
#define PREFIX_GS 0x100
#define PREFIX_DATA 0x200
#define PREFIX_ADDR 0x400
#define PREFIX_FWAIT 0x800

/* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
   to ADDR (exclusive) are valid.  Returns 1 for success, longjmps
   on error.  */
#define FETCH_DATA(info, addr) \
  ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
   ? 1 : fetch_data ((info), (addr)))

static int
fetch_data (struct disassemble_info *info, bfd_byte *addr)
{
  int status;
  struct dis_private *priv = (struct dis_private *) info->private_data;
  bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);

  if (addr <= priv->the_buffer + MAXLEN)
    status = (*info->read_memory_func) (start,
					priv->max_fetched,
					addr - priv->max_fetched,
					info);
  else
    status = -1;
  if (status != 0)
    {
      /* If we did manage to read at least one byte, then
	 print_insn_i386 will do something sensible.  Otherwise, print
	 an error.  We do that here because this is where we know
	 STATUS.  */
      if (priv->max_fetched == priv->the_buffer)
	(*info->memory_error_func) (status, start, info);
      longjmp (priv->bailout, 1);
    }
  else
    priv->max_fetched = addr;
  return 1;
}

#define XX NULL, 0

#define Eb OP_E, b_mode
#define Ev OP_E, v_mode
#define Ed OP_E, d_mode
#define Eq OP_E, q_mode
#define Edq OP_E, dq_mode
#define Edqw OP_E, dqw_mode
#define indirEv OP_indirE, stack_v_mode
#define indirEp OP_indirE, f_mode
#define stackEv OP_E, stack_v_mode
#define Em OP_E, m_mode
#define Ew OP_E, w_mode
#define Ma OP_E, v_mode
#define M OP_M, 0		/* lea, lgdt, etc. */
#define Mp OP_M, f_mode		/* 32 or 48 bit memory operand for LDS, LES etc */
#define Gb OP_G, b_mode
#define Gv OP_G, v_mode
#define Gd OP_G, d_mode
#define Gdq OP_G, dq_mode
#define Gm OP_G, m_mode
#define Gw OP_G, w_mode
#define Rd OP_Rd, d_mode
#define Rm OP_Rd, m_mode
#define Ib OP_I, b_mode
#define sIb OP_sI, b_mode	/* sign extened byte */
#define Iv OP_I, v_mode
#define Iq OP_I, q_mode
#define Iv64 OP_I64, v_mode
#define Iw OP_I, w_mode
#define I1 OP_I, const_1_mode
#define Jb OP_J, b_mode
#define Jv OP_J, v_mode
#define Cm OP_C, m_mode
#define Dm OP_D, m_mode
#define Td OP_T, d_mode
#define Sv SEG_Fixup, v_mode

#define RMeAX OP_REG, eAX_reg
#define RMeBX OP_REG, eBX_reg
#define RMeCX OP_REG, eCX_reg
#define RMeDX OP_REG, eDX_reg
#define RMeSP OP_REG, eSP_reg
#define RMeBP OP_REG, eBP_reg
#define RMeSI OP_REG, eSI_reg
#define RMeDI OP_REG, eDI_reg
#define RMrAX OP_REG, rAX_reg
#define RMrBX OP_REG, rBX_reg
#define RMrCX OP_REG, rCX_reg
#define RMrDX OP_REG, rDX_reg
#define RMrSP OP_REG, rSP_reg
#define RMrBP OP_REG, rBP_reg
#define RMrSI OP_REG, rSI_reg
#define RMrDI OP_REG, rDI_reg
#define RMAL OP_REG, al_reg
#define RMAL OP_REG, al_reg
#define RMCL OP_REG, cl_reg
#define RMDL OP_REG, dl_reg
#define RMBL OP_REG, bl_reg
#define RMAH OP_REG, ah_reg
#define RMCH OP_REG, ch_reg
#define RMDH OP_REG, dh_reg
#define RMBH OP_REG, bh_reg
#define RMAX OP_REG, ax_reg
#define RMDX OP_REG, dx_reg

#define eAX OP_IMREG, eAX_reg
#define eBX OP_IMREG, eBX_reg
#define eCX OP_IMREG, eCX_reg
#define eDX OP_IMREG, eDX_reg
#define eSP OP_IMREG, eSP_reg
#define eBP OP_IMREG, eBP_reg
#define eSI OP_IMREG, eSI_reg
#define eDI OP_IMREG, eDI_reg
#define AL OP_IMREG, al_reg
#define CL OP_IMREG, cl_reg
#define DL OP_IMREG, dl_reg
#define BL OP_IMREG, bl_reg
#define AH OP_IMREG, ah_reg
#define CH OP_IMREG, ch_reg
#define DH OP_IMREG, dh_reg
#define BH OP_IMREG, bh_reg
#define AX OP_IMREG, ax_reg
#define DX OP_IMREG, dx_reg
#define indirDX OP_IMREG, indir_dx_reg

#define Sw OP_SEG, w_mode
#define Ap OP_DIR, 0
#define Ob OP_OFF64, b_mode
#define Ov OP_OFF64, v_mode
#define Xb OP_DSreg, eSI_reg
#define Xv OP_DSreg, eSI_reg
#define Yb OP_ESreg, eDI_reg
#define Yv OP_ESreg, eDI_reg
#define DSBX OP_DSreg, eBX_reg

#define es OP_REG, es_reg
#define ss OP_REG, ss_reg
#define cs OP_REG, cs_reg
#define ds OP_REG, ds_reg
#define fs OP_REG, fs_reg
#define gs OP_REG, gs_reg

#define MX OP_MMX, 0
#define XM OP_XMM, 0
#define EM OP_EM, v_mode
#define EX OP_EX, v_mode
#define MS OP_MS, v_mode
#define XS OP_XS, v_mode
#define VM OP_VMX, q_mode
#define OPSUF OP_3DNowSuffix, 0
#define OPSIMD OP_SIMD_Suffix, 0

/* Used handle "rep" prefix for string instructions.  */
#define Xbr REP_Fixup, eSI_reg
#define Xvr REP_Fixup, eSI_reg
#define Ybr REP_Fixup, eDI_reg
#define Yvr REP_Fixup, eDI_reg
#define indirDXr REP_Fixup, indir_dx_reg
#define ALr REP_Fixup, al_reg
#define eAXr REP_Fixup, eAX_reg

#define cond_jump_flag NULL, cond_jump_mode
#define loop_jcxz_flag NULL, loop_jcxz_mode

/* bits in sizeflag */
#define SUFFIX_ALWAYS 4
#define AFLAG 2
#define DFLAG 1

#define b_mode 1  /* byte operand */
#define v_mode 2  /* operand size depends on prefixes */
#define w_mode 3  /* word operand */
#define d_mode 4  /* double word operand  */
#define q_mode 5  /* quad word operand */
#define t_mode 6  /* ten-byte operand */
#define x_mode 7  /* 16-byte XMM operand */
#define m_mode 8  /* d_mode in 32bit, q_mode in 64bit mode.  */
#define cond_jump_mode 9
#define loop_jcxz_mode 10
#define dq_mode 11 /* operand size depends on REX prefixes.  */
#define dqw_mode 12 /* registers like dq_mode, memory like w_mode.  */
#define f_mode 13 /* 4- or 6-byte pointer operand */
#define const_1_mode 14
#define stack_v_mode 15 /* v_mode for stack-related opcodes.  */

#define es_reg 100
#define cs_reg 101
#define ss_reg 102
#define ds_reg 103
#define fs_reg 104
#define gs_reg 105

#define eAX_reg 108
#define eCX_reg 109
#define eDX_reg 110
#define eBX_reg 111
#define eSP_reg 112
#define eBP_reg 113
#define eSI_reg 114
#define eDI_reg 115

#define al_reg 116
#define cl_reg 117
#define dl_reg 118
#define bl_reg 119
#define ah_reg 120
#define ch_reg 121
#define dh_reg 122
#define bh_reg 123

#define ax_reg 124
#define cx_reg 125
#define dx_reg 126
#define bx_reg 127
#define sp_reg 128
#define bp_reg 129
#define si_reg 130
#define di_reg 131

#define rAX_reg 132
#define rCX_reg 133
#define rDX_reg 134
#define rBX_reg 135
#define rSP_reg 136
#define rBP_reg 137
#define rSI_reg 138
#define rDI_reg 139

#define indir_dx_reg 150

#define FLOATCODE 1
#define USE_GROUPS 2
#define USE_PREFIX_USER_TABLE 3
#define X86_64_SPECIAL 4
#define IS_3BYTE_OPCODE 5

#define FLOAT	  NULL, NULL, FLOATCODE, NULL, 0, NULL, 0, NULL, 0

#define GRP1b	  NULL, NULL, USE_GROUPS, NULL,  0, NULL, 0, NULL, 0
#define GRP1S	  NULL, NULL, USE_GROUPS, NULL,  1, NULL, 0, NULL, 0
#define GRP1Ss	  NULL, NULL, USE_GROUPS, NULL,  2, NULL, 0, NULL, 0
#define GRP2b	  NULL, NULL, USE_GROUPS, NULL,  3, NULL, 0, NULL, 0
#define GRP2S	  NULL, NULL, USE_GROUPS, NULL,  4, NULL, 0, NULL, 0
#define GRP2b_one NULL, NULL, USE_GROUPS, NULL,  5, NULL, 0, NULL, 0
#define GRP2S_one NULL, NULL, USE_GROUPS, NULL,  6, NULL, 0, NULL, 0
#define GRP2b_cl  NULL, NULL, USE_GROUPS, NULL,  7, NULL, 0, NULL, 0
#define GRP2S_cl  NULL, NULL, USE_GROUPS, NULL,  8, NULL, 0, NULL, 0
#define GRP3b	  NULL, NULL, USE_GROUPS, NULL,  9, NULL, 0, NULL, 0
#define GRP3S	  NULL, NULL, USE_GROUPS, NULL, 10, NULL, 0, NULL, 0
#define GRP4	  NULL, NULL, USE_GROUPS, NULL, 11, NULL, 0, NULL, 0
#define GRP5	  NULL, NULL, USE_GROUPS, NULL, 12, NULL, 0, NULL, 0
#define GRP6	  NULL, NULL, USE_GROUPS, NULL, 13, NULL, 0, NULL, 0
#define GRP7	  NULL, NULL, USE_GROUPS, NULL, 14, NULL, 0, NULL, 0
#define GRP8	  NULL, NULL, USE_GROUPS, NULL, 15, NULL, 0, NULL, 0
#define GRP9	  NULL, NULL, USE_GROUPS, NULL, 16, NULL, 0, NULL, 0
#define GRP11_C6	  NULL, NULL, USE_GROUPS, NULL, 17, NULL, 0, NULL, 0
#define GRP11_C7	  NULL, NULL, USE_GROUPS, NULL, 18, NULL, 0, NULL, 0
#define GRP12	  NULL, NULL, USE_GROUPS, NULL, 19, NULL, 0, NULL, 0
#define GRP13	  NULL, NULL, USE_GROUPS, NULL, 20, NULL, 0, NULL, 0
#define GRP14	  NULL, NULL, USE_GROUPS, NULL, 21, NULL, 0, NULL, 0
#define GRP15	  NULL, NULL, USE_GROUPS, NULL, 22, NULL, 0, NULL, 0
#define GRP16	  NULL, NULL, USE_GROUPS, NULL, 23, NULL, 0, NULL, 0
#define GRPAMD	  NULL, NULL, USE_GROUPS, NULL, 24, NULL, 0, NULL, 0
#define GRPPADLCK1 NULL, NULL, USE_GROUPS, NULL, 25, NULL, 0, NULL, 0
#define GRPPADLCK2 NULL, NULL, USE_GROUPS, NULL, 26, NULL, 0, NULL, 0

#define PREGRP0   NULL, NULL, USE_PREFIX_USER_TABLE, NULL,  0, NULL, 0, NULL, 0
#define PREGRP1   NULL, NULL, USE_PREFIX_USER_TABLE, NULL,  1, NULL, 0, NULL, 0
#define PREGRP2   NULL, NULL, USE_PREFIX_USER_TABLE, NULL,  2, NULL, 0, NULL, 0
#define PREGRP3   NULL, NULL, USE_PREFIX_USER_TABLE, NULL,  3, NULL, 0, NULL, 0
#define PREGRP4   NULL, NULL, USE_PREFIX_USER_TABLE, NULL,  4, NULL, 0, NULL, 0
#define PREGRP5   NULL, NULL, USE_PREFIX_USER_TABLE, NULL,  5, NULL, 0, NULL, 0
#define PREGRP6   NULL, NULL, USE_PREFIX_USER_TABLE, NULL,  6, NULL, 0, NULL, 0
#define PREGRP7   NULL, NULL, USE_PREFIX_USER_TABLE, NULL,  7, NULL, 0, NULL, 0
#define PREGRP8   NULL, NULL, USE_PREFIX_USER_TABLE, NULL,  8, NULL, 0, NULL, 0
#define PREGRP9   NULL, NULL, USE_PREFIX_USER_TABLE, NULL,  9, NULL, 0, NULL, 0
#define PREGRP10  NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 10, NULL, 0, NULL, 0
#define PREGRP11  NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 11, NULL, 0, NULL, 0
#define PREGRP12  NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 12, NULL, 0, NULL, 0
#define PREGRP13  NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 13, NULL, 0, NULL, 0
#define PREGRP14  NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 14, NULL, 0, NULL, 0
#define PREGRP15  NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 15, NULL, 0, NULL, 0
#define PREGRP16  NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 16, NULL, 0, NULL, 0
#define PREGRP17  NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 17, NULL, 0, NULL, 0
#define PREGRP18  NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 18, NULL, 0, NULL, 0
#define PREGRP19  NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 19, NULL, 0, NULL, 0
#define PREGRP20  NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 20, NULL, 0, NULL, 0
#define PREGRP21  NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 21, NULL, 0, NULL, 0
#define PREGRP22  NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 22, NULL, 0, NULL, 0
#define PREGRP23  NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 23, NULL, 0, NULL, 0
#define PREGRP24  NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 24, NULL, 0, NULL, 0
#define PREGRP25  NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 25, NULL, 0, NULL, 0
#define PREGRP26  NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 26, NULL, 0, NULL, 0
#define PREGRP27  NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 27, NULL, 0, NULL, 0
#define PREGRP28  NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 28, NULL, 0, NULL, 0
#define PREGRP29  NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 29, NULL, 0, NULL, 0
#define PREGRP30  NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 30, NULL, 0, NULL, 0
#define PREGRP31  NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 31, NULL, 0, NULL, 0
#define PREGRP32  NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 32, NULL, 0, NULL, 0
#define PREGRP33  NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 33, NULL, 0, NULL, 0
#define PREGRP34  NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 34, NULL, 0, NULL, 0
#define PREGRP35  NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 35, NULL, 0, NULL, 0
#define PREGRP36  NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 36, NULL, 0, NULL, 0

#define X86_64_0  NULL, NULL, X86_64_SPECIAL, NULL,  0, NULL, 0, NULL, 0

#define THREE_BYTE_0 NULL, NULL, IS_3BYTE_OPCODE, NULL, 0, NULL, 0, NULL, 0
#define THREE_BYTE_1 NULL, NULL, IS_3BYTE_OPCODE, NULL, 1, NULL, 0, NULL, 0

typedef void (*op_rtn) (int bytemode, int sizeflag);

struct dis386 {
  const char *name;
  op_rtn op1;
  int bytemode1;
  op_rtn op2;
  int bytemode2;
  op_rtn op3;
  int bytemode3;
  op_rtn op4;
  int bytemode4;
};

/* Upper case letters in the instruction names here are macros.
   'A' => print 'b' if no register operands or suffix_always is true
   'B' => print 'b' if suffix_always is true
   'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
   .      size prefix
   'E' => print 'e' if 32-bit form of jcxz
   'F' => print 'w' or 'l' depending on address size prefix (loop insns)
   'H' => print ",pt" or ",pn" branch hint
   'I' => honor following macro letter even in Intel mode (implemented only
   .      for some of the macro letters)
   'J' => print 'l'
   'L' => print 'l' if suffix_always is true
   'N' => print 'n' if instruction has no wait "prefix"
   'O' => print 'd', or 'o'
   'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
   .      or suffix_always is true.  print 'q' if rex prefix is present.
   'Q' => print 'w', 'l' or 'q' if no register operands or suffix_always
   .      is true
   'R' => print 'w', 'l' or 'q' ("wd" or "dq" in intel mode)
   'S' => print 'w', 'l' or 'q' if suffix_always is true
   'T' => print 'q' in 64bit mode and behave as 'P' otherwise
   'U' => print 'q' in 64bit mode and behave as 'Q' otherwise
   'V' => print 'q' in 64bit mode and behave as 'S' otherwise
   'W' => print 'b' or 'w' ("w" or "de" in intel mode)
   'X' => print 's', 'd' depending on data16 prefix (for XMM)
   'Y' => 'q' if instruction has an REX 64bit overwrite prefix
   'Z' => print 'q' in 64bit mode and behave as 'L' otherwise

   Many of the above letters print nothing in Intel mode.  See "putop"
   for the details.

   Braces '{' and '}', and vertical bars '|', indicate alternative
   mnemonic strings for AT&T, Intel, X86_64 AT&T, and X86_64 Intel
   modes.  In cases where there are only two alternatives, the X86_64
   instruction is reserved, and "(bad)" is printed.
*/

static const struct dis386 dis386[] = {
  /* 00 */
  { "addB",		Eb, Gb, XX, XX },
  { "addS",		Ev, Gv, XX, XX },
  { "addB",		Gb, Eb, XX, XX },
  { "addS",		Gv, Ev, XX, XX },
  { "addB",		AL, Ib, XX, XX },
  { "addS",		eAX, Iv, XX, XX },
  { "push{T|}",		es, XX, XX, XX },
  { "pop{T|}",		es, XX, XX, XX },
  /* 08 */
  { "orB",		Eb, Gb, XX, XX },
  { "orS",		Ev, Gv, XX, XX },
  { "orB",		Gb, Eb, XX, XX },
  { "orS",		Gv, Ev, XX , XX},
  { "orB",		AL, Ib, XX, XX },
  { "orS",		eAX, Iv, XX, XX },
  { "push{T|}",		cs, XX, XX, XX },
  { "(bad)",		XX, XX, XX, XX },	/* 0x0f extended opcode escape */
  /* 10 */
  { "adcB",		Eb, Gb, XX, XX },
  { "adcS",		Ev, Gv, XX, XX },
  { "adcB",		Gb, Eb, XX, XX },
  { "adcS",		Gv, Ev, XX, XX },
  { "adcB",		AL, Ib, XX, XX },
  { "adcS",		eAX, Iv, XX, XX },
  { "push{T|}",		ss, XX, XX, XX },
  { "pop{T|}",		ss, XX, XX, XX },
  /* 18 */
  { "sbbB",		Eb, Gb, XX, XX },
  { "sbbS",		Ev, Gv, XX, XX },
  { "sbbB",		Gb, Eb, XX, XX },
  { "sbbS",		Gv, Ev, XX, XX },
  { "sbbB",		AL, Ib, XX, XX },
  { "sbbS",		eAX, Iv, XX, XX },
  { "push{T|}",		ds, XX, XX, XX },
  { "pop{T|}",		ds, XX, XX, XX },
  /* 20 */
  { "andB",		Eb, Gb, XX, XX },
  { "andS",		Ev, Gv, XX, XX },
  { "andB",		Gb, Eb, XX, XX },
  { "andS",		Gv, Ev, XX, XX },
  { "andB",		AL, Ib, XX, XX },
  { "andS",		eAX, Iv, XX, XX },
  { "(bad)",		XX, XX, XX, XX },	/* SEG ES prefix */
  { "daa{|}",		XX, XX, XX, XX },
  /* 28 */
  { "subB",		Eb, Gb, XX, XX },
  { "subS",		Ev, Gv, XX, XX},
  { "subB",		Gb, Eb, XX, XX },
  { "subS",		Gv, Ev, XX, XX },
  { "subB",		AL, Ib, XX, XX },
  { "subS",		eAX, Iv, XX, XX },
  { "(bad)",		XX, XX, XX, XX },	/* SEG CS prefix */
  { "das{|}",		XX, XX, XX, XX },
  /* 30 */
  { "xorB",		Eb, Gb, XX, XX },
  { "xorS",		Ev, Gv, XX, XX },
  { "xorB",		Gb, Eb, XX, XX },
  { "xorS",		Gv, Ev, XX, XX },
  { "xorB",		AL, Ib, XX, XX },
  { "xorS",		eAX, Iv, XX, XX },
  { "(bad)",		XX, XX, XX, XX },	/* SEG SS prefix */
  { "aaa{|}",		XX, XX, XX, XX },
  /* 38 */
  { "cmpB",		Eb, Gb, XX, XX },
  { "cmpS",		Ev, Gv, XX, XX },
  { "cmpB",		Gb, Eb, XX, XX },
  { "cmpS",		Gv, Ev, XX, XX },
  { "cmpB",		AL, Ib, XX, XX },
  { "cmpS",		eAX, Iv, XX, XX },
  { "(bad)",		XX, XX, XX, XX },	/* SEG DS prefix */
  { "aas{|}",		XX, XX, XX, XX },
  /* 40 */
  { "inc{S|}",		RMeAX, XX, XX, XX },
  { "inc{S|}",		RMeCX, XX, XX, XX },
  { "inc{S|}",		RMeDX, XX, XX, XX },
  { "inc{S|}",		RMeBX, XX, XX, XX },
  { "inc{S|}",		RMeSP, XX, XX, XX },
  { "inc{S|}",		RMeBP, XX, XX, XX },
  { "inc{S|}",		RMeSI, XX, XX, XX },
  { "inc{S|}",		RMeDI, XX, XX, XX },
  /* 48 */
  { "dec{S|}",		RMeAX, XX, XX, XX },
  { "dec{S|}",		RMeCX, XX, XX, XX },
  { "dec{S|}",		RMeDX, XX, XX, XX },
  { "dec{S|}",		RMeBX, XX, XX, XX },
  { "dec{S|}",		RMeSP, XX, XX, XX },
  { "dec{S|}",		RMeBP, XX, XX, XX },
  { "dec{S|}",		RMeSI, XX, XX, XX },
  { "dec{S|}",		RMeDI, XX, XX, XX },
  /* 50 */
  { "pushV",		RMrAX, XX, XX, XX },
  { "pushV",		RMrCX, XX, XX, XX },
  { "pushV",		RMrDX, XX, XX, XX },
  { "pushV",		RMrBX, XX, XX, XX },
  { "pushV",		RMrSP, XX, XX, XX },
  { "pushV",		RMrBP, XX, XX, XX },
  { "pushV",		RMrSI, XX, XX, XX },
  { "pushV",		RMrDI, XX, XX, XX },
  /* 58 */
  { "popV",		RMrAX, XX, XX, XX },
  { "popV",		RMrCX, XX, XX, XX },
  { "popV",		RMrDX, XX, XX, XX },
  { "popV",		RMrBX, XX, XX, XX },
  { "popV",		RMrSP, XX, XX, XX },
  { "popV",		RMrBP, XX, XX, XX },
  { "popV",		RMrSI, XX, XX, XX },
  { "popV",		RMrDI, XX, XX, XX },
  /* 60 */
  { "pusha{P|}",	XX, XX, XX, XX},
  { "popa{P|}",		XX, XX, XX, XX },
  { "bound{S|}",	Gv, Ma, XX, XX },
  { X86_64_0 },
  { "(bad)",		XX, XX, XX, XX },	/* seg fs */
  { "(bad)",		XX, XX, XX, XX },	/* seg gs */
  { "(bad)",		XX, XX, XX, XX },	/* op size prefix */
  { "(bad)",		XX, XX, XX, XX },	/* adr size prefix */
  /* 68 */
  { "pushT",		Iq, XX, XX, XX },
  { "imulS",		Gv, Ev, Iv, XX },
  { "pushT",		sIb, XX, XX, XX },
  { "imulS",		Gv, Ev, sIb, XX },
  { "ins{b||b|}",	Ybr, indirDX, XX, XX },
  { "ins{R||R|}",	Yvr, indirDX, XX, XX },
  { "outs{b||b|}",	indirDXr, Xb, XX, XX },
  { "outs{R||R|}",	indirDXr, Xv, XX, XX },
  /* 70 */
  { "joH",		Jb, XX, cond_jump_flag, XX },
  { "jnoH",		Jb, XX, cond_jump_flag, XX },
  { "jbH",		Jb, XX, cond_jump_flag, XX },
  { "jaeH",		Jb, XX, cond_jump_flag, XX },
  { "jeH",		Jb, XX, cond_jump_flag, XX },
  { "jneH",		Jb, XX, cond_jump_flag, XX },
  { "jbeH",		Jb, XX, cond_jump_flag, XX },
  { "jaH",		Jb, XX, cond_jump_flag, XX },
  /* 78 */
  { "jsH",		Jb, XX, cond_jump_flag, XX },
  { "jnsH",		Jb, XX, cond_jump_flag, XX },
  { "jpH",		Jb, XX, cond_jump_flag, XX },
  { "jnpH",		Jb, XX, cond_jump_flag, XX },
  { "jlH",		Jb, XX, cond_jump_flag, XX },
  { "jgeH",		Jb, XX, cond_jump_flag, XX },
  { "jleH",		Jb, XX, cond_jump_flag, XX },
  { "jgH",		Jb, XX, cond_jump_flag, XX },
  /* 80 */
  { GRP1b },
  { GRP1S },
  { "(bad)",		XX, XX, XX, XX },
  { GRP1Ss },
  { "testB",		Eb, Gb, XX, XX },
  { "testS",		Ev, Gv, XX, XX },
  { "xchgB",		Eb, Gb, XX, XX },
  { "xchgS",		Ev, Gv, XX, XX },
  /* 88 */
  { "movB",		Eb, Gb, XX, XX },
  { "movS",		Ev, Gv, XX, XX },
  { "movB",		Gb, Eb, XX, XX },
  { "movS",		Gv, Ev, XX, XX },
  { "movQ",		Sv, Sw, XX, XX },
  { "leaS",		Gv, M, XX, XX },
  { "movQ",		Sw, Sv, XX, XX },
  { "popU",		stackEv, XX, XX, XX },
  /* 90 */
  { "xchgS",		NOP_Fixup1, eAX_reg, NOP_Fixup2, eAX_reg, XX, XX },
  { "xchgS",		RMeCX, eAX, XX, XX },
  { "xchgS",		RMeDX, eAX, XX, XX },
  { "xchgS",		RMeBX, eAX, XX, XX },
  { "xchgS",		RMeSP, eAX, XX, XX },
  { "xchgS",		RMeBP, eAX, XX, XX },
  { "xchgS",		RMeSI, eAX, XX, XX },
  { "xchgS",		RMeDI, eAX, XX, XX },
  /* 98 */
  { "cW{tR||tR|}",	XX, XX, XX, XX },
  { "cR{tO||tO|}",	XX, XX, XX, XX },
  { "Jcall{T|}",	Ap, XX, XX, XX },
  { "(bad)",		XX, XX, XX, XX },	/* fwait */
  { "pushfT",		XX, XX, XX, XX },
  { "popfT",		XX, XX, XX, XX },
  { "sahf{|}",		XX, XX, XX, XX },
  { "lahf{|}",		XX, XX, XX, XX },
  /* a0 */
  { "movB",		AL, Ob, XX, XX },
  { "movS",		eAX, Ov, XX, XX },
  { "movB",		Ob, AL, XX, XX },
  { "movS",		Ov, eAX, XX, XX },
  { "movs{b||b|}",	Ybr, Xb, XX, XX },
  { "movs{R||R|}",	Yvr, Xv, XX, XX },
  { "cmps{b||b|}",	Xb, Yb, XX, XX },
  { "cmps{R||R|}",	Xv, Yv, XX, XX },
  /* a8 */
  { "testB",		AL, Ib, XX, XX },
  { "testS",		eAX, Iv, XX, XX },
  { "stosB",		Ybr, AL, XX, XX },
  { "stosS",		Yvr, eAX, XX, XX },
  { "lodsB",		ALr, Xb, XX, XX },
  { "lodsS",		eAXr, Xv, XX, XX },
  { "scasB",		AL, Yb, XX, XX },
  { "scasS",		eAX, Yv, XX, XX },
  /* b0 */
  { "movB",		RMAL, Ib, XX, XX },
  { "movB",		RMCL, Ib, XX, XX },
  { "movB",		RMDL, Ib, XX, XX },
  { "movB",		RMBL, Ib, XX, XX },
  { "movB",		RMAH, Ib, XX, XX },
  { "movB",		RMCH, Ib, XX, XX },
  { "movB",		RMDH, Ib, XX, XX },
  { "movB",		RMBH, Ib, XX, XX },
  /* b8 */
  { "movS",		RMeAX, Iv64, XX, XX },
  { "movS",		RMeCX, Iv64, XX, XX },
  { "movS",		RMeDX, Iv64, XX, XX },
  { "movS",		RMeBX, Iv64, XX, XX },
  { "movS",		RMeSP, Iv64, XX, XX },
  { "movS",		RMeBP, Iv64, XX, XX },
  { "movS",		RMeSI, Iv64, XX, XX },
  { "movS",		RMeDI, Iv64, XX, XX },
  /* c0 */
  { GRP2b },
  { GRP2S },
  { "retT",		Iw, XX, XX, XX },
  { "retT",		XX, XX, XX, XX },
  { "les{S|}",		Gv, Mp, XX, XX },
  { "ldsS",		Gv, Mp, XX, XX },
  { GRP11_C6 },
  { GRP11_C7 },
  /* c8 */
  { "enterT",		Iw, Ib, XX, XX },
  { "leaveT",		XX, XX, XX, XX },
  { "lretP",		Iw, XX, XX, XX },
  { "lretP",		XX, XX, XX, XX },
  { "int3",		XX, XX, XX, XX },
  { "int",		Ib, XX, XX, XX },
  { "into{|}",		XX, XX, XX, XX },
  { "iretP",		XX, XX, XX, XX },
  /* d0 */
  { GRP2b_one },
  { GRP2S_one },
  { GRP2b_cl },
  { GRP2S_cl },
  { "aam{|}",		sIb, XX, XX, XX },
  { "aad{|}",		sIb, XX, XX, XX },
  { "(bad)",		XX, XX, XX, XX },
  { "xlat",		DSBX, XX, XX, XX },
  /* d8 */
  { FLOAT },
  { FLOAT },
  { FLOAT },
  { FLOAT },
  { FLOAT },
  { FLOAT },
  { FLOAT },
  { FLOAT },
  /* e0 */
  { "loopneFH",		Jb, XX, loop_jcxz_flag, XX },
  { "loopeFH",		Jb, XX, loop_jcxz_flag, XX },
  { "loopFH",		Jb, XX, loop_jcxz_flag, XX },
  { "jEcxzH",		Jb, XX, loop_jcxz_flag, XX },
  { "inB",		AL, Ib, XX, XX },
  { "inS",		eAX, Ib, XX, XX },
  { "outB",		Ib, AL, XX, XX },
  { "outS",		Ib, eAX, XX, XX },
  /* e8 */
  { "callT",		Jv, XX, XX, XX },
  { "jmpT",		Jv, XX, XX, XX },
  { "Jjmp{T|}",		Ap, XX, XX, XX },
  { "jmp",		Jb, XX, XX, XX },
  { "inB",		AL, indirDX, XX, XX },
  { "inS",		eAX, indirDX, XX, XX },
  { "outB",		indirDX, AL, XX, XX },
  { "outS",		indirDX, eAX, XX, XX },
  /* f0 */
  { "(bad)",		XX, XX, XX, XX },	/* lock prefix */
  { "icebp",		XX, XX, XX, XX },
  { "(bad)",		XX, XX, XX, XX },	/* repne */
  { "(bad)",		XX, XX, XX, XX },	/* repz */
  { "hlt",		XX, XX, XX, XX },
  { "cmc",		XX, XX, XX, XX },
  { GRP3b },
  { GRP3S },
  /* f8 */
  { "clc",		XX, XX, XX, XX },
  { "stc",		XX, XX, XX, XX },
  { "cli",		XX, XX, XX, XX },
  { "sti",		XX, XX, XX, XX },
  { "cld",		XX, XX, XX, XX },
  { "std",		XX, XX, XX, XX },
  { GRP4 },
  { GRP5 },
};

static const struct dis386 dis386_twobyte[] = {
  /* 00 */
  { GRP6 },
  { GRP7 },
  { "larS",		Gv, Ew, XX, XX },
  { "lslS",		Gv, Ew, XX, XX },
  { "(bad)",		XX, XX, XX, XX },
  { "syscall",		XX, XX, XX, XX },
  { "clts",		XX, XX, XX, XX },
  { "sysretP",		XX, XX, XX, XX },
  /* 08 */
  { "invd",		XX, XX, XX, XX},
  { "wbinvd",		XX, XX, XX, XX },
  { "(bad)",		XX, XX, XX, XX },
  { "ud2a",		XX, XX, XX, XX },
  { "(bad)",		XX, XX, XX, XX },
  { GRPAMD },
  { "femms",		XX, XX, XX, XX },
  { "",			MX, EM, OPSUF, XX }, /* See OP_3DNowSuffix.  */
  /* 10 */
  { PREGRP8 },
  { PREGRP9 },
  { PREGRP30 },
  { "movlpX",		EX, XM, SIMD_Fixup, 'h', XX },
  { "unpcklpX",		XM, EX, XX, XX },
  { "unpckhpX",		XM, EX, XX, XX },
  { PREGRP31 },
  { "movhpX",		EX, XM, SIMD_Fixup, 'l', XX },
  /* 18 */
  { GRP16 },
  { "(bad)",		XX, XX, XX, XX },
  { "(bad)",		XX, XX, XX, XX },
  { "(bad)",		XX, XX, XX, XX },
  { "(bad)",		XX, XX, XX, XX },
  { "(bad)",		XX, XX, XX, XX },
  { "(bad)",		XX, XX, XX, XX },
  { "nopQ",		Ev, XX, XX, XX },
  /* 20 */
  { "movZ",		Rm, Cm, XX, XX },
  { "movZ",		Rm, Dm, XX, XX },
  { "movZ",		Cm, Rm, XX, XX },
  { "movZ",		Dm, Rm, XX, XX },
  { "movL",		Rd, Td, XX, XX },
  { "(bad)",		XX, XX, XX, XX },
  { "movL",		Td, Rd, XX, XX },
  { "(bad)",		XX, XX, XX, XX },
  /* 28 */
  { "movapX",		XM, EX, XX, XX },
  { "movapX",		EX, XM, XX, XX },
  { PREGRP2 },
  { PREGRP33 },
  { PREGRP4 },
  { PREGRP3 },
  { "ucomisX",		XM,EX, XX, XX },
  { "comisX",		XM,EX, XX, XX },
  /* 30 */
  { "wrmsr",		XX, XX, XX, XX },
  { "rdtsc",		XX, XX, XX, XX },
  { "rdmsr",		XX, XX, XX, XX },
  { "rdpmc",		XX, XX, XX, XX },
  { "sysenter",		XX, XX, XX, XX },
  { "sysexit",		XX, XX, XX, XX },
  { "(bad)",		XX, XX, XX, XX },
  { "(bad)",		XX, XX, XX, XX },
  /* 38 */
  { THREE_BYTE_0 },
  { "(bad)",		XX, XX, XX, XX },
  { THREE_BYTE_1 },
  { "(bad)",		XX, XX, XX, XX },
  { "(bad)",		XX, XX, XX, XX },
  { "(bad)",		XX, XX, XX, XX },
  { "(bad)",		XX, XX, XX, XX },
  { "(bad)",		XX, XX, XX, XX },
  /* 40 */
  { "cmovo",		Gv, Ev, XX, XX },
  { "cmovno",		Gv, Ev, XX, XX },
  { "cmovb",		Gv, Ev, XX, XX },
  { "cmovae",		Gv, Ev, XX, XX },
  { "cmove",		Gv, Ev, XX, XX },
  { "cmovne",		Gv, Ev, XX, XX },
  { "cmovbe",		Gv, Ev, XX, XX },
  { "cmova",		Gv, Ev, XX, XX },
  /* 48 */
  { "cmovs",		Gv, Ev, XX, XX },
  { "cmovns",		Gv, Ev, XX, XX },
  { "cmovp",		Gv, Ev, XX, XX },
  { "cmovnp",		Gv, Ev, XX, XX },
  { "cmovl",		Gv, Ev, XX, XX },
  { "cmovge",		Gv, Ev, XX, XX },
  { "cmovle",		Gv, Ev, XX, XX },
  { "cmovg",		Gv, Ev, XX, XX },
  /* 50 */
  { "movmskpX",		Gdq, XS, XX, XX },
  { PREGRP13 },
  { PREGRP12 },
  { PREGRP11 },
  { "andpX",		XM, EX, XX, XX },
  { "andnpX",		XM, EX, XX, XX },
  { "orpX",		XM, EX, XX, XX },
  { "xorpX",		XM, EX, XX, XX },
  /* 58 */
  { PREGRP0 },
  { PREGRP10 },
  { PREGRP17 },
  { PREGRP16 },
  { PREGRP14 },
  { PREGRP7 },
  { PREGRP5 },
  { PREGRP6 },
  /* 60 */
  { "punpcklbw",	MX, EM, XX, XX },
  { "punpcklwd",	MX, EM, XX, XX },
  { "punpckldq",	MX, EM, XX, XX },
  { "packsswb",		MX, EM, XX, XX },
  { "pcmpgtb",		MX, EM, XX, XX },
  { "pcmpgtw",		MX, EM, XX, XX },
  { "pcmpgtd",		MX, EM, XX, XX },
  { "packuswb",		MX, EM, XX, XX },
  /* 68 */
  { "punpckhbw",	MX, EM, XX, XX },
  { "punpckhwd",	MX, EM, XX, XX },
  { "punpckhdq",	MX, EM, XX, XX },
  { "packssdw",		MX, EM, XX, XX },
  { PREGRP26 },
  { PREGRP24 },
  { "movd",		MX, Edq, XX, XX },
  { PREGRP19 },
  /* 70 */
  { PREGRP22 },
  { GRP12 },
  { GRP13 },
  { GRP14 },
  { "pcmpeqb",		MX, EM, XX, XX },
  { "pcmpeqw",		MX, EM, XX, XX },
  { "pcmpeqd",		MX, EM, XX, XX },
  { "emms",		XX, XX, XX, XX },
  /* 78 */
  { PREGRP34 },
  { PREGRP35 },
  { "(bad)",		XX, XX, XX, XX },
  { "(bad)",		XX, XX, XX, XX },
  { PREGRP28 },
  { PREGRP29 },
  { PREGRP23 },
  { PREGRP20 },
  /* 80 */
  { "joH",		Jv, XX, cond_jump_flag, XX },
  { "jnoH",		Jv, XX, cond_jump_flag, XX },
  { "jbH",		Jv, XX, cond_jump_flag, XX },
  { "jaeH",		Jv, XX, cond_jump_flag, XX },
  { "jeH",		Jv, XX, cond_jump_flag, XX },
  { "jneH",		Jv, XX, cond_jump_flag, XX },
  { "jbeH",		Jv, XX, cond_jump_flag, XX },
  { "jaH",		Jv, XX, cond_jump_flag, XX },
  /* 88 */
  { "jsH",		Jv, XX, cond_jump_flag, XX },
  { "jnsH",		Jv, XX, cond_jump_flag, XX },
  { "jpH",		Jv, XX, cond_jump_flag, XX },
  { "jnpH",		Jv, XX, cond_jump_flag, XX },
  { "jlH",		Jv, XX, cond_jump_flag, XX },
  { "jgeH",		Jv, XX, cond_jump_flag, XX },
  { "jleH",		Jv, XX, cond_jump_flag, XX },
  { "jgH",		Jv, XX, cond_jump_flag, XX },
  /* 90 */
  { "seto",		Eb, XX, XX, XX },
  { "setno",		Eb, XX, XX, XX },
  { "setb",		Eb, XX, XX, XX },
  { "setae",		Eb, XX, XX, XX },
  { "sete",		Eb, XX, XX, XX },
  { "setne",		Eb, XX, XX, XX },
  { "setbe",		Eb, XX, XX, XX },
  { "seta",		Eb, XX, XX, XX },
  /* 98 */
  { "sets",		Eb, XX, XX, XX },
  { "setns",		Eb, XX, XX, XX },
  { "setp",		Eb, XX, XX, XX },
  { "setnp",		Eb, XX, XX, XX },
  { "setl",		Eb, XX, XX, XX },
  { "setge",		Eb, XX, XX, XX },
  { "setle",		Eb, XX, XX, XX },
  { "setg",		Eb, XX, XX, XX },
  /* a0 */
  { "pushT",		fs, XX, XX, XX },
  { "popT",		fs, XX, XX, XX },
  { "cpuid",		XX, XX, XX, XX },
  { "btS",		Ev, Gv, XX, XX },
  { "shldS",		Ev, Gv, Ib, XX },
  { "shldS",		Ev, Gv, CL, XX },
  { GRPPADLCK2 },
  { GRPPADLCK1 },
  /* a8 */
  { "pushT",		gs, XX, XX, XX },
  { "popT",		gs, XX, XX, XX },
  { "rsm",		XX, XX, XX, XX },
  { "btsS",		Ev, Gv, XX, XX },
  { "shrdS",		Ev, Gv, Ib, XX },
  { "shrdS",		Ev, Gv, CL, XX },
  { GRP15 },
  { "imulS",		Gv, Ev, XX, XX },
  /* b0 */
  { "cmpxchgB",		Eb, Gb, XX, XX },
  { "cmpxchgS",		Ev, Gv, XX, XX },
  { "lssS",		Gv, Mp, XX, XX },
  { "btrS",		Ev, Gv, XX, XX },
  { "lfsS",		Gv, Mp, XX, XX },
  { "lgsS",		Gv, Mp, XX, XX },
  { "movz{bR|x|bR|x}",	Gv, Eb, XX, XX },
  { "movz{wR|x|wR|x}",	Gv, Ew, XX, XX }, /* yes, there really is movzww ! */
  /* b8 */
  { "popcntS",          Gv, Ev, XX, XX },
  { "ud2b",		XX, XX, XX, XX },
  { GRP8 },
  { "btcS",		Ev, Gv, XX, XX },
  { "bsfS",		Gv, Ev, XX, XX },
  { PREGRP36 },
  { "movs{bR|x|bR|x}",	Gv, Eb, XX, XX },
  { "movs{wR|x|wR|x}",	Gv, Ew, XX, XX }, /* yes, there really is movsww ! */
  /* c0 */
  { "xaddB",		Eb, Gb, XX, XX },
  { "xaddS",		Ev, Gv, XX, XX },
  { PREGRP1 },
  { "movntiS",		Ev, Gv, XX, XX },
  { "pinsrw",		MX, Edqw, Ib, XX },
  { "pextrw",		Gdq, MS, Ib, XX },
  { "shufpX",		XM, EX, Ib, XX },
  { GRP9 },
  /* c8 */
  { "bswap",		RMeAX, XX, XX, XX },
  { "bswap",		RMeCX, XX, XX, XX },
  { "bswap",		RMeDX, XX, XX, XX },
  { "bswap",		RMeBX, XX, XX, XX },
  { "bswap",		RMeSP, XX, XX, XX },
  { "bswap",		RMeBP, XX, XX, XX },
  { "bswap",		RMeSI, XX, XX, XX },
  { "bswap",		RMeDI, XX, XX, XX },
  /* d0 */
  { PREGRP27 },
  { "psrlw",		MX, EM, XX, XX },
  { "psrld",		MX, EM, XX, XX },
  { "psrlq",		MX, EM, XX, XX },
  { "paddq",		MX, EM, XX, XX },
  { "pmullw",		MX, EM, XX, XX },
  { PREGRP21 },
  { "pmovmskb",		Gdq, MS, XX, XX },
  /* d8 */
  { "psubusb",		MX, EM, XX, XX },
  { "psubusw",		MX, EM, XX, XX },
  { "pminub",		MX, EM, XX, XX },
  { "pand",		MX, EM, XX, XX },
  { "paddusb",		MX, EM, XX, XX },
  { "paddusw",		MX, EM, XX, XX },
  { "pmaxub",		MX, EM, XX, XX },
  { "pandn",		MX, EM, XX, XX },
  /* e0 */
  { "pavgb",		MX, EM, XX, XX },
  { "psraw",		MX, EM, XX, XX },
  { "psrad",		MX, EM, XX, XX },
  { "pavgw",		MX, EM, XX, XX },
  { "pmulhuw",		MX, EM, XX, XX },
  { "pmulhw",		MX, EM, XX, XX },
  { PREGRP15 },
  { PREGRP25 },
  /* e8 */
  { "psubsb",		MX, EM, XX, XX },
  { "psubsw",		MX, EM, XX, XX },
  { "pminsw",		MX, EM, XX, XX },
  { "por",		MX, EM, XX, XX },
  { "paddsb",		MX, EM, XX, XX },
  { "paddsw",		MX, EM, XX, XX },
  { "pmaxsw",		MX, EM, XX, XX },
  { "pxor",		MX, EM, XX, XX },
  /* f0 */
  { PREGRP32 },
  { "psllw",		MX, EM, XX, XX },
  { "pslld",		MX, EM, XX, XX },
  { "psllq",		MX, EM, XX, XX },
  { "pmuludq",		MX, EM, XX, XX },
  { "pmaddwd",		MX, EM, XX, XX },
  { "psadbw",		MX, EM, XX, XX },
  { PREGRP18 },
  /* f8 */
  { "psubb",		MX, EM, XX, XX },
  { "psubw",		MX, EM, XX, XX },
  { "psubd",		MX, EM, XX, XX },
  { "psubq",		MX, EM, XX, XX },
  { "paddb",		MX, EM, XX, XX },
  { "paddw",		MX, EM, XX, XX },
  { "paddd",		MX, EM, XX, XX },
  { "(bad)",		XX, XX, XX, XX }
};

static const unsigned char onebyte_has_modrm[256] = {
  /*       0 1 2 3 4 5 6 7 8 9 a b c d e f        */
  /*       -------------------------------        */
  /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
  /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
  /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
  /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
  /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
  /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
  /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
  /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
  /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
  /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
  /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
  /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
  /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
  /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
  /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
  /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1  /* f0 */
  /*       -------------------------------        */
  /*       0 1 2 3 4 5 6 7 8 9 a b c d e f        */
};

static const unsigned char twobyte_has_modrm[256] = {
  /*       0 1 2 3 4 5 6 7 8 9 a b c d e f        */
  /*       -------------------------------        */
  /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
  /* 10 */ 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1, /* 1f */
  /* 20 */ 1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1, /* 2f */
  /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
  /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
  /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
  /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
  /* 70 */ 1,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1, /* 7f */
  /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
  /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
  /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
  /* b0 */ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* bf */
  /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
  /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
  /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
  /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0  /* ff */
  /*       -------------------------------        */
  /*       0 1 2 3 4 5 6 7 8 9 a b c d e f        */
};

static const unsigned char twobyte_uses_SSE_prefix[256] = {
  /*       0 1 2 3 4 5 6 7 8 9 a b c d e f        */
  /*       -------------------------------        */
  /* 00 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0f */
  /* 10 */ 1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0, /* 1f */
  /* 20 */ 0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0, /* 2f */
  /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
  /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 4f */
  /* 50 */ 0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* 5f */
  /* 60 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1, /* 6f */
  /* 70 */ 1,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1, /* 7f */
  /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
  /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 9f */
  /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* af */
  /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* bf */
  /* c0 */ 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, /* cf */
  /* d0 */ 1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, /* df */
  /* e0 */ 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, /* ef */
  /* f0 */ 1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0  /* ff */
  /*       -------------------------------        */
  /*       0 1 2 3 4 5 6 7 8 9 a b c d e f        */
};

static char obuf[100];
static char *obufp;
static char scratchbuf[100];
static unsigned char *start_codep;
static unsigned char *insn_codep;
static unsigned char *codep;
static disassemble_info *the_info;
static int mod;
static int rm;
static int reg;
static unsigned char need_modrm;

/* If we are accessing mod/rm/reg without need_modrm set, then the
   values are stale.  Hitting this abort likely indicates that you
   need to update onebyte_has_modrm or twobyte_has_modrm.  */
#define MODRM_CHECK  if (!need_modrm) abort ()

static const char **names64;
static const char **names32;
static const char **names16;
static const char **names8;
static const char **names8rex;
static const char **names_seg;
static const char **index16;

static const char *intel_names64[] = {
  "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
  "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
};
static const char *intel_names32[] = {
  "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
  "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
};
static const char *intel_names16[] = {
  "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
  "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
};
static const char *intel_names8[] = {
  "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
};
static const char *intel_names8rex[] = {
  "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
  "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
};
static const char *intel_names_seg[] = {
  "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
};
static const char *intel_index16[] = {
  "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
};

static const char *att_names64[] = {
  "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
  "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
};
static const char *att_names32[] = {
  "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
  "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
};
static const char *att_names16[] = {
  "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
  "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
};
static const char *att_names8[] = {
  "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
};
static const char *att_names8rex[] = {
  "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
  "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
};
static const char *att_names_seg[] = {
  "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
};
static const char *att_index16[] = {
  "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
};

static const struct dis386 grps[][8] = {
  /* GRP1b */
  {
    { "addA",	Eb, Ib, XX, XX },
    { "orA",	Eb, Ib, XX, XX },
    { "adcA",	Eb, Ib, XX, XX },
    { "sbbA",	Eb, Ib, XX, XX },
    { "andA",	Eb, Ib, XX, XX },
    { "subA",	Eb, Ib, XX, XX },
    { "xorA",	Eb, Ib, XX, XX },
    { "cmpA",	Eb, Ib, XX, XX }
  },
  /* GRP1S */
  {
    { "addQ",	Ev, Iv, XX, XX },
    { "orQ",	Ev, Iv, XX, XX },
    { "adcQ",	Ev, Iv, XX, XX },
    { "sbbQ",	Ev, Iv, XX, XX },
    { "andQ",	Ev, Iv, XX, XX },
    { "subQ",	Ev, Iv, XX, XX },
    { "xorQ",	Ev, Iv, XX, XX },
    { "cmpQ",	Ev, Iv, XX, XX }
  },
  /* GRP1Ss */
  {
    { "addQ",	Ev, sIb, XX, XX },
    { "orQ",	Ev, sIb, XX, XX },
    { "adcQ",	Ev, sIb, XX, XX },
    { "sbbQ",	Ev, sIb, XX, XX },
    { "andQ",	Ev, sIb, XX, XX },
    { "subQ",	Ev, sIb, XX, XX },
    { "xorQ",	Ev, sIb, XX, XX },
    { "cmpQ",	Ev, sIb, XX, XX }
  },
  /* GRP2b */
  {
    { "rolA",	Eb, Ib, XX, XX },
    { "rorA",	Eb, Ib, XX, XX },
    { "rclA",	Eb, Ib, XX, XX },
    { "rcrA",	Eb, Ib, XX, XX },
    { "shlA",	Eb, Ib, XX, XX },
    { "shrA",	Eb, Ib, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "sarA",	Eb, Ib, XX, XX },
  },
  /* GRP2S */
  {
    { "rolQ",	Ev, Ib, XX, XX },
    { "rorQ",	Ev, Ib, XX, XX },
    { "rclQ",	Ev, Ib, XX, XX },
    { "rcrQ",	Ev, Ib, XX, XX },
    { "shlQ",	Ev, Ib, XX, XX },
    { "shrQ",	Ev, Ib, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "sarQ",	Ev, Ib, XX, XX },
  },
  /* GRP2b_one */
  {
    { "rolA",	Eb, I1, XX, XX },
    { "rorA",	Eb, I1, XX, XX },
    { "rclA",	Eb, I1, XX, XX },
    { "rcrA",	Eb, I1, XX, XX },
    { "shlA",	Eb, I1, XX, XX },
    { "shrA",	Eb, I1, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "sarA",	Eb, I1, XX, XX },
  },
  /* GRP2S_one */
  {
    { "rolQ",	Ev, I1, XX, XX },
    { "rorQ",	Ev, I1, XX, XX },
    { "rclQ",	Ev, I1, XX, XX },
    { "rcrQ",	Ev, I1, XX, XX },
    { "shlQ",	Ev, I1, XX, XX },
    { "shrQ",	Ev, I1, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "sarQ",	Ev, I1, XX, XX },
  },
  /* GRP2b_cl */
  {
    { "rolA",	Eb, CL, XX, XX },
    { "rorA",	Eb, CL, XX, XX },
    { "rclA",	Eb, CL, XX, XX },
    { "rcrA",	Eb, CL, XX, XX },
    { "shlA",	Eb, CL, XX, XX },
    { "shrA",	Eb, CL, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "sarA",	Eb, CL, XX, XX },
  },
  /* GRP2S_cl */
  {
    { "rolQ",	Ev, CL, XX, XX },
    { "rorQ",	Ev, CL, XX, XX },
    { "rclQ",	Ev, CL, XX, XX },
    { "rcrQ",	Ev, CL, XX, XX },
    { "shlQ",	Ev, CL, XX, XX },
    { "shrQ",	Ev, CL, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "sarQ",	Ev, CL, XX, XX }
  },
  /* GRP3b */
  {
    { "testA",	Eb, Ib, XX, XX },
    { "(bad)",	Eb, XX, XX, XX },
    { "notA",	Eb, XX, XX, XX },
    { "negA",	Eb, XX, XX, XX },
    { "mulA",	Eb, XX, XX, XX },	/* Don't print the implicit %al register,  */
    { "imulA",	Eb, XX, XX, XX },	/* to distinguish these opcodes from other */
    { "divA",	Eb, XX, XX, XX },	/* mul/imul opcodes.  Do the same for div  */
    { "idivA",	Eb, XX, XX, XX }	/* and idiv for consistency.		   */
  },
  /* GRP3S */
  {
    { "testQ",	Ev, Iv, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "notQ",	Ev, XX, XX, XX },
    { "negQ",	Ev, XX, XX, XX },
    { "mulQ",	Ev, XX, XX, XX },	/* Don't print the implicit register.  */
    { "imulQ",	Ev, XX, XX, XX },
    { "divQ",	Ev, XX, XX, XX },
    { "idivQ",	Ev, XX, XX, XX },
  },
  /* GRP4 */
  {
    { "incA",	Eb, XX, XX, XX },
    { "decA",	Eb, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
  },
  /* GRP5 */
  {
    { "incQ",	Ev, XX, XX, XX },
    { "decQ",	Ev, XX, XX, XX },
    { "callT",	indirEv, XX, XX, XX },
    { "JcallT",	indirEp, XX, XX, XX },
    { "jmpT",	indirEv, XX, XX, XX },
    { "JjmpT",	indirEp, XX, XX, XX },
    { "pushU",	stackEv, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
  },
  /* GRP6 */
  {
    { "sldt",	Ev, XX, XX, XX },
    { "str",	Ev, XX, XX, XX },
    { "lldt",	Ew, XX, XX, XX },
    { "ltr",	Ew, XX, XX, XX },
    { "verr",	Ew, XX, XX, XX },
    { "verw",	Ew, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX }
  },
  /* GRP7 */
  {
    { "sgdt{Q|IQ||}", VMX_Fixup, 0, XX, XX, XX },
    { "sidt{Q|IQ||}", PNI_Fixup, 0, XX, XX, XX },
    { "lgdt{Q|Q||}",	 M, XX, XX, XX },
    { "lidt{Q|Q||}",	 SVME_Fixup, 0, XX, XX, XX },
    { "smsw",	Ev, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "lmsw",	Ew, XX, XX, XX },
    { "invlpg",	INVLPG_Fixup, w_mode, XX, XX, XX },
  },
  /* GRP8 */
  {
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "btQ",	Ev, Ib, XX, XX },
    { "btsQ",	Ev, Ib, XX, XX },
    { "btrQ",	Ev, Ib, XX, XX },
    { "btcQ",	Ev, Ib, XX, XX },
  },
  /* GRP9 */
  {
    { "(bad)",	XX, XX, XX, XX },
    { "cmpxchg8b", Eq, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "",	VM, XX, XX, XX },		/* See OP_VMX.  */
    { "vmptrst", Eq, XX, XX, XX },
  },
  /* GRP11_C6 */
  {
    { "movA",	Eb, Ib, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
  },
  /* GRP11_C7 */
  {
    { "movQ",	Ev, Iv, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
  },
  /* GRP12 */
  {
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "psrlw",	MS, Ib, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "psraw",	MS, Ib, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "psllw",	MS, Ib, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
  },
  /* GRP13 */
  {
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "psrld",	MS, Ib, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "psrad",	MS, Ib, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "pslld",	MS, Ib, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
  },
  /* GRP14 */
  {
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "psrlq",	MS, Ib, XX, XX },
    { "psrldq",	MS, Ib, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "psllq",	MS, Ib, XX, XX },
    { "pslldq",	MS, Ib, XX, XX },
  },
  /* GRP15 */
  {
    { "fxsave", Ev, XX, XX, XX },
    { "fxrstor", Ev, XX, XX, XX },
    { "ldmxcsr", Ev, XX, XX, XX },
    { "stmxcsr", Ev, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "lfence", OP_0fae, 0, XX, XX, XX },
    { "mfence", OP_0fae, 0, XX, XX, XX },
    { "clflush", OP_0fae, 0, XX, XX, XX },
  },
  /* GRP16 */
  {
    { "prefetchnta", Ev, XX, XX, XX },
    { "prefetcht0", Ev, XX, XX, XX },
    { "prefetcht1", Ev, XX, XX, XX },
    { "prefetcht2", Ev, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
  },
  /* GRPAMD */
  {
    { "prefetch", Eb, XX, XX, XX },
    { "prefetchw", Eb, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
  },
  /* GRPPADLCK1 */
  {
    { "xstore-rng", OP_0f07, 0, XX, XX, XX },
    { "xcrypt-ecb", OP_0f07, 0, XX, XX, XX },
    { "xcrypt-cbc", OP_0f07, 0, XX, XX, XX },
    { "xcrypt-ctr", OP_0f07, 0, XX, XX, XX },
    { "xcrypt-cfb", OP_0f07, 0, XX, XX, XX },
    { "xcrypt-ofb", OP_0f07, 0, XX, XX, XX },
    { "(bad)",	OP_0f07, 0, XX, XX, XX },
    { "(bad)",	OP_0f07, 0, XX, XX, XX },
  },
  /* GRPPADLCK2 */
  {
    { "montmul", OP_0f07, 0, XX, XX, XX },
    { "xsha1",   OP_0f07, 0, XX, XX, XX },
    { "xsha256", OP_0f07, 0, XX, XX, XX },
    { "(bad)",	 OP_0f07, 0, XX, XX, XX },
    { "(bad)",   OP_0f07, 0, XX, XX, XX },
    { "(bad)",   OP_0f07, 0, XX, XX, XX },
    { "(bad)",	 OP_0f07, 0, XX, XX, XX },
    { "(bad)",	 OP_0f07, 0, XX, XX, XX },
  }
};

static const struct dis386 prefix_user_table[][4] = {
  /* PREGRP0 */
  {
    { "addps", XM, EX, XX, XX },
    { "addss", XM, EX, XX, XX },
    { "addpd", XM, EX, XX, XX },
    { "addsd", XM, EX, XX, XX },
  },
  /* PREGRP1 */
  {
    { "", XM, EX, OPSIMD, XX },	/* See OP_SIMD_SUFFIX.  */
    { "", XM, EX, OPSIMD, XX },
    { "", XM, EX, OPSIMD, XX },
    { "", XM, EX, OPSIMD, XX },
  },
  /* PREGRP2 */
  {
    { "cvtpi2ps", XM, EM, XX, XX },
    { "cvtsi2ssY", XM, Ev, XX, XX },
    { "cvtpi2pd", XM, EM, XX, XX },
    { "cvtsi2sdY", XM, Ev, XX, XX },
  },
  /* PREGRP3 */
  {
    { "cvtps2pi", MX, EX, XX, XX },
    { "cvtss2siY", Gv, EX, XX, XX },
    { "cvtpd2pi", MX, EX, XX, XX },
    { "cvtsd2siY", Gv, EX, XX, XX },
  },
  /* PREGRP4 */
  {
    { "cvttps2pi", MX, EX, XX, XX },
    { "cvttss2siY", Gv, EX, XX, XX },
    { "cvttpd2pi", MX, EX, XX, XX },
    { "cvttsd2siY", Gv, EX, XX, XX },
  },
  /* PREGRP5 */
  {
    { "divps", XM, EX, XX, XX },
    { "divss", XM, EX, XX, XX },
    { "divpd", XM, EX, XX, XX },
    { "divsd", XM, EX, XX, XX },
  },
  /* PREGRP6 */
  {
    { "maxps", XM, EX, XX, XX },
    { "maxss", XM, EX, XX, XX },
    { "maxpd", XM, EX, XX, XX },
    { "maxsd", XM, EX, XX, XX },
  },
  /* PREGRP7 */
  {
    { "minps", XM, EX, XX, XX },
    { "minss", XM, EX, XX, XX },
    { "minpd", XM, EX, XX, XX },
    { "minsd", XM, EX, XX, XX },
  },
  /* PREGRP8 */
  {
    { "movups", XM, EX, XX, XX },
    { "movss", XM, EX, XX, XX },
    { "movupd", XM, EX, XX, XX },
    { "movsd", XM, EX, XX, XX },
  },
  /* PREGRP9 */
  {
    { "movups", EX, XM, XX, XX },
    { "movss", EX, XM, XX, XX },
    { "movupd", EX, XM, XX, XX },
    { "movsd", EX, XM, XX, XX },
  },
  /* PREGRP10 */
  {
    { "mulps", XM, EX, XX, XX },
    { "mulss", XM, EX, XX, XX },
    { "mulpd", XM, EX, XX, XX },
    { "mulsd", XM, EX, XX, XX },
  },
  /* PREGRP11 */
  {
    { "rcpps", XM, EX, XX, XX },
    { "rcpss", XM, EX, XX, XX },
    { "(bad)", XM, EX, XX, XX },
    { "(bad)", XM, EX, XX, XX },
  },
  /* PREGRP12 */
  {
    { "rsqrtps", XM, EX, XX, XX },
    { "rsqrtss", XM, EX, XX, XX },
    { "(bad)", XM, EX, XX, XX },
    { "(bad)", XM, EX, XX, XX },
  },
  /* PREGRP13 */
  {
    { "sqrtps", XM, EX, XX, XX },
    { "sqrtss", XM, EX, XX, XX },
    { "sqrtpd", XM, EX, XX, XX },
    { "sqrtsd", XM, EX, XX, XX },
  },
  /* PREGRP14 */
  {
    { "subps", XM, EX, XX, XX },
    { "subss", XM, EX, XX, XX },
    { "subpd", XM, EX, XX, XX },
    { "subsd", XM, EX, XX, XX },
  },
  /* PREGRP15 */
  {
    { "(bad)", XM, EX, XX, XX},
    { "cvtdq2pd", XM, EX, XX, XX },
    { "cvttpd2dq", XM, EX, XX, XX },
    { "cvtpd2dq", XM, EX, XX, XX },
  },
  /* PREGRP16 */
  {
    { "cvtdq2ps", XM, EX, XX, XX },
    { "cvttps2dq",XM, EX, XX, XX },
    { "cvtps2dq",XM, EX, XX, XX },
    { "(bad)", XM, EX, XX, XX },
  },
  /* PREGRP17 */
  {
    { "cvtps2pd", XM, EX, XX, XX },
    { "cvtss2sd", XM, EX, XX, XX },
    { "cvtpd2ps", XM, EX, XX, XX },
    { "cvtsd2ss", XM, EX, XX, XX },
  },
  /* PREGRP18 */
  {
    { "maskmovq", MX, MS, XX, XX },
    { "(bad)", XM, EX, XX, XX },
    { "maskmovdqu", XM, EX, XX, XX },
    { "(bad)", XM, EX, XX, XX },
  },
  /* PREGRP19 */
  {
    { "movq", MX, EM, XX, XX },
    { "movdqu", XM, EX, XX, XX },
    { "movdqa", XM, EX, XX, XX },
    { "(bad)", XM, EX, XX, XX },
  },
  /* PREGRP20 */
  {
    { "movq", EM, MX, XX, XX },
    { "movdqu", EX, XM, XX, XX },
    { "movdqa", EX, XM, XX, XX },
    { "(bad)", EX, XM, XX, XX },
  },
  /* PREGRP21 */
  {
    { "(bad)", EX, XM, XX, XX },
    { "movq2dq", XM, MS, XX, XX },
    { "movq", EX, XM, XX, XX },
    { "movdq2q", MX, XS, XX, XX },
  },
  /* PREGRP22 */
  {
    { "pshufw", MX, EM, Ib, XX },
    { "pshufhw", XM, EX, Ib, XX },
    { "pshufd", XM, EX, Ib, XX },
    { "pshuflw", XM, EX, Ib, XX},
  },
  /* PREGRP23 */
  {
    { "movd", Edq, MX, XX, XX },
    { "movq", XM, EX, XX, XX },
    { "movd", Edq, XM, XX, XX },
    { "(bad)", Ed, XM, XX, XX },
  },
  /* PREGRP24 */
  {
    { "(bad)", MX, EX, XX, XX },
    { "(bad)", XM, EX, XX, XX },
    { "punpckhqdq", XM, EX, XX, XX },
    { "(bad)", XM, EX, XX, XX },
  },
  /* PREGRP25 */
  {
    { "movntq", EM, MX, XX, XX },
    { "(bad)", EM, XM, XX, XX },
    { "movntdq", EM, XM, XX, XX },
    { "(bad)", EM, XM, XX, XX },
  },
  /* PREGRP26 */
  {
    { "(bad)", MX, EX, XX, XX },
    { "(bad)", XM, EX, XX, XX },
    { "punpcklqdq", XM, EX, XX, XX },
    { "(bad)", XM, EX, XX, XX },
  },
  /* PREGRP27 */
  {
    { "(bad)", MX, EX, XX, XX },
    { "(bad)", XM, EX, XX, XX },
    { "addsubpd", XM, EX, XX, XX },
    { "addsubps", XM, EX, XX, XX },
  },
  /* PREGRP28 */
  {
    { "(bad)", MX, EX, XX, XX },
    { "(bad)", XM, EX, XX, XX },
    { "haddpd", XM, EX, XX, XX },
    { "haddps", XM, EX, XX, XX },
  },
  /* PREGRP29 */
  {
    { "(bad)", MX, EX, XX, XX },
    { "(bad)", XM, EX, XX, XX },
    { "hsubpd", XM, EX, XX, XX },
    { "hsubps", XM, EX, XX, XX },
  },
  /* PREGRP30 */
  {
    { "movlpX", XM, EX, SIMD_Fixup, 'h', XX }, /* really only 2 operands */
    { "movsldup", XM, EX, XX, XX },
    { "movlpd", XM, EX, XX, XX },
    { "movddup", XM, EX, XX, XX },
  },
  /* PREGRP31 */
  {
    { "movhpX", XM, EX, SIMD_Fixup, 'l', XX },
    { "movshdup", XM, EX, XX, XX },
    { "movhpd", XM, EX, XX, XX },
    { "(bad)", XM, EX, XX, XX },
  },
  /* PREGRP32 */
  {
    { "(bad)", XM, EX, XX, XX },
    { "(bad)", XM, EX, XX, XX },
    { "(bad)", XM, EX, XX, XX },
    { "lddqu", XM, M, XX, XX },
  },
  /* PREGRP33 */
  {
    {"movntps",Ev, XM, XX, XX},
    {"movntss",Ev, XM, XX, XX},
    {"movntpd",Ev, XM, XX, XX},
    {"movntsd",Ev, XM, XX, XX},
  },

  /* PREGRP34 */
  {
    {"vmread", Em, Gm, XX, XX},
    {"(bad)",  XX, XX, XX, XX},
    {"extrq",  XS, Ib, Ib, XX},
    {"insertq",XM, XS, Ib, Ib},
  },
  
 /* PREGRP35 */  
  {
    {"vmwrite", Gm, Em, XX, XX},
    {"(bad)",   XX, XX, XX, XX},
    {"extrq",   XM, XS, XX, XX},
    {"insertq", XM, XS, XX, XX},
  }, 

  /* PREGRP36 */
  {
    { "bsrS",   Gv, Ev, XX, XX },
    { "lzcntS", Gv, Ev, XX, XX },
    { "bsrS",  Gv, Ev, XX, XX },
    { "(bad)",  XX, XX, XX, XX },
  },

};

static const struct dis386 x86_64_table[][2] = {
  {
    { "arpl", Ew, Gw, XX, XX },
    { "movs{||lq|xd}", Gv, Ed, XX, XX },
  },
};

static const struct dis386 three_byte_table[][32] = {
  /* THREE_BYTE_0 */
  {
    { "pshufb",		MX, EM, XX, XX },
    { "phaddw",		MX, EM, XX, XX },
    { "phaddd",		MX, EM, XX, XX },
    { "phaddsw",	MX, EM, XX, XX },
    { "pmaddubsw",	MX, EM, XX, XX },
    { "phsubw",		MX, EM, XX, XX },
    { "phsubd",		MX, EM, XX, XX },
    { "phsubsw",	MX, EM, XX, XX },
    { "psignb",		MX, EM, XX, XX },
    { "psignw",		MX, EM, XX, XX },
    { "psignd",		MX, EM, XX, XX },
    { "pmulhrsw",	MX, EM, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "pabsb",		MX, EM, XX, XX },
    { "pabsw",		MX, EM, XX, XX },
    { "pabsd",		MX, EM, XX, XX },
    { "(bad)",		XX, XX, XX, XX }
  },
  /* THREE_BYTE_1 */
  {
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "palignr",	MX, EM, Ib, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX },
    { "(bad)",		XX, XX, XX, XX }
  },
};

#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")

static void
ckprefix (void)
{
  int newrex;
  rex = 0;
  prefixes = 0;
  used_prefixes = 0;
  rex_used = 0;
  while (1)
    {
      FETCH_DATA (the_info, codep + 1);
      newrex = 0;
      switch (*codep)
	{
	/* REX prefixes family.  */
	case 0x40:
	case 0x41:
	case 0x42:
	case 0x43:
	case 0x44:
	case 0x45:
	case 0x46:
	case 0x47:
	case 0x48:
	case 0x49:
	case 0x4a:
	case 0x4b:
	case 0x4c:
	case 0x4d:
	case 0x4e:
	case 0x4f:
	    if (address_mode == mode_64bit)
	      newrex = *codep;
	    else
	      return;
	  break;
	case 0xf3:
	  prefixes |= PREFIX_REPZ;
	  break;
	case 0xf2:
	  prefixes |= PREFIX_REPNZ;
	  break;
	case 0xf0:
	  prefixes |= PREFIX_LOCK;
	  break;
	case 0x2e:
	  prefixes |= PREFIX_CS;
	  break;
	case 0x36:
	  prefixes |= PREFIX_SS;
	  break;
	case 0x3e:
	  prefixes |= PREFIX_DS;
	  break;
	case 0x26:
	  prefixes |= PREFIX_ES;
	  break;
	case 0x64:
	  prefixes |= PREFIX_FS;
	  break;
	case 0x65:
	  prefixes |= PREFIX_GS;
	  break;
	case 0x66:
	  prefixes |= PREFIX_DATA;
	  break;
	case 0x67:
	  prefixes |= PREFIX_ADDR;
	  break;
	case FWAIT_OPCODE:
	  /* fwait is really an instruction.  If there are prefixes
	     before the fwait, they belong to the fwait, *not* to the
	     following instruction.  */
	  if (prefixes || rex)
	    {
	      prefixes |= PREFIX_FWAIT;
	      codep++;
	      return;
	    }
	  prefixes = PREFIX_FWAIT;
	  break;
	default:
	  return;
	}
      /* Rex is ignored when followed by another prefix.  */
      if (rex)
	{
	  rex_used = rex;
	  return;
	}
      rex = newrex;
      codep++;
    }
}

/* Return the name of the prefix byte PREF, or NULL if PREF is not a
   prefix byte.  */

static const char *
prefix_name (int pref, int sizeflag)
{
  switch (pref)
    {
    /* REX prefixes family.  */
    case 0x40:
      return "rex";
    case 0x41:
      return "rexZ";
    case 0x42:
      return "rexY";
    case 0x43:
      return "rexYZ";
    case 0x44:
      return "rexX";
    case 0x45:
      return "rexXZ";
    case 0x46:
      return "rexXY";
    case 0x47:
      return "rexXYZ";
    case 0x48:
      return "rex64";
    case 0x49:
      return "rex64Z";
    case 0x4a:
      return "rex64Y";
    case 0x4b:
      return "rex64YZ";
    case 0x4c:
      return "rex64X";
    case 0x4d:
      return "rex64XZ";
    case 0x4e:
      return "rex64XY";
    case 0x4f:
      return "rex64XYZ";
    case 0xf3:
      return "repz";
    case 0xf2:
      return "repnz";
    case 0xf0:
      return "lock";
    case 0x2e:
      return "cs";
    case 0x36:
      return "ss";
    case 0x3e:
      return "ds";
    case 0x26:
      return "es";
    case 0x64:
      return "fs";
    case 0x65:
      return "gs";
    case 0x66:
      return (sizeflag & DFLAG) ? "data16" : "data32";
    case 0x67:
      if (address_mode == mode_64bit)
	return (sizeflag & AFLAG) ? "addr32" : "addr64";
      else
	return (sizeflag & AFLAG) ? "addr16" : "addr32";
    case FWAIT_OPCODE:
      return "fwait";
    default:
      return NULL;
    }
}

static char op1out[100], op2out[100], op3out[100], op4out[100];
static int op_ad, op_index[4];
static int two_source_ops;
static bfd_vma op_address[4];
static bfd_vma op_riprel[4];
static bfd_vma start_pc;

/*
 *   On the 386's of 1988, the maximum length of an instruction is 15 bytes.
 *   (see topic "Redundant prefixes" in the "Differences from 8086"
 *   section of the "Virtual 8086 Mode" chapter.)
 * 'pc' should be the address of this instruction, it will
 *   be used to print the target address if this is a relative jump or call
 * The function returns the length of this instruction in bytes.
 */

static char intel_syntax;
static char open_char;
static char close_char;
static char separator_char;
static char scale_char;

/* Here for backwards compatibility.  When gdb stops using
   print_insn_i386_att and print_insn_i386_intel these functions can
   disappear, and print_insn_i386 be merged into print_insn.  */
int
print_insn_i386_att (bfd_vma pc, disassemble_info *info)
{
  intel_syntax = 0;

  return print_insn (pc, info);
}

int
print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
{
  intel_syntax = 1;

  return print_insn (pc, info);
}

int
print_insn_i386 (bfd_vma pc, disassemble_info *info)
{
  intel_syntax = -1;

  return print_insn (pc, info);
}

static int
print_insn (bfd_vma pc, disassemble_info *info)
{
  const struct dis386 *dp;
  int i;
  char *first, *second, *third, *fourth;
  int needcomma;
  unsigned char uses_SSE_prefix, uses_LOCK_prefix;
  int sizeflag;
  const char *p;
  struct dis_private priv;

  if (info->mach == bfd_mach_x86_64_intel_syntax
      || info->mach == bfd_mach_x86_64)
    address_mode = mode_64bit;
  else
    address_mode = mode_32bit;

  if (intel_syntax == (char) -1)
    intel_syntax = (info->mach == bfd_mach_i386_i386_intel_syntax
		    || info->mach == bfd_mach_x86_64_intel_syntax);

  if (info->mach == bfd_mach_i386_i386
      || info->mach == bfd_mach_x86_64
      || info->mach == bfd_mach_i386_i386_intel_syntax
      || info->mach == bfd_mach_x86_64_intel_syntax)
    priv.orig_sizeflag = AFLAG | DFLAG;
  else if (info->mach == bfd_mach_i386_i8086)
    priv.orig_sizeflag = 0;
  else
    abort ();

  for (p = info->disassembler_options; p != NULL; )
    {
      if (strncmp (p, "x86-64", 6) == 0)
	{
	  address_mode = mode_64bit;
	  priv.orig_sizeflag = AFLAG | DFLAG;
	}
      else if (strncmp (p, "i386", 4) == 0)
	{
	  address_mode = mode_32bit;
	  priv.orig_sizeflag = AFLAG | DFLAG;
	}
      else if (strncmp (p, "i8086", 5) == 0)
	{
	  address_mode = mode_16bit;
	  priv.orig_sizeflag = 0;
	}
      else if (strncmp (p, "intel", 5) == 0)
	{
	  intel_syntax = 1;
	}
      else if (strncmp (p, "att", 3) == 0)
	{
	  intel_syntax = 0;
	}
      else if (strncmp (p, "addr", 4) == 0)
	{
	  if (p[4] == '1' && p[5] == '6')
	    priv.orig_sizeflag &= ~AFLAG;
	  else if (p[4] == '3' && p[5] == '2')
	    priv.orig_sizeflag |= AFLAG;
	}
      else if (strncmp (p, "data", 4) == 0)
	{
	  if (p[4] == '1' && p[5] == '6')
	    priv.orig_sizeflag &= ~DFLAG;
	  else if (p[4] == '3' && p[5] == '2')
	    priv.orig_sizeflag |= DFLAG;
	}
      else if (strncmp (p, "suffix", 6) == 0)
	priv.orig_sizeflag |= SUFFIX_ALWAYS;

      p = strchr (p, ',');
      if (p != NULL)
	p++;
    }

  if (intel_syntax)
    {
      names64 = intel_names64;
      names32 = intel_names32;
      names16 = intel_names16;
      names8 = intel_names8;
      names8rex = intel_names8rex;
      names_seg = intel_names_seg;
      index16 = intel_index16;
      open_char = '[';
      close_char = ']';
      separator_char = '+';
      scale_char = '*';
    }
  else
    {
      names64 = att_names64;
      names32 = att_names32;
      names16 = att_names16;
      names8 = att_names8;
      names8rex = att_names8rex;
      names_seg = att_names_seg;
      index16 = att_index16;
      open_char = '(';
      close_char =  ')';
      separator_char = ',';
      scale_char = ',';
    }

  /* The output looks better if we put 7 bytes on a line, since that
     puts most long word instructions on a single line.  */
  info->bytes_per_line = 7;

  info->private_data = &priv;
  priv.max_fetched = priv.the_buffer;
  priv.insn_start = pc;

  obuf[0] = 0;
  op1out[0] = 0;
  op2out[0] = 0;
  op3out[0] = 0;
  op4out[0] = 0;

  op_index[0] = op_index[1] = op_index[2] = op_index[3] = -1;

  the_info = info;
  start_pc = pc;
  start_codep = priv.the_buffer;
  codep = priv.the_buffer;

  if (setjmp (priv.bailout) != 0)
    {
      const char *name;

      /* Getting here means we tried for data but didn't get it.  That
	 means we have an incomplete instruction of some sort.  Just
	 print the first byte as a prefix or a .byte pseudo-op.  */
      if (codep > priv.the_buffer)
	{
	  name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
	  if (name != NULL)
	    (*info->fprintf_func) (info->stream, "%s", name);
	  else
	    {
	      /* Just print the first byte as a .byte instruction.  */
	      (*info->fprintf_func) (info->stream, ".byte 0x%x",
				     (unsigned int) priv.the_buffer[0]);
	    }

	  return 1;
	}

      return -1;
    }

  obufp = obuf;
  ckprefix ();

  insn_codep = codep;
  sizeflag = priv.orig_sizeflag;

  FETCH_DATA (info, codep + 1);
  two_source_ops = (*codep == 0x62) || (*codep == 0xc8);

  if (((prefixes & PREFIX_FWAIT)
       && ((*codep < 0xd8) || (*codep > 0xdf)))
      || (rex && rex_used))
    {
      const char *name;

      /* fwait not followed by floating point instruction, or rex followed
	 by other prefixes.  Print the first prefix.  */
      name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
      if (name == NULL)
	name = INTERNAL_DISASSEMBLER_ERROR;
      (*info->fprintf_func) (info->stream, "%s", name);
      return 1;
    }

  if (*codep == 0x0f)
    {
      FETCH_DATA (info, codep + 2);
      dp = &dis386_twobyte[*++codep];
      need_modrm = twobyte_has_modrm[*codep];
      uses_SSE_prefix = twobyte_uses_SSE_prefix[*codep];
      uses_LOCK_prefix = (*codep & ~0x02) == 0x20;
    }
  else
    {
      dp = &dis386[*codep];
      need_modrm = onebyte_has_modrm[*codep];
      uses_SSE_prefix = 0;
      uses_LOCK_prefix = 0;
    }
  
  /*"lzcnt"=0xBD is the only non-sse instruction which uses F3 in the opcode without any "rep(z|nz)"*/
  if (!uses_SSE_prefix && (prefixes & PREFIX_REPZ) && *codep !=0xBD)
    {
      oappend ("repz ");
      used_prefixes |= PREFIX_REPZ;
    }
  if (!uses_SSE_prefix && (prefixes & PREFIX_REPNZ) && *codep !=0xBD)
    {
      oappend ("repnz ");
      used_prefixes |= PREFIX_REPNZ;
    }

  codep++;

  if (!uses_LOCK_prefix && (prefixes & PREFIX_LOCK))
    {
      oappend ("lock ");
      used_prefixes |= PREFIX_LOCK;
    }

  if (prefixes & PREFIX_ADDR)
    {
      sizeflag ^= AFLAG;
      if (dp->bytemode3 != loop_jcxz_mode || intel_syntax)
	{
	  if ((sizeflag & AFLAG) || address_mode == mode_64bit)
	    oappend ("addr32 ");
	  else
	    oappend ("addr16 ");
	  used_prefixes |= PREFIX_ADDR;
	}
    }

  if (!uses_SSE_prefix && (prefixes & PREFIX_DATA))
    {
      sizeflag ^= DFLAG;
      if (dp->bytemode3 == cond_jump_mode
	  && dp->bytemode1 == v_mode
	  && !intel_syntax)
	{
	  if (sizeflag & DFLAG)
	    oappend ("data32 ");
	  else
	    oappend ("data16 ");
	  used_prefixes |= PREFIX_DATA;
	}
    }

  if (dp->name == NULL && dp->bytemode1 == IS_3BYTE_OPCODE)
    {
      FETCH_DATA (info, codep + 2);
      dp = &three_byte_table[dp->bytemode2][*codep++];
      mod = (*codep >> 6) & 3;
      reg = (*codep >> 3) & 7;
      rm = *codep & 7;
    }
  else if (need_modrm)
    {
      FETCH_DATA (info, codep + 1);
      mod = (*codep >> 6) & 3;
      reg = (*codep >> 3) & 7;
      rm = *codep & 7;
    }

  if (dp->name == NULL && dp->bytemode1 == FLOATCODE)
    {
      dofloat (sizeflag);
    }
  else
    {
      int index;
      if (dp->name == NULL)
	{
	  switch (dp->bytemode1)
	    {
	    case USE_GROUPS:
	      dp = &grps[dp->bytemode2][reg];
	      break;

	    case USE_PREFIX_USER_TABLE:
	      index = 0;
	      used_prefixes |= (prefixes & PREFIX_REPZ);
	      if (prefixes & PREFIX_REPZ)
		index = 1;
	      else
		{
		  used_prefixes |= (prefixes & PREFIX_DATA);
		  if (prefixes & PREFIX_DATA)
		    index = 2;
		  else
		    {
		      used_prefixes |= (prefixes & PREFIX_REPNZ);
		      if (prefixes & PREFIX_REPNZ)
			index = 3;
		    }
		}
	      dp = &prefix_user_table[dp->bytemode2][index];
	      break;

	    case X86_64_SPECIAL:
	      index = address_mode == mode_64bit ? 1 : 0;
	      dp = &x86_64_table[dp->bytemode2][index];
	      break;

	    default:
	      oappend (INTERNAL_DISASSEMBLER_ERROR);
	      break;
	    }
	}

      if (putop (dp->name, sizeflag) == 0)
	{
	  obufp = op1out;
	  op_ad = 3;
	  if (dp->op1)
	    (*dp->op1) (dp->bytemode1, sizeflag);

	  obufp = op2out;
	  op_ad = 2;
	  if (dp->op2)
	    (*dp->op2) (dp->bytemode2, sizeflag);

	  obufp = op3out;
	  op_ad = 1;
	  if (dp->op3)
	    (*dp->op3) (dp->bytemode3, sizeflag);

	  obufp = op4out;
	  op_ad = 0;
	  if (dp->op4)
	    (*dp->op4) (dp->bytemode4, sizeflag);
	}
    }

  /* See if any prefixes were not used.  If so, print the first one
     separately.  If we don't do this, we'll wind up printing an
     instruction stream which does not precisely correspond to the
     bytes we are disassembling.  */
  if ((prefixes & ~used_prefixes) != 0)
    {
      const char *name;

      name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
      if (name == NULL)
	name = INTERNAL_DISASSEMBLER_ERROR;
      (*info->fprintf_func) (info->stream, "%s", name);
      return 1;
    }
  if (rex & ~rex_used)
    {
      const char *name;
      name = prefix_name (rex | 0x40, priv.orig_sizeflag);
      if (name == NULL)
	name = INTERNAL_DISASSEMBLER_ERROR;
      (*info->fprintf_func) (info->stream, "%s ", name);
    }

  obufp = obuf + strlen (obuf);
  for (i = strlen (obuf); i < 6; i++)
    oappend (" ");
  oappend (" ");
  (*info->fprintf_func) (info->stream, "%s", obuf);

  /* The enter and bound instructions are printed with operands in the same
     order as the intel book; everything else is printed in reverse order.  */
  if (intel_syntax || two_source_ops)
    {
      first = op1out;
      second = op2out;
      third = op3out;
      fourth = op4out;
      op_ad = op_index[0];
      op_index[0] = op_index[3];
      op_index[3] = op_ad;
      op_ad = op_index[1];
      op_index[1] = op_index[2];
      op_index[2] = op_ad;

    }
  else
    {
      first = op4out;
      second = op3out;
      third = op2out;
      fourth = op1out;
    }
  needcomma = 0;
  if (*first)
    {
      if (op_index[0] != -1 && !op_riprel[0])
	(*info->print_address_func) ((bfd_vma) op_address[op_index[0]], info);
      else
	(*info->fprintf_func) (info->stream, "%s", first);
      needcomma = 1;
    }
  
  if (*second)
    {
      if (needcomma)
	(*info->fprintf_func) (info->stream, ",");
      if (op_index[1] != -1 && !op_riprel[1])
	(*info->print_address_func) ((bfd_vma) op_address[op_index[1]], info);
      else
	(*info->fprintf_func) (info->stream, "%s", second);
      needcomma = 1;
    }

  if (*third)
    {
      if (needcomma)
	(*info->fprintf_func) (info->stream, ",");
      if (op_index[2] != -1 && !op_riprel[2])
	(*info->print_address_func) ((bfd_vma) op_address[op_index[2]], info);
      else
	(*info->fprintf_func) (info->stream, "%s", third);
      needcomma = 1;
    }

  if (*fourth)
    {
      if (needcomma)
	(*info->fprintf_func) (info->stream, ",");
      if (op_index[3] != -1 && !op_riprel[3])
	(*info->print_address_func) ((bfd_vma) op_address[op_index[3]], info);
      else
	(*info->fprintf_func) (info->stream, "%s", fourth);
    }

  for (i = 0; i < 4; i++)
    if (op_index[i] != -1 && op_riprel[i])
      {
	(*info->fprintf_func) (info->stream, "        # ");
	(*info->print_address_func) ((bfd_vma) (start_pc + codep - start_codep
						+ op_address[op_index[i]]), info);
      }
  return codep - priv.the_buffer;
}

static const char *float_mem[] = {
  /* d8 */
  "fadd{s||s|}",
  "fmul{s||s|}",
  "fcom{s||s|}",
  "fcomp{s||s|}",
  "fsub{s||s|}",
  "fsubr{s||s|}",
  "fdiv{s||s|}",
  "fdivr{s||s|}",
  /* d9 */
  "fld{s||s|}",
  "(bad)",
  "fst{s||s|}",
  "fstp{s||s|}",
  "fldenvIC",
  "fldcw",
  "fNstenvIC",
  "fNstcw",
  /* da */
  "fiadd{l||l|}",
  "fimul{l||l|}",
  "ficom{l||l|}",
  "ficomp{l||l|}",
  "fisub{l||l|}",
  "fisubr{l||l|}",
  "fidiv{l||l|}",
  "fidivr{l||l|}",
  /* db */
  "fild{l||l|}",
  "fisttp{l||l|}",
  "fist{l||l|}",
  "fistp{l||l|}",
  "(bad)",
  "fld{t||t|}",
  "(bad)",
  "fstp{t||t|}",
  /* dc */
  "fadd{l||l|}",
  "fmul{l||l|}",
  "fcom{l||l|}",
  "fcomp{l||l|}",
  "fsub{l||l|}",
  "fsubr{l||l|}",
  "fdiv{l||l|}",
  "fdivr{l||l|}",
  /* dd */
  "fld{l||l|}",
  "fisttp{ll||ll|}",
  "fst{l||l|}",
  "fstp{l||l|}",
  "frstorIC",
  "(bad)",
  "fNsaveIC",
  "fNstsw",
  /* de */
  "fiadd",
  "fimul",
  "ficom",
  "ficomp",
  "fisub",
  "fisubr",
  "fidiv",
  "fidivr",
  /* df */
  "fild",
  "fisttp",
  "fist",
  "fistp",
  "fbld",
  "fild{ll||ll|}",
  "fbstp",
  "fistp{ll||ll|}",
};

static const unsigned char float_mem_mode[] = {
  /* d8 */
  d_mode,
  d_mode,
  d_mode,
  d_mode,
  d_mode,
  d_mode,
  d_mode,
  d_mode,
  /* d9 */
  d_mode,
  0,
  d_mode,
  d_mode,
  0,
  w_mode,
  0,
  w_mode,
  /* da */
  d_mode,
  d_mode,
  d_mode,
  d_mode,
  d_mode,
  d_mode,
  d_mode,
  d_mode,
  /* db */
  d_mode,
  d_mode,
  d_mode,
  d_mode,
  0,
  t_mode,
  0,
  t_mode,
  /* dc */
  q_mode,
  q_mode,
  q_mode,
  q_mode,
  q_mode,
  q_mode,
  q_mode,
  q_mode,
  /* dd */
  q_mode,
  q_mode,
  q_mode,
  q_mode,
  0,
  0,
  0,
  w_mode,
  /* de */
  w_mode,
  w_mode,
  w_mode,
  w_mode,
  w_mode,
  w_mode,
  w_mode,
  w_mode,
  /* df */
  w_mode,
  w_mode,
  w_mode,
  w_mode,
  t_mode,
  q_mode,
  t_mode,
  q_mode
};

#define ST OP_ST, 0
#define STi OP_STi, 0

#define FGRPd9_2 NULL, NULL, 0, NULL, 0, NULL, 0, NULL, 0
#define FGRPd9_4 NULL, NULL, 1, NULL, 0, NULL, 0, NULL, 0
#define FGRPd9_5 NULL, NULL, 2, NULL, 0, NULL, 0, NULL, 0
#define FGRPd9_6 NULL, NULL, 3, NULL, 0, NULL, 0, NULL, 0
#define FGRPd9_7 NULL, NULL, 4, NULL, 0, NULL, 0, NULL, 0
#define FGRPda_5 NULL, NULL, 5, NULL, 0, NULL, 0, NULL, 0
#define FGRPdb_4 NULL, NULL, 6, NULL, 0, NULL, 0, NULL, 0
#define FGRPde_3 NULL, NULL, 7, NULL, 0, NULL, 0, NULL, 0
#define FGRPdf_4 NULL, NULL, 8, NULL, 0, NULL, 0, NULL, 0

static const struct dis386 float_reg[][8] = {
  /* d8 */
  {
    { "fadd",	ST, STi, XX, XX },
    { "fmul",	ST, STi, XX, XX },
    { "fcom",	STi, XX, XX, XX },
    { "fcomp",	STi, XX, XX, XX },
    { "fsub",	ST, STi, XX, XX },
    { "fsubr",	ST, STi, XX, XX },
    { "fdiv",	ST, STi, XX, XX },
    { "fdivr",	ST, STi, XX, XX },
  },
  /* d9 */
  {
    { "fld",	STi, XX, XX, XX },
    { "fxch",	STi, XX, XX, XX },
    { FGRPd9_2 },
    { "(bad)",	XX, XX, XX, XX },
    { FGRPd9_4 },
    { FGRPd9_5 },
    { FGRPd9_6 },
    { FGRPd9_7 },
  },
  /* da */
  {
    { "fcmovb",	ST, STi, XX, XX },
    { "fcmove",	ST, STi, XX, XX },
    { "fcmovbe",ST, STi, XX, XX },
    { "fcmovu",	ST, STi, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { FGRPda_5 },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
  },
  /* db */
  {
    { "fcmovnb",ST, STi, XX, XX },
    { "fcmovne",ST, STi, XX, XX },
    { "fcmovnbe",ST, STi, XX, XX },
    { "fcmovnu",ST, STi, XX, XX },
    { FGRPdb_4 },
    { "fucomi",	ST, STi, XX, XX },
    { "fcomi",	ST, STi, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
  },
  /* dc */
  {
    { "fadd",	STi, ST, XX, XX },
    { "fmul",	STi, ST, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
#if UNIXWARE_COMPAT
    { "fsub",	STi, ST, XX, XX },
    { "fsubr",	STi, ST, XX, XX },
    { "fdiv",	STi, ST, XX, XX },
    { "fdivr",	STi, ST, XX, XX },
#else
    { "fsubr",	STi, ST, XX, XX },
    { "fsub",	STi, ST, XX, XX },
    { "fdivr",	STi, ST, XX, XX },
    { "fdiv",	STi, ST, XX, XX },
#endif
  },
  /* dd */
  {
    { "ffree",	STi, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "fst",	STi, XX, XX, XX },
    { "fstp",	STi, XX, XX, XX },
    { "fucom",	STi, XX, XX, XX },
    { "fucomp",	STi, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
  },
  /* de */
  {
    { "faddp",	STi, ST, XX, XX },
    { "fmulp",	STi, ST, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { FGRPde_3 },
#if UNIXWARE_COMPAT
    { "fsubp",	STi, ST, XX, XX },
    { "fsubrp",	STi, ST, XX, XX },
    { "fdivp",	STi, ST, XX, XX },
    { "fdivrp",	STi, ST, XX, XX },
#else
    { "fsubrp",	STi, ST, XX, XX },
    { "fsubp",	STi, ST, XX, XX },
    { "fdivrp",	STi, ST, XX, XX },
    { "fdivp",	STi, ST, XX, XX },
#endif
  },
  /* df */
  {
    { "ffreep",	STi, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
    { FGRPdf_4 },
    { "fucomip",ST, STi, XX, XX },
    { "fcomip", ST, STi, XX, XX },
    { "(bad)",	XX, XX, XX, XX },
  },
};

static char *fgrps[][8] = {
  /* d9_2  0 */
  {
    "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
  },

  /* d9_4  1 */
  {
    "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
  },

  /* d9_5  2 */
  {
    "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
  },

  /* d9_6  3 */
  {
    "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
  },

  /* d9_7  4 */
  {
    "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
  },

  /* da_5  5 */
  {
    "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
  },

  /* db_4  6 */
  {
    "feni(287 only)","fdisi(287 only)","fNclex","fNinit",
    "fNsetpm(287 only)","(bad)","(bad)","(bad)",
  },

  /* de_3  7 */
  {
    "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
  },

  /* df_4  8 */
  {
    "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
  },
};

static void
dofloat (int sizeflag)
{
  const struct dis386 *dp;
  unsigned char floatop;

  floatop = codep[-1];

  if (mod != 3)
    {
      int fp_indx = (floatop - 0xd8) * 8 + reg;

      putop (float_mem[fp_indx], sizeflag);
      obufp = op1out;
      op_ad = 2;
      OP_E (float_mem_mode[fp_indx], sizeflag);
      return;
    }
  /* Skip mod/rm byte.  */
  MODRM_CHECK;
  codep++;

  dp = &float_reg[floatop - 0xd8][reg];
  if (dp->name == NULL)
    {
      putop (fgrps[dp->bytemode1][rm], sizeflag);

      /* Instruction fnstsw is only one with strange arg.  */
      if (floatop == 0xdf && codep[-1] == 0xe0)
	strcpy (op1out, names16[0]);
    }
  else
    {
      putop (dp->name, sizeflag);

      obufp = op1out;
      op_ad = 2;
      if (dp->op1)
	(*dp->op1) (dp->bytemode1, sizeflag);

      obufp = op2out;
      op_ad = 1;
      if (dp->op2)
	(*dp->op2) (dp->bytemode2, sizeflag);
    }
}

static void
OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
{
  oappend ("%st" + intel_syntax);
}

static void
OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
{
  sprintf (scratchbuf, "%%st(%d)", rm);
  oappend (scratchbuf + intel_syntax);
}

/* Capital letters in template are macros.  */
static int
putop (const char *template, int sizeflag)
{
  const char *p;
  int alt = 0;

  for (p = template; *p; p++)
    {
      switch (*p)
	{
	default:
	  *obufp++ = *p;
	  break;
	case '{':
	  alt = 0;
	  if (intel_syntax)
	    alt += 1;
	  if (address_mode == mode_64bit)
	    alt += 2;
	  while (alt != 0)
	    {
	      while (*++p != '|')
		{
		  if (*p == '}')
		    {
		      /* Alternative not valid.  */
		      strcpy (obuf, "(bad)");
		      obufp = obuf + 5;
		      return 1;
		    }
		  else if (*p == '\0')
		    abort ();
		}
	      alt--;
	    }
	  /* Fall through.  */
	case 'I':
	  alt = 1;
	  continue;
	case '|':
	  while (*++p != '}')
	    {
	      if (*p == '\0')
		abort ();
	    }
	  break;
	case '}':
	  break;
	case 'A':
	  if (intel_syntax)
	    break;
	  if (mod != 3 || (sizeflag & SUFFIX_ALWAYS))
	    *obufp++ = 'b';
	  break;
	case 'B':
	  if (intel_syntax)
	    break;
	  if (sizeflag & SUFFIX_ALWAYS)
	    *obufp++ = 'b';
	  break;
	case 'C':
	  if (intel_syntax && !alt)
	    break;
	  if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
	    {
	      if (sizeflag & DFLAG)
		*obufp++ = intel_syntax ? 'd' : 'l';
	      else
		*obufp++ = intel_syntax ? 'w' : 's';
	      used_prefixes |= (prefixes & PREFIX_DATA);
	    }
	  break;
	case 'E':		/* For jcxz/jecxz */
	  if (address_mode == mode_64bit)
	    {
	      if (sizeflag & AFLAG)
		*obufp++ = 'r';
	      else
		*obufp++ = 'e';
	    }
	  else
	    if (sizeflag & AFLAG)
	      *obufp++ = 'e';
	  used_prefixes |= (prefixes & PREFIX_ADDR);
	  break;
	case 'F':
	  if (intel_syntax)
	    break;
	  if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
	    {
	      if (sizeflag & AFLAG)
		*obufp++ = address_mode == mode_64bit ? 'q' : 'l';
	      else
		*obufp++ = address_mode == mode_64bit ? 'l' : 'w';
	      used_prefixes |= (prefixes & PREFIX_ADDR);
	    }
	  break;
	case 'H':
	  if (intel_syntax)
	    break;
	  if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
	      || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
	    {
	      used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
	      *obufp++ = ',';
	      *obufp++ = 'p';
	      if (prefixes & PREFIX_DS)
		*obufp++ = 't';
	      else
		*obufp++ = 'n';
	    }
	  break;
	case 'J':
	  if (intel_syntax)
	    break;
	  *obufp++ = 'l';
	  break;
	case 'Z':
	  if (intel_syntax)
	    break;
	  if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
	    {
	      *obufp++ = 'q';
	      break;
	    }
	  /* Fall through.  */
	case 'L':
	  if (intel_syntax)
	    break;
	  if (sizeflag & SUFFIX_ALWAYS)
	    *obufp++ = 'l';
	  break;
	case 'N':
	  if ((prefixes & PREFIX_FWAIT) == 0)
	    *obufp++ = 'n';
	  else
	    used_prefixes |= PREFIX_FWAIT;
	  break;
	case 'O':
	  USED_REX (REX_MODE64);
	  if (rex & REX_MODE64)
	    *obufp++ = 'o';
	  else
	    *obufp++ = 'd';
	  break;
	case 'T':
	  if (intel_syntax)
	    break;
	  if (address_mode == mode_64bit && (sizeflag & DFLAG))
	    {
	      *obufp++ = 'q';
	      break;
	    }
	  /* Fall through.  */
	case 'P':
	  if (intel_syntax)
	    break;
	  if ((prefixes & PREFIX_DATA)
	      || (rex & REX_MODE64)
	      || (sizeflag & SUFFIX_ALWAYS))
	    {
	      USED_REX (REX_MODE64);
	      if (rex & REX_MODE64)
		*obufp++ = 'q';
	      else
		{
		   if (sizeflag & DFLAG)
		      *obufp++ = 'l';
		   else
		     *obufp++ = 'w';
		}
	      used_prefixes |= (prefixes & PREFIX_DATA);
	    }
	  break;
	case 'U':
	  if (intel_syntax)
	    break;
	  if (address_mode == mode_64bit && (sizeflag & DFLAG))
	    {
	      if (mod != 3 || (sizeflag & SUFFIX_ALWAYS))
		*obufp++ = 'q';
	      break;
	    }
	  /* Fall through.  */
	case 'Q':
	  if (intel_syntax && !alt)
	    break;
	  USED_REX (REX_MODE64);
	  if (mod != 3 || (sizeflag & SUFFIX_ALWAYS))
	    {
	      if (rex & REX_MODE64)
		*obufp++ = 'q';
	      else
		{
		  if (sizeflag & DFLAG)
		    *obufp++ = intel_syntax ? 'd' : 'l';
		  else
		    *obufp++ = 'w';
		}
	      used_prefixes |= (prefixes & PREFIX_DATA);
	    }
	  break;
	case 'R':
	  USED_REX (REX_MODE64);
	  if (intel_syntax)
	    {
	      if (rex & REX_MODE64)
		{
		  *obufp++ = 'q';
		  *obufp++ = 't';
		}
	      else if (sizeflag & DFLAG)
		{
		  *obufp++ = 'd';
		  *obufp++ = 'q';
		}
	      else
		{
		  *obufp++ = 'w';
		  *obufp++ = 'd';
		}
	    }
	  else
	    {
	      if (rex & REX_MODE64)
		*obufp++ = 'q';
	      else if (sizeflag & DFLAG)
		*obufp++ = 'l';
	      else
		*obufp++ = 'w';
	    }
	  if (!(rex & REX_MODE64))
	    used_prefixes |= (prefixes & PREFIX_DATA);
	  break;
	case 'V':
	  if (intel_syntax)
	    break;
	  if (address_mode == mode_64bit && (sizeflag & DFLAG))
	    {
	      if (sizeflag & SUFFIX_ALWAYS)
		*obufp++ = 'q';
	      break;
	    }
	  /* Fall through.  */
	case 'S':
	  if (intel_syntax)
	    break;
	  if (sizeflag & SUFFIX_ALWAYS)
	    {
	      if (rex & REX_MODE64)
		*obufp++ = 'q';
	      else
		{
		  if (sizeflag & DFLAG)
		    *obufp++ = 'l';
		  else
		    *obufp++ = 'w';
		  used_prefixes |= (prefixes & PREFIX_DATA);
		}
	    }
	  break;
	case 'X':
	  if (prefixes & PREFIX_DATA)
	    *obufp++ = 'd';
	  else
	    *obufp++ = 's';
	  used_prefixes |= (prefixes & PREFIX_DATA);
	  break;
	case 'Y':
	  if (intel_syntax)
	    break;
	  if (rex & REX_MODE64)
	    {
	      USED_REX (REX_MODE64);
	      *obufp++ = 'q';
	    }
	  break;
	  /* implicit operand size 'l' for i386 or 'q' for x86-64 */
	case 'W':
	  /* operand size flag for cwtl, cbtw */
	  USED_REX (0);
	  if (rex)
	    *obufp++ = 'l';
	  else if (sizeflag & DFLAG)
	    *obufp++ = 'w';
	  else
	    *obufp++ = 'b';
	  if (intel_syntax)
	    {
	      if (rex)
		{
		  *obufp++ = 'q';
		  *obufp++ = 'e';
		}
	      if (sizeflag & DFLAG)
		{
		  *obufp++ = 'd';
		  *obufp++ = 'e';
		}
	      else
		{
		  *obufp++ = 'w';
		}
	    }
	  if (!rex)
	    used_prefixes |= (prefixes & PREFIX_DATA);
	  break;
	}
      alt = 0;
    }
  *obufp = 0;
  return 0;
}

static void
oappend (const char *s)
{
  strcpy (obufp, s);
  obufp += strlen (s);
}

static void
append_seg (void)
{
  if (prefixes & PREFIX_CS)
    {
      used_prefixes |= PREFIX_CS;
      oappend ("%cs:" + intel_syntax);
    }
  if (prefixes & PREFIX_DS)
    {
      used_prefixes |= PREFIX_DS;
      oappend ("%ds:" + intel_syntax);
    }
  if (prefixes & PREFIX_SS)
    {
      used_prefixes |= PREFIX_SS;
      oappend ("%ss:" + intel_syntax);
    }
  if (prefixes & PREFIX_ES)
    {
      used_prefixes |= PREFIX_ES;
      oappend ("%es:" + intel_syntax);
    }
  if (prefixes & PREFIX_FS)
    {
      used_prefixes |= PREFIX_FS;
      oappend ("%fs:" + intel_syntax);
    }
  if (prefixes & PREFIX_GS)
    {
      used_prefixes |= PREFIX_GS;
      oappend ("%gs:" + intel_syntax);
    }
}

static void
OP_indirE (int bytemode, int sizeflag)
{
  if (!intel_syntax)
    oappend ("*");
  OP_E (bytemode, sizeflag);
}

static void
print_operand_value (char *buf, int hex, bfd_vma disp)
{
  if (address_mode == mode_64bit)
    {
      if (hex)
	{
	  char tmp[30];
	  int i;
	  buf[0] = '0';
	  buf[1] = 'x';
	  sprintf_vma (tmp, disp);
	  for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
	  strcpy (buf + 2, tmp + i);
	}
      else
	{
	  bfd_signed_vma v = disp;
	  char tmp[30];
	  int i;
	  if (v < 0)
	    {
	      *(buf++) = '-';
	      v = -disp;
	      /* Check for possible overflow on 0x8000000000000000.  */
	      if (v < 0)
		{
		  strcpy (buf, "9223372036854775808");
		  return;
		}
	    }
	  if (!v)
	    {
	      strcpy (buf, "0");
	      return;
	    }

	  i = 0;
	  tmp[29] = 0;
	  while (v)
	    {
	      tmp[28 - i] = (v % 10) + '0';
	      v /= 10;
	      i++;
	    }
	  strcpy (buf, tmp + 29 - i);
	}
    }
  else
    {
      if (hex)
	sprintf (buf, "0x%x", (unsigned int) disp);
      else
	sprintf (buf, "%d", (int) disp);
    }
}

static void
intel_operand_size (int bytemode, int sizeflag)
{
  switch (bytemode)
    {
    case b_mode:
      oappend ("BYTE PTR ");
      break;
    case w_mode:
    case dqw_mode:
      oappend ("WORD PTR ");
      break;
    case stack_v_mode:
      if (address_mode == mode_64bit && (sizeflag & DFLAG))
	{
	  oappend ("QWORD PTR ");
	  used_prefixes |= (prefixes & PREFIX_DATA);
	  break;
	}
      /* FALLTHRU */
    case v_mode:
    case dq_mode:
      USED_REX (REX_MODE64);
      if (rex & REX_MODE64)
	oappend ("QWORD PTR ");
      else if ((sizeflag & DFLAG) || bytemode == dq_mode)
	oappend ("DWORD PTR ");
      else
	oappend ("WORD PTR ");
      used_prefixes |= (prefixes & PREFIX_DATA);
      break;
    case d_mode:
      oappend ("DWORD PTR ");
      break;
    case q_mode:
      oappend ("QWORD PTR ");
      break;
    case m_mode:
      if (address_mode == mode_64bit)
	oappend ("QWORD PTR ");
      else
	oappend ("DWORD PTR ");
      break;
    case f_mode:
      if (sizeflag & DFLAG)
	oappend ("FWORD PTR ");
      else
	oappend ("DWORD PTR ");
      used_prefixes |= (prefixes & PREFIX_DATA);
      break;
    case t_mode:
      oappend ("TBYTE PTR ");
      break;
    case x_mode:
      oappend ("XMMWORD PTR ");
      break;
    default:
      break;
    }
}

static void
OP_E (int bytemode, int sizeflag)
{
  bfd_vma disp;
  int add = 0;
  int riprel = 0;
  USED_REX (REX_EXTZ);
  if (rex & REX_EXTZ)
    add += 8;

  /* Skip mod/rm byte.  */
  MODRM_CHECK;
  codep++;

  if (mod == 3)
    {
      switch (bytemode)
	{
	case b_mode:
	  USED_REX (0);
	  if (rex)
	    oappend (names8rex[rm + add]);
	  else
	    oappend (names8[rm + add]);
	  break;
	case w_mode:
	  oappend (names16[rm + add]);
	  break;
	case d_mode:
	  oappend (names32[rm + add]);
	  break;
	case q_mode:
	  oappend (names64[rm + add]);
	  break;
	case m_mode:
	  if (address_mode == mode_64bit)
	    oappend (names64[rm + add]);
	  else
	    oappend (names32[rm + add]);
	  break;
	case stack_v_mode:
	  if (address_mode == mode_64bit && (sizeflag & DFLAG))
	    {
	      oappend (names64[rm + add]);
	      used_prefixes |= (prefixes & PREFIX_DATA);
	      break;
	    }
	  bytemode = v_mode;
	  /* FALLTHRU */
	case v_mode:
	case dq_mode:
	case dqw_mode:
	  USED_REX (REX_MODE64);
	  if (rex & REX_MODE64)
	    oappend (names64[rm + add]);
	  else if ((sizeflag & DFLAG) || bytemode != v_mode)
	    oappend (names32[rm + add]);
	  else
	    oappend (names16[rm + add]);
	  used_prefixes |= (prefixes & PREFIX_DATA);
	  break;
	case 0:
	  break;
	default:
	  oappend (INTERNAL_DISASSEMBLER_ERROR);
	  break;
	}
      return;
    }

  disp = 0;
  if (intel_syntax)
    intel_operand_size (bytemode, sizeflag);
  append_seg ();

  if ((sizeflag & AFLAG) || address_mode == mode_64bit) /* 32 bit address mode */
    {
      int havesib;
      int havebase;
      int base;
      int index = 0;
      int scale = 0;

      havesib = 0;
      havebase = 1;
      base = rm;

      if (base == 4)
	{
	  havesib = 1;
	  FETCH_DATA (the_info, codep + 1);
	  index = (*codep >> 3) & 7;
	  if (address_mode == mode_64bit || index != 0x4)
	    /* When INDEX == 0x4 in 32 bit mode, SCALE is ignored.  */
	    scale = (*codep >> 6) & 3;
	  base = *codep & 7;
	  USED_REX (REX_EXTY);
	  if (rex & REX_EXTY)
	    index += 8;
	  codep++;
	}
      base += add;

      switch (mod)
	{
	case 0:
	  if ((base & 7) == 5)
	    {
	      havebase = 0;
	      if (address_mode == mode_64bit && !havesib)
		riprel = 1;
	      disp = get32s ();
	    }
	  break;
	case 1:
	  FETCH_DATA (the_info, codep + 1);
	  disp = *codep++;
	  if ((disp & 0x80) != 0)
	    disp -= 0x100;
	  break;
	case 2:
	  disp = get32s ();
	  break;
	}

      if (!intel_syntax)
	if (mod != 0 || (base & 7) == 5)
	  {
	    print_operand_value (scratchbuf, !riprel, disp);
	    oappend (scratchbuf);
	    if (riprel)
	      {
		set_op (disp, 1);
		oappend ("(%rip)");
	      }
	  }

      if (havebase || (havesib && (index != 4 || scale != 0)))
	{
	  *obufp++ = open_char;
	  if (intel_syntax && riprel)
	    oappend ("rip + ");
	  *obufp = '\0';
	  if (havebase)
	    oappend (address_mode == mode_64bit && (sizeflag & AFLAG)
		     ? names64[base] : names32[base]);
	  if (havesib)
	    {
	      if (index != 4)
		{
		  if (!intel_syntax || havebase)
		    {
		      *obufp++ = separator_char;
		      *obufp = '\0';
		    }
		  oappend (address_mode == mode_64bit && (sizeflag & AFLAG)
			   ? names64[index] : names32[index]);
		}
	      if (scale != 0 || (!intel_syntax && index != 4))
		{
		  *obufp++ = scale_char;
		  *obufp = '\0';
		  sprintf (scratchbuf, "%d", 1 << scale);
		  oappend (scratchbuf);
		}
	    }
	  if (intel_syntax && disp)
	    {
	      if ((bfd_signed_vma) disp > 0)
		{
		  *obufp++ = '+';
		  *obufp = '\0';
		}
	      else if (mod != 1)
		{
		  *obufp++ = '-';
		  *obufp = '\0';
		  disp = - (bfd_signed_vma) disp;
		}

	      print_operand_value (scratchbuf, mod != 1, disp);
	      oappend (scratchbuf);
	    }

	  *obufp++ = close_char;
	  *obufp = '\0';
	}
      else if (intel_syntax)
	{
	  if (mod != 0 || (base & 7) == 5)
	    {
	      if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
			      | PREFIX_ES | PREFIX_FS | PREFIX_GS))
		;
	      else
		{
		  oappend (names_seg[ds_reg - es_reg]);
		  oappend (":");
		}
	      print_operand_value (scratchbuf, 1, disp);
	      oappend (scratchbuf);
	    }
	}
    }
  else
    { /* 16 bit address mode */
      switch (mod)
	{
	case 0:
	  if (rm == 6)
	    {
	      disp = get16 ();
	      if ((disp & 0x8000) != 0)
		disp -= 0x10000;
	    }
	  break;
	case 1:
	  FETCH_DATA (the_info, codep + 1);
	  disp = *codep++;
	  if ((disp & 0x80) != 0)
	    disp -= 0x100;
	  break;
	case 2:
	  disp = get16 ();
	  if ((disp & 0x8000) != 0)
	    disp -= 0x10000;
	  break;
	}

      if (!intel_syntax)
	if (mod != 0 || rm == 6)
	  {
	    print_operand_value (scratchbuf, 0, disp);
	    oappend (scratchbuf);
	  }

      if (mod != 0 || rm != 6)
	{
	  *obufp++ = open_char;
	  *obufp = '\0';
	  oappend (index16[rm]);
	  if (intel_syntax && disp)
	    {
	      if ((bfd_signed_vma) disp > 0)
		{
		  *obufp++ = '+';
		  *obufp = '\0';
		}
	      else if (mod != 1)
		{
		  *obufp++ = '-';
		  *obufp = '\0';
		  disp = - (bfd_signed_vma) disp;
		}

	      print_operand_value (scratchbuf, mod != 1, disp);
	      oappend (scratchbuf);
	    }

	  *obufp++ = close_char;
	  *obufp = '\0';
	}
      else if (intel_syntax)
	{
	  if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
			  | PREFIX_ES | PREFIX_FS | PREFIX_GS))
	    ;
	  else
	    {
	      oappend (names_seg[ds_reg - es_reg]);
	      oappend (":");
	    }
	  print_operand_value (scratchbuf, 1, disp & 0xffff);
	  oappend (scratchbuf);
	}
    }
}

static void
OP_G (int bytemode, int sizeflag)
{
  int add = 0;
  USED_REX (REX_EXTX);
  if (rex & REX_EXTX)
    add += 8;
  switch (bytemode)
    {
    case b_mode:
      USED_REX (0);
      if (rex)
	oappend (names8rex[reg + add]);
      else
	oappend (names8[reg + add]);
      break;
    case w_mode:
      oappend (names16[reg + add]);
      break;
    case d_mode:
      oappend (names32[reg + add]);
      break;
    case q_mode:
      oappend (names64[reg + add]);
      break;
    case v_mode:
    case dq_mode:
    case dqw_mode:
      USED_REX (REX_MODE64);
      if (rex & REX_MODE64)
	oappend (names64[reg + add]);
      else if ((sizeflag & DFLAG) || bytemode != v_mode)
	oappend (names32[reg + add]);
      else
	oappend (names16[reg + add]);
      used_prefixes |= (prefixes & PREFIX_DATA);
      break;
    case m_mode:
      if (address_mode == mode_64bit)
	oappend (names64[reg + add]);
      else
	oappend (names32[reg + add]);
      break;
    default:
      oappend (INTERNAL_DISASSEMBLER_ERROR);
      break;
    }
}

static bfd_vma
get64 (void)
{
  bfd_vma x;
#ifdef BFD64
  unsigned int a;
  unsigned int b;

  FETCH_DATA (the_info, codep + 8);
  a = *codep++ & 0xff;
  a |= (*codep++ & 0xff) << 8;
  a |= (*codep++ & 0xff) << 16;
  a |= (*codep++ & 0xff) << 24;
  b = *codep++ & 0xff;
  b |= (*codep++ & 0xff) << 8;
  b |= (*codep++ & 0xff) << 16;
  b |= (*codep++ & 0xff) << 24;
  x = a + ((bfd_vma) b << 32);
#else
  abort ();
  x = 0;
#endif
  return x;
}

static bfd_signed_vma
get32 (void)
{
  bfd_signed_vma x = 0;

  FETCH_DATA (the_info, codep + 4);
  x = *codep++ & (bfd_signed_vma) 0xff;
  x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
  x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
  x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
  return x;
}

static bfd_signed_vma
get32s (void)
{
  bfd_signed_vma x = 0;

  FETCH_DATA (the_info, codep + 4);
  x = *codep++ & (bfd_signed_vma) 0xff;
  x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
  x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
  x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;

  x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);

  return x;
}

static int
get16 (void)
{
  int x = 0;

  FETCH_DATA (the_info, codep + 2);
  x = *codep++ & 0xff;
  x |= (*codep++ & 0xff) << 8;
  return x;
}

static void
set_op (bfd_vma op, int riprel)
{
  op_index[op_ad] = op_ad;
  if (address_mode == mode_64bit)
    {
      op_address[op_ad] = op;
      op_riprel[op_ad] = riprel;
    }
  else
    {
      /* Mask to get a 32-bit address.  */
      op_address[op_ad] = op & 0xffffffff;
      op_riprel[op_ad] = riprel & 0xffffffff;
    }
}

static void
OP_REG (int code, int sizeflag)
{
  const char *s;
  int add = 0;
  USED_REX (REX_EXTZ);
  if (rex & REX_EXTZ)
    add = 8;

  switch (code)
    {
    case indir_dx_reg:
      if (intel_syntax)
	s = "[dx]";
      else
	s = "(%dx)";
      break;
    case ax_reg: case cx_reg: case dx_reg: case bx_reg:
    case sp_reg: case bp_reg: case si_reg: case di_reg:
      s = names16[code - ax_reg + add];
      break;
    case es_reg: case ss_reg: case cs_reg:
    case ds_reg: case fs_reg: case gs_reg:
      s = names_seg[code - es_reg + add];
      break;
    case al_reg: case ah_reg: case cl_reg: case ch_reg:
    case dl_reg: case dh_reg: case bl_reg: case bh_reg:
      USED_REX (0);
      if (rex)
	s = names8rex[code - al_reg + add];
      else
	s = names8[code - al_reg];
      break;
    case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
    case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
      if (address_mode == mode_64bit && (sizeflag & DFLAG))
	{
	  s = names64[code - rAX_reg + add];
	  break;
	}
      code += eAX_reg - rAX_reg;
      /* Fall through.  */
    case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
    case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
      USED_REX (REX_MODE64);
      if (rex & REX_MODE64)
	s = names64[code - eAX_reg + add];
      else if (sizeflag & DFLAG)
	s = names32[code - eAX_reg + add];
      else
	s = names16[code - eAX_reg + add];
      used_prefixes |= (prefixes & PREFIX_DATA);
      break;
    default:
      s = INTERNAL_DISASSEMBLER_ERROR;
      break;
    }
  oappend (s);
}

static void
OP_IMREG (int code, int sizeflag)
{
  const char *s;

  switch (code)
    {
    case indir_dx_reg:
      if (intel_syntax)
	s = "[dx]";
      else
	s = "(%dx)";
      break;
    case ax_reg: case cx_reg: case dx_reg: case bx_reg:
    case sp_reg: case bp_reg: case si_reg: case di_reg:
      s = names16[code - ax_reg];
      break;
    case es_reg: case ss_reg: case cs_reg:
    case ds_reg: case fs_reg: case gs_reg:
      s = names_seg[code - es_reg];
      break;
    case al_reg: case ah_reg: case cl_reg: case ch_reg:
    case dl_reg: case dh_reg: case bl_reg: case bh_reg:
      USED_REX (0);
      if (rex)
	s = names8rex[code - al_reg];
      else
	s = names8[code - al_reg];
      break;
    case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
    case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
      USED_REX (REX_MODE64);
      if (rex & REX_MODE64)
	s = names64[code - eAX_reg];
      else if (sizeflag & DFLAG)
	s = names32[code - eAX_reg];
      else
	s = names16[code - eAX_reg];
      used_prefixes |= (prefixes & PREFIX_DATA);
      break;
    default:
      s = INTERNAL_DISASSEMBLER_ERROR;
      break;
    }
  oappend (s);
}

static void
OP_I (int bytemode, int sizeflag)
{
  bfd_signed_vma op;
  bfd_signed_vma mask = -1;

  switch (bytemode)
    {
    case b_mode:
      FETCH_DATA (the_info, codep + 1);
      op = *codep++;
      mask = 0xff;
      break;
    case q_mode:
      if (address_mode == mode_64bit)
	{
	  op = get32s ();
	  break;
	}
      /* Fall through.  */
    case v_mode:
      USED_REX (REX_MODE64);
      if (rex & REX_MODE64)
	op = get32s ();
      else if (sizeflag & DFLAG)
	{
	  op = get32 ();
	  mask = 0xffffffff;
	}
      else
	{
	  op = get16 ();
	  mask = 0xfffff;
	}
      used_prefixes |= (prefixes & PREFIX_DATA);
      break;
    case w_mode:
      mask = 0xfffff;
      op = get16 ();
      break;
    case const_1_mode:
      if (intel_syntax)
        oappend ("1");
      return;
    default:
      oappend (INTERNAL_DISASSEMBLER_ERROR);
      return;
    }

  op &= mask;
  scratchbuf[0] = '$';
  print_operand_value (scratchbuf + 1, 1, op);
  oappend (scratchbuf + intel_syntax);
  scratchbuf[0] = '\0';
}

static void
OP_I64 (int bytemode, int sizeflag)
{
  bfd_signed_vma op;
  bfd_signed_vma mask = -1;

  if (address_mode != mode_64bit)
    {
      OP_I (bytemode, sizeflag);
      return;
    }

  switch (bytemode)
    {
    case b_mode:
      FETCH_DATA (the_info, codep + 1);
      op = *codep++;
      mask = 0xff;
      break;
    case v_mode:
      USED_REX (REX_MODE64);
      if (rex & REX_MODE64)
	op = get64 ();
      else if (sizeflag & DFLAG)
	{
	  op = get32 ();
	  mask = 0xffffffff;
	}
      else
	{
	  op = get16 ();
	  mask = 0xfffff;
	}
      used_prefixes |= (prefixes & PREFIX_DATA);
      break;
    case w_mode:
      mask = 0xfffff;
      op = get16 ();
      break;
    default:
      oappend (INTERNAL_DISASSEMBLER_ERROR);
      return;
    }

  op &= mask;
  scratchbuf[0] = '$';
  print_operand_value (scratchbuf + 1, 1, op);
  oappend (scratchbuf + intel_syntax);
  scratchbuf[0] = '\0';
}

static void
OP_sI (int bytemode, int sizeflag)
{
  bfd_signed_vma op;
  bfd_signed_vma mask = -1;

  switch (bytemode)
    {
    case b_mode:
      FETCH_DATA (the_info, codep + 1);
      op = *codep++;
      if ((op & 0x80) != 0)
	op -= 0x100;
      mask = 0xffffffff;
      break;
    case v_mode:
      USED_REX (REX_MODE64);
      if (rex & REX_MODE64)
	op = get32s ();
      else if (sizeflag & DFLAG)
	{
	  op = get32s ();
	  mask = 0xffffffff;
	}
      else
	{
	  mask = 0xffffffff;
	  op = get16 ();
	  if ((op & 0x8000) != 0)
	    op -= 0x10000;
	}
      used_prefixes |= (prefixes & PREFIX_DATA);
      break;
    case w_mode:
      op = get16 ();
      mask = 0xffffffff;
      if ((op & 0x8000) != 0)
	op -= 0x10000;
      break;
    default:
      oappend (INTERNAL_DISASSEMBLER_ERROR);
      return;
    }

  scratchbuf[0] = '$';
  print_operand_value (scratchbuf + 1, 1, op);
  oappend (scratchbuf + intel_syntax);
}

static void
OP_J (int bytemode, int sizeflag)
{
  bfd_vma disp;
  bfd_vma mask = -1;

  switch (bytemode)
    {
    case b_mode:
      FETCH_DATA (the_info, codep + 1);
      disp = *codep++;
      if ((disp & 0x80) != 0)
	disp -= 0x100;
      break;
    case v_mode:
      if ((sizeflag & DFLAG) || (rex & REX_MODE64))
	disp = get32s ();
      else
	{
	  disp = get16 ();
	  /* For some reason, a data16 prefix on a jump instruction
	     means that the pc is masked to 16 bits after the
	     displacement is added!  */
	  mask = 0xffff;
	}
      break;
    default:
      oappend (INTERNAL_DISASSEMBLER_ERROR);
      return;
    }
  disp = (start_pc + codep - start_codep + disp) & mask;
  set_op (disp, 0);
  print_operand_value (scratchbuf, 1, disp);
  oappend (scratchbuf);
}

static void
OP_SEG (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
{
  oappend (names_seg[reg]);
}

static void
OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
{
  int seg, offset;

  if (sizeflag & DFLAG)
    {
      offset = get32 ();
      seg = get16 ();
    }
  else
    {
      offset = get16 ();
      seg = get16 ();
    }
  used_prefixes |= (prefixes & PREFIX_DATA);
  if (intel_syntax)
    sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
  else
    sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
  oappend (scratchbuf);
}

static void
OP_OFF (int bytemode, int sizeflag)
{
  bfd_vma off;

  if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
    intel_operand_size (bytemode, sizeflag);
  append_seg ();

  if ((sizeflag & AFLAG) || address_mode == mode_64bit)
    off = get32 ();
  else
    off = get16 ();

  if (intel_syntax)
    {
      if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
			| PREFIX_ES | PREFIX_FS | PREFIX_GS)))
	{
	  oappend (names_seg[ds_reg - es_reg]);
	  oappend (":");
	}
    }
  print_operand_value (scratchbuf, 1, off);
  oappend (scratchbuf);
}

static void
OP_OFF64 (int bytemode, int sizeflag)
{
  bfd_vma off;

  if (address_mode != mode_64bit)
    {
      OP_OFF (bytemode, sizeflag);
      return;
    }

  if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
    intel_operand_size (bytemode, sizeflag);
  append_seg ();

  off = get64 ();

  if (intel_syntax)
    {
      if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
			| PREFIX_ES | PREFIX_FS | PREFIX_GS)))
	{
	  oappend (names_seg[ds_reg - es_reg]);
	  oappend (":");
	}
    }
  print_operand_value (scratchbuf, 1, off);
  oappend (scratchbuf);
}

static void
ptr_reg (int code, int sizeflag)
{
  const char *s;

  *obufp++ = open_char;
  used_prefixes |= (prefixes & PREFIX_ADDR);
  if (address_mode == mode_64bit)
    {
      if (!(sizeflag & AFLAG))
	s = names32[code - eAX_reg];
      else
	s = names64[code - eAX_reg];
    }
  else if (sizeflag & AFLAG)
    s = names32[code - eAX_reg];
  else
    s = names16[code - eAX_reg];
  oappend (s);
  *obufp++ = close_char;
  *obufp = 0;
}

static void
OP_ESreg (int code, int sizeflag)
{
  if (intel_syntax)
    intel_operand_size (codep[-1] & 1 ? v_mode : b_mode, sizeflag);
  oappend ("%es:" + intel_syntax);
  ptr_reg (code, sizeflag);
}

static void
OP_DSreg (int code, int sizeflag)
{
  if (intel_syntax)
    intel_operand_size (codep[-1] != 0xd7 && (codep[-1] & 1)
			? v_mode
			: b_mode,
			sizeflag);
  if ((prefixes
       & (PREFIX_CS
	  | PREFIX_DS
	  | PREFIX_SS
	  | PREFIX_ES
	  | PREFIX_FS
	  | PREFIX_GS)) == 0)
    prefixes |= PREFIX_DS;
  append_seg ();
  ptr_reg (code, sizeflag);
}

static void
OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
{
  int add = 0;
  if (rex & REX_EXTX)
    {
      USED_REX (REX_EXTX);
      add = 8;
    }
  else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
    {
      used_prefixes |= PREFIX_LOCK;
      add = 8;
    }
  sprintf (scratchbuf, "%%cr%d", reg + add);
  oappend (scratchbuf + intel_syntax);
}

static void
OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
{
  int add = 0;
  USED_REX (REX_EXTX);
  if (rex & REX_EXTX)
    add = 8;
  if (intel_syntax)
    sprintf (scratchbuf, "db%d", reg + add);
  else
    sprintf (scratchbuf, "%%db%d", reg + add);
  oappend (scratchbuf);
}

static void
OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
{
  sprintf (scratchbuf, "%%tr%d", reg);
  oappend (scratchbuf + intel_syntax);
}

static void
OP_Rd (int bytemode, int sizeflag)
{
  if (mod == 3)
    OP_E (bytemode, sizeflag);
  else
    BadOp ();
}

static void
OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
{
  used_prefixes |= (prefixes & PREFIX_DATA);
  if (prefixes & PREFIX_DATA)
    {
      int add = 0;
      USED_REX (REX_EXTX);
      if (rex & REX_EXTX)
	add = 8;
      sprintf (scratchbuf, "%%xmm%d", reg + add);
    }
  else
    sprintf (scratchbuf, "%%mm%d", reg);
  oappend (scratchbuf + intel_syntax);
}

static void
OP_XMM (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
{
  int add = 0;
  USED_REX (REX_EXTX);
  if (rex & REX_EXTX)
    add = 8;
  sprintf (scratchbuf, "%%xmm%d", reg + add);
  oappend (scratchbuf + intel_syntax);
}

static void
OP_EM (int bytemode, int sizeflag)
{
  if (mod != 3)
    {
      if (intel_syntax && bytemode == v_mode)
	{
	  bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
	  used_prefixes |= (prefixes & PREFIX_DATA);
 	}
      OP_E (bytemode, sizeflag);
      return;
    }

  /* Skip mod/rm byte.  */
  MODRM_CHECK;
  codep++;
  used_prefixes |= (prefixes & PREFIX_DATA);
  if (prefixes & PREFIX_DATA)
    {
      int add = 0;

      USED_REX (REX_EXTZ);
      if (rex & REX_EXTZ)
	add = 8;
      sprintf (scratchbuf, "%%xmm%d", rm + add);
    }
  else
    sprintf (scratchbuf, "%%mm%d", rm);
  oappend (scratchbuf + intel_syntax);
}

static void
OP_EX (int bytemode, int sizeflag)
{
  int add = 0;
  if (mod != 3)
    {
      if (intel_syntax && bytemode == v_mode)
	{
	  switch (prefixes & (PREFIX_DATA|PREFIX_REPZ|PREFIX_REPNZ))
	    {
	    case 0:            bytemode = x_mode; break;
	    case PREFIX_REPZ:  bytemode = d_mode; used_prefixes |= PREFIX_REPZ;  break;
	    case PREFIX_DATA:  bytemode = x_mode; used_prefixes |= PREFIX_DATA;  break;
	    case PREFIX_REPNZ: bytemode = q_mode; used_prefixes |= PREFIX_REPNZ; break;
	    default:           bytemode = 0; break;
	    }
	}
      OP_E (bytemode, sizeflag);
      return;
    }
  USED_REX (REX_EXTZ);
  if (rex & REX_EXTZ)
    add = 8;

  /* Skip mod/rm byte.  */
  MODRM_CHECK;
  codep++;
  sprintf (scratchbuf, "%%xmm%d", rm + add);
  oappend (scratchbuf + intel_syntax);
}

static void
OP_MS (int bytemode, int sizeflag)
{
  if (mod == 3)
    OP_EM (bytemode, sizeflag);
  else
    BadOp ();
}

static void
OP_XS (int bytemode, int sizeflag)
{
  if (mod == 3)
    OP_EX (bytemode, sizeflag);
  else
    BadOp ();
}

static void
OP_M (int bytemode, int sizeflag)
{
  if (mod == 3)
    BadOp ();	/* bad lea,lds,les,lfs,lgs,lss modrm */
  else
    OP_E (bytemode, sizeflag);
}

static void
OP_0f07 (int bytemode, int sizeflag)
{
  if (mod != 3 || rm != 0)
    BadOp ();
  else
    OP_E (bytemode, sizeflag);
}

static void
OP_0fae (int bytemode, int sizeflag)
{
  if (mod == 3)
    {
      if (reg == 7)
	strcpy (obuf + strlen (obuf) - sizeof ("clflush") + 1, "sfence");

      if (reg < 5 || rm != 0)
	{
	  BadOp ();	/* bad sfence, mfence, or lfence */
	  return;
	}
    }
  else if (reg != 7)
    {
      BadOp ();		/* bad clflush */
      return;
    }

  OP_E (bytemode, sizeflag);
}

/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
   32bit mode and "xchg %rax,%rax" in 64bit mode.  NOP with REPZ prefix
   is called PAUSE.  We display "xchg %ax,%ax" instead of "data16 nop".
 */

static void
NOP_Fixup1 (int bytemode, int sizeflag)
{
  if (prefixes == PREFIX_REPZ)
    strcpy (obuf, "pause");
  else if (prefixes == PREFIX_DATA
	   || ((rex & REX_MODE64) && rex != 0x48))
    OP_REG (bytemode, sizeflag);
  else
    strcpy (obuf, "nop");
}

static void
NOP_Fixup2 (int bytemode, int sizeflag)
{
  if (prefixes == PREFIX_DATA
      || ((rex & REX_MODE64) && rex != 0x48))
    OP_IMREG (bytemode, sizeflag);
}

static const char *const Suffix3DNow[] = {
/* 00 */	NULL,		NULL,		NULL,		NULL,
/* 04 */	NULL,		NULL,		NULL,		NULL,
/* 08 */	NULL,		NULL,		NULL,		NULL,
/* 0C */	"pi2fw",	"pi2fd",	NULL,		NULL,
/* 10 */	NULL,		NULL,		NULL,		NULL,
/* 14 */	NULL,		NULL,		NULL,		NULL,
/* 18 */	NULL,		NULL,		NULL,		NULL,
/* 1C */	"pf2iw",	"pf2id",	NULL,		NULL,
/* 20 */	NULL,		NULL,		NULL,		NULL,
/* 24 */	NULL,		NULL,		NULL,		NULL,
/* 28 */	NULL,		NULL,		NULL,		NULL,
/* 2C */	NULL,		NULL,		NULL,		NULL,
/* 30 */	NULL,		NULL,		NULL,		NULL,
/* 34 */	NULL,		NULL,		NULL,		NULL,
/* 38 */	NULL,		NULL,		NULL,		NULL,
/* 3C */	NULL,		NULL,		NULL,		NULL,
/* 40 */	NULL,		NULL,		NULL,		NULL,
/* 44 */	NULL,		NULL,		NULL,		NULL,
/* 48 */	NULL,		NULL,		NULL,		NULL,
/* 4C */	NULL,		NULL,		NULL,		NULL,
/* 50 */	NULL,		NULL,		NULL,		NULL,
/* 54 */	NULL,		NULL,		NULL,		NULL,
/* 58 */	NULL,		NULL,		NULL,		NULL,
/* 5C */	NULL,		NULL,		NULL,		NULL,
/* 60 */	NULL,		NULL,		NULL,		NULL,
/* 64 */	NULL,		NULL,		NULL,		NULL,
/* 68 */	NULL,		NULL,		NULL,		NULL,
/* 6C */	NULL,		NULL,		NULL,		NULL,
/* 70 */	NULL,		NULL,		NULL,		NULL,
/* 74 */	NULL,		NULL,		NULL,		NULL,
/* 78 */	NULL,		NULL,		NULL,		NULL,
/* 7C */	NULL,		NULL,		NULL,		NULL,
/* 80 */	NULL,		NULL,		NULL,		NULL,
/* 84 */	NULL,		NULL,		NULL,		NULL,
/* 88 */	NULL,		NULL,		"pfnacc",	NULL,
/* 8C */	NULL,		NULL,		"pfpnacc",	NULL,
/* 90 */	"pfcmpge",	NULL,		NULL,		NULL,
/* 94 */	"pfmin",	NULL,		"pfrcp",	"pfrsqrt",
/* 98 */	NULL,		NULL,		"pfsub",	NULL,
/* 9C */	NULL,		NULL,		"pfadd",	NULL,
/* A0 */	"pfcmpgt",	NULL,		NULL,		NULL,
/* A4 */	"pfmax",	NULL,		"pfrcpit1",	"pfrsqit1",
/* A8 */	NULL,		NULL,		"pfsubr",	NULL,
/* AC */	NULL,		NULL,		"pfacc",	NULL,
/* B0 */	"pfcmpeq",	NULL,		NULL,		NULL,
/* B4 */	"pfmul",	NULL,		"pfrcpit2",	"pfmulhrw",
/* B8 */	NULL,		NULL,		NULL,		"pswapd",
/* BC */	NULL,		NULL,		NULL,		"pavgusb",
/* C0 */	NULL,		NULL,		NULL,		NULL,
/* C4 */	NULL,		NULL,		NULL,		NULL,
/* C8 */	NULL,		NULL,		NULL,		NULL,
/* CC */	NULL,		NULL,		NULL,		NULL,
/* D0 */	NULL,		NULL,		NULL,		NULL,
/* D4 */	NULL,		NULL,		NULL,		NULL,
/* D8 */	NULL,		NULL,		NULL,		NULL,
/* DC */	NULL,		NULL,		NULL,		NULL,
/* E0 */	NULL,		NULL,		NULL,		NULL,
/* E4 */	NULL,		NULL,		NULL,		NULL,
/* E8 */	NULL,		NULL,		NULL,		NULL,
/* EC */	NULL,		NULL,		NULL,		NULL,
/* F0 */	NULL,		NULL,		NULL,		NULL,
/* F4 */	NULL,		NULL,		NULL,		NULL,
/* F8 */	NULL,		NULL,		NULL,		NULL,
/* FC */	NULL,		NULL,		NULL,		NULL,
};

static void
OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
{
  const char *mnemonic;

  FETCH_DATA (the_info, codep + 1);
  /* AMD 3DNow! instructions are specified by an opcode suffix in the
     place where an 8-bit immediate would normally go.  ie. the last
     byte of the instruction.  */
  obufp = obuf + strlen (obuf);
  mnemonic = Suffix3DNow[*codep++ & 0xff];
  if (mnemonic)
    oappend (mnemonic);
  else
    {
      /* Since a variable sized modrm/sib chunk is between the start
	 of the opcode (0x0f0f) and the opcode suffix, we need to do
	 all the modrm processing first, and don't know until now that
	 we have a bad opcode.  This necessitates some cleaning up.  */
      op1out[0] = '\0';
      op2out[0] = '\0';
      BadOp ();
    }
}

static const char *simd_cmp_op[] = {
  "eq",
  "lt",
  "le",
  "unord",
  "neq",
  "nlt",
  "nle",
  "ord"
};

static void
OP_SIMD_Suffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
{
  unsigned int cmp_type;

  FETCH_DATA (the_info, codep + 1);
  obufp = obuf + strlen (obuf);
  cmp_type = *codep++ & 0xff;
  if (cmp_type < 8)
    {
      char suffix1 = 'p', suffix2 = 's';
      used_prefixes |= (prefixes & PREFIX_REPZ);
      if (prefixes & PREFIX_REPZ)
	suffix1 = 's';
      else
	{
	  used_prefixes |= (prefixes & PREFIX_DATA);
	  if (prefixes & PREFIX_DATA)
	    suffix2 = 'd';
	  else
	    {
	      used_prefixes |= (prefixes & PREFIX_REPNZ);
	      if (prefixes & PREFIX_REPNZ)
		suffix1 = 's', suffix2 = 'd';
	    }
	}
      sprintf (scratchbuf, "cmp%s%c%c",
	       simd_cmp_op[cmp_type], suffix1, suffix2);
      used_prefixes |= (prefixes & PREFIX_REPZ);
      oappend (scratchbuf);
    }
  else
    {
      /* We have a bad extension byte.  Clean up.  */
      op1out[0] = '\0';
      op2out[0] = '\0';
      BadOp ();
    }
}

static void
SIMD_Fixup (int extrachar, int sizeflag ATTRIBUTE_UNUSED)
{
  /* Change movlps/movhps to movhlps/movlhps for 2 register operand
     forms of these instructions.  */
  if (mod == 3)
    {
      char *p = obuf + strlen (obuf);
      *(p + 1) = '\0';
      *p       = *(p - 1);
      *(p - 1) = *(p - 2);
      *(p - 2) = *(p - 3);
      *(p - 3) = extrachar;
    }
}

static void
PNI_Fixup (int extrachar ATTRIBUTE_UNUSED, int sizeflag)
{
  if (mod == 3 && reg == 1 && rm <= 1)
    {
      /* Override "sidt".  */
      size_t olen = strlen (obuf);
      char *p = obuf + olen - 4;
      const char **names = (address_mode == mode_64bit
			    ? names64 : names32);

      /* We might have a suffix when disassembling with -Msuffix.  */
      if (*p == 'i')
	--p;

      /* Remove "addr16/addr32" if we aren't in Intel mode.  */
      if (!intel_syntax
	  && (prefixes & PREFIX_ADDR)
	  && olen >= (4 + 7)
	  && *(p - 1) == ' '
	  && strncmp (p - 7, "addr", 4) == 0
	  && (strncmp (p - 3, "16", 2) == 0
	      || strncmp (p - 3, "32", 2) == 0))
	p -= 7;

      if (rm)
	{
	  /* mwait %eax,%ecx  */
	  strcpy (p, "mwait");
	  if (!intel_syntax)
	    strcpy (op1out, names[0]);
	}
      else
	{
	  /* monitor %eax,%ecx,%edx"  */
	  strcpy (p, "monitor");
	  if (!intel_syntax)
	    {
	      const char **op1_names;
	      if (!(prefixes & PREFIX_ADDR))
		op1_names = (address_mode == mode_16bit
			     ? names16 : names);
	      else
		{
		  op1_names = (address_mode != mode_32bit
			       ? names32 : names16);
		  used_prefixes |= PREFIX_ADDR;
		}
	      strcpy (op1out, op1_names[0]);
	      strcpy (op3out, names[2]);
	    }
	}
      if (!intel_syntax)
	{
	  strcpy (op2out, names[1]);
	  two_source_ops = 1;
	}

      codep++;
    }
  else
    OP_M (0, sizeflag);
}

static void
SVME_Fixup (int bytemode, int sizeflag)
{
  const char *alt;
  char *p;

  switch (*codep)
    {
    case 0xd8:
      alt = "vmrun";
      break;
    case 0xd9:
      alt = "vmmcall";
      break;
    case 0xda:
      alt = "vmload";
      break;
    case 0xdb:
      alt = "vmsave";
      break;
    case 0xdc:
      alt = "stgi";
      break;
    case 0xdd:
      alt = "clgi";
      break;
    case 0xde:
      alt = "skinit";
      break;
    case 0xdf:
      alt = "invlpga";
      break;
    default:
      OP_M (bytemode, sizeflag);
      return;
    }
  /* Override "lidt".  */
  p = obuf + strlen (obuf) - 4;
  /* We might have a suffix.  */
  if (*p == 'i')
    --p;
  strcpy (p, alt);
  if (!(prefixes & PREFIX_ADDR))
    {
      ++codep;
      return;
    }
  used_prefixes |= PREFIX_ADDR;
  switch (*codep++)
    {
    case 0xdf:
      strcpy (op2out, names32[1]);
      two_source_ops = 1;
	  /* Fall through.  */
    case 0xd8:
    case 0xda:
    case 0xdb:
      *obufp++ = open_char;
      if (address_mode == mode_64bit || (sizeflag & AFLAG))
        alt = names32[0];
      else
        alt = names16[0];
      strcpy (obufp, alt);
      obufp += strlen (alt);
      *obufp++ = close_char;
      *obufp = '\0';
      break;
    }
}

static void
INVLPG_Fixup (int bytemode, int sizeflag)
{
  const char *alt;

  switch (*codep)
    {
    case 0xf8:
      alt = "swapgs";
      break;
    case 0xf9:
      alt = "rdtscp";
      break;
    default:
      OP_M (bytemode, sizeflag);
      return;
    }
  /* Override "invlpg".  */
  strcpy (obuf + strlen (obuf) - 6, alt);
  codep++;
}

static void
BadOp (void)
{
  /* Throw away prefixes and 1st. opcode byte.  */
  codep = insn_codep + 1;
  oappend ("(bad)");
}

static void
SEG_Fixup (int extrachar, int sizeflag)
{
  if (mod == 3)
    {
      /* We need to add a proper suffix with

		movw %ds,%ax
		movl %ds,%eax
		movq %ds,%rax
		movw %ax,%ds
		movl %eax,%ds
		movq %rax,%ds
       */
      const char *suffix;

      if (prefixes & PREFIX_DATA)
	suffix = "w";
      else
	{
	  USED_REX (REX_MODE64);
	  if (rex & REX_MODE64)
	    suffix = "q";
	  else
	    suffix = "l";
	}
      strcat (obuf, suffix);
    }
  else
    {
      /* We need to fix the suffix for

		movw %ds,(%eax)
		movw %ds,(%rax)
		movw (%eax),%ds
		movw (%rax),%ds

	 Override "mov[l|q]".  */
      char *p = obuf + strlen (obuf) - 1;

      /* We might not have a suffix.  */
      if (*p == 'v')
	++p;
      *p = 'w';
    }

  OP_E (extrachar, sizeflag);
}

static void
VMX_Fixup (int extrachar ATTRIBUTE_UNUSED, int sizeflag)
{
  if (mod == 3 && reg == 0 && rm >=1 && rm <= 4)
    {
      /* Override "sgdt".  */
      char *p = obuf + strlen (obuf) - 4;

      /* We might have a suffix when disassembling with -Msuffix.  */
      if (*p == 'g')
	--p;

      switch (rm)
	{
	case 1:
	  strcpy (p, "vmcall");
	  break;
	case 2:
	  strcpy (p, "vmlaunch");
	  break;
	case 3:
	  strcpy (p, "vmresume");
	  break;
	case 4:
	  strcpy (p, "vmxoff");
	  break;
	}

      codep++;
    }
  else
    OP_E (0, sizeflag);
}

static void
OP_VMX (int bytemode, int sizeflag)
{
  used_prefixes |= (prefixes & (PREFIX_DATA | PREFIX_REPZ));
  if (prefixes & PREFIX_DATA)
    strcpy (obuf, "vmclear");
  else if (prefixes & PREFIX_REPZ)
    strcpy (obuf, "vmxon");
  else
    strcpy (obuf, "vmptrld");
  OP_E (bytemode, sizeflag);
}

static void
REP_Fixup (int bytemode, int sizeflag)
{
  /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
     lods and stos.  */
  size_t ilen = 0;

  if (prefixes & PREFIX_REPZ)
    switch (*insn_codep) 
      {
      case 0x6e:	/* outsb */
      case 0x6f:	/* outsw/outsl */
      case 0xa4:	/* movsb */
      case 0xa5:	/* movsw/movsl/movsq */
	if (!intel_syntax)
	  ilen = 5;
	else
	  ilen = 4;
	break;
      case 0xaa:	/* stosb */
      case 0xab:	/* stosw/stosl/stosq */
      case 0xac:	/* lodsb */
      case 0xad:	/* lodsw/lodsl/lodsq */
	if (!intel_syntax && (sizeflag & SUFFIX_ALWAYS))
	  ilen = 5;
	else
	  ilen = 4;
	break;
      case 0x6c:	/* insb */
      case 0x6d:	/* insl/insw */
	if (!intel_syntax)
	  ilen = 4;
	else
	  ilen = 3;
	break;
      default:
	abort ();
	break;
      }

  if (ilen != 0)
    {
      size_t olen;
      char *p;

      olen = strlen (obuf);
      p = obuf + olen - ilen - 1 - 4;
      /* Handle "repz [addr16|addr32]".  */
      if ((prefixes & PREFIX_ADDR))
	p -= 1 + 6;

      memmove (p + 3, p + 4, olen - (p + 3 - obuf));
    }

  switch (bytemode)
    {
    case al_reg:
    case eAX_reg:
    case indir_dx_reg:
      OP_IMREG (bytemode, sizeflag);
      break;
    case eDI_reg:
      OP_ESreg (bytemode, sizeflag);
      break;
    case eSI_reg:
      OP_DSreg (bytemode, sizeflag);
      break;
    default:
      abort ();
      break;
    }
}
