Index: third_party/zlib/inffast.c |
diff --git a/third_party/zlib/inffast.c b/third_party/zlib/inffast.c |
index bda59ceb6a12b2d7de80ef3c1e7318e54fc979ac..0dbd1dbc09f2f69425405863bfe1080e3ca2b3f5 100644 |
--- a/third_party/zlib/inffast.c |
+++ b/third_party/zlib/inffast.c |
@@ -1,5 +1,5 @@ |
/* inffast.c -- fast decoding |
- * Copyright (C) 1995-2008, 2010, 2013 Mark Adler |
+ * Copyright (C) 1995-2017 Mark Adler |
* For conditions of distribution and use, see copyright notice in zlib.h |
*/ |
@@ -8,26 +8,9 @@ |
#include "inflate.h" |
#include "inffast.h" |
-#ifndef ASMINF |
- |
-/* Allow machine dependent optimization for post-increment or pre-increment. |
- Based on testing to date, |
- Pre-increment preferred for: |
- - PowerPC G3 (Adler) |
- - MIPS R5000 (Randers-Pehrson) |
- Post-increment preferred for: |
- - none |
- No measurable difference: |
- - Pentium III (Anderson) |
- - M68060 (Nikl) |
- */ |
-#ifdef POSTINC |
-# define OFF 0 |
-# define PUP(a) *(a)++ |
+#ifdef ASMINF |
+# pragma message("Assembler code may have bugs -- use at your own risk") |
#else |
-# define OFF 1 |
-# define PUP(a) *++(a) |
-#endif |
/* |
Decode literal, length, and distance codes and write out the resulting |
@@ -96,9 +79,9 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ |
/* copy state to local variables */ |
state = (struct inflate_state FAR *)strm->state; |
- in = strm->next_in - OFF; |
+ in = strm->next_in; |
last = in + (strm->avail_in - 5); |
- out = strm->next_out - OFF; |
+ out = strm->next_out; |
beg = out - (start - strm->avail_out); |
end = out + (strm->avail_out - 257); |
#ifdef INFLATE_STRICT |
@@ -119,9 +102,9 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ |
input data or output space */ |
do { |
if (bits < 15) { |
- hold += (unsigned long)(PUP(in)) << bits; |
+ hold += (unsigned long)(*in++) << bits; |
bits += 8; |
- hold += (unsigned long)(PUP(in)) << bits; |
+ hold += (unsigned long)(*in++) << bits; |
bits += 8; |
} |
here = lcode[hold & lmask]; |
@@ -134,14 +117,14 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ |
Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? |
"inflate: literal '%c'\n" : |
"inflate: literal 0x%02x\n", here.val)); |
- PUP(out) = (unsigned char)(here.val); |
+ *out++ = (unsigned char)(here.val); |
} |
else if (op & 16) { /* length base */ |
len = (unsigned)(here.val); |
op &= 15; /* number of extra bits */ |
if (op) { |
if (bits < op) { |
- hold += (unsigned long)(PUP(in)) << bits; |
+ hold += (unsigned long)(*in++) << bits; |
bits += 8; |
} |
len += (unsigned)hold & ((1U << op) - 1); |
@@ -150,9 +133,9 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ |
} |
Tracevv((stderr, "inflate: length %u\n", len)); |
if (bits < 15) { |
- hold += (unsigned long)(PUP(in)) << bits; |
+ hold += (unsigned long)(*in++) << bits; |
bits += 8; |
- hold += (unsigned long)(PUP(in)) << bits; |
+ hold += (unsigned long)(*in++) << bits; |
bits += 8; |
} |
here = dcode[hold & dmask]; |
@@ -165,10 +148,10 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ |
dist = (unsigned)(here.val); |
op &= 15; /* number of extra bits */ |
if (bits < op) { |
- hold += (unsigned long)(PUP(in)) << bits; |
+ hold += (unsigned long)(*in++) << bits; |
bits += 8; |
if (bits < op) { |
- hold += (unsigned long)(PUP(in)) << bits; |
+ hold += (unsigned long)(*in++) << bits; |
bits += 8; |
} |
} |
@@ -196,30 +179,30 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ |
#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR |
if (len <= op - whave) { |
do { |
- PUP(out) = 0; |
+ *out++ = 0; |
} while (--len); |
continue; |
} |
len -= op - whave; |
do { |
- PUP(out) = 0; |
+ *out++ = 0; |
} while (--op > whave); |
if (op == 0) { |
from = out - dist; |
do { |
- PUP(out) = PUP(from); |
+ *out++ = *from++; |
} while (--len); |
continue; |
} |
#endif |
} |
- from = window - OFF; |
+ from = window; |
if (wnext == 0) { /* very common case */ |
from += wsize - op; |
if (op < len) { /* some from window */ |
len -= op; |
do { |
- PUP(out) = PUP(from); |
+ *out++ = *from++; |
} while (--op); |
from = out - dist; /* rest from output */ |
} |
@@ -230,14 +213,14 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ |
if (op < len) { /* some from end of window */ |
len -= op; |
do { |
- PUP(out) = PUP(from); |
+ *out++ = *from++; |
} while (--op); |
- from = window - OFF; |
+ from = window; |
if (wnext < len) { /* some from start of window */ |
op = wnext; |
len -= op; |
do { |
- PUP(out) = PUP(from); |
+ *out++ = *from++; |
} while (--op); |
from = out - dist; /* rest from output */ |
} |
@@ -248,35 +231,35 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ |
if (op < len) { /* some from window */ |
len -= op; |
do { |
- PUP(out) = PUP(from); |
+ *out++ = *from++; |
} while (--op); |
from = out - dist; /* rest from output */ |
} |
} |
while (len > 2) { |
- PUP(out) = PUP(from); |
- PUP(out) = PUP(from); |
- PUP(out) = PUP(from); |
+ *out++ = *from++; |
+ *out++ = *from++; |
+ *out++ = *from++; |
len -= 3; |
} |
if (len) { |
- PUP(out) = PUP(from); |
+ *out++ = *from++; |
if (len > 1) |
- PUP(out) = PUP(from); |
+ *out++ = *from++; |
} |
} |
else { |
from = out - dist; /* copy direct from output */ |
do { /* minimum length is three */ |
- PUP(out) = PUP(from); |
- PUP(out) = PUP(from); |
- PUP(out) = PUP(from); |
+ *out++ = *from++; |
+ *out++ = *from++; |
+ *out++ = *from++; |
len -= 3; |
} while (len > 2); |
if (len) { |
- PUP(out) = PUP(from); |
+ *out++ = *from++; |
if (len > 1) |
- PUP(out) = PUP(from); |
+ *out++ = *from++; |
} |
} |
} |
@@ -313,8 +296,8 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ |
hold &= (1U << bits) - 1; |
/* update state and return */ |
- strm->next_in = in + OFF; |
- strm->next_out = out + OFF; |
+ strm->next_in = in; |
+ strm->next_out = out; |
strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last)); |
strm->avail_out = (unsigned)(out < end ? |
257 + (end - out) : 257 - (out - end)); |