summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/json/simd/conf.rb35
1 files changed, 13 insertions, 22 deletions
diff --git a/ext/json/simd/conf.rb b/ext/json/simd/conf.rb
index fa5b97801f..8e7d8ee261 100644
--- a/ext/json/simd/conf.rb
+++ b/ext/json/simd/conf.rb
@@ -1,29 +1,20 @@
case RbConfig::CONFIG['host_cpu']
when /^(arm|aarch64)/
# Try to compile a small program using NEON instructions
- if have_header('arm_neon.h') &&
- try_compile(<<~'SRC')
- #include <arm_neon.h>
- int main(int argc, char **argv) {
- uint8x16_t test = vdupq_n_u8(32);
- if (argc > 100000) printf("%p", &test);
- return 0;
- }
- SRC
- $defs.push("-DJSON_ENABLE_SIMD")
- end
+ header, type, init = 'arm_neon.h', 'uint8x16_t', 'vdupq_n_u8(32)'
when /^(x86_64|x64)/
- if have_header('x86intrin.h') &&
- try_compile(<<~'SRC')
- #include <x86intrin.h>
- int main(int argc, char **argv) {
- __m128i test = _mm_set1_epi8(32);
- if (argc > 100000) printf("%p", &test);
- return 0;
- }
- SRC
- $defs.push("-DJSON_ENABLE_SIMD")
- end
+ header, type, init = 'x86intrin.h', '__m128i', '_mm_set1_epi8(32)'
+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")
end
have_header('cpuid.h')