summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gas/ChangeLog6
-rw-r--r--gas/config/tc-arm.c20
-rw-r--r--gas/testsuite/ChangeLog5
-rw-r--r--gas/testsuite/gas/arm/neon-omit.d2
-rw-r--r--gas/testsuite/gas/arm/neon-omit.s5
5 files changed, 38 insertions, 0 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index c9b1e31237..48ac7e5f21 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,5 +1,11 @@
2013-04-09 Jan Beulich <jbeulich@suse.com>
+ * gas/config/tc-arm.c (do_neon_mov): Fake an instruction suffix
+ if there was none specified for moves between scalar and core
+ register.
+
+2013-04-09 Jan Beulich <jbeulich@suse.com>
+
* gas/config/tc-arm.c (do_neon_ldx_stx): Reject VSTn in the
NEON_ALL_LANES case.
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
index 83f66dd206..9b8d8c13d3 100644
--- a/gas/config/tc-arm.c
+++ b/gas/config/tc-arm.c
@@ -15360,6 +15360,16 @@ do_neon_mov (void)
unsigned dn = NEON_SCALAR_REG (inst.operands[0].reg);
unsigned x = NEON_SCALAR_INDEX (inst.operands[0].reg);
+ /* .<size> is optional here, defaulting to .32. */
+ if (inst.vectype.elems == 0
+ && inst.operands[0].vectype.type == NT_invtype
+ && inst.operands[1].vectype.type == NT_invtype)
+ {
+ inst.vectype.el[0].type = NT_untyped;
+ inst.vectype.el[0].size = 32;
+ inst.vectype.elems = 1;
+ }
+
et = neon_check_type (2, NS_NULL, N_8 | N_16 | N_32 | N_KEY, N_EQK);
logsize = neon_logbits (et.size);
@@ -15409,6 +15419,16 @@ do_neon_mov (void)
unsigned x = NEON_SCALAR_INDEX (inst.operands[1].reg);
unsigned abcdebits = 0;
+ /* .<dt> is optional here, defaulting to .32. */
+ if (inst.vectype.elems == 0
+ && inst.operands[0].vectype.type == NT_invtype
+ && inst.operands[1].vectype.type == NT_invtype)
+ {
+ inst.vectype.el[0].type = NT_untyped;
+ inst.vectype.el[0].size = 32;
+ inst.vectype.elems = 1;
+ }
+
et = neon_check_type (2, NS_NULL,
N_EQK, N_S8 | N_S16 | N_U8 | N_U16 | N_32 | N_KEY);
logsize = neon_logbits (et.size);
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index 28d8530b35..510927ff3a 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2013-04-09 Jan Beulich <jbeulich@suse.com>
+ * gas/arm/neon-omit.s: Add tests for suffix less VMOV.
+ * gas/arm/neon-omit.d: Update accordingly.
+
+2013-04-09 Jan Beulich <jbeulich@suse.com>
+
* gas/arm/neon-addressing-bad.s: Add test for further invalid VST
operands.
* gas/arm/neon-addressing-bad.l: Update accordingly.
diff --git a/gas/testsuite/gas/arm/neon-omit.d b/gas/testsuite/gas/arm/neon-omit.d
index 3a1eeab2ac..540f453b1b 100644
--- a/gas/testsuite/gas/arm/neon-omit.d
+++ b/gas/testsuite/gas/arm/neon-omit.d
@@ -93,4 +93,6 @@ Disassembly of section .text:
0[0-9a-f]+ <[^>]+> f3954556 vsli\.16 q2, q3, #5
0[0-9a-f]+ <[^>]+> f3bff6b7 vqshlu\.s64 d15, d23, #63.*
0[0-9a-f]+ <[^>]+> f2b25386 vext\.8 d5, d18, d6, #3
+0[0-9a-f]+ <[^>]+> ee000b10 vmov(\.32)? d0\[0\], r0
+0[0-9a-f]+ <[^>]+> ee100b10 vmov(\.32)? r0, d0\[0\]
0[0-9a-f]+ <[^>]+> f3020d54 vmul\.f32 q0, q1, q2
diff --git a/gas/testsuite/gas/arm/neon-omit.s b/gas/testsuite/gas/arm/neon-omit.s
index 35490a5fbb..54f18174a3 100644
--- a/gas/testsuite/gas/arm/neon-omit.s
+++ b/gas/testsuite/gas/arm/neon-omit.s
@@ -96,5 +96,10 @@
vqshlu.s64 d15,d23,#63
vext.8 d5,d18,d6,#3
+@ Also test VMOV with omitted suffix:
+
+ vmov d0[0], r0
+ vmov r0, d0[0]
+
@ PR 11136 - this used to crash the assembler.
vmul.f32 q0,q1,q2
OpenPOWER on IntegriCloud