[Mesa-dev] [PATCH 1/2] configure.ac: roll up a program for the sse4.1 check

Ilia Mirkin imirkin at alum.mit.edu
Sat Nov 15 10:13:37 PST 2014


On Sat, Nov 15, 2014 at 12:04 PM, Emil Velikov <emil.l.velikov at gmail.com> wrote:
> So when checking/building sse code we have three possibilities:
>  1 Old compiler, throws an error when using -msse*
>  2 New compiler, user disables sse* (-mno-sse*)
>  3 New compiler, user doesn't disable sse
>
> The original code, added code for #1 but not #2. Later on we patched
> around the lack of handling #2 by wrapping the code in __SSE4_1__.
> Yet it lead to a missing/undefined symbol in case of #1 or #2, which
> might cause an issue for #2 when using the i965 driver.
>
> A bit later we "fixed" the undefined symbol by using #1, rather than
> updating it to handle #2. With this commit we set things straight :)
>
> To top it all up, conventions state that in case of conflicting
> (-enable-foo -disable-foo) options, the latter one takes precedence.
> Thus we need to make sure to prepend -msse4.1 to CFLAGS in our test.
>
> Cc: Siavash Eliasi <siavashserver at gmail.com>
> Cc: Matt Turner <mattst88 at gmail.com>
> Signed-off-by: Emil Velikov <emil.l.velikov at gmail.com>
> ---
>
> Man this thing is _very_ messy.
> Matt from the last hunk it seems that pixman might need fixing. Should
> be bother with that, or let people have fun when they hit it :P
>
> -Emil
>
>  configure.ac | 14 +++++++++++++-
>  1 file changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/configure.ac b/configure.ac
> index 91e111b..9d1835e 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -252,7 +252,19 @@ AC_SUBST([VISIBILITY_CXXFLAGS])
>  dnl
>  dnl Optional flags, check for compiler support
>  dnl
> -AX_CHECK_COMPILE_FLAG([-msse4.1], [SSE41_SUPPORTED=1], [SSE41_SUPPORTED=0])
> +save_CFLAGS="$CFLAGS"
> +CFLAGS="-msse4.1 $CFLAGS"
> +AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
> +#include <mmintrin.h>
> +#include <xmmintrin.h>
> +#include <emmintrin.h>
> +#include <smmintrin.h>
> +int main () {
> +    __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
> +    c = _mm_max_epu32(a, b);
> +    return 0;

This seems complicated.

(a) Just #include <immintrin.h>
(b) Is any of this even necessary? how about

int main() { return !__SSE_4_1__; }

> +}]])], SSE41_SUPPORTED=1)
> +CFLAGS="$save_CFLAGS"
>  if test "x$SSE41_SUPPORTED" = x1; then
>      DEFINES="$DEFINES -DUSE_SSE41"
>  fi
> --
> 2.1.3
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list