projects
/
folly.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Make FOLLY_HAS_COROUTINES dependent on header
[folly.git]
/
folly
/
PicoSpinLock.h
diff --git
a/folly/PicoSpinLock.h
b/folly/PicoSpinLock.h
index 070f1fbe97838342aed1dea5db4663ef34802997..eb62bee21b2ef63d412f593f64b8daa0d3994a7e 100644
(file)
--- a/
folly/PicoSpinLock.h
+++ b/
folly/PicoSpinLock.h
@@
-48,7
+48,7
@@
#include <glog/logging.h>
#include <folly/Portability.h>
#include <glog/logging.h>
#include <folly/Portability.h>
-#include <folly/detail/Sleeper.h>
+#include <folly/
synchronization/
detail/Sleeper.h>
#if !FOLLY_X64 && !FOLLY_AARCH64 && !FOLLY_PPC64
#error "PicoSpinLock.h is currently x64, aarch64 and ppc64 only."
#if !FOLLY_X64 && !FOLLY_AARCH64 && !FOLLY_PPC64
#error "PicoSpinLock.h is currently x64, aarch64 and ppc64 only."
@@
-172,9
+172,10
@@
struct PicoSpinLock {
#undef FB_DOBTS
#elif FOLLY_AARCH64
#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" \
#elif FOLLY_PPC64
#define FB_DOBTS(size) \
asm volatile("\teieio\n" \
@@
-255,7
+256,10
@@
struct PicoSpinLock {
#undef FB_DOBTR
#elif FOLLY_AARCH64
#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" \
#elif FOLLY_PPC64
#define FB_DOBTR(size) \
asm volatile("\teieio\n" \
@@
-284,4
+288,4
@@
struct PicoSpinLock {
}
};
}
};
-}
+}
// namespace folly