* gas/config/tc-arm.c (ARM_IT_MAX_OPERANDS): New define.
authorMatthew Gretton-Dann <matthew.gretton-dann@arm.com>
Wed, 7 Dec 2011 16:46:35 +0000 (16:46 +0000)
committerMatthew Gretton-Dann <matthew.gretton-dann@arm.com>
Wed, 7 Dec 2011 16:46:35 +0000 (16:46 +0000)
(arm_it): Use ARM_IT_MAX_OPERANDS.
(neon_select_shape): Ensure we have matched all operands.
* gas/testsuite/gas/arm/neon-suffix-bad.l: Add testcase.
* gas/testsuite/gas/arm/neon-suffix-bad.s: Likewise.

gas/ChangeLog
gas/config/tc-arm.c
gas/testsuite/ChangeLog
gas/testsuite/gas/arm/neon-suffix-bad.l
gas/testsuite/gas/arm/neon-suffix-bad.s

index cc62920dbf303faf47f5728847fa1dd5348944d1..d52c5b68dbf0c45c2eb179b2217e4809c3b5fc77 100644 (file)
@@ -1,3 +1,9 @@
+2011-11-07  Matthew Gretton-Dann  <matthew.gretton-dann@arm.com>
+
+       * config/tc-arm.c (ARM_IT_MAX_OPERANDS): New define.
+       (arm_it): Use ARM_IT_MAX_OPERANDS.
+       (neon_select_shape): Ensure we have matched all operands.
+
 2011-11-07  Matthew Gretton-Dann  <matthew.gretton-dann@arm.com>
 
        * config/tc-arm.c (parse_neon_mov): Update which_operand
index 52a90300cde99dabf3b49ffe7c87c70badf7de80..064267ed13f1678c572ebba2d7b3855e5bc48248 100644 (file)
@@ -351,6 +351,9 @@ enum it_instruction_type
    IT_INSN                 /* The IT insn has been parsed.  */
 };
 
+/* The maximum number of operands we need.  */
+#define ARM_IT_MAX_OPERANDS 6
+
 struct arm_it
 {
   const char * error;
@@ -402,7 +405,7 @@ struct arm_it
     unsigned negative  : 1;  /* Index register was negated.  */
     unsigned shifted   : 1;  /* Shift applied to operation.  */
     unsigned shift_kind : 3;  /* Shift operation (enum shift_kind).  */
-  } operands[6];
+  } operands[ARM_IT_MAX_OPERANDS];
 };
 
 static struct arm_it inst;
@@ -12415,7 +12418,9 @@ neon_select_shape (enum neon_shape shape, ...)
          if (!matches)
            break;
         }
-      if (matches)
+      if (matches && (j >= ARM_IT_MAX_OPERANDS || !inst.operands[j].present))
+       /* We've matched all the entries in the shape table, and we don't
+          have any left over operands which have not been matched.  */
         break;
     }
 
index 187928867aa16ceb0822486d20e49836803dca1f..8d6e8b67fb5bc47b5e773c3a81ce584e69289f11 100644 (file)
@@ -1,3 +1,8 @@
+2011-11-07  Matthew Gretton-Dann  <matthew.gretton-dann@arm.com>
+
+       * gas/arm/neon-suffix-bad.l: Add testcase.
+       * gas/arm/neon-suffix-bad.s: Likewise.
+
 2011-12-05  Richard Earnshaw  <rearnsha@arm.com>
 
        * gas/arm/attr-any-armv4t.d: New test.
index 4c44f6b1cb1adae60e39ea0b8a129e306a59d9cd..091429dc11a4499aa00e02284a0aa78d5bd431bc 100644 (file)
@@ -2,6 +2,8 @@
 [^:]*:3: Error: invalid neon suffix for non neon instruction
 [^:]*:4: Error: invalid neon suffix for non neon instruction
 [^:]*:5: Error: invalid neon suffix for non neon instruction
-[^:]*:8: Error: invalid neon suffix for non neon instruction
+[^:]*:6: Error: invalid instruction shape -- `vcvt.f64.s32 d0,s0,#11'
 [^:]*:9: Error: invalid neon suffix for non neon instruction
 [^:]*:10: Error: invalid neon suffix for non neon instruction
+[^:]*:11: Error: invalid neon suffix for non neon instruction
+[^:]*:12: Error: invalid instruction shape -- `vcvt.f64.s32 d0,s0,#11'
index 288dba762b30f6fd95e970f7b9714eab4011ecd7..20c60fe89f56a9eabe5fe1ffca2e621c342a3b75 100644 (file)
@@ -3,10 +3,11 @@
 add.f32 r0, r0, r0
 faddd.f32 d0, d0, d0
 faddd.f64 d0, d0, d0
+vcvt.f64.s32 d0, s0, #11
 
 .thumb
 add.f32 r0, r0, r0
 faddd.f32 d0, d0, d0
 faddd.f64 d0, d0, d0
-
+vcvt.f64.s32 d0, s0, #11