From 89242d758b16aedda2b1c445afdf7e6b04fbad02 Mon Sep 17 00:00:00 2001 From: Manish Singh Date: Fri, 12 Mar 2004 23:22:46 +0000 Subject: [PATCH] Non-optimizing compile fails for two asm statements on PowerPC. Use Fri Mar 12 15:21:22 2004 Manish Singh * glib/gatomic.c: Non-optimizing compile fails for two asm statements on PowerPC. Use generic implementaton for those cases. Spotted by Christof Petig , fix by Sebastian Wilhelmi. Bug #137006 has a possible alternate solution, but we'll be conservative for now. --- ChangeLog | 8 ++++++++ ChangeLog.pre-2-10 | 8 ++++++++ ChangeLog.pre-2-12 | 8 ++++++++ ChangeLog.pre-2-4 | 8 ++++++++ ChangeLog.pre-2-6 | 8 ++++++++ ChangeLog.pre-2-8 | 8 ++++++++ glib/gatomic.c | 26 ++++++++++++++++++++++++++ 7 files changed, 74 insertions(+) diff --git a/ChangeLog b/ChangeLog index 7cb363c2..23d89649 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +Fri Mar 12 15:21:22 2004 Manish Singh + + * glib/gatomic.c: Non-optimizing compile fails for two asm + statements on PowerPC. Use generic implementaton for those + cases. Spotted by Christof Petig , + 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 * glib/gmain.c (g_main_depth): Remove an extra semicolon. diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 7cb363c2..23d89649 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,11 @@ +Fri Mar 12 15:21:22 2004 Manish Singh + + * glib/gatomic.c: Non-optimizing compile fails for two asm + statements on PowerPC. Use generic implementaton for those + cases. Spotted by Christof Petig , + 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 * glib/gmain.c (g_main_depth): Remove an extra semicolon. diff --git a/ChangeLog.pre-2-12 b/ChangeLog.pre-2-12 index 7cb363c2..23d89649 100644 --- a/ChangeLog.pre-2-12 +++ b/ChangeLog.pre-2-12 @@ -1,3 +1,11 @@ +Fri Mar 12 15:21:22 2004 Manish Singh + + * glib/gatomic.c: Non-optimizing compile fails for two asm + statements on PowerPC. Use generic implementaton for those + cases. Spotted by Christof Petig , + 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 * glib/gmain.c (g_main_depth): Remove an extra semicolon. diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 7cb363c2..23d89649 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,11 @@ +Fri Mar 12 15:21:22 2004 Manish Singh + + * glib/gatomic.c: Non-optimizing compile fails for two asm + statements on PowerPC. Use generic implementaton for those + cases. Spotted by Christof Petig , + 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 * glib/gmain.c (g_main_depth): Remove an extra semicolon. diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 7cb363c2..23d89649 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,11 @@ +Fri Mar 12 15:21:22 2004 Manish Singh + + * glib/gatomic.c: Non-optimizing compile fails for two asm + statements on PowerPC. Use generic implementaton for those + cases. Spotted by Christof Petig , + 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 * glib/gmain.c (g_main_depth): Remove an extra semicolon. diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 7cb363c2..23d89649 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,11 @@ +Fri Mar 12 15:21:22 2004 Manish Singh + + * glib/gatomic.c: Non-optimizing compile fails for two asm + statements on PowerPC. Use generic implementaton for those + cases. Spotted by Christof Petig , + 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 * glib/gmain.c (g_main_depth): Remove an extra semicolon. diff --git a/glib/gatomic.c b/glib/gatomic.c index 65ad743e..e81e5d09 100644 --- a/glib/gatomic.c +++ b/glib/gatomic.c @@ -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 -- 2.34.1