diff options
author | Igor Pavlov <87184205+ip7z@users.noreply.github.com> | 2023-06-21 00:00:00 +0000 |
---|---|---|
committer | Igor Pavlov <87184205+ip7z@users.noreply.github.com> | 2023-12-17 14:59:19 +0500 |
commit | 5b39dc76f1bc82f941d5c800ab9f34407a06b53a (patch) | |
tree | fe5e17420300b715021a76328444088d32047963 /C/LzmaDec.c | |
parent | 93be7d4abfd4233228f58ee1fbbcd76d91be66a4 (diff) | |
download | 7zip-5b39dc76f1bc82f941d5c800ab9f34407a06b53a.tar.gz 7zip-5b39dc76f1bc82f941d5c800ab9f34407a06b53a.tar.bz2 7zip-5b39dc76f1bc82f941d5c800ab9f34407a06b53a.zip |
23.0123.01
Diffstat (limited to 'C/LzmaDec.c')
-rw-r--r-- | C/LzmaDec.c | 190 |
1 files changed, 95 insertions, 95 deletions
diff --git a/C/LzmaDec.c b/C/LzmaDec.c index d6742e5..69bb8bb 100644 --- a/C/LzmaDec.c +++ b/C/LzmaDec.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* LzmaDec.c -- LZMA Decoder | 1 | /* LzmaDec.c -- LZMA Decoder |
2 | 2021-04-01 : Igor Pavlov : Public domain */ | 2 | 2023-04-07 : Igor Pavlov : Public domain */ |
3 | 3 | ||
4 | #include "Precomp.h" | 4 | #include "Precomp.h" |
5 | 5 | ||
@@ -8,15 +8,15 @@ | |||
8 | /* #include "CpuArch.h" */ | 8 | /* #include "CpuArch.h" */ |
9 | #include "LzmaDec.h" | 9 | #include "LzmaDec.h" |
10 | 10 | ||
11 | #define kNumTopBits 24 | 11 | // #define kNumTopBits 24 |
12 | #define kTopValue ((UInt32)1 << kNumTopBits) | 12 | #define kTopValue ((UInt32)1 << 24) |
13 | 13 | ||
14 | #define kNumBitModelTotalBits 11 | 14 | #define kNumBitModelTotalBits 11 |
15 | #define kBitModelTotal (1 << kNumBitModelTotalBits) | 15 | #define kBitModelTotal (1 << kNumBitModelTotalBits) |
16 | 16 | ||
17 | #define RC_INIT_SIZE 5 | 17 | #define RC_INIT_SIZE 5 |
18 | 18 | ||
19 | #ifndef _LZMA_DEC_OPT | 19 | #ifndef Z7_LZMA_DEC_OPT |
20 | 20 | ||
21 | #define kNumMoveBits 5 | 21 | #define kNumMoveBits 5 |
22 | #define NORMALIZE if (range < kTopValue) { range <<= 8; code = (code << 8) | (*buf++); } | 22 | #define NORMALIZE if (range < kTopValue) { range <<= 8; code = (code << 8) | (*buf++); } |
@@ -25,14 +25,14 @@ | |||
25 | #define UPDATE_0(p) range = bound; *(p) = (CLzmaProb)(ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)); | 25 | #define UPDATE_0(p) range = bound; *(p) = (CLzmaProb)(ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)); |
26 | #define UPDATE_1(p) range -= bound; code -= bound; *(p) = (CLzmaProb)(ttt - (ttt >> kNumMoveBits)); | 26 | #define UPDATE_1(p) range -= bound; code -= bound; *(p) = (CLzmaProb)(ttt - (ttt >> kNumMoveBits)); |
27 | #define GET_BIT2(p, i, A0, A1) IF_BIT_0(p) \ | 27 | #define GET_BIT2(p, i, A0, A1) IF_BIT_0(p) \ |
28 | { UPDATE_0(p); i = (i + i); A0; } else \ | 28 | { UPDATE_0(p) i = (i + i); A0; } else \ |
29 | { UPDATE_1(p); i = (i + i) + 1; A1; } | 29 | { UPDATE_1(p) i = (i + i) + 1; A1; } |
30 | 30 | ||
31 | #define TREE_GET_BIT(probs, i) { GET_BIT2(probs + i, i, ;, ;); } | 31 | #define TREE_GET_BIT(probs, i) { GET_BIT2(probs + i, i, ;, ;); } |
32 | 32 | ||
33 | #define REV_BIT(p, i, A0, A1) IF_BIT_0(p + i) \ | 33 | #define REV_BIT(p, i, A0, A1) IF_BIT_0(p + i) \ |
34 | { UPDATE_0(p + i); A0; } else \ | 34 | { UPDATE_0(p + i) A0; } else \ |
35 | { UPDATE_1(p + i); A1; } | 35 | { UPDATE_1(p + i) A1; } |
36 | #define REV_BIT_VAR( p, i, m) REV_BIT(p, i, i += m; m += m, m += m; i += m; ) | 36 | #define REV_BIT_VAR( p, i, m) REV_BIT(p, i, i += m; m += m, m += m; i += m; ) |
37 | #define REV_BIT_CONST(p, i, m) REV_BIT(p, i, i += m; , i += m * 2; ) | 37 | #define REV_BIT_CONST(p, i, m) REV_BIT(p, i, i += m; , i += m * 2; ) |
38 | #define REV_BIT_LAST( p, i, m) REV_BIT(p, i, i -= m , ; ) | 38 | #define REV_BIT_LAST( p, i, m) REV_BIT(p, i, i -= m , ; ) |
@@ -40,19 +40,19 @@ | |||
40 | #define TREE_DECODE(probs, limit, i) \ | 40 | #define TREE_DECODE(probs, limit, i) \ |
41 | { i = 1; do { TREE_GET_BIT(probs, i); } while (i < limit); i -= limit; } | 41 | { i = 1; do { TREE_GET_BIT(probs, i); } while (i < limit); i -= limit; } |
42 | 42 | ||
43 | /* #define _LZMA_SIZE_OPT */ | 43 | /* #define Z7_LZMA_SIZE_OPT */ |
44 | 44 | ||
45 | #ifdef _LZMA_SIZE_OPT | 45 | #ifdef Z7_LZMA_SIZE_OPT |
46 | #define TREE_6_DECODE(probs, i) TREE_DECODE(probs, (1 << 6), i) | 46 | #define TREE_6_DECODE(probs, i) TREE_DECODE(probs, (1 << 6), i) |
47 | #else | 47 | #else |
48 | #define TREE_6_DECODE(probs, i) \ | 48 | #define TREE_6_DECODE(probs, i) \ |
49 | { i = 1; \ | 49 | { i = 1; \ |
50 | TREE_GET_BIT(probs, i); \ | 50 | TREE_GET_BIT(probs, i) \ |
51 | TREE_GET_BIT(probs, i); \ | 51 | TREE_GET_BIT(probs, i) \ |
52 | TREE_GET_BIT(probs, i); \ | 52 | TREE_GET_BIT(probs, i) \ |
53 | TREE_GET_BIT(probs, i); \ | 53 | TREE_GET_BIT(probs, i) \ |
54 | TREE_GET_BIT(probs, i); \ | 54 | TREE_GET_BIT(probs, i) \ |
55 | TREE_GET_BIT(probs, i); \ | 55 | TREE_GET_BIT(probs, i) \ |
56 | i -= 0x40; } | 56 | i -= 0x40; } |
57 | #endif | 57 | #endif |
58 | 58 | ||
@@ -64,25 +64,25 @@ | |||
64 | probLit = prob + (offs + bit + symbol); \ | 64 | probLit = prob + (offs + bit + symbol); \ |
65 | GET_BIT2(probLit, symbol, offs ^= bit; , ;) | 65 | GET_BIT2(probLit, symbol, offs ^= bit; , ;) |
66 | 66 | ||
67 | #endif // _LZMA_DEC_OPT | 67 | #endif // Z7_LZMA_DEC_OPT |
68 | 68 | ||
69 | 69 | ||
70 | #define NORMALIZE_CHECK if (range < kTopValue) { if (buf >= bufLimit) return DUMMY_INPUT_EOF; range <<= 8; code = (code << 8) | (*buf++); } | 70 | #define NORMALIZE_CHECK if (range < kTopValue) { if (buf >= bufLimit) return DUMMY_INPUT_EOF; range <<= 8; code = (code << 8) | (*buf++); } |
71 | 71 | ||
72 | #define IF_BIT_0_CHECK(p) ttt = *(p); NORMALIZE_CHECK; bound = (range >> kNumBitModelTotalBits) * (UInt32)ttt; if (code < bound) | 72 | #define IF_BIT_0_CHECK(p) ttt = *(p); NORMALIZE_CHECK bound = (range >> kNumBitModelTotalBits) * (UInt32)ttt; if (code < bound) |
73 | #define UPDATE_0_CHECK range = bound; | 73 | #define UPDATE_0_CHECK range = bound; |
74 | #define UPDATE_1_CHECK range -= bound; code -= bound; | 74 | #define UPDATE_1_CHECK range -= bound; code -= bound; |
75 | #define GET_BIT2_CHECK(p, i, A0, A1) IF_BIT_0_CHECK(p) \ | 75 | #define GET_BIT2_CHECK(p, i, A0, A1) IF_BIT_0_CHECK(p) \ |
76 | { UPDATE_0_CHECK; i = (i + i); A0; } else \ | 76 | { UPDATE_0_CHECK i = (i + i); A0; } else \ |
77 | { UPDATE_1_CHECK; i = (i + i) + 1; A1; } | 77 | { UPDATE_1_CHECK i = (i + i) + 1; A1; } |
78 | #define GET_BIT_CHECK(p, i) GET_BIT2_CHECK(p, i, ; , ;) | 78 | #define GET_BIT_CHECK(p, i) GET_BIT2_CHECK(p, i, ; , ;) |
79 | #define TREE_DECODE_CHECK(probs, limit, i) \ | 79 | #define TREE_DECODE_CHECK(probs, limit, i) \ |
80 | { i = 1; do { GET_BIT_CHECK(probs + i, i) } while (i < limit); i -= limit; } | 80 | { i = 1; do { GET_BIT_CHECK(probs + i, i) } while (i < limit); i -= limit; } |
81 | 81 | ||
82 | 82 | ||
83 | #define REV_BIT_CHECK(p, i, m) IF_BIT_0_CHECK(p + i) \ | 83 | #define REV_BIT_CHECK(p, i, m) IF_BIT_0_CHECK(p + i) \ |
84 | { UPDATE_0_CHECK; i += m; m += m; } else \ | 84 | { UPDATE_0_CHECK i += m; m += m; } else \ |
85 | { UPDATE_1_CHECK; m += m; i += m; } | 85 | { UPDATE_1_CHECK m += m; i += m; } |
86 | 86 | ||
87 | 87 | ||
88 | #define kNumPosBitsMax 4 | 88 | #define kNumPosBitsMax 4 |
@@ -224,14 +224,14 @@ Out: | |||
224 | */ | 224 | */ |
225 | 225 | ||
226 | 226 | ||
227 | #ifdef _LZMA_DEC_OPT | 227 | #ifdef Z7_LZMA_DEC_OPT |
228 | 228 | ||
229 | int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit); | 229 | int Z7_FASTCALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit); |
230 | 230 | ||
231 | #else | 231 | #else |
232 | 232 | ||
233 | static | 233 | static |
234 | int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit) | 234 | int Z7_FASTCALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit) |
235 | { | 235 | { |
236 | CLzmaProb *probs = GET_PROBS; | 236 | CLzmaProb *probs = GET_PROBS; |
237 | unsigned state = (unsigned)p->state; | 237 | unsigned state = (unsigned)p->state; |
@@ -263,7 +263,7 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit | |||
263 | IF_BIT_0(prob) | 263 | IF_BIT_0(prob) |
264 | { | 264 | { |
265 | unsigned symbol; | 265 | unsigned symbol; |
266 | UPDATE_0(prob); | 266 | UPDATE_0(prob) |
267 | prob = probs + Literal; | 267 | prob = probs + Literal; |
268 | if (processedPos != 0 || checkDicSize != 0) | 268 | if (processedPos != 0 || checkDicSize != 0) |
269 | prob += (UInt32)3 * ((((processedPos << 8) + dic[(dicPos == 0 ? dicBufSize : dicPos) - 1]) & lpMask) << lc); | 269 | prob += (UInt32)3 * ((((processedPos << 8) + dic[(dicPos == 0 ? dicBufSize : dicPos) - 1]) & lpMask) << lc); |
@@ -273,7 +273,7 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit | |||
273 | { | 273 | { |
274 | state -= (state < 4) ? state : 3; | 274 | state -= (state < 4) ? state : 3; |
275 | symbol = 1; | 275 | symbol = 1; |
276 | #ifdef _LZMA_SIZE_OPT | 276 | #ifdef Z7_LZMA_SIZE_OPT |
277 | do { NORMAL_LITER_DEC } while (symbol < 0x100); | 277 | do { NORMAL_LITER_DEC } while (symbol < 0x100); |
278 | #else | 278 | #else |
279 | NORMAL_LITER_DEC | 279 | NORMAL_LITER_DEC |
@@ -292,7 +292,7 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit | |||
292 | unsigned offs = 0x100; | 292 | unsigned offs = 0x100; |
293 | state -= (state < 10) ? 3 : 6; | 293 | state -= (state < 10) ? 3 : 6; |
294 | symbol = 1; | 294 | symbol = 1; |
295 | #ifdef _LZMA_SIZE_OPT | 295 | #ifdef Z7_LZMA_SIZE_OPT |
296 | do | 296 | do |
297 | { | 297 | { |
298 | unsigned bit; | 298 | unsigned bit; |
@@ -321,25 +321,25 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit | |||
321 | } | 321 | } |
322 | 322 | ||
323 | { | 323 | { |
324 | UPDATE_1(prob); | 324 | UPDATE_1(prob) |
325 | prob = probs + IsRep + state; | 325 | prob = probs + IsRep + state; |
326 | IF_BIT_0(prob) | 326 | IF_BIT_0(prob) |
327 | { | 327 | { |
328 | UPDATE_0(prob); | 328 | UPDATE_0(prob) |
329 | state += kNumStates; | 329 | state += kNumStates; |
330 | prob = probs + LenCoder; | 330 | prob = probs + LenCoder; |
331 | } | 331 | } |
332 | else | 332 | else |
333 | { | 333 | { |
334 | UPDATE_1(prob); | 334 | UPDATE_1(prob) |
335 | prob = probs + IsRepG0 + state; | 335 | prob = probs + IsRepG0 + state; |
336 | IF_BIT_0(prob) | 336 | IF_BIT_0(prob) |
337 | { | 337 | { |
338 | UPDATE_0(prob); | 338 | UPDATE_0(prob) |
339 | prob = probs + IsRep0Long + COMBINED_PS_STATE; | 339 | prob = probs + IsRep0Long + COMBINED_PS_STATE; |
340 | IF_BIT_0(prob) | 340 | IF_BIT_0(prob) |
341 | { | 341 | { |
342 | UPDATE_0(prob); | 342 | UPDATE_0(prob) |
343 | 343 | ||
344 | // that case was checked before with kBadRepCode | 344 | // that case was checked before with kBadRepCode |
345 | // if (checkDicSize == 0 && processedPos == 0) { len = kMatchSpecLen_Error_Data + 1; break; } | 345 | // if (checkDicSize == 0 && processedPos == 0) { len = kMatchSpecLen_Error_Data + 1; break; } |
@@ -353,30 +353,30 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit | |||
353 | state = state < kNumLitStates ? 9 : 11; | 353 | state = state < kNumLitStates ? 9 : 11; |
354 | continue; | 354 | continue; |
355 | } | 355 | } |
356 | UPDATE_1(prob); | 356 | UPDATE_1(prob) |
357 | } | 357 | } |
358 | else | 358 | else |
359 | { | 359 | { |
360 | UInt32 distance; | 360 | UInt32 distance; |
361 | UPDATE_1(prob); | 361 | UPDATE_1(prob) |
362 | prob = probs + IsRepG1 + state; | 362 | prob = probs + IsRepG1 + state; |
363 | IF_BIT_0(prob) | 363 | IF_BIT_0(prob) |
364 | { | 364 | { |
365 | UPDATE_0(prob); | 365 | UPDATE_0(prob) |
366 | distance = rep1; | 366 | distance = rep1; |
367 | } | 367 | } |
368 | else | 368 | else |
369 | { | 369 | { |
370 | UPDATE_1(prob); | 370 | UPDATE_1(prob) |
371 | prob = probs + IsRepG2 + state; | 371 | prob = probs + IsRepG2 + state; |
372 | IF_BIT_0(prob) | 372 | IF_BIT_0(prob) |
373 | { | 373 | { |
374 | UPDATE_0(prob); | 374 | UPDATE_0(prob) |
375 | distance = rep2; | 375 | distance = rep2; |
376 | } | 376 | } |
377 | else | 377 | else |
378 | { | 378 | { |
379 | UPDATE_1(prob); | 379 | UPDATE_1(prob) |
380 | distance = rep3; | 380 | distance = rep3; |
381 | rep3 = rep2; | 381 | rep3 = rep2; |
382 | } | 382 | } |
@@ -389,37 +389,37 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit | |||
389 | prob = probs + RepLenCoder; | 389 | prob = probs + RepLenCoder; |
390 | } | 390 | } |
391 | 391 | ||
392 | #ifdef _LZMA_SIZE_OPT | 392 | #ifdef Z7_LZMA_SIZE_OPT |
393 | { | 393 | { |
394 | unsigned lim, offset; | 394 | unsigned lim, offset; |
395 | CLzmaProb *probLen = prob + LenChoice; | 395 | CLzmaProb *probLen = prob + LenChoice; |
396 | IF_BIT_0(probLen) | 396 | IF_BIT_0(probLen) |
397 | { | 397 | { |
398 | UPDATE_0(probLen); | 398 | UPDATE_0(probLen) |
399 | probLen = prob + LenLow + GET_LEN_STATE; | 399 | probLen = prob + LenLow + GET_LEN_STATE; |
400 | offset = 0; | 400 | offset = 0; |
401 | lim = (1 << kLenNumLowBits); | 401 | lim = (1 << kLenNumLowBits); |
402 | } | 402 | } |
403 | else | 403 | else |
404 | { | 404 | { |
405 | UPDATE_1(probLen); | 405 | UPDATE_1(probLen) |
406 | probLen = prob + LenChoice2; | 406 | probLen = prob + LenChoice2; |
407 | IF_BIT_0(probLen) | 407 | IF_BIT_0(probLen) |
408 | { | 408 | { |
409 | UPDATE_0(probLen); | 409 | UPDATE_0(probLen) |
410 | probLen = prob + LenLow + GET_LEN_STATE + (1 << kLenNumLowBits); | 410 | probLen = prob + LenLow + GET_LEN_STATE + (1 << kLenNumLowBits); |
411 | offset = kLenNumLowSymbols; | 411 | offset = kLenNumLowSymbols; |
412 | lim = (1 << kLenNumLowBits); | 412 | lim = (1 << kLenNumLowBits); |
413 | } | 413 | } |
414 | else | 414 | else |
415 | { | 415 | { |
416 | UPDATE_1(probLen); | 416 | UPDATE_1(probLen) |
417 | probLen = prob + LenHigh; | 417 | probLen = prob + LenHigh; |
418 | offset = kLenNumLowSymbols * 2; | 418 | offset = kLenNumLowSymbols * 2; |
419 | lim = (1 << kLenNumHighBits); | 419 | lim = (1 << kLenNumHighBits); |
420 | } | 420 | } |
421 | } | 421 | } |
422 | TREE_DECODE(probLen, lim, len); | 422 | TREE_DECODE(probLen, lim, len) |
423 | len += offset; | 423 | len += offset; |
424 | } | 424 | } |
425 | #else | 425 | #else |
@@ -427,32 +427,32 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit | |||
427 | CLzmaProb *probLen = prob + LenChoice; | 427 | CLzmaProb *probLen = prob + LenChoice; |
428 | IF_BIT_0(probLen) | 428 | IF_BIT_0(probLen) |
429 | { | 429 | { |
430 | UPDATE_0(probLen); | 430 | UPDATE_0(probLen) |
431 | probLen = prob + LenLow + GET_LEN_STATE; | 431 | probLen = prob + LenLow + GET_LEN_STATE; |
432 | len = 1; | 432 | len = 1; |
433 | TREE_GET_BIT(probLen, len); | 433 | TREE_GET_BIT(probLen, len) |
434 | TREE_GET_BIT(probLen, len); | 434 | TREE_GET_BIT(probLen, len) |
435 | TREE_GET_BIT(probLen, len); | 435 | TREE_GET_BIT(probLen, len) |
436 | len -= 8; | 436 | len -= 8; |
437 | } | 437 | } |
438 | else | 438 | else |
439 | { | 439 | { |
440 | UPDATE_1(probLen); | 440 | UPDATE_1(probLen) |
441 | probLen = prob + LenChoice2; | 441 | probLen = prob + LenChoice2; |
442 | IF_BIT_0(probLen) | 442 | IF_BIT_0(probLen) |
443 | { | 443 | { |
444 | UPDATE_0(probLen); | 444 | UPDATE_0(probLen) |
445 | probLen = prob + LenLow + GET_LEN_STATE + (1 << kLenNumLowBits); | 445 | probLen = prob + LenLow + GET_LEN_STATE + (1 << kLenNumLowBits); |
446 | len = 1; | 446 | len = 1; |
447 | TREE_GET_BIT(probLen, len); | 447 | TREE_GET_BIT(probLen, len) |
448 | TREE_GET_BIT(probLen, len); | 448 | TREE_GET_BIT(probLen, len) |
449 | TREE_GET_BIT(probLen, len); | 449 | TREE_GET_BIT(probLen, len) |
450 | } | 450 | } |
451 | else | 451 | else |
452 | { | 452 | { |
453 | UPDATE_1(probLen); | 453 | UPDATE_1(probLen) |
454 | probLen = prob + LenHigh; | 454 | probLen = prob + LenHigh; |
455 | TREE_DECODE(probLen, (1 << kLenNumHighBits), len); | 455 | TREE_DECODE(probLen, (1 << kLenNumHighBits), len) |
456 | len += kLenNumLowSymbols * 2; | 456 | len += kLenNumLowSymbols * 2; |
457 | } | 457 | } |
458 | } | 458 | } |
@@ -464,7 +464,7 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit | |||
464 | UInt32 distance; | 464 | UInt32 distance; |
465 | prob = probs + PosSlot + | 465 | prob = probs + PosSlot + |
466 | ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) << kNumPosSlotBits); | 466 | ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) << kNumPosSlotBits); |
467 | TREE_6_DECODE(prob, distance); | 467 | TREE_6_DECODE(prob, distance) |
468 | if (distance >= kStartPosModelIndex) | 468 | if (distance >= kStartPosModelIndex) |
469 | { | 469 | { |
470 | unsigned posSlot = (unsigned)distance; | 470 | unsigned posSlot = (unsigned)distance; |
@@ -479,7 +479,7 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit | |||
479 | distance++; | 479 | distance++; |
480 | do | 480 | do |
481 | { | 481 | { |
482 | REV_BIT_VAR(prob, distance, m); | 482 | REV_BIT_VAR(prob, distance, m) |
483 | } | 483 | } |
484 | while (--numDirectBits); | 484 | while (--numDirectBits); |
485 | distance -= m; | 485 | distance -= m; |
@@ -514,10 +514,10 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit | |||
514 | distance <<= kNumAlignBits; | 514 | distance <<= kNumAlignBits; |
515 | { | 515 | { |
516 | unsigned i = 1; | 516 | unsigned i = 1; |
517 | REV_BIT_CONST(prob, i, 1); | 517 | REV_BIT_CONST(prob, i, 1) |
518 | REV_BIT_CONST(prob, i, 2); | 518 | REV_BIT_CONST(prob, i, 2) |
519 | REV_BIT_CONST(prob, i, 4); | 519 | REV_BIT_CONST(prob, i, 4) |
520 | REV_BIT_LAST (prob, i, 8); | 520 | REV_BIT_LAST (prob, i, 8) |
521 | distance |= i; | 521 | distance |= i; |
522 | } | 522 | } |
523 | if (distance == (UInt32)0xFFFFFFFF) | 523 | if (distance == (UInt32)0xFFFFFFFF) |
@@ -592,7 +592,7 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit | |||
592 | } | 592 | } |
593 | while (dicPos < limit && buf < bufLimit); | 593 | while (dicPos < limit && buf < bufLimit); |
594 | 594 | ||
595 | NORMALIZE; | 595 | NORMALIZE |
596 | 596 | ||
597 | p->buf = buf; | 597 | p->buf = buf; |
598 | p->range = range; | 598 | p->range = range; |
@@ -613,7 +613,7 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit | |||
613 | 613 | ||
614 | 614 | ||
615 | 615 | ||
616 | static void MY_FAST_CALL LzmaDec_WriteRem(CLzmaDec *p, SizeT limit) | 616 | static void Z7_FASTCALL LzmaDec_WriteRem(CLzmaDec *p, SizeT limit) |
617 | { | 617 | { |
618 | unsigned len = (unsigned)p->remainLen; | 618 | unsigned len = (unsigned)p->remainLen; |
619 | if (len == 0 /* || len >= kMatchSpecLenStart */) | 619 | if (len == 0 /* || len >= kMatchSpecLenStart */) |
@@ -683,7 +683,7 @@ and we support the following state of (p->checkDicSize): | |||
683 | (p->checkDicSize == p->prop.dicSize) | 683 | (p->checkDicSize == p->prop.dicSize) |
684 | */ | 684 | */ |
685 | 685 | ||
686 | static int MY_FAST_CALL LzmaDec_DecodeReal2(CLzmaDec *p, SizeT limit, const Byte *bufLimit) | 686 | static int Z7_FASTCALL LzmaDec_DecodeReal2(CLzmaDec *p, SizeT limit, const Byte *bufLimit) |
687 | { | 687 | { |
688 | if (p->checkDicSize == 0) | 688 | if (p->checkDicSize == 0) |
689 | { | 689 | { |
@@ -767,54 +767,54 @@ static ELzmaDummy LzmaDec_TryDummy(const CLzmaDec *p, const Byte *buf, const Byt | |||
767 | else | 767 | else |
768 | { | 768 | { |
769 | unsigned len; | 769 | unsigned len; |
770 | UPDATE_1_CHECK; | 770 | UPDATE_1_CHECK |
771 | 771 | ||
772 | prob = probs + IsRep + state; | 772 | prob = probs + IsRep + state; |
773 | IF_BIT_0_CHECK(prob) | 773 | IF_BIT_0_CHECK(prob) |
774 | { | 774 | { |
775 | UPDATE_0_CHECK; | 775 | UPDATE_0_CHECK |
776 | state = 0; | 776 | state = 0; |
777 | prob = probs + LenCoder; | 777 | prob = probs + LenCoder; |
778 | res = DUMMY_MATCH; | 778 | res = DUMMY_MATCH; |
779 | } | 779 | } |
780 | else | 780 | else |
781 | { | 781 | { |
782 | UPDATE_1_CHECK; | 782 | UPDATE_1_CHECK |
783 | res = DUMMY_REP; | 783 | res = DUMMY_REP; |
784 | prob = probs + IsRepG0 + state; | 784 | prob = probs + IsRepG0 + state; |
785 | IF_BIT_0_CHECK(prob) | 785 | IF_BIT_0_CHECK(prob) |
786 | { | 786 | { |
787 | UPDATE_0_CHECK; | 787 | UPDATE_0_CHECK |
788 | prob = probs + IsRep0Long + COMBINED_PS_STATE; | 788 | prob = probs + IsRep0Long + COMBINED_PS_STATE; |
789 | IF_BIT_0_CHECK(prob) | 789 | IF_BIT_0_CHECK(prob) |
790 | { | 790 | { |
791 | UPDATE_0_CHECK; | 791 | UPDATE_0_CHECK |
792 | break; | 792 | break; |
793 | } | 793 | } |
794 | else | 794 | else |
795 | { | 795 | { |
796 | UPDATE_1_CHECK; | 796 | UPDATE_1_CHECK |
797 | } | 797 | } |
798 | } | 798 | } |
799 | else | 799 | else |
800 | { | 800 | { |
801 | UPDATE_1_CHECK; | 801 | UPDATE_1_CHECK |
802 | prob = probs + IsRepG1 + state; | 802 | prob = probs + IsRepG1 + state; |
803 | IF_BIT_0_CHECK(prob) | 803 | IF_BIT_0_CHECK(prob) |
804 | { | 804 | { |
805 | UPDATE_0_CHECK; | 805 | UPDATE_0_CHECK |
806 | } | 806 | } |
807 | else | 807 | else |
808 | { | 808 | { |
809 | UPDATE_1_CHECK; | 809 | UPDATE_1_CHECK |
810 | prob = probs + IsRepG2 + state; | 810 | prob = probs + IsRepG2 + state; |
811 | IF_BIT_0_CHECK(prob) | 811 | IF_BIT_0_CHECK(prob) |
812 | { | 812 | { |
813 | UPDATE_0_CHECK; | 813 | UPDATE_0_CHECK |
814 | } | 814 | } |
815 | else | 815 | else |
816 | { | 816 | { |
817 | UPDATE_1_CHECK; | 817 | UPDATE_1_CHECK |
818 | } | 818 | } |
819 | } | 819 | } |
820 | } | 820 | } |
@@ -826,31 +826,31 @@ static ELzmaDummy LzmaDec_TryDummy(const CLzmaDec *p, const Byte *buf, const Byt | |||
826 | const CLzmaProb *probLen = prob + LenChoice; | 826 | const CLzmaProb *probLen = prob + LenChoice; |
827 | IF_BIT_0_CHECK(probLen) | 827 | IF_BIT_0_CHECK(probLen) |
828 | { | 828 | { |
829 | UPDATE_0_CHECK; | 829 | UPDATE_0_CHECK |
830 | probLen = prob + LenLow + GET_LEN_STATE; | 830 | probLen = prob + LenLow + GET_LEN_STATE; |
831 | offset = 0; | 831 | offset = 0; |
832 | limit = 1 << kLenNumLowBits; | 832 | limit = 1 << kLenNumLowBits; |
833 | } | 833 | } |
834 | else | 834 | else |
835 | { | 835 | { |
836 | UPDATE_1_CHECK; | 836 | UPDATE_1_CHECK |
837 | probLen = prob + LenChoice2; | 837 | probLen = prob + LenChoice2; |
838 | IF_BIT_0_CHECK(probLen) | 838 | IF_BIT_0_CHECK(probLen) |
839 | { | 839 | { |
840 | UPDATE_0_CHECK; | 840 | UPDATE_0_CHECK |
841 | probLen = prob + LenLow + GET_LEN_STATE + (1 << kLenNumLowBits); | 841 | probLen = prob + LenLow + GET_LEN_STATE + (1 << kLenNumLowBits); |
842 | offset = kLenNumLowSymbols; | 842 | offset = kLenNumLowSymbols; |
843 | limit = 1 << kLenNumLowBits; | 843 | limit = 1 << kLenNumLowBits; |
844 | } | 844 | } |
845 | else | 845 | else |
846 | { | 846 | { |
847 | UPDATE_1_CHECK; | 847 | UPDATE_1_CHECK |
848 | probLen = prob + LenHigh; | 848 | probLen = prob + LenHigh; |
849 | offset = kLenNumLowSymbols * 2; | 849 | offset = kLenNumLowSymbols * 2; |
850 | limit = 1 << kLenNumHighBits; | 850 | limit = 1 << kLenNumHighBits; |
851 | } | 851 | } |
852 | } | 852 | } |
853 | TREE_DECODE_CHECK(probLen, limit, len); | 853 | TREE_DECODE_CHECK(probLen, limit, len) |
854 | len += offset; | 854 | len += offset; |
855 | } | 855 | } |
856 | 856 | ||
@@ -860,7 +860,7 @@ static ELzmaDummy LzmaDec_TryDummy(const CLzmaDec *p, const Byte *buf, const Byt | |||
860 | prob = probs + PosSlot + | 860 | prob = probs + PosSlot + |
861 | ((len < kNumLenToPosStates - 1 ? len : kNumLenToPosStates - 1) << | 861 | ((len < kNumLenToPosStates - 1 ? len : kNumLenToPosStates - 1) << |
862 | kNumPosSlotBits); | 862 | kNumPosSlotBits); |
863 | TREE_DECODE_CHECK(prob, 1 << kNumPosSlotBits, posSlot); | 863 | TREE_DECODE_CHECK(prob, 1 << kNumPosSlotBits, posSlot) |
864 | if (posSlot >= kStartPosModelIndex) | 864 | if (posSlot >= kStartPosModelIndex) |
865 | { | 865 | { |
866 | unsigned numDirectBits = ((posSlot >> 1) - 1); | 866 | unsigned numDirectBits = ((posSlot >> 1) - 1); |
@@ -888,7 +888,7 @@ static ELzmaDummy LzmaDec_TryDummy(const CLzmaDec *p, const Byte *buf, const Byt | |||
888 | unsigned m = 1; | 888 | unsigned m = 1; |
889 | do | 889 | do |
890 | { | 890 | { |
891 | REV_BIT_CHECK(prob, i, m); | 891 | REV_BIT_CHECK(prob, i, m) |
892 | } | 892 | } |
893 | while (--numDirectBits); | 893 | while (--numDirectBits); |
894 | } | 894 | } |
@@ -897,7 +897,7 @@ static ELzmaDummy LzmaDec_TryDummy(const CLzmaDec *p, const Byte *buf, const Byt | |||
897 | } | 897 | } |
898 | break; | 898 | break; |
899 | } | 899 | } |
900 | NORMALIZE_CHECK; | 900 | NORMALIZE_CHECK |
901 | 901 | ||
902 | *bufOut = buf; | 902 | *bufOut = buf; |
903 | return res; | 903 | return res; |
@@ -943,7 +943,7 @@ When the decoder lookahead, and the lookahead symbol is not end_marker, we have | |||
943 | */ | 943 | */ |
944 | 944 | ||
945 | 945 | ||
946 | #define RETURN__NOT_FINISHED__FOR_FINISH \ | 946 | #define RETURN_NOT_FINISHED_FOR_FINISH \ |
947 | *status = LZMA_STATUS_NOT_FINISHED; \ | 947 | *status = LZMA_STATUS_NOT_FINISHED; \ |
948 | return SZ_ERROR_DATA; // for strict mode | 948 | return SZ_ERROR_DATA; // for strict mode |
949 | // return SZ_OK; // for relaxed mode | 949 | // return SZ_OK; // for relaxed mode |
@@ -1029,7 +1029,7 @@ SRes LzmaDec_DecodeToDic(CLzmaDec *p, SizeT dicLimit, const Byte *src, SizeT *sr | |||
1029 | } | 1029 | } |
1030 | if (p->remainLen != 0) | 1030 | if (p->remainLen != 0) |
1031 | { | 1031 | { |
1032 | RETURN__NOT_FINISHED__FOR_FINISH; | 1032 | RETURN_NOT_FINISHED_FOR_FINISH |
1033 | } | 1033 | } |
1034 | checkEndMarkNow = 1; | 1034 | checkEndMarkNow = 1; |
1035 | } | 1035 | } |
@@ -1072,7 +1072,7 @@ SRes LzmaDec_DecodeToDic(CLzmaDec *p, SizeT dicLimit, const Byte *src, SizeT *sr | |||
1072 | for (i = 0; i < (unsigned)dummyProcessed; i++) | 1072 | for (i = 0; i < (unsigned)dummyProcessed; i++) |
1073 | p->tempBuf[i] = src[i]; | 1073 | p->tempBuf[i] = src[i]; |
1074 | // p->remainLen = kMatchSpecLen_Error_Data; | 1074 | // p->remainLen = kMatchSpecLen_Error_Data; |
1075 | RETURN__NOT_FINISHED__FOR_FINISH; | 1075 | RETURN_NOT_FINISHED_FOR_FINISH |
1076 | } | 1076 | } |
1077 | 1077 | ||
1078 | bufLimit = src; | 1078 | bufLimit = src; |
@@ -1150,7 +1150,7 @@ SRes LzmaDec_DecodeToDic(CLzmaDec *p, SizeT dicLimit, const Byte *src, SizeT *sr | |||
1150 | (*srcLen) += (unsigned)dummyProcessed - p->tempBufSize; | 1150 | (*srcLen) += (unsigned)dummyProcessed - p->tempBufSize; |
1151 | p->tempBufSize = (unsigned)dummyProcessed; | 1151 | p->tempBufSize = (unsigned)dummyProcessed; |
1152 | // p->remainLen = kMatchSpecLen_Error_Data; | 1152 | // p->remainLen = kMatchSpecLen_Error_Data; |
1153 | RETURN__NOT_FINISHED__FOR_FINISH; | 1153 | RETURN_NOT_FINISHED_FOR_FINISH |
1154 | } | 1154 | } |
1155 | } | 1155 | } |
1156 | 1156 | ||
@@ -1299,8 +1299,8 @@ static SRes LzmaDec_AllocateProbs2(CLzmaDec *p, const CLzmaProps *propNew, ISzAl | |||
1299 | SRes LzmaDec_AllocateProbs(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAllocPtr alloc) | 1299 | SRes LzmaDec_AllocateProbs(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAllocPtr alloc) |
1300 | { | 1300 | { |
1301 | CLzmaProps propNew; | 1301 | CLzmaProps propNew; |
1302 | RINOK(LzmaProps_Decode(&propNew, props, propsSize)); | 1302 | RINOK(LzmaProps_Decode(&propNew, props, propsSize)) |
1303 | RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc)); | 1303 | RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc)) |
1304 | p->prop = propNew; | 1304 | p->prop = propNew; |
1305 | return SZ_OK; | 1305 | return SZ_OK; |
1306 | } | 1306 | } |
@@ -1309,14 +1309,14 @@ SRes LzmaDec_Allocate(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAll | |||
1309 | { | 1309 | { |
1310 | CLzmaProps propNew; | 1310 | CLzmaProps propNew; |
1311 | SizeT dicBufSize; | 1311 | SizeT dicBufSize; |
1312 | RINOK(LzmaProps_Decode(&propNew, props, propsSize)); | 1312 | RINOK(LzmaProps_Decode(&propNew, props, propsSize)) |
1313 | RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc)); | 1313 | RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc)) |
1314 | 1314 | ||
1315 | { | 1315 | { |
1316 | UInt32 dictSize = propNew.dicSize; | 1316 | UInt32 dictSize = propNew.dicSize; |
1317 | SizeT mask = ((UInt32)1 << 12) - 1; | 1317 | SizeT mask = ((UInt32)1 << 12) - 1; |
1318 | if (dictSize >= ((UInt32)1 << 30)) mask = ((UInt32)1 << 22) - 1; | 1318 | if (dictSize >= ((UInt32)1 << 30)) mask = ((UInt32)1 << 22) - 1; |
1319 | else if (dictSize >= ((UInt32)1 << 22)) mask = ((UInt32)1 << 20) - 1;; | 1319 | else if (dictSize >= ((UInt32)1 << 22)) mask = ((UInt32)1 << 20) - 1; |
1320 | dicBufSize = ((SizeT)dictSize + mask) & ~mask; | 1320 | dicBufSize = ((SizeT)dictSize + mask) & ~mask; |
1321 | if (dicBufSize < dictSize) | 1321 | if (dicBufSize < dictSize) |
1322 | dicBufSize = dictSize; | 1322 | dicBufSize = dictSize; |
@@ -1348,8 +1348,8 @@ SRes LzmaDecode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, | |||
1348 | *status = LZMA_STATUS_NOT_SPECIFIED; | 1348 | *status = LZMA_STATUS_NOT_SPECIFIED; |
1349 | if (inSize < RC_INIT_SIZE) | 1349 | if (inSize < RC_INIT_SIZE) |
1350 | return SZ_ERROR_INPUT_EOF; | 1350 | return SZ_ERROR_INPUT_EOF; |
1351 | LzmaDec_Construct(&p); | 1351 | LzmaDec_CONSTRUCT(&p) |
1352 | RINOK(LzmaDec_AllocateProbs(&p, propData, propSize, alloc)); | 1352 | RINOK(LzmaDec_AllocateProbs(&p, propData, propSize, alloc)) |
1353 | p.dic = dest; | 1353 | p.dic = dest; |
1354 | p.dicBufSize = outSize; | 1354 | p.dicBufSize = outSize; |
1355 | LzmaDec_Init(&p); | 1355 | LzmaDec_Init(&p); |