From 574c265073d7900f99f1a969d38198e5533615e8 Mon Sep 17 00:00:00 2001 From: krzosa Date: Mon, 30 Dec 2024 21:53:22 +0100 Subject: [PATCH] minimize intrin --- src/core/core_intrin.c | 58 +++++++++----------------------- src/core/core_platform_defines.h | 5 +++ 2 files changed, 20 insertions(+), 43 deletions(-) diff --git a/src/core/core_intrin.c b/src/core/core_intrin.c index e9fde08..b018896 100644 --- a/src/core/core_intrin.c +++ b/src/core/core_intrin.c @@ -1,58 +1,30 @@ fn void memory_copy(void *dst, void *src, usize n) { -#if PLATFORM_CLANG - __builtin_memcpy(dst, src, n); -#else - memcpy(dst, src, n); -#endif + IF_PLATFORM_CLANG_ELSE(__builtin_memcpy(dst, src, n), memcpy(dst, src, n)); } fn void memory_move(void *dest, const void *src, usize n) { -#if PLATFORM_CLANG - __builtin_memmove(dest, src, n); -#else - memmove(dest, src, n); -#endif + IF_PLATFORM_CLANG_ELSE(__builtin_memmove(dest, src, n), memmove(dest, src, n)); } fn void memory_set(void *dst, i32 c, usize size) { -#if PLATFORM_CLANG - __builtin_memset(dst, c, size); -#else - memset(dst, c, size); -#endif + IF_PLATFORM_CLANG_ELSE(__builtin_memset(dst, c, size), memset(dst, c, size)); } fn void memory_zero(void *dst, usize size) { memory_set(dst, 0, size); } - -#if PLATFORM_CLANG -f32 f32_sqrt(f32 x) { return __builtin_sqrtf(x); } -f64 f64_sqrt(f64 x) { return __builtin_sqrt(x); } -f32 f32_ceil(f32 x) { return __builtin_ceilf(x); } -f64 f64_ceil(f64 x) { return __builtin_ceil(x); } -f32 f32_floor(f32 x) { return __builtin_floorf(x); } -f64 f64_floor(f64 x) { return __builtin_floor(x); } -f32 f32_abs(f32 x) { return __builtin_fabsf(x); } -f64 f64_abs(f64 x) { return __builtin_fabs(x); } -f32 f32_round(f32 x) { return __builtin_roundf(x); } -f64 f64_round(f64 x) { return __builtin_round(x); } -f64 f64_mod(f64 a, f64 b) { return __builtin_fmod(a, b); } -f32 f32_mod(f32 a, f32 b) { return __builtin_fmodf(a, b); } -#else -fn f32 f32_sqrt(f32 x) { return sqrtf(x); } -fn f64 f64_sqrt(f64 x) { return sqrt(x); } -fn f32 f32_ceil(f32 x) { return ceilf(x); } -fn f64 f64_ceil(f64 x) { return ceil(x); } -fn f32 f32_floor(f32 x) { return floorf(x); } -fn f64 f64_floor(f64 x) { return floor(x); } -fn f32 f32_abs(f32 x) { return fabsf(x); } -fn f64 f64_abs(f64 x) { return fabs(x); } -fn f32 f32_round(f32 x) { return roundf(x); } -fn f64 f64_round(f64 x) { return round(x); } -fn f64 f64_mod(f64 a, f64 b) { return fmod(a, b); } -fn f32 f32_mod(f32 a, f32 b) { return fmodf(a, b); } -#endif +f32 f32_sqrt(f32 x) { return IF_PLATFORM_CLANG_ELSE(__builtin_sqrtf(x), sqrtf(x)); } +f64 f64_sqrt(f64 x) { return IF_PLATFORM_CLANG_ELSE(__builtin_sqrt(x), sqrt(x)); } +f32 f32_ceil(f32 x) { return IF_PLATFORM_CLANG_ELSE(__builtin_ceilf(x), ceilf(x)); } +f64 f64_ceil(f64 x) { return IF_PLATFORM_CLANG_ELSE(__builtin_ceil(x), ceil(x)); } +f32 f32_floor(f32 x) { return IF_PLATFORM_CLANG_ELSE(__builtin_floorf(x), floorf(x)); } +f64 f64_floor(f64 x) { return IF_PLATFORM_CLANG_ELSE(__builtin_floor(x), floor(x)); } +f32 f32_abs(f32 x) { return IF_PLATFORM_CLANG_ELSE(__builtin_fabsf(x), fabsf(x)); } +f64 f64_abs(f64 x) { return IF_PLATFORM_CLANG_ELSE(__builtin_fabs(x), fabs(x)); } +f32 f32_round(f32 x) { return IF_PLATFORM_CLANG_ELSE(__builtin_roundf(x), roundf(x)); } +f64 f64_round(f64 x) { return IF_PLATFORM_CLANG_ELSE(__builtin_round(x), round(x)); } +f64 f64_mod(f64 a, f64 b) { return IF_PLATFORM_CLANG_ELSE(__builtin_fmod(a, b), fmod(a, b)); } +f32 f32_mod(f32 a, f32 b) { return IF_PLATFORM_CLANG_ELSE(__builtin_fmodf(a, b), fmodf(a, b)); } diff --git a/src/core/core_platform_defines.h b/src/core/core_platform_defines.h index 8236579..b66aa31 100644 --- a/src/core/core_platform_defines.h +++ b/src/core/core_platform_defines.h @@ -76,6 +76,11 @@ #define SWITCH_PLATFORM_WINDOWS_WASM_ELSE(WINDOWS, WASM, ELSE) ELSE #endif +#if PLATFORM_CLANG +#define IF_PLATFORM_CLANG_ELSE(IF, ELSE) IF +#else +#define IF_PLATFORM_CLANG_ELSE(IF, ELSE) ELSE +#endif #if PLATFORM_WINDOWS #define IF_PLATFORM_WINDOWS(x) x