summaryrefslogtreecommitdiff
path: root/chunkset_tpl.h
diff options
context:
space:
mode:
authorMika Lindqvist <postmaster@raasu.org>2020-09-14 18:40:35 +0300
committerHans Kristian Rosbach <hk-github@circlestorm.org>2020-09-19 09:52:01 +0200
commit6575fbffea85fcfabc8644bdf21043e1fb408acb (patch)
tree085dff84506f3cff36c7fa68d359c668b219a66e /chunkset_tpl.h
parent6539b769e677bc1e6f4954d4457aba0cd138468b (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.h20
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);