This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[PATCH] [ARC] Fix parsing leave_s and enter_s mnemonics.
- From: Claudiu Zissulescu <Claudiu dot Zissulescu at synopsys dot com>
- To: <binutils at sourceware dot org>
- Cc: <Claudiu dot Zissulescu at synopsys dot com>, <Francois dot Bedard at synopsys dot com>
- Date: Thu, 6 Oct 2016 15:04:36 +0200
- Subject: [PATCH] [ARC] Fix parsing leave_s and enter_s mnemonics.
- Authentication-results: sourceware.org; auth=none
The parsing of the leave_s and enter_s mnemonics is broken. Fix it
and add two tests.
Ok to apply?
Claudiu
gas/
2016-09-28 Claudiu Zissulescu <claziss@synopsys.com>
* testsuite/gas/arc/leave_enter.d: New file.
* testsuite/gas/arc/leave_enter.s: Likewise.
* testsuite/gas/arc/regnames.d: Likewise.
* testsuite/gas/arc/regnames.s: Likewise.
* config/tc-arc.c (arc_parse_name): Don't match reg names against
confirmed symbol names.
---
gas/config/tc-arc.c | 3 +--
gas/testsuite/gas/arc/leave_enter.d | 21 +++++++++++++++++++++
gas/testsuite/gas/arc/leave_enter.s | 16 ++++++++++++++++
gas/testsuite/gas/arc/regnames.d | 13 +++++++++++++
gas/testsuite/gas/arc/regnames.s | 8 ++++++++
5 files changed, 59 insertions(+), 2 deletions(-)
create mode 100644 gas/testsuite/gas/arc/leave_enter.d
create mode 100644 gas/testsuite/gas/arc/leave_enter.s
create mode 100644 gas/testsuite/gas/arc/regnames.d
create mode 100644 gas/testsuite/gas/arc/regnames.s
diff --git a/gas/config/tc-arc.c b/gas/config/tc-arc.c
index 58adf0b..d2ccd8d 100644
--- a/gas/config/tc-arc.c
+++ b/gas/config/tc-arc.c
@@ -3326,8 +3326,7 @@ arc_parse_name (const char *name,
if (!assembling_insn)
return FALSE;
- /* Handle only registers and address types. */
- if (e->X_op != O_absent)
+ if (e->X_op == O_symbol)
return FALSE;
sym = hash_find (arc_reg_hash, name);
diff --git a/gas/testsuite/gas/arc/leave_enter.d b/gas/testsuite/gas/arc/leave_enter.d
new file mode 100644
index 0000000..5eb1aef
--- /dev/null
+++ b/gas/testsuite/gas/arc/leave_enter.d
@@ -0,0 +1,21 @@
+#objdump: -dr
+
+.*: +file format .*arc.*
+
+
+Disassembly of section .text:
+
+[0-9a-f]+ <.text>:
+ 0: c0c2 leave_s \[r13-r13\]
+ 2: c4dc leave_s \[r13-gp,pcl\]
+ 4: c1dc leave_s \[r13-gp,fp\]
+ 6: c2dc leave_s \[r13-gp,blink\]
+ 8: c3dc leave_s \[r13-gp,fp,blink\]
+ a: c5dc leave_s \[r13-gp,fp,pcl\]
+ c: c6dc leave_s \[r13-gp,blink,pcl\]
+ e: c7dc leave_s \[r13-gp,fp,blink,pcl\]
+ 10: 1100 0000 ld r0,\[r1\]
+ 14: c0e2 enter_s \[r13-r13\]
+ 16: c1fc enter_s \[r13-gp,fp\]
+ 18: c2fc enter_s \[r13-gp,blink\]
+ 1a: c3fc enter_s \[r13-gp,fp,blink\]
diff --git a/gas/testsuite/gas/arc/leave_enter.s b/gas/testsuite/gas/arc/leave_enter.s
new file mode 100644
index 0000000..1bdcc06
--- /dev/null
+++ b/gas/testsuite/gas/arc/leave_enter.s
@@ -0,0 +1,16 @@
+ .cpu HS
+ leave_s {r13-r13}
+ leave_s {r13-r26,pcl}
+ leave_s {r13-r26,fp}
+ leave_s {r13-r26,blink}
+ leave_s {r13-r26,fp,blink}
+ leave_s {r13-r26,fp,pcl}
+ leave_s {r13-r26,blink,pcl}
+ leave_s {r13-r26,fp,blink,pcl}
+
+ ld r0,[r1]
+
+ enter_s {r13-r13}
+ enter_s {r13-r26,fp}
+ enter_s {r13-r26,blink}
+ enter_s {r13-r26,fp,blink}
diff --git a/gas/testsuite/gas/arc/regnames.d b/gas/testsuite/gas/arc/regnames.d
new file mode 100644
index 0000000..5928a5e
--- /dev/null
+++ b/gas/testsuite/gas/arc/regnames.d
@@ -0,0 +1,13 @@
+#objdump: -dr
+
+.*: +file format .*arc.*
+
+
+Disassembly of section .text:
+
+[0-9a-f]+ <r0>:
+ 0: 200a 0f80 0000 0014 mov r0,0x14
+ 8: 2000 0f80 0000 0000 add r0,r0,0
+ c: R_ARC_32_ME gp
+ 10: 1a00 3080 st r2,\[gp\]
+ 10: R_ARC_SDA_LDST .text\+0x14
diff --git a/gas/testsuite/gas/arc/regnames.s b/gas/testsuite/gas/arc/regnames.s
new file mode 100644
index 0000000..aaea270
--- /dev/null
+++ b/gas/testsuite/gas/arc/regnames.s
@@ -0,0 +1,8 @@
+;;; Check if assembler can discriminate between labels having the same
+;;; name as a register
+
+r0:
+ mov r0,@r1-@r0
+ add r0,r0,@gp
+ st r2,[gp,@r1@sda]
+r1:
--
1.9.1