summaryrefslogtreecommitdiff
path: root/inffast.c
diff options
context:
space:
mode:
authorSebastian Pop <s.pop@samsung.com>2019-03-01 09:45:33 -0600
committerHans Kristian Rosbach <hk-github@circlestorm.org>2019-03-21 11:22:36 +0100
commit93dbe3caeee3626fe653a92fa5e2440105d57170 (patch)
treea34df71c07ad583fa322e8515daa39f1a6206708 /inffast.c
parent9ca9da69d34941a2996b8a8856c9993248afbb58 (diff)
move INFFAST_CHUCKSIZE code to memcopy.h
Diffstat (limited to 'inffast.c')
-rw-r--r--inffast.c81
1 files changed, 0 insertions, 81 deletions
diff --git a/inffast.c b/inffast.c
index af623eb..045242a 100644
--- a/inffast.c
+++ b/inffast.c
@@ -21,87 +21,6 @@
bits -= (unsigned)(n); \
} while (0)
-#ifdef INFFAST_CHUNKSIZE
-/*
- Ask the compiler to perform a wide, unaligned load with an machine
- instruction appropriate for the inffast_chunk_t type.
- */
-static inline inffast_chunk_t loadchunk(unsigned char const* s) {
- inffast_chunk_t c;
- memcpy(&c, s, sizeof(c));
- return c;
-}
-
-/*
- Ask the compiler to perform a wide, unaligned store with an machine
- instruction appropriate for the inffast_chunk_t type.
- */
-static inline void storechunk(unsigned char* d, inffast_chunk_t c) {
- memcpy(d, &c, sizeof(c));
-}
-
-/*
- Behave like memcpy, but assume that it's OK to overwrite at least
- INFFAST_CHUNKSIZE bytes of output even if the length is shorter than this,
- that the length is non-zero, and that `from` lags `out` by at least
- INFFAST_CHUNKSIZE bytes (or that they don't overlap at all or simply that
- the distance is less than the length of the copy).
-
- Aside from better memory bus utilisation, this means that short copies
- (INFFAST_CHUNKSIZE bytes or fewer) will fall straight through the loop
- without iteration, which will hopefully make the branch prediction more
- reliable.
- */
-static inline unsigned char* chunkcopy(unsigned char *out, unsigned char const *from, unsigned len) {
- --len;
- storechunk(out, loadchunk(from));
- out += (len % INFFAST_CHUNKSIZE) + 1;
- from += (len % INFFAST_CHUNKSIZE) + 1;
- len /= INFFAST_CHUNKSIZE;
- while (len-- > 0) {
- storechunk(out, loadchunk(from));
- out += INFFAST_CHUNKSIZE;
- from += INFFAST_CHUNKSIZE;
- }
- return out;
-}
-
-/*
- Behave like chunkcopy, but avoid writing beyond of legal output.
- */
-static inline unsigned char* chunkcopysafe(unsigned char *out, unsigned char const *from, unsigned len,
- unsigned char *safe) {
- if (out > safe) {
- while (len-- > 0) {
- *out++ = *from++;
- }
- return out;
- }
- return chunkcopy(out, from, len);
-}
-
-/*
- Perform short copies until distance can be rewritten as being at least
- INFFAST_CHUNKSIZE.
-
- This assumes that it's OK to overwrite at least the first
- 2*INFFAST_CHUNKSIZE bytes of output even if the copy is shorter than this.
- This assumption holds because inflate_fast() starts every iteration with at
- least 258 bytes of output space available (258 being the maximum length
- output from a single token; see inflate_fast()'s assumptions below).
- */
-static inline unsigned char* chunkunroll(unsigned char *out, unsigned *dist, unsigned *len) {
- unsigned char const *from = out - *dist;
- while (*dist < *len && *dist < INFFAST_CHUNKSIZE) {
- storechunk(out, loadchunk(from));
- out += *dist;
- *len -= *dist;
- *dist += *dist;
- }
- return out;
-}
-#endif
-
/*
Decode literal, length, and distance codes and write out the resulting
literal and match bytes until either not enough input or output is