| OLD | NEW | 
|---|
|  | (Empty) | 
| 1 /* |  | 
| 2  * Copyright 2013 Google Inc. |  | 
| 3  * |  | 
| 4  * Use of this source code is governed by a BSD-style license that can be |  | 
| 5  * found in the LICENSE file. |  | 
| 6  */ |  | 
| 7 |  | 
| 8 #ifndef SkAtomics_sync_DEFINED |  | 
| 9 #define SkAtomics_sync_DEFINED |  | 
| 10 |  | 
| 11 /** GCC/Clang __sync based atomics. */ |  | 
| 12 |  | 
| 13 #include <stdint.h> |  | 
| 14 |  | 
| 15 static inline __attribute__((always_inline)) int32_t sk_atomic_inc(int32_t* addr
    ) { |  | 
| 16     return __sync_fetch_and_add(addr, 1); |  | 
| 17 } |  | 
| 18 |  | 
| 19 static inline __attribute__((always_inline)) int64_t sk_atomic_inc(int64_t* addr
    ) { |  | 
| 20 #if defined(__mips__) && !defined(__LP64__) && !defined(__GCC_HAVE_SYNC_COMPARE_
    AND_SWAP_8) |  | 
| 21     /** Some versions of the GCC 32-bit MIPS toolchains (e.g. 4.8) for android a
    re missing |  | 
| 22      * support for the __sync* functions that operate on 64-bit values. The work
    around |  | 
| 23      * is to use __atomic* functions until we can move everything to <stdatomic.
    h>. |  | 
| 24      */ |  | 
| 25     return __atomic_fetch_add(addr, 1, __ATOMIC_SEQ_CST); |  | 
| 26 #else |  | 
| 27     return __sync_fetch_and_add(addr, 1); |  | 
| 28 #endif |  | 
| 29 } |  | 
| 30 |  | 
| 31 static inline __attribute__((always_inline)) int32_t sk_atomic_add(int32_t* addr
    , int32_t inc) { |  | 
| 32     return __sync_fetch_and_add(addr, inc); |  | 
| 33 } |  | 
| 34 |  | 
| 35 static inline __attribute__((always_inline)) int32_t sk_atomic_dec(int32_t* addr
    ) { |  | 
| 36     return __sync_fetch_and_add(addr, -1); |  | 
| 37 } |  | 
| 38 |  | 
| 39 static inline __attribute__((always_inline)) void sk_membar_acquire__after_atomi
    c_dec() { } |  | 
| 40 |  | 
| 41 static inline __attribute__((always_inline)) bool sk_atomic_cas(int32_t* addr, |  | 
| 42                                                                 int32_t before, |  | 
| 43                                                                 int32_t after) { |  | 
| 44     return __sync_bool_compare_and_swap(addr, before, after); |  | 
| 45 } |  | 
| 46 |  | 
| 47 static inline __attribute__((always_inline)) void* sk_atomic_cas(void** addr, |  | 
| 48                                                                  void* before, |  | 
| 49                                                                  void* after) { |  | 
| 50     return __sync_val_compare_and_swap(addr, before, after); |  | 
| 51 } |  | 
| 52 |  | 
| 53 static inline __attribute__((always_inline)) void sk_membar_acquire__after_atomi
    c_conditional_inc() { } |  | 
| 54 |  | 
| 55 #endif |  | 
| OLD | NEW | 
|---|