3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-08-03 09:50:23 +00:00

Fix building with Windows SDK and Clang-CL

This commit is contained in:
Zhang 2024-08-12 18:19:49 +08:00
parent 33f0256e20
commit 7c0606057b
No known key found for this signature in database
GPG key ID: C9078243054CE41C

View file

@ -46,10 +46,14 @@ Revision History:
#define LEHMER_GCD #define LEHMER_GCD
#endif #endif
#ifdef __has_builtin
#if defined(__GNUC__) #define HAS_BUILTIN(X) __has_builtin(X)
#else
#define HAS_BUILTIN(X) 0
#end
#if HAS_BUILTIN(__builtin_ctz)
#define _trailing_zeros32(X) __builtin_ctz(X) #define _trailing_zeros32(X) __builtin_ctz(X)
#elif defined(_WINDOWS) && (defined(_M_X86) || (defined(_M_X64) && !defined(_M_ARM64EC))) #elif defined(_WINDOWS) && (defined(_M_X86) || (defined(_M_X64) && !defined(_M_ARM64EC))) && !defined(__clang__)
// This is needed for _tzcnt_u32 and friends. // This is needed for _tzcnt_u32 and friends.
#include <immintrin.h> #include <immintrin.h>
#define _trailing_zeros32(X) _tzcnt_u32(X) #define _trailing_zeros32(X) _tzcnt_u32(X)
@ -62,9 +66,9 @@ static uint32_t _trailing_zeros32(uint32_t x) {
#endif #endif
#if (defined(__LP64__) || defined(_WIN64)) && defined(_M_X64) && !defined(_M_ARM64EC) #if (defined(__LP64__) || defined(_WIN64)) && defined(_M_X64) && !defined(_M_ARM64EC)
#if defined(__GNUC__) #if HAS_BUILTIN(__builtin_ctzll)
#define _trailing_zeros64(X) __builtin_ctzll(X) #define _trailing_zeros64(X) __builtin_ctzll(X)
#else #elif !defined(__clang__)
#define _trailing_zeros64(X) _tzcnt_u64(X) #define _trailing_zeros64(X) _tzcnt_u64(X)
#endif #endif
#else #else
@ -75,6 +79,8 @@ static uint64_t _trailing_zeros64(uint64_t x) {
} }
#endif #endif
#undef HAS_BUILTIN
unsigned trailing_zeros(uint32_t x) { unsigned trailing_zeros(uint32_t x) {
return static_cast<unsigned>(_trailing_zeros32(x)); return static_cast<unsigned>(_trailing_zeros32(x));
} }