diff --git a/CMakeLists.txt b/CMakeLists.txt index ae939a9..e07a06d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -72,6 +72,8 @@ if(NOT MSVC) target_compile_options(snmalloc_lib INTERFACE -mcx16) elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "amd64") target_compile_options(snmalloc_lib INTERFACE -mcx16) + elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "AMD64") + target_compile_options(snmalloc_lib INTERFACE -mcx16) elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86") target_compile_options(snmalloc_lib INTERFACE -mcx16) # XXX elseif ARM? diff --git a/src/ds/bits.h b/src/ds/bits.h index f519071..a7a791f 100644 --- a/src/ds/bits.h +++ b/src/ds/bits.h @@ -13,7 +13,9 @@ #include #include #include - +#if defined(_WIN32) && defined(__GNUC__) +#define USE_CLZLL +#endif #ifdef pause # undef pause #endif @@ -75,6 +77,8 @@ namespace snmalloc return BITS - index - 1; # endif +#elif defined(USE_CLZLL) + return static_cast(__builtin_clzll(x)); #else return static_cast(__builtin_clzl(x)); #endif diff --git a/src/pal/pal_windows.h b/src/pal/pal_windows.h index 0f3b608..8c1fc27 100644 --- a/src/pal/pal_windows.h +++ b/src/pal/pal_windows.h @@ -5,8 +5,13 @@ #include "../mem/allocconfig.h" #ifdef _WIN32 +# ifndef _MSC_VER +# include +# endif # define WIN32_LEAN_AND_MEAN -# define NOMINMAX +# ifndef NOMINMAX +# define NOMINMAX +# endif # include // VirtualAlloc2 is exposed in RS5 headers. # ifdef NTDDI_WIN10_RS5 diff --git a/src/test/usage.h b/src/test/usage.h index c48a631..5cc290a 100644 --- a/src/test/usage.h +++ b/src/test/usage.h @@ -2,7 +2,9 @@ #if defined(_WIN32) # define WIN32_LEAN_AND_MEAN -# define NOMINMAX +# ifndef NOMINMAX +# define NOMINMAX +# endif # include // Needs to be included after windows.h # include