diff options
author | Paul Brook <paul@codesourcery.com> | 2006-10-26 19:31:11 +0000 |
---|---|---|
committer | Paul Brook <paul@codesourcery.com> | 2006-10-26 19:31:11 +0000 |
commit | 2885a11b91c3c9390ecddf6b40706437d313be37 (patch) | |
tree | bb344d2fa62bf254ac676c3fd7aff4a9f9375d55 | |
parent | e68c59e52edfa93246ac6092645c85ace0aadda9 (diff) | |
download | binutils-redhat-2885a11b91c3c9390ecddf6b40706437d313be37.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.csl | 10 | ||||
-rw-r--r-- | gas/config/tc-arm.c | 5 | ||||
-rw-r--r-- | gas/testsuite/gas/arm/neon-cov.d | 1 | ||||
-rw-r--r-- | gas/testsuite/gas/arm/neon-cov.s | 1 |
4 files changed, 15 insertions, 2 deletions
diff --git a/ChangeLog.csl b/ChangeLog.csl index dc6168aa34..b0a6369134 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 13b29844e3..6c287e94df 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 3190327111..e3f02f811f 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 079e896c25..0ac30bd233 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 |