* gas/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.
	* gas/testsuite/gas/arm/neon-suffix-bad.l: Add testcase.
	* gas/testsuite/gas/arm/neon-suffix-bad.s: Likewise.
This commit is contained in:
Matthew Gretton-Dann 2011-12-07 16:46:35 +00:00
parent 1b11b49fe4
commit ad6cec4372
5 changed files with 23 additions and 4 deletions

View 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

View 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;
}

View 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.

View 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'

View 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