17ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany//===-- tsan_interface_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//===----------------------------------------------------------------------===// 97ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany// 107ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany// This file is a part of ThreadSanitizer (TSan), a race detector. 117ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany// 122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// Public interface header for TSan atomics. 137ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany//===----------------------------------------------------------------------===// 147ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany#ifndef TSAN_INTERFACE_ATOMIC_H 157ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany#define TSAN_INTERFACE_ATOMIC_H 167ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany 177ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany#ifdef __cplusplus 187ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryanyextern "C" { 197ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany#endif 207ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany 2163da509a995a3cac9bf5495b5cb94c527ff96ce1Dmitry Vyukovtypedef char __tsan_atomic8; 2263da509a995a3cac9bf5495b5cb94c527ff96ce1Dmitry Vyukovtypedef short __tsan_atomic16; // NOLINT 2363da509a995a3cac9bf5495b5cb94c527ff96ce1Dmitry Vyukovtypedef int __tsan_atomic32; 2463da509a995a3cac9bf5495b5cb94c527ff96ce1Dmitry Vyukovtypedef long __tsan_atomic64; // NOLINT 2562470003b9a51ec8235724d6cee3d5b1488a5a2eDmitry Vyukov#if defined(__SIZEOF_INT128__) \ 2662470003b9a51ec8235724d6cee3d5b1488a5a2eDmitry Vyukov || (__clang_major__ * 100 + __clang_minor__ >= 302) 279af645316cdb5e75033a7894e85009791ded7e4bDmitry Vyukov__extension__ typedef __int128 __tsan_atomic128; 282d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines# define __TSAN_HAS_INT128 1 29c11e1e0f1401a95d0803317c4cdb83be3938146aDmitry Vyukov#else 302d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines# define __TSAN_HAS_INT128 0 31c11e1e0f1401a95d0803317c4cdb83be3938146aDmitry Vyukov#endif 327ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany 337ba89e5c1f7bd91a3c03d449b073c99c12f554ebDmitry Vyukov// Part of ABI, do not change. 347ba89e5c1f7bd91a3c03d449b073c99c12f554ebDmitry Vyukov// http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/atomic?view=markup 357ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryanytypedef enum { 36c43f2721a8cdad652b188d0e40f9f091ce35a48fDmitry Vyukov __tsan_memory_order_relaxed, 37c43f2721a8cdad652b188d0e40f9f091ce35a48fDmitry Vyukov __tsan_memory_order_consume, 38c43f2721a8cdad652b188d0e40f9f091ce35a48fDmitry Vyukov __tsan_memory_order_acquire, 39c43f2721a8cdad652b188d0e40f9f091ce35a48fDmitry Vyukov __tsan_memory_order_release, 40c43f2721a8cdad652b188d0e40f9f091ce35a48fDmitry Vyukov __tsan_memory_order_acq_rel, 41c43f2721a8cdad652b188d0e40f9f091ce35a48fDmitry Vyukov __tsan_memory_order_seq_cst 427ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany} __tsan_memory_order; 437ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany 447ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany__tsan_atomic8 __tsan_atomic8_load(const volatile __tsan_atomic8 *a, 452d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_memory_order mo); 467ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany__tsan_atomic16 __tsan_atomic16_load(const volatile __tsan_atomic16 *a, 472d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_memory_order mo); 487ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany__tsan_atomic32 __tsan_atomic32_load(const volatile __tsan_atomic32 *a, 492d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_memory_order mo); 507ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany__tsan_atomic64 __tsan_atomic64_load(const volatile __tsan_atomic64 *a, 512d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_memory_order mo); 522d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if __TSAN_HAS_INT128 5363da509a995a3cac9bf5495b5cb94c527ff96ce1Dmitry Vyukov__tsan_atomic128 __tsan_atomic128_load(const volatile __tsan_atomic128 *a, 542d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_memory_order mo); 552d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif 567ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany 577ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryanyvoid __tsan_atomic8_store(volatile __tsan_atomic8 *a, __tsan_atomic8 v, 582d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_memory_order mo); 597ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryanyvoid __tsan_atomic16_store(volatile __tsan_atomic16 *a, __tsan_atomic16 v, 602d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_memory_order mo); 617ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryanyvoid __tsan_atomic32_store(volatile __tsan_atomic32 *a, __tsan_atomic32 v, 622d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_memory_order mo); 637ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryanyvoid __tsan_atomic64_store(volatile __tsan_atomic64 *a, __tsan_atomic64 v, 642d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_memory_order mo); 652d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if __TSAN_HAS_INT128 6663da509a995a3cac9bf5495b5cb94c527ff96ce1Dmitry Vyukovvoid __tsan_atomic128_store(volatile __tsan_atomic128 *a, __tsan_atomic128 v, 672d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_memory_order mo); 682d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif 697ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany 70cdfb33a69a0c96c6912036ad85224972db3a7e7dDmitry Vyukov__tsan_atomic8 __tsan_atomic8_exchange(volatile __tsan_atomic8 *a, 712d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_atomic8 v, __tsan_memory_order mo); 72cdfb33a69a0c96c6912036ad85224972db3a7e7dDmitry Vyukov__tsan_atomic16 __tsan_atomic16_exchange(volatile __tsan_atomic16 *a, 732d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_atomic16 v, __tsan_memory_order mo); 747ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany__tsan_atomic32 __tsan_atomic32_exchange(volatile __tsan_atomic32 *a, 752d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_atomic32 v, __tsan_memory_order mo); 767ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany__tsan_atomic64 __tsan_atomic64_exchange(volatile __tsan_atomic64 *a, 772d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_atomic64 v, __tsan_memory_order mo); 782d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if __TSAN_HAS_INT128 7963da509a995a3cac9bf5495b5cb94c527ff96ce1Dmitry Vyukov__tsan_atomic128 __tsan_atomic128_exchange(volatile __tsan_atomic128 *a, 802d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_atomic128 v, __tsan_memory_order mo); 812d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif 827ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany 83cdfb33a69a0c96c6912036ad85224972db3a7e7dDmitry Vyukov__tsan_atomic8 __tsan_atomic8_fetch_add(volatile __tsan_atomic8 *a, 842d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_atomic8 v, __tsan_memory_order mo); 85cdfb33a69a0c96c6912036ad85224972db3a7e7dDmitry Vyukov__tsan_atomic16 __tsan_atomic16_fetch_add(volatile __tsan_atomic16 *a, 862d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_atomic16 v, __tsan_memory_order mo); 877ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany__tsan_atomic32 __tsan_atomic32_fetch_add(volatile __tsan_atomic32 *a, 882d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_atomic32 v, __tsan_memory_order mo); 897ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany__tsan_atomic64 __tsan_atomic64_fetch_add(volatile __tsan_atomic64 *a, 902d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_atomic64 v, __tsan_memory_order mo); 912d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if __TSAN_HAS_INT128 9263da509a995a3cac9bf5495b5cb94c527ff96ce1Dmitry Vyukov__tsan_atomic128 __tsan_atomic128_fetch_add(volatile __tsan_atomic128 *a, 932d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_atomic128 v, __tsan_memory_order mo); 942d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif 957ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany 96529cfa05a7dd0cdbe97172045430243181e43522Dmitry Vyukov__tsan_atomic8 __tsan_atomic8_fetch_sub(volatile __tsan_atomic8 *a, 972d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_atomic8 v, __tsan_memory_order mo); 98529cfa05a7dd0cdbe97172045430243181e43522Dmitry Vyukov__tsan_atomic16 __tsan_atomic16_fetch_sub(volatile __tsan_atomic16 *a, 992d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_atomic16 v, __tsan_memory_order mo); 100529cfa05a7dd0cdbe97172045430243181e43522Dmitry Vyukov__tsan_atomic32 __tsan_atomic32_fetch_sub(volatile __tsan_atomic32 *a, 1012d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_atomic32 v, __tsan_memory_order mo); 102529cfa05a7dd0cdbe97172045430243181e43522Dmitry Vyukov__tsan_atomic64 __tsan_atomic64_fetch_sub(volatile __tsan_atomic64 *a, 1032d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_atomic64 v, __tsan_memory_order mo); 1042d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if __TSAN_HAS_INT128 10563da509a995a3cac9bf5495b5cb94c527ff96ce1Dmitry Vyukov__tsan_atomic128 __tsan_atomic128_fetch_sub(volatile __tsan_atomic128 *a, 1062d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_atomic128 v, __tsan_memory_order mo); 1072d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif 108529cfa05a7dd0cdbe97172045430243181e43522Dmitry Vyukov 109cdfb33a69a0c96c6912036ad85224972db3a7e7dDmitry Vyukov__tsan_atomic8 __tsan_atomic8_fetch_and(volatile __tsan_atomic8 *a, 1102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_atomic8 v, __tsan_memory_order mo); 111cdfb33a69a0c96c6912036ad85224972db3a7e7dDmitry Vyukov__tsan_atomic16 __tsan_atomic16_fetch_and(volatile __tsan_atomic16 *a, 1122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_atomic16 v, __tsan_memory_order mo); 113cdfb33a69a0c96c6912036ad85224972db3a7e7dDmitry Vyukov__tsan_atomic32 __tsan_atomic32_fetch_and(volatile __tsan_atomic32 *a, 1142d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_atomic32 v, __tsan_memory_order mo); 115cdfb33a69a0c96c6912036ad85224972db3a7e7dDmitry Vyukov__tsan_atomic64 __tsan_atomic64_fetch_and(volatile __tsan_atomic64 *a, 1162d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_atomic64 v, __tsan_memory_order mo); 1172d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if __TSAN_HAS_INT128 11863da509a995a3cac9bf5495b5cb94c527ff96ce1Dmitry Vyukov__tsan_atomic128 __tsan_atomic128_fetch_and(volatile __tsan_atomic128 *a, 1192d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_atomic128 v, __tsan_memory_order mo); 1202d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif 121cdfb33a69a0c96c6912036ad85224972db3a7e7dDmitry Vyukov 122cdfb33a69a0c96c6912036ad85224972db3a7e7dDmitry Vyukov__tsan_atomic8 __tsan_atomic8_fetch_or(volatile __tsan_atomic8 *a, 1232d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_atomic8 v, __tsan_memory_order mo); 124cdfb33a69a0c96c6912036ad85224972db3a7e7dDmitry Vyukov__tsan_atomic16 __tsan_atomic16_fetch_or(volatile __tsan_atomic16 *a, 1252d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_atomic16 v, __tsan_memory_order mo); 126cdfb33a69a0c96c6912036ad85224972db3a7e7dDmitry Vyukov__tsan_atomic32 __tsan_atomic32_fetch_or(volatile __tsan_atomic32 *a, 1272d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_atomic32 v, __tsan_memory_order mo); 128cdfb33a69a0c96c6912036ad85224972db3a7e7dDmitry Vyukov__tsan_atomic64 __tsan_atomic64_fetch_or(volatile __tsan_atomic64 *a, 1292d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_atomic64 v, __tsan_memory_order mo); 1302d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if __TSAN_HAS_INT128 13163da509a995a3cac9bf5495b5cb94c527ff96ce1Dmitry Vyukov__tsan_atomic128 __tsan_atomic128_fetch_or(volatile __tsan_atomic128 *a, 1322d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_atomic128 v, __tsan_memory_order mo); 1332d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif 134cdfb33a69a0c96c6912036ad85224972db3a7e7dDmitry Vyukov 135cdfb33a69a0c96c6912036ad85224972db3a7e7dDmitry Vyukov__tsan_atomic8 __tsan_atomic8_fetch_xor(volatile __tsan_atomic8 *a, 1362d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_atomic8 v, __tsan_memory_order mo); 137cdfb33a69a0c96c6912036ad85224972db3a7e7dDmitry Vyukov__tsan_atomic16 __tsan_atomic16_fetch_xor(volatile __tsan_atomic16 *a, 1382d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_atomic16 v, __tsan_memory_order mo); 139cdfb33a69a0c96c6912036ad85224972db3a7e7dDmitry Vyukov__tsan_atomic32 __tsan_atomic32_fetch_xor(volatile __tsan_atomic32 *a, 1402d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_atomic32 v, __tsan_memory_order mo); 141cdfb33a69a0c96c6912036ad85224972db3a7e7dDmitry Vyukov__tsan_atomic64 __tsan_atomic64_fetch_xor(volatile __tsan_atomic64 *a, 1422d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_atomic64 v, __tsan_memory_order mo); 1432d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if __TSAN_HAS_INT128 14463da509a995a3cac9bf5495b5cb94c527ff96ce1Dmitry Vyukov__tsan_atomic128 __tsan_atomic128_fetch_xor(volatile __tsan_atomic128 *a, 1452d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_atomic128 v, __tsan_memory_order mo); 1462d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif 147cdfb33a69a0c96c6912036ad85224972db3a7e7dDmitry Vyukov 14802b45d2aec154cb392cd6eb85e8dd16ed255351fDmitry Vyukov__tsan_atomic8 __tsan_atomic8_fetch_nand(volatile __tsan_atomic8 *a, 1492d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_atomic8 v, __tsan_memory_order mo); 15002b45d2aec154cb392cd6eb85e8dd16ed255351fDmitry Vyukov__tsan_atomic16 __tsan_atomic16_fetch_nand(volatile __tsan_atomic16 *a, 1512d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_atomic16 v, __tsan_memory_order mo); 15202b45d2aec154cb392cd6eb85e8dd16ed255351fDmitry Vyukov__tsan_atomic32 __tsan_atomic32_fetch_nand(volatile __tsan_atomic32 *a, 1532d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_atomic32 v, __tsan_memory_order mo); 15402b45d2aec154cb392cd6eb85e8dd16ed255351fDmitry Vyukov__tsan_atomic64 __tsan_atomic64_fetch_nand(volatile __tsan_atomic64 *a, 1552d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_atomic64 v, __tsan_memory_order mo); 1562d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if __TSAN_HAS_INT128 15763da509a995a3cac9bf5495b5cb94c527ff96ce1Dmitry Vyukov__tsan_atomic128 __tsan_atomic128_fetch_nand(volatile __tsan_atomic128 *a, 1582d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_atomic128 v, __tsan_memory_order mo); 1592d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif 16002b45d2aec154cb392cd6eb85e8dd16ed255351fDmitry Vyukov 161cdfb33a69a0c96c6912036ad85224972db3a7e7dDmitry Vyukovint __tsan_atomic8_compare_exchange_weak(volatile __tsan_atomic8 *a, 162fc575e52636c803262fc24bacf63a95f731b1314Dmitry Vyukov __tsan_atomic8 *c, __tsan_atomic8 v, __tsan_memory_order mo, 1632d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_memory_order fail_mo); 164cdfb33a69a0c96c6912036ad85224972db3a7e7dDmitry Vyukovint __tsan_atomic16_compare_exchange_weak(volatile __tsan_atomic16 *a, 165fc575e52636c803262fc24bacf63a95f731b1314Dmitry Vyukov __tsan_atomic16 *c, __tsan_atomic16 v, __tsan_memory_order mo, 1662d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_memory_order fail_mo); 167cdfb33a69a0c96c6912036ad85224972db3a7e7dDmitry Vyukovint __tsan_atomic32_compare_exchange_weak(volatile __tsan_atomic32 *a, 168fc575e52636c803262fc24bacf63a95f731b1314Dmitry Vyukov __tsan_atomic32 *c, __tsan_atomic32 v, __tsan_memory_order mo, 1692d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_memory_order fail_mo); 170cdfb33a69a0c96c6912036ad85224972db3a7e7dDmitry Vyukovint __tsan_atomic64_compare_exchange_weak(volatile __tsan_atomic64 *a, 171fc575e52636c803262fc24bacf63a95f731b1314Dmitry Vyukov __tsan_atomic64 *c, __tsan_atomic64 v, __tsan_memory_order mo, 1722d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_memory_order fail_mo); 1732d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if __TSAN_HAS_INT128 17463da509a995a3cac9bf5495b5cb94c527ff96ce1Dmitry Vyukovint __tsan_atomic128_compare_exchange_weak(volatile __tsan_atomic128 *a, 17563da509a995a3cac9bf5495b5cb94c527ff96ce1Dmitry Vyukov __tsan_atomic128 *c, __tsan_atomic128 v, __tsan_memory_order mo, 1762d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_memory_order fail_mo); 1772d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif 178cdfb33a69a0c96c6912036ad85224972db3a7e7dDmitry Vyukov 179cdfb33a69a0c96c6912036ad85224972db3a7e7dDmitry Vyukovint __tsan_atomic8_compare_exchange_strong(volatile __tsan_atomic8 *a, 180fc575e52636c803262fc24bacf63a95f731b1314Dmitry Vyukov __tsan_atomic8 *c, __tsan_atomic8 v, __tsan_memory_order mo, 1812d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_memory_order fail_mo); 182cdfb33a69a0c96c6912036ad85224972db3a7e7dDmitry Vyukovint __tsan_atomic16_compare_exchange_strong(volatile __tsan_atomic16 *a, 183fc575e52636c803262fc24bacf63a95f731b1314Dmitry Vyukov __tsan_atomic16 *c, __tsan_atomic16 v, __tsan_memory_order mo, 1842d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_memory_order fail_mo); 1857ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryanyint __tsan_atomic32_compare_exchange_strong(volatile __tsan_atomic32 *a, 186fc575e52636c803262fc24bacf63a95f731b1314Dmitry Vyukov __tsan_atomic32 *c, __tsan_atomic32 v, __tsan_memory_order mo, 1872d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_memory_order fail_mo); 1887ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryanyint __tsan_atomic64_compare_exchange_strong(volatile __tsan_atomic64 *a, 189fc575e52636c803262fc24bacf63a95f731b1314Dmitry Vyukov __tsan_atomic64 *c, __tsan_atomic64 v, __tsan_memory_order mo, 1902d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_memory_order fail_mo); 1912d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if __TSAN_HAS_INT128 19263da509a995a3cac9bf5495b5cb94c527ff96ce1Dmitry Vyukovint __tsan_atomic128_compare_exchange_strong(volatile __tsan_atomic128 *a, 19363da509a995a3cac9bf5495b5cb94c527ff96ce1Dmitry Vyukov __tsan_atomic128 *c, __tsan_atomic128 v, __tsan_memory_order mo, 1942d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_memory_order fail_mo); 1952d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif 1967ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany 197e337bf303dde9258bc7e2c87722a270fed96460bDmitry Vyukov__tsan_atomic8 __tsan_atomic8_compare_exchange_val( 198e337bf303dde9258bc7e2c87722a270fed96460bDmitry Vyukov volatile __tsan_atomic8 *a, __tsan_atomic8 c, __tsan_atomic8 v, 1992d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_memory_order mo, __tsan_memory_order fail_mo); 200e337bf303dde9258bc7e2c87722a270fed96460bDmitry Vyukov__tsan_atomic16 __tsan_atomic16_compare_exchange_val( 201e337bf303dde9258bc7e2c87722a270fed96460bDmitry Vyukov volatile __tsan_atomic16 *a, __tsan_atomic16 c, __tsan_atomic16 v, 2022d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_memory_order mo, __tsan_memory_order fail_mo); 203e337bf303dde9258bc7e2c87722a270fed96460bDmitry Vyukov__tsan_atomic32 __tsan_atomic32_compare_exchange_val( 204e337bf303dde9258bc7e2c87722a270fed96460bDmitry Vyukov volatile __tsan_atomic32 *a, __tsan_atomic32 c, __tsan_atomic32 v, 2052d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_memory_order mo, __tsan_memory_order fail_mo); 206e337bf303dde9258bc7e2c87722a270fed96460bDmitry Vyukov__tsan_atomic64 __tsan_atomic64_compare_exchange_val( 207e337bf303dde9258bc7e2c87722a270fed96460bDmitry Vyukov volatile __tsan_atomic64 *a, __tsan_atomic64 c, __tsan_atomic64 v, 2082d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_memory_order mo, __tsan_memory_order fail_mo); 2092d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if __TSAN_HAS_INT128 21063da509a995a3cac9bf5495b5cb94c527ff96ce1Dmitry Vyukov__tsan_atomic128 __tsan_atomic128_compare_exchange_val( 21163da509a995a3cac9bf5495b5cb94c527ff96ce1Dmitry Vyukov volatile __tsan_atomic128 *a, __tsan_atomic128 c, __tsan_atomic128 v, 2122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines __tsan_memory_order mo, __tsan_memory_order fail_mo); 2132d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif 214e337bf303dde9258bc7e2c87722a270fed96460bDmitry Vyukov 2152d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesvoid __tsan_atomic_thread_fence(__tsan_memory_order mo); 2162d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesvoid __tsan_atomic_signal_fence(__tsan_memory_order mo); 2177ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany 2187ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany#ifdef __cplusplus 2197ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany} // extern "C" 2207ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany#endif 2217ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany 2222d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif // TSAN_INTERFACE_ATOMIC_H 223