From 069a24c93caaa6f8eacdb02609356bee0adf3192 Mon Sep 17 00:00:00 2001 From: Jean Boussier Date: Thu, 24 Jul 2025 13:24:55 +0200 Subject: [ruby/json] Don't assume `__builtin_cpu_supports` exists Fix: https://github.com/ruby/json/issues/827 On very old compilers it might not exist, at that point might as well skip SIMD entirely. https://github.com/ruby/json/commit/da878435dc --- ext/json/simd/conf.rb | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/ext/json/simd/conf.rb b/ext/json/simd/conf.rb index 8e7d8ee261..76f774bc97 100644 --- a/ext/json/simd/conf.rb +++ b/ext/json/simd/conf.rb @@ -1,20 +1,24 @@ case RbConfig::CONFIG['host_cpu'] when /^(arm|aarch64)/ # Try to compile a small program using NEON instructions - header, type, init = 'arm_neon.h', 'uint8x16_t', 'vdupq_n_u8(32)' + header, type, init, extra = 'arm_neon.h', 'uint8x16_t', 'vdupq_n_u8(32)', nil when /^(x86_64|x64)/ - header, type, init = 'x86intrin.h', '__m128i', '_mm_set1_epi8(32)' + header, type, init, extra = 'x86intrin.h', '__m128i', '_mm_set1_epi8(32)', 'if (__builtin_cpu_supports("sse2")) { printf("OK"); }' end if header - have_header(header) && try_compile(<<~SRC) - #{cpp_include(header)} - int main(int argc, char **argv) { - #{type} test = #{init}; - if (argc > 100000) printf("%p", &test); - return 0; - } - SRC - $defs.push("-DJSON_ENABLE_SIMD") + if have_header(header) && try_compile(<<~SRC, '-Werror=implicit-function-declaration') + #{cpp_include(header)} + int main(int argc, char **argv) { + #{type} test = #{init}; + #{extra} + if (argc > 100000) printf("%p", &test); + return 0; + } + SRC + $defs.push("-DJSON_ENABLE_SIMD") + else + puts "Disable SIMD" + end end have_header('cpuid.h') -- cgit v1.2.3