Use CRYPTO_addc_w in bn_from_montgomery_in_place

This is a bit more readable than the bit tricks, which compilers don't
reliably detect anyway.

Change-Id: I922976b5f5c3b0b8c3f02afd95f3d6783f6ffaf6
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/82047
Reviewed-by: Lily Chen <chlily@google.com>
Auto-Submit: David Benjamin <davidben@google.com>
Commit-Queue: Lily Chen <chlily@google.com>
diff --git a/crypto/fipsmodule/bn/montgomery.cc.inc b/crypto/fipsmodule/bn/montgomery.cc.inc
index 6281b29..b3d7107 100644
--- a/crypto/fipsmodule/bn/montgomery.cc.inc
+++ b/crypto/fipsmodule/bn/montgomery.cc.inc
@@ -203,10 +203,7 @@
   BN_ULONG carry = 0;
   for (size_t i = 0; i < num_n; i++) {
     BN_ULONG v = bn_mul_add_words(a + i, n, num_n, a[i] * n0);
-    v += carry + a[i + num_n];
-    carry |= (v != a[i + num_n]);
-    carry &= (v <= a[i + num_n]);
-    a[i + num_n] = v;
+    a[i + num_n] = CRYPTO_addc_w(a[i + num_n], v, carry, &carry);
   }
 
   // Shift |num_n| words to divide by R. We have |a| < 2 * |n|. Note that |a|