Use __sync_lock_test_and_set() for spinlocks on ARM, if available.
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 7 Jan 2012 20:38:52 +0000 (15:38 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 7 Jan 2012 20:38:52 +0000 (15:38 -0500)
commit0a41e865845bfa5d7aafcc5fe000dafa26573fef
treed11383fae426e60b58c5fd5a231297a51245b3a6
parent1fc3d18faa8f4476944bc6854be0f7f6adf4aec8
Use __sync_lock_test_and_set() for spinlocks on ARM, if available.

Historically we've used the SWPB instruction for TAS() on ARM, but this
is deprecated and not available on ARMv6 and later.  Instead, make use
of a GCC builtin if available.  We'll still fall back to SWPB if not,
so as not to break existing ports using older GCC versions.

Eventually we might want to try using __sync_lock_test_and_set() on some
other architectures too, but for now that seems to present only risk and
not reward.

Back-patch to all supported versions, since people might want to use any
of them on more recent ARM chips.

Martin Pitt
configure
configure.in
src/include/pg_config.h.in
src/include/storage/s_lock.h