* m10300-dis.c (disassemble): Don't assume 32-bit longs when
sign-extending operands.
This commit is contained in:
parent
0a44c2b16f
commit
d60622826d
2 changed files with 19 additions and 13 deletions
|
@ -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>
|
||||
|
||||
* 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 &= ((1 << (32 - operand->bits)) - 1);
|
||||
value |= temp;
|
||||
value = ((value ^ (((unsigned long)1) << 31))
|
||||
- (((unsigned long)1) << 31));
|
||||
}
|
||||
else if ((operand->flags & MN10300_OPERAND_24BIT) != 0)
|
||||
{
|
||||
|
@ -494,7 +496,7 @@ disassemble (memaddr, info, insn, size)
|
|||
temp &= ((1 << (24 - operand->bits)) - 1);
|
||||
value |= temp;
|
||||
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)
|
||||
{
|
||||
|
@ -508,11 +510,10 @@ disassemble (memaddr, info, insn, size)
|
|||
}
|
||||
|
||||
if ((operand->flags & MN10300_OPERAND_SIGNED) != 0
|
||||
/* These are properly extended by the code above. */
|
||||
&& ((operand->flags & MN10300_OPERAND_24BIT) == 0)
|
||||
)
|
||||
value = ((long)(value << (32 - operand->bits))
|
||||
>> (32 - operand->bits));
|
||||
/* These are properly extended by the code above. */
|
||||
&& ((operand->flags & MN10300_OPERAND_24BIT) == 0))
|
||||
value = ((value ^ (((unsigned long)1) << (operand->bits - 1)))
|
||||
- (((unsigned long)1) << (operand->bits - 1)));
|
||||
|
||||
if (!nocomma
|
||||
&& (!paren
|
||||
|
@ -525,14 +526,14 @@ disassemble (memaddr, info, insn, size)
|
|||
{
|
||||
value = ((insn >> (operand->shift + extra_shift))
|
||||
& ((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)
|
||||
{
|
||||
value = ((insn >> (operand->shift + extra_shift))
|
||||
& ((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)
|
||||
|
@ -549,11 +550,11 @@ disassemble (memaddr, info, insn, size)
|
|||
value = ((insn >> (operand->shift + extra_shift))
|
||||
& ((1 << operand->bits) - 1));
|
||||
if (value < 8)
|
||||
(*info->fprintf_func) (info->stream, "r%d", value);
|
||||
(*info->fprintf_func) (info->stream, "r%d", (int)value);
|
||||
else if (value < 12)
|
||||
(*info->fprintf_func) (info->stream, "a%d", value - 8);
|
||||
(*info->fprintf_func) (info->stream, "a%d", (int)value - 8);
|
||||
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)
|
||||
|
@ -563,7 +564,7 @@ disassemble (memaddr, info, insn, size)
|
|||
if (value == 0)
|
||||
(*info->fprintf_func) (info->stream, "sp", value);
|
||||
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)
|
||||
|
@ -670,7 +671,7 @@ disassemble (memaddr, info, insn, size)
|
|||
}
|
||||
|
||||
else
|
||||
(*info->fprintf_func) (info->stream, "%d", value);
|
||||
(*info->fprintf_func) (info->stream, "%ld", (long)value);
|
||||
}
|
||||
/* All done. */
|
||||
break;
|
||||
|
|
Loading…
Reference in a new issue