[Bug target/24073] (vector float){a, b, 0, 0} code gen is not good

uros at kss-loka dot si gcc-bugzilla@gcc.gnu.org
Tue Sep 27 11:41:00 GMT 2005


------- Additional Comments From uros at kss-loka dot si  2005-09-27 11:41 -------
I think that following example wins the contest:

vector float f(void) { return (vector float){ a, a, b, b}; }

gcc -O2 -msse -fomit-frame-pointer

	subl	$28, %esp
	movss	a, %xmm0
	movss	%xmm0, 4(%esp)
	movss	b, %xmm0
	movd	4(%esp), %mm0
	punpckldq	%mm0, %mm0
	movss	%xmm0, 4(%esp)
	movq	%mm0, 16(%esp)
	movd	4(%esp), %mm0
	punpckldq	%mm0, %mm0
	movq	%mm0, 8(%esp)
	movlps	16(%esp), %xmm1
	movhps	8(%esp), %xmm1
	addl	$28, %esp
	movaps	%xmm1, %xmm0
	ret

Note the usage of MMX registers.

-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24073



More information about the Gcc-bugs mailing list