diff options
| author | Mattias Andrée <maandree@kth.se> | 2016-05-06 13:48:43 +0200 |
|---|---|---|
| committer | Mattias Andrée <maandree@kth.se> | 2016-05-06 13:48:43 +0200 |
| commit | b0e210a02b8576828ac64e8b97bd565fd28c8748 (patch) | |
| tree | 02e74578d0543b40718ea9ae60a4b1295630a61d /src/zmul.c | |
| parent | zsqr is no longer slower than zmul, they are identical (diff) | |
| download | libzahl-b0e210a02b8576828ac64e8b97bd565fd28c8748.tar.gz libzahl-b0e210a02b8576828ac64e8b97bd565fd28c8748.tar.bz2 libzahl-b0e210a02b8576828ac64e8b97bd565fd28c8748.tar.xz | |
Make zmul and zsqr (calls low-level functions) inline
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to 'src/zmul.c')
| -rw-r--r-- | src/zmul.c | 24 |
1 files changed, 6 insertions, 18 deletions
@@ -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)); -} |
