diff --git a/libpcc/bitcnt.c b/libpcc/bitcnt.c index 26ecc01..c3bd54e 100644 --- a/libpcc/bitcnt.c +++ b/libpcc/bitcnt.c @@ -1,9 +1,22 @@ +// Only use __has_builtin in compilers that support it. +#ifndef __has_builtin + #define __has_builtin(x) 0 +#endif +#if !__has_builtin(__builtin_clz) int __builtin_clz(unsigned int); +#endif +#if !__has_builtin(__builtin_ctz) int __builtin_ctz(unsigned int); +#endif +#if !__has_builtin(__builtin_clzl) int __builtin_clzl(unsigned long); +#endif +#if !__has_builtin(__builtin_ctzl) int __builtin_ctzl(unsigned long); +#endif +#if !__has_builtin(__builtin_clz) int __builtin_clz(unsigned int v) { @@ -14,7 +27,9 @@ __builtin_clz(unsigned int v) break; return i; } +#endif +#if !__has_builtin(__builtin_ctz) int __builtin_ctz(unsigned int v) { @@ -25,7 +40,9 @@ __builtin_ctz(unsigned int v) break; return i; } +#endif +#if !__has_builtin(__builtin_clzl) int __builtin_clzl(unsigned long v) { @@ -37,7 +54,9 @@ __builtin_clzl(unsigned long v) break; return i; } +#endif +#if !__has_builtin(__builtin_ctzl) int __builtin_ctzl(unsigned long v) { @@ -48,3 +67,4 @@ __builtin_ctzl(unsigned long v) break; return i; } +#endif