static inline int SHORTLOCK(struct sShortSpinlock *Lock)
{
+ #if 0
+ while( __sync_lock_test_and_set( &Lock->Lock, 1 ) == 1 );
+ #elif 0
+ while( Lock->Lock ) ;
+ Lock->Lock = 1;
+ #elif 1
+ int v = 1;
+ while( v )
+ {
+ __asm__ __volatile__ ("swp [%0], %1" : "=r" (v) : "r" (&lock));
+ }
+ #elif 0
// Shamelessly copied from linux (/arch/arm/include/asm/spinlock.h) until I can fix stuff
Uint tmp;
__asm__ __volatile__ (
: "r" (&Lock->Lock), "r" (1)
: "cc" // Condition codes clobbered
);
+ #endif
return 1;
}