diff options
author | nwhitehorn <nwhitehorn@FreeBSD.org> | 2012-04-22 20:23:34 +0000 |
---|---|---|
committer | nwhitehorn <nwhitehorn@FreeBSD.org> | 2012-04-22 20:23:34 +0000 |
commit | 9735a829855418c1921d6e55aef20eae4cb177be (patch) | |
tree | a2ae4302a317e779962b2fd88bbdc09f8e6c195b /sys/powerpc | |
parent | 086dac3dc0518572e2b498bf25768f4457eba105 (diff) | |
download | FreeBSD-src-9735a829855418c1921d6e55aef20eae4cb177be.zip FreeBSD-src-9735a829855418c1921d6e55aef20eae4cb177be.tar.gz |
On non-64-bit systems (which generally don't have lwsync), use eieio and
isync to implement read and write barriers, following Appendix B.2 of
Book II of the architecture manual. This provides a 25% speed increase
to fork() on the PowerPC G4.
Diffstat (limited to 'sys/powerpc')
-rw-r--r-- | sys/powerpc/include/atomic.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/sys/powerpc/include/atomic.h b/sys/powerpc/include/atomic.h index 9a77dc2..5ff64fb 100644 --- a/sys/powerpc/include/atomic.h +++ b/sys/powerpc/include/atomic.h @@ -38,8 +38,13 @@ /* NOTE: lwsync is equivalent to sync on systems without lwsync */ #define mb() __asm __volatile("lwsync" : : : "memory") +#ifdef __powerpc64__ #define wmb() __asm __volatile("lwsync" : : : "memory") #define rmb() __asm __volatile("lwsync" : : : "memory") +#else +#define wmb() __asm __volatile("eieio" : : : "memory") +#define rmb() __asm __volatile("isync" : : : "memory") +#endif /* * atomic_add(p, v) |