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:
parent
c3ae38b4f8
commit
502a843dee
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user