aboutsummaryrefslogtreecommitdiffstats
path: root/src/internals.h
diff options
context:
space:
mode:
authorMattias Andrée <maandree@kth.se>2016-03-16 14:30:29 +0100
committerMattias Andrée <maandree@kth.se>2016-03-16 14:30:29 +0100
commit3e3b44d087ab616089402129b2bc4c4831c6b33a (patch)
tree2c0a6e9550dded9e336906514c6ad7343dc8257d /src/internals.h
parentFix bug in libzahl_msb_nz_* and optimise and simplify libzahl_realloc (diff)
downloadlibzahl-3e3b44d087ab616089402129b2bc4c4831c6b33a.tar.gz
libzahl-3e3b44d087ab616089402129b2bc4c4831c6b33a.tar.bz2
libzahl-3e3b44d087ab616089402129b2bc4c4831c6b33a.tar.xz
Optimise zsqr, zmul, zstr, zdivmod, zpow, and zpowu
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to 'src/internals.h')
-rw-r--r--src/internals.h17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/internals.h b/src/internals.h
index a9d9af5..ed5d7e9 100644
--- a/src/internals.h
+++ b/src/internals.h
@@ -234,25 +234,28 @@ zswap_tainted_unsigned(z_t a, z_t b)
}
static inline void
-zsplit_fast_large_taint(z_t high, z_t low, z_t a, size_t n)
+zsplit_unsigned_fast_large_taint(z_t high, z_t low, z_t a, size_t n)
{
n >>= LB_BITS_PER_CHAR;
- high->sign = a->sign;
+ high->sign = 1;
high->used = a->used - n;
high->chars = a->chars + n;
- low->sign = a->sign;
+#if 0
+ TRIM_AND_ZERO(high);
+#endif
+ low->sign = 1;
low->used = n;
low->chars = a->chars;
TRIM_AND_ZERO(low);
}
static inline void
-zsplit_fast_small_tainted(z_t high, z_t low, z_t a, size_t n)
+zsplit_unsigned_fast_small_tainted(z_t high, z_t low, z_t a, size_t n)
{
zahl_char_t mask = 1;
mask = (mask << n) - 1;
- high->sign = a->sign;
+ high->sign = 1;
high->used = 1;
high->chars[0] = a->chars[0] >> n;
if (a->used == 2) {
@@ -261,10 +264,12 @@ zsplit_fast_small_tainted(z_t high, z_t low, z_t a, size_t n)
n = BITS_PER_CHAR - n;
high->chars[0] |= (a->chars[1] & mask) << n;
}
+#if 0
if (unlikely(!high->chars[high->used - 1]))
high->sign = 0;
+#endif
- low->sign = a->sign;
+ low->sign = 1;
low->used = 1;
low->chars[0] = a->chars[0] & mask;
if (unlikely(!low->chars[0]))