diff options
author | Kyrylo Tkachov <kyrylo.tkachov@arm.com> | 2020-09-23 17:37:58 +0100 |
---|---|---|
committer | Kyrylo Tkachov <kyrylo.tkachov@arm.com> | 2020-09-28 17:13:21 +0100 |
commit | 3489c06cccb60c1af4c66aff82b670fb39f36266 (patch) | |
tree | 421b92d37118cde503ba04b33f4799b7ccb06a7e /gcc/config | |
parent | 852423cd68b403d09a14f6436080243c609a57a8 (diff) | |
download | gcc-3489c06cccb60c1af4c66aff82b670fb39f36266.zip gcc-3489c06cccb60c1af4c66aff82b670fb39f36266.tar.gz gcc-3489c06cccb60c1af4c66aff82b670fb39f36266.tar.bz2 |
AArch64: Implement missing p128<->f64 reinterpret intrinsics
This patch implements the missing reinterprets to and from poly128_t and
float64x2_t.
I've plugged in the appropriate testing in the advsimd-intrinsics.exp
too.
Bootstrapped and tested on aarch64-none-linux-gnu.
Tested advsimd-intrinsics.exp on arm-none-eabi too to make sure arm
testing isn't affected.
gcc/
PR target/71233
* config/aarch64/arm_neon.h (vreinterpretq_f64_p128,
vreinterpretq_p128_f64): Define.
gcc/testsuite/
PR target/71233
* gcc.target/aarch64/advsimd-intrinsics/arm-neon-ref.h
(clean_results): Add float64x2_t cleanup.
(DECL_VARIABLE_128BITS_VARIANTS): Add float64x2_t variable.
* gcc.target/aarch64/advsimd-intrinsics/vreinterpret_p128.c: Add
testing of vreinterpretq_f64_p128, vreinterpretq_p128_f64.
(cherry picked from commit 65c9878641cbe0ed898aa7047b7b994e9d4a5bb1)
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/aarch64/arm_neon.h | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/gcc/config/aarch64/arm_neon.h b/gcc/config/aarch64/arm_neon.h index 33a3457..4b50503 100644 --- a/gcc/config/aarch64/arm_neon.h +++ b/gcc/config/aarch64/arm_neon.h @@ -6055,6 +6055,20 @@ vreinterpretq_u32_p128 (poly128_t __a) return (uint32x4_t)__a; } +__extension__ extern __inline float64x2_t +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) +vreinterpretq_f64_p128 (poly128_t __a) +{ + return (float64x2_t) __a; +} + +__extension__ extern __inline poly128_t +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) +vreinterpretq_p128_f64 (float64x2_t __a) +{ + return (poly128_t) __a; +} + /* vset_lane */ __extension__ extern __inline float16x4_t |