Export of internal Abseil changes.
-- 027adbb0bceda5c3908f7f4d3a911284ee407b3d by Abseil Team <absl-team@google.com>: Make ABSL_CACHELINE_ALIGNED work for Visual C++. PiperOrigin-RevId: 227007205 GitOrigin-RevId: 027adbb0bceda5c3908f7f4d3a911284ee407b3d Change-Id: I572ec7e79dda1291eb324c90a39be90e744b4b05
This commit is contained in:
parent
01b471d9f3
commit
7ffbe09f3d
1 changed files with 15 additions and 5 deletions
|
@ -111,9 +111,9 @@
|
||||||
// See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0154r1.html
|
// See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0154r1.html
|
||||||
// for more information.
|
// for more information.
|
||||||
//
|
//
|
||||||
// On some compilers, `ABSL_CACHELINE_ALIGNED` expands to
|
// On some compilers, `ABSL_CACHELINE_ALIGNED` expands to an `__attribute__`
|
||||||
// `__attribute__((aligned(ABSL_CACHELINE_SIZE)))`. For compilers where this is
|
// or `__declspec` attribute. For compilers where this is not known to work,
|
||||||
// not known to work, the macro expands to nothing.
|
// the macro expands to nothing.
|
||||||
//
|
//
|
||||||
// No further guarantees are made here. The result of applying the macro
|
// No further guarantees are made here. The result of applying the macro
|
||||||
// to variables and types is always implementation-defined.
|
// to variables and types is always implementation-defined.
|
||||||
|
@ -122,6 +122,14 @@
|
||||||
// of causing bugs that are difficult to diagnose, crash, etc. It does not
|
// of causing bugs that are difficult to diagnose, crash, etc. It does not
|
||||||
// of itself guarantee that objects are aligned to a cache line.
|
// of itself guarantee that objects are aligned to a cache line.
|
||||||
//
|
//
|
||||||
|
// NOTE: Some compilers are picky about the locations of annotations such as
|
||||||
|
// this attribute, so prefer to put it at the beginning of your declaration.
|
||||||
|
// For example,
|
||||||
|
//
|
||||||
|
// ABSL_CACHELINE_ALIGNED static Foo* foo = ...
|
||||||
|
//
|
||||||
|
// class ABSL_CACHELINE_ALIGNED Bar { ...
|
||||||
|
//
|
||||||
// Recommendations:
|
// Recommendations:
|
||||||
//
|
//
|
||||||
// 1) Consult compiler documentation; this comment is not kept in sync as
|
// 1) Consult compiler documentation; this comment is not kept in sync as
|
||||||
|
@ -131,8 +139,10 @@
|
||||||
// 3) Prefer applying this attribute to individual variables. Avoid
|
// 3) Prefer applying this attribute to individual variables. Avoid
|
||||||
// applying it to types. This tends to localize the effect.
|
// applying it to types. This tends to localize the effect.
|
||||||
#define ABSL_CACHELINE_ALIGNED __attribute__((aligned(ABSL_CACHELINE_SIZE)))
|
#define ABSL_CACHELINE_ALIGNED __attribute__((aligned(ABSL_CACHELINE_SIZE)))
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
#else // not GCC
|
#define ABSL_CACHELINE_SIZE 64
|
||||||
|
#define ABSL_CACHELINE_ALIGNED __declspec(align(ABSL_CACHELINE_SIZE))
|
||||||
|
#else
|
||||||
#define ABSL_CACHELINE_SIZE 64
|
#define ABSL_CACHELINE_SIZE 64
|
||||||
#define ABSL_CACHELINE_ALIGNED
|
#define ABSL_CACHELINE_ALIGNED
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue