[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:
parent
4086ead63c
commit
bbafe59088
@ -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
|
||||
}
|
||||
|
||||
@ -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)))
|
||||
|
||||
|
||||
@ -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)))
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user