From 855ffa7c465205ec02558c7d2cbea8f04ea60112 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Fri, 26 Mar 2021 16:25:01 -0700 Subject: [PATCH] Default enable SSE2 on mesa builds. With the idea of branching classic device support in to its own tree now would be a good time to also raise the minimum requirements to something that is more "modern" on x86. SSE2 was introduced in 2000(!) by default let's make it the minimum spec now All the old hardware that is moving to the maintenance branch will finally be out of the way. For the 64-bit side of the discussion there isn't much changed. * GCC already enables -msse and -msse2 by default * Same with clang * fpmath=sse might remove some extraneous x87 usage ** Clang implies fpmath=sse ALWAYS For the 32-bit side of things is where the exciting details change * GCC by default doesn't enable sse1 or sse2 ** Does all `float`, `double`, and `long double` math with x87 ** -msse2 enables sse2 and sse1, gcc still uses x87 even with those enabled ** -mfpmath=sse moves away from using x87 and instead uses sse1 and sse2 * Clang already default enables sse1/sse2 which then turns on their implied fpmath=sse What does this mean for users? On Linux raises the default minimum processor spec to SSE2 supporting CPUs * Intel requirements raise from P5 (1993) to Netburst (2000) * AMD requirements raise from Athlon(1999/2000) to Athlon 64 (2003) * Via requirements raise from C3(2001) to C7 (2005) What does it mean for package maintainers? For x86-64 distributions that have i386/i686 multilib, then nothing changes. You're already on a platform guaranteed to support SSE2. For i386/i686 distributions they will need to weigh their min spec against this. Not sure how many still support classic processors. Who is left out in the cold? * Intel Quark (2013) ** Embedded board, doesn't have a GPU, Technically has 1x PCIe 2.0 lane that someone could plug a GPU in to * Some older transmeta CPUs, but they had a followup that also had SSE2. ** Anyone hacking on these with a modern GPU? I'm guessing they know how to turn this option off Reviewed-by: Erik Faye-Lund Reviewed-by: Adam Jackson Part-of: --- meson.build | 36 ++++++++++++++++++------------------ meson_options.txt | 2 +- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/meson.build b/meson.build index 94d011e4175b7..78a763e2781c4 100644 --- a/meson.build +++ b/meson.build @@ -1141,30 +1141,30 @@ if host_machine.system() == 'windows' endif endif -if get_option('sse2') and host_machine.system() == 'windows' and host_machine.cpu_family() == 'x86' and cc.get_id() == 'gcc' - # These settings make generated MinGW 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 += ['-msse', '-msse2', '-mfpmath=sse', '-mstackrealign'] -endif - if host_machine.cpu_family().startswith('x86') and cc.get_id() != 'msvc' pre_args += '-DUSE_SSE41' with_sse41 = true sse41_args = ['-msse4.1'] - # GCC on x86 (not x86_64) with -msse* assumes a 16 byte aligned stack, but - # that's not guaranteed if host_machine.cpu_family() == 'x86' - sse41_args += '-mstackrealign' + 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 else with_sse41 = false diff --git a/meson_options.txt b/meson_options.txt index 37e5015d748ad..b5e51de5a14d3 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -463,7 +463,7 @@ option( 'sse2', type : 'boolean', value : true, - description : 'use msse2 flag for mingw x86. Default: true', + description : 'use msse2 flag for x86. Uses sse/sse2 instead of x87. Default: true', ) option( 'perfetto',