gcc/ChangeLog-dv-atomic-gcc7 * (s390_expand_cs_hqi): Removed. (s390_expand_cs, s390_expand_atomic_exchange_tdsi): New prototypes. (s390_cc_modes_compatible): Export. * config/s390/predicates.md ("memory_nosymref_operand"): New predicate for compare-and-swap. * config/s390/s390.c(s390_emit_compare_and_swap): Handle all integer modes. (s390_cc_modes_compatible): Remove static. (s390_expand_cs_hqi): Make static. (s390_expand_cs_tdsi): Generate an explicit compare before trying compare-and-swap, in some cases. (s390_expand_cs): Wrapper function. (s390_expand_atomic_exchange_tdsi): New backend specific expander for atomic_exchange. * config/s390/s390.md (define_peephole2): New peephole to help combining the load-and-test pattern with volatile memory. ("cstorecc4"): Deal with CCZmode too. ("sne", "sneccz1_ne", "sneccz1_eq"): Renamed and duplicated pattern. ("sneccz_ne", "sneccz_eq"): New. ("atomic_compare_and_swap"): Merge the patterns for small and large integers. Forbid symref memory operands. Move expander to s390.c. ("atomic_compare_and_swap_internal") ("*atomic_compare_and_swap_1") ("*atomic_compare_and_swap_2") ("*atomic_compare_and_swap_3"): Forbid symref memory operands. ("atomic_exchange"): Allow and implement all integer modes. gcc/testsuite/ChangeLog-dv-atomic-gcc7 * gcc.target/s390/md/atomic_compare_exchange-1.c: New test. * gcc.target/s390/md/atomic_compare_exchange-1.inc: New test. * gcc.target/s390/md/atomic_exchange-1.inc: New test.