projects
/
deliverable
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
* Makefile.am: Run "make dep-am".
[deliverable/binutils-gdb.git]
/
opcodes
/
i386-dis.c
diff --git
a/opcodes/i386-dis.c
b/opcodes/i386-dis.c
index 7b4b8582e3af26e02b0aaf2cd526956d3adee11c..d2271d8a7185f3f3219255d999ef33173bc17a1e 100644
(file)
--- a/
opcodes/i386-dis.c
+++ b/
opcodes/i386-dis.c
@@
-1807,7
+1807,10
@@
prefix_name (pref, sizeflag)
case 0x66:
return (sizeflag & DFLAG) ? "data16" : "data32";
case 0x67:
case 0x66:
return (sizeflag & DFLAG) ? "data16" : "data32";
case 0x67:
- return (sizeflag & AFLAG) ? "addr16" : "addr32";
+ if (mode_64bit)
+ return (sizeflag & AFLAG) ? "addr32" : "addr64";
+ else
+ return ((sizeflag & AFLAG) && !mode_64bit) ? "addr16" : "addr32";
case FWAIT_OPCODE:
return "fwait";
default:
case FWAIT_OPCODE:
return "fwait";
default:
@@
-2081,7
+2084,7
@@
print_insn (pc, info)
sizeflag ^= AFLAG;
if (dp->bytemode3 != loop_jcxz_mode || intel_syntax)
{
sizeflag ^= AFLAG;
if (dp->bytemode3 != loop_jcxz_mode || intel_syntax)
{
- if (
sizeflag & AFLAG
)
+ if (
(sizeflag & AFLAG) || mode_64bit
)
oappend ("addr32 ");
else
oappend ("addr16 ");
oappend ("addr32 ");
else
oappend ("addr16 ");
@@
-2626,8
+2629,16
@@
putop (template, sizeflag)
*obufp++ = 'b';
break;
case 'E': /* For jcxz/jecxz */
*obufp++ = 'b';
break;
case 'E': /* For jcxz/jecxz */
- if (sizeflag & AFLAG)
- *obufp++ = 'e';
+ if (mode_64bit)
+ {
+ if (sizeflag & AFLAG)
+ *obufp++ = 'r';
+ else
+ *obufp++ = 'e';
+ }
+ else
+ if (sizeflag & AFLAG)
+ *obufp++ = 'e';
used_prefixes |= (prefixes & PREFIX_ADDR);
break;
case 'F':
used_prefixes |= (prefixes & PREFIX_ADDR);
break;
case 'F':
@@
-2636,9
+2647,9
@@
putop (template, sizeflag)
if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
{
if (sizeflag & AFLAG)
if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
{
if (sizeflag & AFLAG)
- *obufp++ = 'l';
+ *obufp++ =
mode_64bit ? 'q' :
'l';
else
else
- *obufp++ = 'w';
+ *obufp++ =
mode_64bit ? 'l' :
'w';
used_prefixes |= (prefixes & PREFIX_ADDR);
}
break;
used_prefixes |= (prefixes & PREFIX_ADDR);
}
break;
@@
-3014,7
+3025,7
@@
OP_E (bytemode, sizeflag)
disp = 0;
append_seg ();
disp = 0;
append_seg ();
- if (
sizeflag & AFLAG
) /* 32 bit address mode */
+ if (
(sizeflag & AFLAG) || mode_64bit
) /* 32 bit address mode */
{
int havesib;
int havebase;
{
int havesib;
int havebase;
@@
-3048,7
+3059,7
@@
OP_E (bytemode, sizeflag)
if ((base & 7) == 5)
{
havebase = 0;
if ((base & 7) == 5)
{
havebase = 0;
- if (mode_64bit && !havesib)
+ if (mode_64bit && !havesib
&& (sizeflag & AFLAG)
)
riprel = 1;
disp = get32s ();
}
riprel = 1;
disp = get32s ();
}
@@
-3115,7
+3126,8
@@
OP_E (bytemode, sizeflag)
if (!havesib && (rex & REX_EXTZ))
base += 8;
if (havebase)
if (!havesib && (rex & REX_EXTZ))
base += 8;
if (havebase)
- oappend (mode_64bit ? names64[base] : names32[base]);
+ oappend (mode_64bit && (sizeflag & AFLAG)
+ ? names64[base] : names32[base]);
if (havesib)
{
if (index != 4)
if (havesib)
{
if (index != 4)
@@
-3128,11
+3140,13
@@
OP_E (bytemode, sizeflag)
*obufp = '\0';
}
sprintf (scratchbuf, "%s",
*obufp = '\0';
}
sprintf (scratchbuf, "%s",
- mode_64bit ? names64[index] : names32[index]);
+ mode_64bit && (sizeflag & AFLAG)
+ ? names64[index] : names32[index]);
}
else
sprintf (scratchbuf, ",%s",
}
else
sprintf (scratchbuf, ",%s",
- mode_64bit ? names64[index] : names32[index]);
+ mode_64bit && (sizeflag & AFLAG)
+ ? names64[index] : names32[index]);
oappend (scratchbuf);
}
if (!intel_syntax
oappend (scratchbuf);
}
if (!intel_syntax
@@
-3703,7
+3717,7
@@
OP_OFF (bytemode, sizeflag)
append_seg ();
append_seg ();
- if (
sizeflag & AFLAG
)
+ if (
(sizeflag & AFLAG) || mode_64bit
)
off = get32 ();
else
off = get16 ();
off = get32 ();
else
off = get16 ();
@@
-3764,7
+3778,12
@@
ptr_reg (code, sizeflag)
USED_REX (REX_MODE64);
if (rex & REX_MODE64)
USED_REX (REX_MODE64);
if (rex & REX_MODE64)
- s = names64[code - eAX_reg];
+ {
+ if (!(sizeflag & AFLAG))
+ s = names32[code - eAX_reg];
+ else
+ s = names64[code - eAX_reg];
+ }
else if (sizeflag & AFLAG)
s = names32[code - eAX_reg];
else
else if (sizeflag & AFLAG)
s = names32[code - eAX_reg];
else
This page took
0.036158 seconds
and
4
git commands to generate.