+2016-01-14 Nick Clifton <nickc@redhat.com>
+
+ * testsuite/gas/rl78/sp-relative-movw.s: New test.
+ * testsuite/gas/rl78/sp-relative-movw.d: Expected disassembly.
+ * testsuite/gas/rl78/rl78.exp: Run the new test.
+
2016-01-14 Matthew Wahab <matthew.wahab@arm.com>
* testsuite/gas/aarch64/illegal-sysreg-2.l: New.
run_dump_test "pr19157"
run_dump_test "pr19158"
run_dump_test "pr19159"
+ run_dump_test "sp-relative-movw"
}
--- /dev/null
+#objdump: -d --prefix-addresses --show-raw-insn
+#name: RL78: correct display of SP-relative movw instructions
+
+.*: +file format .*rl78.*
+
+Disassembly of section .text:
+0x0+000 cb f8 34 12[ ]+movw sp, #0x1234
+0x0+004 ae f8[ ]+movw ax, sp
+0x0+006 be f8[ ]+movw sp, ax
+0x0+008 af f8 ff[ ]+movw ax, !0x000ffff8
+0x0+00b bf f8 ff[ ]+movw !0x000ffff8, ax
+0x0+00e fb f8 ff[ ]+movw hl, sp
+0x0+011 db f8 ff[ ]+movw bc, sp
+0x0+014 eb f8 ff[ ]+movw de, sp
--- /dev/null
+ movw sp, #0x1234
+ movw ax, sp
+ movw sp, ax
+ movw ax, !0xffff8
+ movw !0xffff8, ax
+ movw hl, sp
+ movw bc, sp
+ movw de, sp
+
\ No newline at end of file
+2016-01-14 Nick Clifton <nickc@redhat.com>
+
+ * rl78-decode.opc (rl78_decode_opcode): Add 's' operand to movw
+ instructions that can support stack pointer operations.
+ * rl78-decode.c: Regenerate.
+ * rl78-dis.c: Fix display of stack pointer in MOVW based
+ instructions.
+
2016-01-14 Matthew Wahab <matthew.wahab@arm.com>
* aarch64-opc.c (aarch64_sys_reg_supported_p): Merge conditionals
op[0]);
printf (" ra = 0x%x\n", ra);
}
- SYNTAX("movw %0, %e!1");
+ SYNTAX("movw %0, %es!1");
#line 886 "rl78-decode.opc"
ID(mov); W(); DRW(ra); SM(None, IMMU(2));
/** 1010 1110 movw %0, %s1 */
ID(mov); W(); DR(AX); SM(None, SFR);
-/** 11ra 1011 movw %0, %e!1 */
+/** 11ra 1011 movw %0, %es!1 */
ID(mov); W(); DRW(ra); SM(None, IMMU(2));
/** 11ra 1010 movw %0, %1 */
}
if (do_bang)
- PC ('!');
+ {
+ /* If we are going to display SP by name, we must omit the bang. */
+ if ((oper->type == RL78_Operand_Indirect || RL78_Operand_BitIndirect)
+ && oper->reg == RL78_Reg_None
+ && do_sfr
+ && ((oper->addend == 0xffff8 && opcode.size == RL78_Word)
+ || (oper->addend == 0x0fff8 && do_es && opcode.size == RL78_Word)))
+ ;
+ else
+ PC ('!');
+ }
if (do_cond)
{
PR (PS, "psw");
else if (oper->addend == 0xffff8 && do_sfr && opcode.size == RL78_Word)
PR (PS, "sp");
+ else if (oper->addend == 0x0fff8 && do_sfr && do_es && opcode.size == RL78_Word)
+ PR (PS, "sp");
else if (oper->addend == 0xffff8 && do_sfr && opcode.size == RL78_Byte)
PR (PS, "spl");
else if (oper->addend == 0xffff9 && do_sfr && opcode.size == RL78_Byte)