meson: Enable SSE4.1 optimizations
authorDylan Baker <dylan@pnwbakers.com>
Thu, 16 Nov 2017 00:09:22 +0000 (16:09 -0800)
committerDylan Baker <dylan@pnwbakers.com>
Wed, 22 Nov 2017 20:46:00 +0000 (12:46 -0800)
This patch checks for an and then enables sse4.1 optimizations if the
host machine will be x86/x86_64.

v2: - Don't compile code, it's unnecessary since we require a compiler
      which always has SSE4.1 (Matt)
v3: - x64 -> x86_64 (Matt)

Signed-off-by: Dylan Baker <dylanx.c.baker@intel.com>
Reviewed-by: Eric Engestrom <eric.engestrom@imgtec.com>
meson.build
src/mesa/meson.build

index 383ebb366625edf9f26256db160a7eab35fdb3af..049c9a24e4aa30752d7ee0afe7c240e05183b60d 100644 (file)
@@ -502,7 +502,20 @@ foreach a : ['-Wno-override-init', '-Wno-initializer-overrides']
   endif
 endforeach
 
-# TODO: SSE41 (which is only required for core mesa)
+if host_machine.cpu_family().startswith('x86')
+  pre_args += '-DHAVE_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'
+  endif
+else
+  with_sse41 = false
+  sse41_args = []
+endif
 
 # Check for GCC style atomics
 if cc.compiles('int main() { int n; return __atomic_load_n(&n, __ATOMIC_ACQUIRE); }',
index b839fd0298189263d6322b394801f6d59477ff92..05a3a9ac55ddd8b068d54020dfc02000b68285c4 100644 (file)
@@ -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],