From 13408f1edda36e182af15fa250ddd38f52ee8564 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Wed, 29 Jun 2011 20:46:10 +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 40f56222fd4..6e2efed1826 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +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. diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c index d8da3d73800..2c807939c59 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.30.2