diff options
author | Mika Lindqvist <postmaster@raasu.org> | 2020-09-14 18:40:35 +0300 |
---|---|---|
committer | Hans Kristian Rosbach <hk-github@circlestorm.org> | 2020-09-19 09:52:01 +0200 |
commit | 6575fbffea85fcfabc8644bdf21043e1fb408acb (patch) | |
tree | 085dff84506f3cff36c7fa68d359c668b219a66e /chunkset_tpl.h | |
parent | 6539b769e677bc1e6f4954d4457aba0cd138468b (diff) |
Remove chunkmemset_3 and chunkmemset_6 on ARM/AArch64 as they need 3 chunks...
* Don't unroll distances smaller than chunk size.
Diffstat (limited to 'chunkset_tpl.h')
-rw-r--r-- | chunkset_tpl.h | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/chunkset_tpl.h b/chunkset_tpl.h index 60a8b48..29e514f 100644 --- a/chunkset_tpl.h +++ b/chunkset_tpl.h @@ -115,21 +115,11 @@ Z_INTERNAL uint8_t* CHUNKMEMSET(uint8_t *out, unsigned dist, unsigned len) { chunkmemset_2(from, &chunk); } else #endif -#ifdef HAVE_CHUNKMEMSET_3 - if (dist == 3) { - return chunkmemset_3(out, from, dist, len); - } else -#endif #ifdef HAVE_CHUNKMEMSET_4 if (dist == 4) { chunkmemset_4(from, &chunk); } else #endif -#ifdef HAVE_CHUNKMEMSET_6 - if (dist == 6) { - return chunkmemset_6(out, from, dist, len); - } else -#endif #ifdef HAVE_CHUNKMEMSET_8 if (dist == 8) { chunkmemset_8(from, &chunk); @@ -137,6 +127,16 @@ Z_INTERNAL uint8_t* CHUNKMEMSET(uint8_t *out, unsigned dist, unsigned len) { #endif if (dist == sz) { loadchunk(from, &chunk); + } else if (dist < sz) { + unsigned char *end = out + len - 1; + while (len > dist) { + out = CHUNKCOPY_SAFE(out, from, dist, end); + len -= dist; + } + if (len > 0) { + out = CHUNKCOPY_SAFE(out, from, len, end); + } + return out; } else { out = CHUNKUNROLL(out, &dist, &len); return CHUNKCOPY(out, out - dist, len); |