For now, just support atomic operations by libcall. Further, should investigate atomic implementation in CSKY target and codegen with atomic and fence related instructions.
33 lines
1.1 KiB
LLVM
33 lines
1.1 KiB
LLVM
; 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 i1 @cmpxchg_i32_seq_cst_seq_cst(i32* %ptr, i32 signext %cmp,
|
|
i32 signext %val) nounwind {
|
|
; CSKY-LABEL: cmpxchg_i32_seq_cst_seq_cst:
|
|
; CSKY: # %bb.0: # %entry
|
|
; CSKY-NEXT: subi16 sp, sp, 4
|
|
; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill
|
|
; CSKY-NEXT: subi16 sp, sp, 8
|
|
; CSKY-NEXT: st16.w a1, (sp, 4)
|
|
; CSKY-NEXT: movi16 a1, 5
|
|
; CSKY-NEXT: st16.w a1, (sp, 0)
|
|
; CSKY-NEXT: addi16 a1, sp, 4
|
|
; CSKY-NEXT: movi16 a3, 5
|
|
; CSKY-NEXT: jsri32 [.LCPI0_0]
|
|
; CSKY-NEXT: addi16 sp, sp, 8
|
|
; 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_compare_exchange_4
|
|
;
|
|
entry:
|
|
%0 = cmpxchg i32* %ptr, i32 %cmp, i32 %val seq_cst seq_cst
|
|
%1 = extractvalue { i32, i1 } %0, 1
|
|
ret i1 %1
|
|
}
|