diff --git a/compiler-rt/lib/builtins/cpu_model/aarch64.c b/compiler-rt/lib/builtins/cpu_model/aarch64.c index def11f88c485..74e5e01b66c5 100644 --- a/compiler-rt/lib/builtins/cpu_model/aarch64.c +++ b/compiler-rt/lib/builtins/cpu_model/aarch64.c @@ -48,6 +48,8 @@ _Bool __aarch64_have_lse_atomics #elif defined(__linux__) && __has_include() #include "aarch64/hwcap.inc" #include "aarch64/lse_atomics/getauxval.inc" +#elif defined(_WIN32) +#include "aarch64/lse_atomics/windows.inc" #else // When unimplemented, we leave __aarch64_have_lse_atomics initialized to false. #endif diff --git a/compiler-rt/lib/builtins/cpu_model/aarch64/lse_atomics/windows.inc b/compiler-rt/lib/builtins/cpu_model/aarch64/lse_atomics/windows.inc new file mode 100644 index 000000000000..fff1593e1fac --- /dev/null +++ b/compiler-rt/lib/builtins/cpu_model/aarch64/lse_atomics/windows.inc @@ -0,0 +1,12 @@ +#define WIN32_LEAN_AND_MEAN +#include +#include + +#ifndef PF_ARM_V81_ATOMIC_INSTRUCTIONS_AVAILABLE +#define PF_ARM_V81_ATOMIC_INSTRUCTIONS_AVAILABLE 34 +#endif + +static void CONSTRUCTOR_ATTRIBUTE init_have_lse_atomics(void) { + if (IsProcessorFeaturePresent(PF_ARM_V81_ATOMIC_INSTRUCTIONS_AVAILABLE)) + __aarch64_have_lse_atomics = true; +}