diff --git a/src/include/port/bsd.h b/src/include/port/bsd.h index cfd0d2811bdc78b4796461ae090e0390411e5954..f24f4f83b57dc5601cd41cb00687c809706867ca 100644 --- a/src/include/port/bsd.h +++ b/src/include/port/bsd.h @@ -24,6 +24,10 @@ #define HAS_TEST_AND_SET #endif +#if defined(__arm32__) +#define HAS_TEST_AND_SET +#endif + #if defined(__powerpc__) #define HAS_TEST_AND_SET typedef unsigned int slock_t; diff --git a/src/include/storage/s_lock.h b/src/include/storage/s_lock.h index 3863b55a62d22a528b9d806b9d584bd713bc475c..9aef29bffce448a67963753e3f364bf44497683c 100644 --- a/src/include/storage/s_lock.h +++ b/src/include/storage/s_lock.h @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/include/storage/s_lock.h,v 1.58 1999/02/13 23:22:09 momjian Exp $ + * $Header: /cvsroot/pgsql/src/include/storage/s_lock.h,v 1.59 1999/04/13 17:42:26 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -124,6 +124,22 @@ __asm__("lock; xchgb %0,%1": "=q"(_res), "=m"(*lock):"0"(_res)); +#if defined(__arm32__) +#define TAS(lock) tas(lock) + +static __inline__ int +tas(volatile slock_t *lock) +{ + register slock_t _res = 1; + +__asm__("swpb %0, %0, [%3]": "=r"(_res), "=m"(*lock):"0"(_res), "r" (lock)); + return (int) _res; +} + +#endif /* __arm32__ */ + + + #if defined(sparc) #define TAS(lock) tas(lock)