------- Comment #6 from hjl dot tools at gmail dot com 2008-07-31 04:05 ------- With revision 138354, we got
bash-3.2$ cat /tmp/x.c #include <emmintrin.h> extern void bar (char *); char * e1 (float x, char *p) { volatile __m128 dummy = _mm_set_ps1(x); char foo [0]; bar (foo); return p; } bash-3.2$ ./xgcc -B./ -O2 -m32 -O -msse2 -S -mstackrealign /tmp/x.c bash-3.2$ cat x.s .file "x.c" .text .globl e1 .type e1, @function e1: pushl %ebp movl %esp, %ebp andl $-16, %esp subl $32, %esp movss 8(%ebp), %xmm0 shufps $0, %xmm0, %xmm0 movlps %xmm0, 16(%esp) movhps %xmm0, 24(%esp) leal 16(%esp), %eax movl %eax, (%esp) call bar movl 12(%ebp), %eax leave ret .size e1, .-e1 It is much nicer. -- hjl dot tools at gmail dot com changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution| |FIXED Target Milestone|--- |4.4.0 Version|4.2.0 |4.4.0 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28074