2007-04-04 Paul Brook <paul@codesourcery.com>
authorPaul Brook <paul@codesourcery.com>
Wed, 4 Apr 2007 19:21:24 +0000 (19:21 +0000)
committerPaul Brook <paul@codesourcery.com>
Wed, 4 Apr 2007 19:21:24 +0000 (19:21 +0000)
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.

gas/ChangeLog
gas/config/tc-arm.c
gas/testsuite/ChangeLog
gas/testsuite/gas/arm/neon-cov.d
gas/testsuite/gas/arm/neon-cov.s

index 1b94c4b64bc82eb419247d458c3537b0ac90bd3b..9844026521990e9b90c390c51df31234b0a3e81d 100644 (file)
@@ -1,3 +1,8 @@
+2007-04-04  Paul Brook  <paul@codesourcery.com>
+
+       * config/tc-arm.c (do_neon_ext): Enforce immediate range.
+       (insns): Use I15 for vext.
+
 2007-04-04  Paul Brook  <paul@codesourcery.com>
 
        * configure.tgt: Loosen checks for arm uclinux eabi targets.
index 6b915ba19cdbe7a3807b116df4326659bea17564..9b8db7ab36f9ef44a26ce2fef3d804cee07a100a 100644 (file)
@@ -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).  */
index c9aab5d3df48a41347a2cfa7a25d8ec27537f9a6..39459e80d7e40e91a7f76bcc71b04e438ed1c1dc 100644 (file)
@@ -1,3 +1,8 @@
+2007-04-04  Paul Brook  <paul@codesourcery.com>
+
+       * gas/arm/neon-cov.s: Add new vext test.
+       * gas/arm/neon-cov.d: Ditto.
+
 2007-04-01  Christian Groessler  <chris@groessler.org>
 
        * gas/z8k/calr.d: Fix for 64bit bfd.
index 31903271111af81cbb684376619542404be9d1e1..e3f02f811f14c5f3d83e822d6af95e1db90398d5 100644 (file)
@@ -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
index 2eeec273ad26d9384ea80e434bdadf5fc8441506..04194a83eb072b23a6324a7c48f5d8b22015a677 100644 (file)
        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