http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48126
--- Comment #2 from Michael K. Edwards <m.k.edwards at gmail dot com> 2011-03-17 18:14:11 UTC --- Please insert the text of your citations, since the ARM ARM is not a public document. I think I'm persuaded that the CLREX isn't necessary -- although I'm going to keep it in my compiler so that I can monitor ldrex/strex pairing accurately in valgrind/qemu. How about the branch past the DMB? What's actually required in order to get "ordered" semantics? If it's safe to skip the trailing DMB in the "compare failed" case, maybe it can be disposed of entirely?