diff --git a/primitive-unaligned.cabal b/primitive-unaligned.cabal
--- a/primitive-unaligned.cabal
+++ b/primitive-unaligned.cabal
@@ -1,6 +1,6 @@
 cabal-version: 2.2
 name: primitive-unaligned
-version: 0.1.1.1
+version: 0.1.1.2
 synopsis: Unaligned access to primitive arrays
 description: Unaligned access to primitive arrays. The offsets are given in bytes rather than elements.
 homepage: https://github.com/haskell-primitive/primitive-unaligned
@@ -22,9 +22,9 @@
     , base >=4.12.0.0 && <5
     , primitive >=0.6.4 && <0.8
   hs-source-dirs: src
-  if arch(x86_64) || arch(aarch64) || arch(ppc64)
+  if arch(aarch64) || arch(alpha) || arch(ia64) || arch(ppc64) || arch(x86_64)
     hs-source-dirs: src-64
-  if arch(i386) || arch(arm)
+  if arch(arm) || arch(hppa) || arch(i386) || arch(m68k) || arch(mips) || arch(rs6000) || arch(s390) || arch(sparc) || arch(vax)
     hs-source-dirs: src-32
   ghc-options: -Wall -O2
   default-language: Haskell2010
diff --git a/src-64/Data/Primitive/Unaligned/Mach.hs b/src-64/Data/Primitive/Unaligned/Mach.hs
--- a/src-64/Data/Primitive/Unaligned/Mach.hs
+++ b/src-64/Data/Primitive/Unaligned/Mach.hs
@@ -1,3 +1,4 @@
+{-# language CPP #-}
 {-# language MagicHash #-}
 {-# language UnboxedTuples #-}
 
@@ -17,11 +18,19 @@
 
 indexUnalignedWord64Array# :: ByteArray# -> Int# -> Word64
 indexUnalignedWord64Array# a i =
-  W64# (E.indexWord8ArrayAsWord# a i)
+  W64# (
+#if MIN_VERSION_base(4,17,0)
+    E.wordToWord64#
+#endif
+    (E.indexWord8ArrayAsWord# a i))
 
 indexUnalignedInt64Array# :: ByteArray# -> Int# -> Int64
 indexUnalignedInt64Array# a i =
-  I64# (E.indexWord8ArrayAsInt# a i)
+  I64# (
+#if MIN_VERSION_base(4,17,0)
+    E.intToInt64#
+#endif
+    (E.indexWord8ArrayAsInt# a i))
 
 readUnalignedWord64Array# ::
      MutableByteArray# s
@@ -30,7 +39,12 @@
   -> (# State# s, Word64 #)
 readUnalignedWord64Array# a i s0 =
   case E.readWord8ArrayAsWord# a i s0 of
-    (# s1, r #) -> (# s1, W64# r #)
+    (# s1, r #) -> (# s1, W64# (
+#if MIN_VERSION_base(4,17,0)
+        E.wordToWord64#
+#endif
+        r)
+        #)
 
 readUnalignedInt64Array# ::
      MutableByteArray# s
@@ -39,7 +53,11 @@
   -> (# State# s, Int64 #)
 readUnalignedInt64Array# a i s0 =
   case E.readWord8ArrayAsInt# a i s0 of
-    (# s1, r #) -> (# s1, I64# r #)
+    (# s1, r #) -> (# s1, I64# (
+#if MIN_VERSION_base(4,17,0)
+       E.intToInt64#
+#endif
+        r) #)
 
 writeUnalignedWord64Array# ::
        MutableByteArray# s
@@ -48,7 +66,11 @@
     -> State# s
     -> State# s
 writeUnalignedWord64Array# a i (W64# w) =
-  E.writeWord8ArrayAsWord# a i w
+  E.writeWord8ArrayAsWord# a i (
+#if MIN_VERSION_base(4,17,0)
+    E.word64ToWord#
+#endif
+    w)
 
 writeUnalignedInt64Array# ::
        MutableByteArray# s
@@ -57,4 +79,8 @@
     -> State# s
     -> State# s
 writeUnalignedInt64Array# a i (I64# w) =
-  E.writeWord8ArrayAsInt# a i w
+  E.writeWord8ArrayAsInt# a i (
+#if MIN_VERSION_base(4,17,0)
+    E.int64ToInt#
+#endif
+    w)
