ref: 556c2d446b396cff11987ac1b74ed7bbf0297d78
parent: d7fab5e89289b28e1055d10f348f6d358fa84a00
author: Jean-Marc Valin <jmvalin@jmvalin.ca>
date: Wed Mar 13 11:11:08 EDT 2024
Adding MSVC AVX2 support for meson build Extracted from this MR from Marcus Asteborg: https://gitlab.xiph.org/xiph/opus/-/merge_requests/82/
--- a/meson.build
+++ b/meson.build
@@ -490,10 +490,10 @@
elif host_cpu_family in ['x86', 'x86_64']
# XXX: allow external override/specification of the flags
x86_intrinsics = [
- [ 'SSE', 'xmmintrin.h', '__m128', '_mm_setzero_ps()', ['-msse'] ],
- [ 'SSE2', 'emmintrin.h', '__m128i', '_mm_setzero_si128()', ['-msse2'] ],
- [ 'SSE4.1', 'smmintrin.h', '__m128i', '_mm_setzero_si128(); mtest = _mm_cmpeq_epi64(mtest, mtest)', ['-msse4.1'] ],
- [ 'AVX2', 'immintrin.h', '__m256i', '_mm256_abs_epi32(_mm256_setzero_si256())', ['-mavx', '-mfma', '-mavx2'] ],
+ [ 'SSE', 'xmmintrin.h', '__m128', '_mm_setzero_ps()', ['-msse'], [] ],
+ [ 'SSE2', 'emmintrin.h', '__m128i', '_mm_setzero_si128()', ['-msse2'], [] ],
+ [ 'SSE4.1', 'smmintrin.h', '__m128i', '_mm_setzero_si128(); mtest = _mm_cmpeq_epi64(mtest, mtest)', ['-msse4.1'], [] ],
+ [ 'AVX2', 'immintrin.h', '__m256i', '_mm256_abs_epi32(_mm256_setzero_si256())', ['-mavx', '-mfma', '-mavx2'], ['/arch:AVX2'] ],
]
foreach intrin : x86_intrinsics
@@ -504,9 +504,11 @@
return *((unsigned char *) &mtest) != 0;
}'''.format(intrin[1],intrin[2],intrin[3])
intrin_name = intrin[0]
- # Intrinsics arguments are not available with MSVC-like compilers
- intrin_args = cc.get_argument_syntax() == 'msvc' ? [] : intrin[4]
- if cc.links(intrin_check, name : 'compiler supports @0@ intrinsics'.format(intrin_name))
+ intrin_args = cc.get_argument_syntax() == 'msvc' ? intrin[5] : intrin[4]
+ if cc.get_argument_syntax() == 'msvc' and intrin_args.length() == 0 and cc.links(intrin_check, name : 'compiler supports @0@ intrinsics'.format(intrin_name))
+ may_have_intrin = true
+ presume_intrin = opus_can_presume_simd
+ elif cc.get_argument_syntax() != 'msvc' and cc.links(intrin_check, name : 'compiler supports @0@ intrinsics'.format(intrin_name))
may_have_intrin = true
presume_intrin = opus_can_presume_simd
elif intrin_args.length() > 0
--
⑨