@@ -31,7 +31,7 @@ def blake3_disable(macro)
3131# Probe used to confirm the compiler both accepts +flag+ and can compile the
3232# intrinsics the backend relies on.
3333def blake3_have_isa? ( name , flag , snippet )
34- checking_for ( "#{ name } intrinsics ( #{ flag } )" ) do
34+ checking_for ( "#{ name } intrinsics" + ( flag ? " ( #{ flag } )" : "" ) ) do
3535 try_compile ( snippet , flag )
3636 end
3737end
@@ -40,27 +40,29 @@ def blake3_have_isa?(name, flag, snippet)
4040when /\A (x86_64|amd64|x64)\z /i
4141 # Try to detect which SIMD features this x86 machine and compiler has
4242 x86_backends = [
43- [ "blake3_sse2" , "SSE2" , "-msse2" ,
43+ [ "blake3_sse2" , "SSE2" , [ "-msse2" , "-arch:SSE2" ] ,
4444 "#include <immintrin.h>\n int main(void){ volatile __m128i x = _mm_setzero_si128(); (void)x; return 0; }\n " ,
4545 "BLAKE3_NO_SSE2" ] ,
46- [ "blake3_sse41" , "SSE4.1" , "-msse4.1" ,
46+ [ "blake3_sse41" , "SSE4.1" , [ "-msse4.1" , "-arch:AVX" ] ,
4747 "#include <immintrin.h>\n int main(void){ volatile __m128i x = _mm_setzero_si128(); return _mm_testz_si128(x, x); }\n " ,
4848 "BLAKE3_NO_SSE41" ] ,
49- [ "blake3_avx2" , "AVX2" , "-mavx2" ,
49+ [ "blake3_avx2" , "AVX2" , [ "-mavx2" , "-arch:AVX2" ] ,
5050 "#include <immintrin.h>\n int main(void){ volatile __m256i x = _mm256_setzero_si256(); (void)x; return 0; }\n " ,
5151 "BLAKE3_NO_AVX2" ] ,
52- [ "blake3_avx512" , "AVX-512" , "-mavx512f -mavx512vl" ,
52+ [ "blake3_avx512" , "AVX-512" , [ "-mavx512f -mavx512vl" , "-arch:AVX512" ] ,
5353 "#include <immintrin.h>\n int main(void){ volatile __m512i x = _mm512_setzero_si512(); (void)x; return 0; }\n " ,
5454 "BLAKE3_NO_AVX512" ] ,
5555 ]
5656
57- x86_backends . each do |obj , name , flag , snippet , no_macro |
58- if blake3_have_isa? ( name , flag , snippet )
59- objs << obj
60- simd_cflags [ obj ] = flag
61- else
57+ x86_backends . each do |obj , name , flags , snippet , no_macro |
58+ [ nil , *flags ] . any? do |flag |
59+ if blake3_have_isa? ( name , flag , snippet )
60+ objs << obj
61+ simd_cflags [ obj ] = flag
62+ true
63+ end
64+ end or
6265 blake3_disable ( no_macro )
63- end
6466 end
6567when /\A (aarch64|arm64)\z /i
6668 # NEON is part of the AArch64 baseline, so no runtime detection or special
0 commit comments