MicroBlaze: Widen mask used in opcodes/microblaze-dis,c

Instead of using 0xFFFF0000, or with (~0xFFFF) to sign extend
negative 16-bit value and with (~0xFFFF) to extract higher order
address bits

opcodes/
	* microblaze-dis.c: (print_insn_microblaze): Widen mask
	(microblaze_get_target_address): Likewis

Signed-off-by: Gopi Kumar Bulusu <gopi@sankhya.com>
Signed-off-by: Michael J. Eager <eager@eagercon.com>
This commit is contained in:
Michael J. Eager
2025-01-27 12:01:20 -08:00
parent c76c8e2098
commit 26b751e4c4

View File

@@ -302,7 +302,7 @@ print_insn_microblaze (bfd_vma memaddr, struct disassemble_info * info)
{ {
immval = get_int_field_imm (inst); immval = get_int_field_imm (inst);
if (immval & 0x8000) if (immval & 0x8000)
immval |= 0xFFFF0000; immval |= (~0xFFFF);
} }
if (immval > 0 && info->symbol_at_address_func (immval, info)) if (immval > 0 && info->symbol_at_address_func (immval, info))
{ {
@@ -353,7 +353,7 @@ print_insn_microblaze (bfd_vma memaddr, struct disassemble_info * info)
{ {
immval = get_int_field_imm (inst); immval = get_int_field_imm (inst);
if (immval & 0x8000) if (immval & 0x8000)
immval |= 0xFFFF0000; immval |= (~0xFFFF);
} }
immval += memaddr; immval += memaddr;
if (immval > 0 && info->symbol_at_address_func (immval, info)) if (immval > 0 && info->symbol_at_address_func (immval, info))
@@ -379,7 +379,7 @@ print_insn_microblaze (bfd_vma memaddr, struct disassemble_info * info)
{ {
immval = get_int_field_imm (inst); immval = get_int_field_imm (inst);
if (immval & 0x8000) if (immval & 0x8000)
immval |= 0xFFFF0000; immval |= (~0xFFFF);
} }
if (op->inst_offset_type == INST_PC_OFFSET) if (op->inst_offset_type == INST_PC_OFFSET)
immval += (int) memaddr; immval += (int) memaddr;
@@ -401,7 +401,7 @@ print_insn_microblaze (bfd_vma memaddr, struct disassemble_info * info)
{ {
immval = get_int_field_imm (inst); immval = get_int_field_imm (inst);
if (immval & 0x8000) if (immval & 0x8000)
immval |= 0xFFFF0000; immval |= (~0xFFFF);
} }
if (op->inst_offset_type == INST_PC_OFFSET) if (op->inst_offset_type == INST_PC_OFFSET)
immval += (int) memaddr; immval += (int) memaddr;
@@ -551,14 +551,14 @@ microblaze_get_target_address (long inst, bool immfound, int immval,
case INST_TYPE_R1_IMM: case INST_TYPE_R1_IMM:
if (immfound) if (immfound)
{ {
targetaddr = (immval << 16) & 0xffff0000; targetaddr = (immval << 16) & (~0xffff);
targetaddr |= (get_int_field_imm (inst) & 0x0000ffff); targetaddr |= (get_int_field_imm (inst) & 0x0000ffff);
} }
else else
{ {
targetaddr = get_int_field_imm (inst); targetaddr = get_int_field_imm (inst);
if (targetaddr & 0x8000) if (targetaddr & 0x8000)
targetaddr |= 0xFFFF0000; targetaddr |= (~0xFFFF);
} }
if (op->inst_offset_type == INST_PC_OFFSET) if (op->inst_offset_type == INST_PC_OFFSET)
targetaddr += pcval; targetaddr += pcval;
@@ -573,14 +573,14 @@ microblaze_get_target_address (long inst, bool immfound, int immval,
{ {
if (immfound) if (immfound)
{ {
targetaddr = (immval << 16) & 0xffff0000; targetaddr = (immval << 16) & (~0xffff);
targetaddr |= (get_int_field_imm (inst) & 0x0000ffff); targetaddr |= (get_int_field_imm (inst) & 0x0000ffff);
} }
else else
{ {
targetaddr = get_int_field_imm (inst); targetaddr = get_int_field_imm (inst);
if (targetaddr & 0x8000) if (targetaddr & 0x8000)
targetaddr |= 0xFFFF0000; targetaddr |= (~0xFFFF);
} }
targetaddr += r1val; targetaddr += r1val;
*targetvalid = true; *targetvalid = true;