regainplay_analysis : Work around GCC optimizer bug.
authorErik de Castro Lopo <erikd@mega-nerd.com>
Sun, 15 Jun 2014 10:32:45 +0000 (20:32 +1000)
committerErik de Castro Lopo <erikd@mega-nerd.com>
Sun, 15 Jun 2014 10:32:48 +0000 (20:32 +1000)
Discussion: http://lists.xiph.org/pipermail/flac-dev/2014-June/004720.html
Patch-from: lvqcl <lvqcl.mail@gmail.com>

src/share/replaygain_analysis/replaygain_analysis.c

index 38e54b9..7d87091 100644 (file)
@@ -536,7 +536,11 @@ analyzeResult ( Uint32_t* Array, size_t len )
     if ( elems == 0 )
         return GAIN_NOT_ENOUGH_SAMPLES;
 
+#if 0 /* GCC bug workaround: it incorrectly calculates 'elems * (1. - RMS_PERCENTILE)' with -O3 -msse2 ... options */
     upper = (Int32_t) ceil (elems * (1. - RMS_PERCENTILE));
+#else
+    upper = (Int32_t) (elems / 20 + ((elems % 20) ? 1 : 0));
+#endif
     for ( i = len; i-- > 0; ) {
         if ( (upper -= Array[i]) <= 0 )
             break;