X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=includes%2FSMP.h;h=bba80f78cf2a2375b1fed3dbe1978eb36dc1a853;hb=911b42b27ad5f039465d14052460e2d9dde053ab;hp=04e4d1326b3885aec638716c00a4bf3724cc9f69;hpb=59c03ecb7fa69bf13647f0106e50748e90711176;p=ghc-hetmet.git diff --git a/includes/SMP.h b/includes/SMP.h index 04e4d13..bba80f7 100644 --- a/includes/SMP.h +++ b/includes/SMP.h @@ -103,7 +103,7 @@ cas(StgVolatilePtr p, StgWord o, StgWord n) { #if i386_HOST_ARCH || x86_64_HOST_ARCH __asm__ __volatile__ ( - "lock/cmpxchg %3,%1" + "lock\ncmpxchg %3,%1" :"=a"(o), "=m" (*(volatile unsigned int *)p) :"0" (o), "r" (n)); return o; @@ -233,7 +233,7 @@ typedef lnat StgSyncCount; // spin locks to check for contention. // acquire spin lock -INLINE_HEADER void acquireSpinLock(StgSync * p) +INLINE_HEADER void ACQUIRE_SPIN_LOCK(StgSync * p) { StgWord32 r = 0; do { @@ -244,7 +244,7 @@ INLINE_HEADER void acquireSpinLock(StgSync * p) } // release spin lock -INLINE_HEADER void releaseSpinLock(StgSync * p) +INLINE_HEADER void RELEASE_SPIN_LOCK(StgSync * p) { write_barrier(); p->lock = 1; @@ -261,7 +261,7 @@ INLINE_HEADER void initSpinLock(StgSync * p) #else // acquire spin lock -INLINE_HEADER void acquireSpinLock(StgSync * p) +INLINE_HEADER void ACQUIRE_SPIN_LOCK(StgSync * p) { StgWord32 r = 0; do { @@ -270,7 +270,7 @@ INLINE_HEADER void acquireSpinLock(StgSync * p) } // release spin lock -INLINE_HEADER void releaseSpinLock(StgSync * p) +INLINE_HEADER void RELEASE_SPIN_LOCK(StgSync * p) { write_barrier(); (*p) = 1; @@ -306,11 +306,9 @@ INLINE_HEADER void unlockClosure(StgClosure *p STG_UNUSED, StgInfoTable *info STG_UNUSED) { /* nothing */ } -INLINE_HEADER void acquireSpinLock(void * p STG_UNUSED) -{ /* nothing */ } - -INLINE_HEADER void releaseSpinLock(void * p STG_UNUSED) -{ /* nothing */ } +// Using macros here means we don't have to ensure the argument is in scope +#define ACQUIRE_SPIN_LOCK(p) /* nothing */ +#define RELEASE_SPIN_LOCK(p) /* nothing */ INLINE_HEADER void initSpinLock(void * p STG_UNUSED) { /* nothing */ }