This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Hey? Where did the intrinsics go?
- From: tbp <tbptbp at gmail dot com>
- To: Andrew Pinski <pinskia at physics dot uc dot edu>
- Cc: Kelley Cook <kcook at gcc dot gnu dot org>, Ian Lance Taylor <ian at airs dot com>, Øystein Johansen <oystein at gnubg dot org>, GCC Mailing List <gcc at gcc dot gnu dot org>, Richard Henderson <rth at redhat dot com>
- Date: Wed, 20 Apr 2005 23:21:29 +0200
- Subject: Re: Hey? Where did the intrinsics go?
- References: <42669DE8.9020505@gcc.gnu.org> <200504201825.j3KIPcrs003799@earth.phy.uc.edu>
- Reply-to: tbp <tbptbp at gmail dot com>
On 4/20/05, Andrew Pinski <pinskia@physics.uc.edu> wrote:
> Yes this was intentional, you should not be using the builtin functions,
> instead use intrinsics from the header files.
Now that intrinsics are first class citizens it would be a real plus
if someone could convince gcc to not spit horrors like that, ever (but
perhaps for debugging?):
0000000000400840 <_mm_setzero_ps()>:
400840: xorps %xmm0,%xmm0
400843: retq
...
0000000000400850 <_mm_min_ss(float __vector, float __vector)>:
400850: minss %xmm1,%xmm0
400854: retq
...
0000000000400860 <_mm_max_ss(float __vector, float __vector)>:
400860: maxss %xmm1,%xmm0
400864: retq
...
0000000000400870 <_mm_sub_ps(float __vector, float __vector)>:
400870: subps %xmm1,%xmm0
400873: retq
...
0000000000400880 <_mm_mul_ps(float __vector, float __vector)>:
400880: mulps %xmm1,%xmm0
400883: retq
... etc ad nauseam and then the final blow...
0000000000400980 <checkpointcharlie(aabb_t const&, ray_t const&, ray_t
const&, ray_t const&)>:
400980: push %r15
400982: mov %rcx,%r15
400985: push %r14
400987: mov %rdx,%r14
40098a: push %r13
40098c: push %r12
40098e: mov %rdi,%r12
400991: mov $0x5016b0,%edi
400996: lea 0x10(%r12),%r13
40099b: push %rbx
40099c: mov %rsi,%rbx
40099f: sub $0x310,%rsp
4009a6: callq 4008d0 <_mm_load_ps(float const*)>
4009ab: movaps %xmm0,0x2d0(%rsp)
4009b3: mov $0x5016c0,%edi
4009b8: callq 4008d0 <_mm_load_ps(float const*)>
4009bd: movaps %xmm0,0x2c0(%rsp)
4009c5: mov %rbx,%rdi
4009c8: callq 4008d0 <_mm_load_ps(float const*)>
4009cd: movaps %xmm0,0x2b0(%rsp)
4009d5: lea 0x10(%rbx),%rdi
4009d9: lea 0x300(%rsp),%rbx
4009e1: callq 4008d0 <_mm_load_ps(float const*)>
4009e6: movaps %xmm0,0x2a0(%rsp)
4009ee: mov %r12,%rdi
etc...
Excerpts from a x86-64 bin with gcc 4120050410 at -O3, but i've seen
it happen under various conditions & compile flags or compiler
versions on straight x86 too.
The only way i know to fix it is to tinker with params. Eek.