meson: Enable SSE4.1 for MSVC

Modern MSVC always supports compiling with the SSE4.1 intrinsics with
no additional command line options, but doesn't have any options for
auto-vectorizing into SSE4.1.

Reviewed-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Reviewed-by: Yonggang Luo <luoyonggang@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16840>
This commit is contained in:
Jesse Natalie 2022-06-03 07:38:40 -07:00 committed by Marge Bot
parent ad0d39efed
commit 2d04206673

View File

@ -1260,34 +1260,36 @@ if host_machine.system() == 'windows'
endif
endif
if host_machine.cpu_family().startswith('x86') and cc.get_argument_syntax() != 'msvc'
sse41_args = []
with_sse41 = false
if host_machine.cpu_family().startswith('x86')
pre_args += '-DUSE_SSE41'
with_sse41 = true
sse41_args = ['-msse4.1']
if host_machine.cpu_family() == 'x86'
if get_option('sse2')
# These settings make generated GCC code match MSVC and follow
# GCC advice on https://gcc.gnu.org/wiki/FloatingPointMath#x86note
#
# NOTE: We need to ensure stack is realigned given that we
# produce shared objects, and have no control over the stack
# alignment policy of the application. Therefore we need
# -mstackrealign or -mincoming-stack-boundary=2.
#
# XXX: We could have SSE without -mstackrealign if we always used
# __attribute__((force_align_arg_pointer)), but that's not
# always the case.
c_args += ['-msse2', '-mfpmath=sse', '-mstackrealign']
else
# GCC on x86 (not x86_64) with -msse* assumes a 16 byte aligned stack, but
# that's not guaranteed
sse41_args += '-mstackrealign'
if cc.get_id() != 'msvc'
sse41_args = ['-msse4.1']
if host_machine.cpu_family() == 'x86'
if get_option('sse2')
# These settings make generated GCC code match MSVC and follow
# GCC advice on https://gcc.gnu.org/wiki/FloatingPointMath#x86note
#
# NOTE: We need to ensure stack is realigned given that we
# produce shared objects, and have no control over the stack
# alignment policy of the application. Therefore we need
# -mstackrealign or -mincoming-stack-boundary=2.
#
# XXX: We could have SSE without -mstackrealign if we always used
# __attribute__((force_align_arg_pointer)), but that's not
# always the case.
c_args += ['-msse2', '-mfpmath=sse', '-mstackrealign']
else
# GCC on x86 (not x86_64) with -msse* assumes a 16 byte aligned stack, but
# that's not guaranteed
sse41_args += '-mstackrealign'
endif
endif
endif
else
with_sse41 = false
sse41_args = []
endif
# Check for GCC style atomics