Index: nspr/pr/include/md/_linux.h |
diff --git a/nspr/pr/include/md/_linux.h b/nspr/pr/include/md/_linux.h |
index 906822fb8416ddc63911c4e4b0bff37448b7dd9c..278f90cd6c9e3c9d6a6541434f3116da09fa1538 100644 |
--- a/nspr/pr/include/md/_linux.h |
+++ b/nspr/pr/include/md/_linux.h |
@@ -80,7 +80,7 @@ |
#define NO_DLOPEN_NULL |
#endif |
-#ifdef __FreeBSD_kernel__ |
+#if defined(__FreeBSD_kernel__) || defined(__GNU__) |
#define _PR_HAVE_SOCKADDR_LEN |
#endif |
@@ -136,6 +136,18 @@ extern PRInt32 _PR_ppc_AtomicSet(PRInt32 *val, PRInt32 newval); |
#define _MD_ATOMIC_SET _PR_ppc_AtomicSet |
#endif |
+#if defined(__powerpc64__) |
+#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) |
+/* Use GCC built-in functions */ |
+#define _PR_HAVE_ATOMIC_OPS |
+#define _MD_INIT_ATOMIC() |
+#define _MD_ATOMIC_INCREMENT(ptr) __sync_add_and_fetch(ptr, 1) |
+#define _MD_ATOMIC_DECREMENT(ptr) __sync_sub_and_fetch(ptr, 1) |
+#define _MD_ATOMIC_ADD(ptr, i) __sync_add_and_fetch(ptr, i) |
+#define _MD_ATOMIC_SET(ptr, nv) __sync_lock_test_and_set(ptr, nv) |
+#endif |
+#endif |
+ |
#if defined(__alpha) |
#define _PR_HAVE_ATOMIC_OPS |
#define _MD_INIT_ATOMIC() |