On 4/20/05, Andrew Pinski <[EMAIL PROTECTED]> 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.