[AArch64] Wire up vqdmullh_laneq_s16 and vqdmullh_laneq_s32
authorJames Greenhalgh <james.greenhalgh@arm.com>
Tue, 30 Sep 2014 13:58:25 +0000 (13:58 +0000)
committerJames Greenhalgh <jgreenhalgh@gcc.gnu.org>
Tue, 30 Sep 2014 13:58:25 +0000 (13:58 +0000)
gcc/

* config/aarch64/aarch64-simd-builtins.def (sqdmull_laneq): Expand
iterator.
* config/aarch64/aarch64-simd.md
(aarch64_sqdmull_laneq<mode>): Expand iterator.
* config/aarch64/arm_neon.h (vqdmullh_laneq_s16): New.
(vqdmulls_lane_s32): Fix return type.
(vqdmulls_laneq_s32): New.

gcc/testsuite/

* gcc.target/aarch64/simd/vqdmullh_laneq_s16.c: New.
* gcc.target/aarch64/simd/vqdmulls_laneq_s32.c: Likewise.
* gcc.target/aarch64/simd/vqdmulls_lane_s32.c: Fix return type.
* gcc.target/aarch64/scalar_intrinsics.c (test_vqdmulls_s32):  Fix
return type.

From-SVN: r215722

gcc/ChangeLog
gcc/config/aarch64/aarch64-simd-builtins.def
gcc/config/aarch64/aarch64-simd.md
gcc/config/aarch64/arm_neon.h
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c
gcc/testsuite/gcc.target/aarch64/simd/vqdmullh_laneq_s16.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmulls_lane_s32.c
gcc/testsuite/gcc.target/aarch64/simd/vqdmulls_laneq_s32.c [new file with mode: 0644]

index 47964d9ddcbb95b04451b4acb8ff2473aab4c9fc..98b13064cef0521e64fdd41e4317042ad260a4fd 100644 (file)
@@ -1,3 +1,13 @@
+2014-09-30  James Greenhalgh  <james.greenhalgh@arm.com>
+
+       * config/aarch64/aarch64-simd-builtins.def (sqdmull_laneq): Expand
+       iterator.
+       * config/aarch64/aarch64-simd.md
+       (aarch64_sqdmull_laneq<mode>): Expand iterator.
+       * config/aarch64/arm_neon.h (vqdmullh_laneq_s16): New.
+       (vqdmulls_lane_s32): Fix return type.
+       (vqdmulls_laneq_s32): New.
+
 2014-09-30  Jakub Jelinek  <jakub@redhat.com>
 
        PR inline-asm/63282
index de264c41738dab84b8e5853d2c8fe8b49f1f5b09..23674367d250702e17906889eff37d153c89b86e 100644 (file)
 
   BUILTIN_VSD_HSI (BINOP, sqdmull, 0)
   BUILTIN_VSD_HSI (TERNOP, sqdmull_lane, 0)
-  BUILTIN_VD_HSI (TERNOP, sqdmull_laneq, 0)
+  BUILTIN_VSD_HSI (TERNOP, sqdmull_laneq, 0)
   BUILTIN_VD_HSI (BINOP, sqdmull_n, 0)
   BUILTIN_VQ_HSI (BINOP, sqdmull2, 0)
   BUILTIN_VQ_HSI (TERNOP, sqdmull2_lane, 0)
index 8b7923e4f39210ce19e4a54e936922a3c579bd44..cab26a341ecefb65b81d13d066b349d3be354616 100644 (file)
 
 (define_expand "aarch64_sqdmull_laneq<mode>"
   [(match_operand:<VWIDE> 0 "register_operand" "=w")
-   (match_operand:VD_HSI 1 "register_operand" "w")
+   (match_operand:VSD_HSI 1 "register_operand" "w")
    (match_operand:<VCONQ> 2 "register_operand" "<vwx>")
    (match_operand:SI 3 "immediate_operand" "i")]
   "TARGET_SIMD"
index feca00ea6b1a2db27573dfcd4e0a56c7269d2791..9b1873f2bf23bf46a7b59c2e49ace34b4eec8bc2 100644 (file)
@@ -19420,16 +19420,28 @@ vqdmullh_lane_s16 (int16_t __a, int16x4_t __b, const int __c)
   return __builtin_aarch64_sqdmull_lanehi (__a, __b, __c);
 }
 
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+vqdmullh_laneq_s16 (int16_t __a, int16x8_t __b, const int __c)
+{
+  return __builtin_aarch64_sqdmull_laneqhi (__a, __b, __c);
+}
+
 __extension__ static __inline int64_t __attribute__ ((__always_inline__))
 vqdmulls_s32 (int32_t __a, int32_t __b)
 {
   return __builtin_aarch64_sqdmullsi (__a, __b);
 }
 
