On Jul 20 2010, Jeff Squyres wrote:
> Also, it seems like the 3rd parameter could be problematic if it ever
> goes larger than 2B -- it'll increment in the wrong direction, won't
> it?
Not on most systems.
Ah -- I just checked -- the associativity of + and (cast) are equal, and
are right to left. So it should be ok.
No, they aren't! That's unary plus. Cast binds more strongly. The reason
that it is OK is that uint32_t and int32_t are required to be twos'
complement.
But still, for defensive
programming purposes, I'd prefer this:
} while
(!OPAL_ATOMIC_CMPSET_32((int32_t*)&ep->eager_rdma_remote.seq,
(int32_t)ftr->seq,
(int32_t)(ftr->seq+1)));
That parses differently, but is semantically equivalent with twos'
complement and quiet wrapping on overflow. I agree that it's a bit cleaner.
Regards,
Nick Maclaren.