Richard Guenther wrote:
IIRC, any generic code that produces MMX or 3DNow! instructions is disabled ATM, because gcc doesn't know how/when to insert emms/femms instruction. You don't want to mix 3dNow insns with x87 insn and use shared 3DNow/x87 registers without this insn...Oh, so we used to expand to 3dnow? I see with gcc 3.4 produced:
foo: pushl %ebp movl %esp, %ebp pushl %ebx subl $84, %esp movl 12(%ebp), %eax movl 16(%ebp), %edx [...] movq -64(%ebp), %mm0 movl %ebx, -72(%ebp) movl -36(%ebp), %ebx movl %ebx, -68(%ebp) pfadd -72(%ebp), %mm0 movq %mm0, -56(%ebp) movl 12(%eax), %eax etc.
This doesn't happen anymore with 4.0/4.1.
Uros.