[MicroBlaze][PR target/118280] Fix __atomic_test_and_set

Atomic support enhanced to fix existing atomic_compare_and_swapsi pattern
to handle side effects; new patterns atomic_fetch_op and atomic_test_and_set
added. As MicroBlaze has no QImode test/set instruction, use shift magic
to implement atomic_test_and_set.

	PR target/118280
gcc/
	* config/microblaze/iterators.md: New.
	* config/microblaze/microblaze-protos.h: Add
	microblaze_subword_address.
	* config/microblaze/microblaze.cc: Ditto.
	* config/microblaze/microblaze.md: constants: Add UNSPECV_CAS_BOOL,
	UNSPECV_CAS_MEM, UNSPECV_CAS_VAL, UNSPECV_ATOMIC_FETCH_OP
	type: add atomic
	* config/microblaze/sync.md: Add atomic_fetch_<atomic_optab>si
	atomic_test_and_set

Signed-off-by: Kirk Meyer <kirk.meyer@sencore.com>
Signed-off-by: David Holsgrove <david.holsgrove@xilinx.com>
Signed-off-by: Gopi Kumar Bulusu <gopi@sankhya.com>
Signed-off-by: Michael Eager <eager@eagercon.com>

5 files changed