use 64-bit for mul
This commit is contained in:
@@ -158,40 +158,31 @@ mod25638_mul (bn256 *X, const bn256 *A, const bn256 *B)
|
||||
s = &word[8]; d = &word[0]; w = 38;
|
||||
{
|
||||
int i;
|
||||
uint32_t r0, r1;
|
||||
uint64_t r;
|
||||
uint32_t r0;
|
||||
uint32_t carry;
|
||||
|
||||
r0 = r1 = 0;
|
||||
r = 0;
|
||||
for (i = 0; i < BN256_WORDS; i++)
|
||||
{
|
||||
uint64_t uv;
|
||||
uint32_t u, v;
|
||||
uint32_t carry;
|
||||
|
||||
r0 += d[i];
|
||||
r1 += (r0 < d[i]);
|
||||
carry = (r1 < (r0 < d[i]));
|
||||
r += d[i];
|
||||
carry = (r < d[i]);
|
||||
|
||||
uv = ((uint64_t)s[i])*w;
|
||||
v = uv;
|
||||
u = (uv >> 32);
|
||||
r0 += v;
|
||||
r1 += (r0 < v);
|
||||
carry += (r1 < (r0 < v));
|
||||
r1 += u;
|
||||
carry += (r1 < u);
|
||||
r += uv;
|
||||
carry += (r < uv);
|
||||
|
||||
d[i] = r0;
|
||||
r0 = r1;
|
||||
r1 = carry;
|
||||
d[i] = (uint32_t)r;
|
||||
r = ((r >> 32) | ((uint64_t)carry << 32));
|
||||
}
|
||||
d[i] = r0;
|
||||
d[i] = (uint32_t)r;
|
||||
|
||||
r0 = word[8] * 38;
|
||||
d = word;
|
||||
for (i = 0; i < BN256_WORDS; i++)
|
||||
{
|
||||
uint32_t carry;
|
||||
|
||||
r0 += d[i];
|
||||
carry = (r0 < d[i]);
|
||||
d[i] = r0;
|
||||
|
||||
Reference in New Issue
Block a user