This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/29852] x86_64: SSE version missing for fmod{d,s,x}f3
- From: "ubizjak at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 29 Nov 2006 21:05:10 -0000
- Subject: [Bug target/29852] x86_64: SSE version missing for fmod{d,s,x}f3
- References: <bug-29852-13404@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #9 from ubizjak at gmail dot com 2006-11-29 21:05 -------
(In reply to comment #8)
> The patch doesn't like me ;)
>
> richard@trick:~/src/trunk/gcc/config/i386$ patch -p0 < /tmp/p
> patching file i386.md
> Hunk #1 succeeded at 3892 (offset -49 lines).
> Hunk #2 succeeded at 3919 (offset -47 lines).
> Hunk #3 succeeded at 3990 (offset -47 lines).
> Hunk #4 succeeded at 4017 (offset -45 lines).
> Hunk #5 FAILED at 15622.
> patch: **** unexpected end of file in patch
That is because I have 4 open projects in one branch. In about an hour, the
regression test will finish and I'll post clean patch to gcc-patches.
>
> what does it generate for
>
> double foo(double a, double b)
> {
> double x = fmod(a, 1.1);
> return x + b;
> }
>
> does it do the truncation as part of the x87 -> SSE register move or
> is there extra operations involved? If we can get all variants optimal
> (store to memory comes to my mind as well) it would be nice!
>
movsd %xmm0, -16(%rsp)
fldl -16(%rsp)
fldl .LC0(%rip)
fxch %st(1)
.L2:
fprem
fnstsw %ax
testb $4, %ah
jne .L2
fstp %st(1)
fstpl -8(%rsp)
movsd -8(%rsp), %xmm0
addsd %xmm1, %xmm0
ret
The x87 store represents the truncation.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29852