+/* --- @mpx_2c@ --- *
+ *
+ * Arguments: @mpw *dv, *dvl@ = destination vector
+ * @const mpw *v, *vl@ = source vector
+ *
+ * Returns: ---
+ *
+ * Use: Calculates the two's complement of @v@.
+ */
+
+void mpx_2c(mpw *dv, mpw *dvl, const mpw *v, const mpw *vl)
+{
+ mpw c = 0;
+ while (dv < dvl && v < vl)
+ *dv++ = c = MPW(~*v++);
+ if (dv < dvl) {
+ if (c > MPW_MAX / 2)
+ c = MPW(~0);
+ while (dv < dvl)
+ *dv++ = c;
+ }
+ MPX_UADDN(dv, dvl, 1);
+}
+