@@ -490,10 +490,10 @@ if not opt_intrinsics.disabled()
490490 elif host_cpu_family in [' x86' , ' x86_64' ]
491491 # XXX: allow external override/specification of the flags
492492 x86_intrinsics = [
493- [ ' SSE' , ' xmmintrin.h' , ' __m128' , ' _mm_setzero_ps()' , [' -msse' ] ],
494- [ ' SSE2' , ' emmintrin.h' , ' __m128i' , ' _mm_setzero_si128()' , [' -msse2' ] ],
495- [ ' SSE4.1' , ' smmintrin.h' , ' __m128i' , ' _mm_setzero_si128(); mtest = _mm_cmpeq_epi64(mtest, mtest)' , [' -msse4.1' ] ],
496- [ ' AVX2' , ' immintrin.h' , ' __m256i' , ' _mm256_abs_epi32(_mm256_setzero_si256())' , [' -mavx' , ' -mfma' , ' -mavx2' ] ],
493+ [ ' SSE' , ' xmmintrin.h' , ' __m128' , ' _mm_setzero_ps()' , [' -msse' ], [] ],
494+ [ ' SSE2' , ' emmintrin.h' , ' __m128i' , ' _mm_setzero_si128()' , [' -msse2' ], [] ],
495+ [ ' SSE4.1' , ' smmintrin.h' , ' __m128i' , ' _mm_setzero_si128(); mtest = _mm_cmpeq_epi64(mtest, mtest)' , [' -msse4.1' ], [] ],
496+ [ ' AVX2' , ' immintrin.h' , ' __m256i' , ' _mm256_abs_epi32(_mm256_setzero_si256())' , [' -mavx' , ' -mfma' , ' -mavx2' ], [ ' /arch:AVX2 ' ] ],
497497 ]
498498
499499 foreach intrin : x86_intrinsics
@@ -504,9 +504,11 @@ if not opt_intrinsics.disabled()
504504 return *((unsigned char *) &mtest) != 0;
505505 }''' .format(intrin[1 ],intrin[2 ],intrin[3 ])
506506 intrin_name = intrin[0 ]
507- # Intrinsics arguments are not available with MSVC-like compilers
508- intrin_args = cc.get_argument_syntax() == ' msvc' ? [] : intrin[4 ]
509- if cc.links(intrin_check, name : ' compiler supports @0@ intrinsics' .format(intrin_name))
507+ intrin_args = cc.get_argument_syntax() == ' msvc' ? intrin[5 ] : intrin[4 ]
508+ if cc.get_argument_syntax() == ' msvc' and intrin_args.length() == 0 and cc.links(intrin_check, name : ' compiler supports @0@ intrinsics' .format(intrin_name))
509+ may_have_intrin = true
510+ presume_intrin = opus_can_presume_simd
511+ elif cc.get_argument_syntax() != ' msvc' and cc.links(intrin_check, name : ' compiler supports @0@ intrinsics' .format(intrin_name))
510512 may_have_intrin = true
511513 presume_intrin = opus_can_presume_simd
512514 elif intrin_args.length() > 0
0 commit comments