On Tue, Oct 18, 2011 at 06:03:16PM -0400, Andrew MacLeod wrote:
> 
> Here's the last of the missing intrinsics.   compare_exchange is
> slightly different than the others since it doesn't map directly to
> an rtl pattern. Its format is :
> 
>   bool __atomic_compare_exchange (T* mem, T* expected, T desired,
> bool weak, memory_order success, memory_order failure)
> 
> note that the expected parameter is a pointer as well.  In the case
> where false is returned, the value of expected is updated.

I think the __sync_* way here was much better (two intrinsics instead of
one, one bool-ish and one returning val).  With mandating T*expected
you force it to be addressable, probably until expansion time at which point
it will be just forced into memory, which is highly undesirable.

        Jakub

Reply via email to