diff options
| -rw-r--r-- | compiler-rt/lib/builtins/cpu_model/aarch64.c | 2 | ||||
| -rw-r--r-- | compiler-rt/lib/builtins/cpu_model/aarch64/lse_atomics/windows.inc | 12 |
2 files changed, 14 insertions, 0 deletions
diff --git a/compiler-rt/lib/builtins/cpu_model/aarch64.c b/compiler-rt/lib/builtins/cpu_model/aarch64.c index def11f8..74e5e01 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(<sys/auxv.h>) #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 0000000..fff1593 --- /dev/null +++ b/compiler-rt/lib/builtins/cpu_model/aarch64/lse_atomics/windows.inc @@ -0,0 +1,12 @@ +#define WIN32_LEAN_AND_MEAN +#include <windows.h> +#include <processthreadsapi.h> + +#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; +} |
