1fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org// Copyright 2012 the V8 project authors. All rights reserved. 23484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// Use of this source code is governed by a BSD-style license that can be 33484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// found in the LICENSE file. 4fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 5fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 6fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org// This file is an internal atomic implementation for compiler-based 7fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org// ThreadSanitizer. Use base/atomicops.h instead. 8fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 91e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org#ifndef V8_BASE_ATOMICOPS_INTERNALS_TSAN_H_ 101e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org#define V8_BASE_ATOMICOPS_INTERNALS_TSAN_H_ 11fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 12594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgnamespace v8 { 131e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.orgnamespace base { 14594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org 15594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org#ifndef TSAN_INTERFACE_ATOMIC_H 16594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org#define TSAN_INTERFACE_ATOMIC_H 17594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org 18fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 19fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.orgextern "C" { 20fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.orgtypedef char __tsan_atomic8; 21fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.orgtypedef short __tsan_atomic16; // NOLINT 22fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.orgtypedef int __tsan_atomic32; 23fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.orgtypedef long __tsan_atomic64; // NOLINT 24fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 251510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org#if defined(__SIZEOF_INT128__) \ 261510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org || (__clang_major__ * 100 + __clang_minor__ >= 302) 271510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgtypedef __int128 __tsan_atomic128; 281510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org#define __TSAN_HAS_INT128 1 291510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org#else 301510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgtypedef char __tsan_atomic128; 311510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org#define __TSAN_HAS_INT128 0 321510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org#endif 331510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 34fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.orgtypedef enum { 351510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_memory_order_relaxed, 361510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_memory_order_consume, 371510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_memory_order_acquire, 381510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_memory_order_release, 391510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_memory_order_acq_rel, 401510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_memory_order_seq_cst, 41fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} __tsan_memory_order; 42fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 43ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org__tsan_atomic8 __tsan_atomic8_load(const volatile __tsan_atomic8* a, 441510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_memory_order mo); 45ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org__tsan_atomic16 __tsan_atomic16_load(const volatile __tsan_atomic16* a, 46fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_memory_order mo); 47ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org__tsan_atomic32 __tsan_atomic32_load(const volatile __tsan_atomic32* a, 48fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_memory_order mo); 49ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org__tsan_atomic64 __tsan_atomic64_load(const volatile __tsan_atomic64* a, 50fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_memory_order mo); 51ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org__tsan_atomic128 __tsan_atomic128_load(const volatile __tsan_atomic128* a, 52fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_memory_order mo); 53fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 54ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orgvoid __tsan_atomic8_store(volatile __tsan_atomic8* a, __tsan_atomic8 v, 55fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_memory_order mo); 56ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orgvoid __tsan_atomic16_store(volatile __tsan_atomic16* a, __tsan_atomic16 v, 57fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_memory_order mo); 58ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orgvoid __tsan_atomic32_store(volatile __tsan_atomic32* a, __tsan_atomic32 v, 59fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_memory_order mo); 60ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orgvoid __tsan_atomic64_store(volatile __tsan_atomic64* a, __tsan_atomic64 v, 61fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_memory_order mo); 62ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orgvoid __tsan_atomic128_store(volatile __tsan_atomic128* a, __tsan_atomic128 v, 631510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_memory_order mo); 641510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 65ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org__tsan_atomic8 __tsan_atomic8_exchange(volatile __tsan_atomic8* a, 661510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_atomic8 v, __tsan_memory_order mo); 67ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org__tsan_atomic16 __tsan_atomic16_exchange(volatile __tsan_atomic16* a, 681510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_atomic16 v, __tsan_memory_order mo); 69ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org__tsan_atomic32 __tsan_atomic32_exchange(volatile __tsan_atomic32* a, 701510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_atomic32 v, __tsan_memory_order mo); 71ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org__tsan_atomic64 __tsan_atomic64_exchange(volatile __tsan_atomic64* a, 721510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_atomic64 v, __tsan_memory_order mo); 73ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org__tsan_atomic128 __tsan_atomic128_exchange(volatile __tsan_atomic128* a, 741510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_atomic128 v, __tsan_memory_order mo); 75fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 76ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org__tsan_atomic8 __tsan_atomic8_fetch_add(volatile __tsan_atomic8* a, 77fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic8 v, __tsan_memory_order mo); 78ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org__tsan_atomic16 __tsan_atomic16_fetch_add(volatile __tsan_atomic16* a, 79fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic16 v, __tsan_memory_order mo); 80ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org__tsan_atomic32 __tsan_atomic32_fetch_add(volatile __tsan_atomic32* a, 81fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic32 v, __tsan_memory_order mo); 82ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org__tsan_atomic64 __tsan_atomic64_fetch_add(volatile __tsan_atomic64* a, 83fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic64 v, __tsan_memory_order mo); 84ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org__tsan_atomic128 __tsan_atomic128_fetch_add(volatile __tsan_atomic128* a, 851510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_atomic128 v, __tsan_memory_order mo); 86fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 87ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org__tsan_atomic8 __tsan_atomic8_fetch_and(volatile __tsan_atomic8* a, 88fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic8 v, __tsan_memory_order mo); 89ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org__tsan_atomic16 __tsan_atomic16_fetch_and(volatile __tsan_atomic16* a, 90fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic16 v, __tsan_memory_order mo); 91ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org__tsan_atomic32 __tsan_atomic32_fetch_and(volatile __tsan_atomic32* a, 92fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic32 v, __tsan_memory_order mo); 93ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org__tsan_atomic64 __tsan_atomic64_fetch_and(volatile __tsan_atomic64* a, 94fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic64 v, __tsan_memory_order mo); 95ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org__tsan_atomic128 __tsan_atomic128_fetch_and(volatile __tsan_atomic128* a, 961510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_atomic128 v, __tsan_memory_order mo); 97fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 98ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org__tsan_atomic8 __tsan_atomic8_fetch_or(volatile __tsan_atomic8* a, 99fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic8 v, __tsan_memory_order mo); 100ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org__tsan_atomic16 __tsan_atomic16_fetch_or(volatile __tsan_atomic16* a, 101fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic16 v, __tsan_memory_order mo); 102ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org__tsan_atomic32 __tsan_atomic32_fetch_or(volatile __tsan_atomic32* a, 103fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic32 v, __tsan_memory_order mo); 104ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org__tsan_atomic64 __tsan_atomic64_fetch_or(volatile __tsan_atomic64* a, 105fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic64 v, __tsan_memory_order mo); 106ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org__tsan_atomic128 __tsan_atomic128_fetch_or(volatile __tsan_atomic128* a, 1071510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_atomic128 v, __tsan_memory_order mo); 108fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 109ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org__tsan_atomic8 __tsan_atomic8_fetch_xor(volatile __tsan_atomic8* a, 110fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic8 v, __tsan_memory_order mo); 111ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org__tsan_atomic16 __tsan_atomic16_fetch_xor(volatile __tsan_atomic16* a, 112fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic16 v, __tsan_memory_order mo); 113ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org__tsan_atomic32 __tsan_atomic32_fetch_xor(volatile __tsan_atomic32* a, 114fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic32 v, __tsan_memory_order mo); 115ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org__tsan_atomic64 __tsan_atomic64_fetch_xor(volatile __tsan_atomic64* a, 116fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic64 v, __tsan_memory_order mo); 117ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org__tsan_atomic128 __tsan_atomic128_fetch_xor(volatile __tsan_atomic128* a, 1181510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_atomic128 v, __tsan_memory_order mo); 119fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 120ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org__tsan_atomic8 __tsan_atomic8_fetch_nand(volatile __tsan_atomic8* a, 121fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic8 v, __tsan_memory_order mo); 122ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org__tsan_atomic16 __tsan_atomic16_fetch_nand(volatile __tsan_atomic16* a, 123fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic16 v, __tsan_memory_order mo); 124ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org__tsan_atomic32 __tsan_atomic32_fetch_nand(volatile __tsan_atomic32* a, 125fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic32 v, __tsan_memory_order mo); 126ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org__tsan_atomic64 __tsan_atomic64_fetch_nand(volatile __tsan_atomic64* a, 127fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic64 v, __tsan_memory_order mo); 128ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org__tsan_atomic128 __tsan_atomic128_fetch_nand(volatile __tsan_atomic128* a, 129ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org __tsan_atomic128 v, __tsan_memory_order mo); 130fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 131ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orgint __tsan_atomic8_compare_exchange_weak(volatile __tsan_atomic8* a, 132ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org __tsan_atomic8* c, __tsan_atomic8 v, __tsan_memory_order mo, 1331510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_memory_order fail_mo); 134ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orgint __tsan_atomic16_compare_exchange_weak(volatile __tsan_atomic16* a, 135ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org __tsan_atomic16* c, __tsan_atomic16 v, __tsan_memory_order mo, 1361510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_memory_order fail_mo); 137ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orgint __tsan_atomic32_compare_exchange_weak(volatile __tsan_atomic32* a, 138ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org __tsan_atomic32* c, __tsan_atomic32 v, __tsan_memory_order mo, 1391510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_memory_order fail_mo); 140ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orgint __tsan_atomic64_compare_exchange_weak(volatile __tsan_atomic64* a, 141ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org __tsan_atomic64* c, __tsan_atomic64 v, __tsan_memory_order mo, 1421510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_memory_order fail_mo); 143ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orgint __tsan_atomic128_compare_exchange_weak(volatile __tsan_atomic128* a, 144ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org __tsan_atomic128* c, __tsan_atomic128 v, __tsan_memory_order mo, 1451510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_memory_order fail_mo); 1461510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 147ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orgint __tsan_atomic8_compare_exchange_strong(volatile __tsan_atomic8* a, 148ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org __tsan_atomic8* c, __tsan_atomic8 v, __tsan_memory_order mo, 1491510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_memory_order fail_mo); 150ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orgint __tsan_atomic16_compare_exchange_strong(volatile __tsan_atomic16* a, 151ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org __tsan_atomic16* c, __tsan_atomic16 v, __tsan_memory_order mo, 1521510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_memory_order fail_mo); 153ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orgint __tsan_atomic32_compare_exchange_strong(volatile __tsan_atomic32* a, 154ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org __tsan_atomic32* c, __tsan_atomic32 v, __tsan_memory_order mo, 1551510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_memory_order fail_mo); 156ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orgint __tsan_atomic64_compare_exchange_strong(volatile __tsan_atomic64* a, 157ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org __tsan_atomic64* c, __tsan_atomic64 v, __tsan_memory_order mo, 1581510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_memory_order fail_mo); 159ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orgint __tsan_atomic128_compare_exchange_strong(volatile __tsan_atomic128* a, 160ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org __tsan_atomic128* c, __tsan_atomic128 v, __tsan_memory_order mo, 1611510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_memory_order fail_mo); 1621510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 1631510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org__tsan_atomic8 __tsan_atomic8_compare_exchange_val( 164ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org volatile __tsan_atomic8* a, __tsan_atomic8 c, __tsan_atomic8 v, 1651510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_memory_order mo, __tsan_memory_order fail_mo); 1661510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org__tsan_atomic16 __tsan_atomic16_compare_exchange_val( 167ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org volatile __tsan_atomic16* a, __tsan_atomic16 c, __tsan_atomic16 v, 1681510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_memory_order mo, __tsan_memory_order fail_mo); 1691510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org__tsan_atomic32 __tsan_atomic32_compare_exchange_val( 170ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org volatile __tsan_atomic32* a, __tsan_atomic32 c, __tsan_atomic32 v, 1711510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_memory_order mo, __tsan_memory_order fail_mo); 1721510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org__tsan_atomic64 __tsan_atomic64_compare_exchange_val( 173ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org volatile __tsan_atomic64* a, __tsan_atomic64 c, __tsan_atomic64 v, 1741510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_memory_order mo, __tsan_memory_order fail_mo); 1751510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org__tsan_atomic128 __tsan_atomic128_compare_exchange_val( 176ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org volatile __tsan_atomic128* a, __tsan_atomic128 c, __tsan_atomic128 v, 1771510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_memory_order mo, __tsan_memory_order fail_mo); 178fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 179fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.orgvoid __tsan_atomic_thread_fence(__tsan_memory_order mo); 1801510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvoid __tsan_atomic_signal_fence(__tsan_memory_order mo); 181fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} // extern "C" 182fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 183fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org#endif // #ifndef TSAN_INTERFACE_ATOMIC_H 184fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 185ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orginline Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr, 186fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org Atomic32 old_value, 187fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org Atomic32 new_value) { 188fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org Atomic32 cmp = old_value; 189fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic32_compare_exchange_strong(ptr, &cmp, new_value, 1901510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_memory_order_relaxed, __tsan_memory_order_relaxed); 191fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org return cmp; 192fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} 193fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 194ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orginline Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr, 195fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org Atomic32 new_value) { 196fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org return __tsan_atomic32_exchange(ptr, new_value, 1971510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_memory_order_relaxed); 198fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} 199fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 200ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orginline Atomic32 Acquire_AtomicExchange(volatile Atomic32* ptr, 201fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org Atomic32 new_value) { 202fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org return __tsan_atomic32_exchange(ptr, new_value, 2031510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_memory_order_acquire); 204fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} 205fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 206ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orginline Atomic32 Release_AtomicExchange(volatile Atomic32* ptr, 207fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org Atomic32 new_value) { 208fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org return __tsan_atomic32_exchange(ptr, new_value, 2091510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_memory_order_release); 210fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} 211fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 212ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orginline Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr, 213fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org Atomic32 increment) { 214fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org return increment + __tsan_atomic32_fetch_add(ptr, increment, 2151510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_memory_order_relaxed); 216fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} 217fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 218ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orginline Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr, 219fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org Atomic32 increment) { 220fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org return increment + __tsan_atomic32_fetch_add(ptr, increment, 2211510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_memory_order_acq_rel); 222fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} 223fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 224ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orginline Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr, 225fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org Atomic32 old_value, 226fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org Atomic32 new_value) { 227fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org Atomic32 cmp = old_value; 228fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic32_compare_exchange_strong(ptr, &cmp, new_value, 2291510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_memory_order_acquire, __tsan_memory_order_acquire); 230fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org return cmp; 231fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} 232fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 233ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orginline Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr, 234fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org Atomic32 old_value, 235fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org Atomic32 new_value) { 236fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org Atomic32 cmp = old_value; 237fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic32_compare_exchange_strong(ptr, &cmp, new_value, 2381510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_memory_order_release, __tsan_memory_order_relaxed); 239fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org return cmp; 240fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} 241fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 2425b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.orginline void NoBarrier_Store(volatile Atomic8* ptr, Atomic8 value) { 2435b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org __tsan_atomic8_store(ptr, value, __tsan_memory_order_relaxed); 2445b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org} 2455b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org 246ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orginline void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value) { 247fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic32_store(ptr, value, __tsan_memory_order_relaxed); 248fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} 249fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 250ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orginline void Acquire_Store(volatile Atomic32* ptr, Atomic32 value) { 251fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic32_store(ptr, value, __tsan_memory_order_relaxed); 252fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic_thread_fence(__tsan_memory_order_seq_cst); 253fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} 254fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 255ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orginline void Release_Store(volatile Atomic32* ptr, Atomic32 value) { 256fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic32_store(ptr, value, __tsan_memory_order_release); 257fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} 258fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 2595b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.orginline Atomic8 NoBarrier_Load(volatile const Atomic8* ptr) { 2605b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org return __tsan_atomic8_load(ptr, __tsan_memory_order_relaxed); 2615b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org} 2625b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org 263ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orginline Atomic32 NoBarrier_Load(volatile const Atomic32* ptr) { 264fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org return __tsan_atomic32_load(ptr, __tsan_memory_order_relaxed); 265fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} 266fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 267ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orginline Atomic32 Acquire_Load(volatile const Atomic32* ptr) { 268fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org return __tsan_atomic32_load(ptr, __tsan_memory_order_acquire); 269fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} 270fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 271ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orginline Atomic32 Release_Load(volatile const Atomic32* ptr) { 272fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic_thread_fence(__tsan_memory_order_seq_cst); 273fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org return __tsan_atomic32_load(ptr, __tsan_memory_order_relaxed); 274fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} 275fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 276ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orginline Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr, 277fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org Atomic64 old_value, 278fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org Atomic64 new_value) { 279fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org Atomic64 cmp = old_value; 280fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic64_compare_exchange_strong(ptr, &cmp, new_value, 2811510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_memory_order_relaxed, __tsan_memory_order_relaxed); 282fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org return cmp; 283fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} 284fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 285ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orginline Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr, 286fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org Atomic64 new_value) { 287fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org return __tsan_atomic64_exchange(ptr, new_value, __tsan_memory_order_relaxed); 288fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} 289fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 290ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orginline Atomic64 Acquire_AtomicExchange(volatile Atomic64* ptr, 291fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org Atomic64 new_value) { 292fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org return __tsan_atomic64_exchange(ptr, new_value, __tsan_memory_order_acquire); 293fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} 294fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 295ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orginline Atomic64 Release_AtomicExchange(volatile Atomic64* ptr, 296fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org Atomic64 new_value) { 297fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org return __tsan_atomic64_exchange(ptr, new_value, __tsan_memory_order_release); 298fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} 299fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 300ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orginline Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr, 301fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org Atomic64 increment) { 302fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org return increment + __tsan_atomic64_fetch_add(ptr, increment, 3031510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_memory_order_relaxed); 304fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} 305fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 306ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orginline Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr, 307fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org Atomic64 increment) { 308fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org return increment + __tsan_atomic64_fetch_add(ptr, increment, 3091510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_memory_order_acq_rel); 310fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} 311fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 312ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orginline void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value) { 313fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic64_store(ptr, value, __tsan_memory_order_relaxed); 314fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} 315fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 316ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orginline void Acquire_Store(volatile Atomic64* ptr, Atomic64 value) { 317fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic64_store(ptr, value, __tsan_memory_order_relaxed); 318fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic_thread_fence(__tsan_memory_order_seq_cst); 319fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} 320fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 321ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orginline void Release_Store(volatile Atomic64* ptr, Atomic64 value) { 322fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic64_store(ptr, value, __tsan_memory_order_release); 323fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} 324fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 325ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orginline Atomic64 NoBarrier_Load(volatile const Atomic64* ptr) { 326fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org return __tsan_atomic64_load(ptr, __tsan_memory_order_relaxed); 327fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} 328fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 329ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orginline Atomic64 Acquire_Load(volatile const Atomic64* ptr) { 330fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org return __tsan_atomic64_load(ptr, __tsan_memory_order_acquire); 331fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} 332fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 333ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orginline Atomic64 Release_Load(volatile const Atomic64* ptr) { 334fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic_thread_fence(__tsan_memory_order_seq_cst); 335fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org return __tsan_atomic64_load(ptr, __tsan_memory_order_relaxed); 336fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} 337fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 338ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orginline Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr, 339fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org Atomic64 old_value, 340fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org Atomic64 new_value) { 341fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org Atomic64 cmp = old_value; 342fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic64_compare_exchange_strong(ptr, &cmp, new_value, 3431510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_memory_order_acquire, __tsan_memory_order_acquire); 344fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org return cmp; 345fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} 346fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 347ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.orginline Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr, 348fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org Atomic64 old_value, 349fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org Atomic64 new_value) { 350fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org Atomic64 cmp = old_value; 351fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic64_compare_exchange_strong(ptr, &cmp, new_value, 3521510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org __tsan_memory_order_release, __tsan_memory_order_relaxed); 353fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org return cmp; 354fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} 355fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 356fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.orginline void MemoryBarrier() { 357fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org __tsan_atomic_thread_fence(__tsan_memory_order_seq_cst); 358fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} 359fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 3601e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org} // namespace base 361fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} // namespace v8 362fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 3631e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org#endif // V8_BASE_ATOMICOPS_INTERNALS_TSAN_H_ 364