From a802a2ef5f16bdaa0fd3b24c47e5cf50149b90f4 Mon Sep 17 00:00:00 2001 From: Prathamesh Kulkarni Date: Thu, 14 Jan 2021 19:58:35 +0530 Subject: [PATCH] arm: Replace calls to __builtin_vcge* by <=,>= in arm_neon.h [PR66791] gcc/ 2021-01-14 Prathamesh Kulkarni PR target/66791 * config/arm/arm_neon.h: Replace calls to __builtin_vcge* by <=, >= operators in vcle and vcge intrinsics respectively. * config/arm/arm_neon_builtins.def: Remove entry for vcge and vcgeu. --- gcc/config/arm/arm_neon.h | 56 ++++++++++++++-------------- gcc/config/arm/arm_neon_builtins.def | 2 - 2 files changed, 28 insertions(+), 30 deletions(-) diff --git a/gcc/config/arm/arm_neon.h b/gcc/config/arm/arm_neon.h index 7ea5cc07820..f99b9396cce 100644 --- a/gcc/config/arm/arm_neon.h +++ b/gcc/config/arm/arm_neon.h @@ -2471,196 +2471,196 @@ __extension__ extern __inline uint8x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vcge_s8 (int8x8_t __a, int8x8_t __b) { - return (uint8x8_t)__builtin_neon_vcgev8qi (__a, __b); + return (uint8x8_t) (__a >= __b); } __extension__ extern __inline uint16x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vcge_s16 (int16x4_t __a, int16x4_t __b) { - return (uint16x4_t)__builtin_neon_vcgev4hi (__a, __b); + return (uint16x4_t) (__a >= __b); } __extension__ extern __inline uint32x2_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vcge_s32 (int32x2_t __a, int32x2_t __b) { - return (uint32x2_t)__builtin_neon_vcgev2si (__a, __b); + return (uint32x2_t) (__a >= __b); } __extension__ extern __inline uint32x2_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vcge_f32 (float32x2_t __a, float32x2_t __b) { - return (uint32x2_t)__builtin_neon_vcgev2sf (__a, __b); + return (uint32x2_t) (__a >= __b); } __extension__ extern __inline uint8x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vcge_u8 (uint8x8_t __a, uint8x8_t __b) { - return (uint8x8_t)__builtin_neon_vcgeuv8qi ((int8x8_t) __a, (int8x8_t) __b); + return (uint8x8_t) (__a >= __b); } __extension__ extern __inline uint16x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vcge_u16 (uint16x4_t __a, uint16x4_t __b) { - return (uint16x4_t)__builtin_neon_vcgeuv4hi ((int16x4_t) __a, (int16x4_t) __b); + return (uint16x4_t) (__a >= __b); } __extension__ extern __inline uint32x2_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vcge_u32 (uint32x2_t __a, uint32x2_t __b) { - return (uint32x2_t)__builtin_neon_vcgeuv2si ((int32x2_t) __a, (int32x2_t) __b); + return (uint32x2_t) (__a >= __b); } __extension__ extern __inline uint8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vcgeq_s8 (int8x16_t __a, int8x16_t __b) { - return (uint8x16_t)__builtin_neon_vcgev16qi (__a, __b); + return (uint8x16_t) (__a >= __b); } __extension__ extern __inline uint16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vcgeq_s16 (int16x8_t __a, int16x8_t __b) { - return (uint16x8_t)__builtin_neon_vcgev8hi (__a, __b); + return (uint16x8_t) (__a >= __b); } __extension__ extern __inline uint32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vcgeq_s32 (int32x4_t __a, int32x4_t __b) { - return (uint32x4_t)__builtin_neon_vcgev4si (__a, __b); + return (uint32x4_t) (__a >= __b); } __extension__ extern __inline uint32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vcgeq_f32 (float32x4_t __a, float32x4_t __b) { - return (uint32x4_t)__builtin_neon_vcgev4sf (__a, __b); + return (uint32x4_t) (__a >= __b); } __extension__ extern __inline uint8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vcgeq_u8 (uint8x16_t __a, uint8x16_t __b) { - return (uint8x16_t)__builtin_neon_vcgeuv16qi ((int8x16_t) __a, (int8x16_t) __b); + return (uint8x16_t) (__a >= __b); } __extension__ extern __inline uint16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vcgeq_u16 (uint16x8_t __a, uint16x8_t __b) { - return (uint16x8_t)__builtin_neon_vcgeuv8hi ((int16x8_t) __a, (int16x8_t) __b); + return (uint16x8_t) (__a >= __b); } __extension__ extern __inline uint32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vcgeq_u32 (uint32x4_t __a, uint32x4_t __b) { - return (uint32x4_t)__builtin_neon_vcgeuv4si ((int32x4_t) __a, (int32x4_t) __b); + return (uint32x4_t) (__a >= __b); } __extension__ extern __inline uint8x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vcle_s8 (int8x8_t __a, int8x8_t __b) { - return (uint8x8_t)__builtin_neon_vcgev8qi (__b, __a); + return (uint8x8_t) (__a <= __b); } __extension__ extern __inline uint16x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vcle_s16 (int16x4_t __a, int16x4_t __b) { - return (uint16x4_t)__builtin_neon_vcgev4hi (__b, __a); + return (uint16x4_t) (__a <= __b); } __extension__ extern __inline uint32x2_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vcle_s32 (int32x2_t __a, int32x2_t __b) { - return (uint32x2_t)__builtin_neon_vcgev2si (__b, __a); + return (uint32x2_t) (__a <= __b); } __extension__ extern __inline uint32x2_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vcle_f32 (float32x2_t __a, float32x2_t __b) { - return (uint32x2_t)__builtin_neon_vcgev2sf (__b, __a); + return (uint32x2_t) (__a <= __b); } __extension__ extern __inline uint8x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vcle_u8 (uint8x8_t __a, uint8x8_t __b) { - return (uint8x8_t)__builtin_neon_vcgeuv8qi ((int8x8_t) __b, (int8x8_t) __a); + return (uint8x8_t) (__a <= __b); } __extension__ extern __inline uint16x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vcle_u16 (uint16x4_t __a, uint16x4_t __b) { - return (uint16x4_t)__builtin_neon_vcgeuv4hi ((int16x4_t) __b, (int16x4_t) __a); + return (uint16x4_t) (__a <= __b); } __extension__ extern __inline uint32x2_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vcle_u32 (uint32x2_t __a, uint32x2_t __b) { - return (uint32x2_t)__builtin_neon_vcgeuv2si ((int32x2_t) __b, (int32x2_t) __a); + return (uint32x2_t) (__a <= __b); } __extension__ extern __inline uint8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vcleq_s8 (int8x16_t __a, int8x16_t __b) { - return (uint8x16_t)__builtin_neon_vcgev16qi (__b, __a); + return (uint8x16_t) (__a <= __b); } __extension__ extern __inline uint16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vcleq_s16 (int16x8_t __a, int16x8_t __b) { - return (uint16x8_t)__builtin_neon_vcgev8hi (__b, __a); + return (uint16x8_t) (__a <= __b); } __extension__ extern __inline uint32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vcleq_s32 (int32x4_t __a, int32x4_t __b) { - return (uint32x4_t)__builtin_neon_vcgev4si (__b, __a); + return (uint32x4_t) (__a <= __b); } __extension__ extern __inline uint32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vcleq_f32 (float32x4_t __a, float32x4_t __b) { - return (uint32x4_t)__builtin_neon_vcgev4sf (__b, __a); + return (uint32x4_t) (__a <= __b); } __extension__ extern __inline uint8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vcleq_u8 (uint8x16_t __a, uint8x16_t __b) { - return (uint8x16_t)__builtin_neon_vcgeuv16qi ((int8x16_t) __b, (int8x16_t) __a); + return (uint8x16_t) (__a <= __b); } __extension__ extern __inline uint16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vcleq_u16 (uint16x8_t __a, uint16x8_t __b) { - return (uint16x8_t)__builtin_neon_vcgeuv8hi ((int16x8_t) __b, (int16x8_t) __a); + return (uint16x8_t) (__a <= __b); } __extension__ extern __inline uint32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vcleq_u32 (uint32x4_t __a, uint32x4_t __b) { - return (uint32x4_t)__builtin_neon_vcgeuv4si ((int32x4_t) __b, (int32x4_t) __a); + return (uint32x4_t) (__a <= __b); } __extension__ extern __inline uint8x8_t diff --git a/gcc/config/arm/arm_neon_builtins.def b/gcc/config/arm/arm_neon_builtins.def index f6dddd715f4..97e4f9c9be3 100644 --- a/gcc/config/arm/arm_neon_builtins.def +++ b/gcc/config/arm/arm_neon_builtins.def @@ -126,8 +126,6 @@ VAR6 (BINOP, vhsubu, v8qi, v4hi, v2si, v16qi, v8hi, v4si) VAR3 (BINOP, vsubhn, v8hi, v4si, v2di) VAR3 (BINOP, vrsubhn, v8hi, v4si, v2di) VAR8 (BINOP, vceq, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) -VAR8 (BINOP, vcge, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) -VAR6 (BINOP, vcgeu, v8qi, v4hi, v2si, v16qi, v8hi, v4si) VAR2 (BINOP, vcage, v2sf, v4sf) VAR2 (BINOP, vcagt, v2sf, v4sf) VAR2 (BINOP, vcage, v4hf, v8hf) -- 2.30.2