http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54087
Ulrich Drepper <drepper.fsp+rhbz at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |drepper.fsp+rhbz at gmail dot com --- Comment #11 from Ulrich Drepper <drepper.fsp+rhbz at gmail dot com> --- Yes, although there still in an oddity. The code from comment #3 is compiled as: 0000000000000000 <a>: 0: ba fb ff ff ff mov $0xfffffffb,%edx 5: 89 d0 mov %edx,%eax 7: f0 0f c1 05 00 00 00 lock xadd %eax,0x0(%rip) # f <a+0xf> e: 00 b: R_X86_64_PC32 v-0x4 f: 01 d0 add %edx,%eax 11: c3 retq 12: 66 66 66 66 66 2e 0f data32 data32 data32 data32 nopw %cs:0x0(%rax,%rax,1) 19: 1f 84 00 00 00 00 00 0000000000000020 <b>: 20: b8 fb ff ff ff mov $0xfffffffb,%eax 25: f0 0f c1 05 00 00 00 lock xadd %eax,0x0(%rip) # 2d <b+0xd> 2c: 00 29: R_X86_64_PC32 v-0x4 2d: 83 e8 05 sub $0x5,%eax 30: c3 retq There is no reason for the difference. In both cases the latter sequence should be generated.