aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/internals.h31
-rw-r--r--src/zbset.c6
-rw-r--r--src/zmul.c4
-rw-r--r--src/zsave.c16
-rw-r--r--src/zsetu.c16
-rw-r--r--src/zsplit.c22
6 files changed, 20 insertions, 75 deletions
diff --git a/src/internals.h b/src/internals.h
index 6faa254..a049e1a 100644
--- a/src/internals.h
+++ b/src/internals.h
@@ -105,11 +105,12 @@ extern void *libzahl_temp_allocation;
#define SET_SIGNUM(a, signum) ZAHL_SET_SIGNUM(a, signum)
#define SET(a, b) ZAHL_SET(a, b)
-#define ENSURE_SIZE(a, n) do { if ((a)->alloced < (n)) libzahl_realloc(a, (n)); } while (0)
+#define ENSURE_SIZE(a, n) ZAHL_ENSURE_SIZE(a, n)
#define TRIM(a) ZAHL_TRIM(a)
#define TRIM_NONZERO(a) ZAHL_TRIM_NONZERO(a)
#define TRIM_AND_ZERO(a) ZAHL_TRIM_AND_ZERO(a)
#define TRIM_AND_SIGN(a, s) ZAHL_TRIM_AND_SIGN(a, s)
+#define SWAP(a, b, t, m) ((t)->m = (a)->m, (a)->m = (b)->m, (b)->m = (t)->m)
#define MIN(a, b) ((a) < (b) ? (a) : (b))
#define MAX(a, b) ((a) > (b) ? (a) : (b))
#define znegative(a) (zsignum(a) < 0)
@@ -120,8 +121,9 @@ extern void *libzahl_temp_allocation;
#define zpositive2(a, b) (zsignum(a) + zsignum(b) == 2)
#define zzero2(a, b) (!(zsignum(a) | zsignum(b)))
#define zmemmove(d, s, n) memmove((d), (s), (n) * sizeof(zahl_char_t))
+#define zmemcpy(d, s, n) libzahl_memcpy(d, s, n)
+#define zmemset(a, v, n) libzahl_memset(a, v, n)
-void libzahl_realloc(z_t a, size_t need);
void zmul_impl(z_t a, z_t b, z_t c);
void zsqr_impl(z_t a, z_t b);
@@ -151,20 +153,6 @@ libzahl_memfailure(void)
libzahl_failure(errno);
}
-static inline void
-zmemcpy(zahl_char_t *restrict d, const zahl_char_t *restrict s, register size_t n)
-{
- while (n--)
- d[n] = s[n];
-}
-
-static inline void
-zmemset(zahl_char_t *a, register zahl_char_t v, register size_t n)
-{
- while (n--)
- a[n] = v;
-}
-
/*
* libzahl_msb_nz_zu
* ^^^ ^^ ^^
@@ -218,6 +206,17 @@ libzahl_add_overflow(zahl_char_t *rp, zahl_char_t a, zahl_char_t b)
#endif
static inline void
+zsplit_pz(z_t high, z_t low, z_t a, size_t delim)
+{
+ if (unlikely(zzero(a))) {
+ SET_SIGNUM(high, 0);
+ SET_SIGNUM(low, 0);
+ } else {
+ zsplit(high, low, a, delim);
+ }
+}
+
+static inline void
zrsh_taint(z_t a, size_t bits)
{
size_t i, chars, cbits;
diff --git a/src/zbset.c b/src/zbset.c
index 3d93fd4..223b2d5 100644
--- a/src/zbset.c
+++ b/src/zbset.c
@@ -23,14 +23,14 @@
void
-zbset_impl_set(z_t a, size_t bit)
+zbset_ll_set(z_t a, size_t bit)
{
PROLOGUE(1);
a->chars[chars] |= mask;
}
void
-zbset_impl_clear(z_t a, size_t bit)
+zbset_ll_clear(z_t a, size_t bit)
{
PROLOGUE(0);
a->chars[chars] &= ~mask;
@@ -38,7 +38,7 @@ zbset_impl_clear(z_t a, size_t bit)
}
void
-zbset_impl_flip(z_t a, size_t bit)
+zbset_ll_flip(z_t a, size_t bit)
{
PROLOGUE(1);
a->chars[chars] ^= mask;
diff --git a/src/zmul.c b/src/zmul.c
index 6ea6d21..3129061 100644
--- a/src/zmul.c
+++ b/src/zmul.c
@@ -53,8 +53,8 @@ zmul_impl(z_t a, z_t b, z_t c)
zinit_temp(c_high);
zinit_temp(c_low);
- zsplit(b_high, b_low, b, m2);
- zsplit(c_high, c_low, c, m2);
+ zsplit_pz(b_high, b_low, b, m2);
+ zsplit_pz(c_high, c_low, c, m2);
zmul_impl(z0, b_low, c_low);
diff --git a/src/zsave.c b/src/zsave.c
deleted file mode 100644
index 8b08f2a..0000000
--- a/src/zsave.c
+++ /dev/null
@@ -1,16 +0,0 @@
-/* See LICENSE file for copyright and license details. */
-#include "internals.h"
-
-
-size_t
-zsave(z_t a, void *buffer)
-{
- if (buffer) {
- char *buf = buffer;
- *((int *)buf) = a->sign, buf += sizeof(int);
- *((size_t *)buf) = a->used, buf += sizeof(size_t);
- if (likely(!zzero(a)))
- zmemcpy((zahl_char_t *)buf, a->chars, a->used);
- }
- return sizeof(int) + sizeof(size_t) + (zzero(a) ? 0 : a->used * sizeof(zahl_char_t));
-}
diff --git a/src/zsetu.c b/src/zsetu.c
deleted file mode 100644
index 42e8cec..0000000
--- a/src/zsetu.c
+++ /dev/null
@@ -1,16 +0,0 @@
-/* See LICENSE file for copyright and license details. */
-#include "internals.h"
-
-
-void
-zsetu(z_t a, uint64_t b)
-{
- if (!b) {
- SET_SIGNUM(a, 0);
- return;
- }
- ENSURE_SIZE(a, 1);
- SET_SIGNUM(a, 1);
- a->chars[0] = (zahl_char_t)b;
- a->used = 1;
-}
diff --git a/src/zsplit.c b/src/zsplit.c
deleted file mode 100644
index afb8a33..0000000
--- a/src/zsplit.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/* See LICENSE file for copyright and license details. */
-#include "internals.h"
-
-
-void
-zsplit(z_t high, z_t low, z_t a, size_t delim)
-{
- if (unlikely(zzero(a))) {
- /* This is for performance. */
- SET_SIGNUM(high, 0);
- SET_SIGNUM(low, 0);
- return;
- }
-
- if (unlikely(high == a)) {
- ztrunc(low, a, delim);
- zrsh(high, a, delim);
- } else {
- zrsh(high, a, delim);
- ztrunc(low, a, delim);
- }
-}