From c0ed52d3e0044630b57a2145be78de199539d995 Mon Sep 17 00:00:00 2001 From: Prathamesh Kulkarni Date: Tue, 8 Dec 2020 23:22:11 +0530 Subject: [PATCH] arm: Replace calls to __builtin_vmvn* by ~ in vmvn intrinsics in arm_neon.h [PR66791] gcc/ 2020-12-08 Prathamesh Kulkarni PR target/66791 * config/arm/arm_neon.h: Replace calls to __builtin_vmvn* by ~ in vmvn intrinsics. * config/arm/arm_neon_builtins.def: Remove entry for vmvn. --- gcc/config/arm/arm_neon.h | 28 ++++++++++++++-------------- gcc/config/arm/arm_neon_builtins.def | 1 - 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/gcc/config/arm/arm_neon.h b/gcc/config/arm/arm_neon.h index 9569e1a..6c600b3 100644 --- a/gcc/config/arm/arm_neon.h +++ b/gcc/config/arm/arm_neon.h @@ -5812,98 +5812,98 @@ __extension__ extern __inline int8x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vmvn_s8 (int8x8_t __a) { - return (int8x8_t)__builtin_neon_vmvnv8qi (__a); + return ~__a; } __extension__ extern __inline int16x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vmvn_s16 (int16x4_t __a) { - return (int16x4_t)__builtin_neon_vmvnv4hi (__a); + return ~__a; } __extension__ extern __inline int32x2_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vmvn_s32 (int32x2_t __a) { - return (int32x2_t)__builtin_neon_vmvnv2si (__a); + return ~__a; } __extension__ extern __inline uint8x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vmvn_u8 (uint8x8_t __a) { - return (uint8x8_t)__builtin_neon_vmvnv8qi ((int8x8_t) __a); + return ~__a; } __extension__ extern __inline uint16x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vmvn_u16 (uint16x4_t __a) { - return (uint16x4_t)__builtin_neon_vmvnv4hi ((int16x4_t) __a); + return ~__a; } __extension__ extern __inline uint32x2_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vmvn_u32 (uint32x2_t __a) { - return (uint32x2_t)__builtin_neon_vmvnv2si ((int32x2_t) __a); + return ~__a; } __extension__ extern __inline poly8x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vmvn_p8 (poly8x8_t __a) { - return (poly8x8_t)__builtin_neon_vmvnv8qi ((int8x8_t) __a); + return (poly8x8_t) ~((int8x8_t) __a); } __extension__ extern __inline int8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vmvnq_s8 (int8x16_t __a) { - return (int8x16_t)__builtin_neon_vmvnv16qi (__a); + return ~__a; } __extension__ extern __inline int16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vmvnq_s16 (int16x8_t __a) { - return (int16x8_t)__builtin_neon_vmvnv8hi (__a); + return ~__a; } __extension__ extern __inline int32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vmvnq_s32 (int32x4_t __a) { - return (int32x4_t)__builtin_neon_vmvnv4si (__a); + return ~__a; } __extension__ extern __inline uint8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vmvnq_u8 (uint8x16_t __a) { - return (uint8x16_t)__builtin_neon_vmvnv16qi ((int8x16_t) __a); + return ~__a; } __extension__ extern __inline uint16x8_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vmvnq_u16 (uint16x8_t __a) { - return (uint16x8_t)__builtin_neon_vmvnv8hi ((int16x8_t) __a); + return ~__a; } __extension__ extern __inline uint32x4_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vmvnq_u32 (uint32x4_t __a) { - return (uint32x4_t)__builtin_neon_vmvnv4si ((int32x4_t) __a); + return ~__a; } __extension__ extern __inline poly8x16_t __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) vmvnq_p8 (poly8x16_t __a) { - return (poly8x16_t)__builtin_neon_vmvnv16qi ((int8x16_t) __a); + return (poly8x16_t) ~((int8x16_t) __a); } __extension__ extern __inline int8x8_t diff --git a/gcc/config/arm/arm_neon_builtins.def b/gcc/config/arm/arm_neon_builtins.def index 0ff0494..1a1a851 100644 --- a/gcc/config/arm/arm_neon_builtins.def +++ b/gcc/config/arm/arm_neon_builtins.def @@ -205,7 +205,6 @@ VAR4 (UNOP, vrecpe, v2si, v2sf, v4si, v4sf) VAR2 (UNOP, vrecpe, v8hf, v4hf) VAR4 (UNOP, vrsqrte, v2si, v2sf, v4si, v4sf) VAR2 (UNOP, vrsqrte, v4hf, v8hf) -VAR6 (UNOP, vmvn, v8qi, v4hi, v2si, v16qi, v8hi, v4si) VAR2 (UNOP, vrnd, v8hf, v4hf) VAR2 (UNOP, vrnda, v8hf, v4hf) VAR2 (UNOP, vrndm, v8hf, v4hf) -- 2.7.4