I'm a long-time Java programmer familiar with the Java Memory Model. I'm starting to learn C#, and based on what I've learned so far, the C# memory model seems to be very similar to the JMM. This validates my previous understanding that the JMM reflects the characteristics of architectures supported by the JVM. The language requirements reflect the weakest guarantees of all the supported architectures.
But one difference I've noticed is in the way developers from Java and C# backgrounds talk about architectures. Where Java programmers speak of improperly synchronized code manifesting bugs on "some architectures", C# programmers tend to be more specific. For example, this article names Itanium as having a "weak" memory model:
The mainstream x86 and x64 processors implement a strong memory model where memory access is effectively volatile. ... The Itanium processor implements a weaker memory model.
I've only worked on x86 and x64, and I never knew what architectures imposed the mysterious requirements of the JMM that never seemed to matter when I tried to demonstrate the effects of violating them. Now I know of one.
What other architectures have "weak" memory models?