aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gas/ChangeLog31
-rw-r--r--gas/config/tc-mips.c7
-rw-r--r--gas/testsuite/gas/mips/mips.exp10
-rw-r--r--gas/testsuite/gas/mips/mips16-branch-absolute-1.d20
-rw-r--r--gas/testsuite/gas/mips/mips16-branch-absolute-1.s22
-rw-r--r--gas/testsuite/gas/mips/mips16-branch-absolute-2.d4
-rw-r--r--gas/testsuite/gas/mips/mips16-branch-absolute-2.s20
-rw-r--r--gas/testsuite/gas/mips/mips16-branch-absolute-addend-1.d4
-rw-r--r--gas/testsuite/gas/mips/mips16-branch-absolute-addend-1.s22
-rw-r--r--gas/testsuite/gas/mips/mips16-branch-absolute-addend-n32-1.d5
-rw-r--r--gas/testsuite/gas/mips/mips16-branch-absolute-addend-n64-1.d5
-rw-r--r--gas/testsuite/gas/mips/mips16-branch-absolute-n32-1.d5
-rw-r--r--gas/testsuite/gas/mips/mips16-branch-absolute-n32-2.d5
-rw-r--r--gas/testsuite/gas/mips/mips16-branch-absolute-n64-1.d5
-rw-r--r--gas/testsuite/gas/mips/mips16-branch-absolute-n64-2.d5
-rw-r--r--gas/testsuite/gas/mips/mips16-pcrel-absolute-1.d3
-rw-r--r--gas/testsuite/gas/mips/mips16-pcrel-absolute-1.l3
-rw-r--r--gas/testsuite/gas/mips/mips16-pcrel-absolute-1.s18
-rw-r--r--ld/ChangeLog20
-rw-r--r--ld/testsuite/ld-mips-elf/mips-elf.exp16
-rw-r--r--ld/testsuite/ld-mips-elf/mips16-branch-absolute-1.d6
-rw-r--r--ld/testsuite/ld-mips-elf/mips16-branch-absolute-2.d6
-rw-r--r--ld/testsuite/ld-mips-elf/mips16-branch-absolute-addend-1.d6
-rw-r--r--ld/testsuite/ld-mips-elf/mips16-branch-absolute-addend-n32-1.d6
-rw-r--r--ld/testsuite/ld-mips-elf/mips16-branch-absolute-addend-n64-1.d6
-rw-r--r--ld/testsuite/ld-mips-elf/mips16-branch-absolute-n32-1.d6
-rw-r--r--ld/testsuite/ld-mips-elf/mips16-branch-absolute-n32-2.d6
-rw-r--r--ld/testsuite/ld-mips-elf/mips16-branch-absolute-n64-1.d6
-rw-r--r--ld/testsuite/ld-mips-elf/mips16-branch-absolute-n64-2.d6
29 files changed, 283 insertions, 1 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index d5849c0..24155f1 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,34 @@
+2017-05-02 Maciej W. Rozycki <macro@imgtec.com>
+
+ * config/tc-mips.c (append_insn): Call `symbol_append' for any
+ expression symbol created for MIPS16 relaxation.
+ (match_mips16_insn): Don't encode a constant value as an
+ immediate with a PC-relative operand.
+
+ * testsuite/gas/mips/mips16-pcrel-absolute-1.d: New test.
+ * testsuite/gas/mips/mips16-branch-absolute-1.d: New test.
+ * testsuite/gas/mips/mips16-branch-absolute-2.d: New test.
+ * testsuite/gas/mips/mips16-branch-absolute-addend-1.d: New
+ test.
+ * testsuite/gas/mips/mips16-branch-absolute-n32-1.d: New test.
+ * testsuite/gas/mips/mips16-branch-absolute-n32-2.d: New test.
+ * testsuite/gas/mips/mips16-branch-absolute-addend-n32-1.d: New
+ test.
+ * testsuite/gas/mips/mips16-branch-absolute-n64-1.d: New test.
+ * testsuite/gas/mips/mips16-branch-absolute-n64-2.d: New test.
+ * testsuite/gas/mips/mips16-branch-absolute-addend-n64-1.d: New
+ test.
+ * testsuite/gas/mips/mips16-pcrel-absolute-1.l: New stderr
+ output.
+ * testsuite/gas/mips/mips16-pcrel-absolute-1.s: New test source.
+ * testsuite/gas/mips/mips16-branch-absolute-1.s: New test
+ source.
+ * testsuite/gas/mips/mips16-branch-absolute-2.s: New test
+ source.
+ * testsuite/gas/mips/mips16-branch-absolute-addend-1.s: New test
+ source.
+ * testsuite/gas/mips/mips.exp: Run the new tests.
+
2017-04-27 Maciej W. Rozycki <macro@imgtec.com>
* config/tc-mips.c (mips16_pcrel_val): New function, factored
diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c
index fbf67a1..8c387ba 100644
--- a/gas/config/tc-mips.c
+++ b/gas/config/tc-mips.c
@@ -7419,6 +7419,7 @@ append_insn (struct mips_cl_insn *ip, expressionS *address_expr,
else
{
symbol = make_expr_symbol (address_expr);
+ symbol_append (symbol, symbol_lastP, &symbol_rootP, &symbol_lastP);
offset = 0;
}
add_relaxed_insn (ip, 4, 0,
@@ -8087,6 +8088,7 @@ match_mips16_insn (struct mips_cl_insn *insn, const struct mips_opcode *opcode,
const char *args;
const struct mips_operand *operand;
const struct mips_operand *ext_operand;
+ bfd_boolean pcrel = FALSE;
int required_insn_length;
struct mips_arg_info arg;
int relax_char;
@@ -8148,6 +8150,7 @@ match_mips16_insn (struct mips_cl_insn *insn, const struct mips_opcode *opcode,
}
else if (relax_char
&& offset_expr.X_op == O_constant
+ && !pcrel
&& calculate_reloc (*offset_reloc,
offset_expr.X_add_number,
&value))
@@ -8216,7 +8219,9 @@ match_mips16_insn (struct mips_cl_insn *insn, const struct mips_opcode *opcode,
if (!operand)
abort ();
- if (operand->type != OP_PCREL)
+ if (operand->type == OP_PCREL)
+ pcrel = TRUE;
+ else
{
ext_operand = decode_mips16_operand (c, TRUE);
if (operand != ext_operand)
diff --git a/gas/testsuite/gas/mips/mips.exp b/gas/testsuite/gas/mips/mips.exp
index 30e2342..a46f7c2 100644
--- a/gas/testsuite/gas/mips/mips.exp
+++ b/gas/testsuite/gas/mips/mips.exp
@@ -1544,6 +1544,7 @@ if { [istarget mips*-*-vxworks*] } {
run_dump_test "mips16-pcrel-addend-2"
run_dump_test "mips16-pcrel-addend-3"
run_dump_test "mips16-pcrel-absolute"
+ run_dump_test "mips16-pcrel-absolute-1"
run_dump_test "mips16-branch-reloc-0"
run_dump_test "mips16-branch-reloc-1"
run_dump_test "mips16-branch-reloc-2"
@@ -1555,12 +1556,21 @@ if { [istarget mips*-*-vxworks*] } {
run_dump_test "mips16-branch-addend-4"
run_dump_test "mips16-branch-addend-5"
run_dump_test "mips16-branch-absolute"
+ run_dump_test "mips16-branch-absolute-1"
+ run_dump_test "mips16-branch-absolute-2"
run_dump_test "mips16-branch-absolute-addend"
+ run_dump_test "mips16-branch-absolute-addend-1"
if $has_newabi {
run_dump_test "mips16-branch-absolute-n32"
+ run_dump_test "mips16-branch-absolute-n32-1"
+ run_dump_test "mips16-branch-absolute-n32-2"
run_dump_test "mips16-branch-absolute-addend-n32"
+ run_dump_test "mips16-branch-absolute-addend-n32-1"
run_dump_test "mips16-branch-absolute-n64"
+ run_dump_test "mips16-branch-absolute-n64-1"
+ run_dump_test "mips16-branch-absolute-n64-2"
run_dump_test "mips16-branch-absolute-addend-n64"
+ run_dump_test "mips16-branch-absolute-addend-n64-1"
}
run_dump_test "mips16-absolute-reloc-0"
run_dump_test "mips16-absolute-reloc-1"
diff --git a/gas/testsuite/gas/mips/mips16-branch-absolute-1.d b/gas/testsuite/gas/mips/mips16-branch-absolute-1.d
new file mode 100644
index 0000000..539bc90
--- /dev/null
+++ b/gas/testsuite/gas/mips/mips16-branch-absolute-1.d
@@ -0,0 +1,20 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 branch to absolute expression 1
+#as: -32
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> f7ff 101e b 00001000 <foo>
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 L0\001
+[0-9a-f]+ <[^>]*> f7ff 601e bteqz 00001004 <foo\+0x4>
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 L0\001
+[0-9a-f]+ <[^>]*> f7ff 611e btnez 00001008 <foo\+0x8>
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 L0\001
+[0-9a-f]+ <[^>]*> f7ff 221e beqz v0,0000100c <foo\+0xc>
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 L0\001
+[0-9a-f]+ <[^>]*> f7ff 2a1e bnez v0,00001010 <foo\+0x10>
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 L0\001
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.
diff --git a/gas/testsuite/gas/mips/mips16-branch-absolute-1.s b/gas/testsuite/gas/mips/mips16-branch-absolute-1.s
new file mode 100644
index 0000000..dc7ee4d
--- /dev/null
+++ b/gas/testsuite/gas/mips/mips16-branch-absolute-1.s
@@ -0,0 +1,22 @@
+ .text
+
+ .space 0x1000
+
+ .set bar, 0x1235
+
+ .globl foo
+ .ent foo
+ .set mips16
+foo:
+ b bar
+ bteqz bar
+ btnez bar
+ beqz $2, bar
+ bnez $2, bar
+ nop
+ .set nomips16
+ .end foo
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
diff --git a/gas/testsuite/gas/mips/mips16-branch-absolute-2.d b/gas/testsuite/gas/mips/mips16-branch-absolute-2.d
new file mode 100644
index 0000000..49a331f
--- /dev/null
+++ b/gas/testsuite/gas/mips/mips16-branch-absolute-2.d
@@ -0,0 +1,4 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 branch to absolute expression 2
+#as: -32
+#dump: mips16-branch-absolute-1.d
diff --git a/gas/testsuite/gas/mips/mips16-branch-absolute-2.s b/gas/testsuite/gas/mips/mips16-branch-absolute-2.s
new file mode 100644
index 0000000..64aebb4
--- /dev/null
+++ b/gas/testsuite/gas/mips/mips16-branch-absolute-2.s
@@ -0,0 +1,20 @@
+ .text
+
+ .space 0x1000
+
+ .globl foo
+ .ent foo
+ .set mips16
+foo:
+ b 0x1235
+ bteqz 0x1235
+ btnez 0x1235
+ beqz $2, 0x1235
+ bnez $2, 0x1235
+ nop
+ .set nomips16
+ .end foo
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
diff --git a/gas/testsuite/gas/mips/mips16-branch-absolute-addend-1.d b/gas/testsuite/gas/mips/mips16-branch-absolute-addend-1.d
new file mode 100644
index 0000000..66841c3
--- /dev/null
+++ b/gas/testsuite/gas/mips/mips16-branch-absolute-addend-1.d
@@ -0,0 +1,4 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 branch to absolute expression with addend 1
+#as: -32
+#dump: mips16-branch-absolute-1.d
diff --git a/gas/testsuite/gas/mips/mips16-branch-absolute-addend-1.s b/gas/testsuite/gas/mips/mips16-branch-absolute-addend-1.s
new file mode 100644
index 0000000..e75d7e1
--- /dev/null
+++ b/gas/testsuite/gas/mips/mips16-branch-absolute-addend-1.s
@@ -0,0 +1,22 @@
+ .text
+
+ .space 0x1000
+
+ .set bar, 0x12345679
+
+ .globl foo
+ .ent foo
+ .set mips16
+foo:
+ b bar + 0x1234
+ bteqz bar + 0x1234
+ btnez bar + 0x1234
+ beqz $2, bar + 0x1234
+ bnez $2, bar + 0x1234
+ nop
+ .set nomips16
+ .end foo
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
diff --git a/gas/testsuite/gas/mips/mips16-branch-absolute-addend-n32-1.d b/gas/testsuite/gas/mips/mips16-branch-absolute-addend-n32-1.d
new file mode 100644
index 0000000..bf565a3
--- /dev/null
+++ b/gas/testsuite/gas/mips/mips16-branch-absolute-addend-n32-1.d
@@ -0,0 +1,5 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 branch to absolute expression with addend 1 (n32)
+#as: -n32 -march=from-abi
+#source: mips16-branch-absolute-addend-1.s
+#dump: mips16-branch-absolute-addend-n32.d
diff --git a/gas/testsuite/gas/mips/mips16-branch-absolute-addend-n64-1.d b/gas/testsuite/gas/mips/mips16-branch-absolute-addend-n64-1.d
new file mode 100644
index 0000000..c953821
--- /dev/null
+++ b/gas/testsuite/gas/mips/mips16-branch-absolute-addend-n64-1.d
@@ -0,0 +1,5 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 branch to absolute expression with addend 1 (n64)
+#as: -64 -march=from-abi
+#source: mips16-branch-absolute-addend-1.s
+#dump: mips16-branch-absolute-addend-n64.d
diff --git a/gas/testsuite/gas/mips/mips16-branch-absolute-n32-1.d b/gas/testsuite/gas/mips/mips16-branch-absolute-n32-1.d
new file mode 100644
index 0000000..543696d
--- /dev/null
+++ b/gas/testsuite/gas/mips/mips16-branch-absolute-n32-1.d
@@ -0,0 +1,5 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 branch to absolute expression 1 (n32)
+#as: -n32 -march=from-abi
+#source: mips16-branch-absolute-1.s
+#dump: mips16-branch-absolute-n32.d
diff --git a/gas/testsuite/gas/mips/mips16-branch-absolute-n32-2.d b/gas/testsuite/gas/mips/mips16-branch-absolute-n32-2.d
new file mode 100644
index 0000000..5d80db8
--- /dev/null
+++ b/gas/testsuite/gas/mips/mips16-branch-absolute-n32-2.d
@@ -0,0 +1,5 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 branch to absolute expression 2 (n32)
+#as: -n32 -march=from-abi
+#source: mips16-branch-absolute-2.s
+#dump: mips16-branch-absolute-n32.d
diff --git a/gas/testsuite/gas/mips/mips16-branch-absolute-n64-1.d b/gas/testsuite/gas/mips/mips16-branch-absolute-n64-1.d
new file mode 100644
index 0000000..0ea0c2d
--- /dev/null
+++ b/gas/testsuite/gas/mips/mips16-branch-absolute-n64-1.d
@@ -0,0 +1,5 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 branch to absolute expression 1 (n64)
+#as: -64 -march=from-abi
+#source: mips16-branch-absolute-1.s
+#dump: mips16-branch-absolute-n64.d
diff --git a/gas/testsuite/gas/mips/mips16-branch-absolute-n64-2.d b/gas/testsuite/gas/mips/mips16-branch-absolute-n64-2.d
new file mode 100644
index 0000000..7d338f3
--- /dev/null
+++ b/gas/testsuite/gas/mips/mips16-branch-absolute-n64-2.d
@@ -0,0 +1,5 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 branch to absolute expression 2 (n64)
+#as: -64 -march=from-abi
+#source: mips16-branch-absolute-2.s
+#dump: mips16-branch-absolute-n64.d
diff --git a/gas/testsuite/gas/mips/mips16-pcrel-absolute-1.d b/gas/testsuite/gas/mips/mips16-pcrel-absolute-1.d
new file mode 100644
index 0000000..d9f6fb7
--- /dev/null
+++ b/gas/testsuite/gas/mips/mips16-pcrel-absolute-1.d
@@ -0,0 +1,3 @@
+#name: MIPS16 PC-relative reference to absolute expression 1
+#as: -32
+#error-output: mips16-pcrel-absolute-1.l
diff --git a/gas/testsuite/gas/mips/mips16-pcrel-absolute-1.l b/gas/testsuite/gas/mips/mips16-pcrel-absolute-1.l
new file mode 100644
index 0000000..60054fa
--- /dev/null
+++ b/gas/testsuite/gas/mips/mips16-pcrel-absolute-1.l
@@ -0,0 +1,3 @@
+.*: Assembler messages:
+.*:10: Error: unsupported relocation
+.*:11: Error: unsupported relocation
diff --git a/gas/testsuite/gas/mips/mips16-pcrel-absolute-1.s b/gas/testsuite/gas/mips/mips16-pcrel-absolute-1.s
new file mode 100644
index 0000000..833a967
--- /dev/null
+++ b/gas/testsuite/gas/mips/mips16-pcrel-absolute-1.s
@@ -0,0 +1,18 @@
+ .text
+
+ .space 0x1000
+
+ .set bar, 0x1234
+
+ .ent foo
+ .set mips16
+foo:
+ la $2, bar
+ lw $2, bar
+ nop
+ .set nomips16
+ .end foo
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
diff --git a/ld/ChangeLog b/ld/ChangeLog
index ff52608..92af8b9 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,23 @@
+2017-05-02 Maciej W. Rozycki <macro@imgtec.com>
+
+ * testsuite/ld-mips-elf/mips16-branch-absolute-1.d: New test.
+ * testsuite/ld-mips-elf/mips16-branch-absolute-2.d: New test.
+ * testsuite/ld-mips-elf/mips16-branch-absolute-addend-1.d: New
+ test.
+ * testsuite/ld-mips-elf/mips16-branch-absolute-n32-1.d: New
+ test.
+ * testsuite/ld-mips-elf/mips16-branch-absolute-n32-2.d: New
+ test.
+ * testsuite/ld-mips-elf/mips16-branch-absolute-addend-n32-1.d:
+ New test.
+ * testsuite/ld-mips-elf/mips16-branch-absolute-n64-1.d: New
+ test.
+ * testsuite/ld-mips-elf/mips16-branch-absolute-n64-2.d: New
+ test.
+ * testsuite/ld-mips-elf/mips16-branch-absolute-addend-n64-1.d:
+ New test.
+ * testsuite/ld-mips-elf/mips-elf.exp: Run the new tests.
+
2017-05-02 H.J. Lu <hongjiu.lu@intel.com>
* testsuite/ld-i386/tls.exp: Add -Wl,--no-as-needed to
diff --git a/ld/testsuite/ld-mips-elf/mips-elf.exp b/ld/testsuite/ld-mips-elf/mips-elf.exp
index f824e7c..068ea54 100644
--- a/ld/testsuite/ld-mips-elf/mips-elf.exp
+++ b/ld/testsuite/ld-mips-elf/mips-elf.exp
@@ -159,17 +159,33 @@ run_dump_test "mips16-branch-3" [list [list ld $abi_ldflags(o32)]]
run_dump_test "mips16-branch-addend-2" [list [list ld $abi_ldflags(o32)]]
run_dump_test "mips16-branch-addend-3" [list [list ld $abi_ldflags(o32)]]
run_dump_test "mips16-branch-absolute" [list [list ld $abi_ldflags(o32)]]
+run_dump_test "mips16-branch-absolute-1" [list [list ld $abi_ldflags(o32)]]
+run_dump_test "mips16-branch-absolute-2" [list [list ld $abi_ldflags(o32)]]
run_dump_test "mips16-branch-absolute-addend" \
[list [list ld $abi_ldflags(o32)]]
+run_dump_test "mips16-branch-absolute-addend-1" \
+ [list [list ld $abi_ldflags(o32)]]
if $has_newabi {
run_dump_test "mips16-branch-absolute-n32" \
[list [list ld $abi_ldflags(n32)]]
+ run_dump_test "mips16-branch-absolute-n32-1" \
+ [list [list ld $abi_ldflags(n32)]]
+ run_dump_test "mips16-branch-absolute-n32-2" \
+ [list [list ld $abi_ldflags(n32)]]
run_dump_test "mips16-branch-absolute-addend-n32" \
[list [list ld $abi_ldflags(n32)]]
+ run_dump_test "mips16-branch-absolute-addend-n32-1" \
+ [list [list ld $abi_ldflags(n32)]]
run_dump_test "mips16-branch-absolute-n64" \
[list [list ld $abi_ldflags(n64)]]
+ run_dump_test "mips16-branch-absolute-n64-1" \
+ [list [list ld $abi_ldflags(n64)]]
+ run_dump_test "mips16-branch-absolute-n64-2" \
+ [list [list ld $abi_ldflags(n64)]]
run_dump_test "mips16-branch-absolute-addend-n64" \
[list [list ld $abi_ldflags(n64)]]
+ run_dump_test "mips16-branch-absolute-addend-n64-1" \
+ [list [list ld $abi_ldflags(n64)]]
}
run_dump_test "micromips-branch-absolute" [list [list ld $abi_ldflags(o32)]]
diff --git a/ld/testsuite/ld-mips-elf/mips16-branch-absolute-1.d b/ld/testsuite/ld-mips-elf/mips16-branch-absolute-1.d
new file mode 100644
index 0000000..9e0aa5f
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/mips16-branch-absolute-1.d
@@ -0,0 +1,6 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 link branch to absolute expression 1
+#source: ../../../gas/testsuite/gas/mips/mips16-branch-absolute-1.s
+#as: -EB -32
+#ld: -EB -Ttext 0 -e foo
+#dump: mips16-branch-absolute.d
diff --git a/ld/testsuite/ld-mips-elf/mips16-branch-absolute-2.d b/ld/testsuite/ld-mips-elf/mips16-branch-absolute-2.d
new file mode 100644
index 0000000..5e7e6f9
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/mips16-branch-absolute-2.d
@@ -0,0 +1,6 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 link branch to absolute expression 2
+#source: ../../../gas/testsuite/gas/mips/mips16-branch-absolute-2.s
+#as: -EB -32
+#ld: -EB -Ttext 0 -e foo
+#dump: mips16-branch-absolute.d
diff --git a/ld/testsuite/ld-mips-elf/mips16-branch-absolute-addend-1.d b/ld/testsuite/ld-mips-elf/mips16-branch-absolute-addend-1.d
new file mode 100644
index 0000000..40f6ccb
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/mips16-branch-absolute-addend-1.d
@@ -0,0 +1,6 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 link branch to absolute expression with addend 1
+#source: ../../../gas/testsuite/gas/mips/mips16-branch-absolute-addend-1.s
+#as: -EB -32
+#ld: -EB -Ttext 0x12340000 -e foo
+#dump: mips16-branch-absolute-addend.d
diff --git a/ld/testsuite/ld-mips-elf/mips16-branch-absolute-addend-n32-1.d b/ld/testsuite/ld-mips-elf/mips16-branch-absolute-addend-n32-1.d
new file mode 100644
index 0000000..8e833d8
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/mips16-branch-absolute-addend-n32-1.d
@@ -0,0 +1,6 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 link branch to absolute expression with addend 1 (n32)
+#source: ../../../gas/testsuite/gas/mips/mips16-branch-absolute-addend-1.s
+#as: -EB -n32 -march=from-abi
+#ld: -EB -Ttext 0x12340000 -e foo
+#dump: mips16-branch-absolute-addend.d
diff --git a/ld/testsuite/ld-mips-elf/mips16-branch-absolute-addend-n64-1.d b/ld/testsuite/ld-mips-elf/mips16-branch-absolute-addend-n64-1.d
new file mode 100644
index 0000000..094b2d0
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/mips16-branch-absolute-addend-n64-1.d
@@ -0,0 +1,6 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 link branch to absolute expression with addend 1 (n64)
+#source: ../../../gas/testsuite/gas/mips/mips16-branch-absolute-addend-1.s
+#as: -EB -64 -march=from-abi
+#ld: -EB -Ttext 0x12340000 -e foo
+#dump: mips16-branch-absolute-addend.d
diff --git a/ld/testsuite/ld-mips-elf/mips16-branch-absolute-n32-1.d b/ld/testsuite/ld-mips-elf/mips16-branch-absolute-n32-1.d
new file mode 100644
index 0000000..587e79a
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/mips16-branch-absolute-n32-1.d
@@ -0,0 +1,6 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 link branch to absolute expression 1 (n32)
+#source: ../../../gas/testsuite/gas/mips/mips16-branch-absolute-1.s
+#as: -EB -n32 -march=from-abi
+#ld: -EB -Ttext 0 -e foo
+#dump: mips16-branch-absolute.d
diff --git a/ld/testsuite/ld-mips-elf/mips16-branch-absolute-n32-2.d b/ld/testsuite/ld-mips-elf/mips16-branch-absolute-n32-2.d
new file mode 100644
index 0000000..86c98c3
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/mips16-branch-absolute-n32-2.d
@@ -0,0 +1,6 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 link branch to absolute expression 2 (n32)
+#source: ../../../gas/testsuite/gas/mips/mips16-branch-absolute-2.s
+#as: -EB -n32 -march=from-abi
+#ld: -EB -Ttext 0 -e foo
+#dump: mips16-branch-absolute.d
diff --git a/ld/testsuite/ld-mips-elf/mips16-branch-absolute-n64-1.d b/ld/testsuite/ld-mips-elf/mips16-branch-absolute-n64-1.d
new file mode 100644
index 0000000..dc067f8
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/mips16-branch-absolute-n64-1.d
@@ -0,0 +1,6 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 link branch to absolute expression 1 (n64)
+#source: ../../../gas/testsuite/gas/mips/mips16-branch-absolute-1.s
+#as: -EB -64 -march=from-abi
+#ld: -EB -Ttext 0 -e foo
+#dump: mips16-branch-absolute.d
diff --git a/ld/testsuite/ld-mips-elf/mips16-branch-absolute-n64-2.d b/ld/testsuite/ld-mips-elf/mips16-branch-absolute-n64-2.d
new file mode 100644
index 0000000..1a6ba3d
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/mips16-branch-absolute-n64-2.d
@@ -0,0 +1,6 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 link branch to absolute expression 2 (n64)
+#source: ../../../gas/testsuite/gas/mips/mips16-branch-absolute-2.s
+#as: -EB -64 -march=from-abi
+#ld: -EB -Ttext 0 -e foo
+#dump: mips16-branch-absolute.d