#define Ib { OP_I, b_mode }
#define sIb { OP_sI, b_mode } /* sign extened byte */
#define Iv { OP_I, v_mode }
+#define sIv { OP_sI, v_mode }
#define Iq { OP_I, q_mode }
#define Iv64 { OP_I64, v_mode }
#define Iw { OP_I, w_mode }
{ Bad_Opcode }, /* op size prefix */
{ Bad_Opcode }, /* adr size prefix */
/* 68 */
- { "pushT", { Iq } },
+ { "pushT", { sIv } },
{ "imulS", { Gv, Ev, Iv } },
{ "pushT", { sIb } },
{ "imulS", { Gv, Ev, sIb } },
{ "invd", { XX } },
{ "wbinvd", { XX } },
{ Bad_Opcode },
- { "ud2a", { XX } },
+ { "ud2", { XX } },
{ Bad_Opcode },
{ REG_TABLE (REG_0F0D) },
{ "femms", { XX } },
{ "movz{wR|x}", { Gv, Ew } }, /* yes, there really is movzww ! */
/* b8 */
{ PREFIX_TABLE (PREFIX_0FB8) },
- { "ud2b", { XX } },
+ { "ud1", { XX } },
{ REG_TABLE (REG_0FBA) },
{ "btcS", { Ev, Gv } },
{ "bsfS", { Gv, Ev } },
{
{ "incQ", { Ev } },
{ "decQ", { Ev } },
- { "callT", { indirEv } },
- { "JcallT", { indirEp } },
- { "jmpT", { indirEv } },
- { "JjmpT", { indirEp } },
+ { "call{T|}", { indirEv } },
+ { "Jcall{T|}", { indirEp } },
+ { "jmp{T|}", { indirEv } },
+ { "Jjmp{T|}", { indirEp } },
{ "pushU", { stackEv } },
{ Bad_Opcode },
},
},
/* REG_0F0D */
{
- { "prefetch", { Eb } },
- { "prefetchw", { Eb } },
+ { "prefetch", { Mb } },
+ { "prefetchw", { Mb } },
},
/* REG_0F18 */
{
static const struct dis386 x86_64_table[][2] = {
/* X86_64_06 */
{
- { "push{T|}", { es } },
+ { "pushP", { es } },
},
/* X86_64_07 */
{
- { "pop{T|}", { es } },
+ { "popP", { es } },
},
/* X86_64_0D */
{
- { "push{T|}", { cs } },
+ { "pushP", { cs } },
},
/* X86_64_16 */
{
- { "push{T|}", { ss } },
+ { "pushP", { ss } },
},
/* X86_64_17 */
{
- { "pop{T|}", { ss } },
+ { "popP", { ss } },
},
/* X86_64_1E */
{
- { "push{T|}", { ds } },
+ { "pushP", { ds } },
},
/* X86_64_1F */
{
- { "pop{T|}", { ds } },
+ { "popP", { ds } },
},
/* X86_64_27 */
/* X86_64_60 */
{
- { "pusha{P|}", { XX } },
+ { "pushaP", { XX } },
},
/* X86_64_61 */
{
- { "popa{P|}", { XX } },
+ { "popaP", { XX } },
},
/* X86_64_62 */
used_prefixes |= (prefixes & PREFIX_DATA);
break;
case 'T':
- if (intel_syntax)
- break;
- if (address_mode == mode_64bit && (sizeflag & DFLAG))
+ if (!intel_syntax
+ && address_mode == mode_64bit
+ && (sizeflag & DFLAG))
{
*obufp++ = 'q';
break;
/* Fall through. */
case 'P':
if (intel_syntax)
- break;
+ {
+ if ((rex & REX_W) == 0
+ && (prefixes & PREFIX_DATA))
+ {
+ if ((sizeflag & DFLAG) == 0)
+ *obufp++ = 'w';
+ used_prefixes |= (prefixes & PREFIX_DATA);
+ }
+ break;
+ }
if ((prefixes & PREFIX_DATA)
|| (rex & REX_W)
|| (sizeflag & SUFFIX_ALWAYS))
op -= 0x100;
break;
case v_mode:
- USED_REX (REX_W);
- if (rex & REX_W)
+ if (sizeflag & DFLAG)
op = get32s ();
else
- {
- if (sizeflag & DFLAG)
- {
- op = get32s ();
- }
- else
- {
- op = get16 ();
- if ((op & 0x8000) != 0)
- op -= 0x10000;
- }
- used_prefixes |= (prefixes & PREFIX_DATA);
- }
- break;
- case w_mode:
- op = get16 ();
- if ((op & 0x8000) != 0)
- op -= 0x10000;
+ op = get16 ();
break;
default:
oappend (INTERNAL_DISASSEMBLER_ERROR);