diff options
-rw-r--r-- | gas/ChangeLog | 6 | ||||
-rw-r--r-- | gas/config/tc-mips.c | 28 |
2 files changed, 14 insertions, 20 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 55fff2e..1140fec 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,9 @@ +2005-09-07 David Ung <davidu@mips.com> + + * config/tc-mips.c (append_insn): Undo last change. Instead add + guard to suppress calling frag_grow if the current instruction is + one that allows a delay slot. + 2005-09-06 Chao-ying Fu <fu@mips.com> * config/tc-mips.c (mips_set_options): Add ase_mt for MT instructions. diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c index db1fec5..b4b76f0 100644 --- a/gas/config/tc-mips.c +++ b/gas/config/tc-mips.c @@ -2312,10 +2312,11 @@ append_insn (struct mips_cl_insn *ip, expressionS *address_expr, else if (mips_opts.mips16 && ! ip->use_extend && *reloc_type != BFD_RELOC_MIPS16_JMP) - { - /* Make sure there is enough room to swap this instruction with - a following jump instruction. */ - frag_grow (6); + { + if ((pinfo & INSN_UNCOND_BRANCH_DELAY) == 0) + /* Make sure there is enough room to swap this instruction with + a following jump instruction. */ + frag_grow (6); add_fixed_insn (ip); } else @@ -2707,22 +2708,9 @@ append_insn (struct mips_cl_insn *ip, expressionS *address_expr, struct mips_cl_insn delay = history[0]; if (mips_opts.mips16) { - 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; - } + know (delay.frag == ip->frag); + move_insn (ip, delay.frag, delay.where); + move_insn (&delay, ip->frag, ip->where + insn_length (ip)); } else if (relaxed_branch) { |