From d23ea1e865301cd45f14ccbdb0bca49251fde9e1 Mon Sep 17 00:00:00 2001 From: Kyrylo Tkachov Date: Wed, 23 Sep 2020 10:29:17 +0100 Subject: [PATCH] AArch64: Implement vstrq_p128 intrinsic This patch implements the missing vstrq_p128 intrinsic. It just performs a store of the poly128_t argument to a memory location. Bootstrapped and tested on aarch64-none-linux-gnu. gcc/ PR target/71233 * config/aarch64/arm_neon.h (vstrq_p128): Define. gcc/testsuite/ PR target/71233 * gcc.target/aarch64/simd/vstrq_p128_1.c: New test. --- gcc/config/aarch64/arm_neon.h | 7 +++++++ gcc/testsuite/gcc.target/aarch64/simd/vstrq_p128_1.c | 12 ++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 gcc/testsuite/gcc.target/aarch64/simd/vstrq_p128_1.c diff --git a/gcc/config/aarch64/arm_neon.h b/gcc/config/aarch64/arm_neon.h index 341019bc648..fe1ab0ddd17 100644 --- a/gcc/config/aarch64/arm_neon.h +++ b/gcc/config/aarch64/arm_neon.h @@ -30167,6 +30167,13 @@ vst4q_p64 (poly64_t * __a, poly64x2x4_t __val) __builtin_aarch64_st4v2di ((__builtin_aarch64_simd_di *) __a, __o); } +__extension__ extern __inline void +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) +vstrq_p128 (poly128_t * __ptr, poly128_t __val) +{ + *__ptr = __val; +} + /* vsub */ __extension__ extern __inline int64_t diff --git a/gcc/testsuite/gcc.target/aarch64/simd/vstrq_p128_1.c b/gcc/testsuite/gcc.target/aarch64/simd/vstrq_p128_1.c new file mode 100644 index 00000000000..8d036fde0f1 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/simd/vstrq_p128_1.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-O" } */ + +#include + +void +test (poly128_t *ptr, poly128_t a) +{ + vstrq_p128 (ptr, a); +} + +/* { dg-final { scan-assembler-times {stp.*x2,.*x3,.*[x0]} 1 } } */ -- 2.30.2