[LoongArch] Add conditional compilation for FP approximation intrinsics (#117132)

Introduce a check for `__loongarch_frecipe` macro around the FP
approximation intrinsic implementation. This ensures that these
intrinsics are only included when this macro is defined, providing
better flexibility and control over the usage of FP approximation
instructions.
This commit is contained in:
Ami-zhang 2024-11-21 17:39:28 +08:00 committed by GitHub
parent 4086ead63c
commit bbafe59088
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 74 additions and 56 deletions

View File

@ -228,17 +228,31 @@ extern __inline void
((void)__builtin_loongarch_ldpte_d((long int)(_1), (_2)))
#endif
#define __frecipe_s(/*float*/ _1) \
(float)__builtin_loongarch_frecipe_s((float)_1)
#ifdef __loongarch_frecipe
extern __inline float
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
__frecipe_s(float _1) {
return __builtin_loongarch_frecipe_s(_1);
}
#define __frecipe_d(/*double*/ _1) \
(double)__builtin_loongarch_frecipe_d((double)_1)
extern __inline double
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
__frecipe_d(double _1) {
return __builtin_loongarch_frecipe_d(_1);
}
#define __frsqrte_s(/*float*/ _1) \
(float)__builtin_loongarch_frsqrte_s((float)_1)
extern __inline float
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
__frsqrte_s(float _1) {
return __builtin_loongarch_frsqrte_s(_1);
}
#define __frsqrte_d(/*double*/ _1) \
(double)__builtin_loongarch_frsqrte_d((double)_1)
extern __inline double
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
__frsqrte_d(double _1) {
return __builtin_loongarch_frsqrte_d(_1);
}
#endif
#ifdef __cplusplus
}

View File

@ -1726,18 +1726,6 @@ extern __inline
return (__m256d)__builtin_lasx_xvfrecip_d((v4f64)_1);
}
extern __inline
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m256
__lasx_xvfrecipe_s(__m256 _1) {
return (__m256)__builtin_lasx_xvfrecipe_s((v8f32)_1);
}
extern __inline
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m256d
__lasx_xvfrecipe_d(__m256d _1) {
return (__m256d)__builtin_lasx_xvfrecipe_d((v4f64)_1);
}
extern __inline
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m256
__lasx_xvfrint_s(__m256 _1) {
@ -1762,18 +1750,6 @@ extern __inline
return (__m256d)__builtin_lasx_xvfrsqrt_d((v4f64)_1);
}
extern __inline
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m256
__lasx_xvfrsqrte_s(__m256 _1) {
return (__m256)__builtin_lasx_xvfrsqrte_s((v8f32)_1);
}
extern __inline
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m256d
__lasx_xvfrsqrte_d(__m256d _1) {
return (__m256d)__builtin_lasx_xvfrsqrte_d((v4f64)_1);
}
extern __inline
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m256
__lasx_xvflogb_s(__m256 _1) {
@ -3866,6 +3842,32 @@ extern __inline
return (__m256i)__builtin_lasx_xvfcmp_sun_s((v8f32)_1, (v8f32)_2);
}
#if defined(__loongarch_frecipe)
extern __inline
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m256
__lasx_xvfrecipe_s(__m256 _1) {
return (__m256)__builtin_lasx_xvfrecipe_s((v8f32)_1);
}
extern __inline
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m256d
__lasx_xvfrecipe_d(__m256d _1) {
return (__m256d)__builtin_lasx_xvfrecipe_d((v4f64)_1);
}
extern __inline
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m256
__lasx_xvfrsqrte_s(__m256 _1) {
return (__m256)__builtin_lasx_xvfrsqrte_s((v8f32)_1);
}
extern __inline
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m256d
__lasx_xvfrsqrte_d(__m256d _1) {
return (__m256d)__builtin_lasx_xvfrsqrte_d((v4f64)_1);
}
#endif
#define __lasx_xvpickve_d_f(/*__m256d*/ _1, /*ui2*/ _2) \
((__m256d)__builtin_lasx_xvpickve_d_f((v4f64)(_1), (_2)))

View File

@ -1776,18 +1776,6 @@ extern __inline
return (__m128d)__builtin_lsx_vfrecip_d((v2f64)_1);
}
extern __inline
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m128
__lsx_vfrecipe_s(__m128 _1) {
return (__m128)__builtin_lsx_vfrecipe_s((v4f32)_1);
}
extern __inline
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m128d
__lsx_vfrecipe_d(__m128d _1) {
return (__m128d)__builtin_lsx_vfrecipe_d((v2f64)_1);
}
extern __inline
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m128
__lsx_vfrint_s(__m128 _1) {
@ -1812,18 +1800,6 @@ extern __inline
return (__m128d)__builtin_lsx_vfrsqrt_d((v2f64)_1);
}
extern __inline
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m128
__lsx_vfrsqrte_s(__m128 _1) {
return (__m128)__builtin_lsx_vfrsqrte_s((v4f32)_1);
}
extern __inline
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m128d
__lsx_vfrsqrte_d(__m128d _1) {
return (__m128d)__builtin_lsx_vfrsqrte_d((v2f64)_1);
}
extern __inline
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m128
__lsx_vflogb_s(__m128 _1) {
@ -3738,6 +3714,32 @@ extern __inline
return (__m128i)__builtin_lsx_vfcmp_sun_s((v4f32)_1, (v4f32)_2);
}
#if defined(__loongarch_frecipe)
extern __inline
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m128
__lsx_vfrecipe_s(__m128 _1) {
return (__m128)__builtin_lsx_vfrecipe_s((v4f32)_1);
}
extern __inline
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m128d
__lsx_vfrecipe_d(__m128d _1) {
return (__m128d)__builtin_lsx_vfrecipe_d((v2f64)_1);
}
extern __inline
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m128
__lsx_vfrsqrte_s(__m128 _1) {
return (__m128)__builtin_lsx_vfrsqrte_s((v4f32)_1);
}
extern __inline
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m128d
__lsx_vfrsqrte_d(__m128d _1) {
return (__m128d)__builtin_lsx_vfrsqrte_d((v2f64)_1);
}
#endif
#define __lsx_vrepli_b(/*si10*/ _1) ((__m128i)__builtin_lsx_vrepli_b((_1)))
#define __lsx_vrepli_d(/*si10*/ _1) ((__m128i)__builtin_lsx_vrepli_d((_1)))