//===-- Atomic.cpp - Atomic Operations --------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file implements atomic operations. // //===----------------------------------------------------------------------===// #include "llvm/Support/Atomic.h" #include "llvm/Config/llvm-config.h" usingnamespacellvm; #if defined(_MSC_VER) #include <intrin.h> // We must include windows.h after intrin.h. #include <windows.h> #undef MemoryFence #endif #if defined(__GNUC__) || (defined(__IBMCPP__) && __IBMCPP__ >= 1210) #define GNU_ATOMICS #endif void sys::MemoryFence() { … } sys::cas_flag sys::CompareAndSwap(volatile sys::cas_flag* ptr, sys::cas_flag new_value, sys::cas_flag old_value) { … }