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 @@
#include <folly/detail/Futex.h>
#include <folly/detail/MemoryIdler.h>
#include <folly/portability/Asm.h>
namespace folly {
......
......@@ -267,6 +267,7 @@ nobase_follyinclude_HEADERS = \
Padded.h \
PicoSpinLock.h \
Portability.h \
portability/Asm.h \
portability/Config.h \
portability/Constexpr.h \
portability/Environment.h \
......
......@@ -17,6 +17,8 @@
#include <folly/MicroLock.h>
#include <thread>
#include <folly/portability/Asm.h>
namespace folly {
void MicroLockCore::lockSlowPath(uint32_t oldWord,
......
......@@ -369,43 +369,6 @@ inline size_t malloc_usable_size(void* ptr) {
# 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
......@@ -415,5 +378,4 @@ inline void asm_pause() {
#define MAX_STATIC_CONSTRUCTOR_PRIORITY __attribute__ ((__init_priority__(102)))
#endif
} // namespace folly
#endif // FOLLY_PORTABILITY_H_
......@@ -137,6 +137,7 @@ pthread_rwlock_t Read 728698 24us 101ns 7.28ms 194us
*/
#include <folly/Portability.h>
#include <folly/portability/Asm.h>
#if defined(__GNUC__) && \
(defined(__i386) || FOLLY_X64 || \
......
......@@ -25,6 +25,7 @@
#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
......
......@@ -17,8 +17,8 @@
#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
//
......
......@@ -24,7 +24,7 @@
#include <cinttypes>
#include <ctime>
#include <folly/Portability.h>
#include <folly/portability/Asm.h>
namespace folly {
......
......@@ -22,7 +22,7 @@
#include <unistd.h>
#include <folly/detail/Futex.h>
#include <folly/Portability.h>
#include <folly/portability/Asm.h>
namespace folly {
......
......@@ -19,6 +19,7 @@
#include <folly/detail/MemoryIdler.h>
#include <folly/experimental/fibers/FiberManager.h>
#include <folly/portability/Asm.h>
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 @@
#include <gtest/gtest.h>
#include <folly/portability/Asm.h>
using folly::MSLGuard;
using folly::MicroLock;
using folly::MicroSpinLock;
......
......@@ -20,6 +20,8 @@
#include <gtest/gtest.h>
#include <thread>
#include <folly/portability/Asm.h>
using folly::SpinLockGuardImpl;
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