These were spotted while debugging usage of atomics within glibc. The kind of changes are microoptimizations, nanooptimizations, a buglet and a major issue. Micro: the load-store-conditional sequence for compare-and-swap I originally committed was an earlier version improved later. Nanooptimizations: choosing better-fitting operands for the atomic operator insn. Buglet: a post-increment could have sneaked into the (non-atomic) arithmetic operator operand; better make it nonmemory_operand altogether. I also threw in use of the now generic need_atomic_barrier_p, let's call that a microoptimization. The major issue, giving up on alignment of atomic data by default, is last. Tested together and some separately, no regressions for cris-elf nor crisv32-elf. Committed separately.
brgds, H-P