--- db-4.0.14/include/mutex.h.orig Fri Oct 25 22:22:12 2002 +++ db-4.0.14/include/mutex.h Fri Oct 25 22:25:10 2002 @@ -483,6 +483,32 @@ * 'set' mutexes have the value 1, like on Intel; the returned value from * MUTEX_SET() is 1 if the mutex previously had its low bit clear, 0 otherwise. */ + +#if defined(__APPLE__) && defined(__MACH__) && defined(__ppc__) +#warning "Using apple specific mutexes" +extern int __db_mutex_set __P((volatile tsl_t *)); +void +__db_mutex_tas_dummy() +{ + __asm__ __volatile__(" \n\ + .globl ___db_mutex_set \n\ +___db_mutex_set: \n\ + lwarx r5,0,r3 \n\ + cmpwi r5,0 \n\ + bne fail \n\ + addi r5,r5,1 \n\ + stwcx. r5,0,r3 \n\ + beq success \n\ +fail: \n\ + li r3,0 \n\ + blr \n\ +success: \n\ + li r3,1 \n\ + blr"); +} +#define MUTEX_SET(tsl) __db_mutex_set(tsl) +#else + #define MUTEX_SET(tsl) ({ \ int __one = 1; \ int __r; \ @@ -499,7 +525,7 @@ : "r" (__l), "r" (__one)); \ !(__r & 1); \ }) - +#endif #define MUTEX_UNSET(tsl) (*(tsl) = 0) #define MUTEX_INIT(tsl) MUTEX_UNSET(tsl) #endif