Skip to content

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

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Nov 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 22 additions & 8 deletions clang/lib/Headers/larchintrin.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down
50 changes: 26 additions & 24 deletions clang/lib/Headers/lasxintrin.h
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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) {
Expand Down Expand Up @@ -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)))

Expand Down
50 changes: 26 additions & 24 deletions clang/lib/Headers/lsxintrin.h
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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) {
Expand Down Expand Up @@ -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)))
Expand Down
Loading