>>>>> "Andrew" == Andrew Haley <[EMAIL PROTECTED]> writes:
>> We don't have atomic read or atomic write builtins (ok, you could >> abuse __sync_fetch_and_add (&x, 0) for atomic read and a loop with >> __sync_compare_and_swap_val for atomic store, but that's a >> horrible overkill. Being able to assume that for non-bitfield >> accesses bigger than certain minimum size, smaller or equal to the >> word size and naturally aligned the compiler will read or write a >> value in one lump is certainly desirable and many programs assume >> it heavily (starting with glibc, kernel, libgomp, ...). Andrew> That seems reasonable, but I suspect that coming up with Andrew> wordage to describe it sufficiently formally for all cases Andrew> will be tricky. Probably so. In any case, clearly no such wordage could include the phrase "when possible". Andrew> AFAIK the only reason we don't break this rule is that doing Andrew> so would be grossly inefficient; there's nothing to stop any Andrew> gcc back-end with (say) seriously slow DImode writes from Andrew> using two SImode writes instead. Or, say, because you're using the MIPS O32 ABI rather than the N32/N64 ABI... which is yet another example why a formal rule is tricky. >> The "certain minimum size" is typically either size of char, or >> (e.g. on old alphas) size of int. Not just old Alphas. Even if the instruction set has a "store character" opcode, the hardware is going to do a read-modify-write internally; is that an atomic operation? Not necessarily. Perhaps even "only rarely". paul