- if (m > KARATSUBA_CUTOFF)
- mpx_kmul(sv, ssv, avm, avl, bvm, bvl, ssv, svl);
- else
- mpx_umul(sv, ssv, avm, avl, bvm, bvl);
- UADD(rdv, sv, ssv);
- USUB(tdv, sv, ssv);
-
+ if (avl == avm || bvl == bvm)
+ MPX_ZERO(rdv + m + 1, dvl);
+ else {
+ if (m > KARATSUBA_CUTOFF)
+ mpx_kmul(sv, ssv, avm, avl, bvm, bvl, ssv, svl);
+ else
+ mpx_umul(sv, ssv, avm, avl, bvm, bvl);
+ MPX_COPY(rdv + m + 1, dvl, svm + 1, svn);
+ UADD(rdv, sv, svm + 1);
+ USUB(tdv, sv, svn);
+ }
+