Skip to content

Commit bbafe59

Browse files
authored
[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.
1 parent 4086ead commit bbafe59

File tree

3 files changed

+74
-56
lines changed

3 files changed

+74
-56
lines changed

clang/lib/Headers/larchintrin.h

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -228,17 +228,31 @@ extern __inline void
228228
((void)__builtin_loongarch_ldpte_d((long int)(_1), (_2)))
229229
#endif
230230

231-
#define __frecipe_s(/*float*/ _1) \
232-
(float)__builtin_loongarch_frecipe_s((float)_1)
231+
#ifdef __loongarch_frecipe
232+
extern __inline float
233+
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
234+
__frecipe_s(float _1) {
235+
return __builtin_loongarch_frecipe_s(_1);
236+
}
233237

234-
#define __frecipe_d(/*double*/ _1) \
235-
(double)__builtin_loongarch_frecipe_d((double)_1)
238+
extern __inline double
239+
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
240+
__frecipe_d(double _1) {
241+
return __builtin_loongarch_frecipe_d(_1);
242+
}
236243

237-
#define __frsqrte_s(/*float*/ _1) \
238-
(float)__builtin_loongarch_frsqrte_s((float)_1)
244+
extern __inline float
245+
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
246+
__frsqrte_s(float _1) {
247+
return __builtin_loongarch_frsqrte_s(_1);
248+
}
239249

240-
#define __frsqrte_d(/*double*/ _1) \
241-
(double)__builtin_loongarch_frsqrte_d((double)_1)
250+
extern __inline double
251+
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
252+
__frsqrte_d(double _1) {
253+
return __builtin_loongarch_frsqrte_d(_1);
254+
}
255+
#endif
242256

243257
#ifdef __cplusplus
244258
}

clang/lib/Headers/lasxintrin.h

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1726,18 +1726,6 @@ extern __inline
17261726
return (__m256d)__builtin_lasx_xvfrecip_d((v4f64)_1);
17271727
}
17281728

1729-
extern __inline
1730-
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m256
1731-
__lasx_xvfrecipe_s(__m256 _1) {
1732-
return (__m256)__builtin_lasx_xvfrecipe_s((v8f32)_1);
1733-
}
1734-
1735-
extern __inline
1736-
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m256d
1737-
__lasx_xvfrecipe_d(__m256d _1) {
1738-
return (__m256d)__builtin_lasx_xvfrecipe_d((v4f64)_1);
1739-
}
1740-
17411729
extern __inline
17421730
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m256
17431731
__lasx_xvfrint_s(__m256 _1) {
@@ -1762,18 +1750,6 @@ extern __inline
17621750
return (__m256d)__builtin_lasx_xvfrsqrt_d((v4f64)_1);
17631751
}
17641752

1765-
extern __inline
1766-
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m256
1767-
__lasx_xvfrsqrte_s(__m256 _1) {
1768-
return (__m256)__builtin_lasx_xvfrsqrte_s((v8f32)_1);
1769-
}
1770-
1771-
extern __inline
1772-
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m256d
1773-
__lasx_xvfrsqrte_d(__m256d _1) {
1774-
return (__m256d)__builtin_lasx_xvfrsqrte_d((v4f64)_1);
1775-
}
1776-
17771753
extern __inline
17781754
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m256
17791755
__lasx_xvflogb_s(__m256 _1) {
@@ -3866,6 +3842,32 @@ extern __inline
38663842
return (__m256i)__builtin_lasx_xvfcmp_sun_s((v8f32)_1, (v8f32)_2);
38673843
}
38683844

