+/* --- @MPX_USUBN@ --- *
+ *
+ * Arguments: @@dv, dvl@ = destination vector base and limit
+ * @n@ = other addend
+ *
+ * Use: Subtracts a small integer from a multiprecision number.
+ */
+
+#define MPX_USUBN(dv, dvl, n) do { \
+ mpw *_ddv = (dv), *_ddvl = (dvl); \
+ mpw _c = (n); \
+ \
+ while (_ddv < _ddvl) { \
+ mpd _x = (mpd)*_ddv - (mpd)_c; \
+ *_ddv++ = MPW(_x); \
+ if (_x >> MPW_BITS) \
+ _c = 1; \
+ else \
+ break; \
+ } \
+} while (0)
+
+/* --- @mpx_umul@ --- *
+ *
+ * Arguments: @mpw *dv, *dvl@ = destination vector base and limit
+ * @const mpw *av, *avl@ = multiplicand vector base and limit
+ * @const mpw *bv, *bvl@ = multiplier vector base and limit
+ *
+ * Returns: ---
+ *
+ * Use: Performs unsigned integer multiplication. If the result
+ * overflows the desination vector, high-order bits are
+ * discarded. The result vector may not overlap the argument
+ * vectors in any way.
+ */
+
+extern void mpx_umul(mpw */*dv*/, mpw */*dvl*/,
+ const mpw */*av*/, const mpw */*avl*/,
+ const mpw */*bv*/, const mpw */*bvl*/);
+