diff options
Diffstat (limited to 'chromium/third_party/skia/src/ports/SkAtomics_sync.h')
-rw-r--r-- | chromium/third_party/skia/src/ports/SkAtomics_sync.h | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/chromium/third_party/skia/src/ports/SkAtomics_sync.h b/chromium/third_party/skia/src/ports/SkAtomics_sync.h new file mode 100644 index 00000000000..b0d17527f07 --- /dev/null +++ b/chromium/third_party/skia/src/ports/SkAtomics_sync.h @@ -0,0 +1,43 @@ +/* + * Copyright 2013 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef SkAtomics_sync_DEFINED +#define SkAtomics_sync_DEFINED + +/** GCC/Clang __sync based atomics. */ + +#include <stdint.h> + +static inline __attribute__((always_inline)) int32_t sk_atomic_inc(int32_t* addr) { + return __sync_fetch_and_add(addr, 1); +} + +static inline __attribute__((always_inline)) int32_t sk_atomic_add(int32_t* addr, int32_t inc) { + return __sync_fetch_and_add(addr, inc); +} + +static inline __attribute__((always_inline)) int32_t sk_atomic_dec(int32_t* addr) { + return __sync_fetch_and_add(addr, -1); +} + +static inline __attribute__((always_inline)) void sk_membar_acquire__after_atomic_dec() { } + +static inline __attribute__((always_inline)) bool sk_atomic_cas(int32_t* addr, + int32_t before, + int32_t after) { + return __sync_bool_compare_and_swap(addr, before, after); +} + +static inline __attribute__((always_inline)) void* sk_atomic_cas(void** addr, + void* before, + void* after) { + return __sync_val_compare_and_swap(addr, before, after); +} + +static inline __attribute__((always_inline)) void sk_membar_acquire__after_atomic_conditional_inc() { } + +#endif |