From f6cb7f3e7382a19a6d6d9990c243ffb8a666182d Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Sun, 13 Mar 2016 05:30:01 +0100 Subject: Optimisations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- src/internals.h | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) (limited to 'src/internals.h') 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; +} -- cgit v1.2.3-70-g09d2