diff --git a/include/core/SkThread.h b/include/core/SkThread.h
index 403b288..c8f13a7 100644
--- a/include/core/SkThread.h
+++ b/include/core/SkThread.h
@@ -22,20 +22,17 @@
  *  No additional memory barrier is required; this must act as a compiler barrier.
  */
 static int32_t sk_atomic_add(int32_t* addr, int32_t inc);
-static int64_t sk_atomic_add(int64_t* addr, int64_t inc);
 
 /** Atomically subtracts one from the int referenced by addr and returns the previous value.
  *  This must act as a release (SL/S) memory barrier and as a compiler barrier.
  */
 static int32_t sk_atomic_dec(int32_t* addr);
-static int64_t sk_atomic_dec(int64_t* addr);
 
 /** Atomic compare and set.
  *  If *addr == before, set *addr to after and return true, otherwise return false.
  *  This must act as a release (SL/S) memory barrier and as a compiler barrier.
  */
 static bool sk_atomic_cas(int32_t* addr, int32_t before, int32_t after);
-static bool sk_atomic_cas(int64_t* addr, int64_t before, int64_t after);
 
 /** If sk_atomic_dec does not act as an acquire (L/SL) barrier,
  *  this must act as an acquire (L/SL) memory barrier and as a compiler barrier.
diff --git a/src/ports/SkAtomics_sync.h b/src/ports/SkAtomics_sync.h
index 8135ae2..ed9e3d1 100644
--- a/src/ports/SkAtomics_sync.h
+++ b/src/ports/SkAtomics_sync.h
@@ -24,18 +24,10 @@
     return __sync_fetch_and_add(addr, inc);
 }
 
-static inline __attribute__((always_inline)) int64_t sk_atomic_add(int64_t* addr, int64_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)) int64_t sk_atomic_dec(int64_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,
@@ -44,12 +36,6 @@
     return __sync_bool_compare_and_swap(addr, before, after);
 }
 
-static inline __attribute__((always_inline)) bool sk_atomic_cas(int64_t* addr,
-                                                                int64_t before,
-                                                                int64_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) {
diff --git a/src/ports/SkAtomics_win.h b/src/ports/SkAtomics_win.h
index 4b344dd..a1876d2 100644
--- a/src/ports/SkAtomics_win.h
+++ b/src/ports/SkAtomics_win.h
@@ -34,30 +34,17 @@
     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);
 }
