Current implementation requires vsx: https://github.com/freebsd/freebsd-ports/commit/d442c49fd6131a5aef6597ec739ac46ccdf2c5a7 It also uses incorrect macros and non-portable ways to detect ISA support. We fix macros and add an explicit option to use VSX. --- CMakeLists.txt 2026-04-22 05:01:59.000000000 +0800 +++ CMakeLists.txt 2026-05-29 15:14:11.000000000 +0800 @@ -37,6 +37,7 @@ option(SIMDUTF_INTERNAL_TESTS "Whether to test also internal procedures. Useful mostly for developers, not users." OFF) option(SIMDUTF_LOGGING "Whether to enable logging (this should never be used in binary releases)." OFF) option(SIMDUTF_USE_STATIC_INITIALIZATION "Whether to use translation-unit-scope static variables for implementation singletons (faster, but unsafe before main() when used in a library)." OFF) +option(SIMDUTF_ENABLE_VSX "Use VSX instructions on supported Power CPUs." OFF) option(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION "Whether to enable unsafe fuzzing mode." OFF) set(SIMDUTF_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) --- src/CMakeLists.txt 2026-04-22 05:01:59.000000000 +0800 +++ src/CMakeLists.txt 2026-05-29 15:30:30.000000000 +0800 @@ -51,7 +51,9 @@ target_compile_options(simdutf PRIVATE -mno-avx256-split-unaligned-load -mno-avx256-split-unaligned-store) endif() -if ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_SYSTEM STREQUAL "PowerPC")) +# VSX may or may not be available, do not force possibly unsupported flags. +if (CMAKE_SYSTEM_PROCESSOR MATCHES "ppc|power" AND SIMDUTF_ENABLE_VSX) + target_compile_definitions(simdutf PRIVATE SIMDUTF_ENABLE_VSX=1) target_compile_options(simdutf PRIVATE -maltivec -mvsx -mcpu=power8) endif() --- src/simdutf/ppc64.h 2026-04-22 05:01:59.000000000 +0800 +++ src/simdutf/ppc64.h 2026-05-29 15:28:17.000000000 +0800 @@ -8,10 +8,10 @@ #include "simdutf/portability.h" #ifndef SIMDUTF_IMPLEMENTATION_PPC64 - #define SIMDUTF_IMPLEMENTATION_PPC64 (SIMDUTF_IS_PPC64) + #define SIMDUTF_IMPLEMENTATION_PPC64 (SIMDUTF_PPC64_VSX) #endif #define SIMDUTF_CAN_ALWAYS_RUN_PPC64 \ - SIMDUTF_IMPLEMENTATION_PPC64 &&SIMDUTF_IS_PPC64 + SIMDUTF_IMPLEMENTATION_PPC64 && SIMDUTF_PPC64_VSX #include "simdutf/internal/isadetection.h" --- include/simdutf/portability.h 2026-04-22 05:01:59.000000000 +0800 +++ include/simdutf/portability.h 2026-05-29 15:28:00.000000000 +0800 @@ -109,9 +109,10 @@ #define SIMDUTF_IS_X86_64 1 #elif defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) #define SIMDUTF_IS_ARM64 1 -#elif defined(__PPC64__) || defined(_M_PPC64) - #if defined(__VEC__) && defined(__ALTIVEC__) - #define SIMDUTF_IS_PPC64 1 +#elif defined(__PPC64__) || defined(_M_PPC64) || defined(__ppc64__) + #define SIMDUTF_IS_PPC64 1 + #if defined(__VEC__) && defined(SIMDUTF_ENABLE_VSX) + #define SIMDUTF_PPC64_VSX 1 #endif #elif defined(__s390__) // s390 IBM system. Big endian. @@ -177,7 +178,7 @@ #define SIMDUTF_IS_X86_32BITS 1 #elif defined(__arm__) || defined(_M_ARM) #define SIMDUTF_IS_ARM_32BITS 1 - #elif defined(__PPC__) || defined(_M_PPC) + #elif defined(__PPC__) || defined(_M_PPC) || defined(__ppc__) #define SIMDUTF_IS_PPC_32BITS 1 #endif