From fe6078e4ce27b080fe13f23eda3c5d8c21f0fad9 Mon Sep 17 00:00:00 2001 From: yroux Date: Thu, 17 Jul 2014 05:51:44 +0000 Subject: [PATCH] 2014-07-17 Yvan Roux Backport from trunk r210216, r210218, r210219. 2014-05-08 Ramana Radhakrishnan * config/arm/arm_neon.h: Update comment. * config/arm/neon-docgen.ml: Delete. * config/arm/neon-gen.ml: Delete. * doc/arm-neon-intrinsics.texi: Update comment. 2014-05-08 Ramana Radhakrishnan * config/arm/arm_neon_builtins.def (vadd, vsub): Only define the v2sf and v4sf versions. (vand, vorr, veor, vorn, vbic): Remove. * config/arm/neon.md (neon_vadd, neon_vsub, neon_vadd_unspec): Adjust iterator. (neon_vsub_unspec): Likewise. (neon_vorr, neon_vand, neon_vbic, neon_veor, neon_vorn): Remove. 2014-05-08 Ramana Radhakrishnan * config/arm/arm_neon.h (vadd_s8): GNU C implementation (vadd_s16): Likewise. (vadd_s32): Likewise. (vadd_f32): Likewise. (vadd_u8): Likewise. (vadd_u16): Likewise. (vadd_u32): Likewise. (vadd_s64): Likewise. (vadd_u64): Likewise. (vaddq_s8): Likewise. (vaddq_s16): Likewise. (vaddq_s32): Likewise. (vaddq_s64): Likewise. (vaddq_f32): Likewise. (vaddq_u8): Likewise. (vaddq_u16): Likewise. (vaddq_u32): Likewise. (vaddq_u64): Likewise. (vmul_s8): Likewise. (vmul_s16): Likewise. (vmul_s32): Likewise. (vmul_f32): Likewise. (vmul_u8): Likewise. (vmul_u16): Likewise. (vmul_u32): Likewise. (vmul_p8): Likewise. (vmulq_s8): Likewise. (vmulq_s16): Likewise. (vmulq_s32): Likewise. (vmulq_f32): Likewise. (vmulq_u8): Likewise. (vmulq_u16): Likewise. (vmulq_u32): Likewise. (vsub_s8): Likewise. (vsub_s16): Likewise. (vsub_s32): Likewise. (vsub_f32): Likewise. (vsub_u8): Likewise. (vsub_u16): Likewise. (vsub_u32): Likewise. (vsub_s64): Likewise. (vsub_u64): Likewise. (vsubq_s8): Likewise. (vsubq_s16): Likewise. (vsubq_s32): Likewise. (vsubq_s64): Likewise. (vsubq_f32): Likewise. (vsubq_u8): Likewise. (vsubq_u16): Likewise. (vsubq_u32): Likewise. (vsubq_u64): Likewise. (vand_s8): Likewise. (vand_s16): Likewise. (vand_s32): Likewise. (vand_u8): Likewise. (vand_u16): Likewise. (vand_u32): Likewise. (vand_s64): Likewise. (vand_u64): Likewise. (vandq_s8): Likewise. (vandq_s16): Likewise. (vandq_s32): Likewise. (vandq_s64): Likewise. (vandq_u8): Likewise. (vandq_u16): Likewise. (vandq_u32): Likewise. (vandq_u64): Likewise. (vorr_s8): Likewise. (vorr_s16): Likewise. (vorr_s32): Likewise. (vorr_u8): Likewise. (vorr_u16): Likewise. (vorr_u32): Likewise. (vorr_s64): Likewise. (vorr_u64): Likewise. (vorrq_s8): Likewise. (vorrq_s16): Likewise. (vorrq_s32): Likewise. (vorrq_s64): Likewise. (vorrq_u8): Likewise. (vorrq_u16): Likewise. (vorrq_u32): Likewise. (vorrq_u64): Likewise. (veor_s8): Likewise. (veor_s16): Likewise. (veor_s32): Likewise. (veor_u8): Likewise. (veor_u16): Likewise. (veor_u32): Likewise. (veor_s64): Likewise. (veor_u64): Likewise. (veorq_s8): Likewise. (veorq_s16): Likewise. (veorq_s32): Likewise. (veorq_s64): Likewise. (veorq_u8): Likewise. (veorq_u16): Likewise. (veorq_u32): Likewise. (veorq_u64): Likewise. (vbic_s8): Likewise. (vbic_s16): Likewise. (vbic_s32): Likewise. (vbic_u8): Likewise. (vbic_u16): Likewise. (vbic_u32): Likewise. (vbic_s64): Likewise. (vbic_u64): Likewise. (vbicq_s8): Likewise. (vbicq_s16): Likewise. (vbicq_s32): Likewise. (vbicq_s64): Likewise. (vbicq_u8): Likewise. (vbicq_u16): Likewise. (vbicq_u32): Likewise. (vbicq_u64): Likewise. (vorn_s8): Likewise. (vorn_s16): Likewise. (vorn_s32): Likewise. (vorn_u8): Likewise. (vorn_u16): Likewise. (vorn_u32): Likewise. (vorn_s64): Likewise. (vorn_u64): Likewise. (vornq_s8): Likewise. (vornq_s16): Likewise. (vornq_s32): Likewise. (vornq_s64): Likewise. (vornq_u8): Likewise. (vornq_u16): Likewise. (vornq_u32): Likewise. (vornq_u64): Likewise. git-svn-id: svn://gcc.gnu.org/svn/gcc/branches/linaro/gcc-4_9-branch@212714 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog.linaro | 154 ++++++++++++++++++ gcc/config/arm/arm_neon.h | 302 +++++++++++++++++++---------------- gcc/config/arm/arm_neon_builtins.def | 17 +- gcc/config/arm/neon.md | 79 ++------- 4 files changed, 332 insertions(+), 220 deletions(-) diff --git a/gcc/ChangeLog.linaro b/gcc/ChangeLog.linaro index c89caf2..abe07d5 100644 --- a/gcc/ChangeLog.linaro +++ b/gcc/ChangeLog.linaro @@ -1,3 +1,157 @@ +2014-07-17 Yvan Roux + + Backport from trunk r210216, r210218, r210219. + 2014-05-08 Ramana Radhakrishnan + + * config/arm/arm_neon.h: Update comment. + * config/arm/neon-docgen.ml: Delete. + * config/arm/neon-gen.ml: Delete. + * doc/arm-neon-intrinsics.texi: Update comment. + + 2014-05-08 Ramana Radhakrishnan + + * config/arm/arm_neon_builtins.def (vadd, vsub): Only define the v2sf + and v4sf versions. + (vand, vorr, veor, vorn, vbic): Remove. + * config/arm/neon.md (neon_vadd, neon_vsub, neon_vadd_unspec): Adjust + iterator. + (neon_vsub_unspec): Likewise. + (neon_vorr, neon_vand, neon_vbic, neon_veor, neon_vorn): Remove. + + 2014-05-08 Ramana Radhakrishnan + + * config/arm/arm_neon.h (vadd_s8): GNU C implementation + (vadd_s16): Likewise. + (vadd_s32): Likewise. + (vadd_f32): Likewise. + (vadd_u8): Likewise. + (vadd_u16): Likewise. + (vadd_u32): Likewise. + (vadd_s64): Likewise. + (vadd_u64): Likewise. + (vaddq_s8): Likewise. + (vaddq_s16): Likewise. + (vaddq_s32): Likewise. + (vaddq_s64): Likewise. + (vaddq_f32): Likewise. + (vaddq_u8): Likewise. + (vaddq_u16): Likewise. + (vaddq_u32): Likewise. + (vaddq_u64): Likewise. + (vmul_s8): Likewise. + (vmul_s16): Likewise. + (vmul_s32): Likewise. + (vmul_f32): Likewise. + (vmul_u8): Likewise. + (vmul_u16): Likewise. + (vmul_u32): Likewise. + (vmul_p8): Likewise. + (vmulq_s8): Likewise. + (vmulq_s16): Likewise. + (vmulq_s32): Likewise. + (vmulq_f32): Likewise. + (vmulq_u8): Likewise. + (vmulq_u16): Likewise. + (vmulq_u32): Likewise. + (vsub_s8): Likewise. + (vsub_s16): Likewise. + (vsub_s32): Likewise. + (vsub_f32): Likewise. + (vsub_u8): Likewise. + (vsub_u16): Likewise. + (vsub_u32): Likewise. + (vsub_s64): Likewise. + (vsub_u64): Likewise. + (vsubq_s8): Likewise. + (vsubq_s16): Likewise. + (vsubq_s32): Likewise. + (vsubq_s64): Likewise. + (vsubq_f32): Likewise. + (vsubq_u8): Likewise. + (vsubq_u16): Likewise. + (vsubq_u32): Likewise. + (vsubq_u64): Likewise. + (vand_s8): Likewise. + (vand_s16): Likewise. + (vand_s32): Likewise. + (vand_u8): Likewise. + (vand_u16): Likewise. + (vand_u32): Likewise. + (vand_s64): Likewise. + (vand_u64): Likewise. + (vandq_s8): Likewise. + (vandq_s16): Likewise. + (vandq_s32): Likewise. + (vandq_s64): Likewise. + (vandq_u8): Likewise. + (vandq_u16): Likewise. + (vandq_u32): Likewise. + (vandq_u64): Likewise. + (vorr_s8): Likewise. + (vorr_s16): Likewise. + (vorr_s32): Likewise. + (vorr_u8): Likewise. + (vorr_u16): Likewise. + (vorr_u32): Likewise. + (vorr_s64): Likewise. + (vorr_u64): Likewise. + (vorrq_s8): Likewise. + (vorrq_s16): Likewise. + (vorrq_s32): Likewise. + (vorrq_s64): Likewise. + (vorrq_u8): Likewise. + (vorrq_u16): Likewise. + (vorrq_u32): Likewise. + (vorrq_u64): Likewise. + (veor_s8): Likewise. + (veor_s16): Likewise. + (veor_s32): Likewise. + (veor_u8): Likewise. + (veor_u16): Likewise. + (veor_u32): Likewise. + (veor_s64): Likewise. + (veor_u64): Likewise. + (veorq_s8): Likewise. + (veorq_s16): Likewise. + (veorq_s32): Likewise. + (veorq_s64): Likewise. + (veorq_u8): Likewise. + (veorq_u16): Likewise. + (veorq_u32): Likewise. + (veorq_u64): Likewise. + (vbic_s8): Likewise. + (vbic_s16): Likewise. + (vbic_s32): Likewise. + (vbic_u8): Likewise. + (vbic_u16): Likewise. + (vbic_u32): Likewise. + (vbic_s64): Likewise. + (vbic_u64): Likewise. + (vbicq_s8): Likewise. + (vbicq_s16): Likewise. + (vbicq_s32): Likewise. + (vbicq_s64): Likewise. + (vbicq_u8): Likewise. + (vbicq_u16): Likewise. + (vbicq_u32): Likewise. + (vbicq_u64): Likewise. + (vorn_s8): Likewise. + (vorn_s16): Likewise. + (vorn_s32): Likewise. + (vorn_u8): Likewise. + (vorn_u16): Likewise. + (vorn_u32): Likewise. + (vorn_s64): Likewise. + (vorn_u64): Likewise. + (vornq_s8): Likewise. + (vornq_s16): Likewise. + (vornq_s32): Likewise. + (vornq_s64): Likewise. + (vornq_u8): Likewise. + (vornq_u16): Likewise. + (vornq_u32): Likewise. + (vornq_u64): Likewise. + 2014-07-16 Yvan Roux Backport from trunk r210151. diff --git a/gcc/config/arm/arm_neon.h b/gcc/config/arm/arm_neon.h index 9573543..3e29f44 100644 --- a/gcc/config/arm/arm_neon.h +++ b/gcc/config/arm/arm_neon.h @@ -452,114 +452,121 @@ typedef struct poly64x2x4_t } poly64x2x4_t; #endif - - +/* vadd */ __extension__ static __inline int8x8_t __attribute__ ((__always_inline__)) vadd_s8 (int8x8_t __a, int8x8_t __b) { - return (int8x8_t)__builtin_neon_vaddv8qi (__a, __b, 1); + return __a + __b; } __extension__ static __inline int16x4_t __attribute__ ((__always_inline__)) vadd_s16 (int16x4_t __a, int16x4_t __b) { - return (int16x4_t)__builtin_neon_vaddv4hi (__a, __b, 1); + return __a + __b; } __extension__ static __inline int32x2_t __attribute__ ((__always_inline__)) vadd_s32 (int32x2_t __a, int32x2_t __b) { - return (int32x2_t)__builtin_neon_vaddv2si (__a, __b, 1); + return __a + __b; } __extension__ static __inline float32x2_t __attribute__ ((__always_inline__)) vadd_f32 (float32x2_t __a, float32x2_t __b) { - return (float32x2_t)__builtin_neon_vaddv2sf (__a, __b, 3); +#ifdef __FAST_MATH__ + return __a + __b; +#else + return (float32x2_t) __builtin_neon_vaddv2sf (__a, __b, 3); +#endif } __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__)) vadd_u8 (uint8x8_t __a, uint8x8_t __b) { - return (uint8x8_t)__builtin_neon_vaddv8qi ((int8x8_t) __a, (int8x8_t) __b, 0); + return __a + __b; } __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__)) vadd_u16 (uint16x4_t __a, uint16x4_t __b) { - return (uint16x4_t)__builtin_neon_vaddv4hi ((int16x4_t) __a, (int16x4_t) __b, 0); + return __a + __b; } __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vadd_u32 (uint32x2_t __a, uint32x2_t __b) { - return (uint32x2_t)__builtin_neon_vaddv2si ((int32x2_t) __a, (int32x2_t) __b, 0); + return __a + __b; } __extension__ static __inline int64x1_t __attribute__ ((__always_inline__)) vadd_s64 (int64x1_t __a, int64x1_t __b) { - return (int64x1_t)__builtin_neon_vadddi (__a, __b, 1); + return __a + __b; } __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) vadd_u64 (uint64x1_t __a, uint64x1_t __b) { - return (uint64x1_t)__builtin_neon_vadddi ((int64x1_t) __a, (int64x1_t) __b, 0); + return __a + __b; } __extension__ static __inline int8x16_t __attribute__ ((__always_inline__)) vaddq_s8 (int8x16_t __a, int8x16_t __b) { - return (int8x16_t)__builtin_neon_vaddv16qi (__a, __b, 1); + return __a + __b; } __extension__ static __inline int16x8_t __attribute__ ((__always_inline__)) vaddq_s16 (int16x8_t __a, int16x8_t __b) { - return (int16x8_t)__builtin_neon_vaddv8hi (__a, __b, 1); + return __a + __b; } __extension__ static __inline int32x4_t __attribute__ ((__always_inline__)) vaddq_s32 (int32x4_t __a, int32x4_t __b) { - return (int32x4_t)__builtin_neon_vaddv4si (__a, __b, 1); + return __a + __b; } __extension__ static __inline int64x2_t __attribute__ ((__always_inline__)) vaddq_s64 (int64x2_t __a, int64x2_t __b) { - return (int64x2_t)__builtin_neon_vaddv2di (__a, __b, 1); + return __a + __b; } __extension__ static __inline float32x4_t __attribute__ ((__always_inline__)) vaddq_f32 (float32x4_t __a, float32x4_t __b) { - return (float32x4_t)__builtin_neon_vaddv4sf (__a, __b, 3); +#ifdef __FAST_MATH + return __a + __b; +#else + return (float32x4_t) __builtin_neon_vaddv4sf (__a, __b, 3); +#endif } __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) vaddq_u8 (uint8x16_t __a, uint8x16_t __b) { - return (uint8x16_t)__builtin_neon_vaddv16qi ((int8x16_t) __a, (int8x16_t) __b, 0); + return __a + __b; } __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__)) vaddq_u16 (uint16x8_t __a, uint16x8_t __b) { - return (uint16x8_t)__builtin_neon_vaddv8hi ((int16x8_t) __a, (int16x8_t) __b, 0); + return __a + __b; } __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vaddq_u32 (uint32x4_t __a, uint32x4_t __b) { - return (uint32x4_t)__builtin_neon_vaddv4si ((int32x4_t) __a, (int32x4_t) __b, 0); + return __a + __b; } __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__)) vaddq_u64 (uint64x2_t __a, uint64x2_t __b) { - return (uint64x2_t)__builtin_neon_vaddv2di ((int64x2_t) __a, (int64x2_t) __b, 0); + return __a + __b; } __extension__ static __inline int16x8_t __attribute__ ((__always_inline__)) @@ -949,91 +956,100 @@ vraddhn_u64 (uint64x2_t __a, uint64x2_t __b) __extension__ static __inline int8x8_t __attribute__ ((__always_inline__)) vmul_s8 (int8x8_t __a, int8x8_t __b) { - return (int8x8_t)__builtin_neon_vmulv8qi (__a, __b, 1); + return __a * __b; } __extension__ static __inline int16x4_t __attribute__ ((__always_inline__)) vmul_s16 (int16x4_t __a, int16x4_t __b) { - return (int16x4_t)__builtin_neon_vmulv4hi (__a, __b, 1); + return __a * __b; } __extension__ static __inline int32x2_t __attribute__ ((__always_inline__)) vmul_s32 (int32x2_t __a, int32x2_t __b) { - return (int32x2_t)__builtin_neon_vmulv2si (__a, __b, 1); + return __a * __b; } __extension__ static __inline float32x2_t __attribute__ ((__always_inline__)) vmul_f32 (float32x2_t __a, float32x2_t __b) { - return (float32x2_t)__builtin_neon_vmulv2sf (__a, __b, 3); +#ifdef __FAST_MATH + return __a * __b; +#else + return (float32x2_t) __builtin_neon_vmulv2sf (__a, __b, 3); +#endif + } __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__)) vmul_u8 (uint8x8_t __a, uint8x8_t __b) { - return (uint8x8_t)__builtin_neon_vmulv8qi ((int8x8_t) __a, (int8x8_t) __b, 0); + return __a * __b; } __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__)) vmul_u16 (uint16x4_t __a, uint16x4_t __b) { - return (uint16x4_t)__builtin_neon_vmulv4hi ((int16x4_t) __a, (int16x4_t) __b, 0); + return __a * __b; } __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vmul_u32 (uint32x2_t __a, uint32x2_t __b) { - return (uint32x2_t)__builtin_neon_vmulv2si ((int32x2_t) __a, (int32x2_t) __b, 0); -} - -__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__)) -vmul_p8 (poly8x8_t __a, poly8x8_t __b) -{ - return (poly8x8_t)__builtin_neon_vmulv8qi ((int8x8_t) __a, (int8x8_t) __b, 2); + return __a * __b; } __extension__ static __inline int8x16_t __attribute__ ((__always_inline__)) vmulq_s8 (int8x16_t __a, int8x16_t __b) { - return (int8x16_t)__builtin_neon_vmulv16qi (__a, __b, 1); + return __a * __b; } __extension__ static __inline int16x8_t __attribute__ ((__always_inline__)) vmulq_s16 (int16x8_t __a, int16x8_t __b) { - return (int16x8_t)__builtin_neon_vmulv8hi (__a, __b, 1); + return __a * __b; } __extension__ static __inline int32x4_t __attribute__ ((__always_inline__)) vmulq_s32 (int32x4_t __a, int32x4_t __b) { - return (int32x4_t)__builtin_neon_vmulv4si (__a, __b, 1); + return __a * __b; } __extension__ static __inline float32x4_t __attribute__ ((__always_inline__)) vmulq_f32 (float32x4_t __a, float32x4_t __b) { - return (float32x4_t)__builtin_neon_vmulv4sf (__a, __b, 3); +#ifdef __FAST_MATH + return __a * __b; +#else + return (float32x4_t) __builtin_neon_vmulv4sf (__a, __b, 3); +#endif } __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) vmulq_u8 (uint8x16_t __a, uint8x16_t __b) { - return (uint8x16_t)__builtin_neon_vmulv16qi ((int8x16_t) __a, (int8x16_t) __b, 0); + return __a * __b; } __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__)) vmulq_u16 (uint16x8_t __a, uint16x8_t __b) { - return (uint16x8_t)__builtin_neon_vmulv8hi ((int16x8_t) __a, (int16x8_t) __b, 0); + return __a * __b; } __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vmulq_u32 (uint32x4_t __a, uint32x4_t __b) { - return (uint32x4_t)__builtin_neon_vmulv4si ((int32x4_t) __a, (int32x4_t) __b, 0); + return __a * __b; +} + +__extension__ static __inline poly8x8_t __attribute__ ((__always_inline__)) +vmul_p8 (poly8x8_t __a, poly8x8_t __b) +{ + return (poly8x8_t)__builtin_neon_vmulv8qi ((int8x8_t) __a, (int8x8_t) __b, 2); } __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__)) @@ -1520,112 +1536,121 @@ vrndq_f32 (float32x4_t __a) } #endif + __extension__ static __inline int8x8_t __attribute__ ((__always_inline__)) vsub_s8 (int8x8_t __a, int8x8_t __b) { - return (int8x8_t)__builtin_neon_vsubv8qi (__a, __b, 1); + return __a - __b; } __extension__ static __inline int16x4_t __attribute__ ((__always_inline__)) vsub_s16 (int16x4_t __a, int16x4_t __b) { - return (int16x4_t)__builtin_neon_vsubv4hi (__a, __b, 1); + return __a - __b; } __extension__ static __inline int32x2_t __attribute__ ((__always_inline__)) vsub_s32 (int32x2_t __a, int32x2_t __b) { - return (int32x2_t)__builtin_neon_vsubv2si (__a, __b, 1); + return __a - __b; } __extension__ static __inline float32x2_t __attribute__ ((__always_inline__)) vsub_f32 (float32x2_t __a, float32x2_t __b) { - return (float32x2_t)__builtin_neon_vsubv2sf (__a, __b, 3); +#ifdef __FAST_MATH + return __a - __b; +#else + return (float32x2_t) __builtin_neon_vsubv2sf (__a, __b, 3); +#endif } __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__)) vsub_u8 (uint8x8_t __a, uint8x8_t __b) { - return (uint8x8_t)__builtin_neon_vsubv8qi ((int8x8_t) __a, (int8x8_t) __b, 0); + return __a - __b; } __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__)) vsub_u16 (uint16x4_t __a, uint16x4_t __b) { - return (uint16x4_t)__builtin_neon_vsubv4hi ((int16x4_t) __a, (int16x4_t) __b, 0); + return __a - __b; } __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vsub_u32 (uint32x2_t __a, uint32x2_t __b) { - return (uint32x2_t)__builtin_neon_vsubv2si ((int32x2_t) __a, (int32x2_t) __b, 0); + return __a - __b; } __extension__ static __inline int64x1_t __attribute__ ((__always_inline__)) vsub_s64 (int64x1_t __a, int64x1_t __b) { - return (int64x1_t)__builtin_neon_vsubdi (__a, __b, 1); + return __a - __b; } __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) vsub_u64 (uint64x1_t __a, uint64x1_t __b) { - return (uint64x1_t)__builtin_neon_vsubdi ((int64x1_t) __a, (int64x1_t) __b, 0); + return __a - __b; } __extension__ static __inline int8x16_t __attribute__ ((__always_inline__)) vsubq_s8 (int8x16_t __a, int8x16_t __b) { - return (int8x16_t)__builtin_neon_vsubv16qi (__a, __b, 1); + return __a - __b; } __extension__ static __inline int16x8_t __attribute__ ((__always_inline__)) vsubq_s16 (int16x8_t __a, int16x8_t __b) { - return (int16x8_t)__builtin_neon_vsubv8hi (__a, __b, 1); + return __a - __b; } __extension__ static __inline int32x4_t __attribute__ ((__always_inline__)) vsubq_s32 (int32x4_t __a, int32x4_t __b) { - return (int32x4_t)__builtin_neon_vsubv4si (__a, __b, 1); + return __a - __b; } __extension__ static __inline int64x2_t __attribute__ ((__always_inline__)) vsubq_s64 (int64x2_t __a, int64x2_t __b) { - return (int64x2_t)__builtin_neon_vsubv2di (__a, __b, 1); + return __a - __b; } __extension__ static __inline float32x4_t __attribute__ ((__always_inline__)) vsubq_f32 (float32x4_t __a, float32x4_t __b) { - return (float32x4_t)__builtin_neon_vsubv4sf (__a, __b, 3); +#ifdef __FAST_MATH + return __a - __b; +#else + return (float32x4_t) __builtin_neon_vsubv4sf (__a, __b, 3); +#endif } __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) vsubq_u8 (uint8x16_t __a, uint8x16_t __b) { - return (uint8x16_t)__builtin_neon_vsubv16qi ((int8x16_t) __a, (int8x16_t) __b, 0); + return __a - __b; } __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__)) vsubq_u16 (uint16x8_t __a, uint16x8_t __b) { - return (uint16x8_t)__builtin_neon_vsubv8hi ((int16x8_t) __a, (int16x8_t) __b, 0); + return __a - __b; } __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vsubq_u32 (uint32x4_t __a, uint32x4_t __b) { - return (uint32x4_t)__builtin_neon_vsubv4si ((int32x4_t) __a, (int32x4_t) __b, 0); + return __a - __b; } __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__)) vsubq_u64 (uint64x2_t __a, uint64x2_t __b) { - return (uint64x2_t)__builtin_neon_vsubv2di ((int64x2_t) __a, (int64x2_t) __b, 0); + return __a - __b; } __extension__ static __inline int16x8_t __attribute__ ((__always_inline__)) @@ -11295,484 +11320,483 @@ vst4q_lane_p16 (poly16_t * __a, poly16x8x4_t __b, const int __c) __extension__ static __inline int8x8_t __attribute__ ((__always_inline__)) vand_s8 (int8x8_t __a, int8x8_t __b) { - return (int8x8_t)__builtin_neon_vandv8qi (__a, __b, 1); + return __a & __b; } __extension__ static __inline int16x4_t __attribute__ ((__always_inline__)) vand_s16 (int16x4_t __a, int16x4_t __b) { - return (int16x4_t)__builtin_neon_vandv4hi (__a, __b, 1); + return __a & __b; } __extension__ static __inline int32x2_t __attribute__ ((__always_inline__)) vand_s32 (int32x2_t __a, int32x2_t __b) { - return (int32x2_t)__builtin_neon_vandv2si (__a, __b, 1); + return __a & __b; } __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__)) vand_u8 (uint8x8_t __a, uint8x8_t __b) { - return (uint8x8_t)__builtin_neon_vandv8qi ((int8x8_t) __a, (int8x8_t) __b, 0); + return __a & __b; } __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__)) vand_u16 (uint16x4_t __a, uint16x4_t __b) { - return (uint16x4_t)__builtin_neon_vandv4hi ((int16x4_t) __a, (int16x4_t) __b, 0); + return __a & __b; } __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vand_u32 (uint32x2_t __a, uint32x2_t __b) { - return (uint32x2_t)__builtin_neon_vandv2si ((int32x2_t) __a, (int32x2_t) __b, 0); + return __a & __b; } __extension__ static __inline int64x1_t __attribute__ ((__always_inline__)) vand_s64 (int64x1_t __a, int64x1_t __b) { - return (int64x1_t)__builtin_neon_vanddi (__a, __b, 1); + return __a & __b; } __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) vand_u64 (uint64x1_t __a, uint64x1_t __b) { - return (uint64x1_t)__builtin_neon_vanddi ((int64x1_t) __a, (int64x1_t) __b, 0); + return __a & __b; } __extension__ static __inline int8x16_t __attribute__ ((__always_inline__)) vandq_s8 (int8x16_t __a, int8x16_t __b) { - return (int8x16_t)__builtin_neon_vandv16qi (__a, __b, 1); + return __a & __b; } __extension__ static __inline int16x8_t __attribute__ ((__always_inline__)) vandq_s16 (int16x8_t __a, int16x8_t __b) { - return (int16x8_t)__builtin_neon_vandv8hi (__a, __b, 1); + return __a & __b; } __extension__ static __inline int32x4_t __attribute__ ((__always_inline__)) vandq_s32 (int32x4_t __a, int32x4_t __b) { - return (int32x4_t)__builtin_neon_vandv4si (__a, __b, 1); + return __a & __b; } __extension__ static __inline int64x2_t __attribute__ ((__always_inline__)) vandq_s64 (int64x2_t __a, int64x2_t __b) { - return (int64x2_t)__builtin_neon_vandv2di (__a, __b, 1); + return __a & __b; } __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) vandq_u8 (uint8x16_t __a, uint8x16_t __b) { - return (uint8x16_t)__builtin_neon_vandv16qi ((int8x16_t) __a, (int8x16_t) __b, 0); + return __a & __b; } __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__)) vandq_u16 (uint16x8_t __a, uint16x8_t __b) { - return (uint16x8_t)__builtin_neon_vandv8hi ((int16x8_t) __a, (int16x8_t) __b, 0); + return __a & __b; } __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vandq_u32 (uint32x4_t __a, uint32x4_t __b) { - return (uint32x4_t)__builtin_neon_vandv4si ((int32x4_t) __a, (int32x4_t) __b, 0); + return __a & __b; } __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__)) vandq_u64 (uint64x2_t __a, uint64x2_t __b) { - return (uint64x2_t)__builtin_neon_vandv2di ((int64x2_t) __a, (int64x2_t) __b, 0); + return __a & __b; } __extension__ static __inline int8x8_t __attribute__ ((__always_inline__)) vorr_s8 (int8x8_t __a, int8x8_t __b) { - return (int8x8_t)__builtin_neon_vorrv8qi (__a, __b, 1); + return __a | __b; } __extension__ static __inline int16x4_t __attribute__ ((__always_inline__)) vorr_s16 (int16x4_t __a, int16x4_t __b) { - return (int16x4_t)__builtin_neon_vorrv4hi (__a, __b, 1); + return __a | __b; } __extension__ static __inline int32x2_t __attribute__ ((__always_inline__)) vorr_s32 (int32x2_t __a, int32x2_t __b) { - return (int32x2_t)__builtin_neon_vorrv2si (__a, __b, 1); + return __a | __b; } __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__)) vorr_u8 (uint8x8_t __a, uint8x8_t __b) { - return (uint8x8_t)__builtin_neon_vorrv8qi ((int8x8_t) __a, (int8x8_t) __b, 0); + return __a | __b; } __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__)) vorr_u16 (uint16x4_t __a, uint16x4_t __b) { - return (uint16x4_t)__builtin_neon_vorrv4hi ((int16x4_t) __a, (int16x4_t) __b, 0); + return __a | __b; } __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vorr_u32 (uint32x2_t __a, uint32x2_t __b) { - return (uint32x2_t)__builtin_neon_vorrv2si ((int32x2_t) __a, (int32x2_t) __b, 0); + return __a | __b; } __extension__ static __inline int64x1_t __attribute__ ((__always_inline__)) vorr_s64 (int64x1_t __a, int64x1_t __b) { - return (int64x1_t)__builtin_neon_vorrdi (__a, __b, 1); + return __a | __b; } __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) vorr_u64 (uint64x1_t __a, uint64x1_t __b) { - return (uint64x1_t)__builtin_neon_vorrdi ((int64x1_t) __a, (int64x1_t) __b, 0); + return __a | __b; } __extension__ static __inline int8x16_t __attribute__ ((__always_inline__)) vorrq_s8 (int8x16_t __a, int8x16_t __b) { - return (int8x16_t)__builtin_neon_vorrv16qi (__a, __b, 1); + return __a | __b; } __extension__ static __inline int16x8_t __attribute__ ((__always_inline__)) vorrq_s16 (int16x8_t __a, int16x8_t __b) { - return (int16x8_t)__builtin_neon_vorrv8hi (__a, __b, 1); + return __a | __b; } __extension__ static __inline int32x4_t __attribute__ ((__always_inline__)) vorrq_s32 (int32x4_t __a, int32x4_t __b) { - return (int32x4_t)__builtin_neon_vorrv4si (__a, __b, 1); + return __a | __b; } __extension__ static __inline int64x2_t __attribute__ ((__always_inline__)) vorrq_s64 (int64x2_t __a, int64x2_t __b) { - return (int64x2_t)__builtin_neon_vorrv2di (__a, __b, 1); + return __a | __b; } __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) vorrq_u8 (uint8x16_t __a, uint8x16_t __b) { - return (uint8x16_t)__builtin_neon_vorrv16qi ((int8x16_t) __a, (int8x16_t) __b, 0); + return __a | __b; } __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__)) vorrq_u16 (uint16x8_t __a, uint16x8_t __b) { - return (uint16x8_t)__builtin_neon_vorrv8hi ((int16x8_t) __a, (int16x8_t) __b, 0); + return __a | __b; } __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vorrq_u32 (uint32x4_t __a, uint32x4_t __b) { - return (uint32x4_t)__builtin_neon_vorrv4si ((int32x4_t) __a, (int32x4_t) __b, 0); + return __a | __b; } __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__)) vorrq_u64 (uint64x2_t __a, uint64x2_t __b) { - return (uint64x2_t)__builtin_neon_vorrv2di ((int64x2_t) __a, (int64x2_t) __b, 0); + return __a | __b; } __extension__ static __inline int8x8_t __attribute__ ((__always_inline__)) veor_s8 (int8x8_t __a, int8x8_t __b) { - return (int8x8_t)__builtin_neon_veorv8qi (__a, __b, 1); + return __a ^ __b; } __extension__ static __inline int16x4_t __attribute__ ((__always_inline__)) veor_s16 (int16x4_t __a, int16x4_t __b) { - return (int16x4_t)__builtin_neon_veorv4hi (__a, __b, 1); + return __a ^ __b; } __extension__ static __inline int32x2_t __attribute__ ((__always_inline__)) veor_s32 (int32x2_t __a, int32x2_t __b) { - return (int32x2_t)__builtin_neon_veorv2si (__a, __b, 1); + return __a ^ __b; } __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__)) veor_u8 (uint8x8_t __a, uint8x8_t __b) { - return (uint8x8_t)__builtin_neon_veorv8qi ((int8x8_t) __a, (int8x8_t) __b, 0); + return __a ^ __b; } __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__)) veor_u16 (uint16x4_t __a, uint16x4_t __b) { - return (uint16x4_t)__builtin_neon_veorv4hi ((int16x4_t) __a, (int16x4_t) __b, 0); + return __a ^ __b; } __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) veor_u32 (uint32x2_t __a, uint32x2_t __b) { - return (uint32x2_t)__builtin_neon_veorv2si ((int32x2_t) __a, (int32x2_t) __b, 0); + return __a ^ __b; } __extension__ static __inline int64x1_t __attribute__ ((__always_inline__)) veor_s64 (int64x1_t __a, int64x1_t __b) { - return (int64x1_t)__builtin_neon_veordi (__a, __b, 1); + return __a ^ __b; } __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) veor_u64 (uint64x1_t __a, uint64x1_t __b) { - return (uint64x1_t)__builtin_neon_veordi ((int64x1_t) __a, (int64x1_t) __b, 0); + return __a ^ __b; } __extension__ static __inline int8x16_t __attribute__ ((__always_inline__)) veorq_s8 (int8x16_t __a, int8x16_t __b) { - return (int8x16_t)__builtin_neon_veorv16qi (__a, __b, 1); + return __a ^ __b; } __extension__ static __inline int16x8_t __attribute__ ((__always_inline__)) veorq_s16 (int16x8_t __a, int16x8_t __b) { - return (int16x8_t)__builtin_neon_veorv8hi (__a, __b, 1); + return __a ^ __b; } __extension__ static __inline int32x4_t __attribute__ ((__always_inline__)) veorq_s32 (int32x4_t __a, int32x4_t __b) { - return (int32x4_t)__builtin_neon_veorv4si (__a, __b, 1); + return __a ^ __b; } __extension__ static __inline int64x2_t __attribute__ ((__always_inline__)) veorq_s64 (int64x2_t __a, int64x2_t __b) { - return (int64x2_t)__builtin_neon_veorv2di (__a, __b, 1); + return __a ^ __b; } __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) veorq_u8 (uint8x16_t __a, uint8x16_t __b) { - return (uint8x16_t)__builtin_neon_veorv16qi ((int8x16_t) __a, (int8x16_t) __b, 0); + return __a ^ __b; } __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__)) veorq_u16 (uint16x8_t __a, uint16x8_t __b) { - return (uint16x8_t)__builtin_neon_veorv8hi ((int16x8_t) __a, (int16x8_t) __b, 0); + return __a ^ __b; } __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) veorq_u32 (uint32x4_t __a, uint32x4_t __b) { - return (uint32x4_t)__builtin_neon_veorv4si ((int32x4_t) __a, (int32x4_t) __b, 0); + return __a ^ __b; } __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__)) veorq_u64 (uint64x2_t __a, uint64x2_t __b) { - return (uint64x2_t)__builtin_neon_veorv2di ((int64x2_t) __a, (int64x2_t) __b, 0); + return __a ^ __b; } __extension__ static __inline int8x8_t __attribute__ ((__always_inline__)) vbic_s8 (int8x8_t __a, int8x8_t __b) { - return (int8x8_t)__builtin_neon_vbicv8qi (__a, __b, 1); + return __a & ~__b; } __extension__ static __inline int16x4_t __attribute__ ((__always_inline__)) vbic_s16 (int16x4_t __a, int16x4_t __b) { - return (int16x4_t)__builtin_neon_vbicv4hi (__a, __b, 1); + return __a & ~__b; } __extension__ static __inline int32x2_t __attribute__ ((__always_inline__)) vbic_s32 (int32x2_t __a, int32x2_t __b) { - return (int32x2_t)__builtin_neon_vbicv2si (__a, __b, 1); + return __a & ~__b; } __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__)) vbic_u8 (uint8x8_t __a, uint8x8_t __b) { - return (uint8x8_t)__builtin_neon_vbicv8qi ((int8x8_t) __a, (int8x8_t) __b, 0); + return __a & ~__b; } __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__)) vbic_u16 (uint16x4_t __a, uint16x4_t __b) { - return (uint16x4_t)__builtin_neon_vbicv4hi ((int16x4_t) __a, (int16x4_t) __b, 0); + return __a & ~__b; } __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vbic_u32 (uint32x2_t __a, uint32x2_t __b) { - return (uint32x2_t)__builtin_neon_vbicv2si ((int32x2_t) __a, (int32x2_t) __b, 0); + return __a & ~__b; } __extension__ static __inline int64x1_t __attribute__ ((__always_inline__)) vbic_s64 (int64x1_t __a, int64x1_t __b) { - return (int64x1_t)__builtin_neon_vbicdi (__a, __b, 1); + return __a & ~__b; } __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) vbic_u64 (uint64x1_t __a, uint64x1_t __b) { - return (uint64x1_t)__builtin_neon_vbicdi ((int64x1_t) __a, (int64x1_t) __b, 0); + return __a & ~__b; } __extension__ static __inline int8x16_t __attribute__ ((__always_inline__)) vbicq_s8 (int8x16_t __a, int8x16_t __b) { - return (int8x16_t)__builtin_neon_vbicv16qi (__a, __b, 1); + return __a & ~__b; } __extension__ static __inline int16x8_t __attribute__ ((__always_inline__)) vbicq_s16 (int16x8_t __a, int16x8_t __b) { - return (int16x8_t)__builtin_neon_vbicv8hi (__a, __b, 1); + return __a & ~__b; } __extension__ static __inline int32x4_t __attribute__ ((__always_inline__)) vbicq_s32 (int32x4_t __a, int32x4_t __b) { - return (int32x4_t)__builtin_neon_vbicv4si (__a, __b, 1); + return __a & ~__b; } __extension__ static __inline int64x2_t __attribute__ ((__always_inline__)) vbicq_s64 (int64x2_t __a, int64x2_t __b) { - return (int64x2_t)__builtin_neon_vbicv2di (__a, __b, 1); + return __a & ~__b; } __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) vbicq_u8 (uint8x16_t __a, uint8x16_t __b) { - return (uint8x16_t)__builtin_neon_vbicv16qi ((int8x16_t) __a, (int8x16_t) __b, 0); + return __a & ~__b; } __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__)) vbicq_u16 (uint16x8_t __a, uint16x8_t __b) { - return (uint16x8_t)__builtin_neon_vbicv8hi ((int16x8_t) __a, (int16x8_t) __b, 0); + return __a & ~__b; } __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vbicq_u32 (uint32x4_t __a, uint32x4_t __b) { - return (uint32x4_t)__builtin_neon_vbicv4si ((int32x4_t) __a, (int32x4_t) __b, 0); + return __a & ~__b; } __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__)) vbicq_u64 (uint64x2_t __a, uint64x2_t __b) { - return (uint64x2_t)__builtin_neon_vbicv2di ((int64x2_t) __a, (int64x2_t) __b, 0); + return __a & ~__b; } __extension__ static __inline int8x8_t __attribute__ ((__always_inline__)) vorn_s8 (int8x8_t __a, int8x8_t __b) { - return (int8x8_t)__builtin_neon_vornv8qi (__a, __b, 1); + return __a | ~__b; } __extension__ static __inline int16x4_t __attribute__ ((__always_inline__)) vorn_s16 (int16x4_t __a, int16x4_t __b) { - return (int16x4_t)__builtin_neon_vornv4hi (__a, __b, 1); + return __a | ~__b; } __extension__ static __inline int32x2_t __attribute__ ((__always_inline__)) vorn_s32 (int32x2_t __a, int32x2_t __b) { - return (int32x2_t)__builtin_neon_vornv2si (__a, __b, 1); + return __a | ~__b; } __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__)) vorn_u8 (uint8x8_t __a, uint8x8_t __b) { - return (uint8x8_t)__builtin_neon_vornv8qi ((int8x8_t) __a, (int8x8_t) __b, 0); + return __a | ~__b; } __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__)) vorn_u16 (uint16x4_t __a, uint16x4_t __b) { - return (uint16x4_t)__builtin_neon_vornv4hi ((int16x4_t) __a, (int16x4_t) __b, 0); + return __a | ~__b; } __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vorn_u32 (uint32x2_t __a, uint32x2_t __b) { - return (uint32x2_t)__builtin_neon_vornv2si ((int32x2_t) __a, (int32x2_t) __b, 0); + return __a | ~__b; } __extension__ static __inline int64x1_t __attribute__ ((__always_inline__)) vorn_s64 (int64x1_t __a, int64x1_t __b) { - return (int64x1_t)__builtin_neon_vorndi (__a, __b, 1); + return __a | ~__b; } __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) vorn_u64 (uint64x1_t __a, uint64x1_t __b) { - return (uint64x1_t)__builtin_neon_vorndi ((int64x1_t) __a, (int64x1_t) __b, 0); + return __a | ~__b; } __extension__ static __inline int8x16_t __attribute__ ((__always_inline__)) vornq_s8 (int8x16_t __a, int8x16_t __b) { - return (int8x16_t)__builtin_neon_vornv16qi (__a, __b, 1); + return __a | ~__b; } __extension__ static __inline int16x8_t __attribute__ ((__always_inline__)) vornq_s16 (int16x8_t __a, int16x8_t __b) { - return (int16x8_t)__builtin_neon_vornv8hi (__a, __b, 1); + return __a | ~__b; } __extension__ static __inline int32x4_t __attribute__ ((__always_inline__)) vornq_s32 (int32x4_t __a, int32x4_t __b) { - return (int32x4_t)__builtin_neon_vornv4si (__a, __b, 1); + return __a | ~__b; } __extension__ static __inline int64x2_t __attribute__ ((__always_inline__)) vornq_s64 (int64x2_t __a, int64x2_t __b) { - return (int64x2_t)__builtin_neon_vornv2di (__a, __b, 1); + return __a | ~__b; } __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) vornq_u8 (uint8x16_t __a, uint8x16_t __b) { - return (uint8x16_t)__builtin_neon_vornv16qi ((int8x16_t) __a, (int8x16_t) __b, 0); + return __a | ~__b; } __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__)) vornq_u16 (uint16x8_t __a, uint16x8_t __b) { - return (uint16x8_t)__builtin_neon_vornv8hi ((int16x8_t) __a, (int16x8_t) __b, 0); + return __a | ~__b; } __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vornq_u32 (uint32x4_t __a, uint32x4_t __b) { - return (uint32x4_t)__builtin_neon_vornv4si ((int32x4_t) __a, (int32x4_t) __b, 0); + return __a | ~__b; } __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__)) vornq_u64 (uint64x2_t __a, uint64x2_t __b) { - return (uint64x2_t)__builtin_neon_vornv2di ((int64x2_t) __a, (int64x2_t) __b, 0); + return __a | ~__b; } - __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__)) vreinterpret_p8_p16 (poly16x4_t __a) { diff --git a/gcc/config/arm/arm_neon_builtins.def b/gcc/config/arm/arm_neon_builtins.def index f39b8e7..f4531f3 100644 --- a/gcc/config/arm/arm_neon_builtins.def +++ b/gcc/config/arm/arm_neon_builtins.def @@ -18,8 +18,7 @@ along with GCC; see the file COPYING3. If not see . */ -VAR10 (BINOP, vadd, - v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di), +VAR2 (BINOP, vadd, v2sf, v4sf), VAR3 (BINOP, vaddl, v8qi, v4hi, v2si), VAR3 (BINOP, vaddw, v8qi, v4hi, v2si), VAR6 (BINOP, vhadd, v8qi, v4hi, v2si, v16qi, v8hi, v4si), @@ -54,7 +53,7 @@ VAR8 (SHIFTIMM, vqshl_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di), VAR8 (SHIFTIMM, vqshlu_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di), VAR3 (SHIFTIMM, vshll_n, v8qi, v4hi, v2si), VAR8 (SHIFTACC, vsra_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di), -VAR10 (BINOP, vsub, v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di), +VAR2 (BINOP, vsub, v2sf, v4sf), VAR3 (BINOP, vsubl, v8qi, v4hi, v2si), VAR3 (BINOP, vsubw, v8qi, v4hi, v2si), VAR8 (BINOP, vqsub, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di), @@ -197,14 +196,4 @@ VAR5 (LOADSTRUCT, vld4_dup, v8qi, v4hi, v2si, v2sf, di), VAR9 (STORESTRUCT, vst4, v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf), VAR7 (STORESTRUCTLANE, vst4_lane, - v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf), -VAR10 (LOGICBINOP, vand, - v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di), -VAR10 (LOGICBINOP, vorr, - v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di), -VAR10 (BINOP, veor, - v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di), -VAR10 (LOGICBINOP, vbic, - v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di), -VAR10 (LOGICBINOP, vorn, - v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) + v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf) diff --git a/gcc/config/arm/neon.md b/gcc/config/arm/neon.md index 9418992..8397061 100644 --- a/gcc/config/arm/neon.md +++ b/gcc/config/arm/neon.md @@ -1842,9 +1842,9 @@ ; good for plain vadd, vaddq. (define_expand "neon_vadd" - [(match_operand:VDQX 0 "s_register_operand" "=w") - (match_operand:VDQX 1 "s_register_operand" "w") - (match_operand:VDQX 2 "s_register_operand" "w") + [(match_operand:VCVTF 0 "s_register_operand" "=w") + (match_operand:VCVTF 1 "s_register_operand" "w") + (match_operand:VCVTF 2 "s_register_operand" "w") (match_operand:SI 3 "immediate_operand" "i")] "TARGET_NEON" { @@ -1869,9 +1869,9 @@ ; Used for intrinsics when flag_unsafe_math_optimizations is false. (define_insn "neon_vadd_unspec" - [(set (match_operand:VDQX 0 "s_register_operand" "=w") - (unspec:VDQX [(match_operand:VDQX 1 "s_register_operand" "w") - (match_operand:VDQX 2 "s_register_operand" "w")] + [(set (match_operand:VCVTF 0 "s_register_operand" "=w") + (unspec:VCVTF [(match_operand:VCVTF 1 "s_register_operand" "w") + (match_operand:VCVTF 2 "s_register_operand" "w")] UNSPEC_VADD))] "TARGET_NEON" "vadd.\t%0, %1, %2" @@ -2132,9 +2132,9 @@ ) (define_expand "neon_vsub" - [(match_operand:VDQX 0 "s_register_operand" "=w") - (match_operand:VDQX 1 "s_register_operand" "w") - (match_operand:VDQX 2 "s_register_operand" "w") + [(match_operand:VCVTF 0 "s_register_operand" "=w") + (match_operand:VCVTF 1 "s_register_operand" "w") + (match_operand:VCVTF 2 "s_register_operand" "w") (match_operand:SI 3 "immediate_operand" "i")] "TARGET_NEON" { @@ -2149,9 +2149,9 @@ ; Used for intrinsics when flag_unsafe_math_optimizations is false. (define_insn "neon_vsub_unspec" - [(set (match_operand:VDQX 0 "s_register_operand" "=w") - (unspec:VDQX [(match_operand:VDQX 1 "s_register_operand" "w") - (match_operand:VDQX 2 "s_register_operand" "w")] + [(set (match_operand:VCVTF 0 "s_register_operand" "=w") + (unspec:VCVTF [(match_operand:VCVTF 1 "s_register_operand" "w") + (match_operand:VCVTF 2 "s_register_operand" "w")] UNSPEC_VSUB))] "TARGET_NEON" "vsub.\t%0, %1, %2" @@ -5332,61 +5332,6 @@ [(set_attr "type" "neon_store4_4reg")] ) -(define_expand "neon_vand" - [(match_operand:VDQX 0 "s_register_operand" "") - (match_operand:VDQX 1 "s_register_operand" "") - (match_operand:VDQX 2 "neon_inv_logic_op2" "") - (match_operand:SI 3 "immediate_operand" "")] - "TARGET_NEON" -{ - emit_insn (gen_and3 (operands[0], operands[1], operands[2])); - DONE; -}) - -(define_expand "neon_vorr" - [(match_operand:VDQX 0 "s_register_operand" "") - (match_operand:VDQX 1 "s_register_operand" "") - (match_operand:VDQX 2 "neon_logic_op2" "") - (match_operand:SI 3 "immediate_operand" "")] - "TARGET_NEON" -{ - emit_insn (gen_ior3 (operands[0], operands[1], operands[2])); - DONE; -}) - -(define_expand "neon_veor" - [(match_operand:VDQX 0 "s_register_operand" "") - (match_operand:VDQX 1 "s_register_operand" "") - (match_operand:VDQX 2 "s_register_operand" "") - (match_operand:SI 3 "immediate_operand" "")] - "TARGET_NEON" -{ - emit_insn (gen_xor3 (operands[0], operands[1], operands[2])); - DONE; -}) - -(define_expand "neon_vbic" - [(match_operand:VDQX 0 "s_register_operand" "") - (match_operand:VDQX 1 "s_register_operand" "") - (match_operand:VDQX 2 "neon_logic_op2" "") - (match_operand:SI 3 "immediate_operand" "")] - "TARGET_NEON" -{ - emit_insn (gen_bic3_neon (operands[0], operands[1], operands[2])); - DONE; -}) - -(define_expand "neon_vorn" - [(match_operand:VDQX 0 "s_register_operand" "") - (match_operand:VDQX 1 "s_register_operand" "") - (match_operand:VDQX 2 "neon_inv_logic_op2" "") - (match_operand:SI 3 "immediate_operand" "")] - "TARGET_NEON" -{ - emit_insn (gen_orn3_neon (operands[0], operands[1], operands[2])); - DONE; -}) - (define_insn "neon_vec_unpack_lo_" [(set (match_operand: 0 "register_operand" "=w") (SE: (vec_select: -- 2.7.4