This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] MIPS/GAS: Simplify non-MIPS16 branch swapping sequence


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=5e35670ba76690524dc69cc7a2bc8d7df8eb4249

commit 5e35670ba76690524dc69cc7a2bc8d7df8eb4249
Author: Maciej W. Rozycki <macro@imgtec.com>
Date:   Thu Jun 30 12:46:47 2016 +0100

    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 <rdsandiford@googlemail.com>
    Date:   Wed Mar 9 09:17:02 2005 +0000
    
    <https://sourceware.org/ml/binutils/2005-03/msg00217.html>, ("Rework
    MIPS nop-insertion code, add -mfix-vr4130 [5/11]").
    
    	gas/
    	* config/tc-mips.c (append_insn): Simplify non-MIPS16 branch
    	swapping sequence.

Diff:
---
 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  <macro@imgtec.com>
 
+	* config/tc-mips.c (append_insn): Simplify non-MIPS16 branch
+	swapping sequence.
+
+2016-06-30  Maciej W. Rozycki  <macro@imgtec.com>
+
 	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;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]