diff options
| author | Mattias Andrée <maandree@kth.se> | 2016-04-30 05:47:05 +0200 |
|---|---|---|
| committer | Mattias Andrée <maandree@kth.se> | 2016-04-30 05:47:05 +0200 |
| commit | 83d95da004c8cc2387a4070b781a71a0c6433faa (patch) | |
| tree | e5eaaa0e42bf7eeed461dc936bd2bed0600fb612 /src/zand.c | |
| parent | Some optimisations (diff) | |
| download | libzahl-83d95da004c8cc2387a4070b781a71a0c6433faa.tar.gz libzahl-83d95da004c8cc2387a4070b781a71a0c6433faa.tar.bz2 libzahl-83d95da004c8cc2387a4070b781a71a0c6433faa.tar.xz | |
Some optimisations
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to 'src/zand.c')
| -rw-r--r-- | src/zand.c | 22 |
1 files changed, 16 insertions, 6 deletions
@@ -2,14 +2,25 @@ #include "internals.h" -static inline O2 void -zand_impl(zahl_char_t *restrict a, const zahl_char_t *restrict b, size_t n) +O2 static inline void +zand_impl_3(register zahl_char_t *restrict a, + register const zahl_char_t *restrict b, size_t n) { size_t i; for (i = 0; i < n; i++) a[i] &= b[i]; } +static inline void +zand_impl_4(register zahl_char_t *restrict a, + register const zahl_char_t *restrict b, + register const zahl_char_t *restrict c, size_t n) +{ + size_t i; + for (i = 0; i < n; i++) + a[i] = b[i] & c[i]; +} + void zand(z_t a, z_t b, z_t c) { @@ -25,13 +36,12 @@ zand(z_t a, z_t b, z_t c) a->used = MIN(b->used, c->used); if (a == b) { - zand_impl(a->chars, c->chars, a->used); + zand_impl_3(a->chars, c->chars, a->used); } else if (unlikely(a == c)) { - zand_impl(a->chars, b->chars, a->used); + zand_impl_3(a->chars, b->chars, a->used); } else { ENSURE_SIZE(a, a->used); - zmemcpy(a->chars, c->chars, a->used); - zand_impl(a->chars, b->chars, a->used); + zand_impl_4(a->chars, b->chars, c->chars, a->used); } TRIM_AND_SIGN(a, zpositive1(b, c) * 2 - 1); |
