| Index: src/ports/SkAtomics_win.h
|
| diff --git a/src/ports/SkAtomics_win.h b/src/ports/SkAtomics_win.h
|
| index 16923947ef0bbb3268175fbc526fc2b64338e5f6..4b344dde779a1ee1f548495d7c6d1b1e346b2231 100644
|
| --- a/src/ports/SkAtomics_win.h
|
| +++ b/src/ports/SkAtomics_win.h
|
| @@ -25,21 +25,39 @@ static inline int32_t sk_atomic_inc(int32_t* addr) {
|
| return _InterlockedIncrement(reinterpret_cast<long*>(addr)) - 1;
|
| }
|
|
|
| +static inline int64_t sk_atomic_inc(int64_t* addr) {
|
| + // InterlockedIncrement returns the new value, we want to return the old.
|
| + return InterlockedIncrement64(addr) - 1;
|
| +}
|
| +
|
| static inline int32_t sk_atomic_add(int32_t* addr, int32_t inc) {
|
| return _InterlockedExchangeAdd(reinterpret_cast<long*>(addr), static_cast<long>(inc));
|
| }
|
|
|
| +static inline int64_t sk_atomic_add(int64_t* addr, int64_t inc) {
|
| + return InterlockedExchangeAdd64(addr, inc);
|
| +}
|
| +
|
| static inline int32_t sk_atomic_dec(int32_t* addr) {
|
| // InterlockedDecrement returns the new value, we want to return the old.
|
| return _InterlockedDecrement(reinterpret_cast<long*>(addr)) + 1;
|
| }
|
|
|
| +static inline int64_t sk_atomic_dec(int64_t* addr) {
|
| + // InterlockedDecrement returns the new value, we want to return the old.
|
| + return InterlockedDecrement64(addr) + 1;
|
| +}
|
| +
|
| static inline void sk_membar_acquire__after_atomic_dec() { }
|
|
|
| static inline bool sk_atomic_cas(int32_t* addr, int32_t before, int32_t after) {
|
| return _InterlockedCompareExchange(reinterpret_cast<long*>(addr), after, before) == before;
|
| }
|
|
|
| +static inline bool sk_atomic_cas(int64_t* addr, int64_t before, int64_t after) {
|
| + return _InterlockedCompareExchange64(addr, after, before) == before;
|
| +}
|
| +
|
| static inline void* sk_atomic_cas(void** addr, void* before, void* after) {
|
| return InterlockedCompareExchangePointer(addr, after, before);
|
| }
|
|
|