Skip to content

Commit

Permalink
Export of internal Abseil changes.
Browse files Browse the repository at this point in the history
--
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
  • Loading branch information
Abseil Team authored and gennadiycivil committed Dec 27, 2018
1 parent 01b471d commit 7ffbe09
Showing 1 changed file with 15 additions and 5 deletions.
20 changes: 15 additions & 5 deletions absl/base/optimization.h
Original file line number Diff line number Diff line change
Expand Up @@ -111,9 +111,9 @@
// See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0154r1.html
// for more information.
//
// On some compilers, `ABSL_CACHELINE_ALIGNED` expands to
// `__attribute__((aligned(ABSL_CACHELINE_SIZE)))`. For compilers where this is
// not known to work, the macro expands to nothing.
// On some compilers, `ABSL_CACHELINE_ALIGNED` expands to an `__attribute__`
// or `__declspec` attribute. For compilers where this is not known to work,
// the macro expands to nothing.
//
// No further guarantees are made here. The result of applying the macro
// to variables and types is always implementation-defined.
Expand All @@ -122,6 +122,14 @@
// of causing bugs that are difficult to diagnose, crash, etc. It does not
// 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:
//
// 1) Consult compiler documentation; this comment is not kept in sync as
Expand All @@ -131,8 +139,10 @@
// 3) Prefer applying this attribute to individual variables. Avoid
// applying it to types. This tends to localize the effect.
#define ABSL_CACHELINE_ALIGNED __attribute__((aligned(ABSL_CACHELINE_SIZE)))

#else // not GCC
#elif defined(_MSC_VER)
#define ABSL_CACHELINE_SIZE 64
#define ABSL_CACHELINE_ALIGNED __declspec(align(ABSL_CACHELINE_SIZE))
#else
#define ABSL_CACHELINE_SIZE 64
#define ABSL_CACHELINE_ALIGNED
#endif
Expand Down

0 comments on commit 7ffbe09

Please sign in to comment.