3845+
#if defined(__loongarch_frecipe)
3846+
extern __inline
3847+
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m256
3848+
__lasx_xvfrecipe_s(__m256 _1) {
3849+
return (__m256)__builtin_lasx_xvfrecipe_s((v8f32)_1);
3850+
}
3851+
3852+
extern __inline
3853+
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m256d
3854+
__lasx_xvfrecipe_d(__m256d _1) {
3855+
return (__m256d)__builtin_lasx_xvfrecipe_d((v4f64)_1);
3856+
}
3857+
3858+
extern __inline
3859+
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m256
3860+
__lasx_xvfrsqrte_s(__m256 _1) {
3861+
return (__m256)__builtin_lasx_xvfrsqrte_s((v8f32)_1);
3862+
}
3863+
3864+
extern __inline
3865+
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m256d
3866+
__lasx_xvfrsqrte_d(__m256d _1) {
3867+
return (__m256d)__builtin_lasx_xvfrsqrte_d((v4f64)_1);
3868+
}
3869+
#endif
3870+
38693871
#define __lasx_xvpickve_d_f(/*__m256d*/ _1, /*ui2*/ _2) \
38703872
((__m256d)__builtin_lasx_xvpickve_d_f((v4f64)(_1), (_2)))
38713873

clang/lib/Headers/lsxintrin.h

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1776,18 +1776,6 @@ extern __inline
17761776
return (__m128d)__builtin_lsx_vfrecip_d((v2f64)_1);
17771777
}
17781778

1779-
extern __inline
1780-
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m128
1781-
__lsx_vfrecipe_s(__m128 _1) {
1782-
return (__m128)__builtin_lsx_vfrecipe_s((v4f32)_1);
1783-
}
1784-
1785-
extern __inline
1786-
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m128d
1787-
__lsx_vfrecipe_d(__m128d _1) {
1788-
return (__m128d)__builtin_lsx_vfrecipe_d((v2f64)_1);
1789-
}
1790-
17911779
extern __inline
17921780
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m128
17931781
__lsx_vfrint_s(__m128 _1) {
@@ -1812,18 +1800,6 @@ extern __inline
18121800
return (__m128d)__builtin_lsx_vfrsqrt_d((v2f64)_1);
18131801
}
18141802

1815-
extern __inline
1816-
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m128
1817-
__lsx_vfrsqrte_s(__m128 _1) {
1818-
return (__m128)__builtin_lsx_vfrsqrte_s((v4f32)_1);
1819-
}
1820-
1821-
extern __inline
1822-
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m128d
1823-
__lsx_vfrsqrte_d(__m128d _1) {
1824-
return (__m128d)__builtin_lsx_vfrsqrte_d((v2f64)_1);
1825-
}
1826-
18271803
extern __inline
18281804
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m128
18291805
__lsx_vflogb_s(__m128 _1) {
@@ -3738,6 +3714,32 @@ extern __inline
37383714
return (__m128i)__builtin_lsx_vfcmp_sun_s((v4f32)_1, (v4f32)_2);
37393715
}
37403716

3717+
#if defined(__loongarch_frecipe)
3718+
extern __inline
3719+
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m128
3720+
__lsx_vfrecipe_s(__m128 _1) {
3721+
return (__m128)__builtin_lsx_vfrecipe_s((v4f32)_1);
3722+
}
3723+
3724+
extern __inline
3725+
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m128d
3726+
__lsx_vfrecipe_d(__m128d _1) {
3727+
return (__m128d)__builtin_lsx_vfrecipe_d((v2f64)_1);
3728+
}
3729+
3730+
extern __inline
3731+
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m128
3732+
__lsx_vfrsqrte_s(__m128 _1) {
3733+
return (__m128)__builtin_lsx_vfrsqrte_s((v4f32)_1);
3734+
}
3735+
3736+
extern __inline
3737+
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __m128d
3738+
__lsx_vfrsqrte_d(__m128d _1) {
3739+
return (__m128d)__builtin_lsx_vfrsqrte_d((v2f64)_1);
3740+
}
3741+
#endif
3742+
37413743
#define __lsx_vrepli_b(/*si10*/ _1) ((__m128i)__builtin_lsx_vrepli_b((_1)))
37423744

37433745
#define __lsx_vrepli_d(/*si10*/ _1) ((__m128i)__builtin_lsx_vrepli_d((_1)))

0 commit comments

Comments
 (0)