diff --git a/celt/arch.h b/celt/arch.h
index 9f74ddd267179f769d0cdc7a3b97315973876688..ae8da17c040aee53137e3adc39fb8a92173c8c0d 100644
--- a/celt/arch.h
+++ b/celt/arch.h
@@ -78,6 +78,15 @@ static OPUS_INLINE void _celt_fatal(const char *str, const char *file, int line)
 #define UADD32(a,b) ((a)+(b))
 #define USUB32(a,b) ((a)-(b))
 
+/* Set this if opus_int64 is a native type of the CPU. */
+/* Assume that all LP64 architectures have fast 64-bit types; also x86_64
+   (which can be ILP32 for x32) and Win64 (which is LLP64). */
+#if defined(__x86_64__) || defined(__LP64__) || defined(_WIN64)
+#define OPUS_FAST_INT64 1
+#else
+#define OPUS_FAST_INT64 0
+#endif
+
 #define PRINT_MIPS(file)
 
 #ifdef FIXED_POINT
diff --git a/silk/macros.h b/silk/macros.h
index 80250792bd13d37ae7ba329edbb839ab457463a4..1ba614acd103b7aa515dc95c4c181694f4110c31 100644
--- a/silk/macros.h
+++ b/silk/macros.h
@@ -34,6 +34,7 @@ POSSIBILITY OF SUCH DAMAGE.
 
 #include "opus_types.h"
 #include "opus_defines.h"
+#include "arch.h"
 
 #if OPUS_GNUC_PREREQ(3, 0)
 #define opus_likely(x)       (__builtin_expect(!!(x), 1))
@@ -43,13 +44,6 @@ POSSIBILITY OF SUCH DAMAGE.
 #define opus_unlikely(x)     (!!(x))
 #endif
 
-/* Set this if opus_int64 is a native type of the CPU. */
-#if defined(__x86_64__) || defined(__LP64__) || defined(_WIN64)
-#define OPUS_FAST_INT64 1
-#else
-#define OPUS_FAST_INT64 0
-#endif
-
 /* This is an OPUS_INLINE header file for general platform. */
 
 /* (a32 * (opus_int32)((opus_int16)(b32))) >> 16 output have to be 32bit int */