; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc -mtriple=csky -verify-machineinstrs -csky-no-aliases -mattr=+2e3 < %s \ ; RUN: | FileCheck -check-prefix=CSKY %s define i8 @atomicrmw_xchg_i8_monotonic(i8* %a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_xchg_i8_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 0 ; CSKY-NEXT: jsri32 [.LCPI0_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI0_0: ; CSKY-NEXT: .long __atomic_exchange_1 ; %1 = atomicrmw xchg i8* %a, i8 %b monotonic ret i8 %1 } define i8 @atomicrmw_xchg_i8_acquire(i8* %a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_xchg_i8_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 2 ; CSKY-NEXT: jsri32 [.LCPI1_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI1_0: ; CSKY-NEXT: .long __atomic_exchange_1 ; %1 = atomicrmw xchg i8* %a, i8 %b acquire ret i8 %1 } define i8 @atomicrmw_xchg_i8_release(i8* %a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_xchg_i8_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 3 ; CSKY-NEXT: jsri32 [.LCPI2_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI2_0: ; CSKY-NEXT: .long __atomic_exchange_1 ; %1 = atomicrmw xchg i8* %a, i8 %b release ret i8 %1 } define i8 @atomicrmw_xchg_i8_acq_rel(i8* %a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_xchg_i8_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 4 ; CSKY-NEXT: jsri32 [.LCPI3_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI3_0: ; CSKY-NEXT: .long __atomic_exchange_1 ; %1 = atomicrmw xchg i8* %a, i8 %b acq_rel ret i8 %1 } define i8 @atomicrmw_xchg_i8_seq_cst(i8* %a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_xchg_i8_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 5 ; CSKY-NEXT: jsri32 [.LCPI4_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI4_0: ; CSKY-NEXT: .long __atomic_exchange_1 ; %1 = atomicrmw xchg i8* %a, i8 %b seq_cst ret i8 %1 } define i8 @atomicrmw_add_i8_monotonic(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_add_i8_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 0 ; CSKY-NEXT: jsri32 [.LCPI5_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI5_0: ; CSKY-NEXT: .long __atomic_fetch_add_1 ; %1 = atomicrmw add i8* %a, i8 %b monotonic ret i8 %1 } define i8 @atomicrmw_add_i8_acquire(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_add_i8_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 2 ; CSKY-NEXT: jsri32 [.LCPI6_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI6_0: ; CSKY-NEXT: .long __atomic_fetch_add_1 ; %1 = atomicrmw add i8* %a, i8 %b acquire ret i8 %1 } define i8 @atomicrmw_add_i8_release(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_add_i8_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 3 ; CSKY-NEXT: jsri32 [.LCPI7_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI7_0: ; CSKY-NEXT: .long __atomic_fetch_add_1 ; %1 = atomicrmw add i8* %a, i8 %b release ret i8 %1 } define i8 @atomicrmw_add_i8_acq_rel(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_add_i8_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 4 ; CSKY-NEXT: jsri32 [.LCPI8_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI8_0: ; CSKY-NEXT: .long __atomic_fetch_add_1 ; %1 = atomicrmw add i8* %a, i8 %b acq_rel ret i8 %1 } define i8 @atomicrmw_add_i8_seq_cst(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_add_i8_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 5 ; CSKY-NEXT: jsri32 [.LCPI9_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI9_0: ; CSKY-NEXT: .long __atomic_fetch_add_1 ; %1 = atomicrmw add i8* %a, i8 %b seq_cst ret i8 %1 } define i8 @atomicrmw_sub_i8_monotonic(i8* %a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_sub_i8_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 0 ; CSKY-NEXT: jsri32 [.LCPI10_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI10_0: ; CSKY-NEXT: .long __atomic_fetch_sub_1 ; %1 = atomicrmw sub i8* %a, i8 %b monotonic ret i8 %1 } define i8 @atomicrmw_sub_i8_acquire(i8* %a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_sub_i8_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 2 ; CSKY-NEXT: jsri32 [.LCPI11_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI11_0: ; CSKY-NEXT: .long __atomic_fetch_sub_1 ; %1 = atomicrmw sub i8* %a, i8 %b acquire ret i8 %1 } define i8 @atomicrmw_sub_i8_release(i8* %a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_sub_i8_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 3 ; CSKY-NEXT: jsri32 [.LCPI12_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI12_0: ; CSKY-NEXT: .long __atomic_fetch_sub_1 ; %1 = atomicrmw sub i8* %a, i8 %b release ret i8 %1 } define i8 @atomicrmw_sub_i8_acq_rel(i8* %a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_sub_i8_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 4 ; CSKY-NEXT: jsri32 [.LCPI13_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI13_0: ; CSKY-NEXT: .long __atomic_fetch_sub_1 ; %1 = atomicrmw sub i8* %a, i8 %b acq_rel ret i8 %1 } define i8 @atomicrmw_sub_i8_seq_cst(i8* %a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_sub_i8_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 5 ; CSKY-NEXT: jsri32 [.LCPI14_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI14_0: ; CSKY-NEXT: .long __atomic_fetch_sub_1 ; %1 = atomicrmw sub i8* %a, i8 %b seq_cst ret i8 %1 } define i8 @atomicrmw_and_i8_monotonic(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_and_i8_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 0 ; CSKY-NEXT: jsri32 [.LCPI15_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI15_0: ; CSKY-NEXT: .long __atomic_fetch_and_1 ; %1 = atomicrmw and i8* %a, i8 %b monotonic ret i8 %1 } define i8 @atomicrmw_and_i8_acquire(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_and_i8_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 2 ; CSKY-NEXT: jsri32 [.LCPI16_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI16_0: ; CSKY-NEXT: .long __atomic_fetch_and_1 ; %1 = atomicrmw and i8* %a, i8 %b acquire ret i8 %1 } define i8 @atomicrmw_and_i8_release(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_and_i8_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 3 ; CSKY-NEXT: jsri32 [.LCPI17_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI17_0: ; CSKY-NEXT: .long __atomic_fetch_and_1 ; %1 = atomicrmw and i8* %a, i8 %b release ret i8 %1 } define i8 @atomicrmw_and_i8_acq_rel(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_and_i8_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 4 ; CSKY-NEXT: jsri32 [.LCPI18_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI18_0: ; CSKY-NEXT: .long __atomic_fetch_and_1 ; %1 = atomicrmw and i8* %a, i8 %b acq_rel ret i8 %1 } define i8 @atomicrmw_and_i8_seq_cst(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_and_i8_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 5 ; CSKY-NEXT: jsri32 [.LCPI19_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI19_0: ; CSKY-NEXT: .long __atomic_fetch_and_1 ; %1 = atomicrmw and i8* %a, i8 %b seq_cst ret i8 %1 } define i8 @atomicrmw_nand_i8_monotonic(i8* %a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_nand_i8_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 0 ; CSKY-NEXT: jsri32 [.LCPI20_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI20_0: ; CSKY-NEXT: .long __atomic_fetch_nand_1 ; %1 = atomicrmw nand i8* %a, i8 %b monotonic ret i8 %1 } define i8 @atomicrmw_nand_i8_acquire(i8* %a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_nand_i8_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 2 ; CSKY-NEXT: jsri32 [.LCPI21_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI21_0: ; CSKY-NEXT: .long __atomic_fetch_nand_1 ; %1 = atomicrmw nand i8* %a, i8 %b acquire ret i8 %1 } define i8 @atomicrmw_nand_i8_release(i8* %a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_nand_i8_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 3 ; CSKY-NEXT: jsri32 [.LCPI22_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI22_0: ; CSKY-NEXT: .long __atomic_fetch_nand_1 ; %1 = atomicrmw nand i8* %a, i8 %b release ret i8 %1 } define i8 @atomicrmw_nand_i8_acq_rel(i8* %a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_nand_i8_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 4 ; CSKY-NEXT: jsri32 [.LCPI23_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI23_0: ; CSKY-NEXT: .long __atomic_fetch_nand_1 ; %1 = atomicrmw nand i8* %a, i8 %b acq_rel ret i8 %1 } define i8 @atomicrmw_nand_i8_seq_cst(i8* %a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_nand_i8_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 5 ; CSKY-NEXT: jsri32 [.LCPI24_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI24_0: ; CSKY-NEXT: .long __atomic_fetch_nand_1 ; %1 = atomicrmw nand i8* %a, i8 %b seq_cst ret i8 %1 } define i8 @atomicrmw_or_i8_monotonic(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_or_i8_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 0 ; CSKY-NEXT: jsri32 [.LCPI25_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI25_0: ; CSKY-NEXT: .long __atomic_fetch_or_1 ; %1 = atomicrmw or i8* %a, i8 %b monotonic ret i8 %1 } define i8 @atomicrmw_or_i8_acquire(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_or_i8_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 2 ; CSKY-NEXT: jsri32 [.LCPI26_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI26_0: ; CSKY-NEXT: .long __atomic_fetch_or_1 ; %1 = atomicrmw or i8* %a, i8 %b acquire ret i8 %1 } define i8 @atomicrmw_or_i8_release(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_or_i8_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 3 ; CSKY-NEXT: jsri32 [.LCPI27_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI27_0: ; CSKY-NEXT: .long __atomic_fetch_or_1 ; %1 = atomicrmw or i8* %a, i8 %b release ret i8 %1 } define i8 @atomicrmw_or_i8_acq_rel(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_or_i8_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 4 ; CSKY-NEXT: jsri32 [.LCPI28_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI28_0: ; CSKY-NEXT: .long __atomic_fetch_or_1 ; %1 = atomicrmw or i8* %a, i8 %b acq_rel ret i8 %1 } define i8 @atomicrmw_or_i8_seq_cst(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_or_i8_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 5 ; CSKY-NEXT: jsri32 [.LCPI29_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI29_0: ; CSKY-NEXT: .long __atomic_fetch_or_1 ; %1 = atomicrmw or i8* %a, i8 %b seq_cst ret i8 %1 } define i8 @atomicrmw_xor_i8_monotonic(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_xor_i8_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 0 ; CSKY-NEXT: jsri32 [.LCPI30_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI30_0: ; CSKY-NEXT: .long __atomic_fetch_xor_1 ; %1 = atomicrmw xor i8* %a, i8 %b monotonic ret i8 %1 } define i8 @atomicrmw_xor_i8_acquire(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_xor_i8_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 2 ; CSKY-NEXT: jsri32 [.LCPI31_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI31_0: ; CSKY-NEXT: .long __atomic_fetch_xor_1 ; %1 = atomicrmw xor i8* %a, i8 %b acquire ret i8 %1 } define i8 @atomicrmw_xor_i8_release(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_xor_i8_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 3 ; CSKY-NEXT: jsri32 [.LCPI32_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI32_0: ; CSKY-NEXT: .long __atomic_fetch_xor_1 ; %1 = atomicrmw xor i8* %a, i8 %b release ret i8 %1 } define i8 @atomicrmw_xor_i8_acq_rel(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_xor_i8_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 4 ; CSKY-NEXT: jsri32 [.LCPI33_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI33_0: ; CSKY-NEXT: .long __atomic_fetch_xor_1 ; %1 = atomicrmw xor i8* %a, i8 %b acq_rel ret i8 %1 } define i8 @atomicrmw_xor_i8_seq_cst(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_xor_i8_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 5 ; CSKY-NEXT: jsri32 [.LCPI34_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI34_0: ; CSKY-NEXT: .long __atomic_fetch_xor_1 ; %1 = atomicrmw xor i8* %a, i8 %b seq_cst ret i8 %1 } define i8 @atomicrmw_max_i8_monotonic(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_max_i8_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.b a0, (a0, 0) ; CSKY-NEXT: sextb16 l2, a1 ; CSKY-NEXT: movi16 l3, 0 ; CSKY-NEXT: .LBB35_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: sextb16 a1, a0 ; CSKY-NEXT: cmplt16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: st32.b a0, (sp, 7) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 7 ; CSKY-NEXT: movi16 a3, 0 ; CSKY-NEXT: jsri32 [.LCPI35_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.b a0, (sp, 7) ; CSKY-NEXT: bez32 a1, .LBB35_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI35_0: ; CSKY-NEXT: .long __atomic_compare_exchange_1 ; %1 = atomicrmw max i8* %a, i8 %b monotonic ret i8 %1 } define i8 @atomicrmw_max_i8_acquire(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_max_i8_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.b a0, (a0, 0) ; CSKY-NEXT: sextb16 l2, a1 ; CSKY-NEXT: movi16 l3, 2 ; CSKY-NEXT: .LBB36_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: sextb16 a1, a0 ; CSKY-NEXT: cmplt16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: st32.b a0, (sp, 7) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 7 ; CSKY-NEXT: movi16 a3, 2 ; CSKY-NEXT: jsri32 [.LCPI36_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.b a0, (sp, 7) ; CSKY-NEXT: bez32 a1, .LBB36_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI36_0: ; CSKY-NEXT: .long __atomic_compare_exchange_1 ; %1 = atomicrmw max i8* %a, i8 %b acquire ret i8 %1 } define i8 @atomicrmw_max_i8_release(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_max_i8_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.b a0, (a0, 0) ; CSKY-NEXT: sextb16 l2, a1 ; CSKY-NEXT: movi16 l3, 0 ; CSKY-NEXT: .LBB37_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: sextb16 a1, a0 ; CSKY-NEXT: cmplt16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: st32.b a0, (sp, 7) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 7 ; CSKY-NEXT: movi16 a3, 3 ; CSKY-NEXT: jsri32 [.LCPI37_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.b a0, (sp, 7) ; CSKY-NEXT: bez32 a1, .LBB37_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI37_0: ; CSKY-NEXT: .long __atomic_compare_exchange_1 ; %1 = atomicrmw max i8* %a, i8 %b release ret i8 %1 } define i8 @atomicrmw_max_i8_acq_rel(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_max_i8_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.b a0, (a0, 0) ; CSKY-NEXT: sextb16 l2, a1 ; CSKY-NEXT: movi16 l3, 2 ; CSKY-NEXT: .LBB38_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: sextb16 a1, a0 ; CSKY-NEXT: cmplt16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: st32.b a0, (sp, 7) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 7 ; CSKY-NEXT: movi16 a3, 4 ; CSKY-NEXT: jsri32 [.LCPI38_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.b a0, (sp, 7) ; CSKY-NEXT: bez32 a1, .LBB38_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI38_0: ; CSKY-NEXT: .long __atomic_compare_exchange_1 ; %1 = atomicrmw max i8* %a, i8 %b acq_rel ret i8 %1 } define i8 @atomicrmw_max_i8_seq_cst(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_max_i8_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.b a0, (a0, 0) ; CSKY-NEXT: sextb16 l2, a1 ; CSKY-NEXT: movi16 l3, 5 ; CSKY-NEXT: .LBB39_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: sextb16 a1, a0 ; CSKY-NEXT: cmplt16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: st32.b a0, (sp, 7) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 7 ; CSKY-NEXT: movi16 a3, 5 ; CSKY-NEXT: jsri32 [.LCPI39_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.b a0, (sp, 7) ; CSKY-NEXT: bez32 a1, .LBB39_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI39_0: ; CSKY-NEXT: .long __atomic_compare_exchange_1 ; %1 = atomicrmw max i8* %a, i8 %b seq_cst ret i8 %1 } define i8 @atomicrmw_min_i8_monotonic(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_min_i8_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.b a0, (a0, 0) ; CSKY-NEXT: sextb16 l2, a1 ; CSKY-NEXT: movi16 l3, 0 ; CSKY-NEXT: .LBB40_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: sextb16 a1, a0 ; CSKY-NEXT: cmplt16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movf32 a2, a0 ; CSKY-NEXT: st32.b a0, (sp, 7) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 7 ; CSKY-NEXT: movi16 a3, 0 ; CSKY-NEXT: jsri32 [.LCPI40_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.b a0, (sp, 7) ; CSKY-NEXT: bez32 a1, .LBB40_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI40_0: ; CSKY-NEXT: .long __atomic_compare_exchange_1 ; %1 = atomicrmw min i8* %a, i8 %b monotonic ret i8 %1 } define i8 @atomicrmw_min_i8_acquire(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_min_i8_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.b a0, (a0, 0) ; CSKY-NEXT: sextb16 l2, a1 ; CSKY-NEXT: movi16 l3, 2 ; CSKY-NEXT: .LBB41_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: sextb16 a1, a0 ; CSKY-NEXT: cmplt16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movf32 a2, a0 ; CSKY-NEXT: st32.b a0, (sp, 7) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 7 ; CSKY-NEXT: movi16 a3, 2 ; CSKY-NEXT: jsri32 [.LCPI41_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.b a0, (sp, 7) ; CSKY-NEXT: bez32 a1, .LBB41_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI41_0: ; CSKY-NEXT: .long __atomic_compare_exchange_1 ; %1 = atomicrmw min i8* %a, i8 %b acquire ret i8 %1 } define i8 @atomicrmw_min_i8_release(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_min_i8_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.b a0, (a0, 0) ; CSKY-NEXT: sextb16 l2, a1 ; CSKY-NEXT: movi16 l3, 0 ; CSKY-NEXT: .LBB42_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: sextb16 a1, a0 ; CSKY-NEXT: cmplt16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movf32 a2, a0 ; CSKY-NEXT: st32.b a0, (sp, 7) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 7 ; CSKY-NEXT: movi16 a3, 3 ; CSKY-NEXT: jsri32 [.LCPI42_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.b a0, (sp, 7) ; CSKY-NEXT: bez32 a1, .LBB42_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI42_0: ; CSKY-NEXT: .long __atomic_compare_exchange_1 ; %1 = atomicrmw min i8* %a, i8 %b release ret i8 %1 } define i8 @atomicrmw_min_i8_acq_rel(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_min_i8_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.b a0, (a0, 0) ; CSKY-NEXT: sextb16 l2, a1 ; CSKY-NEXT: movi16 l3, 2 ; CSKY-NEXT: .LBB43_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: sextb16 a1, a0 ; CSKY-NEXT: cmplt16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movf32 a2, a0 ; CSKY-NEXT: st32.b a0, (sp, 7) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 7 ; CSKY-NEXT: movi16 a3, 4 ; CSKY-NEXT: jsri32 [.LCPI43_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.b a0, (sp, 7) ; CSKY-NEXT: bez32 a1, .LBB43_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI43_0: ; CSKY-NEXT: .long __atomic_compare_exchange_1 ; %1 = atomicrmw min i8* %a, i8 %b acq_rel ret i8 %1 } define i8 @atomicrmw_min_i8_seq_cst(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_min_i8_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.b a0, (a0, 0) ; CSKY-NEXT: sextb16 l2, a1 ; CSKY-NEXT: movi16 l3, 5 ; CSKY-NEXT: .LBB44_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: sextb16 a1, a0 ; CSKY-NEXT: cmplt16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movf32 a2, a0 ; CSKY-NEXT: st32.b a0, (sp, 7) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 7 ; CSKY-NEXT: movi16 a3, 5 ; CSKY-NEXT: jsri32 [.LCPI44_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.b a0, (sp, 7) ; CSKY-NEXT: bez32 a1, .LBB44_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI44_0: ; CSKY-NEXT: .long __atomic_compare_exchange_1 ; %1 = atomicrmw min i8* %a, i8 %b seq_cst ret i8 %1 } define i8 @atomicrmw_umax_i8_monotonic(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_umax_i8_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.b a0, (a0, 0) ; CSKY-NEXT: zextb16 l2, a1 ; CSKY-NEXT: movi16 l3, 0 ; CSKY-NEXT: .LBB45_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: zextb16 a1, a0 ; CSKY-NEXT: cmphs16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movf32 a2, a0 ; CSKY-NEXT: st32.b a0, (sp, 7) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 7 ; CSKY-NEXT: movi16 a3, 0 ; CSKY-NEXT: jsri32 [.LCPI45_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.b a0, (sp, 7) ; CSKY-NEXT: bez32 a1, .LBB45_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI45_0: ; CSKY-NEXT: .long __atomic_compare_exchange_1 ; %1 = atomicrmw umax i8* %a, i8 %b monotonic ret i8 %1 } define i8 @atomicrmw_umax_i8_acquire(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_umax_i8_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.b a0, (a0, 0) ; CSKY-NEXT: zextb16 l2, a1 ; CSKY-NEXT: movi16 l3, 2 ; CSKY-NEXT: .LBB46_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: zextb16 a1, a0 ; CSKY-NEXT: cmphs16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movf32 a2, a0 ; CSKY-NEXT: st32.b a0, (sp, 7) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 7 ; CSKY-NEXT: movi16 a3, 2 ; CSKY-NEXT: jsri32 [.LCPI46_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.b a0, (sp, 7) ; CSKY-NEXT: bez32 a1, .LBB46_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI46_0: ; CSKY-NEXT: .long __atomic_compare_exchange_1 ; %1 = atomicrmw umax i8* %a, i8 %b acquire ret i8 %1 } define i8 @atomicrmw_umax_i8_release(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_umax_i8_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.b a0, (a0, 0) ; CSKY-NEXT: zextb16 l2, a1 ; CSKY-NEXT: movi16 l3, 0 ; CSKY-NEXT: .LBB47_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: zextb16 a1, a0 ; CSKY-NEXT: cmphs16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movf32 a2, a0 ; CSKY-NEXT: st32.b a0, (sp, 7) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 7 ; CSKY-NEXT: movi16 a3, 3 ; CSKY-NEXT: jsri32 [.LCPI47_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.b a0, (sp, 7) ; CSKY-NEXT: bez32 a1, .LBB47_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI47_0: ; CSKY-NEXT: .long __atomic_compare_exchange_1 ; %1 = atomicrmw umax i8* %a, i8 %b release ret i8 %1 } define i8 @atomicrmw_umax_i8_acq_rel(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_umax_i8_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.b a0, (a0, 0) ; CSKY-NEXT: zextb16 l2, a1 ; CSKY-NEXT: movi16 l3, 2 ; CSKY-NEXT: .LBB48_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: zextb16 a1, a0 ; CSKY-NEXT: cmphs16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movf32 a2, a0 ; CSKY-NEXT: st32.b a0, (sp, 7) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 7 ; CSKY-NEXT: movi16 a3, 4 ; CSKY-NEXT: jsri32 [.LCPI48_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.b a0, (sp, 7) ; CSKY-NEXT: bez32 a1, .LBB48_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI48_0: ; CSKY-NEXT: .long __atomic_compare_exchange_1 ; %1 = atomicrmw umax i8* %a, i8 %b acq_rel ret i8 %1 } define i8 @atomicrmw_umax_i8_seq_cst(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_umax_i8_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.b a0, (a0, 0) ; CSKY-NEXT: zextb16 l2, a1 ; CSKY-NEXT: movi16 l3, 5 ; CSKY-NEXT: .LBB49_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: zextb16 a1, a0 ; CSKY-NEXT: cmphs16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movf32 a2, a0 ; CSKY-NEXT: st32.b a0, (sp, 7) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 7 ; CSKY-NEXT: movi16 a3, 5 ; CSKY-NEXT: jsri32 [.LCPI49_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.b a0, (sp, 7) ; CSKY-NEXT: bez32 a1, .LBB49_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI49_0: ; CSKY-NEXT: .long __atomic_compare_exchange_1 ; %1 = atomicrmw umax i8* %a, i8 %b seq_cst ret i8 %1 } define i8 @atomicrmw_umin_i8_monotonic(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_umin_i8_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.b a0, (a0, 0) ; CSKY-NEXT: zextb16 l2, a1 ; CSKY-NEXT: movi16 l3, 0 ; CSKY-NEXT: .LBB50_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: zextb16 a1, a0 ; CSKY-NEXT: cmphs16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: st32.b a0, (sp, 7) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 7 ; CSKY-NEXT: movi16 a3, 0 ; CSKY-NEXT: jsri32 [.LCPI50_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.b a0, (sp, 7) ; CSKY-NEXT: bez32 a1, .LBB50_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI50_0: ; CSKY-NEXT: .long __atomic_compare_exchange_1 ; %1 = atomicrmw umin i8* %a, i8 %b monotonic ret i8 %1 } define i8 @atomicrmw_umin_i8_acquire(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_umin_i8_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.b a0, (a0, 0) ; CSKY-NEXT: zextb16 l2, a1 ; CSKY-NEXT: movi16 l3, 2 ; CSKY-NEXT: .LBB51_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: zextb16 a1, a0 ; CSKY-NEXT: cmphs16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: st32.b a0, (sp, 7) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 7 ; CSKY-NEXT: movi16 a3, 2 ; CSKY-NEXT: jsri32 [.LCPI51_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.b a0, (sp, 7) ; CSKY-NEXT: bez32 a1, .LBB51_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI51_0: ; CSKY-NEXT: .long __atomic_compare_exchange_1 ; %1 = atomicrmw umin i8* %a, i8 %b acquire ret i8 %1 } define i8 @atomicrmw_umin_i8_release(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_umin_i8_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.b a0, (a0, 0) ; CSKY-NEXT: zextb16 l2, a1 ; CSKY-NEXT: movi16 l3, 0 ; CSKY-NEXT: .LBB52_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: zextb16 a1, a0 ; CSKY-NEXT: cmphs16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: st32.b a0, (sp, 7) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 7 ; CSKY-NEXT: movi16 a3, 3 ; CSKY-NEXT: jsri32 [.LCPI52_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.b a0, (sp, 7) ; CSKY-NEXT: bez32 a1, .LBB52_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI52_0: ; CSKY-NEXT: .long __atomic_compare_exchange_1 ; %1 = atomicrmw umin i8* %a, i8 %b release ret i8 %1 } define i8 @atomicrmw_umin_i8_acq_rel(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_umin_i8_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.b a0, (a0, 0) ; CSKY-NEXT: zextb16 l2, a1 ; CSKY-NEXT: movi16 l3, 2 ; CSKY-NEXT: .LBB53_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: zextb16 a1, a0 ; CSKY-NEXT: cmphs16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: st32.b a0, (sp, 7) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 7 ; CSKY-NEXT: movi16 a3, 4 ; CSKY-NEXT: jsri32 [.LCPI53_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.b a0, (sp, 7) ; CSKY-NEXT: bez32 a1, .LBB53_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI53_0: ; CSKY-NEXT: .long __atomic_compare_exchange_1 ; %1 = atomicrmw umin i8* %a, i8 %b acq_rel ret i8 %1 } define i8 @atomicrmw_umin_i8_seq_cst(i8 *%a, i8 %b) nounwind { ; CSKY-LABEL: atomicrmw_umin_i8_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.b a0, (a0, 0) ; CSKY-NEXT: zextb16 l2, a1 ; CSKY-NEXT: movi16 l3, 5 ; CSKY-NEXT: .LBB54_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: zextb16 a1, a0 ; CSKY-NEXT: cmphs16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: st32.b a0, (sp, 7) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 7 ; CSKY-NEXT: movi16 a3, 5 ; CSKY-NEXT: jsri32 [.LCPI54_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.b a0, (sp, 7) ; CSKY-NEXT: bez32 a1, .LBB54_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI54_0: ; CSKY-NEXT: .long __atomic_compare_exchange_1 ; %1 = atomicrmw umin i8* %a, i8 %b seq_cst ret i8 %1 } define i16 @atomicrmw_xchg_i16_monotonic(i16* %a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_xchg_i16_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 0 ; CSKY-NEXT: jsri32 [.LCPI55_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI55_0: ; CSKY-NEXT: .long __atomic_exchange_2 ; %1 = atomicrmw xchg i16* %a, i16 %b monotonic ret i16 %1 } define i16 @atomicrmw_xchg_i16_acquire(i16* %a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_xchg_i16_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 2 ; CSKY-NEXT: jsri32 [.LCPI56_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI56_0: ; CSKY-NEXT: .long __atomic_exchange_2 ; %1 = atomicrmw xchg i16* %a, i16 %b acquire ret i16 %1 } define i16 @atomicrmw_xchg_i16_release(i16* %a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_xchg_i16_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 3 ; CSKY-NEXT: jsri32 [.LCPI57_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI57_0: ; CSKY-NEXT: .long __atomic_exchange_2 ; %1 = atomicrmw xchg i16* %a, i16 %b release ret i16 %1 } define i16 @atomicrmw_xchg_i16_acq_rel(i16* %a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_xchg_i16_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 4 ; CSKY-NEXT: jsri32 [.LCPI58_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI58_0: ; CSKY-NEXT: .long __atomic_exchange_2 ; %1 = atomicrmw xchg i16* %a, i16 %b acq_rel ret i16 %1 } define i16 @atomicrmw_xchg_i16_seq_cst(i16* %a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_xchg_i16_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 5 ; CSKY-NEXT: jsri32 [.LCPI59_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI59_0: ; CSKY-NEXT: .long __atomic_exchange_2 ; %1 = atomicrmw xchg i16* %a, i16 %b seq_cst ret i16 %1 } define i16 @atomicrmw_add_i16_monotonic(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_add_i16_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 0 ; CSKY-NEXT: jsri32 [.LCPI60_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI60_0: ; CSKY-NEXT: .long __atomic_fetch_add_2 ; %1 = atomicrmw add i16* %a, i16 %b monotonic ret i16 %1 } define i16 @atomicrmw_add_i16_acquire(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_add_i16_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 2 ; CSKY-NEXT: jsri32 [.LCPI61_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI61_0: ; CSKY-NEXT: .long __atomic_fetch_add_2 ; %1 = atomicrmw add i16* %a, i16 %b acquire ret i16 %1 } define i16 @atomicrmw_add_i16_release(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_add_i16_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 3 ; CSKY-NEXT: jsri32 [.LCPI62_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI62_0: ; CSKY-NEXT: .long __atomic_fetch_add_2 ; %1 = atomicrmw add i16* %a, i16 %b release ret i16 %1 } define i16 @atomicrmw_add_i16_acq_rel(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_add_i16_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 4 ; CSKY-NEXT: jsri32 [.LCPI63_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI63_0: ; CSKY-NEXT: .long __atomic_fetch_add_2 ; %1 = atomicrmw add i16* %a, i16 %b acq_rel ret i16 %1 } define i16 @atomicrmw_add_i16_seq_cst(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_add_i16_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 5 ; CSKY-NEXT: jsri32 [.LCPI64_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI64_0: ; CSKY-NEXT: .long __atomic_fetch_add_2 ; %1 = atomicrmw add i16* %a, i16 %b seq_cst ret i16 %1 } define i16 @atomicrmw_sub_i16_monotonic(i16* %a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_sub_i16_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 0 ; CSKY-NEXT: jsri32 [.LCPI65_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI65_0: ; CSKY-NEXT: .long __atomic_fetch_sub_2 ; %1 = atomicrmw sub i16* %a, i16 %b monotonic ret i16 %1 } define i16 @atomicrmw_sub_i16_acquire(i16* %a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_sub_i16_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 2 ; CSKY-NEXT: jsri32 [.LCPI66_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI66_0: ; CSKY-NEXT: .long __atomic_fetch_sub_2 ; %1 = atomicrmw sub i16* %a, i16 %b acquire ret i16 %1 } define i16 @atomicrmw_sub_i16_release(i16* %a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_sub_i16_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 3 ; CSKY-NEXT: jsri32 [.LCPI67_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI67_0: ; CSKY-NEXT: .long __atomic_fetch_sub_2 ; %1 = atomicrmw sub i16* %a, i16 %b release ret i16 %1 } define i16 @atomicrmw_sub_i16_acq_rel(i16* %a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_sub_i16_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 4 ; CSKY-NEXT: jsri32 [.LCPI68_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI68_0: ; CSKY-NEXT: .long __atomic_fetch_sub_2 ; %1 = atomicrmw sub i16* %a, i16 %b acq_rel ret i16 %1 } define i16 @atomicrmw_sub_i16_seq_cst(i16* %a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_sub_i16_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 5 ; CSKY-NEXT: jsri32 [.LCPI69_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI69_0: ; CSKY-NEXT: .long __atomic_fetch_sub_2 ; %1 = atomicrmw sub i16* %a, i16 %b seq_cst ret i16 %1 } define i16 @atomicrmw_and_i16_monotonic(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_and_i16_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 0 ; CSKY-NEXT: jsri32 [.LCPI70_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI70_0: ; CSKY-NEXT: .long __atomic_fetch_and_2 ; %1 = atomicrmw and i16* %a, i16 %b monotonic ret i16 %1 } define i16 @atomicrmw_and_i16_acquire(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_and_i16_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 2 ; CSKY-NEXT: jsri32 [.LCPI71_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI71_0: ; CSKY-NEXT: .long __atomic_fetch_and_2 ; %1 = atomicrmw and i16* %a, i16 %b acquire ret i16 %1 } define i16 @atomicrmw_and_i16_release(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_and_i16_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 3 ; CSKY-NEXT: jsri32 [.LCPI72_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI72_0: ; CSKY-NEXT: .long __atomic_fetch_and_2 ; %1 = atomicrmw and i16* %a, i16 %b release ret i16 %1 } define i16 @atomicrmw_and_i16_acq_rel(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_and_i16_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 4 ; CSKY-NEXT: jsri32 [.LCPI73_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI73_0: ; CSKY-NEXT: .long __atomic_fetch_and_2 ; %1 = atomicrmw and i16* %a, i16 %b acq_rel ret i16 %1 } define i16 @atomicrmw_and_i16_seq_cst(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_and_i16_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 5 ; CSKY-NEXT: jsri32 [.LCPI74_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI74_0: ; CSKY-NEXT: .long __atomic_fetch_and_2 ; %1 = atomicrmw and i16* %a, i16 %b seq_cst ret i16 %1 } define i16 @atomicrmw_nand_i16_monotonic(i16* %a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_nand_i16_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 0 ; CSKY-NEXT: jsri32 [.LCPI75_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI75_0: ; CSKY-NEXT: .long __atomic_fetch_nand_2 ; %1 = atomicrmw nand i16* %a, i16 %b monotonic ret i16 %1 } define i16 @atomicrmw_nand_i16_acquire(i16* %a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_nand_i16_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 2 ; CSKY-NEXT: jsri32 [.LCPI76_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI76_0: ; CSKY-NEXT: .long __atomic_fetch_nand_2 ; %1 = atomicrmw nand i16* %a, i16 %b acquire ret i16 %1 } define i16 @atomicrmw_nand_i16_release(i16* %a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_nand_i16_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 3 ; CSKY-NEXT: jsri32 [.LCPI77_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI77_0: ; CSKY-NEXT: .long __atomic_fetch_nand_2 ; %1 = atomicrmw nand i16* %a, i16 %b release ret i16 %1 } define i16 @atomicrmw_nand_i16_acq_rel(i16* %a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_nand_i16_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 4 ; CSKY-NEXT: jsri32 [.LCPI78_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI78_0: ; CSKY-NEXT: .long __atomic_fetch_nand_2 ; %1 = atomicrmw nand i16* %a, i16 %b acq_rel ret i16 %1 } define i16 @atomicrmw_nand_i16_seq_cst(i16* %a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_nand_i16_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 5 ; CSKY-NEXT: jsri32 [.LCPI79_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI79_0: ; CSKY-NEXT: .long __atomic_fetch_nand_2 ; %1 = atomicrmw nand i16* %a, i16 %b seq_cst ret i16 %1 } define i16 @atomicrmw_or_i16_monotonic(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_or_i16_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 0 ; CSKY-NEXT: jsri32 [.LCPI80_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI80_0: ; CSKY-NEXT: .long __atomic_fetch_or_2 ; %1 = atomicrmw or i16* %a, i16 %b monotonic ret i16 %1 } define i16 @atomicrmw_or_i16_acquire(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_or_i16_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 2 ; CSKY-NEXT: jsri32 [.LCPI81_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI81_0: ; CSKY-NEXT: .long __atomic_fetch_or_2 ; %1 = atomicrmw or i16* %a, i16 %b acquire ret i16 %1 } define i16 @atomicrmw_or_i16_release(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_or_i16_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 3 ; CSKY-NEXT: jsri32 [.LCPI82_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI82_0: ; CSKY-NEXT: .long __atomic_fetch_or_2 ; %1 = atomicrmw or i16* %a, i16 %b release ret i16 %1 } define i16 @atomicrmw_or_i16_acq_rel(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_or_i16_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 4 ; CSKY-NEXT: jsri32 [.LCPI83_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI83_0: ; CSKY-NEXT: .long __atomic_fetch_or_2 ; %1 = atomicrmw or i16* %a, i16 %b acq_rel ret i16 %1 } define i16 @atomicrmw_or_i16_seq_cst(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_or_i16_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 5 ; CSKY-NEXT: jsri32 [.LCPI84_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI84_0: ; CSKY-NEXT: .long __atomic_fetch_or_2 ; %1 = atomicrmw or i16* %a, i16 %b seq_cst ret i16 %1 } define i16 @atomicrmw_xor_i16_monotonic(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_xor_i16_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 0 ; CSKY-NEXT: jsri32 [.LCPI85_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI85_0: ; CSKY-NEXT: .long __atomic_fetch_xor_2 ; %1 = atomicrmw xor i16* %a, i16 %b monotonic ret i16 %1 } define i16 @atomicrmw_xor_i16_acquire(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_xor_i16_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 2 ; CSKY-NEXT: jsri32 [.LCPI86_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI86_0: ; CSKY-NEXT: .long __atomic_fetch_xor_2 ; %1 = atomicrmw xor i16* %a, i16 %b acquire ret i16 %1 } define i16 @atomicrmw_xor_i16_release(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_xor_i16_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 3 ; CSKY-NEXT: jsri32 [.LCPI87_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI87_0: ; CSKY-NEXT: .long __atomic_fetch_xor_2 ; %1 = atomicrmw xor i16* %a, i16 %b release ret i16 %1 } define i16 @atomicrmw_xor_i16_acq_rel(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_xor_i16_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 4 ; CSKY-NEXT: jsri32 [.LCPI88_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI88_0: ; CSKY-NEXT: .long __atomic_fetch_xor_2 ; %1 = atomicrmw xor i16* %a, i16 %b acq_rel ret i16 %1 } define i16 @atomicrmw_xor_i16_seq_cst(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_xor_i16_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 5 ; CSKY-NEXT: jsri32 [.LCPI89_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI89_0: ; CSKY-NEXT: .long __atomic_fetch_xor_2 ; %1 = atomicrmw xor i16* %a, i16 %b seq_cst ret i16 %1 } define i16 @atomicrmw_max_i16_monotonic(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_max_i16_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.h a0, (a0, 0) ; CSKY-NEXT: sexth16 l2, a1 ; CSKY-NEXT: movi16 l3, 0 ; CSKY-NEXT: .LBB90_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: sexth16 a1, a0 ; CSKY-NEXT: cmplt16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: st32.h a0, (sp, 6) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 6 ; CSKY-NEXT: movi16 a3, 0 ; CSKY-NEXT: jsri32 [.LCPI90_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.h a0, (sp, 6) ; CSKY-NEXT: bez32 a1, .LBB90_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI90_0: ; CSKY-NEXT: .long __atomic_compare_exchange_2 ; %1 = atomicrmw max i16* %a, i16 %b monotonic ret i16 %1 } define i16 @atomicrmw_max_i16_acquire(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_max_i16_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.h a0, (a0, 0) ; CSKY-NEXT: sexth16 l2, a1 ; CSKY-NEXT: movi16 l3, 2 ; CSKY-NEXT: .LBB91_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: sexth16 a1, a0 ; CSKY-NEXT: cmplt16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: st32.h a0, (sp, 6) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 6 ; CSKY-NEXT: movi16 a3, 2 ; CSKY-NEXT: jsri32 [.LCPI91_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.h a0, (sp, 6) ; CSKY-NEXT: bez32 a1, .LBB91_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI91_0: ; CSKY-NEXT: .long __atomic_compare_exchange_2 ; %1 = atomicrmw max i16* %a, i16 %b acquire ret i16 %1 } define i16 @atomicrmw_max_i16_release(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_max_i16_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.h a0, (a0, 0) ; CSKY-NEXT: sexth16 l2, a1 ; CSKY-NEXT: movi16 l3, 0 ; CSKY-NEXT: .LBB92_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: sexth16 a1, a0 ; CSKY-NEXT: cmplt16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: st32.h a0, (sp, 6) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 6 ; CSKY-NEXT: movi16 a3, 3 ; CSKY-NEXT: jsri32 [.LCPI92_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.h a0, (sp, 6) ; CSKY-NEXT: bez32 a1, .LBB92_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI92_0: ; CSKY-NEXT: .long __atomic_compare_exchange_2 ; %1 = atomicrmw max i16* %a, i16 %b release ret i16 %1 } define i16 @atomicrmw_max_i16_acq_rel(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_max_i16_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.h a0, (a0, 0) ; CSKY-NEXT: sexth16 l2, a1 ; CSKY-NEXT: movi16 l3, 2 ; CSKY-NEXT: .LBB93_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: sexth16 a1, a0 ; CSKY-NEXT: cmplt16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: st32.h a0, (sp, 6) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 6 ; CSKY-NEXT: movi16 a3, 4 ; CSKY-NEXT: jsri32 [.LCPI93_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.h a0, (sp, 6) ; CSKY-NEXT: bez32 a1, .LBB93_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI93_0: ; CSKY-NEXT: .long __atomic_compare_exchange_2 ; %1 = atomicrmw max i16* %a, i16 %b acq_rel ret i16 %1 } define i16 @atomicrmw_max_i16_seq_cst(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_max_i16_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.h a0, (a0, 0) ; CSKY-NEXT: sexth16 l2, a1 ; CSKY-NEXT: movi16 l3, 5 ; CSKY-NEXT: .LBB94_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: sexth16 a1, a0 ; CSKY-NEXT: cmplt16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: st32.h a0, (sp, 6) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 6 ; CSKY-NEXT: movi16 a3, 5 ; CSKY-NEXT: jsri32 [.LCPI94_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.h a0, (sp, 6) ; CSKY-NEXT: bez32 a1, .LBB94_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI94_0: ; CSKY-NEXT: .long __atomic_compare_exchange_2 ; %1 = atomicrmw max i16* %a, i16 %b seq_cst ret i16 %1 } define i16 @atomicrmw_min_i16_monotonic(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_min_i16_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.h a0, (a0, 0) ; CSKY-NEXT: sexth16 l2, a1 ; CSKY-NEXT: movi16 l3, 0 ; CSKY-NEXT: .LBB95_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: sexth16 a1, a0 ; CSKY-NEXT: cmplt16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movf32 a2, a0 ; CSKY-NEXT: st32.h a0, (sp, 6) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 6 ; CSKY-NEXT: movi16 a3, 0 ; CSKY-NEXT: jsri32 [.LCPI95_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.h a0, (sp, 6) ; CSKY-NEXT: bez32 a1, .LBB95_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI95_0: ; CSKY-NEXT: .long __atomic_compare_exchange_2 ; %1 = atomicrmw min i16* %a, i16 %b monotonic ret i16 %1 } define i16 @atomicrmw_min_i16_acquire(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_min_i16_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.h a0, (a0, 0) ; CSKY-NEXT: sexth16 l2, a1 ; CSKY-NEXT: movi16 l3, 2 ; CSKY-NEXT: .LBB96_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: sexth16 a1, a0 ; CSKY-NEXT: cmplt16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movf32 a2, a0 ; CSKY-NEXT: st32.h a0, (sp, 6) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 6 ; CSKY-NEXT: movi16 a3, 2 ; CSKY-NEXT: jsri32 [.LCPI96_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.h a0, (sp, 6) ; CSKY-NEXT: bez32 a1, .LBB96_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI96_0: ; CSKY-NEXT: .long __atomic_compare_exchange_2 ; %1 = atomicrmw min i16* %a, i16 %b acquire ret i16 %1 } define i16 @atomicrmw_min_i16_release(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_min_i16_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.h a0, (a0, 0) ; CSKY-NEXT: sexth16 l2, a1 ; CSKY-NEXT: movi16 l3, 0 ; CSKY-NEXT: .LBB97_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: sexth16 a1, a0 ; CSKY-NEXT: cmplt16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movf32 a2, a0 ; CSKY-NEXT: st32.h a0, (sp, 6) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 6 ; CSKY-NEXT: movi16 a3, 3 ; CSKY-NEXT: jsri32 [.LCPI97_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.h a0, (sp, 6) ; CSKY-NEXT: bez32 a1, .LBB97_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI97_0: ; CSKY-NEXT: .long __atomic_compare_exchange_2 ; %1 = atomicrmw min i16* %a, i16 %b release ret i16 %1 } define i16 @atomicrmw_min_i16_acq_rel(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_min_i16_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.h a0, (a0, 0) ; CSKY-NEXT: sexth16 l2, a1 ; CSKY-NEXT: movi16 l3, 2 ; CSKY-NEXT: .LBB98_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: sexth16 a1, a0 ; CSKY-NEXT: cmplt16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movf32 a2, a0 ; CSKY-NEXT: st32.h a0, (sp, 6) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 6 ; CSKY-NEXT: movi16 a3, 4 ; CSKY-NEXT: jsri32 [.LCPI98_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.h a0, (sp, 6) ; CSKY-NEXT: bez32 a1, .LBB98_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI98_0: ; CSKY-NEXT: .long __atomic_compare_exchange_2 ; %1 = atomicrmw min i16* %a, i16 %b acq_rel ret i16 %1 } define i16 @atomicrmw_min_i16_seq_cst(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_min_i16_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.h a0, (a0, 0) ; CSKY-NEXT: sexth16 l2, a1 ; CSKY-NEXT: movi16 l3, 5 ; CSKY-NEXT: .LBB99_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: sexth16 a1, a0 ; CSKY-NEXT: cmplt16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movf32 a2, a0 ; CSKY-NEXT: st32.h a0, (sp, 6) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 6 ; CSKY-NEXT: movi16 a3, 5 ; CSKY-NEXT: jsri32 [.LCPI99_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.h a0, (sp, 6) ; CSKY-NEXT: bez32 a1, .LBB99_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI99_0: ; CSKY-NEXT: .long __atomic_compare_exchange_2 ; %1 = atomicrmw min i16* %a, i16 %b seq_cst ret i16 %1 } define i16 @atomicrmw_umax_i16_monotonic(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_umax_i16_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.h a0, (a0, 0) ; CSKY-NEXT: zexth16 l2, a1 ; CSKY-NEXT: movi16 l3, 0 ; CSKY-NEXT: .LBB100_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: zexth16 a1, a0 ; CSKY-NEXT: cmphs16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movf32 a2, a0 ; CSKY-NEXT: st32.h a0, (sp, 6) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 6 ; CSKY-NEXT: movi16 a3, 0 ; CSKY-NEXT: jsri32 [.LCPI100_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.h a0, (sp, 6) ; CSKY-NEXT: bez32 a1, .LBB100_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI100_0: ; CSKY-NEXT: .long __atomic_compare_exchange_2 ; %1 = atomicrmw umax i16* %a, i16 %b monotonic ret i16 %1 } define i16 @atomicrmw_umax_i16_acquire(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_umax_i16_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.h a0, (a0, 0) ; CSKY-NEXT: zexth16 l2, a1 ; CSKY-NEXT: movi16 l3, 2 ; CSKY-NEXT: .LBB101_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: zexth16 a1, a0 ; CSKY-NEXT: cmphs16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movf32 a2, a0 ; CSKY-NEXT: st32.h a0, (sp, 6) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 6 ; CSKY-NEXT: movi16 a3, 2 ; CSKY-NEXT: jsri32 [.LCPI101_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.h a0, (sp, 6) ; CSKY-NEXT: bez32 a1, .LBB101_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI101_0: ; CSKY-NEXT: .long __atomic_compare_exchange_2 ; %1 = atomicrmw umax i16* %a, i16 %b acquire ret i16 %1 } define i16 @atomicrmw_umax_i16_release(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_umax_i16_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.h a0, (a0, 0) ; CSKY-NEXT: zexth16 l2, a1 ; CSKY-NEXT: movi16 l3, 0 ; CSKY-NEXT: .LBB102_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: zexth16 a1, a0 ; CSKY-NEXT: cmphs16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movf32 a2, a0 ; CSKY-NEXT: st32.h a0, (sp, 6) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 6 ; CSKY-NEXT: movi16 a3, 3 ; CSKY-NEXT: jsri32 [.LCPI102_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.h a0, (sp, 6) ; CSKY-NEXT: bez32 a1, .LBB102_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI102_0: ; CSKY-NEXT: .long __atomic_compare_exchange_2 ; %1 = atomicrmw umax i16* %a, i16 %b release ret i16 %1 } define i16 @atomicrmw_umax_i16_acq_rel(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_umax_i16_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.h a0, (a0, 0) ; CSKY-NEXT: zexth16 l2, a1 ; CSKY-NEXT: movi16 l3, 2 ; CSKY-NEXT: .LBB103_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: zexth16 a1, a0 ; CSKY-NEXT: cmphs16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movf32 a2, a0 ; CSKY-NEXT: st32.h a0, (sp, 6) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 6 ; CSKY-NEXT: movi16 a3, 4 ; CSKY-NEXT: jsri32 [.LCPI103_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.h a0, (sp, 6) ; CSKY-NEXT: bez32 a1, .LBB103_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI103_0: ; CSKY-NEXT: .long __atomic_compare_exchange_2 ; %1 = atomicrmw umax i16* %a, i16 %b acq_rel ret i16 %1 } define i16 @atomicrmw_umax_i16_seq_cst(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_umax_i16_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.h a0, (a0, 0) ; CSKY-NEXT: zexth16 l2, a1 ; CSKY-NEXT: movi16 l3, 5 ; CSKY-NEXT: .LBB104_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: zexth16 a1, a0 ; CSKY-NEXT: cmphs16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movf32 a2, a0 ; CSKY-NEXT: st32.h a0, (sp, 6) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 6 ; CSKY-NEXT: movi16 a3, 5 ; CSKY-NEXT: jsri32 [.LCPI104_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.h a0, (sp, 6) ; CSKY-NEXT: bez32 a1, .LBB104_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI104_0: ; CSKY-NEXT: .long __atomic_compare_exchange_2 ; %1 = atomicrmw umax i16* %a, i16 %b seq_cst ret i16 %1 } define i16 @atomicrmw_umin_i16_monotonic(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_umin_i16_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.h a0, (a0, 0) ; CSKY-NEXT: zexth16 l2, a1 ; CSKY-NEXT: movi16 l3, 0 ; CSKY-NEXT: .LBB105_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: zexth16 a1, a0 ; CSKY-NEXT: cmphs16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: st32.h a0, (sp, 6) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 6 ; CSKY-NEXT: movi16 a3, 0 ; CSKY-NEXT: jsri32 [.LCPI105_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.h a0, (sp, 6) ; CSKY-NEXT: bez32 a1, .LBB105_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI105_0: ; CSKY-NEXT: .long __atomic_compare_exchange_2 ; %1 = atomicrmw umin i16* %a, i16 %b monotonic ret i16 %1 } define i16 @atomicrmw_umin_i16_acquire(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_umin_i16_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.h a0, (a0, 0) ; CSKY-NEXT: zexth16 l2, a1 ; CSKY-NEXT: movi16 l3, 2 ; CSKY-NEXT: .LBB106_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: zexth16 a1, a0 ; CSKY-NEXT: cmphs16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: st32.h a0, (sp, 6) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 6 ; CSKY-NEXT: movi16 a3, 2 ; CSKY-NEXT: jsri32 [.LCPI106_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.h a0, (sp, 6) ; CSKY-NEXT: bez32 a1, .LBB106_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI106_0: ; CSKY-NEXT: .long __atomic_compare_exchange_2 ; %1 = atomicrmw umin i16* %a, i16 %b acquire ret i16 %1 } define i16 @atomicrmw_umin_i16_release(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_umin_i16_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.h a0, (a0, 0) ; CSKY-NEXT: zexth16 l2, a1 ; CSKY-NEXT: movi16 l3, 0 ; CSKY-NEXT: .LBB107_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: zexth16 a1, a0 ; CSKY-NEXT: cmphs16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: st32.h a0, (sp, 6) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 6 ; CSKY-NEXT: movi16 a3, 3 ; CSKY-NEXT: jsri32 [.LCPI107_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.h a0, (sp, 6) ; CSKY-NEXT: bez32 a1, .LBB107_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI107_0: ; CSKY-NEXT: .long __atomic_compare_exchange_2 ; %1 = atomicrmw umin i16* %a, i16 %b release ret i16 %1 } define i16 @atomicrmw_umin_i16_acq_rel(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_umin_i16_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.h a0, (a0, 0) ; CSKY-NEXT: zexth16 l2, a1 ; CSKY-NEXT: movi16 l3, 2 ; CSKY-NEXT: .LBB108_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: zexth16 a1, a0 ; CSKY-NEXT: cmphs16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: st32.h a0, (sp, 6) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 6 ; CSKY-NEXT: movi16 a3, 4 ; CSKY-NEXT: jsri32 [.LCPI108_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.h a0, (sp, 6) ; CSKY-NEXT: bez32 a1, .LBB108_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI108_0: ; CSKY-NEXT: .long __atomic_compare_exchange_2 ; %1 = atomicrmw umin i16* %a, i16 %b acq_rel ret i16 %1 } define i16 @atomicrmw_umin_i16_seq_cst(i16 *%a, i16 %b) nounwind { ; CSKY-LABEL: atomicrmw_umin_i16_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.h a0, (a0, 0) ; CSKY-NEXT: zexth16 l2, a1 ; CSKY-NEXT: movi16 l3, 5 ; CSKY-NEXT: .LBB109_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: zexth16 a1, a0 ; CSKY-NEXT: cmphs16 l2, a1 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: st32.h a0, (sp, 6) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi32 a1, sp, 6 ; CSKY-NEXT: movi16 a3, 5 ; CSKY-NEXT: jsri32 [.LCPI109_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld32.h a0, (sp, 6) ; CSKY-NEXT: bez32 a1, .LBB109_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI109_0: ; CSKY-NEXT: .long __atomic_compare_exchange_2 ; %1 = atomicrmw umin i16* %a, i16 %b seq_cst ret i16 %1 } define i32 @atomicrmw_xchg_i32_monotonic(i32* %a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_xchg_i32_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 0 ; CSKY-NEXT: jsri32 [.LCPI110_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI110_0: ; CSKY-NEXT: .long __atomic_exchange_4 ; %1 = atomicrmw xchg i32* %a, i32 %b monotonic ret i32 %1 } define i32 @atomicrmw_xchg_i32_acquire(i32* %a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_xchg_i32_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 2 ; CSKY-NEXT: jsri32 [.LCPI111_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI111_0: ; CSKY-NEXT: .long __atomic_exchange_4 ; %1 = atomicrmw xchg i32* %a, i32 %b acquire ret i32 %1 } define i32 @atomicrmw_xchg_i32_release(i32* %a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_xchg_i32_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 3 ; CSKY-NEXT: jsri32 [.LCPI112_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI112_0: ; CSKY-NEXT: .long __atomic_exchange_4 ; %1 = atomicrmw xchg i32* %a, i32 %b release ret i32 %1 } define i32 @atomicrmw_xchg_i32_acq_rel(i32* %a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_xchg_i32_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 4 ; CSKY-NEXT: jsri32 [.LCPI113_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI113_0: ; CSKY-NEXT: .long __atomic_exchange_4 ; %1 = atomicrmw xchg i32* %a, i32 %b acq_rel ret i32 %1 } define i32 @atomicrmw_xchg_i32_seq_cst(i32* %a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_xchg_i32_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 5 ; CSKY-NEXT: jsri32 [.LCPI114_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI114_0: ; CSKY-NEXT: .long __atomic_exchange_4 ; %1 = atomicrmw xchg i32* %a, i32 %b seq_cst ret i32 %1 } define i32 @atomicrmw_add_i32_monotonic(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_add_i32_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 0 ; CSKY-NEXT: jsri32 [.LCPI115_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI115_0: ; CSKY-NEXT: .long __atomic_fetch_add_4 ; %1 = atomicrmw add i32* %a, i32 %b monotonic ret i32 %1 } define i32 @atomicrmw_add_i32_acquire(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_add_i32_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 2 ; CSKY-NEXT: jsri32 [.LCPI116_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI116_0: ; CSKY-NEXT: .long __atomic_fetch_add_4 ; %1 = atomicrmw add i32* %a, i32 %b acquire ret i32 %1 } define i32 @atomicrmw_add_i32_release(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_add_i32_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 3 ; CSKY-NEXT: jsri32 [.LCPI117_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI117_0: ; CSKY-NEXT: .long __atomic_fetch_add_4 ; %1 = atomicrmw add i32* %a, i32 %b release ret i32 %1 } define i32 @atomicrmw_add_i32_acq_rel(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_add_i32_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 4 ; CSKY-NEXT: jsri32 [.LCPI118_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI118_0: ; CSKY-NEXT: .long __atomic_fetch_add_4 ; %1 = atomicrmw add i32* %a, i32 %b acq_rel ret i32 %1 } define i32 @atomicrmw_add_i32_seq_cst(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_add_i32_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 5 ; CSKY-NEXT: jsri32 [.LCPI119_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI119_0: ; CSKY-NEXT: .long __atomic_fetch_add_4 ; %1 = atomicrmw add i32* %a, i32 %b seq_cst ret i32 %1 } define i32 @atomicrmw_sub_i32_monotonic(i32* %a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_sub_i32_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 0 ; CSKY-NEXT: jsri32 [.LCPI120_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI120_0: ; CSKY-NEXT: .long __atomic_fetch_sub_4 ; %1 = atomicrmw sub i32* %a, i32 %b monotonic ret i32 %1 } define i32 @atomicrmw_sub_i32_acquire(i32* %a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_sub_i32_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 2 ; CSKY-NEXT: jsri32 [.LCPI121_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI121_0: ; CSKY-NEXT: .long __atomic_fetch_sub_4 ; %1 = atomicrmw sub i32* %a, i32 %b acquire ret i32 %1 } define i32 @atomicrmw_sub_i32_release(i32* %a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_sub_i32_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 3 ; CSKY-NEXT: jsri32 [.LCPI122_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI122_0: ; CSKY-NEXT: .long __atomic_fetch_sub_4 ; %1 = atomicrmw sub i32* %a, i32 %b release ret i32 %1 } define i32 @atomicrmw_sub_i32_acq_rel(i32* %a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_sub_i32_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 4 ; CSKY-NEXT: jsri32 [.LCPI123_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI123_0: ; CSKY-NEXT: .long __atomic_fetch_sub_4 ; %1 = atomicrmw sub i32* %a, i32 %b acq_rel ret i32 %1 } define i32 @atomicrmw_sub_i32_seq_cst(i32* %a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_sub_i32_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 5 ; CSKY-NEXT: jsri32 [.LCPI124_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI124_0: ; CSKY-NEXT: .long __atomic_fetch_sub_4 ; %1 = atomicrmw sub i32* %a, i32 %b seq_cst ret i32 %1 } define i32 @atomicrmw_and_i32_monotonic(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_and_i32_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 0 ; CSKY-NEXT: jsri32 [.LCPI125_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI125_0: ; CSKY-NEXT: .long __atomic_fetch_and_4 ; %1 = atomicrmw and i32* %a, i32 %b monotonic ret i32 %1 } define i32 @atomicrmw_and_i32_acquire(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_and_i32_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 2 ; CSKY-NEXT: jsri32 [.LCPI126_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI126_0: ; CSKY-NEXT: .long __atomic_fetch_and_4 ; %1 = atomicrmw and i32* %a, i32 %b acquire ret i32 %1 } define i32 @atomicrmw_and_i32_release(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_and_i32_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 3 ; CSKY-NEXT: jsri32 [.LCPI127_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI127_0: ; CSKY-NEXT: .long __atomic_fetch_and_4 ; %1 = atomicrmw and i32* %a, i32 %b release ret i32 %1 } define i32 @atomicrmw_and_i32_acq_rel(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_and_i32_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 4 ; CSKY-NEXT: jsri32 [.LCPI128_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI128_0: ; CSKY-NEXT: .long __atomic_fetch_and_4 ; %1 = atomicrmw and i32* %a, i32 %b acq_rel ret i32 %1 } define i32 @atomicrmw_and_i32_seq_cst(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_and_i32_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 5 ; CSKY-NEXT: jsri32 [.LCPI129_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI129_0: ; CSKY-NEXT: .long __atomic_fetch_and_4 ; %1 = atomicrmw and i32* %a, i32 %b seq_cst ret i32 %1 } define i32 @atomicrmw_nand_i32_monotonic(i32* %a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_nand_i32_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 0 ; CSKY-NEXT: jsri32 [.LCPI130_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI130_0: ; CSKY-NEXT: .long __atomic_fetch_nand_4 ; %1 = atomicrmw nand i32* %a, i32 %b monotonic ret i32 %1 } define i32 @atomicrmw_nand_i32_acquire(i32* %a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_nand_i32_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 2 ; CSKY-NEXT: jsri32 [.LCPI131_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI131_0: ; CSKY-NEXT: .long __atomic_fetch_nand_4 ; %1 = atomicrmw nand i32* %a, i32 %b acquire ret i32 %1 } define i32 @atomicrmw_nand_i32_release(i32* %a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_nand_i32_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 3 ; CSKY-NEXT: jsri32 [.LCPI132_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI132_0: ; CSKY-NEXT: .long __atomic_fetch_nand_4 ; %1 = atomicrmw nand i32* %a, i32 %b release ret i32 %1 } define i32 @atomicrmw_nand_i32_acq_rel(i32* %a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_nand_i32_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 4 ; CSKY-NEXT: jsri32 [.LCPI133_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI133_0: ; CSKY-NEXT: .long __atomic_fetch_nand_4 ; %1 = atomicrmw nand i32* %a, i32 %b acq_rel ret i32 %1 } define i32 @atomicrmw_nand_i32_seq_cst(i32* %a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_nand_i32_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 5 ; CSKY-NEXT: jsri32 [.LCPI134_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI134_0: ; CSKY-NEXT: .long __atomic_fetch_nand_4 ; %1 = atomicrmw nand i32* %a, i32 %b seq_cst ret i32 %1 } define i32 @atomicrmw_or_i32_monotonic(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_or_i32_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 0 ; CSKY-NEXT: jsri32 [.LCPI135_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI135_0: ; CSKY-NEXT: .long __atomic_fetch_or_4 ; %1 = atomicrmw or i32* %a, i32 %b monotonic ret i32 %1 } define i32 @atomicrmw_or_i32_acquire(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_or_i32_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 2 ; CSKY-NEXT: jsri32 [.LCPI136_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI136_0: ; CSKY-NEXT: .long __atomic_fetch_or_4 ; %1 = atomicrmw or i32* %a, i32 %b acquire ret i32 %1 } define i32 @atomicrmw_or_i32_release(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_or_i32_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 3 ; CSKY-NEXT: jsri32 [.LCPI137_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI137_0: ; CSKY-NEXT: .long __atomic_fetch_or_4 ; %1 = atomicrmw or i32* %a, i32 %b release ret i32 %1 } define i32 @atomicrmw_or_i32_acq_rel(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_or_i32_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 4 ; CSKY-NEXT: jsri32 [.LCPI138_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI138_0: ; CSKY-NEXT: .long __atomic_fetch_or_4 ; %1 = atomicrmw or i32* %a, i32 %b acq_rel ret i32 %1 } define i32 @atomicrmw_or_i32_seq_cst(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_or_i32_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 5 ; CSKY-NEXT: jsri32 [.LCPI139_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI139_0: ; CSKY-NEXT: .long __atomic_fetch_or_4 ; %1 = atomicrmw or i32* %a, i32 %b seq_cst ret i32 %1 } define i32 @atomicrmw_xor_i32_monotonic(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_xor_i32_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 0 ; CSKY-NEXT: jsri32 [.LCPI140_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI140_0: ; CSKY-NEXT: .long __atomic_fetch_xor_4 ; %1 = atomicrmw xor i32* %a, i32 %b monotonic ret i32 %1 } define i32 @atomicrmw_xor_i32_acquire(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_xor_i32_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 2 ; CSKY-NEXT: jsri32 [.LCPI141_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI141_0: ; CSKY-NEXT: .long __atomic_fetch_xor_4 ; %1 = atomicrmw xor i32* %a, i32 %b acquire ret i32 %1 } define i32 @atomicrmw_xor_i32_release(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_xor_i32_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 3 ; CSKY-NEXT: jsri32 [.LCPI142_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI142_0: ; CSKY-NEXT: .long __atomic_fetch_xor_4 ; %1 = atomicrmw xor i32* %a, i32 %b release ret i32 %1 } define i32 @atomicrmw_xor_i32_acq_rel(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_xor_i32_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 4 ; CSKY-NEXT: jsri32 [.LCPI143_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI143_0: ; CSKY-NEXT: .long __atomic_fetch_xor_4 ; %1 = atomicrmw xor i32* %a, i32 %b acq_rel ret i32 %1 } define i32 @atomicrmw_xor_i32_seq_cst(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_xor_i32_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a2, 5 ; CSKY-NEXT: jsri32 [.LCPI144_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI144_0: ; CSKY-NEXT: .long __atomic_fetch_xor_4 ; %1 = atomicrmw xor i32* %a, i32 %b seq_cst ret i32 %1 } define i32 @atomicrmw_max_i32_monotonic(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_max_i32_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 16 ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l2, 0 ; CSKY-NEXT: .LBB145_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmplt16 l0, a0 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: st16.w a0, (sp, 4) ; CSKY-NEXT: st16.w l2, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi16 a1, sp, 4 ; CSKY-NEXT: movi16 a3, 0 ; CSKY-NEXT: jsri32 [.LCPI145_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld16.w a0, (sp, 4) ; CSKY-NEXT: bez32 a1, .LBB145_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: addi16 sp, sp, 16 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI145_0: ; CSKY-NEXT: .long __atomic_compare_exchange_4 ; %1 = atomicrmw max i32* %a, i32 %b monotonic ret i32 %1 } define i32 @atomicrmw_max_i32_acquire(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_max_i32_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 16 ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l2, 2 ; CSKY-NEXT: .LBB146_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmplt16 l0, a0 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: st16.w a0, (sp, 4) ; CSKY-NEXT: st16.w l2, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi16 a1, sp, 4 ; CSKY-NEXT: movi16 a3, 2 ; CSKY-NEXT: jsri32 [.LCPI146_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld16.w a0, (sp, 4) ; CSKY-NEXT: bez32 a1, .LBB146_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: addi16 sp, sp, 16 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI146_0: ; CSKY-NEXT: .long __atomic_compare_exchange_4 ; %1 = atomicrmw max i32* %a, i32 %b acquire ret i32 %1 } define i32 @atomicrmw_max_i32_release(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_max_i32_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 16 ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l2, 0 ; CSKY-NEXT: .LBB147_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmplt16 l0, a0 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: st16.w a0, (sp, 4) ; CSKY-NEXT: st16.w l2, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi16 a1, sp, 4 ; CSKY-NEXT: movi16 a3, 3 ; CSKY-NEXT: jsri32 [.LCPI147_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld16.w a0, (sp, 4) ; CSKY-NEXT: bez32 a1, .LBB147_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: addi16 sp, sp, 16 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI147_0: ; CSKY-NEXT: .long __atomic_compare_exchange_4 ; %1 = atomicrmw max i32* %a, i32 %b release ret i32 %1 } define i32 @atomicrmw_max_i32_acq_rel(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_max_i32_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 16 ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l2, 2 ; CSKY-NEXT: .LBB148_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmplt16 l0, a0 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: st16.w a0, (sp, 4) ; CSKY-NEXT: st16.w l2, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi16 a1, sp, 4 ; CSKY-NEXT: movi16 a3, 4 ; CSKY-NEXT: jsri32 [.LCPI148_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld16.w a0, (sp, 4) ; CSKY-NEXT: bez32 a1, .LBB148_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: addi16 sp, sp, 16 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI148_0: ; CSKY-NEXT: .long __atomic_compare_exchange_4 ; %1 = atomicrmw max i32* %a, i32 %b acq_rel ret i32 %1 } define i32 @atomicrmw_max_i32_seq_cst(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_max_i32_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 16 ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l2, 5 ; CSKY-NEXT: .LBB149_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmplt16 l0, a0 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: st16.w a0, (sp, 4) ; CSKY-NEXT: st16.w l2, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi16 a1, sp, 4 ; CSKY-NEXT: movi16 a3, 5 ; CSKY-NEXT: jsri32 [.LCPI149_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld16.w a0, (sp, 4) ; CSKY-NEXT: bez32 a1, .LBB149_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: addi16 sp, sp, 16 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI149_0: ; CSKY-NEXT: .long __atomic_compare_exchange_4 ; %1 = atomicrmw max i32* %a, i32 %b seq_cst ret i32 %1 } define i32 @atomicrmw_min_i32_monotonic(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_min_i32_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 16 ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l2, 0 ; CSKY-NEXT: .LBB150_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmplt16 l0, a0 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movf32 a2, a0 ; CSKY-NEXT: st16.w a0, (sp, 4) ; CSKY-NEXT: st16.w l2, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi16 a1, sp, 4 ; CSKY-NEXT: movi16 a3, 0 ; CSKY-NEXT: jsri32 [.LCPI150_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld16.w a0, (sp, 4) ; CSKY-NEXT: bez32 a1, .LBB150_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: addi16 sp, sp, 16 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI150_0: ; CSKY-NEXT: .long __atomic_compare_exchange_4 ; %1 = atomicrmw min i32* %a, i32 %b monotonic ret i32 %1 } define i32 @atomicrmw_min_i32_acquire(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_min_i32_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 16 ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l2, 2 ; CSKY-NEXT: .LBB151_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmplt16 l0, a0 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movf32 a2, a0 ; CSKY-NEXT: st16.w a0, (sp, 4) ; CSKY-NEXT: st16.w l2, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi16 a1, sp, 4 ; CSKY-NEXT: movi16 a3, 2 ; CSKY-NEXT: jsri32 [.LCPI151_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld16.w a0, (sp, 4) ; CSKY-NEXT: bez32 a1, .LBB151_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: addi16 sp, sp, 16 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI151_0: ; CSKY-NEXT: .long __atomic_compare_exchange_4 ; %1 = atomicrmw min i32* %a, i32 %b acquire ret i32 %1 } define i32 @atomicrmw_min_i32_release(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_min_i32_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 16 ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l2, 0 ; CSKY-NEXT: .LBB152_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmplt16 l0, a0 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movf32 a2, a0 ; CSKY-NEXT: st16.w a0, (sp, 4) ; CSKY-NEXT: st16.w l2, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi16 a1, sp, 4 ; CSKY-NEXT: movi16 a3, 3 ; CSKY-NEXT: jsri32 [.LCPI152_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld16.w a0, (sp, 4) ; CSKY-NEXT: bez32 a1, .LBB152_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: addi16 sp, sp, 16 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI152_0: ; CSKY-NEXT: .long __atomic_compare_exchange_4 ; %1 = atomicrmw min i32* %a, i32 %b release ret i32 %1 } define i32 @atomicrmw_min_i32_acq_rel(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_min_i32_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 16 ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l2, 2 ; CSKY-NEXT: .LBB153_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmplt16 l0, a0 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movf32 a2, a0 ; CSKY-NEXT: st16.w a0, (sp, 4) ; CSKY-NEXT: st16.w l2, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi16 a1, sp, 4 ; CSKY-NEXT: movi16 a3, 4 ; CSKY-NEXT: jsri32 [.LCPI153_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld16.w a0, (sp, 4) ; CSKY-NEXT: bez32 a1, .LBB153_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: addi16 sp, sp, 16 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI153_0: ; CSKY-NEXT: .long __atomic_compare_exchange_4 ; %1 = atomicrmw min i32* %a, i32 %b acq_rel ret i32 %1 } define i32 @atomicrmw_min_i32_seq_cst(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_min_i32_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 16 ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l2, 5 ; CSKY-NEXT: .LBB154_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmplt16 l0, a0 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movf32 a2, a0 ; CSKY-NEXT: st16.w a0, (sp, 4) ; CSKY-NEXT: st16.w l2, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi16 a1, sp, 4 ; CSKY-NEXT: movi16 a3, 5 ; CSKY-NEXT: jsri32 [.LCPI154_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld16.w a0, (sp, 4) ; CSKY-NEXT: bez32 a1, .LBB154_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: addi16 sp, sp, 16 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI154_0: ; CSKY-NEXT: .long __atomic_compare_exchange_4 ; %1 = atomicrmw min i32* %a, i32 %b seq_cst ret i32 %1 } define i32 @atomicrmw_umax_i32_monotonic(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_umax_i32_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 16 ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l2, 0 ; CSKY-NEXT: .LBB155_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmphs16 l0, a0 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movf32 a2, a0 ; CSKY-NEXT: st16.w a0, (sp, 4) ; CSKY-NEXT: st16.w l2, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi16 a1, sp, 4 ; CSKY-NEXT: movi16 a3, 0 ; CSKY-NEXT: jsri32 [.LCPI155_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld16.w a0, (sp, 4) ; CSKY-NEXT: bez32 a1, .LBB155_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: addi16 sp, sp, 16 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI155_0: ; CSKY-NEXT: .long __atomic_compare_exchange_4 ; %1 = atomicrmw umax i32* %a, i32 %b monotonic ret i32 %1 } define i32 @atomicrmw_umax_i32_acquire(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_umax_i32_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 16 ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l2, 2 ; CSKY-NEXT: .LBB156_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmphs16 l0, a0 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movf32 a2, a0 ; CSKY-NEXT: st16.w a0, (sp, 4) ; CSKY-NEXT: st16.w l2, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi16 a1, sp, 4 ; CSKY-NEXT: movi16 a3, 2 ; CSKY-NEXT: jsri32 [.LCPI156_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld16.w a0, (sp, 4) ; CSKY-NEXT: bez32 a1, .LBB156_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: addi16 sp, sp, 16 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI156_0: ; CSKY-NEXT: .long __atomic_compare_exchange_4 ; %1 = atomicrmw umax i32* %a, i32 %b acquire ret i32 %1 } define i32 @atomicrmw_umax_i32_release(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_umax_i32_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 16 ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l2, 0 ; CSKY-NEXT: .LBB157_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmphs16 l0, a0 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movf32 a2, a0 ; CSKY-NEXT: st16.w a0, (sp, 4) ; CSKY-NEXT: st16.w l2, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi16 a1, sp, 4 ; CSKY-NEXT: movi16 a3, 3 ; CSKY-NEXT: jsri32 [.LCPI157_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld16.w a0, (sp, 4) ; CSKY-NEXT: bez32 a1, .LBB157_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: addi16 sp, sp, 16 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI157_0: ; CSKY-NEXT: .long __atomic_compare_exchange_4 ; %1 = atomicrmw umax i32* %a, i32 %b release ret i32 %1 } define i32 @atomicrmw_umax_i32_acq_rel(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_umax_i32_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 16 ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l2, 2 ; CSKY-NEXT: .LBB158_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmphs16 l0, a0 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movf32 a2, a0 ; CSKY-NEXT: st16.w a0, (sp, 4) ; CSKY-NEXT: st16.w l2, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi16 a1, sp, 4 ; CSKY-NEXT: movi16 a3, 4 ; CSKY-NEXT: jsri32 [.LCPI158_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld16.w a0, (sp, 4) ; CSKY-NEXT: bez32 a1, .LBB158_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: addi16 sp, sp, 16 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI158_0: ; CSKY-NEXT: .long __atomic_compare_exchange_4 ; %1 = atomicrmw umax i32* %a, i32 %b acq_rel ret i32 %1 } define i32 @atomicrmw_umax_i32_seq_cst(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_umax_i32_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 16 ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l2, 5 ; CSKY-NEXT: .LBB159_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmphs16 l0, a0 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movf32 a2, a0 ; CSKY-NEXT: st16.w a0, (sp, 4) ; CSKY-NEXT: st16.w l2, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi16 a1, sp, 4 ; CSKY-NEXT: movi16 a3, 5 ; CSKY-NEXT: jsri32 [.LCPI159_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld16.w a0, (sp, 4) ; CSKY-NEXT: bez32 a1, .LBB159_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: addi16 sp, sp, 16 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI159_0: ; CSKY-NEXT: .long __atomic_compare_exchange_4 ; %1 = atomicrmw umax i32* %a, i32 %b seq_cst ret i32 %1 } define i32 @atomicrmw_umin_i32_monotonic(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_umin_i32_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 16 ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l2, 0 ; CSKY-NEXT: .LBB160_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmphs16 l0, a0 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: st16.w a0, (sp, 4) ; CSKY-NEXT: st16.w l2, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi16 a1, sp, 4 ; CSKY-NEXT: movi16 a3, 0 ; CSKY-NEXT: jsri32 [.LCPI160_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld16.w a0, (sp, 4) ; CSKY-NEXT: bez32 a1, .LBB160_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: addi16 sp, sp, 16 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI160_0: ; CSKY-NEXT: .long __atomic_compare_exchange_4 ; %1 = atomicrmw umin i32* %a, i32 %b monotonic ret i32 %1 } define i32 @atomicrmw_umin_i32_acquire(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_umin_i32_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 16 ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l2, 2 ; CSKY-NEXT: .LBB161_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmphs16 l0, a0 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: st16.w a0, (sp, 4) ; CSKY-NEXT: st16.w l2, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi16 a1, sp, 4 ; CSKY-NEXT: movi16 a3, 2 ; CSKY-NEXT: jsri32 [.LCPI161_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld16.w a0, (sp, 4) ; CSKY-NEXT: bez32 a1, .LBB161_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: addi16 sp, sp, 16 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI161_0: ; CSKY-NEXT: .long __atomic_compare_exchange_4 ; %1 = atomicrmw umin i32* %a, i32 %b acquire ret i32 %1 } define i32 @atomicrmw_umin_i32_release(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_umin_i32_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 16 ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l2, 0 ; CSKY-NEXT: .LBB162_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmphs16 l0, a0 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: st16.w a0, (sp, 4) ; CSKY-NEXT: st16.w l2, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi16 a1, sp, 4 ; CSKY-NEXT: movi16 a3, 3 ; CSKY-NEXT: jsri32 [.LCPI162_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld16.w a0, (sp, 4) ; CSKY-NEXT: bez32 a1, .LBB162_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: addi16 sp, sp, 16 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI162_0: ; CSKY-NEXT: .long __atomic_compare_exchange_4 ; %1 = atomicrmw umin i32* %a, i32 %b release ret i32 %1 } define i32 @atomicrmw_umin_i32_acq_rel(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_umin_i32_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 16 ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l2, 2 ; CSKY-NEXT: .LBB163_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmphs16 l0, a0 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: st16.w a0, (sp, 4) ; CSKY-NEXT: st16.w l2, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi16 a1, sp, 4 ; CSKY-NEXT: movi16 a3, 4 ; CSKY-NEXT: jsri32 [.LCPI163_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld16.w a0, (sp, 4) ; CSKY-NEXT: bez32 a1, .LBB163_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: addi16 sp, sp, 16 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI163_0: ; CSKY-NEXT: .long __atomic_compare_exchange_4 ; %1 = atomicrmw umin i32* %a, i32 %b acq_rel ret i32 %1 } define i32 @atomicrmw_umin_i32_seq_cst(i32 *%a, i32 %b) nounwind { ; CSKY-LABEL: atomicrmw_umin_i32_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 16 ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 8 ; CSKY-NEXT: mov16 l0, a1 ; CSKY-NEXT: mov16 l1, a0 ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l2, 5 ; CSKY-NEXT: .LBB164_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmphs16 l0, a0 ; CSKY-NEXT: mov16 a2, l0 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: st16.w a0, (sp, 4) ; CSKY-NEXT: st16.w l2, (sp, 0) ; CSKY-NEXT: mov16 a0, l1 ; CSKY-NEXT: addi16 a1, sp, 4 ; CSKY-NEXT: movi16 a3, 5 ; CSKY-NEXT: jsri32 [.LCPI164_0] ; CSKY-NEXT: mov16 a1, a0 ; CSKY-NEXT: ld16.w a0, (sp, 4) ; CSKY-NEXT: bez32 a1, .LBB164_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 8 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: addi16 sp, sp, 16 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI164_0: ; CSKY-NEXT: .long __atomic_compare_exchange_4 ; %1 = atomicrmw umin i32* %a, i32 %b seq_cst ret i32 %1 } define i64 @atomicrmw_xchg_i64_monotonic(i64* %a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_xchg_i64_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a3, 0 ; CSKY-NEXT: jsri32 [.LCPI165_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI165_0: ; CSKY-NEXT: .long __atomic_exchange_8 ; %1 = atomicrmw xchg i64* %a, i64 %b monotonic ret i64 %1 } define i64 @atomicrmw_xchg_i64_acquire(i64* %a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_xchg_i64_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a3, 2 ; CSKY-NEXT: jsri32 [.LCPI166_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI166_0: ; CSKY-NEXT: .long __atomic_exchange_8 ; %1 = atomicrmw xchg i64* %a, i64 %b acquire ret i64 %1 } define i64 @atomicrmw_xchg_i64_release(i64* %a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_xchg_i64_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a3, 3 ; CSKY-NEXT: jsri32 [.LCPI167_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI167_0: ; CSKY-NEXT: .long __atomic_exchange_8 ; %1 = atomicrmw xchg i64* %a, i64 %b release ret i64 %1 } define i64 @atomicrmw_xchg_i64_acq_rel(i64* %a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_xchg_i64_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a3, 4 ; CSKY-NEXT: jsri32 [.LCPI168_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI168_0: ; CSKY-NEXT: .long __atomic_exchange_8 ; %1 = atomicrmw xchg i64* %a, i64 %b acq_rel ret i64 %1 } define i64 @atomicrmw_xchg_i64_seq_cst(i64* %a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_xchg_i64_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a3, 5 ; CSKY-NEXT: jsri32 [.LCPI169_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI169_0: ; CSKY-NEXT: .long __atomic_exchange_8 ; %1 = atomicrmw xchg i64* %a, i64 %b seq_cst ret i64 %1 } define i64 @atomicrmw_add_i64_monotonic(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_add_i64_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a3, 0 ; CSKY-NEXT: jsri32 [.LCPI170_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI170_0: ; CSKY-NEXT: .long __atomic_fetch_add_8 ; %1 = atomicrmw add i64* %a, i64 %b monotonic ret i64 %1 } define i64 @atomicrmw_add_i64_acquire(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_add_i64_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a3, 2 ; CSKY-NEXT: jsri32 [.LCPI171_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI171_0: ; CSKY-NEXT: .long __atomic_fetch_add_8 ; %1 = atomicrmw add i64* %a, i64 %b acquire ret i64 %1 } define i64 @atomicrmw_add_i64_release(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_add_i64_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a3, 3 ; CSKY-NEXT: jsri32 [.LCPI172_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI172_0: ; CSKY-NEXT: .long __atomic_fetch_add_8 ; %1 = atomicrmw add i64* %a, i64 %b release ret i64 %1 } define i64 @atomicrmw_add_i64_acq_rel(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_add_i64_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a3, 4 ; CSKY-NEXT: jsri32 [.LCPI173_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI173_0: ; CSKY-NEXT: .long __atomic_fetch_add_8 ; %1 = atomicrmw add i64* %a, i64 %b acq_rel ret i64 %1 } define i64 @atomicrmw_add_i64_seq_cst(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_add_i64_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a3, 5 ; CSKY-NEXT: jsri32 [.LCPI174_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI174_0: ; CSKY-NEXT: .long __atomic_fetch_add_8 ; %1 = atomicrmw add i64* %a, i64 %b seq_cst ret i64 %1 } define i64 @atomicrmw_sub_i64_monotonic(i64* %a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_sub_i64_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a3, 0 ; CSKY-NEXT: jsri32 [.LCPI175_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI175_0: ; CSKY-NEXT: .long __atomic_fetch_sub_8 ; %1 = atomicrmw sub i64* %a, i64 %b monotonic ret i64 %1 } define i64 @atomicrmw_sub_i64_acquire(i64* %a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_sub_i64_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a3, 2 ; CSKY-NEXT: jsri32 [.LCPI176_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI176_0: ; CSKY-NEXT: .long __atomic_fetch_sub_8 ; %1 = atomicrmw sub i64* %a, i64 %b acquire ret i64 %1 } define i64 @atomicrmw_sub_i64_release(i64* %a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_sub_i64_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a3, 3 ; CSKY-NEXT: jsri32 [.LCPI177_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI177_0: ; CSKY-NEXT: .long __atomic_fetch_sub_8 ; %1 = atomicrmw sub i64* %a, i64 %b release ret i64 %1 } define i64 @atomicrmw_sub_i64_acq_rel(i64* %a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_sub_i64_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a3, 4 ; CSKY-NEXT: jsri32 [.LCPI178_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI178_0: ; CSKY-NEXT: .long __atomic_fetch_sub_8 ; %1 = atomicrmw sub i64* %a, i64 %b acq_rel ret i64 %1 } define i64 @atomicrmw_sub_i64_seq_cst(i64* %a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_sub_i64_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a3, 5 ; CSKY-NEXT: jsri32 [.LCPI179_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI179_0: ; CSKY-NEXT: .long __atomic_fetch_sub_8 ; %1 = atomicrmw sub i64* %a, i64 %b seq_cst ret i64 %1 } define i64 @atomicrmw_and_i64_monotonic(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_and_i64_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a3, 0 ; CSKY-NEXT: jsri32 [.LCPI180_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI180_0: ; CSKY-NEXT: .long __atomic_fetch_and_8 ; %1 = atomicrmw and i64* %a, i64 %b monotonic ret i64 %1 } define i64 @atomicrmw_and_i64_acquire(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_and_i64_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a3, 2 ; CSKY-NEXT: jsri32 [.LCPI181_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI181_0: ; CSKY-NEXT: .long __atomic_fetch_and_8 ; %1 = atomicrmw and i64* %a, i64 %b acquire ret i64 %1 } define i64 @atomicrmw_and_i64_release(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_and_i64_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a3, 3 ; CSKY-NEXT: jsri32 [.LCPI182_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI182_0: ; CSKY-NEXT: .long __atomic_fetch_and_8 ; %1 = atomicrmw and i64* %a, i64 %b release ret i64 %1 } define i64 @atomicrmw_and_i64_acq_rel(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_and_i64_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a3, 4 ; CSKY-NEXT: jsri32 [.LCPI183_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI183_0: ; CSKY-NEXT: .long __atomic_fetch_and_8 ; %1 = atomicrmw and i64* %a, i64 %b acq_rel ret i64 %1 } define i64 @atomicrmw_and_i64_seq_cst(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_and_i64_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a3, 5 ; CSKY-NEXT: jsri32 [.LCPI184_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI184_0: ; CSKY-NEXT: .long __atomic_fetch_and_8 ; %1 = atomicrmw and i64* %a, i64 %b seq_cst ret i64 %1 } define i64 @atomicrmw_nand_i64_monotonic(i64* %a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_nand_i64_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a3, 0 ; CSKY-NEXT: jsri32 [.LCPI185_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI185_0: ; CSKY-NEXT: .long __atomic_fetch_nand_8 ; %1 = atomicrmw nand i64* %a, i64 %b monotonic ret i64 %1 } define i64 @atomicrmw_nand_i64_acquire(i64* %a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_nand_i64_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a3, 2 ; CSKY-NEXT: jsri32 [.LCPI186_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI186_0: ; CSKY-NEXT: .long __atomic_fetch_nand_8 ; %1 = atomicrmw nand i64* %a, i64 %b acquire ret i64 %1 } define i64 @atomicrmw_nand_i64_release(i64* %a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_nand_i64_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a3, 3 ; CSKY-NEXT: jsri32 [.LCPI187_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI187_0: ; CSKY-NEXT: .long __atomic_fetch_nand_8 ; %1 = atomicrmw nand i64* %a, i64 %b release ret i64 %1 } define i64 @atomicrmw_nand_i64_acq_rel(i64* %a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_nand_i64_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a3, 4 ; CSKY-NEXT: jsri32 [.LCPI188_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI188_0: ; CSKY-NEXT: .long __atomic_fetch_nand_8 ; %1 = atomicrmw nand i64* %a, i64 %b acq_rel ret i64 %1 } define i64 @atomicrmw_nand_i64_seq_cst(i64* %a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_nand_i64_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a3, 5 ; CSKY-NEXT: jsri32 [.LCPI189_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI189_0: ; CSKY-NEXT: .long __atomic_fetch_nand_8 ; %1 = atomicrmw nand i64* %a, i64 %b seq_cst ret i64 %1 } define i64 @atomicrmw_or_i64_monotonic(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_or_i64_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a3, 0 ; CSKY-NEXT: jsri32 [.LCPI190_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI190_0: ; CSKY-NEXT: .long __atomic_fetch_or_8 ; %1 = atomicrmw or i64* %a, i64 %b monotonic ret i64 %1 } define i64 @atomicrmw_or_i64_acquire(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_or_i64_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a3, 2 ; CSKY-NEXT: jsri32 [.LCPI191_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI191_0: ; CSKY-NEXT: .long __atomic_fetch_or_8 ; %1 = atomicrmw or i64* %a, i64 %b acquire ret i64 %1 } define i64 @atomicrmw_or_i64_release(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_or_i64_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a3, 3 ; CSKY-NEXT: jsri32 [.LCPI192_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI192_0: ; CSKY-NEXT: .long __atomic_fetch_or_8 ; %1 = atomicrmw or i64* %a, i64 %b release ret i64 %1 } define i64 @atomicrmw_or_i64_acq_rel(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_or_i64_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a3, 4 ; CSKY-NEXT: jsri32 [.LCPI193_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI193_0: ; CSKY-NEXT: .long __atomic_fetch_or_8 ; %1 = atomicrmw or i64* %a, i64 %b acq_rel ret i64 %1 } define i64 @atomicrmw_or_i64_seq_cst(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_or_i64_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a3, 5 ; CSKY-NEXT: jsri32 [.LCPI194_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI194_0: ; CSKY-NEXT: .long __atomic_fetch_or_8 ; %1 = atomicrmw or i64* %a, i64 %b seq_cst ret i64 %1 } define i64 @atomicrmw_xor_i64_monotonic(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_xor_i64_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a3, 0 ; CSKY-NEXT: jsri32 [.LCPI195_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI195_0: ; CSKY-NEXT: .long __atomic_fetch_xor_8 ; %1 = atomicrmw xor i64* %a, i64 %b monotonic ret i64 %1 } define i64 @atomicrmw_xor_i64_acquire(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_xor_i64_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a3, 2 ; CSKY-NEXT: jsri32 [.LCPI196_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI196_0: ; CSKY-NEXT: .long __atomic_fetch_xor_8 ; %1 = atomicrmw xor i64* %a, i64 %b acquire ret i64 %1 } define i64 @atomicrmw_xor_i64_release(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_xor_i64_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a3, 3 ; CSKY-NEXT: jsri32 [.LCPI197_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI197_0: ; CSKY-NEXT: .long __atomic_fetch_xor_8 ; %1 = atomicrmw xor i64* %a, i64 %b release ret i64 %1 } define i64 @atomicrmw_xor_i64_acq_rel(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_xor_i64_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a3, 4 ; CSKY-NEXT: jsri32 [.LCPI198_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI198_0: ; CSKY-NEXT: .long __atomic_fetch_xor_8 ; %1 = atomicrmw xor i64* %a, i64 %b acq_rel ret i64 %1 } define i64 @atomicrmw_xor_i64_seq_cst(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_xor_i64_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 4 ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: movi16 a3, 5 ; CSKY-NEXT: jsri32 [.LCPI199_0] ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: addi16 sp, sp, 4 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.1: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI199_0: ; CSKY-NEXT: .long __atomic_fetch_xor_8 ; %1 = atomicrmw xor i64* %a, i64 %b seq_cst ret i64 %1 } define i64 @atomicrmw_max_i64_monotonic(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_max_i64_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 28 ; CSKY-NEXT: mov16 l0, a2 ; CSKY-NEXT: mov16 l1, a1 ; CSKY-NEXT: mov16 l2, a0 ; CSKY-NEXT: ld16.w a1, (a0, 4) ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l3, 0 ; CSKY-NEXT: .LBB200_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmplt16 l0, a1 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 12) ; CSKY-NEXT: cmpne16 a1, l0 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 16) ; CSKY-NEXT: cmphs16 l1, a0 ; CSKY-NEXT: mvcv16 a2 ; CSKY-NEXT: ld16.w a3, (sp, 12) ; CSKY-NEXT: btsti32 a3, 0 ; CSKY-NEXT: mvc32 a3 ; CSKY-NEXT: ld32.w t0, (sp, 16) ; CSKY-NEXT: btsti32 t0, 0 ; CSKY-NEXT: movf32 a3, a2 ; CSKY-NEXT: btsti32 a3, 0 ; CSKY-NEXT: mov16 a2, l1 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: mov16 a3, l0 ; CSKY-NEXT: movt32 a3, a1 ; CSKY-NEXT: st16.w a0, (sp, 20) ; CSKY-NEXT: st16.w a1, (sp, 24) ; CSKY-NEXT: st16.w l3, (sp, 4) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l2 ; CSKY-NEXT: addi16 a1, sp, 20 ; CSKY-NEXT: jsri32 [.LCPI200_0] ; CSKY-NEXT: mov16 a2, a0 ; CSKY-NEXT: ld16.w a1, (sp, 24) ; CSKY-NEXT: ld16.w a0, (sp, 20) ; CSKY-NEXT: bez32 a2, .LBB200_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 28 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI200_0: ; CSKY-NEXT: .long __atomic_compare_exchange_8 ; %1 = atomicrmw max i64* %a, i64 %b monotonic ret i64 %1 } define i64 @atomicrmw_max_i64_acquire(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_max_i64_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 28 ; CSKY-NEXT: mov16 l0, a2 ; CSKY-NEXT: mov16 l1, a1 ; CSKY-NEXT: mov16 l2, a0 ; CSKY-NEXT: ld16.w a1, (a0, 4) ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l3, 2 ; CSKY-NEXT: .LBB201_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmplt16 l0, a1 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 12) ; CSKY-NEXT: cmpne16 a1, l0 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 16) ; CSKY-NEXT: cmphs16 l1, a0 ; CSKY-NEXT: mvcv16 a2 ; CSKY-NEXT: ld16.w a3, (sp, 12) ; CSKY-NEXT: btsti32 a3, 0 ; CSKY-NEXT: mvc32 a3 ; CSKY-NEXT: ld32.w t0, (sp, 16) ; CSKY-NEXT: btsti32 t0, 0 ; CSKY-NEXT: movf32 a3, a2 ; CSKY-NEXT: btsti32 a3, 0 ; CSKY-NEXT: mov16 a2, l1 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: mov16 a3, l0 ; CSKY-NEXT: movt32 a3, a1 ; CSKY-NEXT: st16.w a0, (sp, 20) ; CSKY-NEXT: st16.w a1, (sp, 24) ; CSKY-NEXT: st16.w l3, (sp, 4) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l2 ; CSKY-NEXT: addi16 a1, sp, 20 ; CSKY-NEXT: jsri32 [.LCPI201_0] ; CSKY-NEXT: mov16 a2, a0 ; CSKY-NEXT: ld16.w a1, (sp, 24) ; CSKY-NEXT: ld16.w a0, (sp, 20) ; CSKY-NEXT: bez32 a2, .LBB201_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 28 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI201_0: ; CSKY-NEXT: .long __atomic_compare_exchange_8 ; %1 = atomicrmw max i64* %a, i64 %b acquire ret i64 %1 } define i64 @atomicrmw_max_i64_release(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_max_i64_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 24 ; CSKY-NEXT: st16.w l3, (sp, 20) ; CSKY-NEXT: st16.w l2, (sp, 16) ; CSKY-NEXT: st16.w l1, (sp, 12) ; CSKY-NEXT: st16.w l0, (sp, 8) ; CSKY-NEXT: st32.w lr, (sp, 4) # 4-byte Folded Spill ; CSKY-NEXT: st32.w l4, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 28 ; CSKY-NEXT: mov16 l0, a2 ; CSKY-NEXT: mov16 l1, a1 ; CSKY-NEXT: mov16 l2, a0 ; CSKY-NEXT: ld16.w a1, (a0, 4) ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l3, 0 ; CSKY-NEXT: movi32 l4, 3 ; CSKY-NEXT: .LBB202_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmplt16 l0, a1 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 12) ; CSKY-NEXT: cmpne16 a1, l0 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 16) ; CSKY-NEXT: cmphs16 l1, a0 ; CSKY-NEXT: mvcv16 a2 ; CSKY-NEXT: ld16.w a3, (sp, 12) ; CSKY-NEXT: btsti32 a3, 0 ; CSKY-NEXT: mvc32 a3 ; CSKY-NEXT: ld32.w t0, (sp, 16) ; CSKY-NEXT: btsti32 t0, 0 ; CSKY-NEXT: movf32 a3, a2 ; CSKY-NEXT: btsti32 a3, 0 ; CSKY-NEXT: mov16 a2, l1 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: mov16 a3, l0 ; CSKY-NEXT: movt32 a3, a1 ; CSKY-NEXT: st16.w a0, (sp, 20) ; CSKY-NEXT: st16.w a1, (sp, 24) ; CSKY-NEXT: st16.w l3, (sp, 4) ; CSKY-NEXT: st32.w l4, (sp, 0) ; CSKY-NEXT: mov16 a0, l2 ; CSKY-NEXT: addi16 a1, sp, 20 ; CSKY-NEXT: jsri32 [.LCPI202_0] ; CSKY-NEXT: mov16 a2, a0 ; CSKY-NEXT: ld16.w a1, (sp, 24) ; CSKY-NEXT: ld16.w a0, (sp, 20) ; CSKY-NEXT: bez32 a2, .LBB202_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 28 ; CSKY-NEXT: ld32.w l4, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld32.w lr, (sp, 4) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 8) ; CSKY-NEXT: ld16.w l1, (sp, 12) ; CSKY-NEXT: ld16.w l2, (sp, 16) ; CSKY-NEXT: ld16.w l3, (sp, 20) ; CSKY-NEXT: addi16 sp, sp, 24 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI202_0: ; CSKY-NEXT: .long __atomic_compare_exchange_8 ; %1 = atomicrmw max i64* %a, i64 %b release ret i64 %1 } define i64 @atomicrmw_max_i64_acq_rel(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_max_i64_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 24 ; CSKY-NEXT: st16.w l3, (sp, 20) ; CSKY-NEXT: st16.w l2, (sp, 16) ; CSKY-NEXT: st16.w l1, (sp, 12) ; CSKY-NEXT: st16.w l0, (sp, 8) ; CSKY-NEXT: st32.w lr, (sp, 4) # 4-byte Folded Spill ; CSKY-NEXT: st32.w l4, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 28 ; CSKY-NEXT: mov16 l0, a2 ; CSKY-NEXT: mov16 l1, a1 ; CSKY-NEXT: mov16 l2, a0 ; CSKY-NEXT: ld16.w a1, (a0, 4) ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l3, 2 ; CSKY-NEXT: movi32 l4, 4 ; CSKY-NEXT: .LBB203_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmplt16 l0, a1 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 12) ; CSKY-NEXT: cmpne16 a1, l0 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 16) ; CSKY-NEXT: cmphs16 l1, a0 ; CSKY-NEXT: mvcv16 a2 ; CSKY-NEXT: ld16.w a3, (sp, 12) ; CSKY-NEXT: btsti32 a3, 0 ; CSKY-NEXT: mvc32 a3 ; CSKY-NEXT: ld32.w t0, (sp, 16) ; CSKY-NEXT: btsti32 t0, 0 ; CSKY-NEXT: movf32 a3, a2 ; CSKY-NEXT: btsti32 a3, 0 ; CSKY-NEXT: mov16 a2, l1 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: mov16 a3, l0 ; CSKY-NEXT: movt32 a3, a1 ; CSKY-NEXT: st16.w a0, (sp, 20) ; CSKY-NEXT: st16.w a1, (sp, 24) ; CSKY-NEXT: st16.w l3, (sp, 4) ; CSKY-NEXT: st32.w l4, (sp, 0) ; CSKY-NEXT: mov16 a0, l2 ; CSKY-NEXT: addi16 a1, sp, 20 ; CSKY-NEXT: jsri32 [.LCPI203_0] ; CSKY-NEXT: mov16 a2, a0 ; CSKY-NEXT: ld16.w a1, (sp, 24) ; CSKY-NEXT: ld16.w a0, (sp, 20) ; CSKY-NEXT: bez32 a2, .LBB203_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 28 ; CSKY-NEXT: ld32.w l4, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld32.w lr, (sp, 4) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 8) ; CSKY-NEXT: ld16.w l1, (sp, 12) ; CSKY-NEXT: ld16.w l2, (sp, 16) ; CSKY-NEXT: ld16.w l3, (sp, 20) ; CSKY-NEXT: addi16 sp, sp, 24 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI203_0: ; CSKY-NEXT: .long __atomic_compare_exchange_8 ; %1 = atomicrmw max i64* %a, i64 %b acq_rel ret i64 %1 } define i64 @atomicrmw_max_i64_seq_cst(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_max_i64_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 28 ; CSKY-NEXT: mov16 l0, a2 ; CSKY-NEXT: mov16 l1, a1 ; CSKY-NEXT: mov16 l2, a0 ; CSKY-NEXT: ld16.w a1, (a0, 4) ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l3, 5 ; CSKY-NEXT: .LBB204_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmplt16 l0, a1 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 12) ; CSKY-NEXT: cmpne16 a1, l0 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 16) ; CSKY-NEXT: cmphs16 l1, a0 ; CSKY-NEXT: mvcv16 a2 ; CSKY-NEXT: ld16.w a3, (sp, 12) ; CSKY-NEXT: btsti32 a3, 0 ; CSKY-NEXT: mvc32 a3 ; CSKY-NEXT: ld32.w t0, (sp, 16) ; CSKY-NEXT: btsti32 t0, 0 ; CSKY-NEXT: movf32 a3, a2 ; CSKY-NEXT: btsti32 a3, 0 ; CSKY-NEXT: mov16 a2, l1 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: mov16 a3, l0 ; CSKY-NEXT: movt32 a3, a1 ; CSKY-NEXT: st16.w a0, (sp, 20) ; CSKY-NEXT: st16.w a1, (sp, 24) ; CSKY-NEXT: st16.w l3, (sp, 4) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l2 ; CSKY-NEXT: addi16 a1, sp, 20 ; CSKY-NEXT: jsri32 [.LCPI204_0] ; CSKY-NEXT: mov16 a2, a0 ; CSKY-NEXT: ld16.w a1, (sp, 24) ; CSKY-NEXT: ld16.w a0, (sp, 20) ; CSKY-NEXT: bez32 a2, .LBB204_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 28 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI204_0: ; CSKY-NEXT: .long __atomic_compare_exchange_8 ; %1 = atomicrmw max i64* %a, i64 %b seq_cst ret i64 %1 } define i64 @atomicrmw_min_i64_monotonic(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_min_i64_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 28 ; CSKY-NEXT: mov16 l0, a2 ; CSKY-NEXT: mov16 l1, a1 ; CSKY-NEXT: mov16 l2, a0 ; CSKY-NEXT: ld16.w a1, (a0, 4) ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l3, 0 ; CSKY-NEXT: .LBB205_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmphs16 l1, a0 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 12) ; CSKY-NEXT: cmpne16 a1, l0 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 16) ; CSKY-NEXT: cmplt16 l0, a1 ; CSKY-NEXT: mvcv16 a2 ; CSKY-NEXT: ld16.w a3, (sp, 12) ; CSKY-NEXT: btsti32 a3, 0 ; CSKY-NEXT: mvc32 a3 ; CSKY-NEXT: ld32.w t0, (sp, 16) ; CSKY-NEXT: btsti32 t0, 0 ; CSKY-NEXT: movf32 a2, a3 ; CSKY-NEXT: btsti32 a2, 0 ; CSKY-NEXT: mov16 a2, l1 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: mov16 a3, l0 ; CSKY-NEXT: movt32 a3, a1 ; CSKY-NEXT: st16.w a0, (sp, 20) ; CSKY-NEXT: st16.w a1, (sp, 24) ; CSKY-NEXT: st16.w l3, (sp, 4) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l2 ; CSKY-NEXT: addi16 a1, sp, 20 ; CSKY-NEXT: jsri32 [.LCPI205_0] ; CSKY-NEXT: mov16 a2, a0 ; CSKY-NEXT: ld16.w a1, (sp, 24) ; CSKY-NEXT: ld16.w a0, (sp, 20) ; CSKY-NEXT: bez32 a2, .LBB205_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 28 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI205_0: ; CSKY-NEXT: .long __atomic_compare_exchange_8 ; %1 = atomicrmw min i64* %a, i64 %b monotonic ret i64 %1 } define i64 @atomicrmw_min_i64_acquire(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_min_i64_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 28 ; CSKY-NEXT: mov16 l0, a2 ; CSKY-NEXT: mov16 l1, a1 ; CSKY-NEXT: mov16 l2, a0 ; CSKY-NEXT: ld16.w a1, (a0, 4) ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l3, 2 ; CSKY-NEXT: .LBB206_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmphs16 l1, a0 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 12) ; CSKY-NEXT: cmpne16 a1, l0 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 16) ; CSKY-NEXT: cmplt16 l0, a1 ; CSKY-NEXT: mvcv16 a2 ; CSKY-NEXT: ld16.w a3, (sp, 12) ; CSKY-NEXT: btsti32 a3, 0 ; CSKY-NEXT: mvc32 a3 ; CSKY-NEXT: ld32.w t0, (sp, 16) ; CSKY-NEXT: btsti32 t0, 0 ; CSKY-NEXT: movf32 a2, a3 ; CSKY-NEXT: btsti32 a2, 0 ; CSKY-NEXT: mov16 a2, l1 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: mov16 a3, l0 ; CSKY-NEXT: movt32 a3, a1 ; CSKY-NEXT: st16.w a0, (sp, 20) ; CSKY-NEXT: st16.w a1, (sp, 24) ; CSKY-NEXT: st16.w l3, (sp, 4) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l2 ; CSKY-NEXT: addi16 a1, sp, 20 ; CSKY-NEXT: jsri32 [.LCPI206_0] ; CSKY-NEXT: mov16 a2, a0 ; CSKY-NEXT: ld16.w a1, (sp, 24) ; CSKY-NEXT: ld16.w a0, (sp, 20) ; CSKY-NEXT: bez32 a2, .LBB206_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 28 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI206_0: ; CSKY-NEXT: .long __atomic_compare_exchange_8 ; %1 = atomicrmw min i64* %a, i64 %b acquire ret i64 %1 } define i64 @atomicrmw_min_i64_release(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_min_i64_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 24 ; CSKY-NEXT: st16.w l3, (sp, 20) ; CSKY-NEXT: st16.w l2, (sp, 16) ; CSKY-NEXT: st16.w l1, (sp, 12) ; CSKY-NEXT: st16.w l0, (sp, 8) ; CSKY-NEXT: st32.w lr, (sp, 4) # 4-byte Folded Spill ; CSKY-NEXT: st32.w l4, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 28 ; CSKY-NEXT: mov16 l0, a2 ; CSKY-NEXT: mov16 l1, a1 ; CSKY-NEXT: mov16 l2, a0 ; CSKY-NEXT: ld16.w a1, (a0, 4) ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l3, 0 ; CSKY-NEXT: movi32 l4, 3 ; CSKY-NEXT: .LBB207_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmphs16 l1, a0 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 12) ; CSKY-NEXT: cmpne16 a1, l0 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 16) ; CSKY-NEXT: cmplt16 l0, a1 ; CSKY-NEXT: mvcv16 a2 ; CSKY-NEXT: ld16.w a3, (sp, 12) ; CSKY-NEXT: btsti32 a3, 0 ; CSKY-NEXT: mvc32 a3 ; CSKY-NEXT: ld32.w t0, (sp, 16) ; CSKY-NEXT: btsti32 t0, 0 ; CSKY-NEXT: movf32 a2, a3 ; CSKY-NEXT: btsti32 a2, 0 ; CSKY-NEXT: mov16 a2, l1 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: mov16 a3, l0 ; CSKY-NEXT: movt32 a3, a1 ; CSKY-NEXT: st16.w a0, (sp, 20) ; CSKY-NEXT: st16.w a1, (sp, 24) ; CSKY-NEXT: st16.w l3, (sp, 4) ; CSKY-NEXT: st32.w l4, (sp, 0) ; CSKY-NEXT: mov16 a0, l2 ; CSKY-NEXT: addi16 a1, sp, 20 ; CSKY-NEXT: jsri32 [.LCPI207_0] ; CSKY-NEXT: mov16 a2, a0 ; CSKY-NEXT: ld16.w a1, (sp, 24) ; CSKY-NEXT: ld16.w a0, (sp, 20) ; CSKY-NEXT: bez32 a2, .LBB207_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 28 ; CSKY-NEXT: ld32.w l4, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld32.w lr, (sp, 4) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 8) ; CSKY-NEXT: ld16.w l1, (sp, 12) ; CSKY-NEXT: ld16.w l2, (sp, 16) ; CSKY-NEXT: ld16.w l3, (sp, 20) ; CSKY-NEXT: addi16 sp, sp, 24 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI207_0: ; CSKY-NEXT: .long __atomic_compare_exchange_8 ; %1 = atomicrmw min i64* %a, i64 %b release ret i64 %1 } define i64 @atomicrmw_min_i64_acq_rel(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_min_i64_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 24 ; CSKY-NEXT: st16.w l3, (sp, 20) ; CSKY-NEXT: st16.w l2, (sp, 16) ; CSKY-NEXT: st16.w l1, (sp, 12) ; CSKY-NEXT: st16.w l0, (sp, 8) ; CSKY-NEXT: st32.w lr, (sp, 4) # 4-byte Folded Spill ; CSKY-NEXT: st32.w l4, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 28 ; CSKY-NEXT: mov16 l0, a2 ; CSKY-NEXT: mov16 l1, a1 ; CSKY-NEXT: mov16 l2, a0 ; CSKY-NEXT: ld16.w a1, (a0, 4) ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l3, 2 ; CSKY-NEXT: movi32 l4, 4 ; CSKY-NEXT: .LBB208_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmphs16 l1, a0 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 12) ; CSKY-NEXT: cmpne16 a1, l0 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 16) ; CSKY-NEXT: cmplt16 l0, a1 ; CSKY-NEXT: mvcv16 a2 ; CSKY-NEXT: ld16.w a3, (sp, 12) ; CSKY-NEXT: btsti32 a3, 0 ; CSKY-NEXT: mvc32 a3 ; CSKY-NEXT: ld32.w t0, (sp, 16) ; CSKY-NEXT: btsti32 t0, 0 ; CSKY-NEXT: movf32 a2, a3 ; CSKY-NEXT: btsti32 a2, 0 ; CSKY-NEXT: mov16 a2, l1 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: mov16 a3, l0 ; CSKY-NEXT: movt32 a3, a1 ; CSKY-NEXT: st16.w a0, (sp, 20) ; CSKY-NEXT: st16.w a1, (sp, 24) ; CSKY-NEXT: st16.w l3, (sp, 4) ; CSKY-NEXT: st32.w l4, (sp, 0) ; CSKY-NEXT: mov16 a0, l2 ; CSKY-NEXT: addi16 a1, sp, 20 ; CSKY-NEXT: jsri32 [.LCPI208_0] ; CSKY-NEXT: mov16 a2, a0 ; CSKY-NEXT: ld16.w a1, (sp, 24) ; CSKY-NEXT: ld16.w a0, (sp, 20) ; CSKY-NEXT: bez32 a2, .LBB208_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 28 ; CSKY-NEXT: ld32.w l4, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld32.w lr, (sp, 4) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 8) ; CSKY-NEXT: ld16.w l1, (sp, 12) ; CSKY-NEXT: ld16.w l2, (sp, 16) ; CSKY-NEXT: ld16.w l3, (sp, 20) ; CSKY-NEXT: addi16 sp, sp, 24 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI208_0: ; CSKY-NEXT: .long __atomic_compare_exchange_8 ; %1 = atomicrmw min i64* %a, i64 %b acq_rel ret i64 %1 } define i64 @atomicrmw_min_i64_seq_cst(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_min_i64_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 28 ; CSKY-NEXT: mov16 l0, a2 ; CSKY-NEXT: mov16 l1, a1 ; CSKY-NEXT: mov16 l2, a0 ; CSKY-NEXT: ld16.w a1, (a0, 4) ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l3, 5 ; CSKY-NEXT: .LBB209_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmphs16 l1, a0 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 12) ; CSKY-NEXT: cmpne16 a1, l0 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 16) ; CSKY-NEXT: cmplt16 l0, a1 ; CSKY-NEXT: mvcv16 a2 ; CSKY-NEXT: ld16.w a3, (sp, 12) ; CSKY-NEXT: btsti32 a3, 0 ; CSKY-NEXT: mvc32 a3 ; CSKY-NEXT: ld32.w t0, (sp, 16) ; CSKY-NEXT: btsti32 t0, 0 ; CSKY-NEXT: movf32 a2, a3 ; CSKY-NEXT: btsti32 a2, 0 ; CSKY-NEXT: mov16 a2, l1 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: mov16 a3, l0 ; CSKY-NEXT: movt32 a3, a1 ; CSKY-NEXT: st16.w a0, (sp, 20) ; CSKY-NEXT: st16.w a1, (sp, 24) ; CSKY-NEXT: st16.w l3, (sp, 4) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l2 ; CSKY-NEXT: addi16 a1, sp, 20 ; CSKY-NEXT: jsri32 [.LCPI209_0] ; CSKY-NEXT: mov16 a2, a0 ; CSKY-NEXT: ld16.w a1, (sp, 24) ; CSKY-NEXT: ld16.w a0, (sp, 20) ; CSKY-NEXT: bez32 a2, .LBB209_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 28 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI209_0: ; CSKY-NEXT: .long __atomic_compare_exchange_8 ; %1 = atomicrmw min i64* %a, i64 %b seq_cst ret i64 %1 } define i64 @atomicrmw_umax_i64_monotonic(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_umax_i64_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 24 ; CSKY-NEXT: mov16 l0, a2 ; CSKY-NEXT: mov16 l1, a1 ; CSKY-NEXT: mov16 l2, a0 ; CSKY-NEXT: ld16.w a1, (a0, 4) ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l3, 0 ; CSKY-NEXT: .LBB210_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmpne16 a1, l0 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 12) ; CSKY-NEXT: cmphs16 l1, a0 ; CSKY-NEXT: mvcv16 a2 ; CSKY-NEXT: cmphs16 l0, a1 ; CSKY-NEXT: mvcv16 a3 ; CSKY-NEXT: ld32.w t0, (sp, 12) ; CSKY-NEXT: btsti32 t0, 0 ; CSKY-NEXT: movf32 a3, a2 ; CSKY-NEXT: btsti32 a3, 0 ; CSKY-NEXT: mov16 a2, l1 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: mov16 a3, l0 ; CSKY-NEXT: movt32 a3, a1 ; CSKY-NEXT: st16.w a0, (sp, 16) ; CSKY-NEXT: st16.w a1, (sp, 20) ; CSKY-NEXT: st16.w l3, (sp, 4) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l2 ; CSKY-NEXT: addi16 a1, sp, 16 ; CSKY-NEXT: jsri32 [.LCPI210_0] ; CSKY-NEXT: mov16 a2, a0 ; CSKY-NEXT: ld16.w a1, (sp, 20) ; CSKY-NEXT: ld16.w a0, (sp, 16) ; CSKY-NEXT: bez32 a2, .LBB210_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 24 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI210_0: ; CSKY-NEXT: .long __atomic_compare_exchange_8 ; %1 = atomicrmw umax i64* %a, i64 %b monotonic ret i64 %1 } define i64 @atomicrmw_umax_i64_acquire(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_umax_i64_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 24 ; CSKY-NEXT: mov16 l0, a2 ; CSKY-NEXT: mov16 l1, a1 ; CSKY-NEXT: mov16 l2, a0 ; CSKY-NEXT: ld16.w a1, (a0, 4) ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l3, 2 ; CSKY-NEXT: .LBB211_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmpne16 a1, l0 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 12) ; CSKY-NEXT: cmphs16 l1, a0 ; CSKY-NEXT: mvcv16 a2 ; CSKY-NEXT: cmphs16 l0, a1 ; CSKY-NEXT: mvcv16 a3 ; CSKY-NEXT: ld32.w t0, (sp, 12) ; CSKY-NEXT: btsti32 t0, 0 ; CSKY-NEXT: movf32 a3, a2 ; CSKY-NEXT: btsti32 a3, 0 ; CSKY-NEXT: mov16 a2, l1 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: mov16 a3, l0 ; CSKY-NEXT: movt32 a3, a1 ; CSKY-NEXT: st16.w a0, (sp, 16) ; CSKY-NEXT: st16.w a1, (sp, 20) ; CSKY-NEXT: st16.w l3, (sp, 4) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l2 ; CSKY-NEXT: addi16 a1, sp, 16 ; CSKY-NEXT: jsri32 [.LCPI211_0] ; CSKY-NEXT: mov16 a2, a0 ; CSKY-NEXT: ld16.w a1, (sp, 20) ; CSKY-NEXT: ld16.w a0, (sp, 16) ; CSKY-NEXT: bez32 a2, .LBB211_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 24 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI211_0: ; CSKY-NEXT: .long __atomic_compare_exchange_8 ; %1 = atomicrmw umax i64* %a, i64 %b acquire ret i64 %1 } define i64 @atomicrmw_umax_i64_release(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_umax_i64_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 24 ; CSKY-NEXT: st16.w l3, (sp, 20) ; CSKY-NEXT: st16.w l2, (sp, 16) ; CSKY-NEXT: st16.w l1, (sp, 12) ; CSKY-NEXT: st16.w l0, (sp, 8) ; CSKY-NEXT: st32.w lr, (sp, 4) # 4-byte Folded Spill ; CSKY-NEXT: st32.w l4, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 24 ; CSKY-NEXT: mov16 l0, a2 ; CSKY-NEXT: mov16 l1, a1 ; CSKY-NEXT: mov16 l2, a0 ; CSKY-NEXT: ld16.w a1, (a0, 4) ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l3, 0 ; CSKY-NEXT: movi32 l4, 3 ; CSKY-NEXT: .LBB212_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmpne16 a1, l0 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 12) ; CSKY-NEXT: cmphs16 l1, a0 ; CSKY-NEXT: mvcv16 a2 ; CSKY-NEXT: cmphs16 l0, a1 ; CSKY-NEXT: mvcv16 a3 ; CSKY-NEXT: ld32.w t0, (sp, 12) ; CSKY-NEXT: btsti32 t0, 0 ; CSKY-NEXT: movf32 a3, a2 ; CSKY-NEXT: btsti32 a3, 0 ; CSKY-NEXT: mov16 a2, l1 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: mov16 a3, l0 ; CSKY-NEXT: movt32 a3, a1 ; CSKY-NEXT: st16.w a0, (sp, 16) ; CSKY-NEXT: st16.w a1, (sp, 20) ; CSKY-NEXT: st16.w l3, (sp, 4) ; CSKY-NEXT: st32.w l4, (sp, 0) ; CSKY-NEXT: mov16 a0, l2 ; CSKY-NEXT: addi16 a1, sp, 16 ; CSKY-NEXT: jsri32 [.LCPI212_0] ; CSKY-NEXT: mov16 a2, a0 ; CSKY-NEXT: ld16.w a1, (sp, 20) ; CSKY-NEXT: ld16.w a0, (sp, 16) ; CSKY-NEXT: bez32 a2, .LBB212_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 24 ; CSKY-NEXT: ld32.w l4, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld32.w lr, (sp, 4) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 8) ; CSKY-NEXT: ld16.w l1, (sp, 12) ; CSKY-NEXT: ld16.w l2, (sp, 16) ; CSKY-NEXT: ld16.w l3, (sp, 20) ; CSKY-NEXT: addi16 sp, sp, 24 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI212_0: ; CSKY-NEXT: .long __atomic_compare_exchange_8 ; %1 = atomicrmw umax i64* %a, i64 %b release ret i64 %1 } define i64 @atomicrmw_umax_i64_acq_rel(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_umax_i64_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 24 ; CSKY-NEXT: st16.w l3, (sp, 20) ; CSKY-NEXT: st16.w l2, (sp, 16) ; CSKY-NEXT: st16.w l1, (sp, 12) ; CSKY-NEXT: st16.w l0, (sp, 8) ; CSKY-NEXT: st32.w lr, (sp, 4) # 4-byte Folded Spill ; CSKY-NEXT: st32.w l4, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 24 ; CSKY-NEXT: mov16 l0, a2 ; CSKY-NEXT: mov16 l1, a1 ; CSKY-NEXT: mov16 l2, a0 ; CSKY-NEXT: ld16.w a1, (a0, 4) ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l3, 2 ; CSKY-NEXT: movi32 l4, 4 ; CSKY-NEXT: .LBB213_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmpne16 a1, l0 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 12) ; CSKY-NEXT: cmphs16 l1, a0 ; CSKY-NEXT: mvcv16 a2 ; CSKY-NEXT: cmphs16 l0, a1 ; CSKY-NEXT: mvcv16 a3 ; CSKY-NEXT: ld32.w t0, (sp, 12) ; CSKY-NEXT: btsti32 t0, 0 ; CSKY-NEXT: movf32 a3, a2 ; CSKY-NEXT: btsti32 a3, 0 ; CSKY-NEXT: mov16 a2, l1 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: mov16 a3, l0 ; CSKY-NEXT: movt32 a3, a1 ; CSKY-NEXT: st16.w a0, (sp, 16) ; CSKY-NEXT: st16.w a1, (sp, 20) ; CSKY-NEXT: st16.w l3, (sp, 4) ; CSKY-NEXT: st32.w l4, (sp, 0) ; CSKY-NEXT: mov16 a0, l2 ; CSKY-NEXT: addi16 a1, sp, 16 ; CSKY-NEXT: jsri32 [.LCPI213_0] ; CSKY-NEXT: mov16 a2, a0 ; CSKY-NEXT: ld16.w a1, (sp, 20) ; CSKY-NEXT: ld16.w a0, (sp, 16) ; CSKY-NEXT: bez32 a2, .LBB213_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 24 ; CSKY-NEXT: ld32.w l4, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld32.w lr, (sp, 4) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 8) ; CSKY-NEXT: ld16.w l1, (sp, 12) ; CSKY-NEXT: ld16.w l2, (sp, 16) ; CSKY-NEXT: ld16.w l3, (sp, 20) ; CSKY-NEXT: addi16 sp, sp, 24 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI213_0: ; CSKY-NEXT: .long __atomic_compare_exchange_8 ; %1 = atomicrmw umax i64* %a, i64 %b acq_rel ret i64 %1 } define i64 @atomicrmw_umax_i64_seq_cst(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_umax_i64_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 24 ; CSKY-NEXT: mov16 l0, a2 ; CSKY-NEXT: mov16 l1, a1 ; CSKY-NEXT: mov16 l2, a0 ; CSKY-NEXT: ld16.w a1, (a0, 4) ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l3, 5 ; CSKY-NEXT: .LBB214_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmpne16 a1, l0 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 12) ; CSKY-NEXT: cmphs16 l1, a0 ; CSKY-NEXT: mvcv16 a2 ; CSKY-NEXT: cmphs16 l0, a1 ; CSKY-NEXT: mvcv16 a3 ; CSKY-NEXT: ld32.w t0, (sp, 12) ; CSKY-NEXT: btsti32 t0, 0 ; CSKY-NEXT: movf32 a3, a2 ; CSKY-NEXT: btsti32 a3, 0 ; CSKY-NEXT: mov16 a2, l1 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: mov16 a3, l0 ; CSKY-NEXT: movt32 a3, a1 ; CSKY-NEXT: st16.w a0, (sp, 16) ; CSKY-NEXT: st16.w a1, (sp, 20) ; CSKY-NEXT: st16.w l3, (sp, 4) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l2 ; CSKY-NEXT: addi16 a1, sp, 16 ; CSKY-NEXT: jsri32 [.LCPI214_0] ; CSKY-NEXT: mov16 a2, a0 ; CSKY-NEXT: ld16.w a1, (sp, 20) ; CSKY-NEXT: ld16.w a0, (sp, 16) ; CSKY-NEXT: bez32 a2, .LBB214_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 24 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI214_0: ; CSKY-NEXT: .long __atomic_compare_exchange_8 ; %1 = atomicrmw umax i64* %a, i64 %b seq_cst ret i64 %1 } define i64 @atomicrmw_umin_i64_monotonic(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_umin_i64_monotonic: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 32 ; CSKY-NEXT: mov16 l0, a2 ; CSKY-NEXT: mov16 l1, a1 ; CSKY-NEXT: mov16 l2, a0 ; CSKY-NEXT: ld16.w a1, (a0, 4) ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l3, 0 ; CSKY-NEXT: .LBB215_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmphs16 l1, a0 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 16) ; CSKY-NEXT: cmphs16 l0, a1 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 12) ; CSKY-NEXT: cmpne16 a1, l0 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 20) ; CSKY-NEXT: ld16.w a2, (sp, 16) ; CSKY-NEXT: btsti32 a2, 0 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: ld16.w a3, (sp, 12) ; CSKY-NEXT: btsti32 a3, 0 ; CSKY-NEXT: mvc32 a3 ; CSKY-NEXT: ld32.w t0, (sp, 20) ; CSKY-NEXT: btsti32 t0, 0 ; CSKY-NEXT: movf32 a3, a2 ; CSKY-NEXT: btsti32 a3, 0 ; CSKY-NEXT: mov16 a2, l1 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: mov16 a3, l0 ; CSKY-NEXT: movt32 a3, a1 ; CSKY-NEXT: st16.w a0, (sp, 24) ; CSKY-NEXT: st16.w a1, (sp, 28) ; CSKY-NEXT: st16.w l3, (sp, 4) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l2 ; CSKY-NEXT: addi16 a1, sp, 24 ; CSKY-NEXT: jsri32 [.LCPI215_0] ; CSKY-NEXT: mov16 a2, a0 ; CSKY-NEXT: ld16.w a1, (sp, 28) ; CSKY-NEXT: ld16.w a0, (sp, 24) ; CSKY-NEXT: bez32 a2, .LBB215_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 32 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI215_0: ; CSKY-NEXT: .long __atomic_compare_exchange_8 ; %1 = atomicrmw umin i64* %a, i64 %b monotonic ret i64 %1 } define i64 @atomicrmw_umin_i64_acquire(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_umin_i64_acquire: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 32 ; CSKY-NEXT: mov16 l0, a2 ; CSKY-NEXT: mov16 l1, a1 ; CSKY-NEXT: mov16 l2, a0 ; CSKY-NEXT: ld16.w a1, (a0, 4) ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l3, 2 ; CSKY-NEXT: .LBB216_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmphs16 l1, a0 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 16) ; CSKY-NEXT: cmphs16 l0, a1 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 12) ; CSKY-NEXT: cmpne16 a1, l0 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 20) ; CSKY-NEXT: ld16.w a2, (sp, 16) ; CSKY-NEXT: btsti32 a2, 0 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: ld16.w a3, (sp, 12) ; CSKY-NEXT: btsti32 a3, 0 ; CSKY-NEXT: mvc32 a3 ; CSKY-NEXT: ld32.w t0, (sp, 20) ; CSKY-NEXT: btsti32 t0, 0 ; CSKY-NEXT: movf32 a3, a2 ; CSKY-NEXT: btsti32 a3, 0 ; CSKY-NEXT: mov16 a2, l1 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: mov16 a3, l0 ; CSKY-NEXT: movt32 a3, a1 ; CSKY-NEXT: st16.w a0, (sp, 24) ; CSKY-NEXT: st16.w a1, (sp, 28) ; CSKY-NEXT: st16.w l3, (sp, 4) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l2 ; CSKY-NEXT: addi16 a1, sp, 24 ; CSKY-NEXT: jsri32 [.LCPI216_0] ; CSKY-NEXT: mov16 a2, a0 ; CSKY-NEXT: ld16.w a1, (sp, 28) ; CSKY-NEXT: ld16.w a0, (sp, 24) ; CSKY-NEXT: bez32 a2, .LBB216_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 32 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI216_0: ; CSKY-NEXT: .long __atomic_compare_exchange_8 ; %1 = atomicrmw umin i64* %a, i64 %b acquire ret i64 %1 } define i64 @atomicrmw_umin_i64_release(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_umin_i64_release: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 24 ; CSKY-NEXT: st16.w l3, (sp, 20) ; CSKY-NEXT: st16.w l2, (sp, 16) ; CSKY-NEXT: st16.w l1, (sp, 12) ; CSKY-NEXT: st16.w l0, (sp, 8) ; CSKY-NEXT: st32.w lr, (sp, 4) # 4-byte Folded Spill ; CSKY-NEXT: st32.w l4, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 32 ; CSKY-NEXT: mov16 l0, a2 ; CSKY-NEXT: mov16 l1, a1 ; CSKY-NEXT: mov16 l2, a0 ; CSKY-NEXT: ld16.w a1, (a0, 4) ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l3, 0 ; CSKY-NEXT: movi32 l4, 3 ; CSKY-NEXT: .LBB217_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmphs16 l1, a0 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 16) ; CSKY-NEXT: cmphs16 l0, a1 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 12) ; CSKY-NEXT: cmpne16 a1, l0 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 20) ; CSKY-NEXT: ld16.w a2, (sp, 16) ; CSKY-NEXT: btsti32 a2, 0 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: ld16.w a3, (sp, 12) ; CSKY-NEXT: btsti32 a3, 0 ; CSKY-NEXT: mvc32 a3 ; CSKY-NEXT: ld32.w t0, (sp, 20) ; CSKY-NEXT: btsti32 t0, 0 ; CSKY-NEXT: movf32 a3, a2 ; CSKY-NEXT: btsti32 a3, 0 ; CSKY-NEXT: mov16 a2, l1 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: mov16 a3, l0 ; CSKY-NEXT: movt32 a3, a1 ; CSKY-NEXT: st16.w a0, (sp, 24) ; CSKY-NEXT: st16.w a1, (sp, 28) ; CSKY-NEXT: st16.w l3, (sp, 4) ; CSKY-NEXT: st32.w l4, (sp, 0) ; CSKY-NEXT: mov16 a0, l2 ; CSKY-NEXT: addi16 a1, sp, 24 ; CSKY-NEXT: jsri32 [.LCPI217_0] ; CSKY-NEXT: mov16 a2, a0 ; CSKY-NEXT: ld16.w a1, (sp, 28) ; CSKY-NEXT: ld16.w a0, (sp, 24) ; CSKY-NEXT: bez32 a2, .LBB217_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 32 ; CSKY-NEXT: ld32.w l4, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld32.w lr, (sp, 4) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 8) ; CSKY-NEXT: ld16.w l1, (sp, 12) ; CSKY-NEXT: ld16.w l2, (sp, 16) ; CSKY-NEXT: ld16.w l3, (sp, 20) ; CSKY-NEXT: addi16 sp, sp, 24 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI217_0: ; CSKY-NEXT: .long __atomic_compare_exchange_8 ; %1 = atomicrmw umin i64* %a, i64 %b release ret i64 %1 } define i64 @atomicrmw_umin_i64_acq_rel(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_umin_i64_acq_rel: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 24 ; CSKY-NEXT: st16.w l3, (sp, 20) ; CSKY-NEXT: st16.w l2, (sp, 16) ; CSKY-NEXT: st16.w l1, (sp, 12) ; CSKY-NEXT: st16.w l0, (sp, 8) ; CSKY-NEXT: st32.w lr, (sp, 4) # 4-byte Folded Spill ; CSKY-NEXT: st32.w l4, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 32 ; CSKY-NEXT: mov16 l0, a2 ; CSKY-NEXT: mov16 l1, a1 ; CSKY-NEXT: mov16 l2, a0 ; CSKY-NEXT: ld16.w a1, (a0, 4) ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l3, 2 ; CSKY-NEXT: movi32 l4, 4 ; CSKY-NEXT: .LBB218_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmphs16 l1, a0 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 16) ; CSKY-NEXT: cmphs16 l0, a1 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 12) ; CSKY-NEXT: cmpne16 a1, l0 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 20) ; CSKY-NEXT: ld16.w a2, (sp, 16) ; CSKY-NEXT: btsti32 a2, 0 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: ld16.w a3, (sp, 12) ; CSKY-NEXT: btsti32 a3, 0 ; CSKY-NEXT: mvc32 a3 ; CSKY-NEXT: ld32.w t0, (sp, 20) ; CSKY-NEXT: btsti32 t0, 0 ; CSKY-NEXT: movf32 a3, a2 ; CSKY-NEXT: btsti32 a3, 0 ; CSKY-NEXT: mov16 a2, l1 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: mov16 a3, l0 ; CSKY-NEXT: movt32 a3, a1 ; CSKY-NEXT: st16.w a0, (sp, 24) ; CSKY-NEXT: st16.w a1, (sp, 28) ; CSKY-NEXT: st16.w l3, (sp, 4) ; CSKY-NEXT: st32.w l4, (sp, 0) ; CSKY-NEXT: mov16 a0, l2 ; CSKY-NEXT: addi16 a1, sp, 24 ; CSKY-NEXT: jsri32 [.LCPI218_0] ; CSKY-NEXT: mov16 a2, a0 ; CSKY-NEXT: ld16.w a1, (sp, 28) ; CSKY-NEXT: ld16.w a0, (sp, 24) ; CSKY-NEXT: bez32 a2, .LBB218_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 32 ; CSKY-NEXT: ld32.w l4, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld32.w lr, (sp, 4) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 8) ; CSKY-NEXT: ld16.w l1, (sp, 12) ; CSKY-NEXT: ld16.w l2, (sp, 16) ; CSKY-NEXT: ld16.w l3, (sp, 20) ; CSKY-NEXT: addi16 sp, sp, 24 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI218_0: ; CSKY-NEXT: .long __atomic_compare_exchange_8 ; %1 = atomicrmw umin i64* %a, i64 %b acq_rel ret i64 %1 } define i64 @atomicrmw_umin_i64_seq_cst(i64 *%a, i64 %b) nounwind { ; CSKY-LABEL: atomicrmw_umin_i64_seq_cst: ; CSKY: # %bb.0: ; CSKY-NEXT: subi16 sp, sp, 20 ; CSKY-NEXT: st16.w l3, (sp, 16) ; CSKY-NEXT: st16.w l2, (sp, 12) ; CSKY-NEXT: st16.w l1, (sp, 8) ; CSKY-NEXT: st16.w l0, (sp, 4) ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill ; CSKY-NEXT: subi16 sp, sp, 32 ; CSKY-NEXT: mov16 l0, a2 ; CSKY-NEXT: mov16 l1, a1 ; CSKY-NEXT: mov16 l2, a0 ; CSKY-NEXT: ld16.w a1, (a0, 4) ; CSKY-NEXT: ld16.w a0, (a0, 0) ; CSKY-NEXT: movi16 l3, 5 ; CSKY-NEXT: .LBB219_1: # %atomicrmw.start ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 ; CSKY-NEXT: cmphs16 l1, a0 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 16) ; CSKY-NEXT: cmphs16 l0, a1 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 12) ; CSKY-NEXT: cmpne16 a1, l0 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: st16.w a2, (sp, 20) ; CSKY-NEXT: ld16.w a2, (sp, 16) ; CSKY-NEXT: btsti32 a2, 0 ; CSKY-NEXT: mvc32 a2 ; CSKY-NEXT: ld16.w a3, (sp, 12) ; CSKY-NEXT: btsti32 a3, 0 ; CSKY-NEXT: mvc32 a3 ; CSKY-NEXT: ld32.w t0, (sp, 20) ; CSKY-NEXT: btsti32 t0, 0 ; CSKY-NEXT: movf32 a3, a2 ; CSKY-NEXT: btsti32 a3, 0 ; CSKY-NEXT: mov16 a2, l1 ; CSKY-NEXT: movt32 a2, a0 ; CSKY-NEXT: mov16 a3, l0 ; CSKY-NEXT: movt32 a3, a1 ; CSKY-NEXT: st16.w a0, (sp, 24) ; CSKY-NEXT: st16.w a1, (sp, 28) ; CSKY-NEXT: st16.w l3, (sp, 4) ; CSKY-NEXT: st16.w l3, (sp, 0) ; CSKY-NEXT: mov16 a0, l2 ; CSKY-NEXT: addi16 a1, sp, 24 ; CSKY-NEXT: jsri32 [.LCPI219_0] ; CSKY-NEXT: mov16 a2, a0 ; CSKY-NEXT: ld16.w a1, (sp, 28) ; CSKY-NEXT: ld16.w a0, (sp, 24) ; CSKY-NEXT: bez32 a2, .LBB219_1 ; CSKY-NEXT: # %bb.2: # %atomicrmw.end ; CSKY-NEXT: addi16 sp, sp, 32 ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload ; CSKY-NEXT: ld16.w l0, (sp, 4) ; CSKY-NEXT: ld16.w l1, (sp, 8) ; CSKY-NEXT: ld16.w l2, (sp, 12) ; CSKY-NEXT: ld16.w l3, (sp, 16) ; CSKY-NEXT: addi16 sp, sp, 20 ; CSKY-NEXT: rts16 ; CSKY-NEXT: .p2align 1 ; CSKY-NEXT: # %bb.3: ; CSKY-NEXT: .p2align 2 ; CSKY-NEXT: .LCPI219_0: ; CSKY-NEXT: .long __atomic_compare_exchange_8 ; %1 = atomicrmw umin i64* %a, i64 %b seq_cst ret i64 %1 }