diff options
author | Josh Coalson <jcoalson@users.sourceforce.net> | 2001-05-14 21:31:50 +0000 |
---|---|---|
committer | Josh Coalson <jcoalson@users.sourceforce.net> | 2001-05-14 21:31:50 +0000 |
commit | b787e2afebee5f979083e7e7b552c08e6a6b57f2 (patch) | |
tree | 61ac0a0b1052a0116b4f5fc22f3e6f73bac3288f /src/libFLAC/fixed.c | |
parent | c59638ea49054102f6b2321e7709c0f69ae60665 (diff) | |
download | flac-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.c | 27 |
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[]) |