* config/tc-mips.c (append_insn): Correctly handle mips16 case

when the frags are different for the 2 instructions we want to
swap.  If the lengths of the 2 instructions are not the same, we
won't do the swap but emit an nop.
This commit is contained in:
David Ung 2005-09-01 16:35:41 +00:00
parent 8432045646
commit e9df6573ba
2 changed files with 23 additions and 3 deletions

View File

@ -1,3 +1,10 @@
2005-09-01 David Ung <davidu@mips.com>
* config/tc-mips.c (append_insn): Correctly handle mips16 case
when the frags are different for the 2 instructions we want to
swap. If the lengths of the 2 instructions are not the same, we
won't do the swap but emit an nop.
2005-09-01 Dmitry Diky <diwil@spec.ru>
* config/tc-msp430.c (msp430_operands): Emit dwarf2_emit_insn()

View File

@ -2698,9 +2698,22 @@ append_insn (struct mips_cl_insn *ip, expressionS *address_expr,
struct mips_cl_insn delay = history[0];
if (mips_opts.mips16)
{
know (delay.frag == ip->frag);
move_insn (ip, delay.frag, delay.where);
move_insn (&delay, ip->frag, ip->where + insn_length (ip));
if (delay.frag == ip->frag)
{
move_insn (ip, delay.frag, delay.where);
move_insn (&delay, ip->frag, delay.where
+ insn_length (ip));
}
else if (insn_length (ip) == insn_length (&delay))
{
move_insn (&delay, ip->frag, ip->where);
move_insn (ip, history[0].frag, history[0].where);
}
else
{
add_fixed_insn (NOP_INSN);
delay = *NOP_INSN;
}
}
else if (relaxed_branch)
{