[PATCH] Mirror i386 change on sparc: 'Avoid "anonymous" code in pthread_spin_lock'
Andreas Schwab
schwab@linux-m68k.org
Thu May 3 14:52:00 GMT 2012
Paul Pluzhnikov <ppluzhnikov@google.com> writes:
> On Wed, May 2, 2012 at 7:46 PM, Chris Metcalf <cmetcalf@tilera.com> wrote:
>
>> Wouldn't you get the same result as the assembly code just by removing the
>> .subsection and .previous directives? Â In that case the code would all be
>> under the C function label, which is the point of the change.
>
> FWIW, I tried that approach with i386,x86_64 code.
>
> The result with .subsection removed was:
>
> 0: f0 ff 0f lock decl (%rdi)
> 3: 75 0b jne 10 <pthread_spin_lock+0x10>
>
> 10: f3 90 pause
> 12: 83 3f 00 cmpl $0x0,(%rdi)
> 15: 7f e9 jg 0 <pthread_spin_lock>
> 17: eb f7 jmp 10 <pthread_spin_lock+0x10>
> 19: 31 c0 xor %eax,%eax
> 1b: c3 retq
>
> If I am reading this correctly, this will spin forever.
The point of the subsection is so that you don't need the jump around.
It's simulating the compiler putting an unlikely BB out of line.
Andreas.
--
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."
More information about the Libc-alpha
mailing list