minor optimizations

This commit is contained in:
Josh Coalson
2007-01-24 04:23:53 +00:00
parent 92e43175e3
commit f5dd47832d

View File

@@ -34,6 +34,7 @@
#endif #endif
#include <math.h> #include <math.h>
#include <string.h>
#include "private/bitmath.h" #include "private/bitmath.h"
#include "private/fixed.h" #include "private/fixed.h"
#include "FLAC/assert.h" #include "FLAC/assert.h"
@@ -355,32 +356,36 @@ void FLAC__fixed_compute_residual(const FLAC__int32 data[], unsigned data_len, u
switch(order) { switch(order) {
case 0: case 0:
for(i = 0; i < idata_len; i++) { FLAC__ASSERT(sizeof(residual[0]) == sizeof(data[0]));
residual[i] = data[i]; memcpy(residual, data, sizeof(residual[0])*data_len);
}
break; break;
case 1: case 1:
for(i = 0; i < idata_len; i++) { for(i = 0; i < idata_len; i++)
residual[i] = data[i] - data[i-1]; residual[i] = data[i] - data[i-1];
}
break; break;
case 2: case 2:
for(i = 0; i < idata_len; i++) { for(i = 0; i < idata_len; i++)
/* == data[i] - 2*data[i-1] + data[i-2] */ #if 1 /* OPT: may be faster with some compilers on some systems */
residual[i] = data[i] - (data[i-1] << 1) + data[i-2]; residual[i] = data[i] - (data[i-1] << 1) + data[i-2];
} #else
residual[i] = data[i] - 2*data[i-1] + data[i-2];
#endif
break; break;
case 3: case 3:
for(i = 0; i < idata_len; i++) { for(i = 0; i < idata_len; i++)
/* == data[i] - 3*data[i-1] + 3*data[i-2] - data[i-3] */ #if 1 /* OPT: may be faster with some compilers on some systems */
residual[i] = data[i] - (((data[i-1]-data[i-2])<<1) + (data[i-1]-data[i-2])) - data[i-3]; residual[i] = data[i] - (((data[i-1]-data[i-2])<<1) + (data[i-1]-data[i-2])) - data[i-3];
} #else
residual[i] = data[i] - 3*data[i-1] + 3*data[i-2] - data[i-3];
#endif
break; break;
case 4: case 4:
for(i = 0; i < idata_len; i++) { for(i = 0; i < idata_len; i++)
/* == data[i] - 4*data[i-1] + 6*data[i-2] - 4*data[i-3] + data[i-4] */ #if 1 /* OPT: may be faster with some compilers on some systems */
residual[i] = data[i] - ((data[i-1]+data[i-3])<<2) + ((data[i-2]<<2) + (data[i-2]<<1)) + data[i-4]; residual[i] = data[i] - ((data[i-1]+data[i-3])<<2) + ((data[i-2]<<2) + (data[i-2]<<1)) + data[i-4];
} #else
residual[i] = data[i] - 4*data[i-1] + 6*data[i-2] - 4*data[i-3] + data[i-4];
#endif
break; break;
default: default:
FLAC__ASSERT(0); FLAC__ASSERT(0);
@@ -393,32 +398,36 @@ void FLAC__fixed_restore_signal(const FLAC__int32 residual[], unsigned data_len,
switch(order) { switch(order) {
case 0: case 0:
for(i = 0; i < idata_len; i++) { FLAC__ASSERT(sizeof(residual[0]) == sizeof(data[0]));
data[i] = residual[i]; memcpy(data, residual, sizeof(residual[0])*data_len);
}
break; break;
case 1: case 1:
for(i = 0; i < idata_len; i++) { for(i = 0; i < idata_len; i++)
data[i] = residual[i] + data[i-1]; data[i] = residual[i] + data[i-1];
}
break; break;
case 2: case 2:
for(i = 0; i < idata_len; i++) { for(i = 0; i < idata_len; i++)
/* == residual[i] + 2*data[i-1] - data[i-2] */ #if 1 /* OPT: may be faster with some compilers on some systems */
data[i] = residual[i] + (data[i-1]<<1) - data[i-2]; data[i] = residual[i] + (data[i-1]<<1) - data[i-2];
} #else
data[i] = residual[i] + 2*data[i-1] - data[i-2];
#endif
break; break;
case 3: case 3:
for(i = 0; i < idata_len; i++) { for(i = 0; i < idata_len; i++)
/* residual[i] + 3*data[i-1] - 3*data[i-2]) + data[i-3] */ #if 1 /* OPT: may be faster with some compilers on some systems */
data[i] = residual[i] + (((data[i-1]-data[i-2])<<1) + (data[i-1]-data[i-2])) + data[i-3]; data[i] = residual[i] + (((data[i-1]-data[i-2])<<1) + (data[i-1]-data[i-2])) + data[i-3];
} #else
data[i] = residual[i] + 3*data[i-1] - 3*data[i-2] + data[i-3];
#endif
break; break;
case 4: case 4:
for(i = 0; i < idata_len; i++) { for(i = 0; i < idata_len; i++)
/* == residual[i] + 4*data[i-1] - 6*data[i-2] + 4*data[i-3] - data[i-4] */ #if 1 /* OPT: may be faster with some compilers on some systems */
data[i] = residual[i] + ((data[i-1]+data[i-3])<<2) - ((data[i-2]<<2) + (data[i-2]<<1)) - data[i-4]; data[i] = residual[i] + ((data[i-1]+data[i-3])<<2) - ((data[i-2]<<2) + (data[i-2]<<1)) - data[i-4];
} #else
data[i] = residual[i] + 4*data[i-1] - 6*data[i-2] + 4*data[i-3] - data[i-4];
#endif
break; break;
default: default:
FLAC__ASSERT(0); FLAC__ASSERT(0);