[Liboil-commit] 2 commits - liboil/i386_amd64 m4/as-intrinsics.m4

David Schleef ds at kemper.freedesktop.org
Mon May 12 17:09:53 PDT 2008


 liboil/i386_amd64/convert.c |    3 +++
 m4/as-intrinsics.m4         |   24 +++++++++++++++++++++---
 2 files changed, 24 insertions(+), 3 deletions(-)

New commits:
commit e1c2b6e84c82615200172d627d9e0214def3f141
Author: David Schleef <ds at ginger.bigkitten.com>
Date:   Mon May 12 17:08:50 2008 -0700

    Check for gcc-4.2 for intrinsics, since we need gcc to realign the
    stack when higher-level libraries (this means you, mozilla) unalign
    it.  Fixes #11145.

diff --git a/m4/as-intrinsics.m4 b/m4/as-intrinsics.m4
index 9fb5829..4781ebd 100644
--- a/m4/as-intrinsics.m4
+++ b/m4/as-intrinsics.m4
@@ -43,7 +43,13 @@ AC_DEFUN([AS_SSE_INTRINSICS],
 
   save_CFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS -msse"
-  AC_TRY_COMPILE([#include <xmmintrin.h>], [__m128 a; a = _mm_or_ps(a,a)], [flag_ok=yes], [flag_ok=no])
+  AC_TRY_COMPILE([#include <xmmintrin.h>], [
+#ifdef __GNUC_MINOR__
+#if (__GNUC__ * 1000 + __GNUC_MINOR__) < 4002
+#error GCC before 4.2 has critical bugs compiling SSE intrinsics
+#endif
+#endif
+__m128 a; a = _mm_or_ps(a,a)], [flag_ok=yes], [flag_ok=no])
   CFLAGS="$save_CFLAGS"
 
   $1="-msse"
@@ -69,7 +75,13 @@ AC_DEFUN([AS_SSE2_INTRINSICS],
 
   save_CFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS -msse2"
-  AC_TRY_COMPILE([#include <emmintrin.h>], [__m128i a; a = _mm_setzero_si128(); a = _mm_srli_epi16(a,8)], [flag_ok=yes], [flag_ok=no])
+  AC_TRY_COMPILE([#include <emmintrin.h>], [
+#ifdef __GNUC_MINOR__
+#if (__GNUC__ * 1000 + __GNUC_MINOR__) < 4002
+#error GCC before 4.2 has critical bugs compiling SSE2 intrinsics
+#endif
+#endif
+__m128i a; a = _mm_setzero_si128(); a = _mm_srli_epi16(a,8)], [flag_ok=yes], [flag_ok=no])
   CFLAGS="$save_CFLAGS"
 
   $1="-msse2"
@@ -95,7 +107,13 @@ AC_DEFUN([AS_SSE3_INTRINSICS],
 
   save_CFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS -msse3"
-  AC_TRY_COMPILE([#include <pmmintrin.h>], [__m128 a; a = _mm_addsub_ps(a,a)], [flag_ok=yes], [flag_ok=no])
+  AC_TRY_COMPILE([#include <pmmintrin.h>], [
+#ifdef __GNUC_MINOR__
+#if (__GNUC__ * 1000 + __GNUC_MINOR__) < 4002
+#error GCC before 4.2 has critical bugs compiling SSE2 intrinsics
+#endif
+#endif
+__m128 a; a = _mm_addsub_ps(a,a)], [flag_ok=yes], [flag_ok=no])
   CFLAGS="$save_CFLAGS"
 
   $1="-msse3"
commit ec0d0c9de2064953a57c076751741945b0dff87c
Author: David Schleef <ds at ginger.bigkitten.com>
Date:   Mon May 12 17:08:17 2008 -0700

    Fix problems noticed by test suite

diff --git a/liboil/i386_amd64/convert.c b/liboil/i386_amd64/convert.c
index cf8e126..68cf928 100644
--- a/liboil/i386_amd64/convert.c
+++ b/liboil/i386_amd64/convert.c
@@ -44,6 +44,7 @@ convert_u8_s16_mmx (uint8_t * dest, const int16_t * src, int n)
     dest++;
     n--;
   }
+  if (n==0) return;
 
   n>>=3;
   __asm__ __volatile__ ("\n"
@@ -115,8 +116,10 @@ convert_s16_u8_mmx (int16_t * dest, const uint8_t * src, int n)
     dest++;
     n--;
   }
+  if (n==0) return;
 
   n>>=3;
+
   __asm__ __volatile__ ("\n"
       "  pxor %%mm0, %%mm0\n"
       "1:\n"


More information about the Liboil-commit mailing list