config/tc-aarch64.c: Avoid trying to parse a vector mov as immediate.
authorWill Newton <will.newton@linaro.org>
Fri, 1 Nov 2013 00:21:11 +0000 (17:21 -0700)
committerWill Newton <will.newton@linaro.org>
Tue, 5 Nov 2013 14:36:13 +0000 (14:36 +0000)
Parsing a vector mov instruction currently leads to a phantom undefined
symbol being added to the symbol table. e.g.:

       .text
       mov     x0, v0.D[0]

Produces an undefined symbol called "v0.D".

gas/ChangeLog:

2013-11-05  Will Newton  <will.newton@linaro.org>

PR gas/16103
* config/tc-aarch64.c (parse_operands): Avoid trying to
parse a vector register as an immediate.

gas/testsuite/ChangeLog:

2013-11-05  Will Newton  <will.newton@linaro.org>

* gas/aarch64/advsimd-mov-bad.d: New file.
* gas/aarch64/advsimd-mov-bad.s: Likewise.

gas/ChangeLog
gas/config/tc-aarch64.c
gas/testsuite/ChangeLog
gas/testsuite/gas/aarch64/advsimd-mov-bad.d [new file with mode: 0644]
gas/testsuite/gas/aarch64/advsimd-mov-bad.s [new file with mode: 0644]

index 6d0fe3d..2010f58 100644 (file)
@@ -1,3 +1,9 @@
+2013-11-05  Will Newton  <will.newton@linaro.org>
+
+       PR gas/16103
+       * config/tc-aarch64.c (parse_operands): Avoid trying to
+       parse a vector register as an immediate.
+
 2013-09-20  Alan Modra  <amodra@gmail.com>
 
        * configure: Regenerate.
index 14ffdad..02fe4de 100644 (file)
@@ -4810,7 +4810,8 @@ parse_operands (char *str, const aarch64_opcode *opcode)
        case AARCH64_OPND_IMM_MOV:
          {
            char *saved = str;
-           if (reg_name_p (str, REG_TYPE_R_Z_SP))
+           if (reg_name_p (str, REG_TYPE_R_Z_SP) ||
+               reg_name_p (str, REG_TYPE_VN))
              goto failure;
            str = saved;
            po_misc_or_fail (my_get_expression (&inst.reloc.exp, &str,
index 80c3cfc..de79e5e 100644 (file)
@@ -1,3 +1,8 @@
+2013-11-05  Will Newton  <will.newton@linaro.org>
+
+       * gas/aarch64/advsimd-mov-bad.d: New file.
+       * gas/aarch64/advsimd-mov-bad.s: Likewise.
+
 2013-10-12  H.J. Lu  <hongjiu.lu@intel.com>
 
        * gas/i386/mpx.s: Remove bndcl/bndcu/bndcn tests with AX.
diff --git a/gas/testsuite/gas/aarch64/advsimd-mov-bad.d b/gas/testsuite/gas/aarch64/advsimd-mov-bad.d
new file mode 100644 (file)
index 0000000..6ca9887
--- /dev/null
@@ -0,0 +1,12 @@
+#source: advsimd-mov-bad.s
+#readelf: -s --wide
+
+Symbol table '.symtab' contains 6 entries:
+ +Num:.*
+ +[0-9]+:.*
+ +[0-9]+:.*
+ +[0-9]+:.*
+ +[0-9]+:.*
+ +[0-9]+:.*
+#failif
+ +[0-9]+: +[0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +UND v0.D
diff --git a/gas/testsuite/gas/aarch64/advsimd-mov-bad.s b/gas/testsuite/gas/aarch64/advsimd-mov-bad.s
new file mode 100644 (file)
index 0000000..d7ba226
--- /dev/null
@@ -0,0 +1,2 @@
+        .text
+        mov     x0, v0.D[0]