Commit 5c7603c3 authored by Tom Lane's avatar Tom Lane

Add ARM64 (aarch64) support to s_lock.h.

Use the same gcc atomic functions as we do on newer ARM chips.
(Basically this is a copy and paste of the __arm__ code block,
but omitting the SWPB option since that definitely won't work.)

Back-patch to 9.2.  The patch would work further back, but we'd also
need to update config.guess/config.sub in older branches to make them
build out-of-the-box, and there hasn't been demand for it.

Mark Salter
parent dbc6eb1f
...@@ -336,6 +336,29 @@ tas(volatile slock_t *lock) ...@@ -336,6 +336,29 @@ tas(volatile slock_t *lock)
#endif /* __arm__ */ #endif /* __arm__ */
/*
* On ARM64, we use __sync_lock_test_and_set(int *, int) if available.
*/
#if defined(__aarch64__) || defined(__aarch64)
#ifdef HAVE_GCC_INT_ATOMICS
#define HAS_TEST_AND_SET
#define TAS(lock) tas(lock)
typedef int slock_t;
static __inline__ int
tas(volatile slock_t *lock)
{
return __sync_lock_test_and_set(lock, 1);
}
#define S_UNLOCK(lock) __sync_lock_release(lock)
#endif /* HAVE_GCC_INT_ATOMICS */
#endif /* __aarch64__ */
/* S/390 and S/390x Linux (32- and 64-bit zSeries) */ /* S/390 and S/390x Linux (32- and 64-bit zSeries) */
#if defined(__s390__) || defined(__s390x__) #if defined(__s390__) || defined(__s390x__)
#define HAS_TEST_AND_SET #define HAS_TEST_AND_SET
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment