[Mesa-dev] [PATCH 1/4] meson: Enable SSE4.1 optimizations

Eric Engestrom eric.engestrom at imgtec.com
Thu Nov 16 11:58:26 UTC 2017


On Wednesday, 2017-11-15 17:10:59 -0800, Dylan Baker wrote:
> This patch checks for an and then enables sse4.1 optimizations if the
> host machine will be x86/x86_64.
> 
> Signed-off-by: Dylan Baker <dylanx.c.baker at intel.com>
> ---
>  meson.build          | 27 ++++++++++++++++++++++++++-
>  src/mesa/meson.build | 14 +++++++++++---
>  2 files changed, 37 insertions(+), 4 deletions(-)
> 
> diff --git a/meson.build b/meson.build
> index 1c4200705f3..0d201c711a0 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -502,7 +502,32 @@ foreach a : ['-Wno-override-init', '-Wno-initializer-overrides']
>    endif
>  endforeach
>  
> -# TODO: SSE41 (which is only required for core mesa)
> +with_sse41 = false
> +if host_machine.cpu_family().startswith('x86')
> +  sse41_args = ['-msse4.1']

Nit: newline here

Patches 1, 3 & 4 are:
Reviewed-by: Eric Engestrom <eric.engestrom at imgtec.com>

> +  # GCC on x86 (not 64) with -msse* assumes a 16 byte aligned stack, but that's
> +  # not guaranteed
> +  if host_machine.cpu_family() == 'x86'
> +    sse41_args += '-mstackrealign'
> +  endif
> +
> +  _code = '''
> +  #include <smmintrin.h>
> +  int param;
> +  int main () {
> +      __m128i a = _mm_set1_epi32 (param), b = _mm_set1_epi32 (param + 1), c;
> +      c = _mm_max_epu32(a, b);
> +      return _mm_cvtsi128_si32(c);
> +  }
> +  '''
> +
> +  if cc.compiles(_code, args : sse41_args, name : 'SSE4.1')
> +    pre_args += '-DHAVE_SSE41'
> +    with_sse41 = true
> +  endif
> +else
> +  sse41_args = []
> +endif
>  
>  # Check for GCC style atomics
>  if cc.compiles('int main() { int n; return __atomic_load_n(&n, __ATOMIC_ACQUIRE); }',
> diff --git a/src/mesa/meson.build b/src/mesa/meson.build
> index b839fd02981..05a3a9ac55d 100644
> --- a/src/mesa/meson.build
> +++ b/src/mesa/meson.build
> @@ -592,9 +592,6 @@ files_libmesa_gallium = files(
>    'state_tracker/st_vdpau.h',
>  )
>  
> -# TODO: sse41
> -libmesa_sse41 = []
> -
>  matypes_h = []
>  if with_asm_arch == 'x86' or with_asm_arch == 'x86_64'
>    gen_matypes = executable(
> @@ -692,6 +689,17 @@ files_libmesa_common += [
>    sha1_h,
>  ]
>  
> +if with_sse41
> +  libmesa_sse41 = static_library(
> +    'mesa_sse41',
> +    files('main/streaming-load-memcpy.c', 'main/sse_minmax.c'),
> +    c_args : [c_vis_args, c_msvc_compat_args, sse41_args],
> +    include_directories : inc_common,
> +  )
> +else
> +  libmesa_sse41 = []
> +endif
> +
>  libmesa_classic = static_library(
>    'mesa_classic',
>    [files_libmesa_common, files_libmesa_classic],
> -- 
> 2.15.0
> 


More information about the mesa-dev mailing list