*** src/backend/storage/lmgr/s_lock.c.orig Fri Jul 29 23:07:40 2005 --- src/backend/storage/lmgr/s_lock.c Thu Aug 25 13:14:27 2005 *************** *** 172,205 **** #endif /* __m68k__ */ - #if defined(__mips__) && !defined(__sgi) - static void - tas_dummy() - { - __asm__ __volatile__( - "\ - .global tas \n\ - tas: \n\ - .frame $sp, 0, $31 \n\ - .set push \n\ - .set mips2 \n\ - ll $14, 0($4) \n\ - or $15, $14, 1 \n\ - sc $15, 0($4) \n\ - .set pop \n\ - beq $15, 0, fail\n\ - bne $14, 0, fail\n\ - li $2, 0 \n\ - .livereg 0x2000FF0E,0x00000FFF \n\ - j $31 \n\ - fail: \n\ - li $2, 1 \n\ - j $31 \n\ - "); - } - #endif /* __mips__ && !__sgi */ - - #else /* not __GNUC__ */ /* --- 172,177 ---- *** src/include/storage/s_lock.h.orig Thu Mar 10 16:41:01 2005 --- src/include/storage/s_lock.h Thu Aug 25 13:14:21 2005 *************** *** 453,472 **** #endif /* __alpha || __alpha__ */ ! /* These live in s_lock.c, but only for gcc */ ! #if defined(__m68k__) ! #define HAS_TEST_AND_SET ! typedef unsigned char slock_t; ! #endif ! #if defined(__mips__) && !defined(__sgi) #define HAS_TEST_AND_SET ! typedef unsigned int slock_t; #endif --- 453,500 ---- #endif /* __alpha || __alpha__ */ ! #if defined(__mips__) && !defined(__sgi) ! /* Note: on SGI we use the OS' mutex ABI, see below */ ! #define HAS_TEST_AND_SET + typedef unsigned int slock_t; ! #define TAS(lock) tas(lock) ! static __inline__ int ! tas(volatile slock_t *lock) ! { ! register volatile slock_t *__l = lock; ! register int __r; ! ! __asm__ __volatile__( ! " .set push \n" ! " .set mips2 \n" ! " .set noreorder \n" ! " .set nomacro \n" ! "1: ll %0, %1 \n" ! " bne %0, $0, 1f \n" ! " xori %0, 1 \n" ! " sc %0, %1 \n" ! " beq %0, $0, 1b \n" ! " sync \n" ! "1: .set pop " ! : "=&r" (__r), "+R" (*__l) ! : ! : "memory", "cc"); ! return __r; ! } + #endif /* __mips__ && !__sgi */ ! ! /* These live in s_lock.c, but only for gcc */ ! ! ! #if defined(__m68k__) #define HAS_TEST_AND_SET ! typedef unsigned char slock_t; #endif