Commit fe33916f authored by Christopher Dykes's avatar Christopher Dykes Committed by Facebook Github Bot 4

Move asm portability to an Asm portability header

Summary: Portabilty.h is just a mashup of everything that was needed up-to now, however, with the Windows port significantly expanding the scope of portability in Folly, it no longer needs to be a massive mashup, so start things by splitting out the asm stubs.

Reviewed By: yfeldblum

Differential Revision: D3007018

fb-gh-sync-id: f32913f74660aaa8889a553ae5d6f7182a4f5789
fbshipit-source-id: f32913f74660aaa8889a553ae5d6f7182a4f5789
parent a103b7e7
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include <folly/detail/Futex.h> #include <folly/detail/Futex.h>
#include <folly/detail/MemoryIdler.h> #include <folly/detail/MemoryIdler.h>
#include <folly/portability/Asm.h>
namespace folly { namespace folly {
......
...@@ -267,6 +267,7 @@ nobase_follyinclude_HEADERS = \ ...@@ -267,6 +267,7 @@ nobase_follyinclude_HEADERS = \
Padded.h \ Padded.h \
PicoSpinLock.h \ PicoSpinLock.h \
Portability.h \ Portability.h \
portability/Asm.h \
portability/Config.h \ portability/Config.h \
portability/Constexpr.h \ portability/Constexpr.h \
portability/Environment.h \ portability/Environment.h \
......
...@@ -17,6 +17,8 @@ ...@@ -17,6 +17,8 @@
#include <folly/MicroLock.h> #include <folly/MicroLock.h>
#include <thread> #include <thread>
#include <folly/portability/Asm.h>
namespace folly { namespace folly {
void MicroLockCore::lockSlowPath(uint32_t oldWord, void MicroLockCore::lockSlowPath(uint32_t oldWord,
......
...@@ -369,43 +369,6 @@ inline size_t malloc_usable_size(void* ptr) { ...@@ -369,43 +369,6 @@ inline size_t malloc_usable_size(void* ptr) {
# define FOLLY_HAS_RTTI 1 # define FOLLY_HAS_RTTI 1
#endif #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) #if defined(__APPLE__) || defined(_MSC_VER)
#define MAX_STATIC_CONSTRUCTOR_PRIORITY #define MAX_STATIC_CONSTRUCTOR_PRIORITY
#else #else
...@@ -415,5 +378,4 @@ inline void asm_pause() { ...@@ -415,5 +378,4 @@ inline void asm_pause() {
#define MAX_STATIC_CONSTRUCTOR_PRIORITY __attribute__ ((__init_priority__(102))) #define MAX_STATIC_CONSTRUCTOR_PRIORITY __attribute__ ((__init_priority__(102)))
#endif #endif
} // namespace folly
#endif // FOLLY_PORTABILITY_H_ #endif // FOLLY_PORTABILITY_H_
...@@ -137,6 +137,7 @@ pthread_rwlock_t Read 728698 24us 101ns 7.28ms 194us ...@@ -137,6 +137,7 @@ pthread_rwlock_t Read 728698 24us 101ns 7.28ms 194us
*/ */
#include <folly/Portability.h> #include <folly/Portability.h>
#include <folly/portability/Asm.h>
#if defined(__GNUC__) && \ #if defined(__GNUC__) && \
(defined(__i386) || FOLLY_X64 || \ (defined(__i386) || FOLLY_X64 || \
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include <folly/Likely.h> #include <folly/Likely.h>
#include <folly/detail/CacheLocality.h> #include <folly/detail/CacheLocality.h>
#include <folly/detail/Futex.h> #include <folly/detail/Futex.h>
#include <folly/portability/Asm.h>
#include <sys/resource.h> #include <sys/resource.h>
// SharedMutex is a reader-writer lock. It is small, very fast, scalable // SharedMutex is a reader-writer lock. It is small, very fast, scalable
......
...@@ -17,8 +17,8 @@ ...@@ -17,8 +17,8 @@
#ifndef incl_FOLLY_ATOMIC_HASH_UTILS_H #ifndef incl_FOLLY_ATOMIC_HASH_UTILS_H
#define incl_FOLLY_ATOMIC_HASH_UTILS_H #define incl_FOLLY_ATOMIC_HASH_UTILS_H
#include <folly/Portability.h>
#include <thread> #include <thread>
#include <folly/portability/Asm.h>
// Some utilities used by AtomicHashArray and AtomicHashMap // Some utilities used by AtomicHashArray and AtomicHashMap
// //
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
#include <cinttypes> #include <cinttypes>
#include <ctime> #include <ctime>
#include <folly/Portability.h> #include <folly/portability/Asm.h>
namespace folly { namespace folly {
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
#include <unistd.h> #include <unistd.h>
#include <folly/detail/Futex.h> #include <folly/detail/Futex.h>
#include <folly/Portability.h> #include <folly/portability/Asm.h>
namespace folly { namespace folly {
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#include <folly/detail/MemoryIdler.h> #include <folly/detail/MemoryIdler.h>
#include <folly/experimental/fibers/FiberManager.h> #include <folly/experimental/fibers/FiberManager.h>
#include <folly/portability/Asm.h>
namespace folly { namespace fibers { namespace folly { namespace fibers {
......
/*
* 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
}
}
...@@ -31,6 +31,8 @@ ...@@ -31,6 +31,8 @@
#include <gtest/gtest.h> #include <gtest/gtest.h>
#include <folly/portability/Asm.h>
using folly::MSLGuard; using folly::MSLGuard;
using folly::MicroLock; using folly::MicroLock;
using folly::MicroSpinLock; using folly::MicroSpinLock;
......
...@@ -20,6 +20,8 @@ ...@@ -20,6 +20,8 @@
#include <gtest/gtest.h> #include <gtest/gtest.h>
#include <thread> #include <thread>
#include <folly/portability/Asm.h>
using folly::SpinLockGuardImpl; using folly::SpinLockGuardImpl;
namespace { namespace {
......
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