From: Alexandre Oliva Date: Sat, 14 Apr 2001 06:53:57 +0000 (+0000) Subject: * config/tc-mn10300.c (md_assemble): Simplify offset adjustment of X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=eb0dfd58c8702a985afe93d26baa56d0c356ee9a;p=binutils-gdb.git * config/tc-mn10300.c (md_assemble): Simplify offset adjustment of pc-relative relocations not placed at the end of the instruction. --- diff --git a/gas/ChangeLog b/gas/ChangeLog index 749d89b8eed..afec9436909 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2001-04-14 Alexandre Oliva + + * config/tc-mn10300.c (md_assemble): Simplify offset adjustment of + pc-relative relocations not placed at the end of the instruction. + 2001-04-13 Jim Wilson * tc-ia64.c (is_conditional_branch): Return true for br, brl, and br. diff --git a/gas/config/tc-mn10300.c b/gas/config/tc-mn10300.c index 01c6ee59682..00f1c0534cc 100644 --- a/gas/config/tc-mn10300.c +++ b/gas/config/tc-mn10300.c @@ -937,7 +937,7 @@ md_assemble (str) struct mn10300_opcode *next_opcode; const unsigned char *opindex_ptr; int next_opindex, relaxable; - unsigned long insn, extension, size = 0, real_size; + unsigned long insn, extension, size = 0; char *f; int i; int match; @@ -1513,8 +1513,6 @@ keep_going: if (opcode->format == FMT_D4) size = 6; - real_size = size; - if (relaxable && fc > 0) { int type; @@ -1729,25 +1727,14 @@ keep_going: /* Is the reloc pc-relative? */ pcrel = (operand->flags & MN10300_OPERAND_PCREL) != 0; - /* Gross. This disgusting hack is to make sure we - get the right offset for the 16/32 bit reloc in - "call" instructions. Basically they're a pain - because the reloc isn't at the end of the instruction. */ - if ((size == 5 || size == 7) - && (((insn >> 24) & 0xff) == 0xcd - || ((insn >> 24) & 0xff) == 0xdd)) - size -= 2; - - /* Similarly for certain bit instructions which don't - hav their 32bit reloc at the tail of the instruction. */ - if (size == 7 - && (((insn >> 16) & 0xffff) == 0xfe00 - || ((insn >> 16) & 0xffff) == 0xfe01 - || ((insn >> 16) & 0xffff) == 0xfe02)) - size -= 1; - offset = size - reloc_size / 8; + /* If the pcrel relocation isn't at the end of the insn, + we have to adjust the offset for the relocation to be + correct. */ + if (pcrel) + offset -= operand->shift / 8; + /* Choose a proper BFD relocation type. */ if (pcrel) { @@ -1791,7 +1778,7 @@ keep_going: } } - dwarf2_emit_insn (real_size); + dwarf2_emit_insn (size); } /* If while processing a fixup, a reloc really needs to be created