diff options
Diffstat (limited to '')
| -rw-r--r-- | src/internals.h | 3 | ||||
| -rw-r--r-- | src/zmul.c | 24 | ||||
| -rw-r--r-- | src/zpow.c | 8 | ||||
| -rw-r--r-- | src/zpowu.c | 6 | ||||
| -rw-r--r-- | src/zsqr.c | 25 |
5 files changed, 20 insertions, 46 deletions
diff --git a/src/internals.h b/src/internals.h index 0690ad3..f97a789 100644 --- a/src/internals.h +++ b/src/internals.h @@ -107,9 +107,6 @@ extern void *libzahl_temp_allocation; #define zmemcpy(d, s, n) libzahl_memcpy(d, s, n) #define zmemset(a, v, n) libzahl_memset(a, v, n) -void zmul_impl(z_t a, z_t b, z_t c); -void zsqr_impl(z_t a, z_t b); - static inline int zzero1(z_t a, z_t b) { @@ -3,7 +3,7 @@ static inline void -zmul_impl_single_char(z_t a, z_t b, z_t c) +zmul_ll_single_char(z_t a, z_t b, z_t c) { ENSURE_SIZE(a, 1); a->used = 1; @@ -12,7 +12,7 @@ zmul_impl_single_char(z_t a, z_t b, z_t c) } void -zmul_impl(z_t a, z_t b, z_t c) +zmul_ll(z_t a, z_t b, z_t c) { /* * Karatsuba algorithm @@ -41,7 +41,7 @@ zmul_impl(z_t a, z_t b, z_t c) m2 = b == c ? m : zbits(c); if (m + m2 <= BITS_PER_CHAR) { - zmul_impl_single_char(a, b, c); + zmul_ll_single_char(a, b, c); return; } @@ -57,11 +57,11 @@ zmul_impl(z_t a, z_t b, z_t c) zsplit_pz(c_high, c_low, c, m2); - zmul_impl(z0, b_low, c_low); + zmul_ll(z0, b_low, c_low); zadd_unsigned_assign(b_low, b_high); zadd_unsigned_assign(c_low, c_high); - zmul_impl(z1, b_low, c_low); - zmul_impl(z2, b_high, c_high); + zmul_ll(z1, b_low, c_low); + zmul_ll(z2, b_high, c_high); zsub_nonnegative_assign(z1, z0); zsub_nonnegative_assign(z1, z2); @@ -78,15 +78,3 @@ zmul_impl(z_t a, z_t b, z_t c) zfree_temp(b_low); zfree_temp(b_high); } - -void -zmul(z_t a, z_t b, z_t c) -{ - int b_sign, c_sign; - b_sign = b->sign, b->sign *= b_sign; - c_sign = c->sign, c->sign *= c_sign; - zmul_impl(a, b, c); - c->sign *= c_sign; - b->sign *= b_sign; - SET_SIGNUM(a, zsignum(b) * zsignum(c)); -} @@ -46,15 +46,15 @@ zpow(z_t a, z_t b, z_t c) x = tc->chars[i]; for (j = BITS_PER_CHAR; j--; x >>= 1) { if (x & 1) - zmul_impl(a, a, tb); - zsqr_impl(tb, tb); + zmul_ll(a, a, tb); + zsqr_ll(tb, tb); } } x = tc->chars[i]; for (; x; x >>= 1) { if (x & 1) - zmul_impl(a, a, tb); - zsqr_impl(tb, tb); + zmul_ll(a, a, tb); + zsqr_ll(tb, tb); } if (neg) diff --git a/src/zpowu.c b/src/zpowu.c index 447147d..35247c3 100644 --- a/src/zpowu.c +++ b/src/zpowu.c @@ -24,11 +24,11 @@ zpowu(z_t a, z_t b, unsigned long long int c) zsetu(a, 1); if (c & 1) - zmul_impl(a, a, tb); + zmul_ll(a, a, tb); while (c >>= 1) { - zsqr_impl(tb, tb); + zsqr_ll(tb, tb); if (c & 1) - zmul_impl(a, a, tb); + zmul_ll(a, a, tb); } if (neg) @@ -3,7 +3,7 @@ static inline void -zsqr_impl_single_char(z_t a, z_t b) +zsqr_ll_single_char(z_t a, z_t b) { ENSURE_SIZE(a, 1); a->used = 1; @@ -12,7 +12,7 @@ zsqr_impl_single_char(z_t a, z_t b) } void -zsqr_impl(z_t a, z_t b) +zsqr_ll(z_t a, z_t b) { /* * Karatsuba algorithm, optimised for equal factors. @@ -26,7 +26,7 @@ zsqr_impl(z_t a, z_t b) bits = zbits(b); if (bits <= BITS_PER_CHAR / 2) { - zsqr_impl_single_char(a, b); + zsqr_ll_single_char(a, b); return; } @@ -47,18 +47,18 @@ zsqr_impl(z_t a, z_t b) if (unlikely(zzero(low))) { - zsqr_impl(z2, high); + zsqr_ll(z2, high); zlsh(a, z2, bits << 1); } else { zinit_temp(z0); zinit_temp(z1); - zsqr_impl(z0, low); + zsqr_ll(z0, low); - zmul_impl(z1, low, high); + zmul_ll(z1, low, high); zlsh(z1, z1, bits + 1); - zsqr_impl(z2, high); + zsqr_ll(z2, high); zlsh(a, z2, bits << 1); zadd_unsigned_assign(a, z1); @@ -68,14 +68,3 @@ zsqr_impl(z_t a, z_t b) zfree_temp(z0); } } - -void -zsqr(z_t a, z_t b) -{ - if (unlikely(zzero(b))) { - SET_SIGNUM(a, 0); - } else { - zsqr_impl(a, b); - SET_SIGNUM(a, 1); - } -} |
