summaryrefslogtreecommitdiff
path: root/src/libFLAC/fixed.c
diff options
context:
space:
mode:
authorJosh Coalson <jcoalson@users.sourceforce.net>2001-05-14 21:31:50 +0000
committerJosh Coalson <jcoalson@users.sourceforce.net>2001-05-14 21:31:50 +0000
commitb787e2afebee5f979083e7e7b552c08e6a6b57f2 (patch)
tree61ac0a0b1052a0116b4f5fc22f3e6f73bac3288f /src/libFLAC/fixed.c
parentc59638ea49054102f6b2321e7709c0f69ae60665 (diff)
downloadflac-b787e2afebee5f979083e7e7b552c08e6a6b57f2.tar.gz
don't try and outsmart the compiler on constant multplies
Diffstat (limited to 'src/libFLAC/fixed.c')
-rw-r--r--src/libFLAC/fixed.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/libFLAC/fixed.c b/src/libFLAC/fixed.c
index 40187357..75063687 100644
--- a/src/libFLAC/fixed.c
+++ b/src/libFLAC/fixed.c
@@ -154,6 +154,7 @@ void FLAC__fixed_compute_residual(const int32 data[], unsigned data_len, unsigne
{
unsigned i;
+#if 0
switch(order) {
case 0:
for(i = 0; i < data_len; i++) {
@@ -186,6 +187,32 @@ void FLAC__fixed_compute_residual(const int32 data[], unsigned data_len, unsigne
default:
assert(0);
}
+#else
+ switch(order) {
+ case 0:
+ for(i = 0; i < data_len; i++)
+ residual[i] = data[i];
+ break;
+ case 1:
+ for(i = 0; i < data_len; i++)
+ residual[i] = data[i] - data[i-1];
+ break;
+ case 2:
+ for(i = 0; i < data_len; i++)
+ residual[i] = data[i] - 2*data[i-1] + data[i-2];
+ break;
+ case 3:
+ for(i = 0; i < data_len; i++)
+ residual[i] = data[i] - 3*data[i-1] + 3*data[i-2] - data[i-3];
+ break;
+ case 4:
+ for(i = 0; i < data_len; i++)
+ residual[i] = data[i] - 4*data[i-1] + 6*data[i-2] - 4*data[i-3] + data[i-4];
+ break;
+ default:
+ assert(0);
+ }
+#endif
}
void FLAC__fixed_restore_signal(const int32 residual[], unsigned data_len, unsigned order, int32 data[])