diff options
author | James Greenhalgh <james.greenhalgh@arm.com> | 2016-06-20 13:42:30 +0000 |
---|---|---|
committer | James Greenhalgh <jgreenhalgh@gcc.gnu.org> | 2016-06-20 13:42:30 +0000 |
commit | 636929b8d68c11f92ed3fa47614a38915d9476f4 (patch) | |
tree | 81088e278fc6c1a5474392a964df495ba66f4e9e /gcc | |
parent | 1f0e9e34f557ca2e184e91720429a2fda1988b69 (diff) | |
download | gcc-636929b8d68c11f92ed3fa47614a38915d9476f4.zip gcc-636929b8d68c11f92ed3fa47614a38915d9476f4.tar.gz gcc-636929b8d68c11f92ed3fa47614a38915d9476f4.tar.bz2 |
[Patch AArch64] Add some more missing intrinsics
gcc/ChangeLog
2016-06-20 James Greenhalgh <james.greenhalgh@arm.com>
* config/aarch64/arm_neon.h (vcvt_n_f64_s64): New.
(vcvt_n_f64_u64): Likewise.
(vcvt_n_s64_f64): Likewise.
(vcvt_n_u64_f64): Likewise.
(vcvt_f64_s64): Likewise.
(vrecpe_f64): Likewise.
(vcvt_f64_u64): Likewise.
(vrecps_f64): Likewise.
gcc/testsuite/ChangeLog
2016-06-20 James Greenhalgh <james.greenhalgh@arm.com>
* gcc.target/aarch64/vcvt_f64_1.c: New.
* gcc.target/aarch64/vcvt_n_f64_1.c: New.
* gcc.target/aarch64/vrecp_f64_1.c: New.
From-SVN: r237603
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/config/aarch64/arm_neon.h | 53 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 |
3 files changed, 70 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1e01322..fde5823 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,16 @@ 2016-06-20 James Greenhalgh <james.greenhalgh@arm.com> + * config/aarch64/arm_neon.h (vcvt_n_f64_s64): New. + (vcvt_n_f64_u64): Likewise. + (vcvt_n_s64_f64): Likewise. + (vcvt_n_u64_f64): Likewise. + (vcvt_f64_s64): Likewise. + (vrecpe_f64): Likewise. + (vcvt_f64_u64): Likewise. + (vrecps_f64): Likewise. + +2016-06-20 James Greenhalgh <james.greenhalgh@arm.com> + * config/aarch64/aarch64.md (<FCVT_F2FIXED:fcvt_fixed_insn><GPF:mode>3): Add attributes to iterators. diff --git a/gcc/config/aarch64/arm_neon.h b/gcc/config/aarch64/arm_neon.h index f70b6d3..ebf6fa2 100644 --- a/gcc/config/aarch64/arm_neon.h +++ b/gcc/config/aarch64/arm_neon.h @@ -12447,6 +12447,20 @@ vcvt_n_f32_u32 (uint32x2_t __a, const int __b) return __builtin_aarch64_ucvtfv2si_sus (__a, __b); } +__extension__ static __inline float64x1_t __attribute__ ((__always_inline__)) +vcvt_n_f64_s64 (int64x1_t __a, const int __b) +{ + return (float64x1_t) + { __builtin_aarch64_scvtfdi (vget_lane_s64 (__a, 0), __b) }; +} + +__extension__ static __inline float64x1_t __attribute__ ((__always_inline__)) +vcvt_n_f64_u64 (uint64x1_t __a, const int __b) +{ + return (float64x1_t) + { __builtin_aarch64_ucvtfdi_sus (vget_lane_u64 (__a, 0), __b) }; +} + __extension__ static __inline float32x4_t __attribute__ ((__always_inline__)) vcvtq_n_f32_s32 (int32x4_t __a, const int __b) { @@ -12509,6 +12523,20 @@ vcvt_n_u32_f32 (float32x2_t __a, const int __b) return __builtin_aarch64_fcvtzuv2sf_uss (__a, __b); } +__extension__ static __inline int64x1_t __attribute__ ((__always_inline__)) +vcvt_n_s64_f64 (float64x1_t __a, const int __b) +{ + return (int64x1_t) + { __builtin_aarch64_fcvtzsdf (vget_lane_f64 (__a, 0), __b) }; +} + +__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) +vcvt_n_u64_f64 (float64x1_t __a, const int __b) +{ + return (uint64x1_t) + { __builtin_aarch64_fcvtzudf_uss (vget_lane_f64 (__a, 0), __b) }; +} + __extension__ static __inline int32x4_t __attribute__ ((__always_inline__)) vcvtq_n_s32_f32 (float32x4_t __a, const int __b) { @@ -12571,6 +12599,18 @@ vcvt_f32_u32 (uint32x2_t __a) return __builtin_aarch64_floatunsv2siv2sf ((int32x2_t) __a); } +__extension__ static __inline float64x1_t __attribute__ ((__always_inline__)) +vcvt_f64_s64 (int64x1_t __a) +{ + return (float64x1_t) { vget_lane_s64 (__a, 0) }; +} + +__extension__ static __inline float64x1_t __attribute__ ((__always_inline__)) +vcvt_f64_u64 (uint64x1_t __a) +{ + return (float64x1_t) { vget_lane_u64 (__a, 0) }; +} + __extension__ static __inline float32x4_t __attribute__ ((__always_inline__)) vcvtq_f32_s32 (int32x4_t __a) { @@ -20659,6 +20699,12 @@ vrecpe_f32 (float32x2_t __a) return __builtin_aarch64_frecpev2sf (__a); } +__extension__ static __inline float64x1_t __attribute__ ((__always_inline__)) +vrecpe_f64 (float64x1_t __a) +{ + return (float64x1_t) { vrecped_f64 (vget_lane_f64 (__a, 0)) }; +} + __extension__ static __inline float32x4_t __attribute__ ((__always_inline__)) vrecpeq_f32 (float32x4_t __a) { @@ -20691,6 +20737,13 @@ vrecps_f32 (float32x2_t __a, float32x2_t __b) return __builtin_aarch64_frecpsv2sf (__a, __b); } +__extension__ static __inline float64x1_t __attribute__ ((__always_inline__)) +vrecps_f64 (float64x1_t __a, float64x1_t __b) +{ + return (float64x1_t) { vrecpsd_f64 (vget_lane_f64 (__a, 0), + vget_lane_f64 (__b, 0)) }; +} + __extension__ static __inline float32x4_t __attribute__ ((__always_inline__)) vrecpsq_f32 (float32x4_t __a, float32x4_t __b) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 542306a..b92b574 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2016-06-20 James Greenhalgh <james.greenhalgh@arm.com> + + * gcc.target/aarch64/vcvt_f64_1.c: New. + * gcc.target/aarch64/vcvt_n_f64_1.c: New. + * gcc.target/aarch64/vrecp_f64_1.c: New. + 2016-06-20 Kyrylo Tkachov <kyrylo.tkachov@arm.com> * gfortran.dg/common_align_2.f90: Use "alignment" instead of |