------- Comment #1 from pinskia at gmail dot com 2008-07-04 21:20 ------- Subject: Re: New: Wery interesting compilation way (if no -Ox option)
This is expected as we spill all local variables to the stack for -O0. Sent from my iPhone On Jul 4, 2008, at 14:04, "msnkipa at mail dot ru" <[EMAIL PROTECTED] > wrote: > 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 > -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36733