diff --git a/libc/cmake/modules/LLVMLibCCheckCpuFeatures.cmake b/libc/cmake/modules/LLVMLibCCheckCpuFeatures.cmake --- a/libc/cmake/modules/LLVMLibCCheckCpuFeatures.cmake +++ b/libc/cmake/modules/LLVMLibCCheckCpuFeatures.cmake @@ -6,7 +6,7 @@ set(ALL_CPU_FEATURES "") if(${LIBC_TARGET_ARCHITECTURE_IS_X86}) - set(ALL_CPU_FEATURES SSE2 SSE4_2 AVX2 AVX512F FMA) + set(ALL_CPU_FEATURES SSE2 SSE4_2 AVX2 AVX512F AVX512BW FMA) set(LIBC_COMPILE_OPTIONS_NATIVE -march=native) elseif(${LIBC_TARGET_ARCHITECTURE_IS_AARCH64}) set(LIBC_COMPILE_OPTIONS_NATIVE -mcpu=native) diff --git a/libc/src/string/memory_utils/op_x86.h b/libc/src/string/memory_utils/op_x86.h --- a/libc/src/string/memory_utils/op_x86.h +++ b/libc/src/string/memory_utils/op_x86.h @@ -20,15 +20,21 @@ #include "src/string/memory_utils/op_builtin.h" #include "src/string/memory_utils/op_generic.h" -#ifdef __SSE2__ +#if defined(__AVX512BW__) || defined(__AVX2__) || defined(__SSE2__) #include -#else +#endif + // Define fake functions to prevent the compiler from failing on undefined -// functions in case SSE2 is not present. +// functions in case the builtin is not present. +#ifndef _mm512_cmpneq_epi8_mask #define _mm512_cmpneq_epi8_mask(A, B) 0 -#define _mm_movemask_epi8(A) 0 +#endif +#ifndef _mm256_movemask_epi8 #define _mm256_movemask_epi8(A) 0 -#endif // __SSE2__ +#endif +#ifndef _mm_movemask_epi8 +#define _mm_movemask_epi8(A) 0 +#endif namespace __llvm_libc::x86 {