diff --git a/libc/cmake/modules/LLVMLibCCheckCpuFeatures.cmake b/libc/cmake/modules/LLVMLibCCheckCpuFeatures.cmake index c09d4751d3907..d76f3b16b30ec 100644 --- a/libc/cmake/modules/LLVMLibCCheckCpuFeatures.cmake +++ b/libc/cmake/modules/LLVMLibCCheckCpuFeatures.cmake @@ -9,7 +9,7 @@ if(LIBC_TARGET_ARCHITECTURE_IS_X86_64) set(ALL_CPU_FEATURES SSE2 SSE4_2 AVX AVX2 AVX512F AVX512BW FMA) set(LIBC_COMPILE_OPTIONS_NATIVE -march=native) elseif(LIBC_TARGET_ARCHITECTURE_IS_AARCH64) - set(ALL_CPU_FEATURES "FullFP16") + set(ALL_CPU_FEATURES FullFP16 MOPS SVE SVE2) set(LIBC_COMPILE_OPTIONS_NATIVE -mcpu=native) endif() diff --git a/libc/cmake/modules/cpu_features/check_MOPS.cpp b/libc/cmake/modules/cpu_features/check_MOPS.cpp new file mode 100644 index 0000000000000..314fe9b38bc81 --- /dev/null +++ b/libc/cmake/modules/cpu_features/check_MOPS.cpp @@ -0,0 +1,5 @@ +#include "src/__support/macros/properties/cpu_features.h" + +#ifndef LIBC_TARGET_CPU_HAS_MOPS +#error unsupported +#endif diff --git a/libc/cmake/modules/cpu_features/check_SVE.cpp b/libc/cmake/modules/cpu_features/check_SVE.cpp new file mode 100644 index 0000000000000..725f42f6eb883 --- /dev/null +++ b/libc/cmake/modules/cpu_features/check_SVE.cpp @@ -0,0 +1,5 @@ +#include "src/__support/macros/properties/cpu_features.h" + +#ifndef LIBC_TARGET_CPU_HAS_SVE +#error unsupported +#endif diff --git a/libc/cmake/modules/cpu_features/check_SVE2.cpp b/libc/cmake/modules/cpu_features/check_SVE2.cpp new file mode 100644 index 0000000000000..37f4b4fa038bb --- /dev/null +++ b/libc/cmake/modules/cpu_features/check_SVE2.cpp @@ -0,0 +1,5 @@ +#include "src/__support/macros/properties/cpu_features.h" + +#ifndef LIBC_TARGET_CPU_HAS_SVE2 +#error unsupported +#endif diff --git a/libc/src/__support/macros/properties/cpu_features.h b/libc/src/__support/macros/properties/cpu_features.h index fc6099ca6ccc5..1fe20d9b23a34 100644 --- a/libc/src/__support/macros/properties/cpu_features.h +++ b/libc/src/__support/macros/properties/cpu_features.h @@ -18,6 +18,18 @@ #define LIBC_TARGET_CPU_HAS_FULLFP16 #endif +#if defined(__ARM_FEATURE_SVE) +#define LIBC_TARGET_CPU_HAS_SVE +#endif + +#if defined(__ARM_FEATURE_SVE2) +#define LIBC_TARGET_CPU_HAS_SVE2 +#endif + +#if defined(__ARM_FEATURE_MOPS) +#define LIBC_TARGET_CPU_HAS_MOPS +#endif + #if defined(__SSE2__) #define LIBC_TARGET_CPU_HAS_SSE2 #define LIBC_TARGET_CPU_HAS_FPU_FLOAT