summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Brook <paul@codesourcery.com>2006-10-26 19:31:11 +0000
committerPaul Brook <paul@codesourcery.com>2006-10-26 19:31:11 +0000
commitb810383bf2ded73cbce04e57aa05e4811c38c7c8 (patch)
treed1a6cabea3fd4ec66bf7f8c7a8a33207a4f06b07
parent67906cf60fb165640b8f0be83aa701157bbb3e0d (diff)
downloadbinutils-gdb-b810383bf2ded73cbce04e57aa05e4811c38c7c8.tar.gz
2006-10-26 Paul Brook <paul@codesourcery.com>
gas/ * config/tc-arm.c (do_neon_ext): Enforce immediate range. (insns): Use I15 for vext. gas/testsute/ * gas/arm/neon-cov.s: Add new vext test. * gas/arm/neon-cov.d: Ditto.
-rw-r--r--ChangeLog.csl10
-rw-r--r--gas/config/tc-arm.c5
-rw-r--r--gas/testsuite/gas/arm/neon-cov.d1
-rw-r--r--gas/testsuite/gas/arm/neon-cov.s1
4 files changed, 15 insertions, 2 deletions
diff --git a/ChangeLog.csl b/ChangeLog.csl
index dc6168aa341..b0a6369134c 100644
--- a/ChangeLog.csl
+++ b/ChangeLog.csl
@@ -1,3 +1,13 @@
+2006-10-26 Paul Brook <paul@codesourcery.com>
+
+ gas/
+ * config/tc-arm.c (do_neon_ext): Enforce immediate range.
+ (insns): Use I15 for vext.
+
+ gas/testsute/
+ * gas/arm/neon-cov.s: Add new vext test.
+ * gas/arm/neon-cov.d: Ditto.
+
2006-10-25 Paul Brook <paul@codesourcery.com>
gas/
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
index 13b29844e35..6c287e94df2 100644
--- a/gas/config/tc-arm.c
+++ b/gas/config/tc-arm.c
@@ -12682,6 +12682,7 @@ do_neon_ext (void)
struct neon_type_el et = neon_check_type (3, rs,
N_EQK, N_EQK, N_8 | N_16 | N_32 | N_64 | N_KEY);
unsigned imm = (inst.operands[3].imm * et.size) / 8;
+ constraint (imm >= 8 * neon_quad (rs), _("shift out of range"));
inst.instruction |= LOW4 (inst.operands[0].reg) << 12;
inst.instruction |= HI1 (inst.operands[0].reg) << 22;
inst.instruction |= LOW4 (inst.operands[1].reg) << 16;
@@ -15782,8 +15783,8 @@ static const struct asm_opcode insns[] =
nUF(vmull, vmull, 3, (RNQ, RND, RND_RNSC), neon_vmull),
/* Extract. Size 8. */
- NUF(vext, 0b00000, 4, (RNDQ, oRNDQ, RNDQ, I7), neon_ext),
- NUF(vextq, 0b00000, 4, (RNQ, oRNQ, RNQ, I7), neon_ext),
+ NUF(vext, 0b00000, 4, (RNDQ, oRNDQ, RNDQ, I15), neon_ext),
+ NUF(vextq, 0b00000, 4, (RNQ, oRNQ, RNQ, I15), neon_ext),
/* Two registers, miscellaneous. */
/* Reverse. Sizes 8 16 32 (must be < size in opcode). */
diff --git a/gas/testsuite/gas/arm/neon-cov.d b/gas/testsuite/gas/arm/neon-cov.d
index 31903271111..e3f02f811f1 100644
--- a/gas/testsuite/gas/arm/neon-cov.d
+++ b/gas/testsuite/gas/arm/neon-cov.d
@@ -1338,6 +1338,7 @@ Disassembly of section \.text:
0[0-9a-f]+ <[^>]+> f2b00040 vext\.8 q0, q0, q0, #0
0[0-9a-f]+ <[^>]+> f2b00040 vext\.8 q0, q0, q0, #0
0[0-9a-f]+ <[^>]+> f2b00000 vext\.8 d0, d0, d0, #0
+0[0-9a-f]+ <[^>]+> f2b00840 vext\.8 q0, q0, q0, #8
0[0-9a-f]+ <[^>]+> f3b00040 vrev64\.8 q0, q0
0[0-9a-f]+ <[^>]+> f3b00040 vrev64\.8 q0, q0
0[0-9a-f]+ <[^>]+> f3b00000 vrev64\.8 d0, d0
diff --git a/gas/testsuite/gas/arm/neon-cov.s b/gas/testsuite/gas/arm/neon-cov.s
index 079e896c25e..0ac30bd233b 100644
--- a/gas/testsuite/gas/arm/neon-cov.s
+++ b/gas/testsuite/gas/arm/neon-cov.s
@@ -561,6 +561,7 @@
vext.8 q0,q0,q0,0
vextq.8 q0,q0,q0,0
vext.8 d0,d0,d0,0
+ vext.8 q0,q0,q0,8
.macro revs op opq vtype
\op\vtype q0,q0