This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug c/36733] New: Wery interesting compilation way (if no -Ox option)


So for code:
        double d1 = 0;
        double d2 = 1;
        double d3 = 1.01;
        __m128d pd, pd2;
        pd = _mm_loadh_pd(pd, &d1);
        pd = _mm_loadl_pd(pd, &d2);
        pd2 = _mm_loadh_pd(pd2, &d3);
        pd2 = _mm_loadl_pd(pd2, &d3);

        for(long i=0; i<10000000000; i++){
                pd = _mm_mul_pd(pd, pd2);
        };

        _mm_storeh_pd(&d1, pd);
        _mm_storel_pd(&d2, pd);

gcc 4.3 make such assembler code
        movq    %rax, -336(%rbp)
        movabsq $4607182418800017408, %rax
        movq    %rax, -344(%rbp)
        movabsq $4607227454796291113, %rax
        movq    %rax, -352(%rbp)
        movapd  -320(%rbp), %xmm0
        movapd  %xmm0, -256(%rbp)
        leaq    -336(%rbp), %rax
        movq    %rax, -264(%rbp)
        movapd  -256(%rbp), %xmm0
        movq    -264(%rbp), %rax
        movhpd  (%rax), %xmm0
        movapd  %xmm0, -320(%rbp)
        movapd  -320(%rbp), %xmm0
        movapd  %xmm0, -224(%rbp)
        leaq    -344(%rbp), %rax
        movq    %rax, -232(%rbp)
        movapd  -224(%rbp), %xmm0
        movq    -232(%rbp), %rax
        movlpd  (%rax), %xmm0
        movapd  %xmm0, -320(%rbp)
        movapd  -304(%rbp), %xmm0
        movapd  %xmm0, -192(%rbp)
        leaq    -352(%rbp), %rax
        movq    %rax, -200(%rbp)
        movapd  -192(%rbp), %xmm0
        movq    -200(%rbp), %rax
        movhpd  (%rax), %xmm0
        movapd  %xmm0, -304(%rbp)
        movapd  -304(%rbp), %xmm0
        movapd  %xmm0, -160(%rbp)
        leaq    -352(%rbp), %rax
        movq    %rax, -168(%rbp)
        movapd  -160(%rbp), %xmm0
        movq    -168(%rbp), %rax
        movlpd  (%rax), %xmm0
        movapd  %xmm0, -304(%rbp)
        movq    $0, -272(%rbp)
        jmp     .L12
.L13:
        movapd  -320(%rbp), %xmm0
        movapd  %xmm0, -128(%rbp)
        movapd  -304(%rbp), %xmm0
        movapd  %xmm0, -144(%rbp)
        movapd  -144(%rbp), %xmm1
        movapd  -128(%rbp), %xmm0
        mulpd   %xmm1, %xmm0
        movapd  %xmm0, -320(%rbp)
        addq    $1, -272(%rbp)
.L12:
        movabsq $9999999999, %rax
        cmpq    %rax, -272(%rbp)
        jle     .L13
        leaq    -336(%rbp), %rax
        movq    %rax, -88(%rbp)
        movapd  -320(%rbp), %xmm0
        movapd  %xmm0, -112(%rbp)
        movapd  -112(%rbp), %xmm0
        unpckhpd        %xmm0, %xmm0
        movq    -88(%rbp), %rax
        movsd   %xmm0, (%rax)
        leaq    -344(%rbp), %rax
        movq    %rax, -56(%rbp)
        movapd  -320(%rbp), %xmm0
        movapd  %xmm0, -80(%rbp)
        movq    -56(%rbp), %rax
        movq    %rax, -24(%rbp)
        movapd  -80(%rbp), %xmm0
        movapd  %xmm0, -48(%rbp)
        movapd  -48(%rbp), %xmm0
        movapd  %xmm0, %xmm0
Is it a Joke? For my opinion it is very strange! Intristic fuctions works very
slow without optimization, and I think it is a problem.


-- 
           Summary: Wery interesting compilation way (if no -Ox option)
           Product: gcc
           Version: 4.3.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: msnkipa at mail dot ru


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]