diff --git a/CHANGES.markdown b/CHANGES.markdown
--- a/CHANGES.markdown
+++ b/CHANGES.markdown
@@ -1,3 +1,11 @@
+## Changes in 0.8.7 [2022.08.11]
+ - Backport new instances from GHC 9.2.2/`base-4.16.1.0`:
+   * `Ix` instances for various integral types in `Foreign.C.Types`,
+     `Foreign.Ptr`, and `System.Posix.Types`. For a complete list of such types,
+     see https://gitlab.haskell.org/ghc/ghc/-/merge_requests/7385.
+ - Backport a bugfix for the `Ord1 Down` instance from GHC 9.4/`base-4.17` such
+   that it now uses reverse sort order.
+
 ## Changes in 0.8.6 [2021.10.29]
  - Backport `Eq`, `Ord`, `Bounded`, `Enum`, and `Ix` instances for `Solo`,
    introduced in GHC 9.2/`base-4.16`
diff --git a/README.markdown b/README.markdown
--- a/README.markdown
+++ b/README.markdown
@@ -67,6 +67,7 @@
  * `Functor`, `Applicative`, `Monad`, `Alternative`, and `MonadPlus` instances
    for `Kleisli`
  * `Ix` instances for tuples of size 6 through 15
+ * `Ix` instances for integral types in `Foreign.C.Types`, `Foreign.Ptr`, and `System.Posix.Types`
  * `Monad` instance for `(,)`
  * `Monad` instance for `WrappedMonad`
  * `MonadFail`, `Monoid`, and `Semigroup` instances for strict `ST`
@@ -100,6 +101,7 @@
 
 ## Supported versions of GHC/`base`
 
+ * `ghc-9.4.*`  / `base-4.17.*`
  * `ghc-9.2.*`  / `base-4.16.*`
  * `ghc-9.0.*`  / `base-4.15.*`
  * `ghc-8.10.*` / `base-4.14.*`
diff --git a/base-orphans.cabal b/base-orphans.cabal
--- a/base-orphans.cabal
+++ b/base-orphans.cabal
@@ -1,13 +1,13 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.34.5.
+-- This file has been generated from package.yaml by hpack version 0.35.0.
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 804afa44cbb02fb57224b372fbde6da86b3817761980426d9505942e9b67551f
+-- hash: 72579eb12963b1336e2e979d497378f6dac77805e17a8e53f86b6b2984fcab08
 
 name:                base-orphans
-version:             0.8.6
+version:             0.8.7
 synopsis:            Backwards-compatible orphan instances for base
 description:         @base-orphans@ defines orphan instances that mimic instances available in
                      later versions of @base@ to a wider (older) range of compilers.
@@ -36,7 +36,7 @@
 license-file:        LICENSE
 build-type:          Simple
 tested-with:
-    GHC == 7.0.4 , GHC == 7.2.2 , GHC == 7.4.2 , GHC == 7.6.3 , GHC == 7.8.4 , GHC == 7.10.3 , GHC == 8.0.2 , GHC == 8.2.2 , GHC == 8.4.4 , GHC == 8.6.5 , GHC == 8.8.4 , GHC == 8.10.7 , GHC == 9.0.1 , GHC == 9.2.1
+    GHC == 7.0.4 , GHC == 7.2.2 , GHC == 7.4.2 , GHC == 7.6.3 , GHC == 7.8.4 , GHC == 7.10.3 , GHC == 8.0.2 , GHC == 8.2.2 , GHC == 8.4.4 , GHC == 8.6.5 , GHC == 8.8.4 , GHC == 8.10.7 , GHC == 9.0.2 , GHC == 9.2.2
 extra-source-files:
     CHANGES.markdown
     README.markdown
diff --git a/src/Data/Orphans.hs b/src/Data/Orphans.hs
--- a/src/Data/Orphans.hs
+++ b/src/Data/Orphans.hs
@@ -91,7 +91,7 @@
 # endif
 #endif
 
-#if !(MIN_VERSION_base(4,16,0))
+#if !(MIN_VERSION_base(4,16,1))
 import           Data.Orphans.Prelude
 #endif
 
@@ -1063,7 +1063,10 @@
 instance Eq1 Down where
     liftEq eq (Down x) (Down y) = eq x y
 instance Ord1 Down where
-    liftCompare comp (Down x) (Down y) = comp x y
+    liftCompare comp (Down x) (Down y) = case comp x y of
+        LT -> GT
+        EQ -> EQ
+        GT -> LT
 instance Read1 Down where
     liftReadsPrec rp _ = readsData $
          readsUnaryWith rp "Down" Down
@@ -1841,6 +1844,122 @@
       inRange (l, u) i
 
     -- Default method for index
