ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/liblzf/lzf_c.c
(Generate patch)

Comparing liblzf/lzf_c.c (file contents):
Revision 1.49 by root, Fri Nov 16 22:48:52 2012 UTC vs.
Revision 1.50 by root, Mon Jun 29 23:34:41 2015 UTC

69# define FRST(p) (p[0] << 5) ^ p[1] 69# define FRST(p) (p[0] << 5) ^ p[1]
70# define NEXT(v,p) ((v) << 5) ^ p[2] 70# define NEXT(v,p) ((v) << 5) ^ p[2]
71# define IDX(h) ((h) & (HSIZE - 1)) 71# define IDX(h) ((h) & (HSIZE - 1))
72#endif 72#endif
73 73
74#define MAX_LIT (1 << 5)
75#define MAX_OFF (1 << 13)
76#define MAX_REF ((1 << 8) + (1 << 3))
77
78#if __GNUC__ >= 3 74#if __GNUC__ >= 3
79# define expect(expr,value) __builtin_expect ((expr),(value)) 75# define expect(expr,value) __builtin_expect ((expr),(value))
80# define inline inline 76# define inline inline
81#else 77#else
82# define expect(expr,value) (expr) 78# define expect(expr,value) (expr)
152 148
153 if (1 149 if (1
154#if INIT_HTAB 150#if INIT_HTAB
155 && ref < ip /* the next test will actually take care of this, but this is faster */ 151 && ref < ip /* the next test will actually take care of this, but this is faster */
156#endif 152#endif
157 && (off = ip - ref - 1) < MAX_OFF 153 && (off = ip - ref - 1) < LZF_MAX_OFF
158 && ref > (u8 *)in_data 154 && ref > (u8 *)in_data
159 && ref[2] == ip[2] 155 && ref[2] == ip[2]
160#if STRICT_ALIGN 156#if STRICT_ALIGN
161 && ((ref[1] << 8) | ref[0]) == ((ip[1] << 8) | ip[0]) 157 && ((ref[1] << 8) | ref[0]) == ((ip[1] << 8) | ip[0])
162#else 158#else
165 ) 161 )
166 { 162 {
167 /* match found at *ref++ */ 163 /* match found at *ref++ */
168 unsigned int len = 2; 164 unsigned int len = 2;
169 unsigned int maxlen = in_end - ip - len; 165 unsigned int maxlen = in_end - ip - len;
170 maxlen = maxlen > MAX_REF ? MAX_REF : maxlen; 166 maxlen = maxlen > LZF_MAX_REF ? LZF_MAX_REF : maxlen;
171 167
172 if (expect_false (op + 3 + 1 >= out_end)) /* first a faster conservative test */ 168 if (expect_false (op + 3 + 1 >= out_end)) /* first a faster conservative test */
173 if (op - !lit + 3 + 1 >= out_end) /* second the exact but rare test */ 169 if (op - !lit + 3 + 1 >= out_end) /* second the exact but rare test */
174 return 0; 170 return 0;
175 171
264 if (expect_false (op >= out_end)) 260 if (expect_false (op >= out_end))
265 return 0; 261 return 0;
266 262
267 lit++; *op++ = *ip++; 263 lit++; *op++ = *ip++;
268 264
269 if (expect_false (lit == MAX_LIT)) 265 if (expect_false (lit == LZF_MAX_LIT))
270 { 266 {
271 op [- lit - 1] = lit - 1; /* stop run */ 267 op [- lit - 1] = lit - 1; /* stop run */
272 lit = 0; op++; /* start run */ 268 lit = 0; op++; /* start run */
273 } 269 }
274 } 270 }
279 275
280 while (ip < in_end) 276 while (ip < in_end)
281 { 277 {
282 lit++; *op++ = *ip++; 278 lit++; *op++ = *ip++;
283 279
284 if (expect_false (lit == MAX_LIT)) 280 if (expect_false (lit == LZF_MAX_LIT))
285 { 281 {
286 op [- lit - 1] = lit - 1; /* stop run */ 282 op [- lit - 1] = lit - 1; /* stop run */
287 lit = 0; op++; /* start run */ 283 lit = 0; op++; /* start run */
288 } 284 }
289 } 285 }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines