From ad84409c9257a7b379b39ec7d1d63e49332d1144 Mon Sep 17 00:00:00 2001 From: eccles Date: Sat, 28 Sep 2002 14:01:32 +0000 Subject: [PATCH] Saved another 48 bytes of data for bzip2 (at the expense of 6 extra code bytes). bzip2 'randtable' not being initialised in makensis. git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@1212 212acab6-be3b-0410-9dea-997c60f758d6 --- Source/bzip2/bzlib_private.h | 2 +- Source/bzip2/randtable.c | 463 ++++++++++++++++------------------- 2 files changed, 218 insertions(+), 247 deletions(-) diff --git a/Source/bzip2/bzlib_private.h b/Source/bzip2/bzlib_private.h index b40417b2..0c382027 100644 --- a/Source/bzip2/bzlib_private.h +++ b/Source/bzip2/bzlib_private.h @@ -125,7 +125,7 @@ typedef unsigned short UInt16; /*-- Stuff for randomising repetitive blocks. --*/ -extern Int16 BZ2_rNums[513]; // make this 512 for bigger-data/smaller-code mode. +extern Int16 BZ2_rNums[512]; #define BZ_RAND_DECLS \ Int32 rNToGo; \ diff --git a/Source/bzip2/randtable.c b/Source/bzip2/randtable.c index b9c97702..3cb14dc9 100644 --- a/Source/bzip2/randtable.c +++ b/Source/bzip2/randtable.c @@ -19,16 +19,16 @@ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - 2. The origin of this software must not be misrepresented; you must - not claim that you wrote the original software. If you use this - software in a product, an acknowledgment in the product + 2. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 3. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. - 4. The name of the author may not be used to endorse or promote - products derived from this software without specific prior written + 4. The name of the author may not be used to endorse or promote + products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS @@ -63,261 +63,232 @@ #include "bzlib_private.h" +// smaller data mode that saves 384 bytes of data, but adds 66 bytes of code. +#ifdef EXEHEAD -// smaller data mode that saves 336 bytes of data, but adds 60 bytes of code. -#if 1 +#define PACK4(a,b,c,d) (UChar)((a)<<0), (UChar)(((a)>>8)|((b)<<2)), (UChar)(((b)>>6)|((c)<<4)), (UChar)(((c)>>4)|((d)<<6)), (UChar)((d)>>2) -#define PACK3(x,y,z) ((z) << 20)|((y) << 10)|(x) +// Four 10-bit values per five bytes +// aaaaaaaa bbbbbbaa ccccbbbb ddcccccc dddddddd +// 0 09 09 09 9 -static Int32 BZ2_rNumsPacked[171]= +static UChar BZ2_rNumsPacked[640]= { - PACK3(619,720,127), - PACK3(481,931,816), - PACK3(813,233,566), - PACK3(247,985,724), - PACK3(205,454,863), - PACK3(491,741,242), - PACK3(949,214,733), - PACK3(859,335,708), - PACK3(621,574,73), - PACK3(654,730,472), - PACK3(419,436,278), - PACK3(496,867,210), - PACK3(399,680,480), - PACK3(51,878,465), - PACK3(811,169,869), - PACK3(675,611,697), - PACK3(867,561,862), - PACK3(687,507,283), - PACK3(482,129,807), - PACK3(591,733,623), - PACK3(150,238,59), - PACK3(379,684,877), - PACK3(625,169,643), - PACK3(105,170,607), - PACK3(520,932,727), - PACK3(476,693,425), - PACK3(174,647,73), - PACK3(122,335,530), - PACK3(442,853,695), - PACK3(249,445,515), - PACK3(909,545,703), - PACK3(919,874,474), - PACK3(882,500,594), - PACK3(612,641,801), - PACK3(220,162,819), - PACK3(984,589,513), - PACK3(495,799,161), - PACK3(604,958,533), - PACK3(221,400,386), - PACK3(867,600,782), - PACK3(382,596,414), - PACK3(171,516,375), - PACK3(682,485,911), - PACK3(276,98,553), - PACK3(163,354,666), - PACK3(933,424,341), - PACK3(533,870,227), - PACK3(730,475,186), - PACK3(263,647,537), - PACK3(686,600,224), - PACK3(469,68,770), - PACK3(919,190,373), - PACK3(294,822,808), - PACK3(206,184,943), - PACK3(795,384,383), - PACK3(461,404,758), - PACK3(839,887,715), - PACK3(67,618,276), - PACK3(204,918,873), - PACK3(777,604,560), - PACK3(951,160,578), - PACK3(722,79,804), - PACK3(96,409,713), - PACK3(940,652,934), - PACK3(970,447,318), - PACK3(353,859,672), - PACK3(112,785,645), - PACK3(863,803,350), - PACK3(139,93,354), - PACK3(99,820,908), - PACK3(609,772,154), - PACK3(274,580,184), - PACK3(79,626,630), - PACK3(742,653,282), - PACK3(762,623,680), - PACK3(81,927,626), - PACK3(789,125,411), - PACK3(521,938,300), - PACK3(821,78,343), - PACK3(175,128,250), - PACK3(170,774,972), - PACK3(275,999,639), - PACK3(495,78,352), - PACK3(126,857,956), - PACK3(358,619,580), - PACK3(124,737,594), - PACK3(701,612,669), - PACK3(112,134,694), - PACK3(363,992,809), - PACK3(743,168,974), - PACK3(944,375,748), - PACK3(52,600,747), - PACK3(642,182,862), - PACK3(81,344,805), - PACK3(988,739,511), - PACK3(655,814,334), - PACK3(249,515,897), - PACK3(955,664,981), - PACK3(649,113,974), - PACK3(459,893,228), - PACK3(433,837,553), - PACK3(268,926,240), - PACK3(102,654,459), - PACK3(51,686,754), - PACK3(806,760,493), - PACK3(403,415,394), - PACK3(687,700,946), - PACK3(670,656,610), - PACK3(738,392,760), - PACK3(799,887,653), - PACK3(978,321,576), - PACK3(617,626,502), - PACK3(894,679,243), - PACK3(440,680,879), - PACK3(194,572,640), - PACK3(724,926,56), - PACK3(204,700,707), - PACK3(151,457,449), - PACK3(797,195,791), - PACK3(558,945,679), - PACK3(297,59,87), - PACK3(824,713,663), - PACK3(412,693,342), - PACK3(606,134,108), - PACK3(571,364,631), - PACK3(212,174,643), - PACK3(304,329,343), - PACK3(97,430,751), - PACK3(497,314,983), - PACK3(374,822,928), - PACK3(140,206,73), - PACK3(263,980,736), - PACK3(876,478,430), - PACK3(305,170,514), - PACK3(364,692,829), - PACK3(82,855,953), - PACK3(676,246,369), - PACK3(970,294,750), - PACK3(807,827,150), - PACK3(790,288,923), - PACK3(804,378,215), - PACK3(828,592,281), - PACK3(565,555,710), - PACK3(82,896,831), - PACK3(547,261,524), - PACK3(462,293,465), - PACK3(502,56,661), - PACK3(821,976,991), - PACK3(658,869,905), - PACK3(758,745,193), - PACK3(768,550,608), - PACK3(933,378,286), - PACK3(215,979,792), - PACK3(961,61,688), - PACK3(793,644,986), - PACK3(403,106,366), - PACK3(905,644,372), - PACK3(567,466,434), - PACK3(645,210,389), - PACK3(550,919,135), - PACK3(780,773,635), - PACK3(389,707,100), - PACK3(626,958,165), - PACK3(504,920,176), - PACK3(193,713,857), - PACK3(265,203,50), - PACK3(668,108,645), - PACK3(990,626,197), - PACK3(510,357,358), - PACK3(850,858,364), - PACK3(936,638,0), + PACK4(619,720,127,481), + PACK4(931,816,813,233), + PACK4(566,247,985,724), + PACK4(205,454,863,491), + PACK4(741,242,949,214), + PACK4(733,859,335,708), + PACK4(621,574, 73,654), + PACK4(730,472,419,436), + PACK4(278,496,867,210), + PACK4(399,680,480, 51), + PACK4(878,465,811,169), + PACK4(869,675,611,697), + PACK4(867,561,862,687), + PACK4(507,283,482,129), + PACK4(807,591,733,623), + PACK4(150,238, 59,379), + PACK4(684,877,625,169), + PACK4(643,105,170,607), + PACK4(520,932,727,476), + PACK4(693,425,174,647), + PACK4( 73,122,335,530), + PACK4(442,853,695,249), + PACK4(445,515,909,545), + PACK4(703,919,874,474), + PACK4(882,500,594,612), + PACK4(641,801,220,162), + PACK4(819,984,589,513), + PACK4(495,799,161,604), + PACK4(958,533,221,400), + PACK4(386,867,600,782), + PACK4(382,596,414,171), + PACK4(516,375,682,485), + PACK4(911,276, 98,553), + PACK4(163,354,666,933), + PACK4(424,341,533,870), + PACK4(227,730,475,186), + PACK4(263,647,537,686), + PACK4(600,224,469, 68), + PACK4(770,919,190,373), + PACK4(294,822,808,206), + PACK4(184,943,795,384), + PACK4(383,461,404,758), + PACK4(839,887,715, 67), + PACK4(618,276,204,918), + PACK4(873,777,604,560), + PACK4(951,160,578,722), + PACK4( 79,804, 96,409), + PACK4(713,940,652,934), + PACK4(970,447,318,353), + PACK4(859,672,112,785), + PACK4(645,863,803,350), + PACK4(139, 93,354, 99), + PACK4(820,908,609,772), + PACK4(154,274,580,184), + PACK4( 79,626,630,742), + PACK4(653,282,762,623), + PACK4(680, 81,927,626), + PACK4(789,125,411,521), + PACK4(938,300,821, 78), + PACK4(343,175,128,250), + PACK4(170,774,972,275), + PACK4(999,639,495, 78), + PACK4(352,126,857,956), + PACK4(358,619,580,124), + PACK4(737,594,701,612), + PACK4(669,112,134,694), + PACK4(363,992,809,743), + PACK4(168,974,944,375), + PACK4(748, 52,600,747), + PACK4(642,182,862, 81), + PACK4(344,805,988,739), + PACK4(511,655,814,334), + PACK4(249,515,897,955), + PACK4(664,981,649,113), + PACK4(974,459,893,228), + PACK4(433,837,553,268), + PACK4(926,240,102,654), + PACK4(459, 51,686,754), + PACK4(806,760,493,403), + PACK4(415,394,687,700), + PACK4(946,670,656,610), + PACK4(738,392,760,799), + PACK4(887,653,978,321), + PACK4(576,617,626,502), + PACK4(894,679,243,440), + PACK4(680,879,194,572), + PACK4(640,724,926, 56), + PACK4(204,700,707,151), + PACK4(457,449,797,195), + PACK4(791,558,945,679), + PACK4(297, 59, 87,824), + PACK4(713,663,412,693), + PACK4(342,606,134,108), + PACK4(571,364,631,212), + PACK4(174,643,304,329), + PACK4(343, 97,430,751), + PACK4(497,314,983,374), + PACK4(822,928,140,206), + PACK4( 73,263,980,736), + PACK4(876,478,430,305), + PACK4(170,514,364,692), + PACK4(829, 82,855,953), + PACK4(676,246,369,970), + PACK4(294,750,807,827), + PACK4(150,790,288,923), + PACK4(804,378,215,828), + PACK4(592,281,565,555), + PACK4(710, 82,896,831), + PACK4(547,261,524,462), + PACK4(293,465,502, 56), + PACK4(661,821,976,991), + PACK4(658,869,905,758), + PACK4(745,193,768,550), + PACK4(608,933,378,286), + PACK4(215,979,792,961), + PACK4( 61,688,793,644), + PACK4(986,403,106,366), + PACK4(905,644,372,567), + PACK4(466,434,645,210), + PACK4(389,550,919,135), + PACK4(780,773,635,389), + PACK4(707,100,626,958), + PACK4(165,504,920,176), + PACK4(193,713,857,265), + PACK4(203, 50,668,108), + PACK4(645,990,626,197), + PACK4(510,357,358,850), + PACK4(858,364,936,638) }; /*---------------------------------------------*/ -Int16 BZ2_rNums[513]; +Int16 BZ2_rNums[512]; + +#ifdef __BIG_ENDIAN__ // Not very likely, but, still... +#error This routine is currently little-endian specific! +#endif void NSISCALL genrtable() { - unsigned char x=171; + unsigned char x=640/5; Int16 *t=BZ2_rNums; - Int32 *it=BZ2_rNumsPacked; - while (x--) - { - Int32 i=*it++; - char l=3; - while (l--) - { - *t++=i&1023; - i>>=10; - } - } + UChar *it=BZ2_rNumsPacked; + do { + unsigned char l=0; + do { + *t++ = (Int16)(((*(UInt16 *)(it++))>>l) & 1023); + } while ((l+=2) < 8); + it++; + } while (--x); +/* + x=512/4; + t=BZ2_rNums; + do { + char z[20]; + wsprintf(z, "%d,%d,%d,%d\n", t[0], t[1], t[2], t[3]); + t += 4; + OutputDebugString(z); + } while (--x); +*/ } #else -Int16 BZ2_rNums[512] = { - 619, 720, 127, 481, 931, 816, 813, 233, 566, 247, - 985, 724, 205, 454, 863, 491, 741, 242, 949, 214, - 733, 859, 335, 708, 621, 574, 73 , 654, 730, 472, - 419, 436, 278, 496, 867, 210, 399, 680, 480, 51, - 878, 465, 811, 169, 869, 675, 611, 697, 867, 561, - 862, 687, 507, 283, 482, 129, 807, 591, 733, 623, - 150, 238, 59 , 379, 684, 877, 625, 169, 643, 105, - 170, 607, 520, 932, 727, 476, 693, 425, 174, 647, - 73 , 122, 335, 530, 442, 853, 695, 249, 445, 515, - 909, 545, 703, 919, 874, 474, 882, 500, 594, 612, - 641, 801, 220, 162, 819, 984, 589, 513, 495, 799, - 161, 604, 958, 533, 221, 400, 386, 867, 600, 782, - 382, 596, 414, 171, 516, 375, 682, 485, 911, 276, - 98 , 553, 163, 354, 666, 933, 424, 341, 533, 870, - 227, 730, 475, 186, 263, 647, 537, 686, 600, 224, - 469, 68 , 770, 919, 190, 373, 294, 822, 808, 206, - 184, 943, 795, 384, 383, 461, 404, 758, 839, 887, - 715, 67 , 618, 276, 204, 918, 873, 777, 604, 560, - 951, 160, 578, 722, 79 , 804, 96 , 409, 713, 940, - 652, 934, 970, 447, 318, 353, 859, 672, 112, 785, - 645, 863, 803, 350, 139, 93 , 354, 99 , 820, 908, - 609, 772, 154, 274, 580, 184, 79 , 626, 630, 742, - 653, 282, 762, 623, 680, 81 , 927, 626, 789, 125, - 411, 521, 938, 300, 821, 78 , 343, 175, 128, 250, - 170, 774, 972, 275, 999, 639, 495, 78 , 352, 126, - 857, 956, 358, 619, 580, 124, 737, 594, 701, 612, - 669, 112, 134, 694, 363, 992, 809, 743, 168, 974, - 944, 375, 748, 52 , 600, 747, 642, 182, 862, 81, - 344, 805, 988, 739, 511, 655, 814, 334, 249, 515, - 897, 955, 664, 981, 649, 113, 974, 459, 893, 228, - 433, 837, 553, 268, 926, 240, 102, 654, 459, 51, - 686, 754, 806, 760, 493, 403, 415, 394, 687, 700, - 946, 670, 656, 610, 738, 392, 760, 799, 887, 653, - 978, 321, 576, 617, 626, 502, 894, 679, 243, 440, - 680, 879, 194, 572, 640, 724, 926, 56 , 204, 700, - 707, 151, 457, 449, 797, 195, 791, 558, 945, 679, - 297, 59 , 87 , 824, 713, 663, 412, 693, 342, 606, - 134, 108, 571, 364, 631, 212, 174, 643, 304, 329, - 343, 97 , 430, 751, 497, 314, 983, 374, 822, 928, - 140, 206, 73 , 263, 980, 736, 876, 478, 430, 305, - 170, 514, 364, 692, 829, 82 , 855, 953, 676, 246, - 369, 970, 294, 750, 807, 827, 150, 790, 288, 923, - 804, 378, 215, 828, 592, 281, 565, 555, 710, 82, - 896, 831, 547, 261, 524, 462, 293, 465, 502, 56, - 661, 821, 976, 991, 658, 869, 905, 758, 745, 193, - 768, 550, 608, 933, 378, 286, 215, 979, 792, 961, - 61 , 688, 793, 644, 986, 403, 106, 366, 905, 644, - 372, 567, 466, 434, 645, 210, 389, 550, 919, 135, - 780, 773, 635, 389, 707, 100, 626, 958, 165, 504, - 920, 176, 193, 713, 857, 265, 203, 50 , 668, 108, - 645, 990, 626, 197, 510, 357, 358, 850, 858, 364, +Int16 BZ2_rNums[512] = { + 619, 720, 127, 481, 931, 816, 813, 233, 566, 247, + 985, 724, 205, 454, 863, 491, 741, 242, 949, 214, + 733, 859, 335, 708, 621, 574, 73 , 654, 730, 472, + 419, 436, 278, 496, 867, 210, 399, 680, 480, 51, + 878, 465, 811, 169, 869, 675, 611, 697, 867, 561, + 862, 687, 507, 283, 482, 129, 807, 591, 733, 623, + 150, 238, 59 , 379, 684, 877, 625, 169, 643, 105, + 170, 607, 520, 932, 727, 476, 693, 425, 174, 647, + 73 , 122, 335, 530, 442, 853, 695, 249, 445, 515, + 909, 545, 703, 919, 874, 474, 882, 500, 594, 612, + 641, 801, 220, 162, 819, 984, 589, 513, 495, 799, + 161, 604, 958, 533, 221, 400, 386, 867, 600, 782, + 382, 596, 414, 171, 516, 375, 682, 485, 911, 276, + 98 , 553, 163, 354, 666, 933, 424, 341, 533, 870, + 227, 730, 475, 186, 263, 647, 537, 686, 600, 224, + 469, 68 , 770, 919, 190, 373, 294, 822, 808, 206, + 184, 943, 795, 384, 383, 461, 404, 758, 839, 887, + 715, 67 , 618, 276, 204, 918, 873, 777, 604, 560, + 951, 160, 578, 722, 79 , 804, 96 , 409, 713, 940, + 652, 934, 970, 447, 318, 353, 859, 672, 112, 785, + 645, 863, 803, 350, 139, 93 , 354, 99 , 820, 908, + 609, 772, 154, 274, 580, 184, 79 , 626, 630, 742, + 653, 282, 762, 623, 680, 81 , 927, 626, 789, 125, + 411, 521, 938, 300, 821, 78 , 343, 175, 128, 250, + 170, 774, 972, 275, 999, 639, 495, 78 , 352, 126, + 857, 956, 358, 619, 580, 124, 737, 594, 701, 612, + 669, 112, 134, 694, 363, 992, 809, 743, 168, 974, + 944, 375, 748, 52 , 600, 747, 642, 182, 862, 81, + 344, 805, 988, 739, 511, 655, 814, 334, 249, 515, + 897, 955, 664, 981, 649, 113, 974, 459, 893, 228, + 433, 837, 553, 268, 926, 240, 102, 654, 459, 51, + 686, 754, 806, 760, 493, 403, 415, 394, 687, 700, + 946, 670, 656, 610, 738, 392, 760, 799, 887, 653, + 978, 321, 576, 617, 626, 502, 894, 679, 243, 440, + 680, 879, 194, 572, 640, 724, 926, 56 , 204, 700, + 707, 151, 457, 449, 797, 195, 791, 558, 945, 679, + 297, 59 , 87 , 824, 713, 663, 412, 693, 342, 606, + 134, 108, 571, 364, 631, 212, 174, 643, 304, 329, + 343, 97 , 430, 751, 497, 314, 983, 374, 822, 928, + 140, 206, 73 , 263, 980, 736, 876, 478, 430, 305, + 170, 514, 364, 692, 829, 82 , 855, 953, 676, 246, + 369, 970, 294, 750, 807, 827, 150, 790, 288, 923, + 804, 378, 215, 828, 592, 281, 565, 555, 710, 82, + 896, 831, 547, 261, 524, 462, 293, 465, 502, 56, + 661, 821, 976, 991, 658, 869, 905, 758, 745, 193, + 768, 550, 608, 933, 378, 286, 215, 979, 792, 961, + 61 , 688, 793, 644, 986, 403, 106, 366, 905, 644, + 372, 567, 466, 434, 645, 210, 389, 550, 919, 135, + 780, 773, 635, 389, 707, 100, 626, 958, 165, 504, + 920, 176, 193, 713, 857, 265, 203, 50 , 668, 108, + 645, 990, 626, 197, 510, 357, 358, 850, 858, 364, 936, 638 }; #endif @@ -325,4 +296,4 @@ Int16 BZ2_rNums[512] = { /*-------------------------------------------------------------*/ /*--- end randtable.c ---*/ /*-------------------------------------------------------------*/ -#endif \ No newline at end of file +#endif