Add __builtin___clear_cache to the portability headers
[folly.git] / folly / Portability.h
index 98ecd0300a31140c49b0c37a9951b484c7fcac69..17c064ba8a6f01d1d9771942a2c99a091cbf5241 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016 Facebook, Inc.
+ * Copyright 2017 Facebook, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -74,24 +74,6 @@ constexpr bool kHasUnalignedAccess = false;
 # define FOLLY_DEPRECATED(msg)
 #endif
 
-// noinline
-#ifdef _MSC_VER
-# define FOLLY_NOINLINE __declspec(noinline)
-#elif defined(__clang__) || defined(__GNUC__)
-# define FOLLY_NOINLINE __attribute__((__noinline__))
-#else
-# define FOLLY_NOINLINE
-#endif
-
-// always inline
-#ifdef _MSC_VER
-# define FOLLY_ALWAYS_INLINE __forceinline
-#elif defined(__clang__) || defined(__GNUC__)
-# define FOLLY_ALWAYS_INLINE inline __attribute__((__always_inline__))
-#else
-# define FOLLY_ALWAYS_INLINE inline
-#endif
-
 // warn unused result
 #if defined(_MSC_VER) && (_MSC_VER >= 1700)
 #define FOLLY_WARN_UNUSED_RESULT _Check_return_
@@ -127,6 +109,12 @@ constexpr bool kHasUnalignedAccess = false;
 # define FOLLY_PPC64 0
 #endif
 
+namespace folly {
+constexpr bool kIsArchAmd64 = FOLLY_X64 == 1;
+constexpr bool kIsArchAArch64 = FOLLY_A64 == 1;
+constexpr bool kIsArchPPC64 = FOLLY_PPC64 == 1;
+}
+
 // packing is very ugly in msvc
 #ifdef _MSC_VER
 # define FOLLY_PACK_ATTR /**/
@@ -167,6 +155,14 @@ constexpr bool kHasUnalignedAccess = false;
 # define FOLLY_MSVC_DISABLE_WARNING(warningNumber)
 #endif
 
+#ifdef HAVE_SHADOW_LOCAL_WARNINGS
+#define FOLLY_GCC_DISABLE_NEW_SHADOW_WARNINGS        \
+  FOLLY_GCC_DISABLE_WARNING(shadow-compatible-local) \
+  FOLLY_GCC_DISABLE_WARNING(shadow-local)
+#else
+#define FOLLY_GCC_DISABLE_NEW_SHADOW_WARNINGS /* empty */
+#endif
+
 #if defined(__GNUC__) && !defined(__APPLE__) && !__GNUC_PREREQ(4,9)
 // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56019
 // gcc 4.8.x incorrectly placed max_align_t in the root namespace
@@ -331,4 +327,10 @@ constexpr auto kIsLinux = true;
 #else
 constexpr auto kIsLinux = false;
 #endif
+
+#if defined(_WIN32)
+constexpr auto kIsWindows = true;
+#else
+constexpr auto kIsWindows = false;
+#endif
 }