From 1bdd7888a8407c57bbaf16b5db4e39d5e82c4619 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Wed, 29 Jun 2011 20:46:09 +0000 Subject: [PATCH] gas/ * config/tc-mips.c (append_insn): Always clear the history after an unconditional branch. --- gas/ChangeLog | 5 +++++ gas/config/tc-mips.c | 13 ++++++------- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index 40f56222f..6e2efed18 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,5 +1,10 @@ 2011-06-29 Richard Sandiford + * config/tc-mips.c (append_insn): Always clear the history after an + unconditional branch. + +2011-06-29 Richard Sandiford + * config/tc-mips.c (find_altered_mips16_opcode): New function. (append_insn): Use it. diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c index d8da3d738..2c807939c 100644 --- a/gas/config/tc-mips.c +++ b/gas/config/tc-mips.c @@ -3610,13 +3610,6 @@ append_insn (struct mips_cl_insn *ip, expressionS *address_expr, delay.fixed_p = 1; insert_into_history (0, 1, &delay); } - - /* If that was an unconditional branch, forget the previous - insn information. */ - if (pinfo & INSN_UNCOND_BRANCH_DELAY) - { - mips_no_prev_insn (); - } } else if (pinfo & INSN_COND_BRANCH_LIKELY) { @@ -3633,6 +3626,12 @@ append_insn (struct mips_cl_insn *ip, expressionS *address_expr, else insert_into_history (0, 1, ip); + /* If we have just completed an unconditional branch, clear the history. */ + if ((history[1].insn_mo->pinfo & INSN_UNCOND_BRANCH_DELAY) + || (mips_opts.mips16 + && (history[0].insn_mo->pinfo & MIPS16_INSN_UNCOND_BRANCH))) + mips_no_prev_insn (); + /* We just output an insn, so the next one doesn't have a label. */ mips_clear_insn_labels (); } -- 2.11.4.GIT