OLD | NEW |
1 /* inffast.c -- fast decoding | 1 /* inffast.c -- fast decoding |
2 * Copyright (C) 1995-2008, 2010, 2013 Mark Adler | 2 * Copyright (C) 1995-2008, 2010 Mark Adler |
3 * For conditions of distribution and use, see copyright notice in zlib.h | 3 * For conditions of distribution and use, see copyright notice in zlib.h |
4 */ | 4 */ |
5 | 5 |
6 #include "zutil.h" | 6 #include "zutil.h" |
7 #include "inftrees.h" | 7 #include "inftrees.h" |
8 #include "inflate.h" | 8 #include "inflate.h" |
9 #include "inffast.h" | 9 #include "inffast.h" |
10 | 10 |
11 #ifndef ASMINF | 11 #ifndef ASMINF |
12 | 12 |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
62 - The maximum bytes that a single length/distance pair can output is 258 | 62 - The maximum bytes that a single length/distance pair can output is 258 |
63 bytes, which is the maximum length that can be coded. inflate_fast() | 63 bytes, which is the maximum length that can be coded. inflate_fast() |
64 requires strm->avail_out >= 258 for each loop to avoid checking for | 64 requires strm->avail_out >= 258 for each loop to avoid checking for |
65 output space. | 65 output space. |
66 */ | 66 */ |
67 void ZLIB_INTERNAL inflate_fast(strm, start) | 67 void ZLIB_INTERNAL inflate_fast(strm, start) |
68 z_streamp strm; | 68 z_streamp strm; |
69 unsigned start; /* inflate()'s starting value for strm->avail_out */ | 69 unsigned start; /* inflate()'s starting value for strm->avail_out */ |
70 { | 70 { |
71 struct inflate_state FAR *state; | 71 struct inflate_state FAR *state; |
72 z_const unsigned char FAR *in; /* local strm->next_in */ | 72 unsigned char FAR *in; /* local strm->next_in */ |
73 z_const unsigned char FAR *last; /* have enough input while in < last */ | 73 unsigned char FAR *last; /* while in < last, enough input available */ |
74 unsigned char FAR *out; /* local strm->next_out */ | 74 unsigned char FAR *out; /* local strm->next_out */ |
75 unsigned char FAR *beg; /* inflate()'s initial strm->next_out */ | 75 unsigned char FAR *beg; /* inflate()'s initial strm->next_out */ |
76 unsigned char FAR *end; /* while out < end, enough space available */ | 76 unsigned char FAR *end; /* while out < end, enough space available */ |
77 #ifdef INFLATE_STRICT | 77 #ifdef INFLATE_STRICT |
78 unsigned dmax; /* maximum distance from zlib header */ | 78 unsigned dmax; /* maximum distance from zlib header */ |
79 #endif | 79 #endif |
80 unsigned wsize; /* window size or zero if not using window */ | 80 unsigned wsize; /* window size or zero if not using window */ |
81 unsigned whave; /* valid bytes in the window */ | 81 unsigned whave; /* valid bytes in the window */ |
82 unsigned wnext; /* window write index */ | 82 unsigned wnext; /* window write index */ |
83 unsigned char FAR *window; /* allocated sliding window, if wsize != 0 */ | 83 unsigned char FAR *window; /* allocated sliding window, if wsize != 0 */ |
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
331 - Special case for distance > 1 copies to do overlapped load and store copy | 331 - Special case for distance > 1 copies to do overlapped load and store copy |
332 - Explicit branch predictions (based on measured branch probabilities) | 332 - Explicit branch predictions (based on measured branch probabilities) |
333 - Deferring match copy and interspersed it with decoding subsequent codes | 333 - Deferring match copy and interspersed it with decoding subsequent codes |
334 - Swapping literal/length else | 334 - Swapping literal/length else |
335 - Swapping window/direct else | 335 - Swapping window/direct else |
336 - Larger unrolled copy loops (three is about right) | 336 - Larger unrolled copy loops (three is about right) |
337 - Moving len -= 3 statement into middle of loop | 337 - Moving len -= 3 statement into middle of loop |
338 */ | 338 */ |
339 | 339 |
340 #endif /* !ASMINF */ | 340 #endif /* !ASMINF */ |
OLD | NEW |