#include <folly/detail/Futex.h>
#include <folly/detail/MemoryIdler.h>
+#include <folly/portability/Asm.h>
namespace folly {
Padded.h \
PicoSpinLock.h \
Portability.h \
+ portability/Asm.h \
portability/Config.h \
portability/Constexpr.h \
portability/Environment.h \
#include <folly/MicroLock.h>
#include <thread>
+#include <folly/portability/Asm.h>
+
namespace folly {
void MicroLockCore::lockSlowPath(uint32_t oldWord,
# define FOLLY_HAS_RTTI 1
#endif
-#ifdef _MSC_VER
-# include <intrin.h>
-#endif
-
-namespace folly {
-
-inline void asm_volatile_memory() {
-#if defined(__clang__) || defined(__GNUC__)
- asm volatile("" : : : "memory");
-#elif defined(_MSC_VER)
- ::_ReadWriteBarrier();
-#endif
-}
-
-inline void asm_volatile_pause() {
-#if defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64))
- ::_mm_pause();
-#elif defined(__i386__) || FOLLY_X64
- asm volatile ("pause");
-#elif FOLLY_A64 || defined(__arm__)
- asm volatile ("yield");
-#elif FOLLY_PPC64
- asm volatile("or 27,27,27");
-#endif
-}
-inline void asm_pause() {
-#if defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64))
- ::_mm_pause();
-#elif defined(__i386__) || FOLLY_X64
- asm ("pause");
-#elif FOLLY_A64 || defined(__arm__)
- asm ("yield");
-#elif FOLLY_PPC64
- asm ("or 31,31,31");
-#endif
-}
-
#if defined(__APPLE__) || defined(_MSC_VER)
#define MAX_STATIC_CONSTRUCTOR_PRIORITY
#else
#define MAX_STATIC_CONSTRUCTOR_PRIORITY __attribute__ ((__init_priority__(102)))
#endif
-} // namespace folly
#endif // FOLLY_PORTABILITY_H_
*/
#include <folly/Portability.h>
+#include <folly/portability/Asm.h>
#if defined(__GNUC__) && \
(defined(__i386) || FOLLY_X64 || \
#include <folly/Likely.h>
#include <folly/detail/CacheLocality.h>
#include <folly/detail/Futex.h>
+#include <folly/portability/Asm.h>
#include <sys/resource.h>
// SharedMutex is a reader-writer lock. It is small, very fast, scalable
#ifndef incl_FOLLY_ATOMIC_HASH_UTILS_H
#define incl_FOLLY_ATOMIC_HASH_UTILS_H
-#include <folly/Portability.h>
#include <thread>
+#include <folly/portability/Asm.h>
// Some utilities used by AtomicHashArray and AtomicHashMap
//
#include <cinttypes>
#include <ctime>
-#include <folly/Portability.h>
+#include <folly/portability/Asm.h>
namespace folly {
#include <unistd.h>
#include <folly/detail/Futex.h>
-#include <folly/Portability.h>
+#include <folly/portability/Asm.h>
namespace folly {
#include <folly/detail/MemoryIdler.h>
#include <folly/experimental/fibers/FiberManager.h>
+#include <folly/portability/Asm.h>
namespace folly { namespace fibers {
--- /dev/null
+/*
+ * Copyright 2016 Facebook, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include <folly/Portability.h>
+
+#ifdef _MSC_VER
+# include <intrin.h>
+#endif
+
+namespace folly {
+inline void asm_volatile_memory() {
+#if defined(__clang__) || defined(__GNUC__)
+ asm volatile("" : : : "memory");
+#elif defined(_MSC_VER)
+ ::_ReadWriteBarrier();
+#endif
+}
+
+inline void asm_volatile_pause() {
+#if defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64))
+ ::_mm_pause();
+#elif defined(__i386__) || FOLLY_X64
+ asm volatile("pause");
+#elif FOLLY_A64 || defined(__arm__)
+ asm volatile("yield");
+#elif FOLLY_PPC64
+ asm volatile("or 27,27,27");
+#endif
+}
+
+inline void asm_pause() {
+#if defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64))
+ ::_mm_pause();
+#elif defined(__i386__) || FOLLY_X64
+ asm("pause");
+#elif FOLLY_A64 || defined(__arm__)
+ asm("yield");
+#elif FOLLY_PPC64
+ asm("or 31,31,31");
+#endif
+}
+}
#include <gtest/gtest.h>
+#include <folly/portability/Asm.h>
+
using folly::MSLGuard;
using folly::MicroLock;
using folly::MicroSpinLock;
#include <gtest/gtest.h>
#include <thread>
+#include <folly/portability/Asm.h>
+
using folly::SpinLockGuardImpl;
namespace {