[flac-dev] Two questions about RG in flac
sezeroz at gmail.com
Tue Jun 3 12:50:19 PDT 2014
On 6/3/14, Robert Kausch <robert.kausch at freac.org> wrote:
> Am 03.06.2014 16:45, schrieb lvqcl:
>> 2) to ALL:
>> I attached a small program. Compile and run it.
>> * Does it work correctly when compiled with -O3 -msse2 options?
>> * If yes, does it work correctly when compiled with -O3 -funroll-loops
>> -msse2 options?
>> ( and what is the version of your GCC? )
> I further reduced the testcase (attached).
> The bug only occurs if N >= 64; presumably the second loop is only SSE2
> optimized if that's the case.
> The problem seems to be that sum is interpreted as a 64 bit value if
> SSE2 was used in the loop (the lower 32 bits of the result give the
> expected value). If sum is evaluated another time before or after (!)
> the printf, the problem goes away. For example, changing the last line
> to "return sum + 1;" lets the problem disappear.
> I confirmed the bug with GCC 4.6.3 on Ubuntu. As on Windows, only 32 bit
> code generation is affected.
> You should file a bug report with the GCC team.
With gcc-3,3,6, 3,4,6, 4.3.0 and gcc-4.9.1 (svn r210839) the output is
Sum = 64.000000 (should be equal to 64)
With gcc-4.8.3 (release version) it's broken:
Sum = 206158430272.000000 (should be equal to 64)
With clang-3.4.1 (compiled with gcc-4.8.3) the output is normal again.
This is on i686-linux (fedora9, glibc-2.8, kernel-188.8.131.52)
More information about the flac-dev