diff --git a/kitty/simd-string.c b/kitty/simd-string.c index 4d63e9fde..61b391fd5 100644 --- a/kitty/simd-string.c +++ b/kitty/simd-string.c @@ -119,12 +119,13 @@ init_simd(void *x) { PyObject *module = (PyObject*)x; if (PyModule_AddFunctions(module, module_methods) != 0) return false; #define A(x, val) { Py_INCREF(Py_##val); if (0 != PyModule_AddObject(module, #x, Py_##val)) return false; } +#define do_check() has_sse4_2 = __builtin_cpu_supports("sse4.2") != 0; has_avx2 = __builtin_cpu_supports("avx2") != 0; #ifdef __APPLE__ #ifdef __arm64__ // simde takes care of NEON on Apple Silicon has_sse4_2 = true; has_avx2 = true; #else - has_sse4_2 = __builtin_cpu_supports("sse4.2") != 0; has_avx2 = __builtin_cpu_supports("avx2") != 0; + do_check(); #endif #else #ifdef __aarch64__ @@ -132,9 +133,10 @@ init_simd(void *x) { // basic AVX2 and SSE4.2 intrinsics, so hopefully they work on ARM has_sse4_2 = true; has_avx2 = true; #else - has_sse4_2 = __builtin_cpu_supports("sse4.2") != 0; has_avx2 = __builtin_cpu_supports("avx2") != 0; + do_check(); #endif #endif +#undef do_check if (has_avx2) { A(has_avx2, True); find_either_of_two_bytes_impl = find_either_of_two_bytes_256;