aboutsummaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>2020-09-23 17:37:58 +0100
committerKyrylo Tkachov <kyrylo.tkachov@arm.com>2020-09-28 17:13:21 +0100
commit3489c06cccb60c1af4c66aff82b670fb39f36266 (patch)
tree421b92d37118cde503ba04b33f4799b7ccb06a7e /gcc/config
parent852423cd68b403d09a14f6436080243c609a57a8 (diff)
downloadgcc-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.h14
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