diff -Nurd -x'*~' glib-2.14.3.orig/configure.in glib-2.14.3/configure.in
--- glib-2.14.3.orig/configure.in	2007-11-07 00:12:00.000000000 -0500
+++ glib-2.14.3/configure.in	2007-11-07 23:29:44.000000000 -0500
@@ -2085,6 +2085,17 @@
       AC_DEFINE_UNQUOTED(G_ATOMIC_POWERPC, 1,
 		   	 [powerpc atomic implementation])
       glib_memory_barrier_needed=yes
+      AC_MSG_CHECKING([whether asm supports numbered local labels])
+      AC_TRY_COMPILE(
+		,[ 
+			__asm__ __volatile__ ("1:       nop\n"
+					      "         bne-    1b")
+		],[
+			AC_DEFINE_UNQUOTED(ASM_NUMERIC_LABELS, 1, [define if asm blocks can use numeric local labels])
+			AC_MSG_RESULT([yes])
+		],[
+			AC_MSG_RESULT([no])
+		])
       ;;	
     ia64)
       AC_MSG_RESULT([ia64])
diff -Nurd -x'*~' glib-2.14.3.orig/glib/gatomic.c glib-2.14.3/glib/gatomic.c
--- glib-2.14.3.orig/glib/gatomic.c	2007-11-07 00:11:58.000000000 -0500
+++ glib-2.14.3/glib/gatomic.c	2007-11-07 23:23:30.000000000 -0500
@@ -281,6 +281,15 @@
 			       gint           val)
 {
   gint result, temp;
+#if ASM_NUMERIC_LABELS
+  __asm__ __volatile__ ("1:       lwarx   %0,0,%3\n"
+			"         add     %1,%0,%4\n"
+			"         stwcx.  %1,0,%3\n"
+			"         bne-    1b"
+			: "=&b" (result), "=&r" (temp), "=m" (*atomic)
+			: "b" (atomic), "r" (val), "m" (*atomic)
+			: "cr0", "memory");
+#else
   __asm__ __volatile__ (".Lieaa%=:       lwarx   %0,0,%3\n"
 			"         add     %1,%0,%4\n"
 			"         stwcx.  %1,0,%3\n"
@@ -288,6 +297,7 @@
 			: "=&b" (result), "=&r" (temp), "=m" (*atomic)
 			: "b" (atomic), "r" (val), "m" (*atomic)
 			: "cr0", "memory");
+#endif
   return result;
 }
  
@@ -297,6 +307,15 @@
 		  gint           val)
 {
   gint result, temp;  
+#if ASM_NUMERIC_LABELS
+  __asm__ __volatile__ ("1:       lwarx   %0,0,%3\n"
+			"         add     %1,%0,%4\n"
+			"         stwcx.  %1,0,%3\n"
+			"         bne-    1b"
+			: "=&b" (result), "=&r" (temp), "=m" (*atomic)
+			: "b" (atomic), "r" (val), "m" (*atomic)
+			: "cr0", "memory");
+#else
   __asm__ __volatile__ (".Lia%=:       lwarx   %0,0,%3\n"
 			"         add     %1,%0,%4\n"
 			"         stwcx.  %1,0,%3\n"
@@ -304,6 +323,7 @@
 			: "=&b" (result), "=&r" (temp), "=m" (*atomic)
 			: "b" (atomic), "r" (val), "m" (*atomic)
 			: "cr0", "memory");
+#endif
 }
 #   else /* !__OPTIMIZE__ */
 gint
@@ -336,6 +356,18 @@
 				   gint           newval)
 {
   gint result;
+#if ASM_NUMERIC_LABELS
+  __asm__ __volatile__ ("sync\n"
+			"1: lwarx   %0,0,%1\n"
+			"   subf.   %0,%2,%0\n"
+			"   bne     2f\n"
+			"   stwcx.  %3,0,%1\n"
+			"   bne-    1b\n"
+			"2: isync"
+			: "=&r" (result)
+			: "b" (atomic), "r" (oldval), "r" (newval)
+			: "cr0", "memory"); 
+#else
   __asm__ __volatile__ ("sync\n"
 			".L1icae%=: lwarx   %0,0,%1\n"
 			"   subf.   %0,%2,%0\n"
@@ -346,6 +378,7 @@
 			: "=&r" (result)
 			: "b" (atomic), "r" (oldval), "r" (newval)
 			: "cr0", "memory"); 
+#endif
   return result == 0;
 }
 
@@ -355,6 +388,18 @@
 				       gpointer           newval)
 {
   gpointer result;
+#if ASM_NUMERIC_LABELS
+  __asm__ __volatile__ ("sync\n"
+			"1: lwarx   %0,0,%1\n"
+			"   subf.   %0,%2,%0\n"
+			"   bne     2f\n"
+			"   stwcx.  %3,0,%1\n"
+			"   bne-    1b\n"
+			"2: isync"
+			: "=&r" (result)
+			: "b" (atomic), "r" (oldval), "r" (newval)
+			: "cr0", "memory"); 
+#else
   __asm__ __volatile__ ("sync\n"
 			".L1pcae%=: lwarx   %0,0,%1\n"
 			"   subf.   %0,%2,%0\n"
@@ -365,6 +410,7 @@
 			: "=&r" (result)
 			: "b" (atomic), "r" (oldval), "r" (newval)
 			: "cr0", "memory"); 
+#endif
   return result == 0;
 }
 #   elif GLIB_SIZEOF_VOID_P == 8 /* 64-bit system */
@@ -374,6 +420,19 @@
 				   gint           newval)
 {
   gpointer result;
+#if ASM_NUMERIC_LABELS
+  __asm__ __volatile__ ("sync\n"
+			"1: lwarx   %0,0,%1\n"
+			"   extsw   %0,%0\n"
+			"   subf.   %0,%2,%0\n"
+			"   bne     2f\n"
+			"   stwcx.  %3,0,%1\n"
+			"   bne-    1b\n"
+			"2: isync"
+			: "=&r" (result)
+			: "b" (atomic), "r" (oldval), "r" (newval)
+			: "cr0", "memory"); 
+#else
   __asm__ __volatile__ ("sync\n"
 			".L1icae%=: lwarx   %0,0,%1\n"
 			"   extsw   %0,%0\n"
@@ -385,6 +444,7 @@
 			: "=&r" (result)
 			: "b" (atomic), "r" (oldval), "r" (newval)
 			: "cr0", "memory"); 
+#endif
   return result == 0;
 }
 
@@ -394,6 +454,18 @@
 				       gpointer           newval)
 {
   gpointer result;
+#if ASM_NUMERIC_LABELS
+  __asm__ __volatile__ ("sync\n"
+			"1: ldarx   %0,0,%1\n"
+			"   subf.   %0,%2,%0\n"
+			"   bne     2f\n"
+			"   stdcx.  %3,0,%1\n"
+			"   bne-    1b\n"
+			"2: isync"
+			: "=&r" (result)
+			: "b" (atomic), "r" (oldval), "r" (newval)
+			: "cr0", "memory"); 
+#else
   __asm__ __volatile__ ("sync\n"
 			".L1pcae%=: ldarx   %0,0,%1\n"
 			"   subf.   %0,%2,%0\n"
@@ -404,6 +476,7 @@
 			: "=&r" (result)
 			: "b" (atomic), "r" (oldval), "r" (newval)
 			: "cr0", "memory"); 
+#endif
   return result == 0;
 }
 #  else /* What's that */
