X-Git-Url: http://plrg.eecs.uci.edu/git/?p=folly.git;a=blobdiff_plain;f=folly%2FRWSpinLock.h;h=2f177ed001bdc71142fe4b76218ab9819892f1f4;hp=94f48028289ca496d6d29059ff3d2be0814643ab;hb=eba5e7f2236a0950957a8a247a0e83385149d13c;hpb=ff18deaf720fbe59551a7ff275b09003a61c4351 diff --git a/folly/RWSpinLock.h b/folly/RWSpinLock.h index 94f48028..2f177ed0 100644 --- a/folly/RWSpinLock.h +++ b/folly/RWSpinLock.h @@ -143,6 +143,8 @@ pthread_rwlock_t Read 728698 24us 101ns 7.28ms 194us #include #elif defined(_MSC_VER) && defined(FOLLY_X64) #define RW_SPINLOCK_USE_X86_INTRINSIC_ +#elif FOLLY_AARCH64 +#define RW_SPINLOCK_USE_X86_INTRINSIC_ #else #undef RW_SPINLOCK_USE_X86_INTRINSIC_ #endif @@ -690,9 +692,9 @@ class RWTicketSpinLockT { void unlock() { RWTicket t; t.whole = load_acquire(&ticket.whole); - FullInt old = t.whole; #ifdef RW_SPINLOCK_USE_SSE_INSTRUCTIONS_ + FullInt old = t.whole; // SSE2 can reduce the lock and unlock overhead by 10% static const QuarterInt kDeltaBuf[4] = { 1, 1, 0, 0 }; // write/read/user static const __m128i kDelta = IntTraitType::make128(kDeltaBuf);