aboutsummaryrefslogtreecommitdiffstats
path: root/src/internals.h
diff options
context:
space:
mode:
authorMattias Andrée <maandree@kth.se>2016-03-13 05:30:01 +0100
committerMattias Andrée <maandree@kth.se>2016-03-13 05:30:01 +0100
commitf6cb7f3e7382a19a6d6d9990c243ffb8a666182d (patch)
treedbf43f976f66a39fd87ffa38d59194b425efaa68 /src/internals.h
parentMake zabs, zneg and zswap inline (diff)
downloadlibzahl-f6cb7f3e7382a19a6d6d9990c243ffb8a666182d.tar.gz
libzahl-f6cb7f3e7382a19a6d6d9990c243ffb8a666182d.tar.bz2
libzahl-f6cb7f3e7382a19a6d6d9990c243ffb8a666182d.tar.xz
Optimisations
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to 'src/internals.h')
-rw-r--r--src/internals.h29
1 files changed, 23 insertions, 6 deletions
diff --git a/src/internals.h b/src/internals.h
index 25a640a..2a947dd 100644
--- a/src/internals.h
+++ b/src/internals.h
@@ -59,17 +59,34 @@ extern zahl_char_t **libzahl_pool[sizeof(size_t) * 8];
extern size_t libzahl_pool_n[sizeof(size_t) * 8];
extern size_t libzahl_pool_alloc[sizeof(size_t) * 8];
-#define FAILURE(error) (libzahl_error = (error), longjmp(libzahl_jmp_buf, 1))
-#define zmemcpy(d, s, n) memcpy(d, s, (n) * sizeof(zahl_char_t))
-#define zmemmove(d, s, n) memmove(d, s, (n) * sizeof(zahl_char_t))
-#define zmemset(a, v, n) memset(a, v, (n) * sizeof(zahl_char_t))
-#define zmemcmp(a, b, n) memcmp(a, b, (n) * sizeof(zahl_char_t))
+#if defined(__GNUC__) || defined(__clang__)
+# define EXPECT(value, expected) __builtin_expect(value, expected)
+#else
+# define EXPECT(value, expected) (value)
+#endif
+#define FAILURE(error) (libzahl_error = (error), longjmp(libzahl_jmp_buf, 1))
+#define zmemmove(d, s, n) memmove((d), (s), (n) * sizeof(zahl_char_t))
#define SET_SIGNUM(a, signum) ((a)->sign = (signum))
#define SET(a, b) do { if ((a) != (b)) zset(a, b); } while (0)
#define ENSURE_SIZE(a, n) do { if ((a)->alloced < (n)) libzahl_realloc(a, (n)); } while (0)
-
#define MIN(a, b) ((a) < (b) ? (a) : (b))
#define MAX(a, b) ((a) > (b) ? (a) : (b))
+#define TRIM(a) for (; (a)->used && !(a)->chars[(a)->used - 1]; (a)->used--)
+#define TRIM_NONZERO(a) for (; !(a)->chars[(a)->used - 1]; (a)->used--)
void libzahl_realloc(z_t a, size_t need);
+
+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;
+}