Commit 7a45c3e0 authored by Keith Daigle's avatar Keith Daigle Committed by Facebook Github Bot

Fix PicoSpinLock on aarch64

Summary:
Found that building folly on aarch64 gave errors with
picospinlock.  Looked and found that MSVC used casts
so I figured I'd try that

Reviewed By: yfeldblum

Differential Revision: D6504689

fbshipit-source-id: 9565bae5ffab485da407b8609be92ef7db10ab72
parent baa03294
......@@ -172,9 +172,10 @@ struct PicoSpinLock {
#undef FB_DOBTS
#elif FOLLY_AARCH64
ret =
!(__atomic_fetch_or(&lock_, kLockBitMask_, __ATOMIC_SEQ_CST) &
kLockBitMask_);
using SIntType = typename std::make_signed<UIntType>::type;
auto const lock = reinterpret_cast<SIntType*>(&lock_);
auto const mask = static_cast<SIntType>(kLockBitMask_);
return !(mask & __atomic_fetch_or(lock, mask, __ATOMIC_ACQUIRE));
#elif FOLLY_PPC64
#define FB_DOBTS(size) \
asm volatile("\teieio\n" \
......@@ -255,7 +256,10 @@ struct PicoSpinLock {
#undef FB_DOBTR
#elif FOLLY_AARCH64
__atomic_fetch_and(&lock_, ~kLockBitMask_, __ATOMIC_SEQ_CST);
using SIntType = typename std::make_signed<UIntType>::type;
auto const lock = reinterpret_cast<SIntType*>(&lock_);
auto const mask = static_cast<SIntType>(kLockBitMask_);
__atomic_fetch_and(lock, ~mask, __ATOMIC_RELEASE);
#elif FOLLY_PPC64
#define FB_DOBTR(size) \
asm volatile("\teieio\n" \
......
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