mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-30 12:44:10 +08:00
* m10300-dis.c (disassemble): Don't assume 32-bit longs when
sign-extending operands.
This commit is contained in:
parent
0a44c2b16f
commit
d60622826d
@ -1,3 +1,8 @@
|
|||||||
|
Thu May 25 22:53:20 2000 Alexandre Oliva <aoliva@cygnus.com>
|
||||||
|
|
||||||
|
* m10300-dis.c (disassemble): Don't assume 32-bit longs when
|
||||||
|
sign-extending operands.
|
||||||
|
|
||||||
Mon May 15 15:18:07 2000 Donald Lindsay <dlindsay@cygnus.com>
|
Mon May 15 15:18:07 2000 Donald Lindsay <dlindsay@cygnus.com>
|
||||||
|
|
||||||
* d10v-opc.c (d10v_opcodes): add ALONE tag to all short branches
|
* d10v-opc.c (d10v_opcodes): add ALONE tag to all short branches
|
||||||
|
@ -484,6 +484,8 @@ disassemble (memaddr, info, insn, size)
|
|||||||
temp = extension >> operand->shift;
|
temp = extension >> operand->shift;
|
||||||
temp &= ((1 << (32 - operand->bits)) - 1);
|
temp &= ((1 << (32 - operand->bits)) - 1);
|
||||||
value |= temp;
|
value |= temp;
|
||||||
|
value = ((value ^ (((unsigned long)1) << 31))
|
||||||
|
- (((unsigned long)1) << 31));
|
||||||
}
|
}
|
||||||
else if ((operand->flags & MN10300_OPERAND_24BIT) != 0)
|
else if ((operand->flags & MN10300_OPERAND_24BIT) != 0)
|
||||||
{
|
{
|
||||||
@ -494,7 +496,7 @@ disassemble (memaddr, info, insn, size)
|
|||||||
temp &= ((1 << (24 - operand->bits)) - 1);
|
temp &= ((1 << (24 - operand->bits)) - 1);
|
||||||
value |= temp;
|
value |= temp;
|
||||||
if ((operand->flags & MN10300_OPERAND_SIGNED) != 0)
|
if ((operand->flags & MN10300_OPERAND_SIGNED) != 0)
|
||||||
value = ((value & 0xffffff) ^ (~0x7fffff)) + 0x800000;
|
value = ((value & 0xffffff) ^ 0x800000) - 0x800000;
|
||||||
}
|
}
|
||||||
else if ((operand->flags & MN10300_OPERAND_EXTENDED) != 0)
|
else if ((operand->flags & MN10300_OPERAND_EXTENDED) != 0)
|
||||||
{
|
{
|
||||||
@ -508,11 +510,10 @@ disassemble (memaddr, info, insn, size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ((operand->flags & MN10300_OPERAND_SIGNED) != 0
|
if ((operand->flags & MN10300_OPERAND_SIGNED) != 0
|
||||||
/* These are properly extended by the code above. */
|
/* These are properly extended by the code above. */
|
||||||
&& ((operand->flags & MN10300_OPERAND_24BIT) == 0)
|
&& ((operand->flags & MN10300_OPERAND_24BIT) == 0))
|
||||||
)
|
value = ((value ^ (((unsigned long)1) << (operand->bits - 1)))
|
||||||
value = ((long)(value << (32 - operand->bits))
|
- (((unsigned long)1) << (operand->bits - 1)));
|
||||||
>> (32 - operand->bits));
|
|
||||||
|
|
||||||
if (!nocomma
|
if (!nocomma
|
||||||
&& (!paren
|
&& (!paren
|
||||||
@ -525,14 +526,14 @@ disassemble (memaddr, info, insn, size)
|
|||||||
{
|
{
|
||||||
value = ((insn >> (operand->shift + extra_shift))
|
value = ((insn >> (operand->shift + extra_shift))
|
||||||
& ((1 << operand->bits) - 1));
|
& ((1 << operand->bits) - 1));
|
||||||
(*info->fprintf_func) (info->stream, "d%d", value);
|
(*info->fprintf_func) (info->stream, "d%d", (int)value);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if ((operand->flags & MN10300_OPERAND_AREG) != 0)
|
else if ((operand->flags & MN10300_OPERAND_AREG) != 0)
|
||||||
{
|
{
|
||||||
value = ((insn >> (operand->shift + extra_shift))
|
value = ((insn >> (operand->shift + extra_shift))
|
||||||
& ((1 << operand->bits) - 1));
|
& ((1 << operand->bits) - 1));
|
||||||
(*info->fprintf_func) (info->stream, "a%d", value);
|
(*info->fprintf_func) (info->stream, "a%d", (int)value);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if ((operand->flags & MN10300_OPERAND_SP) != 0)
|
else if ((operand->flags & MN10300_OPERAND_SP) != 0)
|
||||||
@ -549,11 +550,11 @@ disassemble (memaddr, info, insn, size)
|
|||||||
value = ((insn >> (operand->shift + extra_shift))
|
value = ((insn >> (operand->shift + extra_shift))
|
||||||
& ((1 << operand->bits) - 1));
|
& ((1 << operand->bits) - 1));
|
||||||
if (value < 8)
|
if (value < 8)
|
||||||
(*info->fprintf_func) (info->stream, "r%d", value);
|
(*info->fprintf_func) (info->stream, "r%d", (int)value);
|
||||||
else if (value < 12)
|
else if (value < 12)
|
||||||
(*info->fprintf_func) (info->stream, "a%d", value - 8);
|
(*info->fprintf_func) (info->stream, "a%d", (int)value - 8);
|
||||||
else
|
else
|
||||||
(*info->fprintf_func) (info->stream, "d%d", value - 12);
|
(*info->fprintf_func) (info->stream, "d%d", (int)value - 12);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if ((operand->flags & MN10300_OPERAND_XRREG) != 0)
|
else if ((operand->flags & MN10300_OPERAND_XRREG) != 0)
|
||||||
@ -563,7 +564,7 @@ disassemble (memaddr, info, insn, size)
|
|||||||
if (value == 0)
|
if (value == 0)
|
||||||
(*info->fprintf_func) (info->stream, "sp", value);
|
(*info->fprintf_func) (info->stream, "sp", value);
|
||||||
else
|
else
|
||||||
(*info->fprintf_func) (info->stream, "xr%d", value);
|
(*info->fprintf_func) (info->stream, "xr%d", (int)value);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if ((operand->flags & MN10300_OPERAND_USP) != 0)
|
else if ((operand->flags & MN10300_OPERAND_USP) != 0)
|
||||||
@ -670,7 +671,7 @@ disassemble (memaddr, info, insn, size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
(*info->fprintf_func) (info->stream, "%d", value);
|
(*info->fprintf_func) (info->stream, "%ld", (long)value);
|
||||||
}
|
}
|
||||||
/* All done. */
|
/* All done. */
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user