Jonathan Wright via Gcc-patches <gcc-patches@gcc.gnu.org> writes:
> Hi,
>
> As subject, this patch updates the attributes of all intrinsics defined in
> arm_acle.h to be consistent with the attributes of the intrinsics defined
> in arm_neon.h. Specifically, this means updating the attributes from:
>   __extension__ static __inline <type>
>   __attribute__ ((__always_inline__))
> to:
>   __extension__ extern __inline <type>
>   __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
>
> Regression tested and bootstrapped on aarch64-none-linux-gnu - no
> issues.
>
> Ok for master?

OK, thanks.

Richard

> Thanks,
> Jonathan
>
> ---
>
> gcc/ChangeLog:
>
> 2021-03-18  Jonathan Wright  <jonathan.wri...@arm.com>
>
>       * config/aarch64/arm_acle.h (__attribute__): Make intrinsic
>       attributes consistent with those defined in arm_neon.h.
>
> diff --git a/gcc/config/aarch64/arm_acle.h b/gcc/config/aarch64/arm_acle.h
> index 
> 73b29f4b8dc9c80e2ae7b72f51a313a86de6d33b..13f23632474b260122f30a3c566033664b0b5963
>  100644
> --- a/gcc/config/aarch64/arm_acle.h
> +++ b/gcc/config/aarch64/arm_acle.h
> @@ -35,7 +35,8 @@ extern "C" {
>  
>  #pragma GCC push_options
>  #pragma GCC target ("arch=armv8.3-a")
> -__extension__ static __inline int32_t __attribute__ ((__always_inline__))
> +__extension__ extern __inline int32_t
> +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
>  __jcvt (double __a)
>  {
>    return __builtin_aarch64_jcvtzs (__a);
> @@ -45,49 +46,57 @@ __jcvt (double __a)
>  
>  #pragma GCC push_options
>  #pragma GCC target ("arch=armv8.5-a")
> -__extension__ static __inline float __attribute__ ((__always_inline__))
> +__extension__ extern __inline float
> +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
>  __rint32zf (float __a)
>  {
>    return __builtin_aarch64_frint32zsf (__a);
>  }
>  
> -__extension__ static __inline double __attribute__ ((__always_inline__))
> +__extension__ extern __inline double
> +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
>  __rint32z (double __a)
>  {
>    return __builtin_aarch64_frint32zdf (__a);
>  }
>  
> -__extension__ static __inline float __attribute__ ((__always_inline__))
> +__extension__ extern __inline float
> +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
>  __rint64zf (float __a)
>  {
>    return __builtin_aarch64_frint64zsf (__a);
>  }
>  
> -__extension__ static __inline double __attribute__ ((__always_inline__))
> +__extension__ extern __inline double
> +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
>  __rint64z (double __a)
>  {
>    return __builtin_aarch64_frint64zdf (__a);
>  }
>  
> -__extension__ static __inline float __attribute__ ((__always_inline__))
> +__extension__ extern __inline float
> +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
>  __rint32xf (float __a)
>  {
>    return __builtin_aarch64_frint32xsf (__a);
>  }
>  
> -__extension__ static __inline double __attribute__ ((__always_inline__))
> +__extension__ extern __inline double
> +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
>  __rint32x (double __a)
>  {
>    return __builtin_aarch64_frint32xdf (__a);
>  }
>  
> -__extension__ static __inline float __attribute__ ((__always_inline__))
> +__extension__ extern __inline float
> +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
>  __rint64xf (float __a)
>  {
>    return __builtin_aarch64_frint64xsf (__a);
>  }
>  
> -__extension__ static __inline double __attribute__ ((__always_inline__))
> +__extension__ extern __inline double
> +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
>  __rint64x (double __a)
>  {
>    return __builtin_aarch64_frint64xdf (__a);
> @@ -100,49 +109,57 @@ __rint64x (double __a)
>  
>  #pragma GCC target ("+nothing+crc")
>  
> -__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
> +__extension__ extern __inline uint32_t
> +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
>  __crc32b (uint32_t __a, uint8_t __b)
>  {
>    return __builtin_aarch64_crc32b (__a, __b);
>  }
>  
> -__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
> +__extension__ extern __inline uint32_t
> +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
>  __crc32cb (uint32_t __a, uint8_t __b)
>  {
>    return __builtin_aarch64_crc32cb (__a, __b);
>  }
>  
> -__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
> +__extension__ extern __inline uint32_t
> +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
>  __crc32ch (uint32_t __a, uint16_t __b)
>  {
>    return __builtin_aarch64_crc32ch (__a, __b);
>  }
>  
> -__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
> +__extension__ extern __inline uint32_t
> +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
>  __crc32cw (uint32_t __a, uint32_t __b)
>  {
>    return __builtin_aarch64_crc32cw (__a, __b);
>  }
>  
> -__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
> +__extension__ extern __inline uint32_t
> +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
>  __crc32cd (uint32_t __a, uint64_t __b)
>  {
>    return __builtin_aarch64_crc32cx (__a, __b);
>  }
>  
> -__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
> +__extension__ extern __inline uint32_t
> +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
>  __crc32h (uint32_t __a, uint16_t __b)
>  {
>    return __builtin_aarch64_crc32h (__a, __b);
>  }
>  
> -__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
> +__extension__ extern __inline uint32_t
> +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
>  __crc32w (uint32_t __a, uint32_t __b)
>  {
>    return __builtin_aarch64_crc32w (__a, __b);
>  }
>  
> -__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
> +__extension__ extern __inline uint32_t
> +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
>  __crc32d (uint32_t __a, uint64_t __b)
>  {
>    return __builtin_aarch64_crc32x (__a, __b);
> @@ -166,25 +183,29 @@ __crc32d (uint32_t __a, uint64_t __b)
>  #define _TMFAILURE_INT        0x00800000u
>  #define _TMFAILURE_TRIVIAL    0x01000000u
>  
> -__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
> +__extension__ extern __inline uint64_t
> +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
>  __tstart (void)
>  {
>    return __builtin_aarch64_tstart ();
>  }
>  
> -__extension__ static __inline void __attribute__ ((__always_inline__))
> +__extension__ extern __inline void
> +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
>  __tcommit (void)
>  {
>    __builtin_aarch64_tcommit ();
>  }
>  
> -__extension__ static __inline void __attribute__ ((__always_inline__))
> +__extension__ extern __inline void
> +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
>  __tcancel (const uint64_t __reason)
>  {
>    __builtin_aarch64_tcancel (__reason);
>  }
>  
> -__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
> +__extension__ extern __inline uint64_t
> +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
>  __ttest (void)
>  {
>    return __builtin_aarch64_ttest ();
> @@ -195,13 +216,15 @@ __ttest (void)
>  
>  #pragma GCC push_options
>  #pragma GCC target ("+nothing+rng")
> -__extension__ static __inline int __attribute__ ((__always_inline__))
> +__extension__ extern __inline int
> +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
>  __rndr (uint64_t *__res)
>  {
>    return __builtin_aarch64_rndr (__res);
>  }
>  
> -__extension__ static __inline int __attribute__ ((__always_inline__))
> +__extension__ extern __inline int
> +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
>  __rndrrs (uint64_t *__res)
>  {
>    return __builtin_aarch64_rndrrs (__res);

Reply via email to