bzip2: code size shrink

This commit is contained in:
Denis Vlasenko 2007-10-14 01:37:53 +00:00
parent be5a7b9655
commit 9435993b01

View File

@ -46,10 +46,16 @@ in the file LICENSE.
heap[zz] = tmp; \ heap[zz] = tmp; \
} }
#define DOWNHEAP(z) \
/* 90 bytes, 0.3% of overall compress speed */
#if CONFIG_BZIP2_FEATURE_SPEED >= 1
/* macro works better than inline (gcc 4.2.1) */
#define DOWNHEAP1(heap, weight, Heap) \
{ \ { \
int32_t zz, yy, tmp; \ int32_t zz, yy, tmp; \
zz = z; tmp = heap[zz]; \ zz = 1; \
tmp = heap[zz]; \
while (1) { \ while (1) { \
yy = zz << 1; \ yy = zz << 1; \
if (yy > nHeap) \ if (yy > nHeap) \
@ -65,6 +71,30 @@ in the file LICENSE.
heap[zz] = tmp; \ heap[zz] = tmp; \
} }
#else
static
void DOWNHEAP1(int32_t *heap, int32_t *weight, int32_t nHeap)
{
int32_t zz, yy, tmp;
zz = 1;
tmp = heap[zz];
while (1) {
yy = zz << 1;
if (yy > nHeap)
break;
if (yy < nHeap
&& weight[heap[yy + 1]] < weight[heap[yy]])
yy++;
if (weight[tmp] < weight[heap[yy]])
break;
heap[zz] = heap[yy];
zz = yy;
}
heap[zz] = tmp;
}
#endif
/*---------------------------------------------------*/ /*---------------------------------------------------*/
static static
@ -105,8 +135,8 @@ void BZ2_hbMakeCodeLengths(uint8_t *len,
AssertH(nHeap < (BZ_MAX_ALPHA_SIZE+2), 2001); AssertH(nHeap < (BZ_MAX_ALPHA_SIZE+2), 2001);
while (nHeap > 1) { while (nHeap > 1) {
n1 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1); n1 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP1(heap, weight, nHeap);
n2 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1); n2 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP1(heap, weight, nHeap);
nNodes++; nNodes++;
parent[n1] = parent[n2] = nNodes; parent[n1] = parent[n2] = nNodes;
weight[nNodes] = ADDWEIGHTS(weight[n1], weight[n2]); weight[nNodes] = ADDWEIGHTS(weight[n1], weight[n2]);