diff --git a/include/mimalloc-atomic.h b/include/mimalloc-atomic.h index 722b6ad6..c3d0ad23 100644 --- a/include/mimalloc-atomic.h +++ b/include/mimalloc-atomic.h @@ -13,12 +13,12 @@ terms of the MIT license. A copy of the license can be found in the file // We need to be portable between C, C++, and MSVC. // ------------------------------------------------------ -#if defined(_MSC_VER) -#define _Atomic(tp) tp -#define ATOMIC_VAR_INIT(x) x -#elif defined(__cplusplus) +#if defined(__cplusplus) #include #define _Atomic(tp) std::atomic +#elif defined(_MSC_VER) +#define _Atomic(tp) tp +#define ATOMIC_VAR_INIT(x) x #else #include #endif @@ -126,7 +126,7 @@ static inline intptr_t mi_atomic_subi(volatile _Atomic(intptr_t)* p, intptr_t su (T*)mi_atomic_exchange((volatile _Atomic(uintptr_t)*)(p), (uintptr_t)((T*)exchange)) -#ifdef _MSC_VER +#if !defined(__cplusplus) && defined(_MSC_VER) #define WIN32_LEAN_AND_MEAN #include #include diff --git a/src/bitmap.inc.c b/src/bitmap.inc.c index c3813a44..99e8fa6f 100644 --- a/src/bitmap.inc.c +++ b/src/bitmap.inc.c @@ -72,6 +72,14 @@ static inline uintptr_t mi_bitmap_mask_(size_t count, size_t bitidx) { #if defined(_MSC_VER) #define MI_HAVE_BITSCAN #include +#ifndef MI_64 +#if MI_INTPTR_SIZE==8 +#define MI_64(f) f##64 +#else +#define MI_64(f) f +#endif +#endif + static inline size_t mi_bsf(uintptr_t x) { if (x==0) return 8*MI_INTPTR_SIZE; DWORD idx;