[Bug target/22076] Strange code for MMX register moves

uros at kss-loka dot si gcc-bugzilla@gcc.gnu.org
Tue Jun 21 12:04:00 GMT 2005


------- Additional Comments From uros at kss-loka dot si  2005-06-21 12:04 -------
New testcase (everything is initialized this time):

--cut here--
#include <mmintrin.h>

__v8qi test ()
{
  __v8qi mm0 = {1,2,3,4,5,6,7,8};
  __v8qi mm1 = {11,22,33,44,55,66,77,88};
  volatile __m64 x;

  x = _mm_add_pi8 (mm0, mm1);

  return x;
}
--cut here--


Pass 0

  Register 67 costs: AD_REGS:4000 Q_REGS:4000 NON_Q_REGS:4000 INDEX_REGS:4000 
LEGACY_REGS:4000 GENERAL_REGS:4000 MMX_REGS:46000 INT_SSE_REGS:38000 MEM:16000

  Register 67 pref GENERAL_REGS or none


Pass 1

  Register 67 costs: AD_REGS:4000 Q_REGS:4000 NON_Q_REGS:4000 INDEX_REGS:4000 
LEGACY_REGS:4000 GENERAL_REGS:4000 MMX_REGS:46000 INT_SSE_REGS:38000 MEM:16000

69 registers.

...

(insn:HI 18 45 22 1 (set (reg:V8QI 67)
        (mem/u/i:V8QI (symbol_ref/u:SI ("*.LC2") [flags 0x2]) [0 S8 A64])) 766 
{*movv8qi_internal} (nil)
    (expr_list:REG_EQUIV (const_vector:V8QI [
                (const_int 12 [0xc])
                (const_int 24 [0x18])
                (const_int 36 [0x24])
                (const_int 48 [0x30])
                (const_int 60 [0x3c])
                (const_int 72 [0x48])
                (const_int 84 [0x54])
                (const_int 96 [0x60])
            ])
        (nil)))

...

test:
	pushl	%ebp
	movl	%esp, %ebp
	subl	$24, %esp
	movl	$807671820, %eax
	movl	$1616136252, %edx
	movl	%eax, -8(%ebp)
	movl	%edx, -4(%ebp)
	movl	-8(%ebp), %eax
	movl	-4(%ebp), %edx
	movl	%eax, -24(%ebp)
	movl	%edx, -20(%ebp)
	movq	-24(%ebp), %mm1
	leave
	movq	%mm1, %mm0
	ret



-- 


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



More information about the Gcc-bugs mailing list