1fce5bd4cc29fddb5e8f0cb9c12df7c10187a991dDmitry Vyukov//===-- sanitizer_atomic.h --------------------------------------*- C++ -*-===// 27ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany// 37ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany// The LLVM Compiler Infrastructure 47ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany// 57ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany// This file is distributed under the University of Illinois Open Source 67ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany// License. See LICENSE.TXT for details. 77ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany// 87ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany//===----------------------------------------------------------------------===// 9a3eca8192505f4796194dd24eb051019f402de99Dmitry Vyukov// 10a3eca8192505f4796194dd24eb051019f402de99Dmitry Vyukov// This file is a part of ThreadSanitizer/AddressSanitizer runtime. 11a3eca8192505f4796194dd24eb051019f402de99Dmitry Vyukov// 12a3eca8192505f4796194dd24eb051019f402de99Dmitry Vyukov//===----------------------------------------------------------------------===// 137ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany 14fce5bd4cc29fddb5e8f0cb9c12df7c10187a991dDmitry Vyukov#ifndef SANITIZER_ATOMIC_H 15fce5bd4cc29fddb5e8f0cb9c12df7c10187a991dDmitry Vyukov#define SANITIZER_ATOMIC_H 167ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany 17fce5bd4cc29fddb5e8f0cb9c12df7c10187a991dDmitry Vyukov#include "sanitizer_internal_defs.h" 187ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany 19fce5bd4cc29fddb5e8f0cb9c12df7c10187a991dDmitry Vyukovnamespace __sanitizer { 207ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany 217ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryanyenum memory_order { 227ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany memory_order_relaxed = 1 << 0, 237ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany memory_order_consume = 1 << 1, 247ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany memory_order_acquire = 1 << 2, 257ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany memory_order_release = 1 << 3, 267ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany memory_order_acq_rel = 1 << 4, 2762f294020ce5d60dc51883e7708a56247c366d14Alexey Samsonov memory_order_seq_cst = 1 << 5 287ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany}; 297ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany 30fce5bd4cc29fddb5e8f0cb9c12df7c10187a991dDmitry Vyukovstruct atomic_uint8_t { 31fce5bd4cc29fddb5e8f0cb9c12df7c10187a991dDmitry Vyukov typedef u8 Type; 32fce5bd4cc29fddb5e8f0cb9c12df7c10187a991dDmitry Vyukov volatile Type val_dont_use; 33fce5bd4cc29fddb5e8f0cb9c12df7c10187a991dDmitry Vyukov}; 34fce5bd4cc29fddb5e8f0cb9c12df7c10187a991dDmitry Vyukov 35fce5bd4cc29fddb5e8f0cb9c12df7c10187a991dDmitry Vyukovstruct atomic_uint16_t { 36fce5bd4cc29fddb5e8f0cb9c12df7c10187a991dDmitry Vyukov typedef u16 Type; 37fce5bd4cc29fddb5e8f0cb9c12df7c10187a991dDmitry Vyukov volatile Type val_dont_use; 38fce5bd4cc29fddb5e8f0cb9c12df7c10187a991dDmitry Vyukov}; 39fce5bd4cc29fddb5e8f0cb9c12df7c10187a991dDmitry Vyukov 407ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryanystruct atomic_uint32_t { 417ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany typedef u32 Type; 427ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany volatile Type val_dont_use; 437ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany}; 447ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany 457ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryanystruct atomic_uint64_t { 467ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany typedef u64 Type; 472d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines // On 32-bit platforms u64 is not necessary aligned on 8 bytes. 482d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines volatile ALIGNED(8) Type val_dont_use; 497ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany}; 507ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany 517ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryanystruct atomic_uintptr_t { 527ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany typedef uptr Type; 537ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany volatile Type val_dont_use; 547ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany}; 557ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany 56b6eb56f5a03b4dba8de79465274a73d1ecbca7f2Dmitry Vyukov} // namespace __sanitizer 577ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany 58b6eb56f5a03b4dba8de79465274a73d1ecbca7f2Dmitry Vyukov#if defined(__GNUC__) 59b6eb56f5a03b4dba8de79465274a73d1ecbca7f2Dmitry Vyukov# include "sanitizer_atomic_clang.h" 60b6eb56f5a03b4dba8de79465274a73d1ecbca7f2Dmitry Vyukov#elif defined(_MSC_VER) 61b6eb56f5a03b4dba8de79465274a73d1ecbca7f2Dmitry Vyukov# include "sanitizer_atomic_msvc.h" 62b6eb56f5a03b4dba8de79465274a73d1ecbca7f2Dmitry Vyukov#else 63b6eb56f5a03b4dba8de79465274a73d1ecbca7f2Dmitry Vyukov# error "Unsupported compiler" 64fce5bd4cc29fddb5e8f0cb9c12df7c10187a991dDmitry Vyukov#endif 657ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany 66fce5bd4cc29fddb5e8f0cb9c12df7c10187a991dDmitry Vyukov#endif // SANITIZER_ATOMIC_H 67