stream_encoder.c : Improve fix for arithmetic overflow.
authorErik de Castro Lopo <erikd@mega-nerd.com>
Thu, 1 Aug 2013 20:20:53 +0000 (06:20 +1000)
committerErik de Castro Lopo <erikd@mega-nerd.com>
Thu, 1 Aug 2013 20:21:02 +0000 (06:21 +1000)
Only use the 32 bit accumulator if the input data is 16 bits or less.

src/libFLAC/stream_encoder.c

index 5cf0bc7..9ab1734 100644 (file)
@@ -3772,7 +3772,7 @@ void precompute_partition_info_sums_(
 #if defined(FLAC__CPU_IA32) && !defined FLAC__NO_ASM && defined FLAC__HAS_NASM
        /* slightly pessimistic but still catches all common cases */
        /* WATCHOUT: "+ bps" is an assumption that the average residual magnitude will not be more than "bps" bits */
-       if(bps < 24 && FLAC__bitmath_ilog2(default_partition_samples) + bps < 32) {
+       if(bps <= 16) {
                precompute_partition_info_sums_32bit_asm_ia32_(residual, abs_residual_partition_sums, residual_samples + predictor_order, predictor_order, min_partition_order, max_partition_order);
                return;
        }
@@ -3783,7 +3783,7 @@ void precompute_partition_info_sums_(
                unsigned partition, residual_sample, end = (unsigned)(-(int)predictor_order);
                /* slightly pessimistic but still catches all common cases */
                /* WATCHOUT: "+ bps" is an assumption that the average residual magnitude will not be more than "bps" bits */
-               if(bps < 24 && FLAC__bitmath_ilog2(default_partition_samples) + bps < 32) {
+               if(bps <= 16) {
                        FLAC__uint32 abs_residual_partition_sum;
 
                        for(partition = residual_sample = 0; partition < partitions; partition++) {