summaryrefslogtreecommitdiff
path: root/sys/src
diff options
context:
space:
mode:
authorOri Bernstein <ori@eigenstate.org>2022-10-31 00:28:05 +0000
committerOri Bernstein <ori@eigenstate.org>2022-10-31 00:28:05 +0000
commitf817308f74d2dbba82b177e730d2ce4ccec84906 (patch)
treecdfbdbaa9d2a6ca510857760386bd160d34e5231 /sys/src
parent2e1ac96d3f6ff85ccac1681631d09d60953cf8a6 (diff)
libflac: work around kencc running out of registers on arm
Diffstat (limited to 'sys/src')
-rw-r--r--sys/src/cmd/audio/libFLAC/fixed.c25
1 files changed, 22 insertions, 3 deletions
diff --git a/sys/src/cmd/audio/libFLAC/fixed.c b/sys/src/cmd/audio/libFLAC/fixed.c
index 7d826f10a..a5fa3678f 100644
--- a/sys/src/cmd/audio/libFLAC/fixed.c
+++ b/sys/src/cmd/audio/libFLAC/fixed.c
@@ -432,7 +432,18 @@ uint32_t FLAC__fixed_compute_best_predictor_limit_residual_33bit(const FLAC__int
error_1 = (i > 0) ? local_abs64(data[i] - data[i-1]) : 0 ;
error_2 = (i > 1) ? local_abs64(data[i] - 2 * data[i-1] + data[i-2]) : 0;
error_3 = (i > 2) ? local_abs64(data[i] - 3 * data[i-1] + 3 * data[i-2] - data[i-3]) : 0;
- error_4 = (i > 3) ? local_abs64(data[i] - 4 * data[i-1] + 6 * data[i-2] - 4 * data[i-3] + data[i-4]) : 0;
+ if(i <= 3)
+ error_4 = 0;
+ else{
+ /* kencc workaround: we run out of registers */
+ FLAC__int64 e;
+ e = data[i];
+ e -= 4 * data[i-1];
+ e += 6 * data[i-2];
+ e -= 4 * data[i-3];
+ e += data[i-4];
+ error_4 = local_abs64(e);
+ }
total_error_0 += error_0;
total_error_1 += error_1;
@@ -547,8 +558,16 @@ void FLAC__fixed_compute_residual_wide_33bit(const FLAC__int64 data[], uint32_t
residual[i] = data[i] - 3*data[i-1] + 3*data[i-2] - data[i-3];
break;
case 4:
- for(i = 0; i < idata_len; i++)
- residual[i] = data[i] - 4*data[i-1] + 6*data[i-2] - 4*data[i-3] + data[i-4];
+ for(i = 0; i < idata_len; i++){
+ /* kencc workaround: we run out of registers */
+ FLAC__int64 r;
+ r = data[i];
+ r -= 4*data[i-1];
+ r += 6*data[i-2];
+ r -= 4*data[i-3];
+ r += data[i-4];
+ residual[i] = r;
+ }
break;
default:
FLAC__ASSERT(0);