-__extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
+__extension__ static __inline int64_t __attribute__ ((__always_inline__))
 vqdmulls_lane_s32 (int32_t __a, int32x2_t __b, const int __c)
 {
-  return (int64x1_t) {__builtin_aarch64_sqdmull_lanesi (__a, __b, __c)};
+  return __builtin_aarch64_sqdmull_lanesi (__a, __b, __c);
+}
+
+__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+vqdmulls_laneq_s32 (int32_t __a, int32x4_t __b, const int __c)
+{
+  return __builtin_aarch64_sqdmull_laneqsi (__a, __b, __c);
 }
 
 /* vqmovn */
index 572e44b0993d594e5b53902d1419eb34a4b769e8..e42cfc8dda240f1d3014b3651b1b4fd4a299b268 100644 (file)
@@ -1,3 +1,11 @@
+2014-09-30  James Greenhalgh  <james.greenhalgh@arm.com>
+
+       * gcc.target/aarch64/simd/vqdmullh_laneq_s16.c: New.
+       * gcc.target/aarch64/simd/vqdmulls_laneq_s32.c: Likewise.
+       * gcc.target/aarch64/simd/vqdmulls_lane_s32.c: Fix return type.
+       * gcc.target/aarch64/scalar_intrinsics.c (test_vqdmulls_s32):  Fix
+       return type.
+
 2014-30-09  Dominique d'Humieres <dominiq@lps.ens.fr>
 
        * gfortran.dg/coarray_collectives_9.f90: Fix some dg-error.
index c07c94c368f3983c23bc476c1ee472cc700c23f6..ea29066e369b967d0781d31c8a5208bda9e4f685 100644 (file)
@@ -501,7 +501,7 @@ test_vqdmulls_s32 (int32_t a, int32_t b)
 
 /* { dg-final { scan-assembler-times "\\tsqdmull\\td\[0-9\]+, s\[0-9\]+, v" 1 } } */
 
-int64x1_t
+int64_t
 test_vqdmulls_lane_s32 (int32_t a, int32x2_t b)
 {
   return vqdmulls_lane_s32 (a, b, 1);
diff --git a/gcc/testsuite/gcc.target/aarch64/simd/vqdmullh_laneq_s16.c b/gcc/testsuite/gcc.target/aarch64/simd/vqdmullh_laneq_s16.c
new file mode 100644 (file)
index 0000000..947ebf4
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqdmullh_laneq_s16 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int32_t
+t_vqdmullh_laneq_s16 (int16_t a, int16x8_t b)
+{
+  return vqdmullh_laneq_s16 (a, b, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqdmull\[ \t\]+\[sS\]\[0-9\]+, ?\[hH\]\[0-9\]+, ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
index 6ed8e3a0b8a1f4c8a189eb45ab31956e1248d370..24daaab91a14639c8196ef21d0970f294558ce36 100644 (file)
@@ -5,7 +5,7 @@
 
 #include "arm_neon.h"
 
-int64x1_t
+int64_t
 t_vqdmulls_lane_s32 (int32_t a, int32x2_t b)
 {
   return vqdmulls_lane_s32 (a, b, 0);
diff --git a/gcc/testsuite/gcc.target/aarch64/simd/vqdmulls_laneq_s32.c b/gcc/testsuite/gcc.target/aarch64/simd/vqdmulls_laneq_s32.c
new file mode 100644 (file)
index 0000000..503f81e
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqdmulls_laneq_s32 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int64_t
+t_vqdmulls_laneq_s32 (int32_t a, int32x4_t b)
+{
+  return vqdmulls_laneq_s32 (a, b, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqdmull\[ \t\]+\[dD\]\[0-9\]+, ?\[sS\]\[0-9\]+, ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */