__sync_lock_test_and_set on ARM

Andrew Haley aph-gcc@littlepinkcloud.COM
Fri Sep 14 07:16:00 GMT 2007


Phil Endecott writes:
 > Andrew Haley wrote:
 > > Phil Endecott writes:
 > >  > Andrew Haley wrote:
 > >  > > David Daney writes:
 > >  > >  > There is nothing that says that __sync_compar_and_swap() cannot expand 
 > >  > >  > to a libcall.
 > >  > >
 > >  > > Err, if a port doen't have an implementation, that's what gcc does
 > >  > > anyway.  :-)
 > >  > 
 > >  > That's what the docs say, but actually if you try to use __sync_* on 
 > >  > ARM you'll get a linker error.  A library implementation would need to 
 > >  > be OS-specific.
 > >
 > > Well, yes.  What else would you expect?  I don't understand your
 > > point.
 > 
 > OK, there's a (subtle) difference between "expands to a library call" 
 > and "expands to a library call which is actually implemented in libgcc".

It can't be implemented in gcc, because it's hardware-specific.  The
same compiled libgcc is portable between different architectures.
That's why compare_and_swap() has to be done in the kernel.

 > "My point", now about a thousand messages ago (:-!), is that I'd quite 
 > like for __sync_lock_test_and_set to expand to a SWP instruction 
 > please; and that's all.

Sure, we got that before, but the discussion has moved on.

Andrew.



More information about the Gcc-help mailing list