1bc15bbf79
C11 atomics are not statically guaranteed to be lock free and so may not be atomic with respect to atomic operations originating outside the standard library, such as platform atomics. C11 macros to statically discover always lock free operations (ATOMIC_*_LOCK_FREE) do not cover uint64_t in GCC and std::atomic<uint64_t> is not a type alias of any covered type. All use of __atomic by atomic_helpers.h is statically checked to be always lock free. GCC builtin fencing does not appear to be strong enough for WC memory. Added an option (enabled) to enforce consistency for WC memory on x64. __sync builtin's were not used as they were declared legacy by GCC. Added a strongly conservative option (ALWAYS_CONSERVATIVE) to enable use of full memory fences in place of partial fences and compiler driven processor specific optimization. Change-Id: Id7aaaca626144070f58759f6a348cbee4612bbc0