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);