| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py | |
| ; RUN: llc %s -o - -mtriple=m68k -mcpu=M68000 --code-model=large | FileCheck %s --check-prefix=NO-ATOMIC | |
| ; RUN: llc %s -o - -mtriple=m68k -mcpu=M68010 --code-model=large | FileCheck %s --check-prefix=NO-ATOMIC | |
| ; RUN: llc %s -o - -mtriple=m68k -mcpu=M68000 --code-model=large --relocation-model=pic | FileCheck %s --check-prefix=NO-ATOMIC-PIC | |
| ; RUN: llc %s -o - -mtriple=m68k -mcpu=M68010 --code-model=large --relocation-model=pic | FileCheck %s --check-prefix=NO-ATOMIC-PIC | |
| ; RUN: llc %s -o - -mtriple=m68k -mcpu=M68020 --code-model=large | FileCheck %s --check-prefix=ATOMIC | |
| ; RUN: llc %s -o - -mtriple=m68k -mcpu=M68030 --code-model=large | FileCheck %s --check-prefix=ATOMIC | |
| ; RUN: llc %s -o - -mtriple=m68k -mcpu=M68040 --code-model=large | FileCheck %s --check-prefix=ATOMIC | |
| ; RUN: llc %s -o - -mtriple=m68k -mcpu=M68020 --code-model=large --relocation-model=pic | FileCheck %s --check-prefix=ATOMIC-PIC | |
| ; RUN: llc %s -o - -mtriple=m68k -mcpu=M68030 --code-model=large --relocation-model=pic | FileCheck %s --check-prefix=ATOMIC-PIC | |
| ; RUN: llc %s -o - -mtriple=m68k -mcpu=M68040 --code-model=large --relocation-model=pic | FileCheck %s --check-prefix=ATOMIC-PIC | |
| define i8 @atomic_load_i8_unordered(ptr %a) nounwind { | |
| ; NO-ATOMIC-LABEL: atomic_load_i8_unordered: | |
| ; NO-ATOMIC: ; %bb.0: | |
| ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-NEXT: move.b (%a0), %d0 | |
| ; NO-ATOMIC-NEXT: rts | |
| ; | |
| ; NO-ATOMIC-PIC-LABEL: atomic_load_i8_unordered: | |
| ; NO-ATOMIC-PIC: ; %bb.0: | |
| ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-PIC-NEXT: move.b (%a0), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: rts | |
| ; | |
| ; ATOMIC-LABEL: atomic_load_i8_unordered: | |
| ; ATOMIC: ; %bb.0: | |
| ; ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-NEXT: move.b (%a0), %d0 | |
| ; ATOMIC-NEXT: rts | |
| ; | |
| ; ATOMIC-PIC-LABEL: atomic_load_i8_unordered: | |
| ; ATOMIC-PIC: ; %bb.0: | |
| ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-PIC-NEXT: move.b (%a0), %d0 | |
| ; ATOMIC-PIC-NEXT: rts | |
| %1 = load atomic i8, ptr %a unordered, align 1 | |
| ret i8 %1 | |
| } | |
| define i8 @atomic_load_i8_monotonic(ptr %a) nounwind { | |
| ; NO-ATOMIC-LABEL: atomic_load_i8_monotonic: | |
| ; NO-ATOMIC: ; %bb.0: | |
| ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-NEXT: move.b (%a0), %d0 | |
| ; NO-ATOMIC-NEXT: rts | |
| ; | |
| ; NO-ATOMIC-PIC-LABEL: atomic_load_i8_monotonic: | |
| ; NO-ATOMIC-PIC: ; %bb.0: | |
| ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-PIC-NEXT: move.b (%a0), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: rts | |
| ; | |
| ; ATOMIC-LABEL: atomic_load_i8_monotonic: | |
| ; ATOMIC: ; %bb.0: | |
| ; ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-NEXT: move.b (%a0), %d0 | |
| ; ATOMIC-NEXT: rts | |
| ; | |
| ; ATOMIC-PIC-LABEL: atomic_load_i8_monotonic: | |
| ; ATOMIC-PIC: ; %bb.0: | |
| ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-PIC-NEXT: move.b (%a0), %d0 | |
| ; ATOMIC-PIC-NEXT: rts | |
| %1 = load atomic i8, ptr %a monotonic, align 1 | |
| ret i8 %1 | |
| } | |
| define i8 @atomic_load_i8_acquire(ptr %a) nounwind { | |
| ; NO-ATOMIC-LABEL: atomic_load_i8_acquire: | |
| ; NO-ATOMIC: ; %bb.0: | |
| ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-NEXT: move.b (%a0), %d0 | |
| ; NO-ATOMIC-NEXT: rts | |
| ; | |
| ; NO-ATOMIC-PIC-LABEL: atomic_load_i8_acquire: | |
| ; NO-ATOMIC-PIC: ; %bb.0: | |
| ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-PIC-NEXT: move.b (%a0), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: rts | |
| ; | |
| ; ATOMIC-LABEL: atomic_load_i8_acquire: | |
| ; ATOMIC: ; %bb.0: | |
| ; ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-NEXT: move.b (%a0), %d0 | |
| ; ATOMIC-NEXT: rts | |
| ; | |
| ; ATOMIC-PIC-LABEL: atomic_load_i8_acquire: | |
| ; ATOMIC-PIC: ; %bb.0: | |
| ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-PIC-NEXT: move.b (%a0), %d0 | |
| ; ATOMIC-PIC-NEXT: rts | |
| %1 = load atomic i8, ptr %a acquire, align 1 | |
| ret i8 %1 | |
| } | |
| define i8 @atomic_load_i8_seq_cst(ptr %a) nounwind { | |
| ; NO-ATOMIC-LABEL: atomic_load_i8_seq_cst: | |
| ; NO-ATOMIC: ; %bb.0: | |
| ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-NEXT: move.b (%a0), %d0 | |
| ; NO-ATOMIC-NEXT: rts | |
| ; | |
| ; NO-ATOMIC-PIC-LABEL: atomic_load_i8_seq_cst: | |
| ; NO-ATOMIC-PIC: ; %bb.0: | |
| ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-PIC-NEXT: move.b (%a0), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: rts | |
| ; | |
| ; ATOMIC-LABEL: atomic_load_i8_seq_cst: | |
| ; ATOMIC: ; %bb.0: | |
| ; ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-NEXT: move.b (%a0), %d0 | |
| ; ATOMIC-NEXT: rts | |
| ; | |
| ; ATOMIC-PIC-LABEL: atomic_load_i8_seq_cst: | |
| ; ATOMIC-PIC: ; %bb.0: | |
| ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-PIC-NEXT: move.b (%a0), %d0 | |
| ; ATOMIC-PIC-NEXT: rts | |
| %1 = load atomic i8, ptr %a seq_cst, align 1 | |
| ret i8 %1 | |
| } | |
| define i16 @atomic_load_i16_unordered(ptr %a) nounwind { | |
| ; NO-ATOMIC-LABEL: atomic_load_i16_unordered: | |
| ; NO-ATOMIC: ; %bb.0: | |
| ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-NEXT: move.w (%a0), %d0 | |
| ; NO-ATOMIC-NEXT: rts | |
| ; | |
| ; NO-ATOMIC-PIC-LABEL: atomic_load_i16_unordered: | |
| ; NO-ATOMIC-PIC: ; %bb.0: | |
| ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-PIC-NEXT: move.w (%a0), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: rts | |
| ; | |
| ; ATOMIC-LABEL: atomic_load_i16_unordered: | |
| ; ATOMIC: ; %bb.0: | |
| ; ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-NEXT: move.w (%a0), %d0 | |
| ; ATOMIC-NEXT: rts | |
| ; | |
| ; ATOMIC-PIC-LABEL: atomic_load_i16_unordered: | |
| ; ATOMIC-PIC: ; %bb.0: | |
| ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-PIC-NEXT: move.w (%a0), %d0 | |
| ; ATOMIC-PIC-NEXT: rts | |
| %1 = load atomic i16, ptr %a unordered, align 2 | |
| ret i16 %1 | |
| } | |
| define i16 @atomic_load_i16_monotonic(ptr %a) nounwind { | |
| ; NO-ATOMIC-LABEL: atomic_load_i16_monotonic: | |
| ; NO-ATOMIC: ; %bb.0: | |
| ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-NEXT: move.w (%a0), %d0 | |
| ; NO-ATOMIC-NEXT: rts | |
| ; | |
| ; NO-ATOMIC-PIC-LABEL: atomic_load_i16_monotonic: | |
| ; NO-ATOMIC-PIC: ; %bb.0: | |
| ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-PIC-NEXT: move.w (%a0), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: rts | |
| ; | |
| ; ATOMIC-LABEL: atomic_load_i16_monotonic: | |
| ; ATOMIC: ; %bb.0: | |
| ; ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-NEXT: move.w (%a0), %d0 | |
| ; ATOMIC-NEXT: rts | |
| ; | |
| ; ATOMIC-PIC-LABEL: atomic_load_i16_monotonic: | |
| ; ATOMIC-PIC: ; %bb.0: | |
| ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-PIC-NEXT: move.w (%a0), %d0 | |
| ; ATOMIC-PIC-NEXT: rts | |
| %1 = load atomic i16, ptr %a monotonic, align 2 | |
| ret i16 %1 | |
| } | |
| define i16 @atomic_load_i16_acquire(ptr %a) nounwind { | |
| ; NO-ATOMIC-LABEL: atomic_load_i16_acquire: | |
| ; NO-ATOMIC: ; %bb.0: | |
| ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-NEXT: move.w (%a0), %d0 | |
| ; NO-ATOMIC-NEXT: rts | |
| ; | |
| ; NO-ATOMIC-PIC-LABEL: atomic_load_i16_acquire: | |
| ; NO-ATOMIC-PIC: ; %bb.0: | |
| ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-PIC-NEXT: move.w (%a0), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: rts | |
| ; | |
| ; ATOMIC-LABEL: atomic_load_i16_acquire: | |
| ; ATOMIC: ; %bb.0: | |
| ; ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-NEXT: move.w (%a0), %d0 | |
| ; ATOMIC-NEXT: rts | |
| ; | |
| ; ATOMIC-PIC-LABEL: atomic_load_i16_acquire: | |
| ; ATOMIC-PIC: ; %bb.0: | |
| ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-PIC-NEXT: move.w (%a0), %d0 | |
| ; ATOMIC-PIC-NEXT: rts | |
| %1 = load atomic i16, ptr %a acquire, align 2 | |
| ret i16 %1 | |
| } | |
| define i16 @atomic_load_i16_seq_cst(ptr %a) nounwind { | |
| ; NO-ATOMIC-LABEL: atomic_load_i16_seq_cst: | |
| ; NO-ATOMIC: ; %bb.0: | |
| ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-NEXT: move.w (%a0), %d0 | |
| ; NO-ATOMIC-NEXT: rts | |
| ; | |
| ; NO-ATOMIC-PIC-LABEL: atomic_load_i16_seq_cst: | |
| ; NO-ATOMIC-PIC: ; %bb.0: | |
| ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-PIC-NEXT: move.w (%a0), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: rts | |
| ; | |
| ; ATOMIC-LABEL: atomic_load_i16_seq_cst: | |
| ; ATOMIC: ; %bb.0: | |
| ; ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-NEXT: move.w (%a0), %d0 | |
| ; ATOMIC-NEXT: rts | |
| ; | |
| ; ATOMIC-PIC-LABEL: atomic_load_i16_seq_cst: | |
| ; ATOMIC-PIC: ; %bb.0: | |
| ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-PIC-NEXT: move.w (%a0), %d0 | |
| ; ATOMIC-PIC-NEXT: rts | |
| %1 = load atomic i16, ptr %a seq_cst, align 2 | |
| ret i16 %1 | |
| } | |
| define i32 @atomic_load_i32_unordered(ptr %a) nounwind { | |
| ; NO-ATOMIC-LABEL: atomic_load_i32_unordered: | |
| ; NO-ATOMIC: ; %bb.0: | |
| ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-NEXT: move.l (%a0), %d0 | |
| ; NO-ATOMIC-NEXT: rts | |
| ; | |
| ; NO-ATOMIC-PIC-LABEL: atomic_load_i32_unordered: | |
| ; NO-ATOMIC-PIC: ; %bb.0: | |
| ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l (%a0), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: rts | |
| ; | |
| ; ATOMIC-LABEL: atomic_load_i32_unordered: | |
| ; ATOMIC: ; %bb.0: | |
| ; ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-NEXT: move.l (%a0), %d0 | |
| ; ATOMIC-NEXT: rts | |
| ; | |
| ; ATOMIC-PIC-LABEL: atomic_load_i32_unordered: | |
| ; ATOMIC-PIC: ; %bb.0: | |
| ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-PIC-NEXT: move.l (%a0), %d0 | |
| ; ATOMIC-PIC-NEXT: rts | |
| %1 = load atomic i32, ptr %a unordered, align 4 | |
| ret i32 %1 | |
| } | |
| define i32 @atomic_load_i32_monotonic(ptr %a) nounwind { | |
| ; NO-ATOMIC-LABEL: atomic_load_i32_monotonic: | |
| ; NO-ATOMIC: ; %bb.0: | |
| ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-NEXT: move.l (%a0), %d0 | |
| ; NO-ATOMIC-NEXT: rts | |
| ; | |
| ; NO-ATOMIC-PIC-LABEL: atomic_load_i32_monotonic: | |
| ; NO-ATOMIC-PIC: ; %bb.0: | |
| ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l (%a0), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: rts | |
| ; | |
| ; ATOMIC-LABEL: atomic_load_i32_monotonic: | |
| ; ATOMIC: ; %bb.0: | |
| ; ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-NEXT: move.l (%a0), %d0 | |
| ; ATOMIC-NEXT: rts | |
| ; | |
| ; ATOMIC-PIC-LABEL: atomic_load_i32_monotonic: | |
| ; ATOMIC-PIC: ; %bb.0: | |
| ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-PIC-NEXT: move.l (%a0), %d0 | |
| ; ATOMIC-PIC-NEXT: rts | |
| %1 = load atomic i32, ptr %a monotonic, align 4 | |
| ret i32 %1 | |
| } | |
| define i32 @atomic_load_i32_acquire(ptr %a) nounwind { | |
| ; NO-ATOMIC-LABEL: atomic_load_i32_acquire: | |
| ; NO-ATOMIC: ; %bb.0: | |
| ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-NEXT: move.l (%a0), %d0 | |
| ; NO-ATOMIC-NEXT: rts | |
| ; | |
| ; NO-ATOMIC-PIC-LABEL: atomic_load_i32_acquire: | |
| ; NO-ATOMIC-PIC: ; %bb.0: | |
| ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l (%a0), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: rts | |
| ; | |
| ; ATOMIC-LABEL: atomic_load_i32_acquire: | |
| ; ATOMIC: ; %bb.0: | |
| ; ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-NEXT: move.l (%a0), %d0 | |
| ; ATOMIC-NEXT: rts | |
| ; | |
| ; ATOMIC-PIC-LABEL: atomic_load_i32_acquire: | |
| ; ATOMIC-PIC: ; %bb.0: | |
| ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-PIC-NEXT: move.l (%a0), %d0 | |
| ; ATOMIC-PIC-NEXT: rts | |
| %1 = load atomic i32, ptr %a acquire, align 4 | |
| ret i32 %1 | |
| } | |
| define i32 @atomic_load_i32_seq_cst(ptr %a) nounwind { | |
| ; NO-ATOMIC-LABEL: atomic_load_i32_seq_cst: | |
| ; NO-ATOMIC: ; %bb.0: | |
| ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-NEXT: move.l (%a0), %d0 | |
| ; NO-ATOMIC-NEXT: rts | |
| ; | |
| ; NO-ATOMIC-PIC-LABEL: atomic_load_i32_seq_cst: | |
| ; NO-ATOMIC-PIC: ; %bb.0: | |
| ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l (%a0), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: rts | |
| ; | |
| ; ATOMIC-LABEL: atomic_load_i32_seq_cst: | |
| ; ATOMIC: ; %bb.0: | |
| ; ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-NEXT: move.l (%a0), %d0 | |
| ; ATOMIC-NEXT: rts | |
| ; | |
| ; ATOMIC-PIC-LABEL: atomic_load_i32_seq_cst: | |
| ; ATOMIC-PIC: ; %bb.0: | |
| ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-PIC-NEXT: move.l (%a0), %d0 | |
| ; ATOMIC-PIC-NEXT: rts | |
| %1 = load atomic i32, ptr %a seq_cst, align 4 | |
| ret i32 %1 | |
| } | |
| define i64 @atomic_load_i64_unordered(ptr %a) nounwind { | |
| ; NO-ATOMIC-LABEL: atomic_load_i64_unordered: | |
| ; NO-ATOMIC: ; %bb.0: | |
| ; NO-ATOMIC-NEXT: suba.l #12, %sp | |
| ; NO-ATOMIC-NEXT: move.l (16,%sp), %d0 | |
| ; NO-ATOMIC-NEXT: move.l %d0, (%sp) | |
| ; NO-ATOMIC-NEXT: clr.l (4,%sp) | |
| ; NO-ATOMIC-NEXT: jsr __atomic_load_8 | |
| ; NO-ATOMIC-NEXT: adda.l #12, %sp | |
| ; NO-ATOMIC-NEXT: rts | |
| ; | |
| ; NO-ATOMIC-PIC-LABEL: atomic_load_i64_unordered: | |
| ; NO-ATOMIC-PIC: ; %bb.0: | |
| ; NO-ATOMIC-PIC-NEXT: suba.l #12, %sp | |
| ; NO-ATOMIC-PIC-NEXT: move.l (16,%sp), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l %d0, (%sp) | |
| ; NO-ATOMIC-PIC-NEXT: clr.l (4,%sp) | |
| ; NO-ATOMIC-PIC-NEXT: jsr (__atomic_load_8@PLT,%pc) | |
| ; NO-ATOMIC-PIC-NEXT: adda.l #12, %sp | |
| ; NO-ATOMIC-PIC-NEXT: rts | |
| ; | |
| ; ATOMIC-LABEL: atomic_load_i64_unordered: | |
| ; ATOMIC: ; %bb.0: | |
| ; ATOMIC-NEXT: suba.l #12, %sp | |
| ; ATOMIC-NEXT: move.l (16,%sp), %d0 | |
| ; ATOMIC-NEXT: move.l %d0, (%sp) | |
| ; ATOMIC-NEXT: clr.l (4,%sp) | |
| ; ATOMIC-NEXT: jsr __atomic_load_8 | |
| ; ATOMIC-NEXT: adda.l #12, %sp | |
| ; ATOMIC-NEXT: rts | |
| ; | |
| ; ATOMIC-PIC-LABEL: atomic_load_i64_unordered: | |
| ; ATOMIC-PIC: ; %bb.0: | |
| ; ATOMIC-PIC-NEXT: suba.l #12, %sp | |
| ; ATOMIC-PIC-NEXT: move.l (16,%sp), %d0 | |
| ; ATOMIC-PIC-NEXT: move.l %d0, (%sp) | |
| ; ATOMIC-PIC-NEXT: clr.l (4,%sp) | |
| ; ATOMIC-PIC-NEXT: jsr (__atomic_load_8@PLT,%pc) | |
| ; ATOMIC-PIC-NEXT: adda.l #12, %sp | |
| ; ATOMIC-PIC-NEXT: rts | |
| %1 = load atomic i64, ptr %a unordered, align 8 | |
| ret i64 %1 | |
| } | |
| define i64 @atomic_load_i64_monotonic(ptr %a) nounwind { | |
| ; NO-ATOMIC-LABEL: atomic_load_i64_monotonic: | |
| ; NO-ATOMIC: ; %bb.0: | |
| ; NO-ATOMIC-NEXT: suba.l #12, %sp | |
| ; NO-ATOMIC-NEXT: move.l (16,%sp), %d0 | |
| ; NO-ATOMIC-NEXT: move.l %d0, (%sp) | |
| ; NO-ATOMIC-NEXT: clr.l (4,%sp) | |
| ; NO-ATOMIC-NEXT: jsr __atomic_load_8 | |
| ; NO-ATOMIC-NEXT: adda.l #12, %sp | |
| ; NO-ATOMIC-NEXT: rts | |
| ; | |
| ; NO-ATOMIC-PIC-LABEL: atomic_load_i64_monotonic: | |
| ; NO-ATOMIC-PIC: ; %bb.0: | |
| ; NO-ATOMIC-PIC-NEXT: suba.l #12, %sp | |
| ; NO-ATOMIC-PIC-NEXT: move.l (16,%sp), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l %d0, (%sp) | |
| ; NO-ATOMIC-PIC-NEXT: clr.l (4,%sp) | |
| ; NO-ATOMIC-PIC-NEXT: jsr (__atomic_load_8@PLT,%pc) | |
| ; NO-ATOMIC-PIC-NEXT: adda.l #12, %sp | |
| ; NO-ATOMIC-PIC-NEXT: rts | |
| ; | |
| ; ATOMIC-LABEL: atomic_load_i64_monotonic: | |
| ; ATOMIC: ; %bb.0: | |
| ; ATOMIC-NEXT: suba.l #12, %sp | |
| ; ATOMIC-NEXT: move.l (16,%sp), %d0 | |
| ; ATOMIC-NEXT: move.l %d0, (%sp) | |
| ; ATOMIC-NEXT: clr.l (4,%sp) | |
| ; ATOMIC-NEXT: jsr __atomic_load_8 | |
| ; ATOMIC-NEXT: adda.l #12, %sp | |
| ; ATOMIC-NEXT: rts | |
| ; | |
| ; ATOMIC-PIC-LABEL: atomic_load_i64_monotonic: | |
| ; ATOMIC-PIC: ; %bb.0: | |
| ; ATOMIC-PIC-NEXT: suba.l #12, %sp | |
| ; ATOMIC-PIC-NEXT: move.l (16,%sp), %d0 | |
| ; ATOMIC-PIC-NEXT: move.l %d0, (%sp) | |
| ; ATOMIC-PIC-NEXT: clr.l (4,%sp) | |
| ; ATOMIC-PIC-NEXT: jsr (__atomic_load_8@PLT,%pc) | |
| ; ATOMIC-PIC-NEXT: adda.l #12, %sp | |
| ; ATOMIC-PIC-NEXT: rts | |
| %1 = load atomic i64, ptr %a monotonic, align 8 | |
| ret i64 %1 | |
| } | |
| define i64 @atomic_load_i64_acquire(ptr %a) nounwind { | |
| ; NO-ATOMIC-LABEL: atomic_load_i64_acquire: | |
| ; NO-ATOMIC: ; %bb.0: | |
| ; NO-ATOMIC-NEXT: suba.l #12, %sp | |
| ; NO-ATOMIC-NEXT: move.l (16,%sp), %d0 | |
| ; NO-ATOMIC-NEXT: move.l %d0, (%sp) | |
| ; NO-ATOMIC-NEXT: move.l #2, (4,%sp) | |
| ; NO-ATOMIC-NEXT: jsr __atomic_load_8 | |
| ; NO-ATOMIC-NEXT: adda.l #12, %sp | |
| ; NO-ATOMIC-NEXT: rts | |
| ; | |
| ; NO-ATOMIC-PIC-LABEL: atomic_load_i64_acquire: | |
| ; NO-ATOMIC-PIC: ; %bb.0: | |
| ; NO-ATOMIC-PIC-NEXT: suba.l #12, %sp | |
| ; NO-ATOMIC-PIC-NEXT: move.l (16,%sp), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l %d0, (%sp) | |
| ; NO-ATOMIC-PIC-NEXT: move.l #2, (4,%sp) | |
| ; NO-ATOMIC-PIC-NEXT: jsr (__atomic_load_8@PLT,%pc) | |
| ; NO-ATOMIC-PIC-NEXT: adda.l #12, %sp | |
| ; NO-ATOMIC-PIC-NEXT: rts | |
| ; | |
| ; ATOMIC-LABEL: atomic_load_i64_acquire: | |
| ; ATOMIC: ; %bb.0: | |
| ; ATOMIC-NEXT: suba.l #12, %sp | |
| ; ATOMIC-NEXT: move.l (16,%sp), %d0 | |
| ; ATOMIC-NEXT: move.l %d0, (%sp) | |
| ; ATOMIC-NEXT: move.l #2, (4,%sp) | |
| ; ATOMIC-NEXT: jsr __atomic_load_8 | |
| ; ATOMIC-NEXT: adda.l #12, %sp | |
| ; ATOMIC-NEXT: rts | |
| ; | |
| ; ATOMIC-PIC-LABEL: atomic_load_i64_acquire: | |
| ; ATOMIC-PIC: ; %bb.0: | |
| ; ATOMIC-PIC-NEXT: suba.l #12, %sp | |
| ; ATOMIC-PIC-NEXT: move.l (16,%sp), %d0 | |
| ; ATOMIC-PIC-NEXT: move.l %d0, (%sp) | |
| ; ATOMIC-PIC-NEXT: move.l #2, (4,%sp) | |
| ; ATOMIC-PIC-NEXT: jsr (__atomic_load_8@PLT,%pc) | |
| ; ATOMIC-PIC-NEXT: adda.l #12, %sp | |
| ; ATOMIC-PIC-NEXT: rts | |
| %1 = load atomic i64, ptr %a acquire, align 8 | |
| ret i64 %1 | |
| } | |
| define i64 @atomic_load_i64_seq_cst(ptr %a) nounwind { | |
| ; NO-ATOMIC-LABEL: atomic_load_i64_seq_cst: | |
| ; NO-ATOMIC: ; %bb.0: | |
| ; NO-ATOMIC-NEXT: suba.l #12, %sp | |
| ; NO-ATOMIC-NEXT: move.l (16,%sp), %d0 | |
| ; NO-ATOMIC-NEXT: move.l %d0, (%sp) | |
| ; NO-ATOMIC-NEXT: move.l #5, (4,%sp) | |
| ; NO-ATOMIC-NEXT: jsr __atomic_load_8 | |
| ; NO-ATOMIC-NEXT: adda.l #12, %sp | |
| ; NO-ATOMIC-NEXT: rts | |
| ; | |
| ; NO-ATOMIC-PIC-LABEL: atomic_load_i64_seq_cst: | |
| ; NO-ATOMIC-PIC: ; %bb.0: | |
| ; NO-ATOMIC-PIC-NEXT: suba.l #12, %sp | |
| ; NO-ATOMIC-PIC-NEXT: move.l (16,%sp), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l %d0, (%sp) | |
| ; NO-ATOMIC-PIC-NEXT: move.l #5, (4,%sp) | |
| ; NO-ATOMIC-PIC-NEXT: jsr (__atomic_load_8@PLT,%pc) | |
| ; NO-ATOMIC-PIC-NEXT: adda.l #12, %sp | |
| ; NO-ATOMIC-PIC-NEXT: rts | |
| ; | |
| ; ATOMIC-LABEL: atomic_load_i64_seq_cst: | |
| ; ATOMIC: ; %bb.0: | |
| ; ATOMIC-NEXT: suba.l #12, %sp | |
| ; ATOMIC-NEXT: move.l (16,%sp), %d0 | |
| ; ATOMIC-NEXT: move.l %d0, (%sp) | |
| ; ATOMIC-NEXT: move.l #5, (4,%sp) | |
| ; ATOMIC-NEXT: jsr __atomic_load_8 | |
| ; ATOMIC-NEXT: adda.l #12, %sp | |
| ; ATOMIC-NEXT: rts | |
| ; | |
| ; ATOMIC-PIC-LABEL: atomic_load_i64_seq_cst: | |
| ; ATOMIC-PIC: ; %bb.0: | |
| ; ATOMIC-PIC-NEXT: suba.l #12, %sp | |
| ; ATOMIC-PIC-NEXT: move.l (16,%sp), %d0 | |
| ; ATOMIC-PIC-NEXT: move.l %d0, (%sp) | |
| ; ATOMIC-PIC-NEXT: move.l #5, (4,%sp) | |
| ; ATOMIC-PIC-NEXT: jsr (__atomic_load_8@PLT,%pc) | |
| ; ATOMIC-PIC-NEXT: adda.l #12, %sp | |
| ; ATOMIC-PIC-NEXT: rts | |
| %1 = load atomic i64, ptr %a seq_cst, align 8 | |
| ret i64 %1 | |
| } | |
| define void @atomic_store_i8_unordered(ptr %a, i8 %val) nounwind { | |
| ; NO-ATOMIC-LABEL: atomic_store_i8_unordered: | |
| ; NO-ATOMIC: ; %bb.0: | |
| ; NO-ATOMIC-NEXT: move.b (11,%sp), %d0 | |
| ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-NEXT: move.b %d0, (%a0) | |
| ; NO-ATOMIC-NEXT: rts | |
| ; | |
| ; NO-ATOMIC-PIC-LABEL: atomic_store_i8_unordered: | |
| ; NO-ATOMIC-PIC: ; %bb.0: | |
| ; NO-ATOMIC-PIC-NEXT: move.b (11,%sp), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-PIC-NEXT: move.b %d0, (%a0) | |
| ; NO-ATOMIC-PIC-NEXT: rts | |
| ; | |
| ; ATOMIC-LABEL: atomic_store_i8_unordered: | |
| ; ATOMIC: ; %bb.0: | |
| ; ATOMIC-NEXT: move.b (11,%sp), %d0 | |
| ; ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-NEXT: move.b %d0, (%a0) | |
| ; ATOMIC-NEXT: rts | |
| ; | |
| ; ATOMIC-PIC-LABEL: atomic_store_i8_unordered: | |
| ; ATOMIC-PIC: ; %bb.0: | |
| ; ATOMIC-PIC-NEXT: move.b (11,%sp), %d0 | |
| ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-PIC-NEXT: move.b %d0, (%a0) | |
| ; ATOMIC-PIC-NEXT: rts | |
| store atomic i8 %val, ptr %a unordered, align 1 | |
| ret void | |
| } | |
| define void @atomic_store_i8_monotonic(ptr %a, i8 %val) nounwind { | |
| ; NO-ATOMIC-LABEL: atomic_store_i8_monotonic: | |
| ; NO-ATOMIC: ; %bb.0: | |
| ; NO-ATOMIC-NEXT: move.b (11,%sp), %d0 | |
| ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-NEXT: move.b %d0, (%a0) | |
| ; NO-ATOMIC-NEXT: rts | |
| ; | |
| ; NO-ATOMIC-PIC-LABEL: atomic_store_i8_monotonic: | |
| ; NO-ATOMIC-PIC: ; %bb.0: | |
| ; NO-ATOMIC-PIC-NEXT: move.b (11,%sp), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-PIC-NEXT: move.b %d0, (%a0) | |
| ; NO-ATOMIC-PIC-NEXT: rts | |
| ; | |
| ; ATOMIC-LABEL: atomic_store_i8_monotonic: | |
| ; ATOMIC: ; %bb.0: | |
| ; ATOMIC-NEXT: move.b (11,%sp), %d0 | |
| ; ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-NEXT: move.b %d0, (%a0) | |
| ; ATOMIC-NEXT: rts | |
| ; | |
| ; ATOMIC-PIC-LABEL: atomic_store_i8_monotonic: | |
| ; ATOMIC-PIC: ; %bb.0: | |
| ; ATOMIC-PIC-NEXT: move.b (11,%sp), %d0 | |
| ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-PIC-NEXT: move.b %d0, (%a0) | |
| ; ATOMIC-PIC-NEXT: rts | |
| store atomic i8 %val, ptr %a monotonic, align 1 | |
| ret void | |
| } | |
| define void @atomic_store_i8_release(ptr %a, i8 %val) nounwind { | |
| ; NO-ATOMIC-LABEL: atomic_store_i8_release: | |
| ; NO-ATOMIC: ; %bb.0: | |
| ; NO-ATOMIC-NEXT: move.b (11,%sp), %d0 | |
| ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-NEXT: move.b %d0, (%a0) | |
| ; NO-ATOMIC-NEXT: rts | |
| ; | |
| ; NO-ATOMIC-PIC-LABEL: atomic_store_i8_release: | |
| ; NO-ATOMIC-PIC: ; %bb.0: | |
| ; NO-ATOMIC-PIC-NEXT: move.b (11,%sp), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-PIC-NEXT: move.b %d0, (%a0) | |
| ; NO-ATOMIC-PIC-NEXT: rts | |
| ; | |
| ; ATOMIC-LABEL: atomic_store_i8_release: | |
| ; ATOMIC: ; %bb.0: | |
| ; ATOMIC-NEXT: move.b (11,%sp), %d0 | |
| ; ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-NEXT: move.b %d0, (%a0) | |
| ; ATOMIC-NEXT: rts | |
| ; | |
| ; ATOMIC-PIC-LABEL: atomic_store_i8_release: | |
| ; ATOMIC-PIC: ; %bb.0: | |
| ; ATOMIC-PIC-NEXT: move.b (11,%sp), %d0 | |
| ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-PIC-NEXT: move.b %d0, (%a0) | |
| ; ATOMIC-PIC-NEXT: rts | |
| store atomic i8 %val, ptr %a release, align 1 | |
| ret void | |
| } | |
| define void @atomic_store_i8_seq_cst(ptr %a, i8 %val) nounwind { | |
| ; NO-ATOMIC-LABEL: atomic_store_i8_seq_cst: | |
| ; NO-ATOMIC: ; %bb.0: | |
| ; NO-ATOMIC-NEXT: move.b (11,%sp), %d0 | |
| ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-NEXT: move.b %d0, (%a0) | |
| ; NO-ATOMIC-NEXT: rts | |
| ; | |
| ; NO-ATOMIC-PIC-LABEL: atomic_store_i8_seq_cst: | |
| ; NO-ATOMIC-PIC: ; %bb.0: | |
| ; NO-ATOMIC-PIC-NEXT: move.b (11,%sp), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-PIC-NEXT: move.b %d0, (%a0) | |
| ; NO-ATOMIC-PIC-NEXT: rts | |
| ; | |
| ; ATOMIC-LABEL: atomic_store_i8_seq_cst: | |
| ; ATOMIC: ; %bb.0: | |
| ; ATOMIC-NEXT: move.b (11,%sp), %d0 | |
| ; ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-NEXT: move.b %d0, (%a0) | |
| ; ATOMIC-NEXT: rts | |
| ; | |
| ; ATOMIC-PIC-LABEL: atomic_store_i8_seq_cst: | |
| ; ATOMIC-PIC: ; %bb.0: | |
| ; ATOMIC-PIC-NEXT: move.b (11,%sp), %d0 | |
| ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-PIC-NEXT: move.b %d0, (%a0) | |
| ; ATOMIC-PIC-NEXT: rts | |
| store atomic i8 %val, ptr %a seq_cst, align 1 | |
| ret void | |
| } | |
| define void @atomic_store_i16_unordered(ptr %a, i16 %val) nounwind { | |
| ; NO-ATOMIC-LABEL: atomic_store_i16_unordered: | |
| ; NO-ATOMIC: ; %bb.0: | |
| ; NO-ATOMIC-NEXT: move.w (10,%sp), %d0 | |
| ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-NEXT: move.w %d0, (%a0) | |
| ; NO-ATOMIC-NEXT: rts | |
| ; | |
| ; NO-ATOMIC-PIC-LABEL: atomic_store_i16_unordered: | |
| ; NO-ATOMIC-PIC: ; %bb.0: | |
| ; NO-ATOMIC-PIC-NEXT: move.w (10,%sp), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-PIC-NEXT: move.w %d0, (%a0) | |
| ; NO-ATOMIC-PIC-NEXT: rts | |
| ; | |
| ; ATOMIC-LABEL: atomic_store_i16_unordered: | |
| ; ATOMIC: ; %bb.0: | |
| ; ATOMIC-NEXT: move.w (10,%sp), %d0 | |
| ; ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-NEXT: move.w %d0, (%a0) | |
| ; ATOMIC-NEXT: rts | |
| ; | |
| ; ATOMIC-PIC-LABEL: atomic_store_i16_unordered: | |
| ; ATOMIC-PIC: ; %bb.0: | |
| ; ATOMIC-PIC-NEXT: move.w (10,%sp), %d0 | |
| ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-PIC-NEXT: move.w %d0, (%a0) | |
| ; ATOMIC-PIC-NEXT: rts | |
| store atomic i16 %val, ptr %a unordered, align 2 | |
| ret void | |
| } | |
| define void @atomic_store_i16_monotonic(ptr %a, i16 %val) nounwind { | |
| ; NO-ATOMIC-LABEL: atomic_store_i16_monotonic: | |
| ; NO-ATOMIC: ; %bb.0: | |
| ; NO-ATOMIC-NEXT: move.w (10,%sp), %d0 | |
| ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-NEXT: move.w %d0, (%a0) | |
| ; NO-ATOMIC-NEXT: rts | |
| ; | |
| ; NO-ATOMIC-PIC-LABEL: atomic_store_i16_monotonic: | |
| ; NO-ATOMIC-PIC: ; %bb.0: | |
| ; NO-ATOMIC-PIC-NEXT: move.w (10,%sp), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-PIC-NEXT: move.w %d0, (%a0) | |
| ; NO-ATOMIC-PIC-NEXT: rts | |
| ; | |
| ; ATOMIC-LABEL: atomic_store_i16_monotonic: | |
| ; ATOMIC: ; %bb.0: | |
| ; ATOMIC-NEXT: move.w (10,%sp), %d0 | |
| ; ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-NEXT: move.w %d0, (%a0) | |
| ; ATOMIC-NEXT: rts | |
| ; | |
| ; ATOMIC-PIC-LABEL: atomic_store_i16_monotonic: | |
| ; ATOMIC-PIC: ; %bb.0: | |
| ; ATOMIC-PIC-NEXT: move.w (10,%sp), %d0 | |
| ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-PIC-NEXT: move.w %d0, (%a0) | |
| ; ATOMIC-PIC-NEXT: rts | |
| store atomic i16 %val, ptr %a monotonic, align 2 | |
| ret void | |
| } | |
| define void @atomic_store_i16_release(ptr %a, i16 %val) nounwind { | |
| ; NO-ATOMIC-LABEL: atomic_store_i16_release: | |
| ; NO-ATOMIC: ; %bb.0: | |
| ; NO-ATOMIC-NEXT: move.w (10,%sp), %d0 | |
| ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-NEXT: move.w %d0, (%a0) | |
| ; NO-ATOMIC-NEXT: rts | |
| ; | |
| ; NO-ATOMIC-PIC-LABEL: atomic_store_i16_release: | |
| ; NO-ATOMIC-PIC: ; %bb.0: | |
| ; NO-ATOMIC-PIC-NEXT: move.w (10,%sp), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-PIC-NEXT: move.w %d0, (%a0) | |
| ; NO-ATOMIC-PIC-NEXT: rts | |
| ; | |
| ; ATOMIC-LABEL: atomic_store_i16_release: | |
| ; ATOMIC: ; %bb.0: | |
| ; ATOMIC-NEXT: move.w (10,%sp), %d0 | |
| ; ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-NEXT: move.w %d0, (%a0) | |
| ; ATOMIC-NEXT: rts | |
| ; | |
| ; ATOMIC-PIC-LABEL: atomic_store_i16_release: | |
| ; ATOMIC-PIC: ; %bb.0: | |
| ; ATOMIC-PIC-NEXT: move.w (10,%sp), %d0 | |
| ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-PIC-NEXT: move.w %d0, (%a0) | |
| ; ATOMIC-PIC-NEXT: rts | |
| store atomic i16 %val, ptr %a release, align 2 | |
| ret void | |
| } | |
| define void @atomic_store_i16_seq_cst(ptr %a, i16 %val) nounwind { | |
| ; NO-ATOMIC-LABEL: atomic_store_i16_seq_cst: | |
| ; NO-ATOMIC: ; %bb.0: | |
| ; NO-ATOMIC-NEXT: move.w (10,%sp), %d0 | |
| ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-NEXT: move.w %d0, (%a0) | |
| ; NO-ATOMIC-NEXT: rts | |
| ; | |
| ; NO-ATOMIC-PIC-LABEL: atomic_store_i16_seq_cst: | |
| ; NO-ATOMIC-PIC: ; %bb.0: | |
| ; NO-ATOMIC-PIC-NEXT: move.w (10,%sp), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-PIC-NEXT: move.w %d0, (%a0) | |
| ; NO-ATOMIC-PIC-NEXT: rts | |
| ; | |
| ; ATOMIC-LABEL: atomic_store_i16_seq_cst: | |
| ; ATOMIC: ; %bb.0: | |
| ; ATOMIC-NEXT: move.w (10,%sp), %d0 | |
| ; ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-NEXT: move.w %d0, (%a0) | |
| ; ATOMIC-NEXT: rts | |
| ; | |
| ; ATOMIC-PIC-LABEL: atomic_store_i16_seq_cst: | |
| ; ATOMIC-PIC: ; %bb.0: | |
| ; ATOMIC-PIC-NEXT: move.w (10,%sp), %d0 | |
| ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-PIC-NEXT: move.w %d0, (%a0) | |
| ; ATOMIC-PIC-NEXT: rts | |
| store atomic i16 %val, ptr %a seq_cst, align 2 | |
| ret void | |
| } | |
| define void @atomic_store_i32_unordered(ptr %a, i32 %val) nounwind { | |
| ; NO-ATOMIC-LABEL: atomic_store_i32_unordered: | |
| ; NO-ATOMIC: ; %bb.0: | |
| ; NO-ATOMIC-NEXT: move.l (8,%sp), %d0 | |
| ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-NEXT: move.l %d0, (%a0) | |
| ; NO-ATOMIC-NEXT: rts | |
| ; | |
| ; NO-ATOMIC-PIC-LABEL: atomic_store_i32_unordered: | |
| ; NO-ATOMIC-PIC: ; %bb.0: | |
| ; NO-ATOMIC-PIC-NEXT: move.l (8,%sp), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l %d0, (%a0) | |
| ; NO-ATOMIC-PIC-NEXT: rts | |
| ; | |
| ; ATOMIC-LABEL: atomic_store_i32_unordered: | |
| ; ATOMIC: ; %bb.0: | |
| ; ATOMIC-NEXT: move.l (8,%sp), %d0 | |
| ; ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-NEXT: move.l %d0, (%a0) | |
| ; ATOMIC-NEXT: rts | |
| ; | |
| ; ATOMIC-PIC-LABEL: atomic_store_i32_unordered: | |
| ; ATOMIC-PIC: ; %bb.0: | |
| ; ATOMIC-PIC-NEXT: move.l (8,%sp), %d0 | |
| ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-PIC-NEXT: move.l %d0, (%a0) | |
| ; ATOMIC-PIC-NEXT: rts | |
| store atomic i32 %val, ptr %a unordered, align 4 | |
| ret void | |
| } | |
| define void @atomic_store_i32_monotonic(ptr %a, i32 %val) nounwind { | |
| ; NO-ATOMIC-LABEL: atomic_store_i32_monotonic: | |
| ; NO-ATOMIC: ; %bb.0: | |
| ; NO-ATOMIC-NEXT: move.l (8,%sp), %d0 | |
| ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-NEXT: move.l %d0, (%a0) | |
| ; NO-ATOMIC-NEXT: rts | |
| ; | |
| ; NO-ATOMIC-PIC-LABEL: atomic_store_i32_monotonic: | |
| ; NO-ATOMIC-PIC: ; %bb.0: | |
| ; NO-ATOMIC-PIC-NEXT: move.l (8,%sp), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l %d0, (%a0) | |
| ; NO-ATOMIC-PIC-NEXT: rts | |
| ; | |
| ; ATOMIC-LABEL: atomic_store_i32_monotonic: | |
| ; ATOMIC: ; %bb.0: | |
| ; ATOMIC-NEXT: move.l (8,%sp), %d0 | |
| ; ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-NEXT: move.l %d0, (%a0) | |
| ; ATOMIC-NEXT: rts | |
| ; | |
| ; ATOMIC-PIC-LABEL: atomic_store_i32_monotonic: | |
| ; ATOMIC-PIC: ; %bb.0: | |
| ; ATOMIC-PIC-NEXT: move.l (8,%sp), %d0 | |
| ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-PIC-NEXT: move.l %d0, (%a0) | |
| ; ATOMIC-PIC-NEXT: rts | |
| store atomic i32 %val, ptr %a monotonic, align 4 | |
| ret void | |
| } | |
| define void @atomic_store_i32_release(ptr %a, i32 %val) nounwind { | |
| ; NO-ATOMIC-LABEL: atomic_store_i32_release: | |
| ; NO-ATOMIC: ; %bb.0: | |
| ; NO-ATOMIC-NEXT: move.l (8,%sp), %d0 | |
| ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-NEXT: move.l %d0, (%a0) | |
| ; NO-ATOMIC-NEXT: rts | |
| ; | |
| ; NO-ATOMIC-PIC-LABEL: atomic_store_i32_release: | |
| ; NO-ATOMIC-PIC: ; %bb.0: | |
| ; NO-ATOMIC-PIC-NEXT: move.l (8,%sp), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l %d0, (%a0) | |
| ; NO-ATOMIC-PIC-NEXT: rts | |
| ; | |
| ; ATOMIC-LABEL: atomic_store_i32_release: | |
| ; ATOMIC: ; %bb.0: | |
| ; ATOMIC-NEXT: move.l (8,%sp), %d0 | |
| ; ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-NEXT: move.l %d0, (%a0) | |
| ; ATOMIC-NEXT: rts | |
| ; | |
| ; ATOMIC-PIC-LABEL: atomic_store_i32_release: | |
| ; ATOMIC-PIC: ; %bb.0: | |
| ; ATOMIC-PIC-NEXT: move.l (8,%sp), %d0 | |
| ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-PIC-NEXT: move.l %d0, (%a0) | |
| ; ATOMIC-PIC-NEXT: rts | |
| store atomic i32 %val, ptr %a release, align 4 | |
| ret void | |
| } | |
| define void @atomic_store_i32_seq_cst(ptr %a, i32 %val) nounwind { | |
| ; NO-ATOMIC-LABEL: atomic_store_i32_seq_cst: | |
| ; NO-ATOMIC: ; %bb.0: | |
| ; NO-ATOMIC-NEXT: move.l (8,%sp), %d0 | |
| ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-NEXT: move.l %d0, (%a0) | |
| ; NO-ATOMIC-NEXT: rts | |
| ; | |
| ; NO-ATOMIC-PIC-LABEL: atomic_store_i32_seq_cst: | |
| ; NO-ATOMIC-PIC: ; %bb.0: | |
| ; NO-ATOMIC-PIC-NEXT: move.l (8,%sp), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l %d0, (%a0) | |
| ; NO-ATOMIC-PIC-NEXT: rts | |
| ; | |
| ; ATOMIC-LABEL: atomic_store_i32_seq_cst: | |
| ; ATOMIC: ; %bb.0: | |
| ; ATOMIC-NEXT: move.l (8,%sp), %d0 | |
| ; ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-NEXT: move.l %d0, (%a0) | |
| ; ATOMIC-NEXT: rts | |
| ; | |
| ; ATOMIC-PIC-LABEL: atomic_store_i32_seq_cst: | |
| ; ATOMIC-PIC: ; %bb.0: | |
| ; ATOMIC-PIC-NEXT: move.l (8,%sp), %d0 | |
| ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-PIC-NEXT: move.l %d0, (%a0) | |
| ; ATOMIC-PIC-NEXT: rts | |
| store atomic i32 %val, ptr %a seq_cst, align 4 | |
| ret void | |
| } | |
| define void @atomic_store_i64_unordered(ptr %a, i64 %val) nounwind { | |
| ; NO-ATOMIC-LABEL: atomic_store_i64_unordered: | |
| ; NO-ATOMIC: ; %bb.0: | |
| ; NO-ATOMIC-NEXT: suba.l #20, %sp | |
| ; NO-ATOMIC-NEXT: move.l (32,%sp), %d0 | |
| ; NO-ATOMIC-NEXT: move.l %d0, (8,%sp) | |
| ; NO-ATOMIC-NEXT: move.l (28,%sp), %d0 | |
| ; NO-ATOMIC-NEXT: move.l %d0, (4,%sp) | |
| ; NO-ATOMIC-NEXT: move.l (24,%sp), %d0 | |
| ; NO-ATOMIC-NEXT: move.l %d0, (%sp) | |
| ; NO-ATOMIC-NEXT: clr.l (12,%sp) | |
| ; NO-ATOMIC-NEXT: jsr __atomic_store_8 | |
| ; NO-ATOMIC-NEXT: adda.l #20, %sp | |
| ; NO-ATOMIC-NEXT: rts | |
| ; | |
| ; NO-ATOMIC-PIC-LABEL: atomic_store_i64_unordered: | |
| ; NO-ATOMIC-PIC: ; %bb.0: | |
| ; NO-ATOMIC-PIC-NEXT: suba.l #20, %sp | |
| ; NO-ATOMIC-PIC-NEXT: move.l (32,%sp), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l %d0, (8,%sp) | |
| ; NO-ATOMIC-PIC-NEXT: move.l (28,%sp), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l %d0, (4,%sp) | |
| ; NO-ATOMIC-PIC-NEXT: move.l (24,%sp), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l %d0, (%sp) | |
| ; NO-ATOMIC-PIC-NEXT: clr.l (12,%sp) | |
| ; NO-ATOMIC-PIC-NEXT: jsr (__atomic_store_8@PLT,%pc) | |
| ; NO-ATOMIC-PIC-NEXT: adda.l #20, %sp | |
| ; NO-ATOMIC-PIC-NEXT: rts | |
| ; | |
| ; ATOMIC-LABEL: atomic_store_i64_unordered: | |
| ; ATOMIC: ; %bb.0: | |
| ; ATOMIC-NEXT: suba.l #20, %sp | |
| ; ATOMIC-NEXT: move.l (32,%sp), %d0 | |
| ; ATOMIC-NEXT: move.l %d0, (8,%sp) | |
| ; ATOMIC-NEXT: move.l (28,%sp), %d0 | |
| ; ATOMIC-NEXT: move.l %d0, (4,%sp) | |
| ; ATOMIC-NEXT: move.l (24,%sp), %d0 | |
| ; ATOMIC-NEXT: move.l %d0, (%sp) | |
| ; ATOMIC-NEXT: clr.l (12,%sp) | |
| ; ATOMIC-NEXT: jsr __atomic_store_8 | |
| ; ATOMIC-NEXT: adda.l #20, %sp | |
| ; ATOMIC-NEXT: rts | |
| ; | |
| ; ATOMIC-PIC-LABEL: atomic_store_i64_unordered: | |
| ; ATOMIC-PIC: ; %bb.0: | |
| ; ATOMIC-PIC-NEXT: suba.l #20, %sp | |
| ; ATOMIC-PIC-NEXT: move.l (32,%sp), %d0 | |
| ; ATOMIC-PIC-NEXT: move.l %d0, (8,%sp) | |
| ; ATOMIC-PIC-NEXT: move.l (28,%sp), %d0 | |
| ; ATOMIC-PIC-NEXT: move.l %d0, (4,%sp) | |
| ; ATOMIC-PIC-NEXT: move.l (24,%sp), %d0 | |
| ; ATOMIC-PIC-NEXT: move.l %d0, (%sp) | |
| ; ATOMIC-PIC-NEXT: clr.l (12,%sp) | |
| ; ATOMIC-PIC-NEXT: jsr (__atomic_store_8@PLT,%pc) | |
| ; ATOMIC-PIC-NEXT: adda.l #20, %sp | |
| ; ATOMIC-PIC-NEXT: rts | |
| store atomic i64 %val, ptr %a unordered, align 8 | |
| ret void | |
| } | |
| define void @atomic_store_i64_monotonic(ptr %a, i64 %val) nounwind { | |
| ; NO-ATOMIC-LABEL: atomic_store_i64_monotonic: | |
| ; NO-ATOMIC: ; %bb.0: | |
| ; NO-ATOMIC-NEXT: suba.l #20, %sp | |
| ; NO-ATOMIC-NEXT: move.l (32,%sp), %d0 | |
| ; NO-ATOMIC-NEXT: move.l %d0, (8,%sp) | |
| ; NO-ATOMIC-NEXT: move.l (28,%sp), %d0 | |
| ; NO-ATOMIC-NEXT: move.l %d0, (4,%sp) | |
| ; NO-ATOMIC-NEXT: move.l (24,%sp), %d0 | |
| ; NO-ATOMIC-NEXT: move.l %d0, (%sp) | |
| ; NO-ATOMIC-NEXT: clr.l (12,%sp) | |
| ; NO-ATOMIC-NEXT: jsr __atomic_store_8 | |
| ; NO-ATOMIC-NEXT: adda.l #20, %sp | |
| ; NO-ATOMIC-NEXT: rts | |
| ; | |
| ; NO-ATOMIC-PIC-LABEL: atomic_store_i64_monotonic: | |
| ; NO-ATOMIC-PIC: ; %bb.0: | |
| ; NO-ATOMIC-PIC-NEXT: suba.l #20, %sp | |
| ; NO-ATOMIC-PIC-NEXT: move.l (32,%sp), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l %d0, (8,%sp) | |
| ; NO-ATOMIC-PIC-NEXT: move.l (28,%sp), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l %d0, (4,%sp) | |
| ; NO-ATOMIC-PIC-NEXT: move.l (24,%sp), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l %d0, (%sp) | |
| ; NO-ATOMIC-PIC-NEXT: clr.l (12,%sp) | |
| ; NO-ATOMIC-PIC-NEXT: jsr (__atomic_store_8@PLT,%pc) | |
| ; NO-ATOMIC-PIC-NEXT: adda.l #20, %sp | |
| ; NO-ATOMIC-PIC-NEXT: rts | |
| ; | |
| ; ATOMIC-LABEL: atomic_store_i64_monotonic: | |
| ; ATOMIC: ; %bb.0: | |
| ; ATOMIC-NEXT: suba.l #20, %sp | |
| ; ATOMIC-NEXT: move.l (32,%sp), %d0 | |
| ; ATOMIC-NEXT: move.l %d0, (8,%sp) | |
| ; ATOMIC-NEXT: move.l (28,%sp), %d0 | |
| ; ATOMIC-NEXT: move.l %d0, (4,%sp) | |
| ; ATOMIC-NEXT: move.l (24,%sp), %d0 | |
| ; ATOMIC-NEXT: move.l %d0, (%sp) | |
| ; ATOMIC-NEXT: clr.l (12,%sp) | |
| ; ATOMIC-NEXT: jsr __atomic_store_8 | |
| ; ATOMIC-NEXT: adda.l #20, %sp | |
| ; ATOMIC-NEXT: rts | |
| ; | |
| ; ATOMIC-PIC-LABEL: atomic_store_i64_monotonic: | |
| ; ATOMIC-PIC: ; %bb.0: | |
| ; ATOMIC-PIC-NEXT: suba.l #20, %sp | |
| ; ATOMIC-PIC-NEXT: move.l (32,%sp), %d0 | |
| ; ATOMIC-PIC-NEXT: move.l %d0, (8,%sp) | |
| ; ATOMIC-PIC-NEXT: move.l (28,%sp), %d0 | |
| ; ATOMIC-PIC-NEXT: move.l %d0, (4,%sp) | |
| ; ATOMIC-PIC-NEXT: move.l (24,%sp), %d0 | |
| ; ATOMIC-PIC-NEXT: move.l %d0, (%sp) | |
| ; ATOMIC-PIC-NEXT: clr.l (12,%sp) | |
| ; ATOMIC-PIC-NEXT: jsr (__atomic_store_8@PLT,%pc) | |
| ; ATOMIC-PIC-NEXT: adda.l #20, %sp | |
| ; ATOMIC-PIC-NEXT: rts | |
| store atomic i64 %val, ptr %a monotonic, align 8 | |
| ret void | |
| } | |
| define void @atomic_store_i64_release(ptr %a, i64 %val) nounwind { | |
| ; NO-ATOMIC-LABEL: atomic_store_i64_release: | |
| ; NO-ATOMIC: ; %bb.0: | |
| ; NO-ATOMIC-NEXT: suba.l #20, %sp | |
| ; NO-ATOMIC-NEXT: move.l (32,%sp), %d0 | |
| ; NO-ATOMIC-NEXT: move.l %d0, (8,%sp) | |
| ; NO-ATOMIC-NEXT: move.l (28,%sp), %d0 | |
| ; NO-ATOMIC-NEXT: move.l %d0, (4,%sp) | |
| ; NO-ATOMIC-NEXT: move.l (24,%sp), %d0 | |
| ; NO-ATOMIC-NEXT: move.l %d0, (%sp) | |
| ; NO-ATOMIC-NEXT: move.l #3, (12,%sp) | |
| ; NO-ATOMIC-NEXT: jsr __atomic_store_8 | |
| ; NO-ATOMIC-NEXT: adda.l #20, %sp | |
| ; NO-ATOMIC-NEXT: rts | |
| ; | |
| ; NO-ATOMIC-PIC-LABEL: atomic_store_i64_release: | |
| ; NO-ATOMIC-PIC: ; %bb.0: | |
| ; NO-ATOMIC-PIC-NEXT: suba.l #20, %sp | |
| ; NO-ATOMIC-PIC-NEXT: move.l (32,%sp), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l %d0, (8,%sp) | |
| ; NO-ATOMIC-PIC-NEXT: move.l (28,%sp), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l %d0, (4,%sp) | |
| ; NO-ATOMIC-PIC-NEXT: move.l (24,%sp), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l %d0, (%sp) | |
| ; NO-ATOMIC-PIC-NEXT: move.l #3, (12,%sp) | |
| ; NO-ATOMIC-PIC-NEXT: jsr (__atomic_store_8@PLT,%pc) | |
| ; NO-ATOMIC-PIC-NEXT: adda.l #20, %sp | |
| ; NO-ATOMIC-PIC-NEXT: rts | |
| ; | |
| ; ATOMIC-LABEL: atomic_store_i64_release: | |
| ; ATOMIC: ; %bb.0: | |
| ; ATOMIC-NEXT: suba.l #20, %sp | |
| ; ATOMIC-NEXT: move.l (32,%sp), %d0 | |
| ; ATOMIC-NEXT: move.l %d0, (8,%sp) | |
| ; ATOMIC-NEXT: move.l (28,%sp), %d0 | |
| ; ATOMIC-NEXT: move.l %d0, (4,%sp) | |
| ; ATOMIC-NEXT: move.l (24,%sp), %d0 | |
| ; ATOMIC-NEXT: move.l %d0, (%sp) | |
| ; ATOMIC-NEXT: move.l #3, (12,%sp) | |
| ; ATOMIC-NEXT: jsr __atomic_store_8 | |
| ; ATOMIC-NEXT: adda.l #20, %sp | |
| ; ATOMIC-NEXT: rts | |
| ; | |
| ; ATOMIC-PIC-LABEL: atomic_store_i64_release: | |
| ; ATOMIC-PIC: ; %bb.0: | |
| ; ATOMIC-PIC-NEXT: suba.l #20, %sp | |
| ; ATOMIC-PIC-NEXT: move.l (32,%sp), %d0 | |
| ; ATOMIC-PIC-NEXT: move.l %d0, (8,%sp) | |
| ; ATOMIC-PIC-NEXT: move.l (28,%sp), %d0 | |
| ; ATOMIC-PIC-NEXT: move.l %d0, (4,%sp) | |
| ; ATOMIC-PIC-NEXT: move.l (24,%sp), %d0 | |
| ; ATOMIC-PIC-NEXT: move.l %d0, (%sp) | |
| ; ATOMIC-PIC-NEXT: move.l #3, (12,%sp) | |
| ; ATOMIC-PIC-NEXT: jsr (__atomic_store_8@PLT,%pc) | |
| ; ATOMIC-PIC-NEXT: adda.l #20, %sp | |
| ; ATOMIC-PIC-NEXT: rts | |
| store atomic i64 %val, ptr %a release, align 8 | |
| ret void | |
| } | |
| define void @atomic_store_i64_seq_cst(ptr %a, i64 %val) nounwind { | |
| ; NO-ATOMIC-LABEL: atomic_store_i64_seq_cst: | |
| ; NO-ATOMIC: ; %bb.0: | |
| ; NO-ATOMIC-NEXT: suba.l #20, %sp | |
| ; NO-ATOMIC-NEXT: move.l (32,%sp), %d0 | |
| ; NO-ATOMIC-NEXT: move.l %d0, (8,%sp) | |
| ; NO-ATOMIC-NEXT: move.l (28,%sp), %d0 | |
| ; NO-ATOMIC-NEXT: move.l %d0, (4,%sp) | |
| ; NO-ATOMIC-NEXT: move.l (24,%sp), %d0 | |
| ; NO-ATOMIC-NEXT: move.l %d0, (%sp) | |
| ; NO-ATOMIC-NEXT: move.l #5, (12,%sp) | |
| ; NO-ATOMIC-NEXT: jsr __atomic_store_8 | |
| ; NO-ATOMIC-NEXT: adda.l #20, %sp | |
| ; NO-ATOMIC-NEXT: rts | |
| ; | |
| ; NO-ATOMIC-PIC-LABEL: atomic_store_i64_seq_cst: | |
| ; NO-ATOMIC-PIC: ; %bb.0: | |
| ; NO-ATOMIC-PIC-NEXT: suba.l #20, %sp | |
| ; NO-ATOMIC-PIC-NEXT: move.l (32,%sp), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l %d0, (8,%sp) | |
| ; NO-ATOMIC-PIC-NEXT: move.l (28,%sp), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l %d0, (4,%sp) | |
| ; NO-ATOMIC-PIC-NEXT: move.l (24,%sp), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l %d0, (%sp) | |
| ; NO-ATOMIC-PIC-NEXT: move.l #5, (12,%sp) | |
| ; NO-ATOMIC-PIC-NEXT: jsr (__atomic_store_8@PLT,%pc) | |
| ; NO-ATOMIC-PIC-NEXT: adda.l #20, %sp | |
| ; NO-ATOMIC-PIC-NEXT: rts | |
| ; | |
| ; ATOMIC-LABEL: atomic_store_i64_seq_cst: | |
| ; ATOMIC: ; %bb.0: | |
| ; ATOMIC-NEXT: suba.l #20, %sp | |
| ; ATOMIC-NEXT: move.l (32,%sp), %d0 | |
| ; ATOMIC-NEXT: move.l %d0, (8,%sp) | |
| ; ATOMIC-NEXT: move.l (28,%sp), %d0 | |
| ; ATOMIC-NEXT: move.l %d0, (4,%sp) | |
| ; ATOMIC-NEXT: move.l (24,%sp), %d0 | |
| ; ATOMIC-NEXT: move.l %d0, (%sp) | |
| ; ATOMIC-NEXT: move.l #5, (12,%sp) | |
| ; ATOMIC-NEXT: jsr __atomic_store_8 | |
| ; ATOMIC-NEXT: adda.l #20, %sp | |
| ; ATOMIC-NEXT: rts | |
| ; | |
| ; ATOMIC-PIC-LABEL: atomic_store_i64_seq_cst: | |
| ; ATOMIC-PIC: ; %bb.0: | |
| ; ATOMIC-PIC-NEXT: suba.l #20, %sp | |
| ; ATOMIC-PIC-NEXT: move.l (32,%sp), %d0 | |
| ; ATOMIC-PIC-NEXT: move.l %d0, (8,%sp) | |
| ; ATOMIC-PIC-NEXT: move.l (28,%sp), %d0 | |
| ; ATOMIC-PIC-NEXT: move.l %d0, (4,%sp) | |
| ; ATOMIC-PIC-NEXT: move.l (24,%sp), %d0 | |
| ; ATOMIC-PIC-NEXT: move.l %d0, (%sp) | |
| ; ATOMIC-PIC-NEXT: move.l #5, (12,%sp) | |
| ; ATOMIC-PIC-NEXT: jsr (__atomic_store_8@PLT,%pc) | |
| ; ATOMIC-PIC-NEXT: adda.l #20, %sp | |
| ; ATOMIC-PIC-NEXT: rts | |
| store atomic i64 %val, ptr %a seq_cst, align 8 | |
| ret void | |
| } | |
| define void @store_arid(ptr nonnull align 4 %a) { | |
| ; NO-ATOMIC-LABEL: store_arid: | |
| ; NO-ATOMIC: .cfi_startproc | |
| ; NO-ATOMIC-NEXT: ; %bb.0: ; %start | |
| ; NO-ATOMIC-NEXT: moveq #1, %d0 | |
| ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-NEXT: move.l %d0, (32,%a0) | |
| ; NO-ATOMIC-NEXT: rts | |
| ; | |
| ; NO-ATOMIC-PIC-LABEL: store_arid: | |
| ; NO-ATOMIC-PIC: .cfi_startproc | |
| ; NO-ATOMIC-PIC-NEXT: ; %bb.0: ; %start | |
| ; NO-ATOMIC-PIC-NEXT: moveq #1, %d0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l %d0, (32,%a0) | |
| ; NO-ATOMIC-PIC-NEXT: rts | |
| ; | |
| ; ATOMIC-LABEL: store_arid: | |
| ; ATOMIC: .cfi_startproc | |
| ; ATOMIC-NEXT: ; %bb.0: ; %start | |
| ; ATOMIC-NEXT: moveq #1, %d0 | |
| ; ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-NEXT: move.l %d0, (32,%a0) | |
| ; ATOMIC-NEXT: rts | |
| ; | |
| ; ATOMIC-PIC-LABEL: store_arid: | |
| ; ATOMIC-PIC: .cfi_startproc | |
| ; ATOMIC-PIC-NEXT: ; %bb.0: ; %start | |
| ; ATOMIC-PIC-NEXT: moveq #1, %d0 | |
| ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-PIC-NEXT: move.l %d0, (32,%a0) | |
| ; ATOMIC-PIC-NEXT: rts | |
| start: | |
| %1 = getelementptr inbounds i32, ptr %a, i32 8 | |
| store atomic i32 1, ptr %1 seq_cst, align 4 | |
| br label %exit | |
| exit: ; preds = %start | |
| ret void | |
| } | |
| define i32 @load_arid(ptr nonnull align 4 %a) { | |
| ; NO-ATOMIC-LABEL: load_arid: | |
| ; NO-ATOMIC: .cfi_startproc | |
| ; NO-ATOMIC-NEXT: ; %bb.0: ; %start | |
| ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-NEXT: move.l (32,%a0), %d0 | |
| ; NO-ATOMIC-NEXT: rts | |
| ; | |
| ; NO-ATOMIC-PIC-LABEL: load_arid: | |
| ; NO-ATOMIC-PIC: .cfi_startproc | |
| ; NO-ATOMIC-PIC-NEXT: ; %bb.0: ; %start | |
| ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; NO-ATOMIC-PIC-NEXT: move.l (32,%a0), %d0 | |
| ; NO-ATOMIC-PIC-NEXT: rts | |
| ; | |
| ; ATOMIC-LABEL: load_arid: | |
| ; ATOMIC: .cfi_startproc | |
| ; ATOMIC-NEXT: ; %bb.0: ; %start | |
| ; ATOMIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-NEXT: move.l (32,%a0), %d0 | |
| ; ATOMIC-NEXT: rts | |
| ; | |
| ; ATOMIC-PIC-LABEL: load_arid: | |
| ; ATOMIC-PIC: .cfi_startproc | |
| ; ATOMIC-PIC-NEXT: ; %bb.0: ; %start | |
| ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 | |
| ; ATOMIC-PIC-NEXT: move.l (32,%a0), %d0 | |
| ; ATOMIC-PIC-NEXT: rts | |
| start: | |
| %1 = getelementptr inbounds i32, ptr %a, i32 8 | |
| %2 = load atomic i32, ptr %1 seq_cst, align 4 | |
| br label %exit | |
| exit: ; preds = %start | |
| ret i32 %2 | |
| } |