[EMAIL PROTECTED] tmp]# cat a.cpp
#include <xmmintrin.h>
#include <stdio.h>

__m128 mm;

void test ( const __m128& vm, float r )
{
        mm = _mm_add_ps( mm, _mm_set_ps( 0.0f, r, r, r) );

        float vm0, vm1, vm2;
        _mm_store_ss( &vm0, vm );
        _mm_store_ss( &vm1, _mm_shuffle_ps( vm, vm, 1 ) );
        _mm_store_ss( &vm2, _mm_shuffle_ps( vm, vm, 2 ) );
        _mm_store_ss( &vm2, _mm_shuffle_ps( vm, vm, 2 ) );
        printf("In     TEST: %f %f %f\n", vm0, vm1, vm2 );
}

int main()
{
        __m128 vm = _mm_set_ps( 4.0f, 3.0f, 2.0f, 1.0f );

        float vm0, vm1, vm2;
        _mm_store_ss( &vm0, vm );
        _mm_store_ss( &vm1, _mm_shuffle_ps( vm, vm, 1 ) );
        _mm_store_ss( &vm2, _mm_shuffle_ps( vm, vm, 2 ) );
        printf("Before TEST: %f %f %f\n", vm0, vm1, vm2 );

        test(vm, 0.5f);

        _mm_store_ss( &vm0, vm );
        _mm_store_ss( &vm1, _mm_shuffle_ps( vm, vm, 1 ) );
        _mm_store_ss( &vm2, _mm_shuffle_ps( vm, vm, 2 ) );
        printf("After  TEST: %f %f %f\n", vm0, vm1, vm2 );
        return 0;
}
[EMAIL PROTECTED] tmp]# g++ -Wall -O3 -msse a.cpp; ./a.out
Before TEST: 1.000000 2.000000 3.000000
In     TEST: nan nan nan
After  TEST: 1.000000 2.000000 3.000000
[EMAIL PROTECTED] tmp]# g++ -Wall -O2 -msse a.cpp; ./a.out
Before TEST: 1.000000 2.000000 3.000000
In     TEST: nan nan nan
After  TEST: 1.000000 2.000000 3.000000
[EMAIL PROTECTED] tmp]# g++ -Wall -O1 -msse a.cpp; ./a.out
Before TEST: 1.000000 2.000000 3.000000
In     TEST: nan nan nan
After  TEST: 1.000000 2.000000 3.000000
[EMAIL PROTECTED] tmp]# g++ -Wall -O0 -msse a.cpp; ./a.out
Before TEST: 1.000000 2.000000 3.000000
In     TEST: 1.000000 2.000000 3.000000
After  TEST: 1.000000 2.000000 3.000000
[EMAIL PROTECTED] tmp]#
[EMAIL PROTECTED] tmp]# uname -a
Linux localhost.localdomain 2.6.17-1.2139_FC5smp #1 SMP Fri Jun 23 13:12:06 EDT
2006 i686 i686 i386 GNU/Linux
[EMAIL PROTECTED] tmp]# gcc -v
Using built-in specs.
Target: i386-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man
--infodir=/usr/share/info --enable-shared --enable-threads=posix
--enable-checking
=release --with-system-zlib --enable-__cxa_atexit
--disable-libunwind-exceptions --enable-libgcj-multifile
--enable-languages=c,c++,objc,obj-c++,java,
fortran,ada --enable-java-awt=gtk --disable-dssi
--with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic
--host=i386-redhat-linux
Thread model: posix
gcc version 4.1.1 20060525 (Red Hat 4.1.1-1)
[EMAIL PROTECTED] tmp]#

gcc3 is OK


-- 
           Summary: optimized bug with ia32 sse
           Product: gcc
           Version: 4.1.1
            Status: UNCONFIRMED
          Severity: critical
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: zengpan at goldhuman dot com


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28960

Reply via email to