http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46598
--- Comment #3 from Richard Guenther <rguenth at gcc dot gnu.org> 2010-11-23 13:45:36 UTC --- On the branch I see: 0x000000000040d1b3 <+50131>: rdtsc 0x000000000040d1b5 <+50133>: mov %edx,%r11d 0x000000000040d1b8 <+50136>: mov 0x8(%rsp),%rdx 0x000000000040d1bd <+50141>: movslq %ecx,%rbp 0x000000000040d1c0 <+50144>: xor $0x1,%ecx 0x000000000040d1c3 <+50147>: movslq %ecx,%rcx 0x000000000040d1c6 <+50150>: lea (%rdx,%rbp,4),%r14 0x000000000040d1ca <+50154>: movslq %esi,%rbp ---Type <return> to continue, or q <return> to quit--- 0x000000000040d1cd <+50157>: xor $0x4,%esi 0x000000000040d1d0 <+50160>: movslq %esi,%rsi 0x000000000040d1d3 <+50163>: lea (%rdx,%rbp,4),%r13 0x000000000040d1d7 <+50167>: lea (%rdx,%rcx,4),%r12 0x000000000040d1db <+50171>: lea (%rdx,%rsi,4),%rbp 0x000000000040d1df <+50175>: movslq %eax,%rsi => 0x000000000040d1e2 <+50178>: mov 0x6101c0(,%rsi,4),%ecx which isn't a bright thing to do (offset RESULT by tsc counter read). It's also obviously not what the source does.