Switch unrolled loop in BN_usub with memcpy.

See also upstream's 06cf881a3a10d5af3c1255c08cfd0c6ddb5f1cc3,
9f040d6decca7930e978784c917f731e5c45e8f0, and
9f6795e7d2d1e35668ad70ba0afc480062be4e2e.

Change-Id: I27d90e382867a5fe988d152b31f8494e001a6a9f
Reviewed-on: https://boringssl-review.googlesource.com/6628
Reviewed-by: Adam Langley <agl@google.com>
This commit is contained in:
David Benjamin 2015-11-24 23:06:37 -05:00 committed by Adam Langley
parent c3ae38b4f8
commit 502a843dee

View File

@ -56,6 +56,8 @@
#include <openssl/bn.h> #include <openssl/bn.h>
#include <string.h>
#include <openssl/err.h> #include <openssl/err.h>
#include <openssl/mem.h> #include <openssl/mem.h>
@ -311,27 +313,8 @@ int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b) {
} }
} }
if (rp != ap) { if (dif > 0 && rp != ap) {
for (;;) { memcpy(rp, ap, sizeof(*rp) * dif);
if (!dif--) {
break;
}
rp[0] = ap[0];
if (!dif--) {
break;
}
rp[1] = ap[1];
if (!dif--) {
break;
}
rp[2] = ap[2];
if (!dif--) {
break;
}
rp[3] = ap[3];
rp += 4;
ap += 4;
}
} }
r->top = max; r->top = max;