mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-30 13:33:53 +08:00
Fix extraction of signed constants in nios2 disassembler (again).
In commit6031ac352c
I added some casts to explicitly do conversions from unsigned to signed as 32-bit quantities to address some bugs with different sizes of long and bfd_signed_vma. Those casts were removed in the rewrite of the sign-extension logic in commit1d61b03226
, reintroducing the same bugs. This patch restores the casts. 2020-05-26 Sandra Loosemore <sandra@codesourcery.com> opcodes/ * nios2-dis.c (nios2_print_insn_arg): Add explicit casts to extractions of signed fields.
This commit is contained in:
parent
dbac035ca0
commit
25e1eca8fa
@ -1,3 +1,10 @@
|
||||
2020-05-26 Sandra Loosemore <sandra@codesourcery.com>
|
||||
|
||||
Fix extraction of signed constants in nios2 disassembler (again).
|
||||
|
||||
* nios2-dis.c (nios2_print_insn_arg): Add explicit casts to
|
||||
extractions of signed fields.
|
||||
|
||||
2020-05-26 Stefan Schulze Frielinghaus <stefansf@linux.ibm.com>
|
||||
|
||||
* s390-opc.txt: Relocate vector load/store instructions with
|
||||
|
@ -554,10 +554,12 @@ nios2_print_insn_arg (const char *argptr,
|
||||
switch (op->format)
|
||||
{
|
||||
case iw_i_type:
|
||||
s = ((GET_IW_I_IMM16 (opcode) & 0xffff) ^ 0x8000) - 0x8000;
|
||||
s = ((int32_t) ((GET_IW_I_IMM16 (opcode) & 0xffff) ^ 0x8000)
|
||||
- 0x8000);
|
||||
break;
|
||||
case iw_F2I16_type:
|
||||
s = ((GET_IW_F2I16_IMM16 (opcode) & 0xffff) ^ 0x8000) - 0x8000;
|
||||
s = ((int32_t) ((GET_IW_F2I16_IMM16 (opcode) & 0xffff) ^ 0x8000)
|
||||
- 0x8000);
|
||||
break;
|
||||
default:
|
||||
bad_opcode (op);
|
||||
@ -570,10 +572,12 @@ nios2_print_insn_arg (const char *argptr,
|
||||
switch (op->format)
|
||||
{
|
||||
case iw_F2X4I12_type:
|
||||
s = ((GET_IW_F2X4I12_IMM12 (opcode) & 0xfff) ^ 0x800) - 0x800;
|
||||
s = ((int32_t) ((GET_IW_F2X4I12_IMM12 (opcode) & 0xfff) ^ 0x800)
|
||||
- 0x800);
|
||||
break;
|
||||
case iw_F1X4I12_type:
|
||||
s = ((GET_IW_F1X4I12_IMM12 (opcode) & 0xfff) ^ 0x800) - 0x800;
|
||||
s = ((int32_t) ((GET_IW_F1X4I12_IMM12 (opcode) & 0xfff) ^ 0x800)
|
||||
- 0x800);
|
||||
break;
|
||||
default:
|
||||
bad_opcode (op);
|
||||
@ -673,10 +677,12 @@ nios2_print_insn_arg (const char *argptr,
|
||||
switch (op->format)
|
||||
{
|
||||
case iw_i_type:
|
||||
o = ((GET_IW_I_IMM16 (opcode) & 0xffff) ^ 0x8000) - 0x8000;
|
||||
o = ((int32_t) ((GET_IW_I_IMM16 (opcode) & 0xffff) ^ 0x8000)
|
||||
- 0x8000);
|
||||
break;
|
||||
case iw_F2I16_type:
|
||||
o = ((GET_IW_F2I16_IMM16 (opcode) & 0xffff) ^ 0x8000) - 0x8000;
|
||||
o = ((int32_t) ((GET_IW_F2I16_IMM16 (opcode) & 0xffff) ^ 0x8000)
|
||||
- 0x8000);
|
||||
break;
|
||||
default:
|
||||
bad_opcode (op);
|
||||
@ -690,7 +696,9 @@ nios2_print_insn_arg (const char *argptr,
|
||||
switch (op->format)
|
||||
{
|
||||
case iw_I10_type:
|
||||
o = (((GET_IW_I10_IMM10 (opcode) & 0x3ff) ^ 0x400) - 0x400) << 1;
|
||||
o = (((int32_t) ((GET_IW_I10_IMM10 (opcode) & 0x3ff) ^ 0x400)
|
||||
- 0x400)
|
||||
<< 1);
|
||||
break;
|
||||
default:
|
||||
bad_opcode (op);
|
||||
@ -704,7 +712,9 @@ nios2_print_insn_arg (const char *argptr,
|
||||
switch (op->format)
|
||||
{
|
||||
case iw_T1I7_type:
|
||||
o = (((GET_IW_T1I7_IMM7 (opcode) & 0x7f) ^ 0x40) - 0x40) << 1;
|
||||
o = (((int32_t) ((GET_IW_T1I7_IMM7 (opcode) & 0x7f) ^ 0x40)
|
||||
- 0x40)
|
||||
<< 1);
|
||||
break;
|
||||
default:
|
||||
bad_opcode (op);
|
||||
|
Loading…
Reference in New Issue
Block a user