+2017-05-03 Maciej W. Rozycki <macro@imgtec.com>
+
+ * config/tc-mips.c (RELAX_MIPS16_ENCODE): Add `pic', `sym32' and
+ `nomacro' flags.
+ (RELAX_MIPS16_PIC, RELAX_MIPS16_SYM32, RELAX_MIPS16_NOMACRO):
+ New macros.
+ (RELAX_MIPS16_USER_SMALL, RELAX_MIPS16_USER_EXT)
+ (RELAX_MIPS16_DSLOT, RELAX_MIPS16_JAL_DSLOT)
+ (RELAX_MIPS16_EXTENDED, RELAX_MIPS16_MARK_EXTENDED)
+ (RELAX_MIPS16_CLEAR_EXTENDED, RELAX_MIPS16_ALWAYS_EXTENDED)
+ (RELAX_MIPS16_MARK_ALWAYS_EXTENDED)
+ (RELAX_MIPS16_CLEAR_ALWAYS_EXTENDED): Shift bits.
+ (RELAX_MIPS16_MACRO, RELAX_MIPS16_MARK_MACRO)
+ (RELAX_MIPS16_CLEAR_MACRO): New macros.
+ (append_insn): Pass `mips_pic', HAVE_32BIT_SYMBOLS and
+ `mips_opts.warn_about_macros' settings to RELAX_MIPS16_ENCODE.
+ (mips16_macro_frag): New function.
+ (md_estimate_size_before_relax): Handle HI16/LO16 relaxation.
+ (mips_relax_frag): Likewise.
+ (md_convert_frag): Likewise.
+
+ * testsuite/gas/mips/mips16@relax-swap3.d: Remove error output,
+ add dump patterns.
+ * testsuite/gas/mips/mips16e@relax-swap3.d: New test
+ subarchitecture.
+ * testsuite/gas/mips/micromips@relax-swap3.d: Remove trailing
+ NOP padding.
+ * testsuite/gas/mips/mips16-pcrel-reloc-2.d: Remove error
+ output, add dump patterns.
+ * testsuite/gas/mips/mips16-pcrel-reloc-3.d: Remove error
+ output, add dump patterns.
+ * testsuite/gas/mips/mips16-pcrel-reloc-6.d: Remove error
+ output, add dump patterns.
+ * testsuite/gas/mips/mips16-pcrel-reloc-7.d: Remove error
+ output, add dump patterns.
+ * testsuite/gas/mips/mips16-pcrel-addend-2.d: Remove error
+ output, add dump patterns.
+ * testsuite/gas/mips/mips16-pcrel-addend-3.d: Remove error
+ output, add dump patterns.
+ * testsuite/gas/mips/mips16-pcrel-absolute.d: Remove error
+ output, add dump patterns.
+ * testsuite/gas/mips/mips16-pcrel-absolute-1.d: Remove error
+ output, add dump patterns.
+ * testsuite/gas/mips/mips16@relax-swap3.l: Remove file.
+ * testsuite/gas/mips/mips16-pcrel-reloc-2.l: Remove file.
+ * testsuite/gas/mips/mips16-pcrel-reloc-3.l: Remove file.
+ * testsuite/gas/mips/mips16-pcrel-reloc-6.l: Remove file.
+ * testsuite/gas/mips/mips16-pcrel-reloc-7.l: Remove file.
+ * testsuite/gas/mips/mips16-pcrel-addend-2.l: Remove file.
+ * testsuite/gas/mips/mips16-pcrel-addend-3.l: Remove file.
+ * testsuite/gas/mips/mips16-pcrel-absolute.l: Remove file.
+ * testsuite/gas/mips/mips16-pcrel-absolute-1.l: Remove file.
+ * testsuite/gas/mips/relax-swap3.s: Adjust trailing padding.
+
+ * testsuite/gas/mips/mips16-pcrel-0.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-1.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-2.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-3.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-4.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-5.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-pic-0.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-pic-1.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-n32-0.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-n32-1.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-n64-sym32-0.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-n64-sym32-1.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-n64-0.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-n64-1.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-delay-0.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-delay-1.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-addend-4.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-addend-5.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-addend-6.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-addend-7.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-addend-8.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-addend-9.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-addend-pic-8.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-addend-pic-9.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-addend-n32-8.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-addend-n32-9.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-addend-n64-sym32-8.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-addend-n64-sym32-9.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-addend-n64-8.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-addend-n64-9.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-absolute-2.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-absolute-3.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-absolute-4.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-absolute-5.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-absolute-6.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-absolute-7.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-absolute-pic-4.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-absolute-pic-6.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-absolute-n32-4.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-absolute-n32-6.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-absolute-n64-4.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-absolute-n64-6.d: New test.
+ * testsuite/gas/mips/mips16-pcrel-absolute-n64-sym32-4.d: New
+ test.
+ * testsuite/gas/mips/mips16-pcrel-absolute-n64-sym32-6.d: New
+ test.
+ * testsuite/gas/mips/mips16-pcrel-absolute-pic-n32-4.d: New
+ test.
+ * testsuite/gas/mips/mips16-pcrel-absolute-pic-n32-6.d: New
+ test.
+ * testsuite/gas/mips/mips16-pcrel-absolute-pic-n64-4.d: New
+ test.
+ * testsuite/gas/mips/mips16-pcrel-absolute-pic-n64-6.d: New
+ test.
+ * testsuite/gas/mips/mips16-pcrel-absolute-pic-n64-sym32-4.d:
+ New test.
+ * testsuite/gas/mips/mips16-pcrel-absolute-pic-n64-sym32-6.d:
+ New test.
+ * testsuite/gas/mips/mips16-pcrel-0.l: New stderr output.
+ * testsuite/gas/mips/mips16-pcrel-1.l: New stderr output.
+ * testsuite/gas/mips/mips16-pcrel-2.l: New stderr output.
+ * testsuite/gas/mips/mips16-pcrel-3.l: New stderr output.
+ * testsuite/gas/mips/mips16-pcrel-4.l: New stderr output.
+ * testsuite/gas/mips/mips16-pcrel-5.l: New stderr output.
+ * testsuite/gas/mips/mips16-pcrel-delay-0.l: New stderr output.
+ * testsuite/gas/mips/mips16-pcrel-delay-1.l: New stderr output.
+ * testsuite/gas/mips/mips16-pcrel-addend-8.l: New stderr output.
+ * testsuite/gas/mips/mips16-pcrel-addend-9.l: New stderr output.
+ * testsuite/gas/mips/mips16-pcrel-absolute-4.l: New stderr
+ output.
+ * testsuite/gas/mips/mips16-pcrel-absolute-6.l: New stderr
+ output.
+ * testsuite/gas/mips/mips16-pcrel-0.s: New test source.
+ * testsuite/gas/mips/mips16-pcrel-1.s: New test source.
+ * testsuite/gas/mips/mips16-pcrel-2.s: New test source.
+ * testsuite/gas/mips/mips16-pcrel-3.s: New test source.
+ * testsuite/gas/mips/mips16-pcrel-4.s: New test source.
+ * testsuite/gas/mips/mips16-pcrel-5.s: New test source.
+ * testsuite/gas/mips/mips16-pcrel-delay-0.s: New test source.
+ * testsuite/gas/mips/mips16-pcrel-delay-1.s: New test source.
+ * testsuite/gas/mips/mips16-pcrel-addend-4.s: New test source.
+ * testsuite/gas/mips/mips16-pcrel-addend-5.s: New test source.
+ * testsuite/gas/mips/mips16-pcrel-addend-6.s: New test source.
+ * testsuite/gas/mips/mips16-pcrel-addend-7.s: New test source.
+ * testsuite/gas/mips/mips16-pcrel-addend-8.s: New test source.
+ * testsuite/gas/mips/mips16-pcrel-addend-9.s: New test source.
+ * testsuite/gas/mips/mips16-pcrel-absolute-2.s: New test.
+ * testsuite/gas/mips/mips16-pcrel-absolute-3.s: New test.
+ * testsuite/gas/mips/mips16-pcrel-absolute-4.s: New test.
+ * testsuite/gas/mips/mips16-pcrel-absolute-5.s: New test.
+ * testsuite/gas/mips/mips16-pcrel-absolute-6.s: New test.
+ * testsuite/gas/mips/mips16-pcrel-absolute-7.s: New test.
+ * testsuite/gas/mips/mips.exp: Run the new tests.
+
2017-05-03 Nick Clifton <nickc@redhat.com>
PR gas/20941
store whether this is known to be a branch to a different section,
whether we have tried to relax this frag yet, and whether we have
ever extended a PC relative fragment because of a shift count. */
-#define RELAX_MIPS16_ENCODE(type, small, ext, dslot, jal_dslot) \
+#define RELAX_MIPS16_ENCODE(type, pic, sym32, nomacro, \
+ small, ext, \
+ dslot, jal_dslot) \
(0x80000000 \
| ((type) & 0xff) \
- | ((small) ? 0x100 : 0) \
- | ((ext) ? 0x200 : 0) \
- | ((dslot) ? 0x400 : 0) \
- | ((jal_dslot) ? 0x800 : 0))
+ | ((pic) ? 0x100 : 0) \
+ | ((sym32) ? 0x200 : 0) \
+ | ((nomacro) ? 0x400 : 0) \
+ | ((small) ? 0x800 : 0) \
+ | ((ext) ? 0x1000 : 0) \
+ | ((dslot) ? 0x2000 : 0) \
+ | ((jal_dslot) ? 0x4000 : 0))
+
#define RELAX_MIPS16_P(i) (((i) & 0xc0000000) == 0x80000000)
#define RELAX_MIPS16_TYPE(i) ((i) & 0xff)
-#define RELAX_MIPS16_USER_SMALL(i) (((i) & 0x100) != 0)
-#define RELAX_MIPS16_USER_EXT(i) (((i) & 0x200) != 0)
-#define RELAX_MIPS16_DSLOT(i) (((i) & 0x400) != 0)
-#define RELAX_MIPS16_JAL_DSLOT(i) (((i) & 0x800) != 0)
-#define RELAX_MIPS16_EXTENDED(i) (((i) & 0x1000) != 0)
-#define RELAX_MIPS16_MARK_EXTENDED(i) ((i) | 0x1000)
-#define RELAX_MIPS16_CLEAR_EXTENDED(i) ((i) &~ 0x1000)
-#define RELAX_MIPS16_ALWAYS_EXTENDED(i) (((i) & 0x2000) != 0)
-#define RELAX_MIPS16_MARK_ALWAYS_EXTENDED(i) ((i) | 0x2000)
-#define RELAX_MIPS16_CLEAR_ALWAYS_EXTENDED(i) ((i) & ~0x2000)
+#define RELAX_MIPS16_PIC(i) (((i) & 0x100) != 0)
+#define RELAX_MIPS16_SYM32(i) (((i) & 0x200) != 0)
+#define RELAX_MIPS16_NOMACRO(i) (((i) & 0x400) != 0)
+#define RELAX_MIPS16_USER_SMALL(i) (((i) & 0x800) != 0)
+#define RELAX_MIPS16_USER_EXT(i) (((i) & 0x1000) != 0)
+#define RELAX_MIPS16_DSLOT(i) (((i) & 0x2000) != 0)
+#define RELAX_MIPS16_JAL_DSLOT(i) (((i) & 0x4000) != 0)
+
+#define RELAX_MIPS16_EXTENDED(i) (((i) & 0x8000) != 0)
+#define RELAX_MIPS16_MARK_EXTENDED(i) ((i) | 0x8000)
+#define RELAX_MIPS16_CLEAR_EXTENDED(i) ((i) & ~0x8000)
+#define RELAX_MIPS16_ALWAYS_EXTENDED(i) (((i) & 0x10000) != 0)
+#define RELAX_MIPS16_MARK_ALWAYS_EXTENDED(i) ((i) | 0x10000)
+#define RELAX_MIPS16_CLEAR_ALWAYS_EXTENDED(i) ((i) & ~0x10000)
+#define RELAX_MIPS16_MACRO(i) (((i) & 0x20000) != 0)
+#define RELAX_MIPS16_MARK_MACRO(i) ((i) | 0x20000)
+#define RELAX_MIPS16_CLEAR_MACRO(i) ((i) & ~0x20000)
/* For microMIPS code, we use relaxation similar to one we use for
MIPS16 code. Some instructions that take immediate values support
symbol_append (symbol, symbol_lastP, &symbol_rootP, &symbol_lastP);
offset = 0;
}
- add_relaxed_insn (ip, 4, 0,
+ add_relaxed_insn (ip, 12, 0,
RELAX_MIPS16_ENCODE
(*reloc_type - BFD_RELOC_UNUSED,
+ mips_pic != NO_PIC,
+ HAVE_32BIT_SYMBOLS,
+ mips_opts.warn_about_macros,
require_unextended, require_extended,
delayed_branch_p (&history[0]),
history[0].mips16_absolute_jump_p),
return !mips16_immed_in_range_p (operand, BFD_RELOC_UNUSED, val);
}
+/* Given a MIPS16 variant frag FRAGP, return non-zero if it needs
+ macro expansion. SEC is the section the frag is in. We only
+ support PC-relative instructions (LA, DLA, LW, LD) here, in
+ non-PIC code using 32-bit addressing. */
+
+static int
+mips16_macro_frag (fragS *fragp, asection *sec, long stretch)
+{
+ const struct mips_pcrel_operand *pcrel_op;
+ const struct mips_int_operand *operand;
+ offsetT val;
+ segT symsec;
+ int type;
+
+ gas_assert (!RELAX_MIPS16_USER_SMALL (fragp->fr_subtype));
+
+ if (RELAX_MIPS16_USER_EXT (fragp->fr_subtype))
+ return 0;
+ if (!RELAX_MIPS16_SYM32 (fragp->fr_subtype))
+ return 0;
+
+ type = RELAX_MIPS16_TYPE (fragp->fr_subtype);
+ switch (type)
+ {
+ case 'A':
+ case 'B':
+ case 'E':
+ symsec = S_GET_SEGMENT (fragp->fr_symbol);
+ if (bfd_is_abs_section (symsec))
+ return 1;
+ if (RELAX_MIPS16_PIC (fragp->fr_subtype))
+ return 0;
+ if (S_FORCE_RELOC (fragp->fr_symbol, TRUE) || sec != symsec)
+ return 1;
+
+ operand = mips16_immed_operand (type, TRUE);
+ val = S_GET_VALUE (fragp->fr_symbol) + fragp->fr_offset;
+ pcrel_op = (const struct mips_pcrel_operand *) operand;
+ val = mips16_pcrel_val (fragp, pcrel_op, val, stretch);
+
+ return !mips16_immed_in_range_p (operand, BFD_RELOC_UNUSED, val);
+
+ default:
+ return 0;
+ }
+}
+
/* Compute the length of a branch sequence, and adjust the
RELAX_BRANCH_TOOFAR bit accordingly. If FRAGP is NULL, the
worst-case length is computed, with UPDATE being used to indicate
}
if (RELAX_MIPS16_P (fragp->fr_subtype))
- /* We don't want to modify the EXTENDED bit here; it might get us
- into infinite loops. We change it only in mips_relax_frag(). */
- return (RELAX_MIPS16_EXTENDED (fragp->fr_subtype) ? 4 : 2);
+ {
+ /* We don't want to modify the EXTENDED bit here; it might get us
+ into infinite loops. We change it only in mips_relax_frag(). */
+ if (RELAX_MIPS16_MACRO (fragp->fr_subtype))
+ return 12;
+ else
+ return RELAX_MIPS16_EXTENDED (fragp->fr_subtype) ? 4 : 2;
+ }
if (RELAX_MICROMIPS_P (fragp->fr_subtype))
{
if (! RELAX_MIPS16_P (fragp->fr_subtype))
return 0;
- if (mips16_extended_frag (fragp, sec, stretch))
+ if (!mips16_extended_frag (fragp, sec, stretch))
{
- if (RELAX_MIPS16_EXTENDED (fragp->fr_subtype))
+ if (RELAX_MIPS16_MACRO (fragp->fr_subtype))
+ {
+ fragp->fr_subtype = RELAX_MIPS16_CLEAR_MACRO (fragp->fr_subtype);
+ return -10;
+ }
+ else if (RELAX_MIPS16_EXTENDED (fragp->fr_subtype))
+ {
+ fragp->fr_subtype = RELAX_MIPS16_CLEAR_EXTENDED (fragp->fr_subtype);
+ return -2;
+ }
+ else
+ return 0;
+ }
+ else if (!mips16_macro_frag (fragp, sec, stretch))
+ {
+ if (RELAX_MIPS16_MACRO (fragp->fr_subtype))
+ {
+ fragp->fr_subtype = RELAX_MIPS16_CLEAR_MACRO (fragp->fr_subtype);
+ fragp->fr_subtype = RELAX_MIPS16_MARK_EXTENDED (fragp->fr_subtype);
+ return -8;
+ }
+ else if (!RELAX_MIPS16_EXTENDED (fragp->fr_subtype))
+ {
+ fragp->fr_subtype = RELAX_MIPS16_MARK_EXTENDED (fragp->fr_subtype);
+ return 2;
+ }
+ else
return 0;
- fragp->fr_subtype = RELAX_MIPS16_MARK_EXTENDED (fragp->fr_subtype);
- return 2;
}
else
{
- if (! RELAX_MIPS16_EXTENDED (fragp->fr_subtype))
+ if (RELAX_MIPS16_MACRO (fragp->fr_subtype))
return 0;
- fragp->fr_subtype = RELAX_MIPS16_CLEAR_EXTENDED (fragp->fr_subtype);
- return -2;
+ else if (RELAX_MIPS16_EXTENDED (fragp->fr_subtype))
+ {
+ fragp->fr_subtype = RELAX_MIPS16_CLEAR_EXTENDED (fragp->fr_subtype);
+ fragp->fr_subtype = RELAX_MIPS16_MARK_MACRO (fragp->fr_subtype);
+ return 8;
+ }
+ else
+ {
+ fragp->fr_subtype = RELAX_MIPS16_MARK_MACRO (fragp->fr_subtype);
+ return 10;
+ }
}
return 0;
const struct mips_int_operand *operand;
offsetT val;
char *buf;
- unsigned int user_length, length;
+ unsigned int user_length;
bfd_boolean need_reloc;
unsigned long insn;
+ bfd_boolean mac;
bfd_boolean ext;
segT symsec;
type = RELAX_MIPS16_TYPE (fragp->fr_subtype);
operand = mips16_immed_operand (type, FALSE);
+ mac = RELAX_MIPS16_MACRO (fragp->fr_subtype);
ext = RELAX_MIPS16_EXTENDED (fragp->fr_subtype);
val = resolve_symbol_value (fragp->fr_symbol) + fragp->fr_offset;
symsec = S_GET_SEGMENT (fragp->fr_symbol);
need_reloc = (S_FORCE_RELOC (fragp->fr_symbol, TRUE)
- || (operand->root.type == OP_PCREL
+ || (operand->root.type == OP_PCREL && !mac
? asec != symsec
: !bfd_is_abs_section (symsec)));
- if (operand->root.type == OP_PCREL)
+ if (operand->root.type == OP_PCREL && !mac)
{
const struct mips_pcrel_operand *pcrel_op;
record_alignment (asec, operand->shift);
}
- if (ext
- && (RELAX_MIPS16_JAL_DSLOT (fragp->fr_subtype)
- || RELAX_MIPS16_DSLOT (fragp->fr_subtype)))
+ if (RELAX_MIPS16_JAL_DSLOT (fragp->fr_subtype)
+ || RELAX_MIPS16_DSLOT (fragp->fr_subtype))
+ {
+ if (mac)
+ as_warn_where (fragp->fr_file, fragp->fr_line,
+ _("macro instruction expanded into multiple "
+ "instructions in a branch delay slot"));
+ else if (ext)
+ as_warn_where (fragp->fr_file, fragp->fr_line,
+ _("extended instruction in a branch delay slot"));
+ }
+ else if (RELAX_MIPS16_NOMACRO (fragp->fr_subtype) && mac)
as_warn_where (fragp->fr_file, fragp->fr_line,
- _("extended instruction in delay slot"));
+ _("macro instruction expanded into multiple "
+ "instructions"));
buf = fragp->fr_literal + fragp->fr_fix;
else
user_length = 0;
- if (need_reloc)
+ if (mac)
{
- bfd_reloc_code_real_type reloc = BFD_RELOC_NONE;
- expressionS exp;
- fixS *fixp;
+ unsigned long reg;
+ unsigned long new;
+ unsigned long op;
+
+ gas_assert (type == 'A' || type == 'B' || type == 'E');
+ gas_assert (RELAX_MIPS16_SYM32 (fragp->fr_subtype));
- switch (type)
+ if (need_reloc)
{
- case 'p':
- case 'q':
- reloc = BFD_RELOC_MIPS16_16_PCREL_S1;
+ fixS *fixp;
+
+ gas_assert (!RELAX_MIPS16_PIC (fragp->fr_subtype));
+
+ fixp = fix_new (fragp, buf - fragp->fr_literal, 4,
+ fragp->fr_symbol, fragp->fr_offset,
+ FALSE, BFD_RELOC_MIPS16_HI16_S);
+ fixp->fx_file = fragp->fr_file;
+ fixp->fx_line = fragp->fr_line;
+
+ fixp = fix_new (fragp, buf - fragp->fr_literal + 8, 4,
+ fragp->fr_symbol, fragp->fr_offset,
+ FALSE, BFD_RELOC_MIPS16_LO16);
+ fixp->fx_file = fragp->fr_file;
+ fixp->fx_line = fragp->fr_line;
+
+ val = 0;
+ }
+
+ switch (insn & 0xf800)
+ {
+ case 0x0800: /* ADDIU */
+ reg = (insn >> 8) & 0x7;
+ op = 0xf0004800 | (reg << 8);
break;
- default:
- as_bad_where (fragp->fr_file, fragp->fr_line,
- _("unsupported relocation"));
+ case 0xb000: /* LW */
+ reg = (insn >> 8) & 0x7;
+ op = 0xf0009800 | (reg << 8) | (reg << 5);
break;
+ case 0xf800: /* I64 */
+ reg = (insn >> 5) & 0x7;
+ switch (insn & 0x0700)
+ {
+ case 0x0400: /* LD */
+ op = 0xf0003800 | (reg << 8) | (reg << 5);
+ break;
+ case 0x0600: /* DADDIU */
+ op = 0xf000fd00 | (reg << 5);
+ break;
+ default:
+ abort ();
+ }
+ break;
+ default:
+ abort ();
}
- if (reloc == BFD_RELOC_NONE)
- ;
- else if (ext)
+
+ new = 0xf0006800 | (reg << 8); /* LI */
+ new |= mips16_immed_extend ((val + 0x8000) >> 16, 16);
+ buf = write_compressed_insn (buf, new, 4);
+ new = 0xf4003000 | (reg << 8) | (reg << 5); /* SLL */
+ buf = write_compressed_insn (buf, new, 4);
+ op |= mips16_immed_extend (val, 16);
+ buf = write_compressed_insn (buf, op, 4);
+
+ fragp->fr_fix += 12;
+ }
+ else
+ {
+ unsigned int length = ext ? 4 : 2;
+
+ if (need_reloc)
{
- exp.X_op = O_symbol;
- exp.X_add_symbol = fragp->fr_symbol;
- exp.X_add_number = fragp->fr_offset;
+ bfd_reloc_code_real_type reloc = BFD_RELOC_NONE;
+ expressionS exp;
+ fixS *fixp;
- fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp,
- TRUE, reloc);
+ switch (type)
+ {
+ case 'p':
+ case 'q':
+ reloc = BFD_RELOC_MIPS16_16_PCREL_S1;
+ break;
+ default:
+ break;
+ }
+ if (mac || reloc == BFD_RELOC_NONE)
+ as_bad_where (fragp->fr_file, fragp->fr_line,
+ _("unsupported relocation"));
+ else if (ext)
+ {
+ exp.X_op = O_symbol;
+ exp.X_add_symbol = fragp->fr_symbol;
+ exp.X_add_number = fragp->fr_offset;
- fixp->fx_file = fragp->fr_file;
- fixp->fx_line = fragp->fr_line;
+ fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp,
+ TRUE, reloc);
+
+ fixp->fx_file = fragp->fr_file;
+ fixp->fx_line = fragp->fr_line;
+ }
+ else
+ as_bad_where (fragp->fr_file, fragp->fr_line,
+ _("invalid unextended operand value"));
}
else
- as_bad_where (fragp->fr_file, fragp->fr_line,
- _("invalid unextended operand value"));
- }
- else
- mips16_immed (fragp->fr_file, fragp->fr_line, type,
- BFD_RELOC_UNUSED, val, user_length, &insn);
+ mips16_immed (fragp->fr_file, fragp->fr_line, type,
+ BFD_RELOC_UNUSED, val, user_length, &insn);
- length = (ext ? 4 : 2);
- gas_assert (mips16_opcode_length (insn) == length);
- write_compressed_insn (buf, insn, length);
- fragp->fr_fix += length;
+ gas_assert (mips16_opcode_length (insn) == length);
+ write_compressed_insn (buf, insn, length);
+ fragp->fr_fix += length;
+ }
}
else
{
[ ]*[0-9a-f]+: R_MICROMIPS_LO16 bar
[0-9a-f]+ <[^>]*> 40e3 fffe beqzc v1,[0-9a-f]+ <[^>]*>
[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 .*
-[0-9a-f]+ <[^>]*> 0c00 nop
\.\.\.
run_list_test "pcrel-reloc-6" "-32 --defsym offset=4" \
"MIPS local PC-relative relocations 6b"
+ run_dump_test "mips16-pcrel-0"
+ run_dump_test "mips16-pcrel-1"
+ run_dump_test "mips16-pcrel-2"
+ run_dump_test "mips16-pcrel-3"
+ run_dump_test "mips16-pcrel-4"
+ run_dump_test "mips16-pcrel-5"
+ run_dump_test "mips16-pcrel-pic-0"
+ run_dump_test "mips16-pcrel-pic-1"
+ if $has_newabi {
+ run_dump_test "mips16-pcrel-n32-0"
+ run_dump_test "mips16-pcrel-n32-1"
+ run_dump_test "mips16-pcrel-n64-sym32-0"
+ run_dump_test "mips16-pcrel-n64-sym32-1"
+ run_dump_test "mips16-pcrel-n64-0"
+ run_dump_test "mips16-pcrel-n64-1"
+ }
+ run_dump_test "mips16-pcrel-delay-0"
+ run_dump_test "mips16-pcrel-delay-1"
run_dump_test "mips16-pcrel-relax-0"
run_dump_test "mips16-pcrel-relax-1"
run_dump_test "mips16-pcrel-relax-2"
run_dump_test "mips16-pcrel-addend-1"
run_dump_test "mips16-pcrel-addend-2"
run_dump_test "mips16-pcrel-addend-3"
+ run_dump_test "mips16-pcrel-addend-4"
+ run_dump_test "mips16-pcrel-addend-5"
+ run_dump_test "mips16-pcrel-addend-6"
+ run_dump_test "mips16-pcrel-addend-7"
+ run_dump_test "mips16-pcrel-addend-8"
+ run_dump_test "mips16-pcrel-addend-9"
+ run_dump_test "mips16-pcrel-addend-pic-8"
+ run_dump_test "mips16-pcrel-addend-pic-9"
+ if $has_newabi {
+ run_dump_test "mips16-pcrel-addend-n32-8"
+ run_dump_test "mips16-pcrel-addend-n32-9"
+ run_dump_test "mips16-pcrel-addend-n64-sym32-8"
+ run_dump_test "mips16-pcrel-addend-n64-sym32-9"
+ run_dump_test "mips16-pcrel-addend-n64-8"
+ run_dump_test "mips16-pcrel-addend-n64-9"
+ }
run_dump_test "mips16-pcrel-absolute"
run_dump_test "mips16-pcrel-absolute-1"
+ run_dump_test "mips16-pcrel-absolute-2"
+ run_dump_test "mips16-pcrel-absolute-3"
+ run_dump_test "mips16-pcrel-absolute-4"
+ run_dump_test "mips16-pcrel-absolute-5"
+ run_dump_test "mips16-pcrel-absolute-6"
+ run_dump_test "mips16-pcrel-absolute-7"
+ run_dump_test "mips16-pcrel-absolute-pic-4"
+ run_dump_test "mips16-pcrel-absolute-pic-6"
+ if $has_newabi {
+ run_dump_test "mips16-pcrel-absolute-n32-4"
+ run_dump_test "mips16-pcrel-absolute-n32-6"
+ run_dump_test "mips16-pcrel-absolute-n64-4"
+ run_dump_test "mips16-pcrel-absolute-n64-6"
+ run_dump_test "mips16-pcrel-absolute-n64-sym32-4"
+ run_dump_test "mips16-pcrel-absolute-n64-sym32-6"
+ run_dump_test "mips16-pcrel-absolute-pic-n32-4"
+ run_dump_test "mips16-pcrel-absolute-pic-n32-6"
+ run_dump_test "mips16-pcrel-absolute-pic-n64-4"
+ run_dump_test "mips16-pcrel-absolute-pic-n64-6"
+ run_dump_test "mips16-pcrel-absolute-pic-n64-sym32-4"
+ run_dump_test "mips16-pcrel-absolute-pic-n64-sym32-6"
+ }
run_dump_test "mips16-branch-reloc-0"
run_dump_test "mips16-branch-reloc-1"
run_dump_test "mips16-branch-reloc-2"
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 PC-relative operations 0
+#as: -32
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> 0a00 la v0,00010000 <foo>
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> b200 lw v0,00010004 <foo\+0x4>
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> 0aff la v0,00010404 <baz\+0x304>
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> b2ff lw v0,00010408 <baz\+0x308>
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> f400 0a00 la v0,00010410 <baz\+0x310>
+[0-9a-f]+ <[^>]*> f400 b200 lw v0,00010414 <baz\+0x314>
+[0-9a-f]+ <[^>]*> f7ff 0a1c la v0,00010014 <foo\+0x14>
+[0-9a-f]+ <[^>]*> f7ff b21c lw v0,00010018 <foo\+0x18>
+[0-9a-f]+ <[^>]*> f7ef 0a1f la v0,0001801f <baz\+0x7f1f>
+[0-9a-f]+ <[^>]*> f7ef b21f lw v0,00018023 <baz\+0x7f23>
+[0-9a-f]+ <[^>]*> f010 0a00 la v0,00008028 <bar\+0x8028>
+[0-9a-f]+ <[^>]*> f010 b200 lw v0,0000802c <bar\+0x802c>
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 L0\001
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f7ef 4a1f addiu v0,32767
+[ ]*[0-9a-f]+: R_MIPS16_LO16 L0\001
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 L0\001
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f7ef 9a5f lw v0,32767\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 L0\001
+[0-9a-f]+ <[^>]*> f7ff 6a1f li v0,65535
+[ ]*[0-9a-f]+: R_MIPS16_HI16 L0\001
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f7ef 4a1e addiu v0,32766
+[ ]*[0-9a-f]+: R_MIPS16_LO16 L0\001
+[0-9a-f]+ <[^>]*> f7ff 6a1f li v0,65535
+[ ]*[0-9a-f]+: R_MIPS16_HI16 L0\001
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f7ef 9a5e lw v0,32766\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 L0\001
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.
+ \.\.\.
--- /dev/null
+.*: Assembler messages:
+.*:25: Error: operand value out of range for instruction
+.*:26: Error: operand value out of range for instruction
+.*:27: Error: operand value out of range for instruction
+.*:28: Error: operand value out of range for instruction
--- /dev/null
+ .text
+
+bar:
+ .space 0x10000
+
+ .ent foo
+ .set mips16
+foo:
+ la $2, . - 1
+ nop
+ lw $2, . - 1
+ nop
+ la $2, . - 1 + 0x3fc
+ nop
+ lw $2, . - 1 + 0x3fc
+ nop
+ la $2, . - 1 + 0x400
+ lw $2, . - 1 + 0x400
+ la $2, . - 1 - 0x4
+ lw $2, . - 1 - 0x4
+ la $2, . - 1 + 0x7fff
+ lw $2, . - 1 + 0x7fff
+ la $2, . - 1 - 0x8000
+ lw $2, . - 1 - 0x8000
+ la $2, . - 1 + 0x8000
+ lw $2, . - 1 + 0x8000
+ la $2, . - 1 - 0x8001
+ lw $2, . - 1 - 0x8001
+ nop
+ .set nomips16
+ .end foo
+
+baz:
+ .align 8, 0
+ .space 0xfe00
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 PC-relative operations 1
+#as: -32 -mips3
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> fe40 dla v0,00010000 <foo>
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> fc40 ld v0,00010000 <foo>
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> fe5f dla v0,00010084 <baz\+0x4>
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> fc5f ld v0,00010100 <baz\+0x80>
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> f080 fe40 dla v0,00010090 <baz\+0x10>
+[0-9a-f]+ <[^>]*> f100 fc40 ld v0,00010110 <baz\+0x90>
+[0-9a-f]+ <[^>]*> f7ff fe5c dla v0,00010014 <foo\+0x14>
+[0-9a-f]+ <[^>]*> f7ff fc5c ld v0,00010014 <foo\+0x14>
+[0-9a-f]+ <[^>]*> f7ef fe5f dla v0,0001801f <baz\+0x7f9f>
+[0-9a-f]+ <[^>]*> f7ef fc5f ld v0,0001801f <baz\+0x7f9f>
+[0-9a-f]+ <[^>]*> f010 fe40 dla v0,00008028 <bar\+0x8028>
+[0-9a-f]+ <[^>]*> f010 fc40 ld v0,00008028 <bar\+0x8028>
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 L0\001
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f7ef fd5f daddiu v0,32767
+[ ]*[0-9a-f]+: R_MIPS16_LO16 L0\001
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 L0\001
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f7ef 3a5b ld v0,32763\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 L0\001
+[0-9a-f]+ <[^>]*> f7ff 6a1f li v0,65535
+[ ]*[0-9a-f]+: R_MIPS16_HI16 L0\001
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f7ef fd5e daddiu v0,32766
+[ ]*[0-9a-f]+: R_MIPS16_LO16 L0\001
+[0-9a-f]+ <[^>]*> f7ff 6a1f li v0,65535
+[ ]*[0-9a-f]+: R_MIPS16_HI16 L0\001
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f7ef 3a5a ld v0,32762\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 L0\001
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.
+ \.\.\.
--- /dev/null
+.*: Assembler messages:
+.*:25: Error: operand value out of range for instruction
+.*:26: Error: operand value out of range for instruction
+.*:27: Error: operand value out of range for instruction
+.*:28: Error: operand value out of range for instruction
--- /dev/null
+ .text
+
+bar:
+ .space 0x10000
+
+ .ent foo
+ .set mips16
+foo:
+ dla $2, . - 1
+ nop
+ ld $2, . - 5
+ nop
+ dla $2, . - 1 + 0x7c
+ nop
+ ld $2, . - 5 + 0xf8
+ nop
+ dla $2, . - 1 + 0x80
+ ld $2, . - 5 + 0x100
+ dla $2, . - 1 - 0x4
+ ld $2, . - 5 - 0x4
+ dla $2, . - 1 + 0x7fff
+ ld $2, . - 5 + 0x7fff
+ dla $2, . - 1 - 0x8000
+ ld $2, . - 5 - 0x8000
+ dla $2, . - 1 + 0x8000
+ ld $2, . - 5 + 0x8000
+ dla $2, . - 1 - 0x8001
+ ld $2, . - 5 - 0x8001
+ nop
+ .set nomips16
+ .end foo
+
+baz:
+ .align 7, 0
+ .space 0xff00
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 PC-relative operations 2
+#as: -32
+#stderr: mips16-pcrel-2.l
+#dump: mips16-pcrel-0.d
--- /dev/null
+.*: Assembler messages:
+.*:27: Warning: macro instruction expanded into multiple instructions
+.*:28: Warning: macro instruction expanded into multiple instructions
+.*:29: Warning: macro instruction expanded into multiple instructions
+.*:30: Warning: macro instruction expanded into multiple instructions
--- /dev/null
+ .text
+
+bar:
+ .space 0x10000
+
+ .ent foo
+ .set mips16
+ .set noreorder
+ .set nomacro
+foo:
+ la $2, . - 1
+ nop
+ lw $2, . - 1
+ nop
+ la $2, . - 1 + 0x3fc
+ nop
+ lw $2, . - 1 + 0x3fc
+ nop
+ la $2, . - 1 + 0x400
+ lw $2, . - 1 + 0x400
+ la $2, . - 1 - 0x4
+ lw $2, . - 1 - 0x4
+ la $2, . - 1 + 0x7fff
+ lw $2, . - 1 + 0x7fff
+ la $2, . - 1 - 0x8000
+ lw $2, . - 1 - 0x8000
+ la $2, . - 1 + 0x8000
+ lw $2, . - 1 + 0x8000
+ la $2, . - 1 - 0x8001
+ lw $2, . - 1 - 0x8001
+ nop
+ .set macro
+ .set reorder
+ .set nomips16
+ .end foo
+
+baz:
+ .align 8, 0
+ .space 0xfe00
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
--- /dev/null
+#name: MIPS16 PC-relative operations 3
+#as: -32
+#error-output: mips16-pcrel-3.l
--- /dev/null
+.*: Assembler messages:
+.*:13: Error: operand value out of range for instruction
+.*:14: Error: operand value out of range for instruction
+.*:15: Error: operand value out of range for instruction
+.*:16: Error: operand value out of range for instruction
+.*:17: Error: unsupported relocation
+.*:18: Error: unsupported relocation
--- /dev/null
+ .text
+
+ .space 0x10000
+
+ .ent foo
+ .set mips16
+ .set noautoextend
+foo:
+ la.e $2, . - 1 + 0x7fff
+ lw.e $2, . - 1 + 0x7fff
+ la.e $2, . - 1 - 0x8000
+ lw.e $2, . - 1 - 0x8000
+ la.e $2, . - 1 + 0x8000
+ lw.e $2, . - 1 + 0x8000
+ la.e $2, . - 1 - 0x8001
+ lw.e $2, . - 1 - 0x8001
+ la.e $2, bar
+ lw.e $2, bar
+ nop
+ .set autoextend
+ .set nomips16
+ .end foo
+
+ .align 8, 0
+ .space 0xfe00
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
--- /dev/null
+#name: MIPS16 PC-relative operations 4
+#as: -32
+#error-output: mips16-pcrel-4.l
--- /dev/null
+.*: Assembler messages:
+.*:16: Error: invalid unextended operand value
+.*:18: Error: invalid unextended operand value
+.*:20: Error: invalid unextended operand value
+.*:22: Error: invalid unextended operand value
+.*:24: Error: invalid unextended operand value
+.*:26: Error: invalid unextended operand value
+.*:28: Error: invalid unextended operand value
+.*:30: Error: invalid unextended operand value
+.*:32: Error: invalid unextended operand value
+.*:34: Error: invalid unextended operand value
+.*:36: Error: invalid unextended operand value
+.*:38: Error: invalid unextended operand value
+.*:40: Error: unsupported relocation
+.*:42: Error: unsupported relocation
--- /dev/null
+ .text
+
+ .space 0x10000
+
+ .ent foo
+ .set mips16
+foo:
+ la.t $2, . - 1
+ nop
+ lw.t $2, . - 1
+ nop
+ la.t $2, . - 1 + 0x3fc
+ nop
+ lw.t $2, . - 1 + 0x3fc
+ nop
+ la.t $2, . - 1 + 0x400
+ nop
+ lw.t $2, . - 1 + 0x400
+ nop
+ la.t $2, . - 1 - 0x4
+ nop
+ lw.t $2, . - 1 - 0x4
+ nop
+ la.t $2, . - 1 + 0x7fff
+ nop
+ lw.t $2, . - 1 + 0x7fff
+ nop
+ la.t $2, . - 1 - 0x8000
+ nop
+ lw.t $2, . - 1 - 0x8000
+ nop
+ la.t $2, . - 1 + 0x8000
+ nop
+ lw.t $2, . - 1 + 0x8000
+ nop
+ la.t $2, . - 1 - 0x8001
+ nop
+ lw.t $2, . - 1 - 0x8001
+ nop
+ la.t $2, bar
+ nop
+ lw.t $2, bar
+ nop
+ .set nomips16
+ .end foo
+
+ .align 8, 0
+ .space 0xfe00
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
--- /dev/null
+#name: MIPS16 PC-relative operations 5
+#as: -32
+#error-output: mips16-pcrel-5.l
--- /dev/null
+.*: Assembler messages:
+.*:17: Error: invalid unextended operand value
+.*:19: Error: invalid unextended operand value
+.*:21: Error: invalid unextended operand value
+.*:23: Error: invalid unextended operand value
+.*:25: Error: invalid unextended operand value
+.*:27: Error: invalid unextended operand value
+.*:29: Error: invalid unextended operand value
+.*:31: Error: invalid unextended operand value
+.*:33: Error: invalid unextended operand value
+.*:35: Error: invalid unextended operand value
+.*:37: Error: invalid unextended operand value
+.*:39: Error: invalid unextended operand value
+.*:41: Error: unsupported relocation
+.*:43: Error: unsupported relocation
--- /dev/null
+ .text
+
+ .space 0x10000
+
+ .ent foo
+ .set mips16
+ .set noautoextend
+foo:
+ la $2, . - 1
+ nop
+ lw $2, . - 1
+ nop
+ la $2, . - 1 + 0x3fc
+ nop
+ lw $2, . - 1 + 0x3fc
+ nop
+ la $2, . - 1 + 0x400
+ nop
+ lw $2, . - 1 + 0x400
+ nop
+ la $2, . - 1 - 0x4
+ nop
+ lw $2, . - 1 - 0x4
+ nop
+ la $2, . - 1 + 0x7fff
+ nop
+ lw $2, . - 1 + 0x7fff
+ nop
+ la $2, . - 1 - 0x8000
+ nop
+ lw $2, . - 1 - 0x8000
+ nop
+ la $2, . - 1 + 0x8000
+ nop
+ lw $2, . - 1 + 0x8000
+ nop
+ la $2, . - 1 - 0x8001
+ nop
+ lw $2, . - 1 - 0x8001
+ nop
+ la $2, bar
+ nop
+ lw $2, bar
+ nop
+ .set autoextend
+ .set nomips16
+ .end foo
+
+ .align 8, 0
+ .space 0xfe00
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
+#objdump: -dr --prefix-addresses --show-raw-insn
#name: MIPS16 PC-relative reference to absolute expression 1
#as: -32
-#error-output: mips16-pcrel-absolute-1.l
+#dump: mips16-pcrel-absolute.d
+++ /dev/null
-.*: Assembler messages:
-.*:10: Error: unsupported relocation
-.*:11: Error: unsupported relocation
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 PC-relative reference to absolute expression 2
+#as: -32 -mips3
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f222 fd54 daddiu v0,4660
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f222 3a54 ld v0,4660\(v0\)
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.
--- /dev/null
+ .text
+
+ .space 0x1000
+
+ .ent foo
+ .set mips16
+foo:
+ dla $2, bar
+ ld $2, bar
+ nop
+ .set nomips16
+ .end foo
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
+
+ .set bar, 0x1234
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 PC-relative reference to absolute expression 3
+#as: -32 -mips3
+#dump: mips16-pcrel-absolute-2.d
--- /dev/null
+ .text
+
+ .space 0x1000
+
+ .set bar, 0x1234
+
+ .ent foo
+ .set mips16
+foo:
+ dla $2, bar
+ ld $2, bar
+ nop
+ .set nomips16
+ .end foo
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 PC-relative reference to absolute expression 4
+#as: -32
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> f222 6a14 li v0,4660
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f66a 4a18 addiu v0,22136
+[0-9a-f]+ <[^>]*> f222 6a14 li v0,4660
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f66a 9a58 lw v0,22136\(v0\)
+[0-9a-f]+ <[^>]*> f222 6a14 li v0,4660
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f66a 4a18 addiu v0,22136
+[0-9a-f]+ <[^>]*> f222 6a14 li v0,4660
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f66a 9a58 lw v0,22136\(v0\)
+[0-9a-f]+ <[^>]*> f222 6a14 li v0,4660
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f2ef 4a00 addiu v0,31456
+[0-9a-f]+ <[^>]*> f222 6a14 li v0,4660
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f2ef 9a40 lw v0,31456\(v0\)
+[0-9a-f]+ <[^>]*> f464 6a09 li v0,9321
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f4f5 4a00 addiu v0,-21280
+[0-9a-f]+ <[^>]*> f464 6a09 li v0,9321
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f4f5 9a40 lw v0,-21280\(v0\)
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.
--- /dev/null
+.*: Assembler messages:
+.*:8: Error: unsupported relocation
+.*:9: Error: unsupported relocation
+.*:10: Error: unsupported relocation
+.*:11: Error: unsupported relocation
+.*:12: Error: unsupported relocation
+.*:13: Error: unsupported relocation
+.*:14: Error: unsupported relocation
+.*:15: Error: unsupported relocation
--- /dev/null
+ .text
+
+ .space 0x1000
+
+ .ent foo
+ .set mips16
+foo:
+ la $2, 0x12345678
+ lw $2, 0x12345678
+ la $2, bar
+ lw $2, bar
+ la $2, bar + 0x2468
+ lw $2, bar + 0x2468
+ la $2, 0x2468ace0
+ lw $2, 0x2468ace0
+ nop
+ .set nomips16
+ .end foo
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
+
+ .set bar, 0x12345678
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 PC-relative reference to absolute expression 5
+#as: -32
+#dump: mips16-pcrel-absolute-4.d
--- /dev/null
+ .text
+
+ .space 0x1000
+
+ .set bar, 0x12345678
+
+ .ent foo
+ .set mips16
+foo:
+ la $2, 0x12345678
+ lw $2, 0x12345678
+ la $2, bar
+ lw $2, bar
+ la $2, bar + 0x2468
+ lw $2, bar + 0x2468
+ la $2, 0x2468ace0
+ lw $2, 0x2468ace0
+ nop
+ .set nomips16
+ .end foo
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 PC-relative reference to absolute expression 6
+#as: -32 -mips3
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> f222 6a14 li v0,4660
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f66a fd58 daddiu v0,22136
+[0-9a-f]+ <[^>]*> f222 6a14 li v0,4660
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f66a 3a58 ld v0,22136\(v0\)
+[0-9a-f]+ <[^>]*> f222 6a14 li v0,4660
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f66a fd58 daddiu v0,22136
+[0-9a-f]+ <[^>]*> f222 6a14 li v0,4660
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f66a 3a58 ld v0,22136\(v0\)
+[0-9a-f]+ <[^>]*> f222 6a14 li v0,4660
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f2ef fd40 daddiu v0,31456
+[0-9a-f]+ <[^>]*> f222 6a14 li v0,4660
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f2ef 3a40 ld v0,31456\(v0\)
+[0-9a-f]+ <[^>]*> f464 6a09 li v0,9321
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f4f5 fd40 daddiu v0,-21280
+[0-9a-f]+ <[^>]*> f464 6a09 li v0,9321
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f4f5 3a40 ld v0,-21280\(v0\)
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.
--- /dev/null
+.*: Assembler messages:
+.*:8: Error: unsupported relocation
+.*:9: Error: unsupported relocation
+.*:10: Error: unsupported relocation
+.*:11: Error: unsupported relocation
+.*:12: Error: unsupported relocation
+.*:13: Error: unsupported relocation
+.*:14: Error: unsupported relocation
+.*:15: Error: unsupported relocation
--- /dev/null
+ .text
+
+ .space 0x1000
+
+ .ent foo
+ .set mips16
+foo:
+ dla $2, 0x12345678
+ ld $2, 0x12345678
+ dla $2, bar
+ ld $2, bar
+ dla $2, bar + 0x2468
+ ld $2, bar + 0x2468
+ dla $2, 0x2468ace0
+ ld $2, 0x2468ace0
+ nop
+ .set nomips16
+ .end foo
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
+
+ .set bar, 0x12345678
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 PC-relative reference to absolute expression 7
+#as: -32 -mips3
+#dump: mips16-pcrel-absolute-6.d
--- /dev/null
+ .text
+
+ .space 0x1000
+
+ .set bar, 0x12345678
+
+ .ent foo
+ .set mips16
+foo:
+ dla $2, 0x12345678
+ ld $2, 0x12345678
+ dla $2, bar
+ ld $2, bar
+ dla $2, bar + 0x2468
+ ld $2, bar + 0x2468
+ dla $2, 0x2468ace0
+ ld $2, 0x2468ace0
+ nop
+ .set nomips16
+ .end foo
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 PC-relative reference to absolute expression 4 (n32)
+#as: -n32 -mips3
+#source: mips16-pcrel-absolute-4.s
+#dump: mips16-pcrel-absolute-4.d
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 PC-relative reference to absolute expression 6 (n32)
+#as: -n32 -mips3
+#source: mips16-pcrel-absolute-6.s
+#dump: mips16-pcrel-absolute-6.d
--- /dev/null
+#name: MIPS16 PC-relative reference to absolute expression 4 (n64)
+#as: -64 -mips3
+#source: mips16-pcrel-absolute-4.s
+#error-output: mips16-pcrel-absolute-4.l
--- /dev/null
+#name: MIPS16 PC-relative reference to absolute expression 6 (n64)
+#as: -64 -mips3
+#source: mips16-pcrel-absolute-6.s
+#error-output: mips16-pcrel-absolute-6.l
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 PC-relative reference to absolute expression 4 (n64, sym32)
+#as: -64 -msym32 -mips3
+#source: mips16-pcrel-absolute-4.s
+#dump: mips16-pcrel-absolute-4.d
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 PC-relative reference to absolute expression 6 (n64, sym32)
+#as: -64 -msym32 -mips3
+#source: mips16-pcrel-absolute-6.s
+#dump: mips16-pcrel-absolute-6.d
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 PC-relative reference to absolute expression 4 (PIC)
+#as: -32 -call_shared
+#source: mips16-pcrel-absolute-4.s
+#dump: mips16-pcrel-absolute-4.d
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 PC-relative reference to absolute expression 6 (PIC)
+#as: -32 -mips3 -call_shared
+#source: mips16-pcrel-absolute-6.s
+#dump: mips16-pcrel-absolute-6.d
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 PC-relative reference to absolute expression 4 (PIC, n32)
+#as: -n32 -call_shared -mips3
+#source: mips16-pcrel-absolute-4.s
+#dump: mips16-pcrel-absolute-4.d
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 PC-relative reference to absolute expression 6 (PIC, n32)
+#as: -n32 -call_shared -mips3
+#source: mips16-pcrel-absolute-6.s
+#dump: mips16-pcrel-absolute-6.d
--- /dev/null
+#name: MIPS16 PC-relative reference to absolute expression 4 (PIC, n64)
+#as: -64 -call_shared -mips3
+#source: mips16-pcrel-absolute-4.s
+#error-output: mips16-pcrel-absolute-4.l
--- /dev/null
+#name: MIPS16 PC-relative reference to absolute expression 6 (PIC, n64)
+#as: -64 -call_shared -mips3
+#source: mips16-pcrel-absolute-6.s
+#error-output: mips16-pcrel-absolute-6.l
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 PC-relative reference to absolute expression 4 (PIC, n64, sym32)
+#as: -64 -msym32 -call_shared -mips3
+#source: mips16-pcrel-absolute-4.s
+#dump: mips16-pcrel-absolute-4.d
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 PC-relative reference to absolute expression 6 (PIC, n64, sym32)
+#as: -64 -msym32 -call_shared -mips3
+#source: mips16-pcrel-absolute-6.s
+#dump: mips16-pcrel-absolute-6.d
+#objdump: -dr --prefix-addresses --show-raw-insn
#name: MIPS16 PC-relative reference to absolute expression
#as: -32
-#error-output: mips16-pcrel-absolute.l
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f222 4a14 addiu v0,4660
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f222 9a54 lw v0,4660\(v0\)
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.
+++ /dev/null
-.*: Assembler messages:
-.*:8: Error: unsupported relocation
-.*:9: Error: unsupported relocation
+#objdump: -dr --prefix-addresses --show-raw-insn
#name: MIPS16 PC-relative relocation with addend 2
#as: -32
-#error-output: mips16-pcrel-addend-2.l
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f222 4a14 addiu v0,4660
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f222 9a54 lw v0,4660\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.
+ \.\.\.
+++ /dev/null
-.*: Assembler messages:
-.*:9: Error: unsupported relocation
-.*:10: Error: unsupported relocation
+#objdump: -dr --prefix-addresses --show-raw-insn
#name: MIPS16 PC-relative relocation with addend 3
#as: -32
-#error-output: mips16-pcrel-addend-3.l
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f222 4a14 addiu v0,4660
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f222 9a54 lw v0,4660\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.
+++ /dev/null
-.*: Assembler messages:
-.*:8: Error: unsupported relocation
-.*:9: Error: unsupported relocation
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 PC-relative relocation with addend 4
+#as: -32 -mips3
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> f242 fe54 dla v0,00002254 <bar\+0x1234>
+[0-9a-f]+ <[^>]*> f242 fc54 ld v0,00002254 <bar\+0x1234>
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.
+ \.\.\.
--- /dev/null
+ .text
+
+ .space 0x1000
+
+ .ent foo
+ .set mips16
+foo:
+ dla $2, bar + 0x1234
+ ld $2, bar + 0x1234
+ nop
+ .set nomips16
+ .end foo
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
+
+ .type bar, @object
+bar:
+ .long 0
+ .size bar, . - bar
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 PC-relative relocation with addend 5
+#as: -32 -mips3
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+ \.\.\.
+[0-9a-f]+ <[^>]*> f202 fe54 dla v0,00002234 <foo\+0x1214>
+[0-9a-f]+ <[^>]*> f202 fc54 ld v0,00002234 <foo\+0x1214>
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.
--- /dev/null
+ .text
+
+ .space 0x1000
+
+ .type bar, @object
+bar:
+ .long 0
+ .size bar, . - bar
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
+
+ .ent foo
+ .set mips16
+foo:
+ dla $2, bar + 0x1234
+ ld $2, bar + 0x1234
+ nop
+ .set nomips16
+ .end foo
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 PC-relative relocation with addend 6
+#as: -32 -mips3
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f222 fd54 daddiu v0,4660
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f222 3a54 ld v0,4660\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.
+ \.\.\.
--- /dev/null
+ .text
+ .globl bar
+
+ .space 0x1000
+
+ .ent foo
+ .set mips16
+foo:
+ dla $2, bar + 0x1234
+ ld $2, bar + 0x1234
+ nop
+ .set nomips16
+ .end foo
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
+
+ .type bar, @object
+bar:
+ .long 0
+ .size bar, . - bar
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 PC-relative relocation with addend 7
+#as: -32 -mips3
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f222 fd54 daddiu v0,4660
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f222 3a54 ld v0,4660\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.
--- /dev/null
+ .text
+
+ .space 0x1000
+
+ .ent foo
+ .set mips16
+foo:
+ dla $2, bar + 0x1234
+ ld $2, bar + 0x1234
+ nop
+ .set nomips16
+ .end foo
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 PC-relative relocation with addend 8
+#as: -32
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 4a00 addiu v0,0
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 9a40 lw v0,0\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f464 4a08 addiu v0,9320
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f464 9a48 lw v0,9320\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> f222 6a14 li v0,4660
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f66a 4a18 addiu v0,22136
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> f222 6a14 li v0,4660
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f66a 9a58 lw v0,22136\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> f464 6a09 li v0,9321
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f4f5 4a00 addiu v0,-21280
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> f464 6a09 li v0,9321
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f4f5 9a40 lw v0,-21280\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.
--- /dev/null
+.*: Assembler messages:
+.*:8: Error: unsupported relocation
+.*:9: Error: unsupported relocation
+.*:10: Error: unsupported relocation
+.*:11: Error: unsupported relocation
+.*:12: Error: unsupported relocation
+.*:13: Error: unsupported relocation
+.*:14: Error: unsupported relocation
+.*:15: Error: unsupported relocation
--- /dev/null
+ .text
+
+ .space 0x1000
+
+ .ent foo
+ .set mips16
+foo:
+ la $2, bar
+ lw $2, bar
+ la $2, bar + 0x2468
+ lw $2, bar + 0x2468
+ la $2, bar + 0x12345678
+ lw $2, bar + 0x12345678
+ la $2, bar + 0x2468ace0
+ lw $2, bar + 0x2468ace0
+ nop
+ .set nomips16
+ .end foo
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 PC-relative relocation with addend 9
+#as: -32 -mips3
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 fd40 daddiu v0,0
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 3a40 ld v0,0\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f464 fd48 daddiu v0,9320
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f464 3a48 ld v0,9320\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> f222 6a14 li v0,4660
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f66a fd58 daddiu v0,22136
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> f222 6a14 li v0,4660
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f66a 3a58 ld v0,22136\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> f464 6a09 li v0,9321
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f4f5 fd40 daddiu v0,-21280
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> f464 6a09 li v0,9321
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f4f5 3a40 ld v0,-21280\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.
--- /dev/null
+.*: Assembler messages:
+.*:8: Error: unsupported relocation
+.*:9: Error: unsupported relocation
+.*:10: Error: unsupported relocation
+.*:11: Error: unsupported relocation
+.*:12: Error: unsupported relocation
+.*:13: Error: unsupported relocation
+.*:14: Error: unsupported relocation
+.*:15: Error: unsupported relocation
--- /dev/null
+ .text
+
+ .space 0x1000
+
+ .ent foo
+ .set mips16
+foo:
+ dla $2, bar
+ ld $2, bar
+ dla $2, bar + 0x2468
+ ld $2, bar + 0x2468
+ dla $2, bar + 0x12345678
+ ld $2, bar + 0x12345678
+ dla $2, bar + 0x2468ace0
+ ld $2, bar + 0x2468ace0
+ nop
+ .set nomips16
+ .end foo
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 PC-relative relocation with addend 8 (n32)
+#as: -n32 -mips3
+#source: mips16-pcrel-addend-8.s
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 4a00 addiu v0,0
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 9a40 lw v0,0\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar\+0x2468
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 4a00 addiu v0,0
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar\+0x2468
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar\+0x2468
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 9a40 lw v0,0\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar\+0x2468
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar\+0x12345678
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 4a00 addiu v0,0
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar\+0x12345678
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar\+0x12345678
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 9a40 lw v0,0\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar\+0x12345678
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar\+0x2468ace0
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 4a00 addiu v0,0
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar\+0x2468ace0
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar\+0x2468ace0
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 9a40 lw v0,0\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar\+0x2468ace0
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 PC-relative relocation with addend 9 (n32)
+#as: -n32 -mips3
+#source: mips16-pcrel-addend-9.s
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 fd40 daddiu v0,0
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 3a40 ld v0,0\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar\+0x2468
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 fd40 daddiu v0,0
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar\+0x2468
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar\+0x2468
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 3a40 ld v0,0\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar\+0x2468
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar\+0x12345678
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 fd40 daddiu v0,0
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar\+0x12345678
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar\+0x12345678
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 3a40 ld v0,0\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar\+0x12345678
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar\+0x2468ace0
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 fd40 daddiu v0,0
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar\+0x2468ace0
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar\+0x2468ace0
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 3a40 ld v0,0\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar\+0x2468ace0
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.
--- /dev/null
+#name: MIPS16 PC-relative relocation with addend 8 (n64)
+#as: -64 -mips3
+#source: mips16-pcrel-addend-8.s
+#error-output: mips16-pcrel-addend-8.l
--- /dev/null
+#name: MIPS16 PC-relative relocation with addend 9 (n64)
+#as: -64 -mips3
+#source: mips16-pcrel-addend-9.s
+#error-output: mips16-pcrel-addend-9.l
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 PC-relative relocation with addend 8 (n64, sym32)
+#as: -64 -msym32 -mips3
+#source: mips16-pcrel-addend-8.s
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 4a00 addiu v0,0
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 9a40 lw v0,0\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar\+0x2468
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x2468
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x2468
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 4a00 addiu v0,0
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar\+0x2468
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x2468
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x2468
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar\+0x2468
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x2468
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x2468
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 9a40 lw v0,0\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar\+0x2468
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x2468
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x2468
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar\+0x12345678
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x12345678
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x12345678
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 4a00 addiu v0,0
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar\+0x12345678
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x12345678
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x12345678
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar\+0x12345678
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x12345678
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x12345678
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 9a40 lw v0,0\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar\+0x12345678
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x12345678
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x12345678
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar\+0x2468ace0
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x2468ace0
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x2468ace0
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 4a00 addiu v0,0
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar\+0x2468ace0
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x2468ace0
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x2468ace0
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar\+0x2468ace0
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x2468ace0
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x2468ace0
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 9a40 lw v0,0\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar\+0x2468ace0
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x2468ace0
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x2468ace0
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 PC-relative relocation with addend 9 (n64, sym32)
+#as: -64 -msym32 -mips3
+#source: mips16-pcrel-addend-9.s
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 fd40 daddiu v0,0
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 3a40 ld v0,0\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar\+0x2468
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x2468
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x2468
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 fd40 daddiu v0,0
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar\+0x2468
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x2468
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x2468
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar\+0x2468
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x2468
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x2468
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 3a40 ld v0,0\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar\+0x2468
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x2468
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x2468
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar\+0x12345678
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x12345678
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x12345678
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 fd40 daddiu v0,0
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar\+0x12345678
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x12345678
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x12345678
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar\+0x12345678
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x12345678
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x12345678
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 3a40 ld v0,0\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar\+0x12345678
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x12345678
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x12345678
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar\+0x2468ace0
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x2468ace0
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x2468ace0
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 fd40 daddiu v0,0
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar\+0x2468ace0
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x2468ace0
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x2468ace0
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar\+0x2468ace0
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x2468ace0
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x2468ace0
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 3a40 ld v0,0\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar\+0x2468ace0
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x2468ace0
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x2468ace0
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.
--- /dev/null
+#name: MIPS16 PC-relative relocation with addend 8 (PIC)
+#as: -32 -call_shared
+#source: mips16-pcrel-addend-8.s
+#error-output: mips16-pcrel-addend-8.l
--- /dev/null
+#name: MIPS16 PC-relative relocation with addend 9 (PIC)
+#as: -32 -mips3 -call_shared
+#source: mips16-pcrel-addend-9.s
+#error-output: mips16-pcrel-addend-9.l
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 PC-relative operation in delay slot 0
+#as: -32
+#stderr: mips16-pcrel-delay-0.l
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> ec00 jr a0
+[0-9a-f]+ <[^>]*> 0aff la v0,000103fc <baz\+0x2fc>
+[0-9a-f]+ <[^>]*> e820 jr ra
+[0-9a-f]+ <[^>]*> b2ff lw v0,00010400 <baz\+0x300>
+[0-9a-f]+ <[^>]*> ec00 jr a0
+[0-9a-f]+ <[^>]*> f7ef 0a1f la v0,00018007 <baz\+0x7f07>
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> e820 jr ra
+[0-9a-f]+ <[^>]*> f7ef b21f lw v0,0001800f <baz\+0x7f0f>
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> ec00 jr a0
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 L0\001
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f7ef 4a1d addiu v0,32765
+[ ]*[0-9a-f]+: R_MIPS16_LO16 L0\001
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> e820 jr ra
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 L0\001
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f7ef 9a5d lw v0,32765\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 L0\001
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.
+ \.\.\.
--- /dev/null
+.*: Assembler messages:
+.*:15: Warning: extended instruction in a branch delay slot
+.*:18: Warning: extended instruction in a branch delay slot
+.*:21: Warning: macro instruction expanded into multiple instructions in a branch delay slot
+.*:24: Warning: macro instruction expanded into multiple instructions in a branch delay slot
--- /dev/null
+ .text
+
+bar:
+ .space 0x10000
+
+ .ent foo
+ .set mips16
+ .set noreorder
+foo:
+ jr $4
+ la $2, . - 3 + 0x3fc
+ jr $ra
+ lw $2, . - 3 + 0x3fc
+ jr $4
+ la $2, . - 3 + 0x7fff
+ nop
+ jr $ra
+ lw $2, . - 3 + 0x7fff
+ nop
+ jr $4
+ la $2, . - 3 + 0x8000
+ nop
+ jr $ra
+ lw $2, . - 3 + 0x8000
+ nop
+ .set reorder
+ .set nomips16
+ .end foo
+
+baz:
+ .align 8, 0
+ .space 0xfe00
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 PC-relative operation in delay slot 1
+#as: -32
+#stderr: mips16-pcrel-delay-1.l
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> 1800 0000 jal 00000000 <bar>
+[ ]*[0-9a-f]+: R_MIPS16_26 bat
+[0-9a-f]+ <[^>]*> 0aff la v0,000103fc <baz\+0x2fc>
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> 1c00 0000 jalx 00000000 <bar>
+[ ]*[0-9a-f]+: R_MIPS16_26 bax
+[0-9a-f]+ <[^>]*> b2ff lw v0,00010404 <baz\+0x304>
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> 1800 0000 jal 00000000 <bar>
+[ ]*[0-9a-f]+: R_MIPS16_26 bat
+[0-9a-f]+ <[^>]*> f7ef 0a1f la v0,00018013 <baz\+0x7f13>
+[0-9a-f]+ <[^>]*> 1c00 0000 jalx 00000000 <bar>
+[ ]*[0-9a-f]+: R_MIPS16_26 bax
+[0-9a-f]+ <[^>]*> f7ef b21f lw v0,0001801b <baz\+0x7f1b>
+[0-9a-f]+ <[^>]*> 1800 0000 jal 00000000 <bar>
+[ ]*[0-9a-f]+: R_MIPS16_26 bat
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 L0\001
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f7ef 4a1b addiu v0,32763
+[ ]*[0-9a-f]+: R_MIPS16_LO16 L0\001
+[0-9a-f]+ <[^>]*> 1c00 0000 jalx 00000000 <bar>
+[ ]*[0-9a-f]+: R_MIPS16_26 bax
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 L0\001
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f7ef 9a5b lw v0,32763\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 L0\001
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.
+ \.\.\.
--- /dev/null
+.*: Assembler messages:
+.*:17: Warning: extended instruction in a branch delay slot
+.*:19: Warning: extended instruction in a branch delay slot
+.*:21: Warning: macro instruction expanded into multiple instructions in a branch delay slot
+.*:23: Warning: macro instruction expanded into multiple instructions in a branch delay slot
--- /dev/null
+ .text
+
+bar:
+ .space 0x10000
+
+ .ent foo
+ .set mips16
+ .set noreorder
+foo:
+ jal bat
+ la $2, . - 5 + 0x3fc
+ nop
+ jalx bax
+ lw $2, . - 5 + 0x3fc
+ nop
+ jal bat
+ la $2, . - 5 + 0x7fff
+ jalx bax
+ lw $2, . - 5 + 0x7fff
+ jal bat
+ la $2, . - 5 + 0x8000
+ jalx bax
+ lw $2, . - 5 + 0x8000
+ nop
+ .set reorder
+ .set nomips16
+ .end foo
+
+baz:
+ .align 8, 0
+ .space 0xfe00
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 PC-relative operations 0 (n32)
+#as: -n32 -mips3
+#source: mips16-pcrel-0.s
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> 0a00 la v0,00010000 <foo>
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> b200 lw v0,00010004 <foo\+0x4>
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> 0aff la v0,00010404 <baz\+0x304>
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> b2ff lw v0,00010408 <baz\+0x308>
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> f400 0a00 la v0,00010410 <baz\+0x310>
+[0-9a-f]+ <[^>]*> f400 b200 lw v0,00010414 <baz\+0x314>
+[0-9a-f]+ <[^>]*> f7ff 0a1c la v0,00010014 <foo\+0x14>
+[0-9a-f]+ <[^>]*> f7ff b21c lw v0,00010018 <foo\+0x18>
+[0-9a-f]+ <[^>]*> f7ef 0a1f la v0,0001801f <baz\+0x7f1f>
+[0-9a-f]+ <[^>]*> f7ef b21f lw v0,00018023 <baz\+0x7f23>
+[0-9a-f]+ <[^>]*> f010 0a00 la v0,00008028 <bar\+0x8028>
+[0-9a-f]+ <[^>]*> f010 b200 lw v0,0000802c <bar\+0x802c>
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 L0\001\+0x7fff
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 4a00 addiu v0,0
+[ ]*[0-9a-f]+: R_MIPS16_LO16 L0\001\+0x7fff
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 L0\001\+0x7fff
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 9a40 lw v0,0\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 L0\001\+0x7fff
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 L0\001-0x8002
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 4a00 addiu v0,0
+[ ]*[0-9a-f]+: R_MIPS16_LO16 L0\001-0x8002
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 L0\001-0x8002
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 9a40 lw v0,0\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 L0\001-0x8002
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.
+ \.\.\.
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 PC-relative operations 1 (n32)
+#as: -n32 -mips3
+#source: mips16-pcrel-1.s
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> fe40 dla v0,00010000 <foo>
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> fc40 ld v0,00010000 <foo>
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> fe5f dla v0,00010084 <baz\+0x4>
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> fc5f ld v0,00010100 <baz\+0x80>
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> f080 fe40 dla v0,00010090 <baz\+0x10>
+[0-9a-f]+ <[^>]*> f100 fc40 ld v0,00010110 <baz\+0x90>
+[0-9a-f]+ <[^>]*> f7ff fe5c dla v0,00010014 <foo\+0x14>
+[0-9a-f]+ <[^>]*> f7ff fc5c ld v0,00010014 <foo\+0x14>
+[0-9a-f]+ <[^>]*> f7ef fe5f dla v0,0001801f <baz\+0x7f9f>
+[0-9a-f]+ <[^>]*> f7ef fc5f ld v0,0001801f <baz\+0x7f9f>
+[0-9a-f]+ <[^>]*> f010 fe40 dla v0,00008028 <bar\+0x8028>
+[0-9a-f]+ <[^>]*> f010 fc40 ld v0,00008028 <bar\+0x8028>
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 L0\001\+0x7fff
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 fd40 daddiu v0,0
+[ ]*[0-9a-f]+: R_MIPS16_LO16 L0\001\+0x7fff
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 L0\001\+0x7ffb
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 3a40 ld v0,0\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 L0\001\+0x7ffb
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 L0\001-0x8002
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 fd40 daddiu v0,0
+[ ]*[0-9a-f]+: R_MIPS16_LO16 L0\001-0x8002
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 L0\001-0x8006
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 3a40 ld v0,0\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 L0\001-0x8006
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.
+ \.\.\.
--- /dev/null
+#name: MIPS16 PC-relative operations 0 (n64)
+#as: -64 -mips3
+#source: mips16-pcrel-0.s
+#error-output: mips16-pcrel-0.l
--- /dev/null
+#name: MIPS16 PC-relative operations 1 (n64)
+#as: -64 -mips3
+#source: mips16-pcrel-1.s
+#error-output: mips16-pcrel-1.l
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 PC-relative operations 0 (n64, sym32)
+#as: -64 -msym32 -mips3
+#source: mips16-pcrel-0.s
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> 0a00 la v0,0000000000010000 <foo>
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> b200 lw v0,0000000000010004 <foo\+0x4>
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> 0aff la v0,0000000000010404 <baz\+0x304>
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> b2ff lw v0,0000000000010408 <baz\+0x308>
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> f400 0a00 la v0,0000000000010410 <baz\+0x310>
+[0-9a-f]+ <[^>]*> f400 b200 lw v0,0000000000010414 <baz\+0x314>
+[0-9a-f]+ <[^>]*> f7ff 0a1c la v0,0000000000010014 <foo\+0x14>
+[0-9a-f]+ <[^>]*> f7ff b21c lw v0,0000000000010018 <foo\+0x18>
+[0-9a-f]+ <[^>]*> f7ef 0a1f la v0,000000000001801f <baz\+0x7f1f>
+[0-9a-f]+ <[^>]*> f7ef b21f lw v0,0000000000018023 <baz\+0x7f23>
+[0-9a-f]+ <[^>]*> f010 0a00 la v0,0000000000008028 <bar\+0x8028>
+[0-9a-f]+ <[^>]*> f010 b200 lw v0,000000000000802c <bar\+0x802c>
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 L0\001\+0x7fff
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x7fff
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x7fff
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 4a00 addiu v0,0
+[ ]*[0-9a-f]+: R_MIPS16_LO16 L0\001\+0x7fff
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x7fff
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x7fff
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 L0\001\+0x7fff
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x7fff
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x7fff
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 9a40 lw v0,0\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 L0\001\+0x7fff
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x7fff
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x7fff
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 L0\001-0x8002
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x8002
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x8002
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 4a00 addiu v0,0
+[ ]*[0-9a-f]+: R_MIPS16_LO16 L0\001-0x8002
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x8002
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x8002
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 L0\001-0x8002
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x8002
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x8002
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 9a40 lw v0,0\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 L0\001-0x8002
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x8002
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x8002
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.
+ \.\.\.
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 PC-relative operations 1 (n64, sym32)
+#as: -64 -msym32 -mips3
+#source: mips16-pcrel-1.s
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> fe40 dla v0,0000000000010000 <foo>
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> fc40 ld v0,0000000000010000 <foo>
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> fe5f dla v0,0000000000010084 <baz\+0x4>
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> fc5f ld v0,0000000000010100 <baz\+0x80>
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> f080 fe40 dla v0,0000000000010090 <baz\+0x10>
+[0-9a-f]+ <[^>]*> f100 fc40 ld v0,0000000000010110 <baz\+0x90>
+[0-9a-f]+ <[^>]*> f7ff fe5c dla v0,0000000000010014 <foo\+0x14>
+[0-9a-f]+ <[^>]*> f7ff fc5c ld v0,0000000000010014 <foo\+0x14>
+[0-9a-f]+ <[^>]*> f7ef fe5f dla v0,000000000001801f <baz\+0x7f9f>
+[0-9a-f]+ <[^>]*> f7ef fc5f ld v0,000000000001801f <baz\+0x7f9f>
+[0-9a-f]+ <[^>]*> f010 fe40 dla v0,0000000000008028 <bar\+0x8028>
+[0-9a-f]+ <[^>]*> f010 fc40 ld v0,0000000000008028 <bar\+0x8028>
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 L0\001\+0x7fff
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x7fff
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x7fff
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 fd40 daddiu v0,0
+[ ]*[0-9a-f]+: R_MIPS16_LO16 L0\001\+0x7fff
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x7fff
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x7fff
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 L0\001\+0x7ffb
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x7ffb
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x7ffb
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 3a40 ld v0,0\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 L0\001\+0x7ffb
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x7ffb
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x7ffb
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 L0\001-0x8002
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x8002
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x8002
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 fd40 daddiu v0,0
+[ ]*[0-9a-f]+: R_MIPS16_LO16 L0\001-0x8002
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x8002
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x8002
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 L0\001-0x8006
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x8006
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x8006
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 3a40 ld v0,0\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 L0\001-0x8006
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x8006
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x8006
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.
+ \.\.\.
--- /dev/null
+#name: MIPS16 PC-relative operations 0 (PIC)
+#as: -32 -call_shared
+#source: mips16-pcrel-0.s
+#error-output: mips16-pcrel-0.l
--- /dev/null
+#name: MIPS16 PC-relative operations 1 (PIC)
+#as: -32 -mips3 -call_shared
+#source: mips16-pcrel-1.s
+#error-output: mips16-pcrel-1.l
+#objdump: -dr --prefix-addresses --show-raw-insn
#name: MIPS16 PC-relative relocation 2
#as: -32
-#error-output: mips16-pcrel-reloc-2.l
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 4a00 addiu v0,0
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 9a40 lw v0,0\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.
+ \.\.\.
+++ /dev/null
-.*: Assembler messages:
-.*:9: Error: unsupported relocation
-.*:10: Error: unsupported relocation
+#objdump: -dr --prefix-addresses --show-raw-insn
#name: MIPS16 PC-relative relocation 3
#as: -32
-#error-output: mips16-pcrel-reloc-3.l
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 4a00 addiu v0,0
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 9a40 lw v0,0\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.
+++ /dev/null
-.*: Assembler messages:
-.*:8: Error: unsupported relocation
-.*:9: Error: unsupported relocation
+#objdump: -dr --prefix-addresses --show-raw-insn
#name: MIPS16 PC-relative relocation 6
#as: -32 -mips3
-#error-output: mips16-pcrel-reloc-6.l
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 fd40 daddiu v0,0
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 3a40 ld v0,0\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.
+ \.\.\.
+++ /dev/null
-.*: Assembler messages:
-.*:9: Error: unsupported relocation
-.*:10: Error: unsupported relocation
+#objdump: -dr --prefix-addresses --show-raw-insn
#name: MIPS16 PC-relative relocation 7
#as: -32 -mips3
-#error-output: mips16-pcrel-reloc-7.l
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 fd40 daddiu v0,0
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 3a40 ld v0,0\(v0\)
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.
+++ /dev/null
-.*: Assembler messages:
-.*:8: Error: unsupported relocation
-.*:9: Error: unsupported relocation
#name: MIPS relaxed macro with branch swapping
#as: -32
#source: relax-swap3.s
-#error-output: mips16@relax-swap3.l
-# This test used to cover the MIPS16 LA macro, but ceased to work when a
-# regression in MIPS16 relocation processing has been corrected, because
-# we have no external relocation available to represent the expression.
-# It is left in place to trigger if we ever get R_MIPS16_PC16 relocation
-# support.
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 4a00 addiu v0,0
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> eb00 jr v1
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 4a00 addiu v0,0
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> 2300 beqz v1,[0-9a-f]+ <[^>]*>
+ \.\.\.
+++ /dev/null
-.*: Assembler messages:
-.*:5: Error: unsupported relocation
-.*:8: Error: unsupported relocation
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS relaxed macro with branch swapping
+#as: -32
+#source: relax-swap3.s
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 4a00 addiu v0,0
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> eb80 jrc v1
+[0-9a-f]+ <[^>]*> f000 6a00 li v0,0
+[ ]*[0-9a-f]+: R_MIPS16_HI16 bar
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f000 4a00 addiu v0,0
+[ ]*[0-9a-f]+: R_MIPS16_LO16 bar
+[0-9a-f]+ <[^>]*> 2300 beqz v1,[0-9a-f]+ <[^>]*>
+ \.\.\.
0:
.insn
-# Force at least 8 (non-delay-slot) zero bytes, to make 'objdump' print ...
- .align 2
- .space 8
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .space 16
+ .align 4, 0
+2017-05-03 Maciej W. Rozycki <macro@imgtec.com>
+
+ * testsuite/ld-mips-elf/mips16-pcrel-0.d: New test.
+ * testsuite/ld-mips-elf/mips16-pcrel-1.d: New test.
+ * testsuite/ld-mips-elf/mips16-pcrel-addend-2.d: New test.
+ * testsuite/ld-mips-elf/mips16-pcrel-addend-6.d: New test.
+ * testsuite/ld-mips-elf/mips16-pcrel-n32-0.d: New test.
+ * testsuite/ld-mips-elf/mips16-pcrel-n32-1.d: New test.
+ * testsuite/ld-mips-elf/mips16-pcrel-n64-sym32-0.d: New test.
+ * testsuite/ld-mips-elf/mips16-pcrel-n64-sym32-1.d: New test.
+ * testsuite/ld-mips-elf/mips-elf.exp: Run the new tests.
+
2017-05-03 H.J. Lu <hongjiu.lu@intel.com>
* testsuite/ld-elf/pr21384.d: Adjusted to accommodate
[list [list ld $abi_ldflags(n64)]]
}
+run_dump_test "mips16-pcrel-0" [list [list ld $abi_ldflags(o32)]]
+run_dump_test "mips16-pcrel-1" [list [list ld $abi_ldflags(o32)]]
+run_dump_test "mips16-pcrel-addend-2" [list [list ld $abi_ldflags(o32)]]
+run_dump_test "mips16-pcrel-addend-6" [list [list ld $abi_ldflags(o32)]]
+if $has_newabi {
+ run_dump_test "mips16-pcrel-n32-0" [list [list ld $abi_ldflags(n32)]]
+ run_dump_test "mips16-pcrel-n32-1" [list [list ld $abi_ldflags(n32)]]
+ run_dump_test "mips16-pcrel-n64-sym32-0" [list [list ld $abi_ldflags(n64)]]
+ run_dump_test "mips16-pcrel-n64-sym32-1" [list [list ld $abi_ldflags(n64)]]
+}
+
run_dump_test "mips16-branch-2" [list [list ld $abi_ldflags(o32)]]
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)]]
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 link PC-relative operations 0
+#source: ../../../gas/testsuite/gas/mips/mips16-pcrel-0.s
+#as: -EB -32
+#ld: -EB -Ttext 0 -e 0
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> 0a00 la v0,0+010000 <.*>
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> b200 lw v0,0+010004 <.*>
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> 0aff la v0,0+010404 <.*>
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> b2ff lw v0,0+010408 <.*>
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> f400 0a00 la v0,0+010410 <.*>
+[0-9a-f]+ <[^>]*> f400 b200 lw v0,0+010414 <.*>
+[0-9a-f]+ <[^>]*> f7ff 0a1c la v0,0+010014 <.*>
+[0-9a-f]+ <[^>]*> f7ff b21c lw v0,0+010018 <.*>
+[0-9a-f]+ <[^>]*> f7ef 0a1f la v0,0+01801f <.*>
+[0-9a-f]+ <[^>]*> f7ef b21f lw v0,0+018023 <.*>
+[0-9a-f]+ <[^>]*> f010 0a00 la v0,0+008028 <.*>
+[0-9a-f]+ <[^>]*> f010 b200 lw v0,0+00802c <.*>
+[0-9a-f]+ <[^>]*> f000 6a02 li v0,2
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f030 4a10 addiu v0,-32720
+[0-9a-f]+ <[^>]*> f000 6a02 li v0,2
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f030 9a5c lw v0,-32708\(v0\)
+[0-9a-f]+ <[^>]*> f000 6a01 li v0,1
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f050 4a07 addiu v0,-32697
+[0-9a-f]+ <[^>]*> f000 6a01 li v0,1
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f050 9a53 lw v0,-32685\(v0\)
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.
+ \.\.\.
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 link PC-relative operations 1
+#source: ../../../gas/testsuite/gas/mips/mips16-pcrel-1.s
+#as: -EB -32 -mips3
+#ld: -EB -Ttext 0 -e 0
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> fe40 dla v0,0+010000 <.*>
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> fc40 ld v0,0+010000 <.*>
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> fe5f dla v0,0+010084 <.*>
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> fc5f ld v0,0+010100 <.*>
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> f080 fe40 dla v0,0+010090 <.*>
+[0-9a-f]+ <[^>]*> f100 fc40 ld v0,0+010110 <.*>
+[0-9a-f]+ <[^>]*> f7ff fe5c dla v0,0+010014 <.*>
+[0-9a-f]+ <[^>]*> f7ff fc5c ld v0,0+010014 <.*>
+[0-9a-f]+ <[^>]*> f7ef fe5f dla v0,0+01801f <.*>
+[0-9a-f]+ <[^>]*> f7ef fc5f ld v0,0+01801f <.*>
+[0-9a-f]+ <[^>]*> f010 fe40 dla v0,0+008028 <.*>
+[0-9a-f]+ <[^>]*> f010 fc40 ld v0,0+008028 <.*>
+[0-9a-f]+ <[^>]*> f000 6a02 li v0,2
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f030 fd50 daddiu v0,-32720
+[0-9a-f]+ <[^>]*> f000 6a02 li v0,2
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f030 3a58 ld v0,-32712\(v0\)
+[0-9a-f]+ <[^>]*> f000 6a01 li v0,1
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f050 fd47 daddiu v0,-32697
+[0-9a-f]+ <[^>]*> f000 6a01 li v0,1
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f050 3a4f ld v0,-32689\(v0\)
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.
+ \.\.\.
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 link PC-relative relocation with addend 2
+#source: ../../../gas/testsuite/gas/mips/mips16-pcrel-addend-2.s
+#as: -EB -32
+#ld: -EB -Ttext 0x43210000 -e 0
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> f328 6a01 li v0,17185
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f264 4a04 addiu v0,8804
+[0-9a-f]+ <[^>]*> f328 6a01 li v0,17185
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f264 9a44 lw v0,8804\(v0\)
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.
+ \.\.\.
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 link PC-relative relocation with addend 6
+#source: ../../../gas/testsuite/gas/mips/mips16-pcrel-addend-6.s
+#as: -EB -32 -mips3
+#ld: -EB -Ttext 0x43210000 -e 0
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> f328 6a01 li v0,17185
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f264 fd44 daddiu v0,8804
+[0-9a-f]+ <[^>]*> f328 6a01 li v0,17185
+[0-9a-f]+ <[^>]*> f400 3240 sll v0,16
+[0-9a-f]+ <[^>]*> f264 3a44 ld v0,8804\(v0\)
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.
+ \.\.\.
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 link PC-relative operations 0 (n32)
+#source: ../../../gas/testsuite/gas/mips/mips16-pcrel-0.s
+#as: -EB -n32 -mips3
+#ld: -EB -Ttext 0 -e 0
+#dump: mips16-pcrel-0.d
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 link PC-relative operations 1 (n32)
+#source: ../../../gas/testsuite/gas/mips/mips16-pcrel-1.s
+#as: -EB -n32 -mips3
+#ld: -EB -Ttext 0 -e 0
+#dump: mips16-pcrel-1.d
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 link PC-relative operations 0 (n64, sym32)
+#source: ../../../gas/testsuite/gas/mips/mips16-pcrel-0.s
+#as: -EB -64 -msym32 -mips3
+#ld: -EB -Ttext 0 -e 0
+#dump: mips16-pcrel-0.d
--- /dev/null
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 link PC-relative operations 1 (n64, sym32)
+#source: ../../../gas/testsuite/gas/mips/mips16-pcrel-1.s
+#as: -EB -64 -msym32 -mips3
+#ld: -EB -Ttext 0 -e 0
+#dump: mips16-pcrel-1.d