[ARC] Fix parsing leave_s and enter_s mnemonics.
authorClaudiu Zissulescu <claziss@synopsys.com>
Wed, 28 Sep 2016 10:27:41 +0000 (12:27 +0200)
committerClaudiu Zissulescu <claziss@synopsys.com>
Thu, 6 Oct 2016 15:01:59 +0000 (17:01 +0200)
gas/
2016-10-06  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/ChangeLog
gas/config/tc-arc.c
gas/testsuite/gas/arc/leave_enter.d [new file with mode: 0644]
gas/testsuite/gas/arc/leave_enter.s [new file with mode: 0644]
gas/testsuite/gas/arc/regnames.d [new file with mode: 0644]
gas/testsuite/gas/arc/regnames.s [new file with mode: 0644]

index c88f70fbadcaec2af30a144fe226996e63c24e0c..29b9cf636f098879cca5b404081fa680d224d63d 100644 (file)
@@ -1,3 +1,12 @@
+2016-10-06  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.
+
 2016-10-06  Alan Modra  <amodra@gmail.com>
 
        * app.c (do_scrub_chars): Move fall through comment.
index f28abf492a6116aeb042c9fb87dbaf7a41226b1b..f18ed1bd4039dc79bffcffe74c00245813c4ccdc 100644 (file)
@@ -3331,8 +3331,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 (file)
index 0000000..5eb1aef
--- /dev/null
@@ -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 (file)
index 0000000..1bdcc06
--- /dev/null
@@ -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 (file)
index 0000000..5928a5e
--- /dev/null
@@ -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 (file)
index 0000000..aaea270
--- /dev/null
@@ -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: