blob: ee1c8194cd35951c4f483c0ac4336418ccb59eff [file] [log] [blame]
; 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(ptr %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 ptr %a, i8 %b monotonic
ret i8 %1
}
define i8 @atomicrmw_xchg_i8_acquire(ptr %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 ptr %a, i8 %b acquire
ret i8 %1
}
define i8 @atomicrmw_xchg_i8_release(ptr %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 ptr %a, i8 %b release
ret i8 %1
}
define i8 @atomicrmw_xchg_i8_acq_rel(ptr %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 ptr %a, i8 %b acq_rel
ret i8 %1
}
define i8 @atomicrmw_xchg_i8_seq_cst(ptr %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 ptr %a, i8 %b seq_cst
ret i8 %1
}
define i8 @atomicrmw_add_i8_monotonic(ptr %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 ptr %a, i8 %b monotonic
ret i8 %1
}
define i8 @atomicrmw_add_i8_acquire(ptr %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 ptr %a, i8 %b acquire
ret i8 %1
}
define i8 @atomicrmw_add_i8_release(ptr %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 ptr %a, i8 %b release
ret i8 %1
}
define i8 @atomicrmw_add_i8_acq_rel(ptr %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 ptr %a, i8 %b acq_rel
ret i8 %1
}
define i8 @atomicrmw_add_i8_seq_cst(ptr %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 ptr %a, i8 %b seq_cst
ret i8 %1
}
define i8 @atomicrmw_sub_i8_monotonic(ptr %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 ptr %a, i8 %b monotonic
ret i8 %1
}
define i8 @atomicrmw_sub_i8_acquire(ptr %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 ptr %a, i8 %b acquire
ret i8 %1
}
define i8 @atomicrmw_sub_i8_release(ptr %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 ptr %a, i8 %b release
ret i8 %1
}
define i8 @atomicrmw_sub_i8_acq_rel(ptr %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 ptr %a, i8 %b acq_rel
ret i8 %1
}
define i8 @atomicrmw_sub_i8_seq_cst(ptr %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 ptr %a, i8 %b seq_cst
ret i8 %1
}
define i8 @atomicrmw_and_i8_monotonic(ptr %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 ptr %a, i8 %b monotonic
ret i8 %1
}
define i8 @atomicrmw_and_i8_acquire(ptr %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 ptr %a, i8 %b acquire
ret i8 %1
}
define i8 @atomicrmw_and_i8_release(ptr %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 ptr %a, i8 %b release
ret i8 %1
}
define i8 @atomicrmw_and_i8_acq_rel(ptr %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 ptr %a, i8 %b acq_rel
ret i8 %1
}
define i8 @atomicrmw_and_i8_seq_cst(ptr %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 ptr %a, i8 %b seq_cst
ret i8 %1
}
define i8 @atomicrmw_nand_i8_monotonic(ptr %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 ptr %a, i8 %b monotonic
ret i8 %1
}
define i8 @atomicrmw_nand_i8_acquire(ptr %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 ptr %a, i8 %b acquire
ret i8 %1
}
define i8 @atomicrmw_nand_i8_release(ptr %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 ptr %a, i8 %b release
ret i8 %1
}
define i8 @atomicrmw_nand_i8_acq_rel(ptr %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 ptr %a, i8 %b acq_rel
ret i8 %1
}
define i8 @atomicrmw_nand_i8_seq_cst(ptr %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 ptr %a, i8 %b seq_cst
ret i8 %1
}
define i8 @atomicrmw_or_i8_monotonic(ptr %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 ptr %a, i8 %b monotonic
ret i8 %1
}
define i8 @atomicrmw_or_i8_acquire(ptr %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 ptr %a, i8 %b acquire
ret i8 %1
}
define i8 @atomicrmw_or_i8_release(ptr %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 ptr %a, i8 %b release
ret i8 %1
}
define i8 @atomicrmw_or_i8_acq_rel(ptr %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 ptr %a, i8 %b acq_rel
ret i8 %1
}
define i8 @atomicrmw_or_i8_seq_cst(ptr %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 ptr %a, i8 %b seq_cst
ret i8 %1
}
define i8 @atomicrmw_xor_i8_monotonic(ptr %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 ptr %a, i8 %b monotonic
ret i8 %1
}
define i8 @atomicrmw_xor_i8_acquire(ptr %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 ptr %a, i8 %b acquire
ret i8 %1
}
define i8 @atomicrmw_xor_i8_release(ptr %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 ptr %a, i8 %b release
ret i8 %1
}
define i8 @atomicrmw_xor_i8_acq_rel(ptr %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 ptr %a, i8 %b acq_rel
ret i8 %1
}
define i8 @atomicrmw_xor_i8_seq_cst(ptr %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 ptr %a, i8 %b seq_cst
ret i8 %1
}
define i8 @atomicrmw_max_i8_monotonic(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i8 %b monotonic
ret i8 %1
}
define i8 @atomicrmw_max_i8_acquire(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i8 %b acquire
ret i8 %1
}
define i8 @atomicrmw_max_i8_release(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i8 %b release
ret i8 %1
}
define i8 @atomicrmw_max_i8_acq_rel(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i8 %b acq_rel
ret i8 %1
}
define i8 @atomicrmw_max_i8_seq_cst(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i8 %b seq_cst
ret i8 %1
}
define i8 @atomicrmw_min_i8_monotonic(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i8 %b monotonic
ret i8 %1
}
define i8 @atomicrmw_min_i8_acquire(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i8 %b acquire
ret i8 %1
}
define i8 @atomicrmw_min_i8_release(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i8 %b release
ret i8 %1
}
define i8 @atomicrmw_min_i8_acq_rel(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i8 %b acq_rel
ret i8 %1
}
define i8 @atomicrmw_min_i8_seq_cst(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i8 %b seq_cst
ret i8 %1
}
define i8 @atomicrmw_umax_i8_monotonic(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i8 %b monotonic
ret i8 %1
}
define i8 @atomicrmw_umax_i8_acquire(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i8 %b acquire
ret i8 %1
}
define i8 @atomicrmw_umax_i8_release(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i8 %b release
ret i8 %1
}
define i8 @atomicrmw_umax_i8_acq_rel(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i8 %b acq_rel
ret i8 %1
}
define i8 @atomicrmw_umax_i8_seq_cst(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i8 %b seq_cst
ret i8 %1
}
define i8 @atomicrmw_umin_i8_monotonic(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i8 %b monotonic
ret i8 %1
}
define i8 @atomicrmw_umin_i8_acquire(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i8 %b acquire
ret i8 %1
}
define i8 @atomicrmw_umin_i8_release(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i8 %b release
ret i8 %1
}
define i8 @atomicrmw_umin_i8_acq_rel(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i8 %b acq_rel
ret i8 %1
}
define i8 @atomicrmw_umin_i8_seq_cst(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i8 %b seq_cst
ret i8 %1
}
define i16 @atomicrmw_xchg_i16_monotonic(ptr %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 ptr %a, i16 %b monotonic
ret i16 %1
}
define i16 @atomicrmw_xchg_i16_acquire(ptr %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 ptr %a, i16 %b acquire
ret i16 %1
}
define i16 @atomicrmw_xchg_i16_release(ptr %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 ptr %a, i16 %b release
ret i16 %1
}
define i16 @atomicrmw_xchg_i16_acq_rel(ptr %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 ptr %a, i16 %b acq_rel
ret i16 %1
}
define i16 @atomicrmw_xchg_i16_seq_cst(ptr %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 ptr %a, i16 %b seq_cst
ret i16 %1
}
define i16 @atomicrmw_add_i16_monotonic(ptr %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 ptr %a, i16 %b monotonic
ret i16 %1
}
define i16 @atomicrmw_add_i16_acquire(ptr %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 ptr %a, i16 %b acquire
ret i16 %1
}
define i16 @atomicrmw_add_i16_release(ptr %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 ptr %a, i16 %b release
ret i16 %1
}
define i16 @atomicrmw_add_i16_acq_rel(ptr %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 ptr %a, i16 %b acq_rel
ret i16 %1
}
define i16 @atomicrmw_add_i16_seq_cst(ptr %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 ptr %a, i16 %b seq_cst
ret i16 %1
}
define i16 @atomicrmw_sub_i16_monotonic(ptr %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 ptr %a, i16 %b monotonic
ret i16 %1
}
define i16 @atomicrmw_sub_i16_acquire(ptr %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 ptr %a, i16 %b acquire
ret i16 %1
}
define i16 @atomicrmw_sub_i16_release(ptr %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 ptr %a, i16 %b release
ret i16 %1
}
define i16 @atomicrmw_sub_i16_acq_rel(ptr %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 ptr %a, i16 %b acq_rel
ret i16 %1
}
define i16 @atomicrmw_sub_i16_seq_cst(ptr %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 ptr %a, i16 %b seq_cst
ret i16 %1
}
define i16 @atomicrmw_and_i16_monotonic(ptr %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 ptr %a, i16 %b monotonic
ret i16 %1
}
define i16 @atomicrmw_and_i16_acquire(ptr %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 ptr %a, i16 %b acquire
ret i16 %1
}
define i16 @atomicrmw_and_i16_release(ptr %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 ptr %a, i16 %b release
ret i16 %1
}
define i16 @atomicrmw_and_i16_acq_rel(ptr %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 ptr %a, i16 %b acq_rel
ret i16 %1
}
define i16 @atomicrmw_and_i16_seq_cst(ptr %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 ptr %a, i16 %b seq_cst
ret i16 %1
}
define i16 @atomicrmw_nand_i16_monotonic(ptr %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 ptr %a, i16 %b monotonic
ret i16 %1
}
define i16 @atomicrmw_nand_i16_acquire(ptr %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 ptr %a, i16 %b acquire
ret i16 %1
}
define i16 @atomicrmw_nand_i16_release(ptr %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 ptr %a, i16 %b release
ret i16 %1
}
define i16 @atomicrmw_nand_i16_acq_rel(ptr %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 ptr %a, i16 %b acq_rel
ret i16 %1
}
define i16 @atomicrmw_nand_i16_seq_cst(ptr %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 ptr %a, i16 %b seq_cst
ret i16 %1
}
define i16 @atomicrmw_or_i16_monotonic(ptr %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 ptr %a, i16 %b monotonic
ret i16 %1
}
define i16 @atomicrmw_or_i16_acquire(ptr %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 ptr %a, i16 %b acquire
ret i16 %1
}
define i16 @atomicrmw_or_i16_release(ptr %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 ptr %a, i16 %b release
ret i16 %1
}
define i16 @atomicrmw_or_i16_acq_rel(ptr %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 ptr %a, i16 %b acq_rel
ret i16 %1
}
define i16 @atomicrmw_or_i16_seq_cst(ptr %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 ptr %a, i16 %b seq_cst
ret i16 %1
}
define i16 @atomicrmw_xor_i16_monotonic(ptr %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 ptr %a, i16 %b monotonic
ret i16 %1
}
define i16 @atomicrmw_xor_i16_acquire(ptr %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 ptr %a, i16 %b acquire
ret i16 %1
}
define i16 @atomicrmw_xor_i16_release(ptr %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 ptr %a, i16 %b release
ret i16 %1
}
define i16 @atomicrmw_xor_i16_acq_rel(ptr %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 ptr %a, i16 %b acq_rel
ret i16 %1
}
define i16 @atomicrmw_xor_i16_seq_cst(ptr %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 ptr %a, i16 %b seq_cst
ret i16 %1
}
define i16 @atomicrmw_max_i16_monotonic(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i16 %b monotonic
ret i16 %1
}
define i16 @atomicrmw_max_i16_acquire(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i16 %b acquire
ret i16 %1
}
define i16 @atomicrmw_max_i16_release(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i16 %b release
ret i16 %1
}
define i16 @atomicrmw_max_i16_acq_rel(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i16 %b acq_rel
ret i16 %1
}
define i16 @atomicrmw_max_i16_seq_cst(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i16 %b seq_cst
ret i16 %1
}
define i16 @atomicrmw_min_i16_monotonic(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i16 %b monotonic
ret i16 %1
}
define i16 @atomicrmw_min_i16_acquire(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i16 %b acquire
ret i16 %1
}
define i16 @atomicrmw_min_i16_release(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i16 %b release
ret i16 %1
}
define i16 @atomicrmw_min_i16_acq_rel(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i16 %b acq_rel
ret i16 %1
}
define i16 @atomicrmw_min_i16_seq_cst(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i16 %b seq_cst
ret i16 %1
}
define i16 @atomicrmw_umax_i16_monotonic(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i16 %b monotonic
ret i16 %1
}
define i16 @atomicrmw_umax_i16_acquire(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i16 %b acquire
ret i16 %1
}
define i16 @atomicrmw_umax_i16_release(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i16 %b release
ret i16 %1
}
define i16 @atomicrmw_umax_i16_acq_rel(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i16 %b acq_rel
ret i16 %1
}
define i16 @atomicrmw_umax_i16_seq_cst(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i16 %b seq_cst
ret i16 %1
}
define i16 @atomicrmw_umin_i16_monotonic(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i16 %b monotonic
ret i16 %1
}
define i16 @atomicrmw_umin_i16_acquire(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i16 %b acquire
ret i16 %1
}
define i16 @atomicrmw_umin_i16_release(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i16 %b release
ret i16 %1
}
define i16 @atomicrmw_umin_i16_acq_rel(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i16 %b acq_rel
ret i16 %1
}
define i16 @atomicrmw_umin_i16_seq_cst(ptr %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) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill
; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill
; 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) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload
; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload
; 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 ptr %a, i16 %b seq_cst
ret i16 %1
}
define i32 @atomicrmw_xchg_i32_monotonic(ptr %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 ptr %a, i32 %b monotonic
ret i32 %1
}
define i32 @atomicrmw_xchg_i32_acquire(ptr %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 ptr %a, i32 %b acquire
ret i32 %1
}
define i32 @atomicrmw_xchg_i32_release(ptr %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 ptr %a, i32 %b release
ret i32 %1
}
define i32 @atomicrmw_xchg_i32_acq_rel(ptr %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 ptr %a, i32 %b acq_rel
ret i32 %1
}
define i32 @atomicrmw_xchg_i32_seq_cst(ptr %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 ptr %a, i32 %b seq_cst
ret i32 %1
}
define i32 @atomicrmw_add_i32_monotonic(ptr %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 ptr %a, i32 %b monotonic
ret i32 %1
}
define i32 @atomicrmw_add_i32_acquire(ptr %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 ptr %a, i32 %b acquire
ret i32 %1
}
define i32 @atomicrmw_add_i32_release(ptr %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 ptr %a, i32 %b release
ret i32 %1
}
define i32 @atomicrmw_add_i32_acq_rel(ptr %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 ptr %a, i32 %b acq_rel
ret i32 %1
}
define i32 @atomicrmw_add_i32_seq_cst(ptr %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 ptr %a, i32 %b seq_cst
ret i32 %1
}
define i32 @atomicrmw_sub_i32_monotonic(ptr %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 ptr %a, i32 %b monotonic
ret i32 %1
}
define i32 @atomicrmw_sub_i32_acquire(ptr %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 ptr %a, i32 %b acquire
ret i32 %1
}
define i32 @atomicrmw_sub_i32_release(ptr %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 ptr %a, i32 %b release
ret i32 %1
}
define i32 @atomicrmw_sub_i32_acq_rel(ptr %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 ptr %a, i32 %b acq_rel
ret i32 %1
}
define i32 @atomicrmw_sub_i32_seq_cst(ptr %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 ptr %a, i32 %b seq_cst
ret i32 %1
}
define i32 @atomicrmw_and_i32_monotonic(ptr %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 ptr %a, i32 %b monotonic
ret i32 %1
}
define i32 @atomicrmw_and_i32_acquire(ptr %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 ptr %a, i32 %b acquire
ret i32 %1
}
define i32 @atomicrmw_and_i32_release(ptr %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 ptr %a, i32 %b release
ret i32 %1
}
define i32 @atomicrmw_and_i32_acq_rel(ptr %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 ptr %a, i32 %b acq_rel
ret i32 %1
}
define i32 @atomicrmw_and_i32_seq_cst(ptr %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 ptr %a, i32 %b seq_cst
ret i32 %1
}
define i32 @atomicrmw_nand_i32_monotonic(ptr %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 ptr %a, i32 %b monotonic
ret i32 %1
}
define i32 @atomicrmw_nand_i32_acquire(ptr %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 ptr %a, i32 %b acquire
ret i32 %1
}
define i32 @atomicrmw_nand_i32_release(ptr %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 ptr %a, i32 %b release
ret i32 %1
}
define i32 @atomicrmw_nand_i32_acq_rel(ptr %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 ptr %a, i32 %b acq_rel
ret i32 %1
}
define i32 @atomicrmw_nand_i32_seq_cst(ptr %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 ptr %a, i32 %b seq_cst
ret i32 %1
}
define i32 @atomicrmw_or_i32_monotonic(ptr %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 ptr %a, i32 %b monotonic
ret i32 %1
}
define i32 @atomicrmw_or_i32_acquire(ptr %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 ptr %a, i32 %b acquire
ret i32 %1
}
define i32 @atomicrmw_or_i32_release(ptr %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 ptr %a, i32 %b release
ret i32 %1
}
define i32 @atomicrmw_or_i32_acq_rel(ptr %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 ptr %a, i32 %b acq_rel