+2016-12-23 Maciej W. Rozycki <macro@imgtec.com>
+
+ * config/tc-mips.c (mips16_ip): Handle `.e' and `.t' instruction
+ suffixes followed by a null character rather than a space too.
+ * testsuite/gas/mips/mips16-insn-length-noargs.d: New test.
+ * testsuite/gas/mips/mips16-insn-length-noargs.s: New test
+ source.
+ * testsuite/gas/mips/mips.exp: Run the new test.
+
2016-12-23 Maciej W. Rozycki <macro@imgtec.com>
* testsuite/gas/mips/mips16-extend-swap.d: New test.
char *end, *s, c;
struct mips_opcode *first;
struct mips_operand_token *tokens;
-
- forced_insn_length = 0;
+ unsigned int l;
for (s = str; ISLOWER (*s); ++s)
;
end = s;
c = *end;
+
+ l = 0;
switch (c)
{
case '\0':
break;
case '.':
- if (s[1] == 't' && s[2] == ' ')
+ s++;
+ if (*s == 't')
{
- forced_insn_length = 2;
- s += 3;
- break;
+ l = 2;
+ s++;
}
- else if (s[1] == 'e' && s[2] == ' ')
+ else if (*s == 'e')
{
- forced_insn_length = 4;
- s += 3;
- break;
+ l = 4;
+ s++;
}
+ if (*s == '\0')
+ break;
+ else if (*s++ == ' ')
+ break;
/* Fall through. */
default:
set_insn_error (0, _("unrecognized opcode"));
return;
}
+ forced_insn_length = l;
*end = 0;
first = (struct mips_opcode *) hash_find (mips16_op_hash, str);
run_dump_test "mips16-extend-swap"
run_dump_test "mips16-sprel-swap"
run_dump_test "mips16-sdrasp"
+ run_dump_test "mips16-insn-length-noargs"
run_dump_test "mips16-branch-unextended-1"
run_dump_test "mips16-branch-unextended-2"
--- /dev/null
+#objdump: -d --prefix-addresses --show-raw-insn
+#name: MIPS16 argumentless instruction size override
+#as: -32
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+[0-9a-f]+ <[^>]*> e809 entry
+[0-9a-f]+ <[^>]*> e809 entry
+[0-9a-f]+ <[^>]*> ef09 exit
+[0-9a-f]+ <[^>]*> ef09 exit
+[0-9a-f]+ <[^>]*> 6500 nop
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.
--- /dev/null
+ .set mips16
+foo:
+ entry.t # comment
+ entry.t
+ exit.t # comment
+ exit.t
+ nop.t # comment
+ nop.t
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16