aboutsummaryrefslogtreecommitdiff
path: root/gas/config
diff options
context:
space:
mode:
authorPaul Brook <paul@codesourcery.com>2007-04-04 19:21:24 +0000
committerPaul Brook <paul@codesourcery.com>2007-04-04 19:21:24 +0000
commit3b8d421e14a00af07a4e21d3f021fd02cd609670 (patch)
tree2a958234e58ddef093b322046be4ce6f00bbf25c /gas/config
parent9fcfe2ed35402e619d8c65f4ae030b10a5ec140f (diff)
downloadgdb-3b8d421e14a00af07a4e21d3f021fd02cd609670.zip
gdb-3b8d421e14a00af07a4e21d3f021fd02cd609670.tar.gz
gdb-3b8d421e14a00af07a4e21d3f021fd02cd609670.tar.bz2
2007-04-04 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.
Diffstat (limited to 'gas/config')
-rw-r--r--gas/config/tc-arm.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
index 6b915ba..9b8db7a 100644
--- a/gas/config/tc-arm.c
+++ b/gas/config/tc-arm.c
@@ -12815,6 +12815,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 >= (neon_quad (rs) ? 16 : 8), _("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;
@@ -15927,8 +15928,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). */