------- Comment #1 from dean at arctic dot org 2007-11-28 01:43 ------- this appears to be a regression between gcc 4.1.x and 4.2.x. i had to switch the intrinsic to _mm_cvtsi64_si64x but it otherwise generates the same code on 4.3.x...
ubuntu 4.1.2: % objdump -dr movq.o movq.o: file format elf64-x86-64 Disassembly of section .text: 0000000000000000 <foo>: 0: 0f 6f 05 00 00 00 00 movq 0(%rip),%mm0 # 7 <foo+0x7> 3: R_X86_64_PC32 x+0xfffffffffffffffc 7: 0f fe 05 00 00 00 00 paddd 0(%rip),%mm0 # e <foo+0xe> a: R_X86_64_PC32 y+0xfffffffffffffffc e: 48 0f 7e c0 movd %mm0,%rax 12: c3 retq and 4.2.1: movq.o: file format elf64-x86-64 Disassembly of section .text: 0000000000000000 <foo>: 0: 48 8b 05 00 00 00 00 mov 0x0(%rip),%rax # 7 <foo+0x7> 3: R_X86_64_PC32 x+0xfffffffffffffffc 7: 48 89 44 24 f8 mov %rax,-0x8(%rsp) c: 0f 6f 44 24 f8 movq -0x8(%rsp),%mm0 11: 0f fe 05 00 00 00 00 paddd 0x0(%rip),%mm0 # 18 <foo+0x18> 14: R_X86_64_PC32 y+0xfffffffffffffffc 18: 0f 7f 44 24 f8 movq %mm0,-0x8(%rsp) 1d: 48 8b 44 24 f8 mov -0x8(%rsp),%rax 22: c3 retq -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34256