------- Comment #29 from ubizjak at gmail dot com 2008-03-20 00:01 ------- Now we generate:
-m32 -mmmx -msse2: test: subl $20, %esp movl w, %eax movl w+4, %edx movl %ebx, 12(%esp) movl %esi, 16(%esp) movl %eax, (%esp) movzwl (%esp), %ecx movl %edx, 4(%esp) movzwl 2(%esp), %ebx movzwl 4(%esp), %esi movzwl 6(%esp), %eax addl %ecx, %ecx addl %ebx, %ebx addl %esi, %esi addl %eax, %eax movw %bx, w+2 movl 12(%esp), %ebx movw %si, w+4 movl 16(%esp), %esi movw %ax, w+6 movl w+4, %edx movw %cx, w movl w, %eax movl %edx, dw+4 movl %eax, dw addl $20, %esp ret -m64 -mmmx -msse2: test: movabsq $9223231297218904063, %rax andq w(%rip), %rax addq %rax, %rax movq %rax, w(%rip) movq w(%rip), %rax movq %rax, dw(%rip) ret The issue with useless reload is PR 12395, as mentioned in Comment #5. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14552