Non-optimizing compile fails for two asm statements on PowerPC. Use
authorManish Singh <yosh@gimp.org>
Fri, 12 Mar 2004 23:22:46 +0000 (23:22 +0000)
committerManish Singh <yosh@src.gnome.org>
Fri, 12 Mar 2004 23:22:46 +0000 (23:22 +0000)
Fri Mar 12 15:21:22 2004  Manish Singh  <yosh@gimp.org>

        * glib/gatomic.c: Non-optimizing compile fails for two asm
        statements on PowerPC. Use generic implementaton for those
        cases. Spotted by Christof Petig <christof@petig-baender.de>,
        fix by Sebastian Wilhelmi. Bug #137006 has a possible alternate
solution, but we'll be conservative for now.

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-12
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
glib/gatomic.c

index 7cb363c..23d8964 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Fri Mar 12 15:21:22 2004  Manish Singh  <yosh@gimp.org>
+
+       * glib/gatomic.c: Non-optimizing compile fails for two asm
+       statements on PowerPC. Use generic implementaton for those
+       cases. Spotted by Christof Petig <christof@petig-baender.de>,
+       fix by Sebastian Wilhelmi. Bug #137006 has a possible alternate
+       solution, but we'll be conservative for now.
+
 Thu Mar 11 02:05:13 2004  Matthias Clasen  <maclas@gmx.de>
 
        * glib/gmain.c (g_main_depth): Remove an extra semicolon.
index 7cb363c..23d8964 100644 (file)
@@ -1,3 +1,11 @@
+Fri Mar 12 15:21:22 2004  Manish Singh  <yosh@gimp.org>
+
+       * glib/gatomic.c: Non-optimizing compile fails for two asm
+       statements on PowerPC. Use generic implementaton for those
+       cases. Spotted by Christof Petig <christof@petig-baender.de>,
+       fix by Sebastian Wilhelmi. Bug #137006 has a possible alternate
+       solution, but we'll be conservative for now.
+
 Thu Mar 11 02:05:13 2004  Matthias Clasen  <maclas@gmx.de>
 
        * glib/gmain.c (g_main_depth): Remove an extra semicolon.
index 7cb363c..23d8964 100644 (file)
@@ -1,3 +1,11 @@
+Fri Mar 12 15:21:22 2004  Manish Singh  <yosh@gimp.org>
+
+       * glib/gatomic.c: Non-optimizing compile fails for two asm
+       statements on PowerPC. Use generic implementaton for those
+       cases. Spotted by Christof Petig <christof@petig-baender.de>,
+       fix by Sebastian Wilhelmi. Bug #137006 has a possible alternate
+       solution, but we'll be conservative for now.
+
 Thu Mar 11 02:05:13 2004  Matthias Clasen  <maclas@gmx.de>
 
        * glib/gmain.c (g_main_depth): Remove an extra semicolon.
index 7cb363c..23d8964 100644 (file)
@@ -1,3 +1,11 @@
+Fri Mar 12 15:21:22 2004  Manish Singh  <yosh@gimp.org>
+
+       * glib/gatomic.c: Non-optimizing compile fails for two asm
+       statements on PowerPC. Use generic implementaton for those
+       cases. Spotted by Christof Petig <christof@petig-baender.de>,
+       fix by Sebastian Wilhelmi. Bug #137006 has a possible alternate
+       solution, but we'll be conservative for now.
+
 Thu Mar 11 02:05:13 2004  Matthias Clasen  <maclas@gmx.de>
 
        * glib/gmain.c (g_main_depth): Remove an extra semicolon.
index 7cb363c..23d8964 100644 (file)
@@ -1,3 +1,11 @@
+Fri Mar 12 15:21:22 2004  Manish Singh  <yosh@gimp.org>
+
+       * glib/gatomic.c: Non-optimizing compile fails for two asm
+       statements on PowerPC. Use generic implementaton for those
+       cases. Spotted by Christof Petig <christof@petig-baender.de>,
+       fix by Sebastian Wilhelmi. Bug #137006 has a possible alternate
+       solution, but we'll be conservative for now.
+
 Thu Mar 11 02:05:13 2004  Matthias Clasen  <maclas@gmx.de>
 
        * glib/gmain.c (g_main_depth): Remove an extra semicolon.
index 7cb363c..23d8964 100644 (file)
@@ -1,3 +1,11 @@
+Fri Mar 12 15:21:22 2004  Manish Singh  <yosh@gimp.org>
+
+       * glib/gatomic.c: Non-optimizing compile fails for two asm
+       statements on PowerPC. Use generic implementaton for those
+       cases. Spotted by Christof Petig <christof@petig-baender.de>,
+       fix by Sebastian Wilhelmi. Bug #137006 has a possible alternate
+       solution, but we'll be conservative for now.
+
 Thu Mar 11 02:05:13 2004  Matthias Clasen  <maclas@gmx.de>
 
        * glib/gmain.c (g_main_depth): Remove an extra semicolon.
index 65ad743..e81e5d0 100644 (file)
@@ -266,6 +266,9 @@ g_atomic_pointer_compare_and_exchange (gpointer *atomic,
  * and CVS version 1.3 of glibc's sysdeps/powerpc/powerpc32/bits/atomic.h 
  * and CVS version 1.2 of glibc's sysdeps/powerpc/powerpc64/bits/atomic.h 
  */
+#   ifdef __OPTIMIZE__
+/* Non-optimizing compile bails on the following two asm statements
+ * for reasons unknown to the author */
 gint
 g_atomic_int_exchange_and_add (gint *atomic, 
                               gint val)
@@ -295,6 +298,29 @@ g_atomic_int_add (gint *atomic,
                    : "b" (atomic), "r" (val), "2" (*atomic)
                    : "cr0", "memory");
 }
+#   else /* !__OPTIMIZE__ */
+gint
+g_atomic_int_exchange_and_add (gint *atomic, 
+                              gint val)
+{
+  gint result;
+  do
+    result = *atomic;
+  while (!g_atomic_int_compare_and_exchange (atomic, result, result + val));
+
+  return result;
+}
+void
+g_atomic_int_add (gint *atomic, 
+                 gint val)
+{
+  gint result;
+  do
+    result = *atomic;
+  while (!g_atomic_int_compare_and_exchange (atomic, result, result + val));
+}
+#   endif /* !__OPTIMIZE__ */
 
 #   if GLIB_SIZEOF_VOID_P == 4 /* 32-bit system */
 gboolean