diff --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,13 @@
 # Changelog
 
+- 0.2.1 (2026-10-27)
+  * Under the llvm flag on x86_64, the library is compiled with LLVM's
+    x86 cmov converter off (-optlc=-x86-cmov-converter=false). The
+    converter rewrites a conditional move whose operand is a load as a
+    branch, and so made the borrow-masked correction of sub_mod,
+    sub_mod#, and sub_mod_c# a branch on the borrow, which depends on
+    the operands. NCG builds, and aarch64, were unaffected.
+
 - 0.2.0 (2026-08-01)
   * Addresses a couple of minor issues detected by an LLM scan:
 
diff --git a/ppad-fixed.cabal b/ppad-fixed.cabal
--- a/ppad-fixed.cabal
+++ b/ppad-fixed.cabal
@@ -1,6 +1,6 @@
 cabal-version:      3.0
 name:               ppad-fixed
-version:            0.2.0
+version:            0.2.1
 synopsis:           Large fixed-width words and constant-time arithmetic.
 license:            MIT
 license-file:       LICENSE
@@ -31,6 +31,11 @@
       -Wall
   if flag(llvm)
     ghc-options: -fllvm -O2
+  -- LLVM's x86 backend rewrites a cmov whose operand is a load as a
+  -- branch (its cmov converter), which makes sub_mod#'s borrow-masked
+  -- correction a branch on the borrow; keep the cmov.
+  if flag(llvm) && arch(x86_64)
+    ghc-options: -optlc=-x86-cmov-converter=false
   exposed-modules:
       Data.Choice
     , Data.Word.Limb
