------- Comment #6 from rguenth at gcc dot gnu dot org 2007-07-05 08:41 ------- For 4.1.x I get
kernel: .LFB2: subq $8, %rsp .LCFI0: movl $1, %edi call gen_int movl a(%rip), %eax movl %eax, %edx andl $3, %edx addl %edx, %eax movl %eax, a(%rip) movl b(%rip), %eax movl %eax, %edx orl $3, %edx addl %edx, %eax movl %eax, b(%rip) movl a+4(%rip), %eax movl %eax, %edx andl $3, %edx addl %edx, %eax movl %eax, a+4(%rip) movl b+4(%rip), %eax movl %eax, %edx orl $3, %edx addl %edx, %eax movl %eax, b+4(%rip) addq $8, %rsp ret while with trunk we have kernel: .LFB2: subq $8, %rsp .LCFI0: movl $1, %edi call gen_int testl %eax, %eax je .L2 movl a(%rip), %edx movl %edx, %eax andl $3, %eax addl %edx, %eax movl b(%rip), %edx movl %eax, a(%rip) movl %edx, %eax orl $3, %eax addl %edx, %eax movl %eax, b(%rip) .L7: movl a+4(%rip), %edx movl %edx, %eax andl $3, %eax addl %edx, %eax movl b+4(%rip), %edx movl %eax, a+4(%rip) movl %edx, %eax orl $3, %eax addl %edx, %eax movl %eax, b+4(%rip) addq $8, %rsp ret .p2align 4,,10 .p2align 3 .L2: movl a(%rip), %edx movl %edx, %eax andl $3, %eax addl %edx, %eax movl b(%rip), %edx movl %eax, a(%rip) movl %edx, %eax orl $3, %eax addl %edx, %eax movl %eax, b(%rip) jmp .L7 .LFE2: so, no, this is not yet fixed. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30905