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.17 by root, Tue Nov 13 07:54:18 2007 UTC vs.
Revision 1.20 by root, Tue Nov 13 08:38:49 2007 UTC

141#endif 141#endif
142 && (off = ip - ref - 1) < MAX_OFF 142 && (off = ip - ref - 1) < MAX_OFF
143 && ip + 4 < in_end 143 && ip + 4 < in_end
144 && ref > (u8 *)in_data 144 && ref > (u8 *)in_data
145#if STRICT_ALIGN 145#if STRICT_ALIGN
146 x x x
146 && ref[0] == ip[0] 147 && ref[0] == ip[0]
147 && ref[1] == ip[1] 148 && ref[1] == ip[1]
148 && ref[2] == ip[2] 149 && ref[2] == ip[2]
149#else 150#else
150 && *(u16 *)ref == *(u16 *)ip 151 && *(u16 *)ref == *(u16 *)ip
158 maxlen = maxlen > MAX_REF ? MAX_REF : maxlen; 159 maxlen = maxlen > MAX_REF ? MAX_REF : maxlen;
159 160
160 if (expect_false (op + lit + 1 + 3 >= out_end)) 161 if (expect_false (op + lit + 1 + 3 >= out_end))
161 return 0; 162 return 0;
162 163
163 do 164 if (expect_false (lit))
164 len++;
165 while (len < maxlen && ref[len] == ip[len]);
166
167 if (lit)
168 { 165 {
169 *op++ = lit - 1; 166 *op++ = lit - 1;
170 lit = -lit; 167 lit = -lit;
171 do 168 do
172 *op++ = ip[lit]; 169 *op++ = ip[lit];
173 while (++lit); 170 while (expect_false (++lit));
171 }
172
173 for (;;)
174 {
175 if (expect_true (maxlen > 16))
176 {
177 len++; if (ref [len] != ip [len]) break;
178 len++; if (ref [len] != ip [len]) break;
179 len++; if (ref [len] != ip [len]) break;
180 len++; if (ref [len] != ip [len]) break;
181 len++; if (ref [len] != ip [len]) break;
182 len++; if (ref [len] != ip [len]) break;
183 len++; if (ref [len] != ip [len]) break;
184 len++; if (ref [len] != ip [len]) break;
185 len++; if (ref [len] != ip [len]) break;
186 len++; if (ref [len] != ip [len]) break;
187 len++; if (ref [len] != ip [len]) break;
188 len++; if (ref [len] != ip [len]) break;
189 len++; if (ref [len] != ip [len]) break;
190 len++; if (ref [len] != ip [len]) break;
191 len++; if (ref [len] != ip [len]) break;
192 len++; if (ref [len] != ip [len]) break;
193 }
194
195 do
196 len++;
197 while (len < maxlen && ref[len] == ip[len]);
198
199 break;
174 } 200 }
175 201
176 len -= 2; 202 len -= 2;
177 ip++; 203 ip++;
178 204
229 return 0; 255 return 0;
230 256
231 *op++ = MAX_LIT - 1; 257 *op++ = MAX_LIT - 1;
232 258
233#ifdef lzf_movsb 259#ifdef lzf_movsb
234 ip -= lit; 260 ip -= MAX_LIT;
235 lzf_movsb (op, ip, lit); 261 lzf_movsb (op, ip, lit);
236#else 262#else
237 lit = -lit; 263 lit = -lit;
238 do 264 do
239 *op++ = ip[lit]; 265 *op++ = ip[lit];

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines