Bug 2971 GCCE fixes : "impossible constraint in 'asm'" fix ported over from CompilerCompatibility branch (see also Bug 1805) GCC_SURGE
authorandy simpson <andrews@symbian.org>
Tue, 15 Jun 2010 15:32:34 +0100
branchGCC_SURGE
changeset 35 f27f6b44bd0d
parent 32 2d6a1d6b6e59
child 36 6a60b9d459b4
Bug 2971 GCCE fixes : "impossible constraint in 'asm'" fix ported over from CompilerCompatibility branch (see also Bug 1805)
glib/glib/gatomic.c
--- a/glib/glib/gatomic.c	Fri Jun 11 16:28:56 2010 +0100
+++ b/glib/glib/gatomic.c	Tue Jun 15 15:32:34 2010 +0100
@@ -40,7 +40,44 @@
 
 
 #if defined (__GNUC__)
-# if defined (G_ATOMIC_I486)
+#define GCC_VERSION (__GNUC__ * 10000 \
+                               + __GNUC_MINOR__ * 100 \
+                               + __GNUC_PATCHLEVEL__)
+
+/* Test for GCC > 4.4.0 */
+# if (GCC_VERSION > 40400)
+
+EXPORT_C gint
+g_atomic_int_exchange_and_add (volatile gint *atomic,
+			       gint           val)
+{
+   return __sync_fetch_and_add(atomic, val);
+}
+
+EXPORT_C void
+g_atomic_int_add (volatile gint *atomic,
+		  gint           val)
+{
+   __sync_fetch_and_add(atomic, val);
+}
+
+EXPORT_C gboolean
+g_atomic_int_compare_and_exchange (volatile gint *atomic,
+				   gint           oldval,
+				   gint           newval)
+{
+  return __sync_val_compare_and_swap(atomic, oldval, newval);
+}
+
+EXPORT_C gboolean
+g_atomic_pointer_compare_and_exchange (volatile gpointer *atomic,
+				       gpointer           oldval,
+				       gpointer           newval)
+{
+  return __sync_val_compare_and_swap(atomic, oldval, newval);
+}
+
+#elif defined (G_ATOMIC_I486)
 /* Adapted from CVS version 1.10 of glibc's sysdeps/i386/i486/bits/atomic.h 
  */
 EXPORT_C gint