So... do you have any important targets in mind, because I don't see this
being a problem for most targets?  As can be expected, I am only interested
in x86*, powerpc*, and s390, especially since a cursory glance on other
important targets didn't exhibit any problems.  However, given my target
bias, I am willing to look into any important targets that are problematic
(I'm hoping none :)).

Well, I'm not sure that strict-align targets that provide byte access do
not simply hide the issue inside the CPU (thus, perform the read-modify-write
there and do not guarantee any atomicity unless you ask for it).  It might
be even worse - targets might not even guarantee this for shared cache-lines
(for non-ccNUMA architectures).  But I'm no expert here, but certainly
every possible weird CPU architecture has been implemented.

Whoops, sorry I missed your off-list followup from yesterday (I'm reading mail sequentially :)):

> Richard Guenther said:
> strict-align targets will end up doing read-modify-write operations on
> word-size even when accessing single bytes.  Note that some CPUs
> have byte store operations but they usually are not guaranteed to
> be "atomic" (thus, they simply do the read-modify-write in the CPU).
> I am not aware of any strict-align CPU that can do atomic byte stores.
>
> Obvious problem when for example having multiple non-word-size
> global vars (unless you force them to word-alignment).

I was not aware of how this played out internally. This is certainly a problem. I will hunt down hardware for at least arm, sparc, and ia64, and investigate. But it may be that the only option will be to disallow the C++ memory model on strictly aligned hardware, or perhaps force word-alignment.

Is forcing word-alignment too big of a hammer, or will the users for these architectures be content with having no support for the C++0x memory model?

Aldy

Reply via email to