From f3b969b6991f154a1fde1ea6b4488320ed0b486f Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Tue, 15 Mar 2016 11:40:46 +0100 Subject: Optimise zsetup, zgcd, zmul, and zsqr and add -flto MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- src/zsub.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'src/zsub.c') diff --git a/src/zsub.c b/src/zsub.c index b3f12f2..259526f 100644 --- a/src/zsub.c +++ b/src/zsub.c @@ -46,7 +46,7 @@ libzahl_zsub_unsigned(z_t a, z_t b, z_t c) SET_SIGNUM(a, 0); return; } - n = MIN(b->used, c->used); + n = b->used; if (a == b) { zset(libzahl_tmp_sub, b); SET(a, c); @@ -56,7 +56,7 @@ libzahl_zsub_unsigned(z_t a, z_t b, z_t c) zsub_impl(a, b, n); } } else { - n = MIN(b->used, c->used); + n = c->used; if (unlikely(a == c)) { zset(libzahl_tmp_sub, c); SET(a, b); @@ -76,6 +76,24 @@ zsub_unsigned(z_t a, z_t b, z_t c) libzahl_zsub_unsigned(a, b, c); } +void +zsub_nonnegative_assign(z_t a, z_t b) +{ + if (unlikely(zzero(b))) { + zabs(a, a); + } else if (unlikely(!zcmpmag(a, b))) { + SET_SIGNUM(a, 0); + } else { + zsub_impl(a, b, b->used); + } +} + +void +zsub_positive_assign(z_t a, z_t b) +{ + zsub_impl(a, b, b->used); +} + void zsub(z_t a, z_t b, z_t c) { -- cgit v1.2.3-70-g09d2