http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54087
--- Comment #1 from Uros Bizjak <ubizjak at gmail dot com> 2012-07-24 19:21:02 UTC --- Use __atomic_add_fetch and __atomic_fetch_sub in the testcase, and you will get: 0000000000000000 <f1>: 0: 89 f8 mov %edi,%eax 2: f0 0f c1 05 00 00 00 lock xadd %eax,0x0(%rip) # a <f1+0xa> 9: 00 a: 01 f8 add %edi,%eax c: 85 c0 test %eax,%eax e: 0f 94 c0 sete %al 11: 0f b6 c0 movzbl %al,%eax 14: c3 retq 0000000000000020 <f2>: 20: 89 f8 mov %edi,%eax 22: f0 0f c1 05 00 00 00 lock xadd %eax,0x0(%rip) # 2a <f2+0xa> 29: 00 2a: 39 f8 cmp %edi,%eax 2c: 0f 94 c0 sete %al 2f: 0f b6 c0 movzbl %al,%eax 32: c3 retq