|
|
@@ -301,20 +301,19 @@ static void calc_sums(int pmax, uint32_t *data, int n, int pred_order, |
|
|
|
uint32_t sums[][256]) |
|
|
|
{ |
|
|
|
int i, j; |
|
|
|
int parts, cnt; |
|
|
|
uint32_t *res; |
|
|
|
int parts; |
|
|
|
uint32_t *res, *res_end; |
|
|
|
|
|
|
|
/* sums for highest level */ |
|
|
|
parts = (1 << pmax); |
|
|
|
res = &data[pred_order]; |
|
|
|
cnt = (n >> pmax) - pred_order; |
|
|
|
res_end = &data[n >> pmax]; |
|
|
|
for(i=0; i<parts; i++) { |
|
|
|
if(i == 1) cnt = (n >> pmax); |
|
|
|
if(i > 0) res = &data[i*cnt]; |
|
|
|
sums[pmax][i] = 0; |
|
|
|
for(j=0; j<cnt; j++) { |
|
|
|
sums[pmax][i] += res[j]; |
|
|
|
while(res < res_end){ |
|
|
|
sums[pmax][i] += *(res++); |
|
|
|
} |
|
|
|
res_end+= n >> pmax; |
|
|
|
} |
|
|
|
/* sums for lower levels */ |
|
|
|
for(i=pmax-1; i>=0; i--) { |
|
|
|