+# endif
+#endif
+
+#if !(MIN_VERSION_base(4,16,1))
+# if MIN_VERSION_base(4,5,0)
+-- These are guarded on base-4.5.0 because that was the first version which
+-- exported their constructors, which is necessary to use
+-- GeneralizedNewtypeDeriving. See
+-- https://gitlab.haskell.org/ghc/ghc/-/issues/5529.
+deriving instance Ix CChar
+deriving instance Ix CSChar
+deriving instance Ix CUChar
+deriving instance Ix CShort
+deriving instance Ix CUShort
+deriving instance Ix CInt
+deriving instance Ix CUInt
+deriving instance Ix CLong
+deriving instance Ix CULong
+deriving instance Ix CLLong
+deriving instance Ix CULLong
+deriving instance Ix CPtrdiff
+deriving instance Ix CSize
+deriving instance Ix CWchar
+deriving instance Ix CSigAtomic
+deriving instance Ix CIntPtr
+deriving instance Ix CUIntPtr
+deriving instance Ix CIntMax
+deriving instance Ix CUIntMax
+# endif
+# if MIN_VERSION_base(4,10,0)
+deriving instance Ix CBool
+# endif
+
+# if MIN_VERSION_base(4,10,0)
+-- These are guarded on base-4.10.0 because that was the first version which
+-- exported their constructors, which is necessary to use
+-- GeneralizedNewtypeDeriving. See
+-- https://gitlab.haskell.org/ghc/ghc/-/issues/11983.
+deriving instance Ix WordPtr
+deriving instance Ix IntPtr
+# endif
+
+# if MIN_VERSION_base(4,5,0)
+-- These are guarded on base-4.5.0 because that was the first version which
+-- exported their constructors, which is necessary to use
+-- GeneralizedNewtypeDeriving. See
+-- https://gitlab.haskell.org/ghc/ghc/-/issues/5529.
+#  if defined(HTYPE_DEV_T)
+deriving instance Ix CDev
+# endif
+#  if defined(HTYPE_INO_T)
+deriving instance Ix CIno
+#  endif
+#  if defined(HTYPE_MODE_T)
+deriving instance Ix CMode
+#  endif
+#  if defined(HTYPE_OFF_T)
+deriving instance Ix COff
+#  endif
+#  if defined(HTYPE_PID_T)
+deriving instance Ix CPid
+#  endif
+#  if defined(HTYPE_SSIZE_T)
+deriving instance Ix CSsize
+#  endif
+#  if defined(HTYPE_GID_T)
+deriving instance Ix CGid
+#  endif
+#  if defined(HTYPE_NLINK_T)
+deriving instance Ix CNlink
+#  endif
+#  if defined(HTYPE_UID_T)
+deriving instance Ix CUid
+#  endif
+#  if defined(HTYPE_CC_T)
+deriving instance Ix CCc
+#  endif
+#  if defined(HTYPE_SPEED_T)
+deriving instance Ix CSpeed
+#  endif
+#  if defined(HTYPE_TCFLAG_T)
+deriving instance Ix CTcflag
+#  endif
+#  if defined(HTYPE_RLIM_T)
+deriving instance Ix CRLim
+#  endif
+deriving instance Ix Fd
+# endif
+#  if MIN_VERSION_base(4,10,0)
+#  if defined(HTYPE_BLKSIZE_T)
+deriving instance Ix CBlkSize
+#  endif
+#  if defined(HTYPE_BLKCNT_T)
+deriving instance Ix CBlkCnt
+#  endif
+#  if defined(HTYPE_CLOCKID_T)
+deriving instance Ix CClockId
+#  endif
+#  if defined(HTYPE_FSBLKCNT_T)
+deriving instance Ix CFsBlkCnt
+#  endif
+#  if defined(HTYPE_FSFILCNT_T)
+deriving instance Ix CFsFilCnt
+#  endif
+#  if defined(HTYPE_ID_T)
+deriving instance Ix CId
+#  endif
+#  if defined(HTYPE_KEY_T)
+deriving instance Ix CKey
+#  endif
+#  if defined(HTYPE_SOCKLEN_T)
+deriving instance Ix CSocklen
+#  endif
+#  if defined(HTYPE_NFDS_T)
+deriving instance Ix CNfds
+#  endif
 # endif
 #endif
 
diff --git a/src/Data/Orphans/Prelude.hs b/src/Data/Orphans/Prelude.hs
--- a/src/Data/Orphans/Prelude.hs
+++ b/src/Data/Orphans/Prelude.hs
@@ -21,7 +21,7 @@
 Note that this module does not export any modules that could introduce name clashes.
 -}
 module Data.Orphans.Prelude
-#if MIN_VERSION_base(4,16,0)
+#if MIN_VERSION_base(4,16,1)
     () where
 #else
     ( module OrphansPrelude
diff --git a/test/Data/Version/OrphansSpec.hs b/test/Data/Version/OrphansSpec.hs
--- a/test/Data/Version/OrphansSpec.hs
+++ b/test/Data/Version/OrphansSpec.hs
@@ -18,7 +18,10 @@
   describe "Data Version instance" $
     it "allows obtaining a Version constructor" $
       dataTypeName (dataTypeOf (Version [1,2,3] [])) `shouldBe`
-#if __GLASGOW_HASKELL__ >= 801
+-- Some old versions of GHC incorrectly return "Version" instead of
+-- "Data.Version.Version" due to
+-- https://gitlab.haskell.org/ghc/ghc/-/issues/20371.
+#if __GLASGOW_HASKELL__ >= 801 && __GLASGOW_HASKELL__ < 903
         "Version"
 #else
         "Data.Version.Version"
