rcx

miscellaneous C library
git clone git://git.rr3.xyz/rcx
Log | Files | Refs | README | LICENSE

commit d48cb3c6cee655dbc28a4285b8b4b1377249555c
parent 8b2de8638745c598813c2f7d34b2a450e45384f3
Author: Robert Russell <robert@rr3.xyz>
Date:   Sun, 12 Jan 2025 17:46:58 -0800

Fix addc/subc detection

Diffstat:
Minc/bits.h | 32++++++++++++++++----------------
1 file changed, 16 insertions(+), 16 deletions(-)

diff --git a/inc/bits.h b/inc/bits.h @@ -209,18 +209,18 @@ r_rzb64(u64 n) { /* TODO: Use addc/subc intrinsics for non-64 bit adds/subs as well? */ #if __GNUC__ >= 14 - #define HAVE_ADDC_SUBC 1 - /* TODO: I think this is technically not a portable way to figure out which - * integer type to use, but it should be ok. */ - #if UINT_BITS >= 64 - #define ADDC __builtin_addc - #define SUBC __builtin_subc - #elif ULONG_BITS >= 64 - #define ADDC __builtin_addcl - #define SUBC __builtin_subcl - #else /* ULLONG_BITS >= 64 always */ - #define ADDC __builtin_addcll - #define SUBC __builtin_subcll + #if __SIZEOF_INT__ == 8 + #define HAVE_ADDC_SUBC 1 + #define ADDC64 __builtin_addc + #define SUBC64 __builtin_subc + #elif __SIZEOF_LONG__ == 8 + #define HAVE_ADDC_SUBC 1 + #define ADDC64 __builtin_addcl + #define SUBC64 __builtin_subcl + #elif __SIZEOF_LONG_LONG == 8 + #define HAVE_ADDC_SUBC 1 + #define ADDC64 __builtin_addcll + #define SUBC64 __builtin_subcll #endif #endif @@ -248,7 +248,7 @@ r_add32(u32 *co, u32 *z, u32 x, u32 y, u32 ci) { static inline void r_add64(u64 *co, u64 *z, u64 x, u64 y, u64 ci) { #ifdef HAVE_ADDC_SUBC - *z = ADDC(x, y, ci, co); + *z = ADDC64(x, y, ci, co); #else u64 s = x + y; u64 co0 = s < x; @@ -283,7 +283,7 @@ r_sub32(u32 *bo, u32 *z, u32 x, u32 y, u32 bi) { static inline void r_sub64(u64 *bo, u64 *z, u64 x, u64 y, u64 bi) { #ifdef HAVE_ADDC_SUBC - *z = SUBC(x, y, bi, bo); + *z = SUBC64(x, y, bi, bo); #else u64 s = x - y; u64 bo0 = s > x; @@ -294,8 +294,8 @@ r_sub64(u64 *bo, u64 *z, u64 x, u64 y, u64 bi) { #endif } -#undef GNU_SUBC -#undef GNU_ADDC +#undef SUBC64 +#undef ADDC64 #undef HAVE_ADDC_SUBC