[PATCH] [ARC] Fix parsing leave_s and enter_s mnemonics.

Claudiu Zissulescu Claudiu.Zissulescu@synopsys.com
Thu Oct 6 13:06:00 GMT 2016


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



More information about the Binutils mailing list