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); |
} |