From 5e35670ba76690524dc69cc7a2bc8d7df8eb4249 Mon Sep 17 00:00:00 2001 From: "Maciej W. Rozycki" Date: Thu, 30 Jun 2016 12:46:47 +0100 Subject: [PATCH] MIPS/GAS: Simplify non-MIPS16 branch swapping sequence Simplify non-MIPS16 branch swapping by copying the MIPS16 variant, which sets the new position for the current instruction first and reduces the calculation of the new position of the previous instruction. Also refer to previous instruction's frag and position via `delay' for consistency. Reintroduce an explanatory comment, updated, previously removed with: commit 1e91584932efd70020c8c98037d0cb93a0552a20 Author: Richard Sandiford Date: Wed Mar 9 09:17:02 2005 +0000 , ("Rework MIPS nop-insertion code, add -mfix-vr4130 [5/11]"). gas/ * config/tc-mips.c (append_insn): Simplify non-MIPS16 branch swapping sequence. --- gas/ChangeLog | 5 +++++ gas/config/tc-mips.c | 7 ++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index 300d5ca..4459273 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,5 +1,10 @@ 2016-06-30 Maciej W. Rozycki + * config/tc-mips.c (append_insn): Simplify non-MIPS16 branch + swapping sequence. + +2016-06-30 Maciej W. Rozycki + PR gas/20312 * write.c (subsegs_finish_section): Force no section padding to alignment on failed assembly, always set last frag's alignment diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c index 092e7b4..77ba0c9 100644 --- a/gas/config/tc-mips.c +++ b/gas/config/tc-mips.c @@ -7537,9 +7537,10 @@ append_insn (struct mips_cl_insn *ip, expressionS *address_expr, } else { - move_insn (&delay, ip->frag, - ip->where - branch_disp + insn_length (ip)); - move_insn (ip, history[0].frag, history[0].where); + /* If this is not a relaxed branch and we are in the + same frag, then just swap the instructions. */ + move_insn (ip, delay.frag, delay.where); + move_insn (&delay, ip->frag, ip->where + insn_length (ip)); } history[0] = *ip; delay.fixed_p = 1; -- 2.7.4