Fix extraction of signed constants in nios2 disassembler (again).

In commit 6031ac352c 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 commit 1d61b03226,
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:
Sandra Loosemore 2020-05-26 23:23:03 -07:00
parent dbac035ca0
commit 25e1eca8fa
2 changed files with 25 additions and 8 deletions

View File

@ -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

View File

@ -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);