This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c/36733] Wery interesting compilation way (if no -Ox option)
- From: "pinskia at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 4 Jul 2008 21:20:07 -0000
- Subject: [Bug c/36733] Wery interesting compilation way (if no -Ox option)
- References: <bug-36733-16414@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- 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" <gcc-bugzilla@gcc.gnu.org
> 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