From b8f7e263d28edb721f18f64d3553947710ff9fce Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Wed, 4 May 2016 17:04:27 +0200 Subject: Optimise znot 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, 28 insertions(+), 1 deletion(-) (limited to 'src/internals.h') diff --git a/src/internals.h b/src/internals.h index f1a2f78..a475ada 100644 --- a/src/internals.h +++ b/src/internals.h @@ -344,7 +344,7 @@ zfree_temp(z_t a) /* } */ -#define ZMEM_OP(a, b, c, n, OP) \ +#define ZMEM_2OP(a, b, c, n, OP) \ do { \ zahl_char_t *a__ = (a); \ const zahl_char_t *b__ = (b); \ @@ -371,3 +371,30 @@ zfree_temp(z_t a) a__[i__] = b__[i__] OP c__[i__]; \ } \ } while (0) + +#define ZMEM_1OP(a, b, n, OP) \ + do { \ + zahl_char_t *a__ = (a); \ + const zahl_char_t *b__ = (b); \ + size_t i__, n__ = (n); \ + if (n__ <= 4) { \ + if (n__ >= 1) \ + a__[0] = OP(b__[0]); \ + if (n__ >= 2) \ + a__[1] = OP(b__[1]); \ + if (n__ >= 3) \ + a__[2] = OP(b__[2]); \ + if (n__ >= 4) \ + a__[3] = OP(b__[3]); \ + } else { \ + for (i__ = 0; (i__ += 4) < n__;) { \ + a__[i__ - 1] = OP(b__[i__ - 1]); \ + a__[i__ - 2] = OP(b__[i__ - 2]); \ + a__[i__ - 3] = OP(b__[i__ - 3]); \ + a__[i__ - 4] = OP(b__[i__ - 4]); \ + } \ + if (i__ > n__) \ + for (i__ -= 4; i__ < n__; i__++) \ + a__[i__] = OP(b__[i__]); \ + } \ + } while (0) -- cgit v1.2.3-70-g09d2