\r
#ifndef ASMINF\r
\r
-/* Allow machine dependent optimization for post-increment or pre-increment.\r
- Based on testing to date,\r
- Pre-increment preferred for:\r
- - PowerPC G3 (Adler)\r
- - MIPS R5000 (Randers-Pehrson)\r
- Post-increment preferred for:\r
- - none\r
- No measurable difference:\r
- - Pentium III (Anderson)\r
- - M68060 (Nikl)\r
- */\r
-#ifdef POSTINC\r
-# define OFF 0\r
-# define PUP(a) *(a)++\r
-#else\r
-# define OFF 1\r
-# define PUP(a) *++(a)\r
-#endif\r
-\r
/*\r
Decode literal, length, and distance codes and write out the resulting\r
literal and match bytes until either not enough input or output is\r
\r
/* copy state to local variables */\r
state = (struct inflate_state FAR *)strm->state;\r
- in = strm->next_in - OFF;\r
+ in = strm->next_in;\r
last = in + (strm->avail_in - 5);\r
- out = strm->next_out - OFF;\r
+ out = strm->next_out;\r
beg = out - (start - strm->avail_out);\r
end = out + (strm->avail_out - 257);\r
#ifdef INFLATE_STRICT\r
input data or output space */\r
do {\r
if (bits < 15) {\r
- hold += (unsigned long)(PUP(in)) << bits;\r
+ hold += (unsigned long)(*in++) << bits;\r
bits += 8;\r
- hold += (unsigned long)(PUP(in)) << bits;\r
+ hold += (unsigned long)(*in++) << bits;\r
bits += 8;\r
}\r
here = lcode[hold & lmask];\r
Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\r
"inflate: literal '%c'\n" :\r
"inflate: literal 0x%02x\n", here.val));\r
- PUP(out) = (unsigned char)(here.val);\r
+ *out++ = (unsigned char)(here.val);\r
}\r
else if (op & 16) { /* length base */\r
len = (unsigned)(here.val);\r
op &= 15; /* number of extra bits */\r
if (op) {\r
if (bits < op) {\r
- hold += (unsigned long)(PUP(in)) << bits;\r
+ hold += (unsigned long)(*in++) << bits;\r
bits += 8;\r
}\r
len += (unsigned)hold & ((1U << op) - 1);\r
}\r
Tracevv((stderr, "inflate: length %u\n", len));\r
if (bits < 15) {\r
- hold += (unsigned long)(PUP(in)) << bits;\r
+ hold += (unsigned long)(*in++) << bits;\r
bits += 8;\r
- hold += (unsigned long)(PUP(in)) << bits;\r
+ hold += (unsigned long)(*in++) << bits;\r
bits += 8;\r
}\r
here = dcode[hold & dmask];\r
dist = (unsigned)(here.val);\r
op &= 15; /* number of extra bits */\r
if (bits < op) {\r
- hold += (unsigned long)(PUP(in)) << bits;\r
+ hold += (unsigned long)(*in++) << bits;\r
bits += 8;\r
if (bits < op) {\r
- hold += (unsigned long)(PUP(in)) << bits;\r
+ hold += (unsigned long)(*in++) << bits;\r
bits += 8;\r
}\r
}\r
#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\r
if (len <= op - whave) {\r
do {\r
- PUP(out) = 0;\r
+ *out++ = 0;\r
} while (--len);\r
continue;\r
}\r
len -= op - whave;\r
do {\r
- PUP(out) = 0;\r
+ *out++ = 0;\r
} while (--op > whave);\r
if (op == 0) {\r
from = out - dist;\r
do {\r
- PUP(out) = PUP(from);\r
+ *out++ = *from++;\r
} while (--len);\r
continue;\r
}\r
#endif\r
}\r
- from = window - OFF;\r
+ from = window;\r
if (wnext == 0) { /* very common case */\r
from += wsize - op;\r
if (op < len) { /* some from window */\r
len -= op;\r
do {\r
- PUP(out) = PUP(from);\r
+ *out++ = *from++;\r
} while (--op);\r
from = out - dist; /* rest from output */\r
}\r
if (op < len) { /* some from end of window */\r
len -= op;\r
do {\r
- PUP(out) = PUP(from);\r
+ *out++ = *from++;\r
} while (--op);\r
- from = window - OFF;\r
+ from = window;\r
if (wnext < len) { /* some from start of window */\r
op = wnext;\r
len -= op;\r
do {\r
- PUP(out) = PUP(from);\r
+ *out++ = *from++;\r
} while (--op);\r
from = out - dist; /* rest from output */\r
}\r
if (op < len) { /* some from window */\r
len -= op;\r
do {\r
- PUP(out) = PUP(from);\r
+ *out++ = *from++;\r
} while (--op);\r
from = out - dist; /* rest from output */\r
}\r
}\r
while (len > 2) {\r
- PUP(out) = PUP(from);\r
- PUP(out) = PUP(from);\r
- PUP(out) = PUP(from);\r
+ *out++ = *from++;\r
+ *out++ = *from++;\r
+ *out++ = *from++;\r
len -= 3;\r
}\r
if (len) {\r
- PUP(out) = PUP(from);\r
+ *out++ = *from++;\r
if (len > 1)\r
- PUP(out) = PUP(from);\r
+ *out++ = *from++;\r
}\r
}\r
else {\r
from = out - dist; /* copy direct from output */\r
do { /* minimum length is three */\r
- PUP(out) = PUP(from);\r
- PUP(out) = PUP(from);\r
- PUP(out) = PUP(from);\r
+ *out++ = *from++;\r
+ *out++ = *from++;\r
+ *out++ = *from++;\r
len -= 3;\r
} while (len > 2);\r
if (len) {\r
- PUP(out) = PUP(from);\r
+ *out++ = *from++;\r
if (len > 1)\r
- PUP(out) = PUP(from);\r
+ *out++ = *from++;\r
}\r
}\r
}\r
hold &= (1U << bits) - 1;\r
\r
/* update state and return */\r
- strm->next_in = in + OFF;\r
- strm->next_out = out + OFF;\r
+ strm->next_in = in;\r
+ strm->next_out = out;\r
strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last));\r
strm->avail_out = (unsigned)(out < end ?\r
257 + (end - out) : 257 - (out - end));\r