I've been working for a while on understanding how the new memory model
and Atomics work, and what the impacts are on GCC.
It would be ideal to get as many of these changes into GCC 4.6 as
possible. I've started work on some of the modifications and testing,
and the overall impact on GCC shouldn't be *too* bad :-)
The plan is to localize the changes as much as possible, and any
intrusive bits like optimization changes will be controlled by a flag
enabling us to keep the current behaviour when we want it.
I've put together a document summarizing how the memory model works, and
how I propose to make the changes. I've converted it to wiki pages.
Maybe no one will laugh at my choice of document format this time :-)
The document is linked off the Atomics wiki page, or directly here:
http://gcc.gnu.org/wiki/Atomic/GCCMM
It consists mainly of describing the 2 primary aspects of the memory
model which affects us
- Optimization changes to avoid introducing new data races
- Implementation of atomic variables and synchronization modes
as well as a new infrastructure to test these types of things.
I'm sure I've screwed something up while doing it, and I will proofread
it later today again and tweak it further.
Please point out anything that isn't clear, or is downright wrong.
Especially in the testing methodology since its all new stuff.
Suggestions for improvements on any of the plan are welcome as well.
Andrew