sanitizer_atomic.h revision 62f294020ce5d60dc51883e7708a56247c366d14
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;
477ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  volatile Type val_dont_use;
487ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany};
497ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany
507ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryanystruct atomic_uintptr_t {
517ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  typedef uptr Type;
527ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  volatile Type val_dont_use;
537ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany};
547ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany
55b6eb56f5a03b4dba8de79465274a73d1ecbca7f2Dmitry Vyukov}  // namespace __sanitizer
567ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany
57b6eb56f5a03b4dba8de79465274a73d1ecbca7f2Dmitry Vyukov#if defined(__GNUC__)
58b6eb56f5a03b4dba8de79465274a73d1ecbca7f2Dmitry Vyukov# include "sanitizer_atomic_clang.h"
59b6eb56f5a03b4dba8de79465274a73d1ecbca7f2Dmitry Vyukov#elif defined(_MSC_VER)
60b6eb56f5a03b4dba8de79465274a73d1ecbca7f2Dmitry Vyukov# include "sanitizer_atomic_msvc.h"
61b6eb56f5a03b4dba8de79465274a73d1ecbca7f2Dmitry Vyukov#else
62b6eb56f5a03b4dba8de79465274a73d1ecbca7f2Dmitry Vyukov# error "Unsupported compiler"
63fce5bd4cc29fddb5e8f0cb9c12df7c10187a991dDmitry Vyukov#endif
647ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany
65fce5bd4cc29fddb5e8f0cb9c12df7c10187a991dDmitry Vyukov#endif  // SANITIZER_ATOMIC_H
66