[binutils-gdb] MIPS/GAS: Respect the `insn32' mode in branch relaxation

Maciej W.Rozycki macro@sourceware.org
Tue Jul 26 19:24:00 GMT 2016


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

commit 8484fb75874eb9ef35710ac6579433f062ddba18
Author: Maciej W. Rozycki <macro@imgtec.com>
Date:   Tue Jul 26 17:50:55 2016 +0100

    MIPS/GAS: Respect the `insn32' mode in branch relaxation
    
    Complement:
    
    commit 833794fc12d98139fc33f6b0b85feb03471007b7
    Author: Maciej W. Rozycki <macro@linux-mips.org>
    Date:   Tue Jun 25 18:02:34 2013 +0000
    
    <https://sourceware.org/ml/binutils/2013-06/msg00104.html>, ("microMIPS
    insn32 mode support"), and fix an issue with microMIPS branch relaxation
    producing 16-bit instructions in the `insn32' mode.  Use equivalent
    32-bit instruction sequences.
    
    	gas/
    	* config/tc-mips.c (RELAX_MICROMIPS_ENCODE): Add `insn32' flag.
    	(RELAX_MICROMIPS_INSN32): New macro.
    	(RELAX_MICROMIPS_UNCOND, RELAX_MICROMIPS_COMPACT)
    	(RELAX_MICROMIPS_LINK, RELAX_MICROMIPS_RELAX32)
    	(RELAX_MICROMIPS_TOOFAR16, RELAX_MICROMIPS_MARK_TOOFAR16)
    	(RELAX_MICROMIPS_CLEAR_TOOFAR16, RELAX_MICROMIPS_TOOFAR32)
    	(RELAX_MICROMIPS_MARK_TOOFAR32, RELAX_MICROMIPS_CLEAR_TOOFAR32):
    	Shift bits.
    	(append_insn): Record `mips_opts.insn32' with relaxed microMIPS
    	branches.
    	(relaxed_micromips_32bit_branch_length): Handle the `insn32'
    	mode.
    	(md_convert_frag): Likewise.
    	* testsuite/gas/mips/micromips-branch-relax.s: Add `insn32'
    	conditionals.
    	* testsuite/gas/mips/micromips-branch-relax.l: Update line
    	numbers accordingly.
    	* testsuite/gas/mips/micromips-branch-relax-pic.l: Likewise.
    	* testsuite/gas/mips/micromips-branch-relax-insn32.d: New test.
    	* testsuite/gas/mips/micromips-branch-relax-insn32-pic.d: New
    	test.
    	* testsuite/gas/mips/micromips-branch-relax-insn32.l: New
    	stderr output.
    	* testsuite/gas/mips/micromips-branch-relax-insn32-pic.l: New
    	stderr output.
    	* testsuite/gas/mips/mips.exp: Run the new tests.

Diff:
---
 gas/ChangeLog                                      |  29 ++
 gas/config/tc-mips.c                               | 130 +++--
 .../gas/mips/micromips-branch-relax-insn32-pic.d   | 572 +++++++++++++++++++++
 .../gas/mips/micromips-branch-relax-insn32-pic.l   |  47 ++
 .../gas/mips/micromips-branch-relax-insn32.d       | 433 ++++++++++++++++
 .../gas/mips/micromips-branch-relax-insn32.l       |  45 ++
 .../gas/mips/micromips-branch-relax-pic.l          |  22 +-
 gas/testsuite/gas/mips/micromips-branch-relax.l    |  20 +-
 gas/testsuite/gas/mips/micromips-branch-relax.s    |  14 +
 gas/testsuite/gas/mips/mips.exp                    |   2 +
 10 files changed, 1248 insertions(+), 66 deletions(-)

diff --git a/gas/ChangeLog b/gas/ChangeLog
index 7fc57e8..617fccd 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,32 @@
+2016-07-26  Maciej W. Rozycki  <macro@imgtec.com>
+
+	* config/tc-mips.c (RELAX_MICROMIPS_ENCODE): Add `insn32' flag.
+	(RELAX_MICROMIPS_INSN32): New macro.
+	(RELAX_MICROMIPS_UNCOND, RELAX_MICROMIPS_COMPACT)
+	(RELAX_MICROMIPS_LINK, RELAX_MICROMIPS_RELAX32)
+	(RELAX_MICROMIPS_TOOFAR16, RELAX_MICROMIPS_MARK_TOOFAR16)
+	(RELAX_MICROMIPS_CLEAR_TOOFAR16, RELAX_MICROMIPS_TOOFAR32)
+	(RELAX_MICROMIPS_MARK_TOOFAR32, RELAX_MICROMIPS_CLEAR_TOOFAR32):
+	Shift bits.
+	(append_insn): Record `mips_opts.insn32' with relaxed microMIPS
+	branches.
+	(relaxed_micromips_32bit_branch_length): Handle the `insn32'
+	mode.
+	(md_convert_frag): Likewise.
+	* testsuite/gas/mips/micromips-branch-relax.s: Add `insn32'
+	conditionals.
+	* testsuite/gas/mips/micromips-branch-relax.l: Update line
+	numbers accordingly.
+	* testsuite/gas/mips/micromips-branch-relax-pic.l: Likewise.
+	* testsuite/gas/mips/micromips-branch-relax-insn32.d: New test.
+	* testsuite/gas/mips/micromips-branch-relax-insn32-pic.d: New
+	test.
+	* testsuite/gas/mips/micromips-branch-relax-insn32.l: New
+	stderr output.
+	* testsuite/gas/mips/micromips-branch-relax-insn32-pic.l: New
+	stderr output.
+	* testsuite/gas/mips/mips.exp: Run the new tests.
+
 2016-07-21  H.J. Lu  <hongjiu.lu@intel.com>
 
 	* configure: Regenerated.
diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c
index daa23d8..5768f18 100644
--- a/gas/config/tc-mips.c
+++ b/gas/config/tc-mips.c
@@ -1151,37 +1151,41 @@ static int mips_relax_branch;
 
    The information we store for this type of relaxation is the argument
    code found in the opcode file for this relocation, the register
-   selected as the assembler temporary, whether the branch is
-   unconditional, whether it is compact, whether it stores the link
-   address implicitly in $ra, whether relaxation of out-of-range 32-bit
-   branches to a sequence of instructions is enabled, and whether the
-   displacement of a branch is too large to fit as an immediate argument
-   of a 16-bit and a 32-bit branch, respectively.  */
-#define RELAX_MICROMIPS_ENCODE(type, at, uncond, compact, link,	\
+   selected as the assembler temporary, whether in the 32-bit
+   instruction mode, whether the branch is unconditional, whether it is
+   compact, whether it stores the link address implicitly in $ra,
+   whether relaxation of out-of-range 32-bit branches to a sequence of
+   instructions is enabled, and whether the displacement of a branch is
+   too large to fit as an immediate argument of a 16-bit and a 32-bit
+   branch, respectively.  */
+#define RELAX_MICROMIPS_ENCODE(type, at, insn32,		\
+			       uncond, compact, link,		\
 			       relax32, toofar16, toofar32)	\
   (0x40000000							\
    | ((type) & 0xff)						\
    | (((at) & 0x1f) << 8)					\
-   | ((uncond) ? 0x2000 : 0)					\
-   | ((compact) ? 0x4000 : 0)					\
-   | ((link) ? 0x8000 : 0)					\
-   | ((relax32) ? 0x10000 : 0)					\
-   | ((toofar16) ? 0x20000 : 0)					\
-   | ((toofar32) ? 0x40000 : 0))
+   | ((insn32) ? 0x2000 : 0)					\
+   | ((uncond) ? 0x4000 : 0)					\
+   | ((compact) ? 0x8000 : 0)					\
+   | ((link) ? 0x10000 : 0)					\
+   | ((relax32) ? 0x20000 : 0)					\
+   | ((toofar16) ? 0x40000 : 0)					\
+   | ((toofar32) ? 0x80000 : 0))
 #define RELAX_MICROMIPS_P(i) (((i) & 0xc0000000) == 0x40000000)
 #define RELAX_MICROMIPS_TYPE(i) ((i) & 0xff)
 #define RELAX_MICROMIPS_AT(i) (((i) >> 8) & 0x1f)
-#define RELAX_MICROMIPS_UNCOND(i) (((i) & 0x2000) != 0)
-#define RELAX_MICROMIPS_COMPACT(i) (((i) & 0x4000) != 0)
-#define RELAX_MICROMIPS_LINK(i) (((i) & 0x8000) != 0)
-#define RELAX_MICROMIPS_RELAX32(i) (((i) & 0x10000) != 0)
-
-#define RELAX_MICROMIPS_TOOFAR16(i) (((i) & 0x20000) != 0)
-#define RELAX_MICROMIPS_MARK_TOOFAR16(i) ((i) | 0x20000)
-#define RELAX_MICROMIPS_CLEAR_TOOFAR16(i) ((i) & ~0x20000)
-#define RELAX_MICROMIPS_TOOFAR32(i) (((i) & 0x40000) != 0)
-#define RELAX_MICROMIPS_MARK_TOOFAR32(i) ((i) | 0x40000)
-#define RELAX_MICROMIPS_CLEAR_TOOFAR32(i) ((i) & ~0x40000)
+#define RELAX_MICROMIPS_INSN32(i) (((i) & 0x2000) != 0)
+#define RELAX_MICROMIPS_UNCOND(i) (((i) & 0x4000) != 0)
+#define RELAX_MICROMIPS_COMPACT(i) (((i) & 0x8000) != 0)
+#define RELAX_MICROMIPS_LINK(i) (((i) & 0x10000) != 0)
+#define RELAX_MICROMIPS_RELAX32(i) (((i) & 0x20000) != 0)
+
+#define RELAX_MICROMIPS_TOOFAR16(i) (((i) & 0x40000) != 0)
+#define RELAX_MICROMIPS_MARK_TOOFAR16(i) ((i) | 0x40000)
+#define RELAX_MICROMIPS_CLEAR_TOOFAR16(i) ((i) & ~0x40000)
+#define RELAX_MICROMIPS_TOOFAR32(i) (((i) & 0x80000) != 0)
+#define RELAX_MICROMIPS_MARK_TOOFAR32(i) ((i) | 0x80000)
+#define RELAX_MICROMIPS_CLEAR_TOOFAR32(i) ((i) & ~0x80000)
 
 /* Sign-extend 16-bit value X.  */
 #define SEXT_16BIT(X) ((((X) + 0x8000) & 0xffff) - 0x8000)
@@ -7302,7 +7306,8 @@ append_insn (struct mips_cl_insn *ip, expressionS *address_expr,
       relaxed_branch = TRUE;
       length32 = relaxed_micromips_32bit_branch_length (NULL, NULL, uncond);
       add_relaxed_insn (ip, relax32 ? length32 : 4, relax16 ? 2 : 4,
-			RELAX_MICROMIPS_ENCODE (type, AT, uncond, compact, al,
+			RELAX_MICROMIPS_ENCODE (type, AT, mips_opts.insn32,
+						uncond, compact, al,
 						relax32, 0, 0),
 			address_expr->X_add_symbol,
 			address_expr->X_add_number);
@@ -17228,14 +17233,19 @@ relaxed_micromips_32bit_branch_length (fragS *fragp, asection *sec, int update)
     {
       bfd_boolean compact_known = fragp != NULL;
       bfd_boolean compact = FALSE;
+      bfd_boolean insn32 = TRUE;
       bfd_boolean uncond;
+      int short_insn_size;
 
-      if (compact_known)
-	compact = RELAX_MICROMIPS_COMPACT (fragp->fr_subtype);
       if (fragp)
-	uncond = RELAX_MICROMIPS_UNCOND (fragp->fr_subtype);
+	{
+	  compact = RELAX_MICROMIPS_COMPACT (fragp->fr_subtype);
+	  uncond = RELAX_MICROMIPS_UNCOND (fragp->fr_subtype);
+	  insn32 = RELAX_MICROMIPS_INSN32 (fragp->fr_subtype);
+	}
       else
 	uncond = update < 0;
+      short_insn_size = insn32 ? 4 : 2;
 
       /* If label is out of range, we turn branch <br>:
 
@@ -17245,11 +17255,12 @@ relaxed_micromips_32bit_branch_length (fragS *fragp, asection *sec, int update)
          into:
 
 		j	label			# 4 bytes
-		nop				# 2 bytes if compact && !PIC
+		nop				# 2/4 bytes if
+						#  compact && (!PIC || insn32)
 	    0:
        */
-      if (mips_pic == NO_PIC && (!compact_known || compact))
-	length += 2;
+      if ((mips_pic == NO_PIC || insn32) && (!compact_known || compact))
+	length += short_insn_size;
 
       /* If assembling PIC code, we further turn:
 
@@ -17259,18 +17270,18 @@ relaxed_micromips_32bit_branch_length (fragS *fragp, asection *sec, int update)
 
 			lw/ld	at, %got(label)(gp)	# 4 bytes
 			d/addiu	at, %lo(label)		# 4 bytes
-			jr/c	at			# 2 bytes
+			jr/c	at			# 2/4 bytes
        */
       if (mips_pic != NO_PIC)
-	length += 6;
+	length += 4 + short_insn_size;
 
       /* If branch <br> is conditional, we prepend negated branch <brneg>:
 
 			<brneg>	0f			# 4 bytes
-			nop				# 2 bytes if !compact
+			nop				# 2/4 bytes if !compact
        */
       if (!uncond)
-	length += (compact_known && compact) ? 4 : 6;
+	length += (compact_known && compact) ? 4 : 4 + short_insn_size;
     }
 
   return length;
@@ -17835,6 +17846,7 @@ md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, segT asec, fragS *fragp)
     {
       char *buf = fragp->fr_literal + fragp->fr_fix;
       bfd_boolean compact = RELAX_MICROMIPS_COMPACT (fragp->fr_subtype);
+      bfd_boolean insn32 = RELAX_MICROMIPS_INSN32 (fragp->fr_subtype);
       bfd_boolean al = RELAX_MICROMIPS_LINK (fragp->fr_subtype);
       int type = RELAX_MICROMIPS_TYPE (fragp->fr_subtype);
       bfd_boolean short_ds;
@@ -17982,9 +17994,15 @@ md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, segT asec, fragS *fragp)
 
 	  /* Branch over the jump.  */
 	  buf = write_compressed_insn (buf, insn, 4);
+
 	  if (!compact)
-	    /* nop */
-	    buf = write_compressed_insn (buf, 0x0c00, 2);
+	    {
+	      /* nop  */
+	      if (insn32)
+		buf = write_compressed_insn (buf, 0x00000000, 4);
+	      else
+		buf = write_compressed_insn (buf, 0x0c00, 2);
+	    }
 	}
 
       if (mips_pic == NO_PIC)
@@ -18000,15 +18018,19 @@ md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, segT asec, fragS *fragp)
 	  fixp->fx_line = fragp->fr_line;
 
 	  buf = write_compressed_insn (buf, insn, 4);
+
 	  if (compact)
-	    /* nop */
-	    buf = write_compressed_insn (buf, 0x0c00, 2);
+	    {
+	      /* nop  */
+	      if (insn32)
+		buf = write_compressed_insn (buf, 0x00000000, 4);
+	      else
+		buf = write_compressed_insn (buf, 0x0c00, 2);
+	    }
 	}
       else
 	{
 	  unsigned long at = RELAX_MICROMIPS_AT (fragp->fr_subtype);
-	  unsigned long jalr = short_ds ? 0x45e0 : 0x45c0;	/* jalr/s  */
-	  unsigned long jr = compact ? 0x45a0 : 0x4580;		/* jr/c  */
 
 	  /* lw/ld $at, <sym>($gp)  R_MICROMIPS_GOT16  */
 	  insn = HAVE_64BIT_ADDRESSES ? 0xdc1c0000 : 0xfc1c0000;
@@ -18038,11 +18060,29 @@ md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, segT asec, fragS *fragp)
 
 	  buf = write_compressed_insn (buf, insn, 4);
 
-	  /* jr/jrc/jalr/jalrs $at  */
-	  insn = al ? jalr : jr;
-	  insn |= at << MICROMIPSOP_SH_MJ;
+	  if (insn32)
+	    {
+	      /* jr/jalr $at  */
+	      insn = 0x00000f3c | (al ? RA : ZERO) << MICROMIPSOP_SH_RT;
+	      insn |= at << MICROMIPSOP_SH_RS;
+
+	      buf = write_compressed_insn (buf, insn, 4);
 
-	  buf = write_compressed_insn (buf, insn, 2);
+	      if (compact)
+		/* nop  */
+		buf = write_compressed_insn (buf, 0x00000000, 4);
+	    }
+	  else
+	    {
+	      /* jr/jrc/jalr/jalrs $at  */
+	      unsigned long jalr = short_ds ? 0x45e0 : 0x45c0;	/* jalr/s  */
+	      unsigned long jr = compact ? 0x45a0 : 0x4580;	/* jr/c  */
+
+	      insn = al ? jalr : jr;
+	      insn |= at << MICROMIPSOP_SH_MJ;
+
+	      buf = write_compressed_insn (buf, insn, 2);
+	    }
 	}
 
       gas_assert (buf == fragp->fr_literal + fragp->fr_fix);
diff --git a/gas/testsuite/gas/mips/micromips-branch-relax-insn32-pic.d b/gas/testsuite/gas/mips/micromips-branch-relax-insn32-pic.d
new file mode 100644
index 0000000..07551e3
--- /dev/null
+++ b/gas/testsuite/gas/mips/micromips-branch-relax-insn32-pic.d
@@ -0,0 +1,572 @@
+#objdump: -dr --show-raw-insn
+#name: Relax microMIPS branches (insn32 mode, pic)
+#as: -mips32r2 -32 -relax-branch -KPIC -minsn32 --defsym insn32=1
+#stderr: micromips-branch-relax-insn32-pic.l
+#source: micromips-branch-relax.s
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+
+[0-9a-f]+ <test>:
+[ 0-9a-f]+:	9400 fffe 	b	[0-9a-f]+ <.*>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	9403 fffe 	beqz	v1,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	b403 fffe 	bnez	v1,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	9400 fffe 	b	[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	40e0 fffe 	bc	[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	4060 fffe 	bal	[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	9403 fffe 	beqz	v1,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	b403 fffe 	bnez	v1,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	9400 fffe 	b	[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	40e0 fffe 	bc	[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	4060 fffe 	bal	[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	9403 fffe 	beqz	v1,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	b403 fffe 	bnez	v1,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	9400 fffe 	b	[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	40e0 fffe 	bc	[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	4060 fffe 	bal	[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	9403 fffe 	beqz	v1,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	b403 fffe 	bnez	v1,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	ff3c 0001 	lw	t9,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3339 04fb 	addiu	t9,t9,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	03f9 0f3c 	jalr	t9
+[ 	]*[0-9a-f]+: R_MICROMIPS_JALR	test3
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	03e1 0f3c 	jalr	at
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	b483 fffe 	bne	v1,a0,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	9483 fffe 	beq	v1,a0,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	4043 fffe 	bgez	v1,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	4003 fffe 	bltz	v1,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	40d4 fffe 	bgtz	s4,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	4094 fffe 	blez	s4,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	40a3 fffe 	bnezc	v1,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+[ 0-9a-f]+:	0000 0000 	nop
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	40e3 fffe 	beqzc	v1,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+[ 0-9a-f]+:	0000 0000 	nop
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	401e fffe 	bltz	s8,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	03e1 0f3c 	jalr	at
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	405e fffe 	bgez	s8,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	03e1 0f3c 	jalr	at
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	43a0 fffe 	bc1t	[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	4380 fffe 	bc1f	[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	42a0 fffe 	bc2t	[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	4280 fffe 	bc2f	[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	b483 fffe 	bne	v1,a0,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	b403 fffe 	bnez	v1,[0-9a-f]+ <.*>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+[ 0-9a-f]+:	0083 0b50 	slt	at,v1,a0
+[ 0-9a-f]+:	b401 fffe 	bnez	at,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+[ 0-9a-f]+:	0083 0b50 	slt	at,v1,a0
+[ 0-9a-f]+:	b401 fffe 	bnez	at,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	0083 0b90 	sltu	at,v1,a0
+[ 0-9a-f]+:	b401 fffe 	bnez	at,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+[ 0-9a-f]+:	0083 0b90 	sltu	at,v1,a0
+[ 0-9a-f]+:	b401 fffe 	bnez	at,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	4003 fffe 	bltz	v1,[0-9a-f]+ <.*>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	03e1 0f3c 	jalr	at
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	4003 fffe 	bltz	v1,[0-9a-f]+ <.*>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	0064 0b50 	slt	at,a0,v1
+[ 0-9a-f]+:	9401 fffe 	beqz	at,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+[ 0-9a-f]+:	0064 0b50 	slt	at,a0,v1
+[ 0-9a-f]+:	9401 fffe 	beqz	at,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	0064 0b90 	sltu	at,a0,v1
+[ 0-9a-f]+:	9401 fffe 	beqz	at,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+[ 0-9a-f]+:	0064 0b90 	sltu	at,a0,v1
+[ 0-9a-f]+:	9401 fffe 	beqz	at,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	4083 fffe 	blez	v1,[0-9a-f]+ <.*>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	0064 0b50 	slt	at,a0,v1
+[ 0-9a-f]+:	b401 fffe 	bnez	at,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+[ 0-9a-f]+:	0064 0b50 	slt	at,a0,v1
+[ 0-9a-f]+:	b401 fffe 	bnez	at,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	0064 0b90 	sltu	at,a0,v1
+[ 0-9a-f]+:	b401 fffe 	bnez	at,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+[ 0-9a-f]+:	0064 0b90 	sltu	at,a0,v1
+[ 0-9a-f]+:	b401 fffe 	bnez	at,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	40c3 fffe 	bgtz	v1,[0-9a-f]+ <.*>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	0083 0b50 	slt	at,v1,a0
+[ 0-9a-f]+:	9401 fffe 	beqz	at,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+[ 0-9a-f]+:	0083 0b50 	slt	at,v1,a0
+[ 0-9a-f]+:	9401 fffe 	beqz	at,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	0083 0b90 	sltu	at,v1,a0
+[ 0-9a-f]+:	9401 fffe 	beqz	at,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+[ 0-9a-f]+:	0083 0b90 	sltu	at,v1,a0
+[ 0-9a-f]+:	9401 fffe 	beqz	at,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	4043 fffe 	bgez	v1,[0-9a-f]+ <.*>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	03e1 0f3c 	jalr	at
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	4043 fffe 	bgez	v1,[0-9a-f]+ <.*>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	9483 fffe 	beq	v1,a0,[0-9a-f]+ <.*>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	9403 fffe 	beqz	v1,[0-9a-f]+ <.*>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+[ 0-9a-f]+:	9403 fffe 	beqz	v1,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	fc3c 0001 	lw	at,1\(gp\)
+[ 	]*[0-9a-f]+: R_MICROMIPS_GOT16	\.text
+[ 0-9a-f]+:	3021 04fb 	addiu	at,at,1275
+[ 	]*[0-9a-f]+: R_MICROMIPS_LO16	\.text
+[ 0-9a-f]+:	0001 0f3c 	jr	at
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+
+[0-9a-f]+ <.*>:
+	\.\.\.
+
+[0-9a-f]+ <test2>:
+	\.\.\.
+
+[0-9a-f]+ <test3>:
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+	\.\.\.
diff --git a/gas/testsuite/gas/mips/micromips-branch-relax-insn32-pic.l b/gas/testsuite/gas/mips/micromips-branch-relax-insn32-pic.l
new file mode 100644
index 0000000..75a5652
--- /dev/null
+++ b/gas/testsuite/gas/mips/micromips-branch-relax-insn32-pic.l
@@ -0,0 +1,47 @@
+.*: Assembler messages:
+.*:71: Warning: no .cprestore pseudo-op used in PIC code
+.*:69: Warning: relaxed out-of-range branch into a jump
+.*:73: Warning: relaxed out-of-range branch into a jump
+.*:75: Warning: relaxed out-of-range branch into a jump
+.*:77: Warning: relaxed out-of-range branch into a jump
+.*:83: Warning: relaxed out-of-range branch into a jump
+.*:85: Warning: relaxed out-of-range branch into a jump
+.*:87: Warning: relaxed out-of-range branch into a jump
+.*:89: Warning: relaxed out-of-range branch into a jump
+.*:91: Warning: relaxed out-of-range branch into a jump
+.*:93: Warning: relaxed out-of-range branch into a jump
+.*:95: Warning: relaxed out-of-range branch into a jump
+.*:97: Warning: relaxed out-of-range branch into a jump
+.*:99: Warning: relaxed out-of-range branch into a jump
+.*:101: Warning: relaxed out-of-range branch into a jump
+.*:109: Warning: relaxed out-of-range branch into a jump
+.*:111: Warning: relaxed out-of-range branch into a jump
+.*:113: Warning: relaxed out-of-range branch into a jump
+.*:115: Warning: relaxed out-of-range branch into a jump
+.*:117: Warning: relaxed out-of-range branch into a jump
+.*:119: Warning: relaxed out-of-range branch into a jump
+.*:121: Warning: relaxed out-of-range branch into a jump
+.*:123: Warning: relaxed out-of-range branch into a jump
+.*:125: Warning: relaxed out-of-range branch into a jump
+.*:127: Warning: relaxed out-of-range branch into a jump
+.*:129: Warning: relaxed out-of-range branch into a jump
+.*:131: Warning: relaxed out-of-range branch into a jump
+.*:133: Warning: relaxed out-of-range branch into a jump
+.*:135: Warning: relaxed out-of-range branch into a jump
+.*:137: Warning: relaxed out-of-range branch into a jump
+.*:139: Warning: relaxed out-of-range branch into a jump
+.*:141: Warning: relaxed out-of-range branch into a jump
+.*:143: Warning: relaxed out-of-range branch into a jump
+.*:145: Warning: relaxed out-of-range branch into a jump
+.*:147: Warning: relaxed out-of-range branch into a jump
+.*:149: Warning: relaxed out-of-range branch into a jump
+.*:151: Warning: relaxed out-of-range branch into a jump
+.*:153: Warning: relaxed out-of-range branch into a jump
+.*:155: Warning: relaxed out-of-range branch into a jump
+.*:157: Warning: relaxed out-of-range branch into a jump
+.*:159: Warning: relaxed out-of-range branch into a jump
+.*:161: Warning: relaxed out-of-range branch into a jump
+.*:163: Warning: relaxed out-of-range branch into a jump
+.*:165: Warning: relaxed out-of-range branch into a jump
+.*:167: Warning: relaxed out-of-range branch into a jump
+.*:169: Warning: relaxed out-of-range branch into a jump
diff --git a/gas/testsuite/gas/mips/micromips-branch-relax-insn32.d b/gas/testsuite/gas/mips/micromips-branch-relax-insn32.d
new file mode 100644
index 0000000..89dfb34
--- /dev/null
+++ b/gas/testsuite/gas/mips/micromips-branch-relax-insn32.d
@@ -0,0 +1,433 @@
+#objdump: -dr --show-raw-insn
+#name: Relax microMIPS branches (insn32 mode)
+#as: -mips32r2 -32 -relax-branch -minsn32 --defsym insn32=1
+#stderr: micromips-branch-relax-insn32.l
+#source: micromips-branch-relax.s
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+
+[0-9a-f]+ <test>:
+[ 0-9a-f]+:	9400 fffe 	b	[0-9a-f]+ <.*>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	9403 fffe 	beqz	v1,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	b403 fffe 	bnez	v1,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	9400 fffe 	b	[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	40e0 fffe 	bc	[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	4060 fffe 	bal	[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	9403 fffe 	beqz	v1,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	b403 fffe 	bnez	v1,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	9400 fffe 	b	[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	40e0 fffe 	bc	[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	4060 fffe 	bal	[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	9403 fffe 	beqz	v1,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	b403 fffe 	bnez	v1,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	9400 fffe 	b	[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	40e0 fffe 	bc	[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	4060 fffe 	bal	[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	9403 fffe 	beqz	v1,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	b403 fffe 	bnez	v1,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	f400 0000 	jal	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	f400 0000 	jal	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	b483 fffe 	bne	v1,a0,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	9483 fffe 	beq	v1,a0,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	4043 fffe 	bgez	v1,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	4003 fffe 	bltz	v1,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	40d4 fffe 	bgtz	s4,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	4094 fffe 	blez	s4,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	40a3 fffe 	bnezc	v1,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+[ 0-9a-f]+:	0000 0000 	nop
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	40e3 fffe 	beqzc	v1,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+[ 0-9a-f]+:	0000 0000 	nop
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	401e fffe 	bltz	s8,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	f400 0000 	jal	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	405e fffe 	bgez	s8,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	f400 0000 	jal	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	43a0 fffe 	bc1t	[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	4380 fffe 	bc1f	[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	42a0 fffe 	bc2t	[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	4280 fffe 	bc2f	[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+[ 0-9a-f]+:	b483 fffe 	bne	v1,a0,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	b403 fffe 	bnez	v1,[0-9a-f]+ <.*>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+[ 0-9a-f]+:	0083 0b50 	slt	at,v1,a0
+[ 0-9a-f]+:	b401 fffe 	bnez	at,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+[ 0-9a-f]+:	0083 0b50 	slt	at,v1,a0
+[ 0-9a-f]+:	b401 fffe 	bnez	at,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	0083 0b90 	sltu	at,v1,a0
+[ 0-9a-f]+:	b401 fffe 	bnez	at,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+[ 0-9a-f]+:	0083 0b90 	sltu	at,v1,a0
+[ 0-9a-f]+:	b401 fffe 	bnez	at,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	4003 fffe 	bltz	v1,[0-9a-f]+ <.*>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	f400 0000 	jal	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	4003 fffe 	bltz	v1,[0-9a-f]+ <.*>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	0064 0b50 	slt	at,a0,v1
+[ 0-9a-f]+:	9401 fffe 	beqz	at,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+[ 0-9a-f]+:	0064 0b50 	slt	at,a0,v1
+[ 0-9a-f]+:	9401 fffe 	beqz	at,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	0064 0b90 	sltu	at,a0,v1
+[ 0-9a-f]+:	9401 fffe 	beqz	at,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+[ 0-9a-f]+:	0064 0b90 	sltu	at,a0,v1
+[ 0-9a-f]+:	9401 fffe 	beqz	at,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	4083 fffe 	blez	v1,[0-9a-f]+ <.*>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	0064 0b50 	slt	at,a0,v1
+[ 0-9a-f]+:	b401 fffe 	bnez	at,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+[ 0-9a-f]+:	0064 0b50 	slt	at,a0,v1
+[ 0-9a-f]+:	b401 fffe 	bnez	at,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	0064 0b90 	sltu	at,a0,v1
+[ 0-9a-f]+:	b401 fffe 	bnez	at,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+[ 0-9a-f]+:	0064 0b90 	sltu	at,a0,v1
+[ 0-9a-f]+:	b401 fffe 	bnez	at,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	40c3 fffe 	bgtz	v1,[0-9a-f]+ <.*>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	0083 0b50 	slt	at,v1,a0
+[ 0-9a-f]+:	9401 fffe 	beqz	at,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+[ 0-9a-f]+:	0083 0b50 	slt	at,v1,a0
+[ 0-9a-f]+:	9401 fffe 	beqz	at,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	0083 0b90 	sltu	at,v1,a0
+[ 0-9a-f]+:	9401 fffe 	beqz	at,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+[ 0-9a-f]+:	0083 0b90 	sltu	at,v1,a0
+[ 0-9a-f]+:	9401 fffe 	beqz	at,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	4043 fffe 	bgez	v1,[0-9a-f]+ <.*>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	f400 0000 	jal	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	4043 fffe 	bgez	v1,[0-9a-f]+ <.*>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	9483 fffe 	beq	v1,a0,[0-9a-f]+ <.*>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	9403 fffe 	beqz	v1,[0-9a-f]+ <.*>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+
+[0-9a-f]+ <.*>:
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+[ 0-9a-f]+:	9403 fffe 	beqz	v1,[0-9a-f]+ <.*\+0x[0-9a-f]+>
+[ 	]*[0-9a-f]+: R_MICROMIPS_PC16_S1	.*
+[ 0-9a-f]+:	0000 0000 	nop
+[ 0-9a-f]+:	d400 0000 	j	0 <test>
+[ 	]*[0-9a-f]+: R_MICROMIPS_26_S1	test3
+[ 0-9a-f]+:	00a4 1b10 	xor	v1,a0,a1
+
+[0-9a-f]+ <.*>:
+	\.\.\.
+
+[0-9a-f]+ <test2>:
+	\.\.\.
+
+[0-9a-f]+ <test3>:
+[ 0-9a-f]+:	00a4 1950 	addu	v1,a0,a1
+	\.\.\.
diff --git a/gas/testsuite/gas/mips/micromips-branch-relax-insn32.l b/gas/testsuite/gas/mips/micromips-branch-relax-insn32.l
new file mode 100644
index 0000000..7a7fcca
--- /dev/null
+++ b/gas/testsuite/gas/mips/micromips-branch-relax-insn32.l
@@ -0,0 +1,45 @@
+.*: Assembler messages:
+.*:73: Warning: relaxed out-of-range branch into a jump
+.*:75: Warning: relaxed out-of-range branch into a jump
+.*:77: Warning: relaxed out-of-range branch into a jump
+.*:83: Warning: relaxed out-of-range branch into a jump
+.*:85: Warning: relaxed out-of-range branch into a jump
+.*:87: Warning: relaxed out-of-range branch into a jump
+.*:89: Warning: relaxed out-of-range branch into a jump
+.*:91: Warning: relaxed out-of-range branch into a jump
+.*:93: Warning: relaxed out-of-range branch into a jump
+.*:95: Warning: relaxed out-of-range branch into a jump
+.*:97: Warning: relaxed out-of-range branch into a jump
+.*:99: Warning: relaxed out-of-range branch into a jump
+.*:101: Warning: relaxed out-of-range branch into a jump
+.*:109: Warning: relaxed out-of-range branch into a jump
+.*:111: Warning: relaxed out-of-range branch into a jump
+.*:113: Warning: relaxed out-of-range branch into a jump
+.*:115: Warning: relaxed out-of-range branch into a jump
+.*:117: Warning: relaxed out-of-range branch into a jump
+.*:119: Warning: relaxed out-of-range branch into a jump
+.*:121: Warning: relaxed out-of-range branch into a jump
+.*:123: Warning: relaxed out-of-range branch into a jump
+.*:125: Warning: relaxed out-of-range branch into a jump
+.*:127: Warning: relaxed out-of-range branch into a jump
+.*:129: Warning: relaxed out-of-range branch into a jump
+.*:131: Warning: relaxed out-of-range branch into a jump
+.*:133: Warning: relaxed out-of-range branch into a jump
+.*:135: Warning: relaxed out-of-range branch into a jump
+.*:137: Warning: relaxed out-of-range branch into a jump
+.*:139: Warning: relaxed out-of-range branch into a jump
+.*:141: Warning: relaxed out-of-range branch into a jump
+.*:143: Warning: relaxed out-of-range branch into a jump
+.*:145: Warning: relaxed out-of-range branch into a jump
+.*:147: Warning: relaxed out-of-range branch into a jump
+.*:149: Warning: relaxed out-of-range branch into a jump
+.*:151: Warning: relaxed out-of-range branch into a jump
+.*:153: Warning: relaxed out-of-range branch into a jump
+.*:155: Warning: relaxed out-of-range branch into a jump
+.*:157: Warning: relaxed out-of-range branch into a jump
+.*:159: Warning: relaxed out-of-range branch into a jump
+.*:161: Warning: relaxed out-of-range branch into a jump
+.*:163: Warning: relaxed out-of-range branch into a jump
+.*:165: Warning: relaxed out-of-range branch into a jump
+.*:167: Warning: relaxed out-of-range branch into a jump
+.*:169: Warning: relaxed out-of-range branch into a jump
diff --git a/gas/testsuite/gas/mips/micromips-branch-relax-pic.l b/gas/testsuite/gas/mips/micromips-branch-relax-pic.l
index 7cb5f8d..8690f25 100644
--- a/gas/testsuite/gas/mips/micromips-branch-relax-pic.l
+++ b/gas/testsuite/gas/mips/micromips-branch-relax-pic.l
@@ -1,16 +1,10 @@
 .*: Assembler messages:
-.*:61: Warning: no .cprestore pseudo-op used in PIC code
-.*:59: Warning: relaxed out-of-range branch into a jump
-.*:63: Warning: relaxed out-of-range branch into a jump
-.*:65: Warning: relaxed out-of-range branch into a jump
-.*:67: Warning: relaxed out-of-range branch into a jump
+.*:71: Warning: no .cprestore pseudo-op used in PIC code
 .*:69: Warning: relaxed out-of-range branch into a jump
-.*:71: Warning: relaxed out-of-range branch into a jump
 .*:73: Warning: relaxed out-of-range branch into a jump
 .*:75: Warning: relaxed out-of-range branch into a jump
 .*:77: Warning: relaxed out-of-range branch into a jump
-.*:79: Warning: relaxed out-of-range branch into a jump
-.*:81: Warning: relaxed out-of-range branch into a jump
+.*:80: Warning: relaxed out-of-range branch into a jump
 .*:83: Warning: relaxed out-of-range branch into a jump
 .*:85: Warning: relaxed out-of-range branch into a jump
 .*:87: Warning: relaxed out-of-range branch into a jump
@@ -21,9 +15,8 @@
 .*:97: Warning: relaxed out-of-range branch into a jump
 .*:99: Warning: relaxed out-of-range branch into a jump
 .*:101: Warning: relaxed out-of-range branch into a jump
-.*:103: Warning: relaxed out-of-range branch into a jump
-.*:105: Warning: relaxed out-of-range branch into a jump
-.*:107: Warning: relaxed out-of-range branch into a jump
+.*:104: Warning: relaxed out-of-range branch into a jump
+.*:106: Warning: relaxed out-of-range branch into a jump
 .*:109: Warning: relaxed out-of-range branch into a jump
 .*:111: Warning: relaxed out-of-range branch into a jump
 .*:113: Warning: relaxed out-of-range branch into a jump
@@ -48,3 +41,10 @@
 .*:151: Warning: relaxed out-of-range branch into a jump
 .*:153: Warning: relaxed out-of-range branch into a jump
 .*:155: Warning: relaxed out-of-range branch into a jump
+.*:157: Warning: relaxed out-of-range branch into a jump
+.*:159: Warning: relaxed out-of-range branch into a jump
+.*:161: Warning: relaxed out-of-range branch into a jump
+.*:163: Warning: relaxed out-of-range branch into a jump
+.*:165: Warning: relaxed out-of-range branch into a jump
+.*:167: Warning: relaxed out-of-range branch into a jump
+.*:169: Warning: relaxed out-of-range branch into a jump
diff --git a/gas/testsuite/gas/mips/micromips-branch-relax.l b/gas/testsuite/gas/mips/micromips-branch-relax.l
index b805727..e57e934 100644
--- a/gas/testsuite/gas/mips/micromips-branch-relax.l
+++ b/gas/testsuite/gas/mips/micromips-branch-relax.l
@@ -1,14 +1,8 @@
 .*: Assembler messages:
-.*:63: Warning: relaxed out-of-range branch into a jump
-.*:65: Warning: relaxed out-of-range branch into a jump
-.*:67: Warning: relaxed out-of-range branch into a jump
-.*:69: Warning: relaxed out-of-range branch into a jump
-.*:71: Warning: relaxed out-of-range branch into a jump
 .*:73: Warning: relaxed out-of-range branch into a jump
 .*:75: Warning: relaxed out-of-range branch into a jump
 .*:77: Warning: relaxed out-of-range branch into a jump
-.*:79: Warning: relaxed out-of-range branch into a jump
-.*:81: Warning: relaxed out-of-range branch into a jump
+.*:80: Warning: relaxed out-of-range branch into a jump
 .*:83: Warning: relaxed out-of-range branch into a jump
 .*:85: Warning: relaxed out-of-range branch into a jump
 .*:87: Warning: relaxed out-of-range branch into a jump
@@ -19,9 +13,8 @@
 .*:97: Warning: relaxed out-of-range branch into a jump
 .*:99: Warning: relaxed out-of-range branch into a jump
 .*:101: Warning: relaxed out-of-range branch into a jump
-.*:103: Warning: relaxed out-of-range branch into a jump
-.*:105: Warning: relaxed out-of-range branch into a jump
-.*:107: Warning: relaxed out-of-range branch into a jump
+.*:104: Warning: relaxed out-of-range branch into a jump
+.*:106: Warning: relaxed out-of-range branch into a jump
 .*:109: Warning: relaxed out-of-range branch into a jump
 .*:111: Warning: relaxed out-of-range branch into a jump
 .*:113: Warning: relaxed out-of-range branch into a jump
@@ -46,3 +39,10 @@
 .*:151: Warning: relaxed out-of-range branch into a jump
 .*:153: Warning: relaxed out-of-range branch into a jump
 .*:155: Warning: relaxed out-of-range branch into a jump
+.*:157: Warning: relaxed out-of-range branch into a jump
+.*:159: Warning: relaxed out-of-range branch into a jump
+.*:161: Warning: relaxed out-of-range branch into a jump
+.*:163: Warning: relaxed out-of-range branch into a jump
+.*:165: Warning: relaxed out-of-range branch into a jump
+.*:167: Warning: relaxed out-of-range branch into a jump
+.*:169: Warning: relaxed out-of-range branch into a jump
diff --git a/gas/testsuite/gas/mips/micromips-branch-relax.s b/gas/testsuite/gas/mips/micromips-branch-relax.s
index 6cf2c47..421d1db 100644
--- a/gas/testsuite/gas/mips/micromips-branch-relax.s
+++ b/gas/testsuite/gas/mips/micromips-branch-relax.s
@@ -14,44 +14,54 @@ test:
 	addu	$3, $4, $5
 	bal	test
 	addu	$3, $4, $5
+	.ifndef	insn32
 	bals	test
 	addu	$3, $4, $5
+	.endif
 	beqz	$3, test
 	addu	$3, $4, $5
 	bnez	$3, test
 	addu	$3, $4, $5
+	.ifndef	insn32
 	b16	test2
 	addu	$3, $4, $5
 	beqz16	$3, test2
 	addu	$3, $4, $5
 	bnez16	$3, test2
 	addu	$3, $4, $5
+	.endif
 	b	test2
 	addu	$3, $4, $5
 	bc	test2
 	addu	$3, $4, $5
 	bal	test2
 	addu	$3, $4, $5
+	.ifndef	insn32
 	bals	test2
 	addu	$3, $4, $5
+	.endif
 	beqz	$3, test2
 	addu	$3, $4, $5
 	bnez	$3, test2
 	addu	$3, $4, $5
+	.ifndef	insn32
 	b16	test3
 	addu	$3, $4, $5
 	beqz16	$3, test3
 	addu	$3, $4, $5
 	bnez16	$3, test3
 	addu	$3, $4, $5
+	.endif
 	b32	test2
 	addu	$3, $4, $5
 	bc32	test2
 	addu	$3, $4, $5
 	bal32	test2
 	addu	$3, $4, $5
+	.ifndef	insn32
 	bals32	test2
 	addu	$3, $4, $5
+	.endif
 	beqz32	$3, test2
 	addu	$3, $4, $5
 	bnez32	$3, test2
@@ -66,8 +76,10 @@ test:
 	addu	$3, $4, $5
 	bal	test3
 	addu	$3, $4, $5
+	.ifndef	insn32
 	bals	test3
 	addu	$3, $4, $5
+	.endif
 	beq	$3, $4, test3
 	addu	$3, $4, $5
 	bne	$3, $4, test3
@@ -88,10 +100,12 @@ test:
 	addu	$3, $4, $5
 	bltzal	$30, test3
 	addu	$3, $4, $5
+	.ifndef	insn32
 	bgezals	$30, test3
 	addu	$3, $4, $5
 	bltzals	$30, test3
 	addu	$3, $4, $5
+	.endif
 	bc1f	test3
 	addu	$3, $4, $5
 	bc1t	test3
diff --git a/gas/testsuite/gas/mips/mips.exp b/gas/testsuite/gas/mips/mips.exp
index 9e896f5..c4345ac 100644
--- a/gas/testsuite/gas/mips/mips.exp
+++ b/gas/testsuite/gas/mips/mips.exp
@@ -1354,6 +1354,8 @@ if { [istarget mips*-*-vxworks*] } {
     run_dump_test "micromips-size-1"
     run_dump_test "micromips-branch-relax"
     run_dump_test "micromips-branch-relax-pic"
+    run_dump_test "micromips-branch-relax-insn32"
+    run_dump_test "micromips-branch-relax-insn32-pic"
     run_dump_test "micromips-branch-delay"
     run_dump_test "micromips-warn-branch-delay"
     run_dump_test "micromips-warn-branch-delay-1"



More information about the Binutils-cvs mailing list