diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,17 @@
 # Changelog for the Clash project
+
+## 1.6.2 *Fed 25th 2022*
+Fixed:
+  * Clash now compiles for users of Clang - i.e., all macOS users.
+  * The `trueDualPortBlockRam` model did not accurately simulate concurrent active ports, thus causing a Haskell/HDL simulation mismatch for `asyncFIFOSynchronizer`.
+  * `trueDualPortBlockRam` Haskell/HDL simulation mismatch for port enable.
+  * Sometimes `trueDualPortBlockRam` swapped the names of the ports in exception messages. [#2102](https://github.com/clash-lang/clash-compiler/pull/2102)
+  * The evaluator rule for unpack{Float,Double}# are now corrected to return boxed float and double instead of unboxed literals. [#2097](https://github.com/clash-lang/clash-compiler/issues/2097)
+
+Changed:
+  * The `trueDualPortBlockRam` model now only models read/write conflicts for concurrent active ports
+  * The `trueDualPortBlockRam` model now models write/write conflicts for concurrent active ports
+
 ## 1.6.1 *Feb 11th 2022*
 Changed:
   * We accidentally released `v1.6.0` with the Cabal flag `multiple-hidden` enabled. This is an experimental feature, supposed to be disabled by default for releases. `v1.6.1` disables it again.
diff --git a/clash-ghc.cabal b/clash-ghc.cabal
--- a/clash-ghc.cabal
+++ b/clash-ghc.cabal
@@ -1,6 +1,6 @@
 Cabal-version:        2.2
 Name:                 clash-ghc
-Version:              1.6.1
+Version:              1.6.2
 Synopsis:             Clash: a functional hardware description language - GHC frontend
 Description:
   Clash is a functional hardware description language that borrows both its
@@ -141,7 +141,6 @@
                       directory                 >= 1.2      && < 1.4,
                       extra                     >= 1.6      && < 1.8,
                       filepath                  >= 1.3      && < 1.5,
-                      ghc                       >= 8.6.0    && < 9.1,
                       process                   >= 1.2      && < 1.7,
                       hashable                  >= 1.1.2.3  && < 1.5,
                       haskeline                 >= 0.7.0.3  && < 0.9,
@@ -152,8 +151,8 @@
                       transformers              >= 0.5.2.0  && < 0.7,
                       unordered-containers      >= 0.2.1.0  && < 0.3,
 
-                      clash-lib                 == 1.6.1,
-                      clash-prelude             == 1.6.1,
+                      clash-lib                 == 1.6.2,
+                      clash-prelude             == 1.6.2,
                       concurrent-supply         >= 0.1.7    && < 0.2,
                       ghc-typelits-extra        >= 0.3.2    && < 0.5,
                       ghc-typelits-knownnat     >= 0.6      && < 0.8,
@@ -169,6 +168,17 @@
                       template-haskell          >= 2.8.0.0  && < 2.18,
                       utf8-string               >= 1.0.0.0  && < 1.1.0.0,
                       vector                    >= 0.11     && < 1.0
+
+  if os(windows)
+    -- 8.8 is broken on Windows - it randomly segfaults
+    Build-Depends: ghc >= 8.6.0 && < 8.8.0 || >= 8.10.0 && < 9.1
+  elif os(darwin)
+    -- 8.10 is broken on macOS - it exits tests with status code -11
+    Build-Depends: ghc >= 8.6.0 && < 8.10.0 || >= 9.0.0 && < 9.1
+  else
+    -- Unix
+    Build-Depends: ghc >= 8.6.0 && < 9.1
+
   if impl(ghc >= 8.10.0)
     Build-Depends:    exceptions                >= 0.10.4   && < 0.11,
 
@@ -182,7 +192,7 @@
     CPP-Options:      -DUSE_GHC_PATHS=1
 
   if os(windows)
-    Build-Depends:    Win32                     >= 2.3.1    && < 2.12
+    Build-Depends:    Win32                     >= 2.3.1    && < 2.14
   else
     Build-Depends:    unix                      >= 2.7.1    && < 2.9
 
diff --git a/src-ghc/Clash/GHC/Evaluator/Primitive.hs b/src-ghc/Clash/GHC/Evaluator/Primitive.hs
--- a/src-ghc/Clash/GHC/Evaluator/Primitive.hs
+++ b/src-ghc/Clash/GHC/Evaluator/Primitive.hs
@@ -96,7 +96,7 @@
   (TyConMap, TyConName, tyConDataCons)
 import           Clash.Core.TysPrim
 import           Clash.Core.Util
-  (mkRTree,mkVec,tyNatSize,dataConInstArgTys,primCo, mkSelectorCase)
+  (mkRTree,mkVec,tyNatSize,dataConInstArgTys,primCo, mkSelectorCase,undefinedPrims)
 import           Clash.Core.Var      (mkLocalId, mkTyVar)
 import           Clash.Debug
 import           Clash.GHC.GHC2Core  (modNameM)
@@ -121,9 +121,7 @@
 
 isUndefinedPrimVal :: Value -> Bool
 isUndefinedPrimVal (PrimVal (PrimInfo{primName}) _ _) =
-  primName `elem` [ Text.pack (show 'NP.undefined)
-                  ,"Clash.XException.errorX"
-                  ,"Control.Exception.Base.absentError"]
+  primName `elem` undefinedPrims
 isUndefinedPrimVal _ = False
 
 -- | Evaluation of primitive operations.
@@ -1587,14 +1585,6 @@
     | [Lit (NaturalLiteral n), _] <- args
     -> reduce (Literal (NaturalLiteral n))
 
-  "GHC.Types.C#"
-    | isSubj
-    , [Lit (CharLiteral c)] <- args
-    ->  let (_,tyView -> TyConApp charTcNm []) = splitFunForallTy ty
-            (Just charTc) = lookupUniqMap charTcNm tcm
-            [charDc] = tyConDataCons charTc
-        in  reduce (mkApps (Data charDc) [Left (Literal (CharLiteral c))])
-
   "GHC.Int.I8#"
     | isSubj
     , [Lit (IntLiteral i)] <- args
@@ -1790,11 +1780,15 @@
 
   "Clash.Class.BitPack.Internal.unpackFloat#"
     | [i] <- bitVectorLiterals' args
-    -> reduce . Literal . FloatLiteral $ unpack (toBV i :: BitVector 32)
+    -> let resTy = getResultTy tcm ty tys
+           val = unpack (toBV i :: BitVector 32)
+        in reduce (mkFloatCLit tcm val resTy)
 
   "Clash.Class.BitPack.Internal.unpackDouble#"
     | [i] <- bitVectorLiterals' args
-    -> reduce . Literal . DoubleLiteral $ unpack (toBV i :: BitVector 64)
+    -> let resTy = getResultTy tcm ty tys
+           val = unpack (toBV i :: BitVector 64)
+        in reduce (mkDoubleCLit tcm val resTy)
 
   -- expIndex#
   --   :: KnownNat m
@@ -4187,6 +4181,22 @@
   = Just (nTy,kn,(m,i),j)
   | otherwise
   = Nothing
+
+mkFloatCLit :: TyConMap -> Word32 -> Type -> Term
+mkFloatCLit tcm lit resTy =
+  App (Data floatDc) (Literal (FloatLiteral lit))
+ where
+  (_, tyView -> TyConApp floatTcNm []) = splitFunForallTy resTy
+  (Just floatTc) = lookupUniqMap floatTcNm tcm
+  [floatDc] = tyConDataCons floatTc
+
+mkDoubleCLit :: TyConMap -> Word64 -> Type -> Term
+mkDoubleCLit tcm lit resTy =
+  App (Data doubleDc) (Literal (DoubleLiteral lit))
+ where
+  (_, tyView -> TyConApp doubleTcNm []) = splitFunForallTy resTy
+  (Just doubleTc) = lookupUniqMap doubleTcNm tcm
+  [doubleDc] = tyConDataCons doubleTc
 
 -- From an argument list to function of type
 --   forall n. KnownNat n => ...
