[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