Separated out the minimum functionality that we need from gcc for our spinlock fallback.
authorSam Lantinga <slouken@libsdl.org>
Fri, 21 Jan 2011 21:42:04 -0800
changeset 5069 fd125217f00c
parent 5068 231dbbc3e31c
child 5070 042ad5e274ed
Separated out the minimum functionality that we need from gcc for our spinlock fallback.
configure.in
include/SDL_config.h.in
src/atomic/SDL_spinlock.c
--- a/configure.in	Fri Jan 21 21:35:43 2011 -0800
+++ b/configure.in	Fri Jan 21 21:42:04 2011 -0800
@@ -312,6 +312,18 @@
     if test x$have_gcc_atomics = xyes; then
         AC_DEFINE(HAVE_GCC_ATOMICS)
     fi
+
+    # See if we have the minimum operation needed for GCC atomics
+    AC_TRY_LINK([
+    ],[
+    int a;
+    __sync_lock_test_and_set(&a, 1);
+    ],[
+    have_gcc_sync_lock_test_and_set=yes
+    ])
+    if test x$have_gcc_sync_lock_test_and_set = xyes; then
+        AC_DEFINE(HAVE_GCC_SYNC_LOCK_TEST_AND_SET)
+    fi
 fi
 
 # Standard C sources
--- a/include/SDL_config.h.in	Fri Jan 21 21:35:43 2011 -0800
+++ b/include/SDL_config.h.in	Fri Jan 21 21:42:04 2011 -0800
@@ -59,6 +59,7 @@
 #undef SIZEOF_VOIDP
 #undef SDL_HAS_64BIT_TYPE
 #undef HAVE_GCC_ATOMICS
+#undef HAVE_GCC_SYNC_LOCK_TEST_AND_SET
 
 /* Comment this if you want to build without any C library requirements */
 #undef HAVE_LIBC
--- a/src/atomic/SDL_spinlock.c	Fri Jan 21 21:35:43 2011 -0800
+++ b/src/atomic/SDL_spinlock.c	Fri Jan 21 21:42:04 2011 -0800
@@ -36,7 +36,7 @@
 #elif defined(__MACOSX__)
     return OSAtomicCompareAndSwap32Barrier(0, 1, lock);
 
-#elif defined(HAVE_GCC_ATOMICS)
+#elif defined(HAVE_GCC_SYNC_LOCK_TEST_AND_SET)
     return (__sync_lock_test_and_set(lock, 1) == 0);
 
 #elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH_5__)