1*4cce1074Sknickish; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*4cce1074Sknickish; RUN: llc %s -o - -mtriple=m68k -mcpu=M68000 -verify-machineinstrs --code-model=large | FileCheck %s --check-prefix=NO-ATOMIC 3*4cce1074Sknickish; RUN: llc %s -o - -mtriple=m68k -mcpu=M68010 -verify-machineinstrs --code-model=large | FileCheck %s --check-prefix=NO-ATOMIC 4*4cce1074Sknickish; RUN: llc %s -o - -mtriple=m68k -mcpu=M68000 -verify-machineinstrs --code-model=large --relocation-model=pic | FileCheck %s --check-prefix=NO-ATOMIC-PIC 5*4cce1074Sknickish; RUN: llc %s -o - -mtriple=m68k -mcpu=M68010 -verify-machineinstrs --code-model=large --relocation-model=pic | FileCheck %s --check-prefix=NO-ATOMIC-PIC 6*4cce1074Sknickish; RUN: llc %s -o - -mtriple=m68k -mcpu=M68020 -verify-machineinstrs --code-model=large | FileCheck %s --check-prefix=ATOMIC 7*4cce1074Sknickish; RUN: llc %s -o - -mtriple=m68k -mcpu=M68030 -verify-machineinstrs --code-model=large | FileCheck %s --check-prefix=ATOMIC 8*4cce1074Sknickish; RUN: llc %s -o - -mtriple=m68k -mcpu=M68040 -verify-machineinstrs --code-model=large | FileCheck %s --check-prefix=ATOMIC 9*4cce1074Sknickish; RUN: llc %s -o - -mtriple=m68k -mcpu=M68020 -verify-machineinstrs --code-model=large --relocation-model=pic | FileCheck %s --check-prefix=ATOMIC-PIC 10*4cce1074Sknickish; RUN: llc %s -o - -mtriple=m68k -mcpu=M68030 -verify-machineinstrs --code-model=large --relocation-model=pic | FileCheck %s --check-prefix=ATOMIC-PIC 11*4cce1074Sknickish; RUN: llc %s -o - -mtriple=m68k -mcpu=M68040 -verify-machineinstrs --code-model=large --relocation-model=pic | FileCheck %s --check-prefix=ATOMIC-PIC 12*4cce1074Sknickish 13*4cce1074Sknickishdefine i8 @atomicrmw_add_i8(i8 %val, ptr %ptr) { 14*4cce1074Sknickish; NO-ATOMIC-LABEL: atomicrmw_add_i8: 15*4cce1074Sknickish; NO-ATOMIC: .cfi_startproc 16*4cce1074Sknickish; NO-ATOMIC-NEXT: ; %bb.0: 17*4cce1074Sknickish; NO-ATOMIC-NEXT: suba.l #12, %sp 18*4cce1074Sknickish; NO-ATOMIC-NEXT: .cfi_def_cfa_offset -16 19*4cce1074Sknickish; NO-ATOMIC-NEXT: move.b (19,%sp), %d0 20*4cce1074Sknickish; NO-ATOMIC-NEXT: and.l #255, %d0 21*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l %d0, (4,%sp) 22*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l (20,%sp), (%sp) 23*4cce1074Sknickish; NO-ATOMIC-NEXT: jsr __sync_fetch_and_add_1 24*4cce1074Sknickish; NO-ATOMIC-NEXT: adda.l #12, %sp 25*4cce1074Sknickish; NO-ATOMIC-NEXT: rts 26*4cce1074Sknickish; 27*4cce1074Sknickish; NO-ATOMIC-PIC-LABEL: atomicrmw_add_i8: 28*4cce1074Sknickish; NO-ATOMIC-PIC: .cfi_startproc 29*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: ; %bb.0: 30*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: suba.l #12, %sp 31*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: .cfi_def_cfa_offset -16 32*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.b (19,%sp), %d0 33*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: and.l #255, %d0 34*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l %d0, (4,%sp) 35*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l (20,%sp), (%sp) 36*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: jsr (__sync_fetch_and_add_1@PLT,%pc) 37*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: adda.l #12, %sp 38*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: rts 39*4cce1074Sknickish; 40*4cce1074Sknickish; ATOMIC-LABEL: atomicrmw_add_i8: 41*4cce1074Sknickish; ATOMIC: .cfi_startproc 42*4cce1074Sknickish; ATOMIC-NEXT: ; %bb.0: 43*4cce1074Sknickish; ATOMIC-NEXT: suba.l #8, %sp 44*4cce1074Sknickish; ATOMIC-NEXT: .cfi_def_cfa_offset -12 45*4cce1074Sknickish; ATOMIC-NEXT: movem.l %d2-%d3, (0,%sp) ; 12-byte Folded Spill 46*4cce1074Sknickish; ATOMIC-NEXT: move.b (15,%sp), %d1 47*4cce1074Sknickish; ATOMIC-NEXT: move.l (16,%sp), %a0 48*4cce1074Sknickish; ATOMIC-NEXT: move.b (%a0), %d2 49*4cce1074Sknickish; ATOMIC-NEXT: move.b %d2, %d0 50*4cce1074Sknickish; ATOMIC-NEXT: .LBB0_1: ; %atomicrmw.start 51*4cce1074Sknickish; ATOMIC-NEXT: ; =>This Inner Loop Header: Depth=1 52*4cce1074Sknickish; ATOMIC-NEXT: move.b %d2, %d3 53*4cce1074Sknickish; ATOMIC-NEXT: add.b %d1, %d3 54*4cce1074Sknickish; ATOMIC-NEXT: cas.b %d0, %d3, (%a0) 55*4cce1074Sknickish; ATOMIC-NEXT: move.b %d0, %d3 56*4cce1074Sknickish; ATOMIC-NEXT: sub.b %d2, %d3 57*4cce1074Sknickish; ATOMIC-NEXT: seq %d2 58*4cce1074Sknickish; ATOMIC-NEXT: sub.b #1, %d2 59*4cce1074Sknickish; ATOMIC-NEXT: move.b %d0, %d2 60*4cce1074Sknickish; ATOMIC-NEXT: bne .LBB0_1 61*4cce1074Sknickish; ATOMIC-NEXT: ; %bb.2: ; %atomicrmw.end 62*4cce1074Sknickish; ATOMIC-NEXT: movem.l (0,%sp), %d2-%d3 ; 12-byte Folded Reload 63*4cce1074Sknickish; ATOMIC-NEXT: adda.l #8, %sp 64*4cce1074Sknickish; ATOMIC-NEXT: rts 65*4cce1074Sknickish; 66*4cce1074Sknickish; ATOMIC-PIC-LABEL: atomicrmw_add_i8: 67*4cce1074Sknickish; ATOMIC-PIC: .cfi_startproc 68*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; %bb.0: 69*4cce1074Sknickish; ATOMIC-PIC-NEXT: suba.l #8, %sp 70*4cce1074Sknickish; ATOMIC-PIC-NEXT: .cfi_def_cfa_offset -12 71*4cce1074Sknickish; ATOMIC-PIC-NEXT: movem.l %d2-%d3, (0,%sp) ; 12-byte Folded Spill 72*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.b (15,%sp), %d1 73*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l (16,%sp), %a0 74*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.b (%a0), %d2 75*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.b %d2, %d0 76*4cce1074Sknickish; ATOMIC-PIC-NEXT: .LBB0_1: ; %atomicrmw.start 77*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; =>This Inner Loop Header: Depth=1 78*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.b %d2, %d3 79*4cce1074Sknickish; ATOMIC-PIC-NEXT: add.b %d1, %d3 80*4cce1074Sknickish; ATOMIC-PIC-NEXT: cas.b %d0, %d3, (%a0) 81*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.b %d0, %d3 82*4cce1074Sknickish; ATOMIC-PIC-NEXT: sub.b %d2, %d3 83*4cce1074Sknickish; ATOMIC-PIC-NEXT: seq %d2 84*4cce1074Sknickish; ATOMIC-PIC-NEXT: sub.b #1, %d2 85*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.b %d0, %d2 86*4cce1074Sknickish; ATOMIC-PIC-NEXT: bne .LBB0_1 87*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; %bb.2: ; %atomicrmw.end 88*4cce1074Sknickish; ATOMIC-PIC-NEXT: movem.l (0,%sp), %d2-%d3 ; 12-byte Folded Reload 89*4cce1074Sknickish; ATOMIC-PIC-NEXT: adda.l #8, %sp 90*4cce1074Sknickish; ATOMIC-PIC-NEXT: rts 91*4cce1074Sknickish %old = atomicrmw add ptr %ptr, i8 %val monotonic 92*4cce1074Sknickish ret i8 %old 93*4cce1074Sknickish} 94*4cce1074Sknickish 95*4cce1074Sknickishdefine i16 @atomicrmw_sub_i16(i16 %val, ptr %ptr) { 96*4cce1074Sknickish; NO-ATOMIC-LABEL: atomicrmw_sub_i16: 97*4cce1074Sknickish; NO-ATOMIC: .cfi_startproc 98*4cce1074Sknickish; NO-ATOMIC-NEXT: ; %bb.0: 99*4cce1074Sknickish; NO-ATOMIC-NEXT: suba.l #12, %sp 100*4cce1074Sknickish; NO-ATOMIC-NEXT: .cfi_def_cfa_offset -16 101*4cce1074Sknickish; NO-ATOMIC-NEXT: move.w (18,%sp), %d0 102*4cce1074Sknickish; NO-ATOMIC-NEXT: and.l #65535, %d0 103*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l %d0, (4,%sp) 104*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l (20,%sp), (%sp) 105*4cce1074Sknickish; NO-ATOMIC-NEXT: jsr __sync_fetch_and_sub_2 106*4cce1074Sknickish; NO-ATOMIC-NEXT: adda.l #12, %sp 107*4cce1074Sknickish; NO-ATOMIC-NEXT: rts 108*4cce1074Sknickish; 109*4cce1074Sknickish; NO-ATOMIC-PIC-LABEL: atomicrmw_sub_i16: 110*4cce1074Sknickish; NO-ATOMIC-PIC: .cfi_startproc 111*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: ; %bb.0: 112*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: suba.l #12, %sp 113*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: .cfi_def_cfa_offset -16 114*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.w (18,%sp), %d0 115*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: and.l #65535, %d0 116*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l %d0, (4,%sp) 117*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l (20,%sp), (%sp) 118*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: jsr (__sync_fetch_and_sub_2@PLT,%pc) 119*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: adda.l #12, %sp 120*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: rts 121*4cce1074Sknickish; 122*4cce1074Sknickish; ATOMIC-LABEL: atomicrmw_sub_i16: 123*4cce1074Sknickish; ATOMIC: .cfi_startproc 124*4cce1074Sknickish; ATOMIC-NEXT: ; %bb.0: 125*4cce1074Sknickish; ATOMIC-NEXT: suba.l #8, %sp 126*4cce1074Sknickish; ATOMIC-NEXT: .cfi_def_cfa_offset -12 127*4cce1074Sknickish; ATOMIC-NEXT: movem.l %d2-%d3, (0,%sp) ; 12-byte Folded Spill 128*4cce1074Sknickish; ATOMIC-NEXT: move.w (14,%sp), %d1 129*4cce1074Sknickish; ATOMIC-NEXT: move.l (16,%sp), %a0 130*4cce1074Sknickish; ATOMIC-NEXT: move.w (%a0), %d2 131*4cce1074Sknickish; ATOMIC-NEXT: move.w %d2, %d0 132*4cce1074Sknickish; ATOMIC-NEXT: .LBB1_1: ; %atomicrmw.start 133*4cce1074Sknickish; ATOMIC-NEXT: ; =>This Inner Loop Header: Depth=1 134*4cce1074Sknickish; ATOMIC-NEXT: move.w %d2, %d3 135*4cce1074Sknickish; ATOMIC-NEXT: sub.w %d1, %d3 136*4cce1074Sknickish; ATOMIC-NEXT: cas.w %d0, %d3, (%a0) 137*4cce1074Sknickish; ATOMIC-NEXT: move.w %d0, %d3 138*4cce1074Sknickish; ATOMIC-NEXT: sub.w %d2, %d3 139*4cce1074Sknickish; ATOMIC-NEXT: seq %d2 140*4cce1074Sknickish; ATOMIC-NEXT: sub.b #1, %d2 141*4cce1074Sknickish; ATOMIC-NEXT: move.w %d0, %d2 142*4cce1074Sknickish; ATOMIC-NEXT: bne .LBB1_1 143*4cce1074Sknickish; ATOMIC-NEXT: ; %bb.2: ; %atomicrmw.end 144*4cce1074Sknickish; ATOMIC-NEXT: movem.l (0,%sp), %d2-%d3 ; 12-byte Folded Reload 145*4cce1074Sknickish; ATOMIC-NEXT: adda.l #8, %sp 146*4cce1074Sknickish; ATOMIC-NEXT: rts 147*4cce1074Sknickish; 148*4cce1074Sknickish; ATOMIC-PIC-LABEL: atomicrmw_sub_i16: 149*4cce1074Sknickish; ATOMIC-PIC: .cfi_startproc 150*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; %bb.0: 151*4cce1074Sknickish; ATOMIC-PIC-NEXT: suba.l #8, %sp 152*4cce1074Sknickish; ATOMIC-PIC-NEXT: .cfi_def_cfa_offset -12 153*4cce1074Sknickish; ATOMIC-PIC-NEXT: movem.l %d2-%d3, (0,%sp) ; 12-byte Folded Spill 154*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.w (14,%sp), %d1 155*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l (16,%sp), %a0 156*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.w (%a0), %d2 157*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.w %d2, %d0 158*4cce1074Sknickish; ATOMIC-PIC-NEXT: .LBB1_1: ; %atomicrmw.start 159*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; =>This Inner Loop Header: Depth=1 160*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.w %d2, %d3 161*4cce1074Sknickish; ATOMIC-PIC-NEXT: sub.w %d1, %d3 162*4cce1074Sknickish; ATOMIC-PIC-NEXT: cas.w %d0, %d3, (%a0) 163*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.w %d0, %d3 164*4cce1074Sknickish; ATOMIC-PIC-NEXT: sub.w %d2, %d3 165*4cce1074Sknickish; ATOMIC-PIC-NEXT: seq %d2 166*4cce1074Sknickish; ATOMIC-PIC-NEXT: sub.b #1, %d2 167*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.w %d0, %d2 168*4cce1074Sknickish; ATOMIC-PIC-NEXT: bne .LBB1_1 169*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; %bb.2: ; %atomicrmw.end 170*4cce1074Sknickish; ATOMIC-PIC-NEXT: movem.l (0,%sp), %d2-%d3 ; 12-byte Folded Reload 171*4cce1074Sknickish; ATOMIC-PIC-NEXT: adda.l #8, %sp 172*4cce1074Sknickish; ATOMIC-PIC-NEXT: rts 173*4cce1074Sknickish %old = atomicrmw sub ptr %ptr, i16 %val acquire 174*4cce1074Sknickish ret i16 %old 175*4cce1074Sknickish} 176*4cce1074Sknickish 177*4cce1074Sknickishdefine i32 @atomicrmw_and_i32(i32 %val, ptr %ptr) { 178*4cce1074Sknickish; NO-ATOMIC-LABEL: atomicrmw_and_i32: 179*4cce1074Sknickish; NO-ATOMIC: .cfi_startproc 180*4cce1074Sknickish; NO-ATOMIC-NEXT: ; %bb.0: 181*4cce1074Sknickish; NO-ATOMIC-NEXT: suba.l #12, %sp 182*4cce1074Sknickish; NO-ATOMIC-NEXT: .cfi_def_cfa_offset -16 183*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l (16,%sp), (4,%sp) 184*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l (20,%sp), (%sp) 185*4cce1074Sknickish; NO-ATOMIC-NEXT: jsr __sync_fetch_and_and_4 186*4cce1074Sknickish; NO-ATOMIC-NEXT: adda.l #12, %sp 187*4cce1074Sknickish; NO-ATOMIC-NEXT: rts 188*4cce1074Sknickish; 189*4cce1074Sknickish; NO-ATOMIC-PIC-LABEL: atomicrmw_and_i32: 190*4cce1074Sknickish; NO-ATOMIC-PIC: .cfi_startproc 191*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: ; %bb.0: 192*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: suba.l #12, %sp 193*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: .cfi_def_cfa_offset -16 194*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l (16,%sp), (4,%sp) 195*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l (20,%sp), (%sp) 196*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: jsr (__sync_fetch_and_and_4@PLT,%pc) 197*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: adda.l #12, %sp 198*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: rts 199*4cce1074Sknickish; 200*4cce1074Sknickish; ATOMIC-LABEL: atomicrmw_and_i32: 201*4cce1074Sknickish; ATOMIC: .cfi_startproc 202*4cce1074Sknickish; ATOMIC-NEXT: ; %bb.0: 203*4cce1074Sknickish; ATOMIC-NEXT: suba.l #8, %sp 204*4cce1074Sknickish; ATOMIC-NEXT: .cfi_def_cfa_offset -12 205*4cce1074Sknickish; ATOMIC-NEXT: movem.l %d2-%d3, (0,%sp) ; 12-byte Folded Spill 206*4cce1074Sknickish; ATOMIC-NEXT: move.l (12,%sp), %d1 207*4cce1074Sknickish; ATOMIC-NEXT: move.l (16,%sp), %a0 208*4cce1074Sknickish; ATOMIC-NEXT: move.l (%a0), %d2 209*4cce1074Sknickish; ATOMIC-NEXT: move.l %d2, %d0 210*4cce1074Sknickish; ATOMIC-NEXT: .LBB2_1: ; %atomicrmw.start 211*4cce1074Sknickish; ATOMIC-NEXT: ; =>This Inner Loop Header: Depth=1 212*4cce1074Sknickish; ATOMIC-NEXT: move.l %d2, %d3 213*4cce1074Sknickish; ATOMIC-NEXT: and.l %d1, %d3 214*4cce1074Sknickish; ATOMIC-NEXT: cas.l %d0, %d3, (%a0) 215*4cce1074Sknickish; ATOMIC-NEXT: move.l %d0, %d3 216*4cce1074Sknickish; ATOMIC-NEXT: sub.l %d2, %d3 217*4cce1074Sknickish; ATOMIC-NEXT: seq %d2 218*4cce1074Sknickish; ATOMIC-NEXT: sub.b #1, %d2 219*4cce1074Sknickish; ATOMIC-NEXT: move.l %d0, %d2 220*4cce1074Sknickish; ATOMIC-NEXT: bne .LBB2_1 221*4cce1074Sknickish; ATOMIC-NEXT: ; %bb.2: ; %atomicrmw.end 222*4cce1074Sknickish; ATOMIC-NEXT: movem.l (0,%sp), %d2-%d3 ; 12-byte Folded Reload 223*4cce1074Sknickish; ATOMIC-NEXT: adda.l #8, %sp 224*4cce1074Sknickish; ATOMIC-NEXT: rts 225*4cce1074Sknickish; 226*4cce1074Sknickish; ATOMIC-PIC-LABEL: atomicrmw_and_i32: 227*4cce1074Sknickish; ATOMIC-PIC: .cfi_startproc 228*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; %bb.0: 229*4cce1074Sknickish; ATOMIC-PIC-NEXT: suba.l #8, %sp 230*4cce1074Sknickish; ATOMIC-PIC-NEXT: .cfi_def_cfa_offset -12 231*4cce1074Sknickish; ATOMIC-PIC-NEXT: movem.l %d2-%d3, (0,%sp) ; 12-byte Folded Spill 232*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l (12,%sp), %d1 233*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l (16,%sp), %a0 234*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l (%a0), %d2 235*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l %d2, %d0 236*4cce1074Sknickish; ATOMIC-PIC-NEXT: .LBB2_1: ; %atomicrmw.start 237*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; =>This Inner Loop Header: Depth=1 238*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l %d2, %d3 239*4cce1074Sknickish; ATOMIC-PIC-NEXT: and.l %d1, %d3 240*4cce1074Sknickish; ATOMIC-PIC-NEXT: cas.l %d0, %d3, (%a0) 241*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l %d0, %d3 242*4cce1074Sknickish; ATOMIC-PIC-NEXT: sub.l %d2, %d3 243*4cce1074Sknickish; ATOMIC-PIC-NEXT: seq %d2 244*4cce1074Sknickish; ATOMIC-PIC-NEXT: sub.b #1, %d2 245*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l %d0, %d2 246*4cce1074Sknickish; ATOMIC-PIC-NEXT: bne .LBB2_1 247*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; %bb.2: ; %atomicrmw.end 248*4cce1074Sknickish; ATOMIC-PIC-NEXT: movem.l (0,%sp), %d2-%d3 ; 12-byte Folded Reload 249*4cce1074Sknickish; ATOMIC-PIC-NEXT: adda.l #8, %sp 250*4cce1074Sknickish; ATOMIC-PIC-NEXT: rts 251*4cce1074Sknickish %old = atomicrmw and ptr %ptr, i32 %val seq_cst 252*4cce1074Sknickish ret i32 %old 253*4cce1074Sknickish} 254*4cce1074Sknickish 255*4cce1074Sknickishdefine i64 @atomicrmw_xor_i64(i64 %val, ptr %ptr) { 256*4cce1074Sknickish; NO-ATOMIC-LABEL: atomicrmw_xor_i64: 257*4cce1074Sknickish; NO-ATOMIC: .cfi_startproc 258*4cce1074Sknickish; NO-ATOMIC-NEXT: ; %bb.0: 259*4cce1074Sknickish; NO-ATOMIC-NEXT: suba.l #20, %sp 260*4cce1074Sknickish; NO-ATOMIC-NEXT: .cfi_def_cfa_offset -24 261*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l #3, (12,%sp) 262*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l (28,%sp), (8,%sp) 263*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l (24,%sp), (4,%sp) 264*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l (32,%sp), (%sp) 265*4cce1074Sknickish; NO-ATOMIC-NEXT: jsr __atomic_fetch_xor_8 266*4cce1074Sknickish; NO-ATOMIC-NEXT: adda.l #20, %sp 267*4cce1074Sknickish; NO-ATOMIC-NEXT: rts 268*4cce1074Sknickish; 269*4cce1074Sknickish; NO-ATOMIC-PIC-LABEL: atomicrmw_xor_i64: 270*4cce1074Sknickish; NO-ATOMIC-PIC: .cfi_startproc 271*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: ; %bb.0: 272*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: suba.l #20, %sp 273*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: .cfi_def_cfa_offset -24 274*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l #3, (12,%sp) 275*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l (28,%sp), (8,%sp) 276*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l (24,%sp), (4,%sp) 277*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l (32,%sp), (%sp) 278*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: jsr (__atomic_fetch_xor_8@PLT,%pc) 279*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: adda.l #20, %sp 280*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: rts 281*4cce1074Sknickish; 282*4cce1074Sknickish; ATOMIC-LABEL: atomicrmw_xor_i64: 283*4cce1074Sknickish; ATOMIC: .cfi_startproc 284*4cce1074Sknickish; ATOMIC-NEXT: ; %bb.0: 285*4cce1074Sknickish; ATOMIC-NEXT: suba.l #20, %sp 286*4cce1074Sknickish; ATOMIC-NEXT: .cfi_def_cfa_offset -24 287*4cce1074Sknickish; ATOMIC-NEXT: move.l #3, (12,%sp) 288*4cce1074Sknickish; ATOMIC-NEXT: move.l (28,%sp), (8,%sp) 289*4cce1074Sknickish; ATOMIC-NEXT: move.l (24,%sp), (4,%sp) 290*4cce1074Sknickish; ATOMIC-NEXT: move.l (32,%sp), (%sp) 291*4cce1074Sknickish; ATOMIC-NEXT: jsr __atomic_fetch_xor_8 292*4cce1074Sknickish; ATOMIC-NEXT: adda.l #20, %sp 293*4cce1074Sknickish; ATOMIC-NEXT: rts 294*4cce1074Sknickish; 295*4cce1074Sknickish; ATOMIC-PIC-LABEL: atomicrmw_xor_i64: 296*4cce1074Sknickish; ATOMIC-PIC: .cfi_startproc 297*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; %bb.0: 298*4cce1074Sknickish; ATOMIC-PIC-NEXT: suba.l #20, %sp 299*4cce1074Sknickish; ATOMIC-PIC-NEXT: .cfi_def_cfa_offset -24 300*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l #3, (12,%sp) 301*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l (28,%sp), (8,%sp) 302*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l (24,%sp), (4,%sp) 303*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l (32,%sp), (%sp) 304*4cce1074Sknickish; ATOMIC-PIC-NEXT: jsr (__atomic_fetch_xor_8@PLT,%pc) 305*4cce1074Sknickish; ATOMIC-PIC-NEXT: adda.l #20, %sp 306*4cce1074Sknickish; ATOMIC-PIC-NEXT: rts 307*4cce1074Sknickish %old = atomicrmw xor ptr %ptr, i64 %val release 308*4cce1074Sknickish ret i64 %old 309*4cce1074Sknickish} 310*4cce1074Sknickish 311*4cce1074Sknickishdefine i8 @atomicrmw_or_i8(i8 %val, ptr %ptr) { 312*4cce1074Sknickish; NO-ATOMIC-LABEL: atomicrmw_or_i8: 313*4cce1074Sknickish; NO-ATOMIC: .cfi_startproc 314*4cce1074Sknickish; NO-ATOMIC-NEXT: ; %bb.0: 315*4cce1074Sknickish; NO-ATOMIC-NEXT: suba.l #12, %sp 316*4cce1074Sknickish; NO-ATOMIC-NEXT: .cfi_def_cfa_offset -16 317*4cce1074Sknickish; NO-ATOMIC-NEXT: move.b (19,%sp), %d0 318*4cce1074Sknickish; NO-ATOMIC-NEXT: and.l #255, %d0 319*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l %d0, (4,%sp) 320*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l (20,%sp), (%sp) 321*4cce1074Sknickish; NO-ATOMIC-NEXT: jsr __sync_fetch_and_or_1 322*4cce1074Sknickish; NO-ATOMIC-NEXT: adda.l #12, %sp 323*4cce1074Sknickish; NO-ATOMIC-NEXT: rts 324*4cce1074Sknickish; 325*4cce1074Sknickish; NO-ATOMIC-PIC-LABEL: atomicrmw_or_i8: 326*4cce1074Sknickish; NO-ATOMIC-PIC: .cfi_startproc 327*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: ; %bb.0: 328*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: suba.l #12, %sp 329*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: .cfi_def_cfa_offset -16 330*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.b (19,%sp), %d0 331*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: and.l #255, %d0 332*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l %d0, (4,%sp) 333*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l (20,%sp), (%sp) 334*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: jsr (__sync_fetch_and_or_1@PLT,%pc) 335*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: adda.l #12, %sp 336*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: rts 337*4cce1074Sknickish; 338*4cce1074Sknickish; ATOMIC-LABEL: atomicrmw_or_i8: 339*4cce1074Sknickish; ATOMIC: .cfi_startproc 340*4cce1074Sknickish; ATOMIC-NEXT: ; %bb.0: 341*4cce1074Sknickish; ATOMIC-NEXT: suba.l #8, %sp 342*4cce1074Sknickish; ATOMIC-NEXT: .cfi_def_cfa_offset -12 343*4cce1074Sknickish; ATOMIC-NEXT: movem.l %d2-%d3, (0,%sp) ; 12-byte Folded Spill 344*4cce1074Sknickish; ATOMIC-NEXT: move.b (15,%sp), %d1 345*4cce1074Sknickish; ATOMIC-NEXT: move.l (16,%sp), %a0 346*4cce1074Sknickish; ATOMIC-NEXT: move.b (%a0), %d2 347*4cce1074Sknickish; ATOMIC-NEXT: move.b %d2, %d0 348*4cce1074Sknickish; ATOMIC-NEXT: .LBB4_1: ; %atomicrmw.start 349*4cce1074Sknickish; ATOMIC-NEXT: ; =>This Inner Loop Header: Depth=1 350*4cce1074Sknickish; ATOMIC-NEXT: move.b %d2, %d3 351*4cce1074Sknickish; ATOMIC-NEXT: or.b %d1, %d3 352*4cce1074Sknickish; ATOMIC-NEXT: cas.b %d0, %d3, (%a0) 353*4cce1074Sknickish; ATOMIC-NEXT: move.b %d0, %d3 354*4cce1074Sknickish; ATOMIC-NEXT: sub.b %d2, %d3 355*4cce1074Sknickish; ATOMIC-NEXT: seq %d2 356*4cce1074Sknickish; ATOMIC-NEXT: sub.b #1, %d2 357*4cce1074Sknickish; ATOMIC-NEXT: move.b %d0, %d2 358*4cce1074Sknickish; ATOMIC-NEXT: bne .LBB4_1 359*4cce1074Sknickish; ATOMIC-NEXT: ; %bb.2: ; %atomicrmw.end 360*4cce1074Sknickish; ATOMIC-NEXT: movem.l (0,%sp), %d2-%d3 ; 12-byte Folded Reload 361*4cce1074Sknickish; ATOMIC-NEXT: adda.l #8, %sp 362*4cce1074Sknickish; ATOMIC-NEXT: rts 363*4cce1074Sknickish; 364*4cce1074Sknickish; ATOMIC-PIC-LABEL: atomicrmw_or_i8: 365*4cce1074Sknickish; ATOMIC-PIC: .cfi_startproc 366*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; %bb.0: 367*4cce1074Sknickish; ATOMIC-PIC-NEXT: suba.l #8, %sp 368*4cce1074Sknickish; ATOMIC-PIC-NEXT: .cfi_def_cfa_offset -12 369*4cce1074Sknickish; ATOMIC-PIC-NEXT: movem.l %d2-%d3, (0,%sp) ; 12-byte Folded Spill 370*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.b (15,%sp), %d1 371*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l (16,%sp), %a0 372*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.b (%a0), %d2 373*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.b %d2, %d0 374*4cce1074Sknickish; ATOMIC-PIC-NEXT: .LBB4_1: ; %atomicrmw.start 375*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; =>This Inner Loop Header: Depth=1 376*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.b %d2, %d3 377*4cce1074Sknickish; ATOMIC-PIC-NEXT: or.b %d1, %d3 378*4cce1074Sknickish; ATOMIC-PIC-NEXT: cas.b %d0, %d3, (%a0) 379*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.b %d0, %d3 380*4cce1074Sknickish; ATOMIC-PIC-NEXT: sub.b %d2, %d3 381*4cce1074Sknickish; ATOMIC-PIC-NEXT: seq %d2 382*4cce1074Sknickish; ATOMIC-PIC-NEXT: sub.b #1, %d2 383*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.b %d0, %d2 384*4cce1074Sknickish; ATOMIC-PIC-NEXT: bne .LBB4_1 385*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; %bb.2: ; %atomicrmw.end 386*4cce1074Sknickish; ATOMIC-PIC-NEXT: movem.l (0,%sp), %d2-%d3 ; 12-byte Folded Reload 387*4cce1074Sknickish; ATOMIC-PIC-NEXT: adda.l #8, %sp 388*4cce1074Sknickish; ATOMIC-PIC-NEXT: rts 389*4cce1074Sknickish %old = atomicrmw or ptr %ptr, i8 %val monotonic 390*4cce1074Sknickish ret i8 %old 391*4cce1074Sknickish} 392*4cce1074Sknickish 393*4cce1074Sknickishdefine i16 @atmoicrmw_nand_i16(i16 %val, ptr %ptr) { 394*4cce1074Sknickish; NO-ATOMIC-LABEL: atmoicrmw_nand_i16: 395*4cce1074Sknickish; NO-ATOMIC: .cfi_startproc 396*4cce1074Sknickish; NO-ATOMIC-NEXT: ; %bb.0: 397*4cce1074Sknickish; NO-ATOMIC-NEXT: suba.l #12, %sp 398*4cce1074Sknickish; NO-ATOMIC-NEXT: .cfi_def_cfa_offset -16 399*4cce1074Sknickish; NO-ATOMIC-NEXT: movem.l %d2, (8,%sp) ; 8-byte Folded Spill 400*4cce1074Sknickish; NO-ATOMIC-NEXT: move.w (18,%sp), %d2 401*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l %d2, %d0 402*4cce1074Sknickish; NO-ATOMIC-NEXT: and.l #65535, %d0 403*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l %d0, (4,%sp) 404*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l (20,%sp), (%sp) 405*4cce1074Sknickish; NO-ATOMIC-NEXT: jsr __sync_fetch_and_nand_2 406*4cce1074Sknickish; NO-ATOMIC-NEXT: move.w %d2, %d0 407*4cce1074Sknickish; NO-ATOMIC-NEXT: movem.l (8,%sp), %d2 ; 8-byte Folded Reload 408*4cce1074Sknickish; NO-ATOMIC-NEXT: adda.l #12, %sp 409*4cce1074Sknickish; NO-ATOMIC-NEXT: rts 410*4cce1074Sknickish; 411*4cce1074Sknickish; NO-ATOMIC-PIC-LABEL: atmoicrmw_nand_i16: 412*4cce1074Sknickish; NO-ATOMIC-PIC: .cfi_startproc 413*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: ; %bb.0: 414*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: suba.l #12, %sp 415*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: .cfi_def_cfa_offset -16 416*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: movem.l %d2, (8,%sp) ; 8-byte Folded Spill 417*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.w (18,%sp), %d2 418*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l %d2, %d0 419*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: and.l #65535, %d0 420*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l %d0, (4,%sp) 421*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l (20,%sp), (%sp) 422*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: jsr (__sync_fetch_and_nand_2@PLT,%pc) 423*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.w %d2, %d0 424*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: movem.l (8,%sp), %d2 ; 8-byte Folded Reload 425*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: adda.l #12, %sp 426*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: rts 427*4cce1074Sknickish; 428*4cce1074Sknickish; ATOMIC-LABEL: atmoicrmw_nand_i16: 429*4cce1074Sknickish; ATOMIC: .cfi_startproc 430*4cce1074Sknickish; ATOMIC-NEXT: ; %bb.0: 431*4cce1074Sknickish; ATOMIC-NEXT: suba.l #8, %sp 432*4cce1074Sknickish; ATOMIC-NEXT: .cfi_def_cfa_offset -12 433*4cce1074Sknickish; ATOMIC-NEXT: movem.l %d2-%d3, (0,%sp) ; 12-byte Folded Spill 434*4cce1074Sknickish; ATOMIC-NEXT: move.w (14,%sp), %d0 435*4cce1074Sknickish; ATOMIC-NEXT: move.l (16,%sp), %a0 436*4cce1074Sknickish; ATOMIC-NEXT: move.w (%a0), %d2 437*4cce1074Sknickish; ATOMIC-NEXT: move.w %d2, %d1 438*4cce1074Sknickish; ATOMIC-NEXT: .LBB5_1: ; %atomicrmw.start 439*4cce1074Sknickish; ATOMIC-NEXT: ; =>This Inner Loop Header: Depth=1 440*4cce1074Sknickish; ATOMIC-NEXT: move.w %d2, %d3 441*4cce1074Sknickish; ATOMIC-NEXT: and.w %d0, %d3 442*4cce1074Sknickish; ATOMIC-NEXT: not.w %d3 443*4cce1074Sknickish; ATOMIC-NEXT: cas.w %d1, %d3, (%a0) 444*4cce1074Sknickish; ATOMIC-NEXT: move.w %d1, %d3 445*4cce1074Sknickish; ATOMIC-NEXT: sub.w %d2, %d3 446*4cce1074Sknickish; ATOMIC-NEXT: seq %d2 447*4cce1074Sknickish; ATOMIC-NEXT: sub.b #1, %d2 448*4cce1074Sknickish; ATOMIC-NEXT: move.w %d1, %d2 449*4cce1074Sknickish; ATOMIC-NEXT: bne .LBB5_1 450*4cce1074Sknickish; ATOMIC-NEXT: ; %bb.2: ; %atomicrmw.end 451*4cce1074Sknickish; ATOMIC-NEXT: movem.l (0,%sp), %d2-%d3 ; 12-byte Folded Reload 452*4cce1074Sknickish; ATOMIC-NEXT: adda.l #8, %sp 453*4cce1074Sknickish; ATOMIC-NEXT: rts 454*4cce1074Sknickish; 455*4cce1074Sknickish; ATOMIC-PIC-LABEL: atmoicrmw_nand_i16: 456*4cce1074Sknickish; ATOMIC-PIC: .cfi_startproc 457*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; %bb.0: 458*4cce1074Sknickish; ATOMIC-PIC-NEXT: suba.l #8, %sp 459*4cce1074Sknickish; ATOMIC-PIC-NEXT: .cfi_def_cfa_offset -12 460*4cce1074Sknickish; ATOMIC-PIC-NEXT: movem.l %d2-%d3, (0,%sp) ; 12-byte Folded Spill 461*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.w (14,%sp), %d0 462*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l (16,%sp), %a0 463*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.w (%a0), %d2 464*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.w %d2, %d1 465*4cce1074Sknickish; ATOMIC-PIC-NEXT: .LBB5_1: ; %atomicrmw.start 466*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; =>This Inner Loop Header: Depth=1 467*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.w %d2, %d3 468*4cce1074Sknickish; ATOMIC-PIC-NEXT: and.w %d0, %d3 469*4cce1074Sknickish; ATOMIC-PIC-NEXT: not.w %d3 470*4cce1074Sknickish; ATOMIC-PIC-NEXT: cas.w %d1, %d3, (%a0) 471*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.w %d1, %d3 472*4cce1074Sknickish; ATOMIC-PIC-NEXT: sub.w %d2, %d3 473*4cce1074Sknickish; ATOMIC-PIC-NEXT: seq %d2 474*4cce1074Sknickish; ATOMIC-PIC-NEXT: sub.b #1, %d2 475*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.w %d1, %d2 476*4cce1074Sknickish; ATOMIC-PIC-NEXT: bne .LBB5_1 477*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; %bb.2: ; %atomicrmw.end 478*4cce1074Sknickish; ATOMIC-PIC-NEXT: movem.l (0,%sp), %d2-%d3 ; 12-byte Folded Reload 479*4cce1074Sknickish; ATOMIC-PIC-NEXT: adda.l #8, %sp 480*4cce1074Sknickish; ATOMIC-PIC-NEXT: rts 481*4cce1074Sknickish %old = atomicrmw nand ptr %ptr, i16 %val seq_cst 482*4cce1074Sknickish ret i16 %val 483*4cce1074Sknickish} 484*4cce1074Sknickish 485*4cce1074Sknickishdefine i32 @atomicrmw_min_i32(i32 %val, ptr %ptr) { 486*4cce1074Sknickish; NO-ATOMIC-LABEL: atomicrmw_min_i32: 487*4cce1074Sknickish; NO-ATOMIC: .cfi_startproc 488*4cce1074Sknickish; NO-ATOMIC-NEXT: ; %bb.0: 489*4cce1074Sknickish; NO-ATOMIC-NEXT: suba.l #12, %sp 490*4cce1074Sknickish; NO-ATOMIC-NEXT: .cfi_def_cfa_offset -16 491*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l (16,%sp), (4,%sp) 492*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l (20,%sp), (%sp) 493*4cce1074Sknickish; NO-ATOMIC-NEXT: jsr __sync_fetch_and_min_4 494*4cce1074Sknickish; NO-ATOMIC-NEXT: adda.l #12, %sp 495*4cce1074Sknickish; NO-ATOMIC-NEXT: rts 496*4cce1074Sknickish; 497*4cce1074Sknickish; NO-ATOMIC-PIC-LABEL: atomicrmw_min_i32: 498*4cce1074Sknickish; NO-ATOMIC-PIC: .cfi_startproc 499*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: ; %bb.0: 500*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: suba.l #12, %sp 501*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: .cfi_def_cfa_offset -16 502*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l (16,%sp), (4,%sp) 503*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l (20,%sp), (%sp) 504*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: jsr (__sync_fetch_and_min_4@PLT,%pc) 505*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: adda.l #12, %sp 506*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: rts 507*4cce1074Sknickish; 508*4cce1074Sknickish; ATOMIC-LABEL: atomicrmw_min_i32: 509*4cce1074Sknickish; ATOMIC: .cfi_startproc 510*4cce1074Sknickish; ATOMIC-NEXT: ; %bb.0: 511*4cce1074Sknickish; ATOMIC-NEXT: suba.l #8, %sp 512*4cce1074Sknickish; ATOMIC-NEXT: .cfi_def_cfa_offset -12 513*4cce1074Sknickish; ATOMIC-NEXT: movem.l %d2-%d3, (0,%sp) ; 12-byte Folded Spill 514*4cce1074Sknickish; ATOMIC-NEXT: move.l (12,%sp), %d1 515*4cce1074Sknickish; ATOMIC-NEXT: move.l (16,%sp), %a0 516*4cce1074Sknickish; ATOMIC-NEXT: move.l (%a0), %d2 517*4cce1074Sknickish; ATOMIC-NEXT: bra .LBB6_1 518*4cce1074Sknickish; ATOMIC-NEXT: .LBB6_3: ; %atomicrmw.start 519*4cce1074Sknickish; ATOMIC-NEXT: ; in Loop: Header=BB6_1 Depth=1 520*4cce1074Sknickish; ATOMIC-NEXT: move.l %d2, %d0 521*4cce1074Sknickish; ATOMIC-NEXT: cas.l %d0, %d3, (%a0) 522*4cce1074Sknickish; ATOMIC-NEXT: move.l %d0, %d3 523*4cce1074Sknickish; ATOMIC-NEXT: sub.l %d2, %d3 524*4cce1074Sknickish; ATOMIC-NEXT: seq %d2 525*4cce1074Sknickish; ATOMIC-NEXT: sub.b #1, %d2 526*4cce1074Sknickish; ATOMIC-NEXT: move.l %d0, %d2 527*4cce1074Sknickish; ATOMIC-NEXT: beq .LBB6_4 528*4cce1074Sknickish; ATOMIC-NEXT: .LBB6_1: ; %atomicrmw.start 529*4cce1074Sknickish; ATOMIC-NEXT: ; =>This Inner Loop Header: Depth=1 530*4cce1074Sknickish; ATOMIC-NEXT: move.l %d2, %d0 531*4cce1074Sknickish; ATOMIC-NEXT: sub.l %d1, %d0 532*4cce1074Sknickish; ATOMIC-NEXT: move.l %d2, %d3 533*4cce1074Sknickish; ATOMIC-NEXT: ble .LBB6_3 534*4cce1074Sknickish; ATOMIC-NEXT: ; %bb.2: ; %atomicrmw.start 535*4cce1074Sknickish; ATOMIC-NEXT: ; in Loop: Header=BB6_1 Depth=1 536*4cce1074Sknickish; ATOMIC-NEXT: move.l %d1, %d3 537*4cce1074Sknickish; ATOMIC-NEXT: bra .LBB6_3 538*4cce1074Sknickish; ATOMIC-NEXT: .LBB6_4: ; %atomicrmw.end 539*4cce1074Sknickish; ATOMIC-NEXT: movem.l (0,%sp), %d2-%d3 ; 12-byte Folded Reload 540*4cce1074Sknickish; ATOMIC-NEXT: adda.l #8, %sp 541*4cce1074Sknickish; ATOMIC-NEXT: rts 542*4cce1074Sknickish; 543*4cce1074Sknickish; ATOMIC-PIC-LABEL: atomicrmw_min_i32: 544*4cce1074Sknickish; ATOMIC-PIC: .cfi_startproc 545*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; %bb.0: 546*4cce1074Sknickish; ATOMIC-PIC-NEXT: suba.l #8, %sp 547*4cce1074Sknickish; ATOMIC-PIC-NEXT: .cfi_def_cfa_offset -12 548*4cce1074Sknickish; ATOMIC-PIC-NEXT: movem.l %d2-%d3, (0,%sp) ; 12-byte Folded Spill 549*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l (12,%sp), %d1 550*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l (16,%sp), %a0 551*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l (%a0), %d2 552*4cce1074Sknickish; ATOMIC-PIC-NEXT: bra .LBB6_1 553*4cce1074Sknickish; ATOMIC-PIC-NEXT: .LBB6_3: ; %atomicrmw.start 554*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; in Loop: Header=BB6_1 Depth=1 555*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l %d2, %d0 556*4cce1074Sknickish; ATOMIC-PIC-NEXT: cas.l %d0, %d3, (%a0) 557*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l %d0, %d3 558*4cce1074Sknickish; ATOMIC-PIC-NEXT: sub.l %d2, %d3 559*4cce1074Sknickish; ATOMIC-PIC-NEXT: seq %d2 560*4cce1074Sknickish; ATOMIC-PIC-NEXT: sub.b #1, %d2 561*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l %d0, %d2 562*4cce1074Sknickish; ATOMIC-PIC-NEXT: beq .LBB6_4 563*4cce1074Sknickish; ATOMIC-PIC-NEXT: .LBB6_1: ; %atomicrmw.start 564*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; =>This Inner Loop Header: Depth=1 565*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l %d2, %d0 566*4cce1074Sknickish; ATOMIC-PIC-NEXT: sub.l %d1, %d0 567*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l %d2, %d3 568*4cce1074Sknickish; ATOMIC-PIC-NEXT: ble .LBB6_3 569*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; %bb.2: ; %atomicrmw.start 570*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; in Loop: Header=BB6_1 Depth=1 571*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l %d1, %d3 572*4cce1074Sknickish; ATOMIC-PIC-NEXT: bra .LBB6_3 573*4cce1074Sknickish; ATOMIC-PIC-NEXT: .LBB6_4: ; %atomicrmw.end 574*4cce1074Sknickish; ATOMIC-PIC-NEXT: movem.l (0,%sp), %d2-%d3 ; 12-byte Folded Reload 575*4cce1074Sknickish; ATOMIC-PIC-NEXT: adda.l #8, %sp 576*4cce1074Sknickish; ATOMIC-PIC-NEXT: rts 577*4cce1074Sknickish %old = atomicrmw min ptr %ptr, i32 %val acquire 578*4cce1074Sknickish ret i32 %old 579*4cce1074Sknickish} 580*4cce1074Sknickish 581*4cce1074Sknickishdefine i64 @atomicrmw_max_i64(i64 %val, ptr %ptr) { 582*4cce1074Sknickish; NO-ATOMIC-LABEL: atomicrmw_max_i64: 583*4cce1074Sknickish; NO-ATOMIC: .cfi_startproc 584*4cce1074Sknickish; NO-ATOMIC-NEXT: ; %bb.0: 585*4cce1074Sknickish; NO-ATOMIC-NEXT: suba.l #52, %sp 586*4cce1074Sknickish; NO-ATOMIC-NEXT: .cfi_def_cfa_offset -56 587*4cce1074Sknickish; NO-ATOMIC-NEXT: movem.l %d2-%d4/%a2-%a3, (32,%sp) ; 24-byte Folded Spill 588*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l (60,%sp), %d3 589*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l (56,%sp), %d4 590*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l (64,%sp), %a2 591*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l (4,%a2), %d1 592*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l (%a2), %d0 593*4cce1074Sknickish; NO-ATOMIC-NEXT: lea (24,%sp), %a3 594*4cce1074Sknickish; NO-ATOMIC-NEXT: bra .LBB7_1 595*4cce1074Sknickish; NO-ATOMIC-NEXT: .LBB7_3: ; %atomicrmw.start 596*4cce1074Sknickish; NO-ATOMIC-NEXT: ; in Loop: Header=BB7_1 Depth=1 597*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l %d1, (12,%sp) 598*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l %d0, (8,%sp) 599*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l #5, (20,%sp) 600*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l #5, (16,%sp) 601*4cce1074Sknickish; NO-ATOMIC-NEXT: jsr __atomic_compare_exchange_8 602*4cce1074Sknickish; NO-ATOMIC-NEXT: move.b %d0, %d2 603*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l (28,%sp), %d1 604*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l (24,%sp), %d0 605*4cce1074Sknickish; NO-ATOMIC-NEXT: cmpi.b #0, %d2 606*4cce1074Sknickish; NO-ATOMIC-NEXT: bne .LBB7_4 607*4cce1074Sknickish; NO-ATOMIC-NEXT: .LBB7_1: ; %atomicrmw.start 608*4cce1074Sknickish; NO-ATOMIC-NEXT: ; =>This Inner Loop Header: Depth=1 609*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l %d0, (24,%sp) 610*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l %d1, (28,%sp) 611*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l %a2, (%sp) 612*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l %a3, (4,%sp) 613*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l %d3, %d2 614*4cce1074Sknickish; NO-ATOMIC-NEXT: sub.l %d1, %d2 615*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l %d4, %d2 616*4cce1074Sknickish; NO-ATOMIC-NEXT: subx.l %d0, %d2 617*4cce1074Sknickish; NO-ATOMIC-NEXT: slt %d2 618*4cce1074Sknickish; NO-ATOMIC-NEXT: cmpi.b #0, %d2 619*4cce1074Sknickish; NO-ATOMIC-NEXT: bne .LBB7_3 620*4cce1074Sknickish; NO-ATOMIC-NEXT: ; %bb.2: ; %atomicrmw.start 621*4cce1074Sknickish; NO-ATOMIC-NEXT: ; in Loop: Header=BB7_1 Depth=1 622*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l %d3, %d1 623*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l %d4, %d0 624*4cce1074Sknickish; NO-ATOMIC-NEXT: bra .LBB7_3 625*4cce1074Sknickish; NO-ATOMIC-NEXT: .LBB7_4: ; %atomicrmw.end 626*4cce1074Sknickish; NO-ATOMIC-NEXT: movem.l (32,%sp), %d2-%d4/%a2-%a3 ; 24-byte Folded Reload 627*4cce1074Sknickish; NO-ATOMIC-NEXT: adda.l #52, %sp 628*4cce1074Sknickish; NO-ATOMIC-NEXT: rts 629*4cce1074Sknickish; 630*4cce1074Sknickish; NO-ATOMIC-PIC-LABEL: atomicrmw_max_i64: 631*4cce1074Sknickish; NO-ATOMIC-PIC: .cfi_startproc 632*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: ; %bb.0: 633*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: suba.l #52, %sp 634*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: .cfi_def_cfa_offset -56 635*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: movem.l %d2-%d4/%a2-%a3, (32,%sp) ; 24-byte Folded Spill 636*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l (60,%sp), %d3 637*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l (56,%sp), %d4 638*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l (64,%sp), %a2 639*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l (4,%a2), %d1 640*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l (%a2), %d0 641*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: lea (24,%sp), %a3 642*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: bra .LBB7_1 643*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: .LBB7_3: ; %atomicrmw.start 644*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: ; in Loop: Header=BB7_1 Depth=1 645*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l %d1, (12,%sp) 646*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l %d0, (8,%sp) 647*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l #5, (20,%sp) 648*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l #5, (16,%sp) 649*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: jsr (__atomic_compare_exchange_8@PLT,%pc) 650*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.b %d0, %d2 651*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l (28,%sp), %d1 652*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l (24,%sp), %d0 653*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: cmpi.b #0, %d2 654*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: bne .LBB7_4 655*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: .LBB7_1: ; %atomicrmw.start 656*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: ; =>This Inner Loop Header: Depth=1 657*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l %d0, (24,%sp) 658*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l %d1, (28,%sp) 659*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l %a2, (%sp) 660*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l %a3, (4,%sp) 661*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l %d3, %d2 662*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: sub.l %d1, %d2 663*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l %d4, %d2 664*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: subx.l %d0, %d2 665*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: slt %d2 666*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: cmpi.b #0, %d2 667*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: bne .LBB7_3 668*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: ; %bb.2: ; %atomicrmw.start 669*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: ; in Loop: Header=BB7_1 Depth=1 670*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l %d3, %d1 671*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l %d4, %d0 672*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: bra .LBB7_3 673*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: .LBB7_4: ; %atomicrmw.end 674*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: movem.l (32,%sp), %d2-%d4/%a2-%a3 ; 24-byte Folded Reload 675*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: adda.l #52, %sp 676*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: rts 677*4cce1074Sknickish; 678*4cce1074Sknickish; ATOMIC-LABEL: atomicrmw_max_i64: 679*4cce1074Sknickish; ATOMIC: .cfi_startproc 680*4cce1074Sknickish; ATOMIC-NEXT: ; %bb.0: 681*4cce1074Sknickish; ATOMIC-NEXT: suba.l #52, %sp 682*4cce1074Sknickish; ATOMIC-NEXT: .cfi_def_cfa_offset -56 683*4cce1074Sknickish; ATOMIC-NEXT: movem.l %d2-%d4/%a2-%a3, (32,%sp) ; 24-byte Folded Spill 684*4cce1074Sknickish; ATOMIC-NEXT: move.l (60,%sp), %d3 685*4cce1074Sknickish; ATOMIC-NEXT: move.l (56,%sp), %d4 686*4cce1074Sknickish; ATOMIC-NEXT: move.l (64,%sp), %a2 687*4cce1074Sknickish; ATOMIC-NEXT: move.l (4,%a2), %d1 688*4cce1074Sknickish; ATOMIC-NEXT: move.l (%a2), %d0 689*4cce1074Sknickish; ATOMIC-NEXT: lea (24,%sp), %a3 690*4cce1074Sknickish; ATOMIC-NEXT: bra .LBB7_1 691*4cce1074Sknickish; ATOMIC-NEXT: .LBB7_3: ; %atomicrmw.start 692*4cce1074Sknickish; ATOMIC-NEXT: ; in Loop: Header=BB7_1 Depth=1 693*4cce1074Sknickish; ATOMIC-NEXT: move.l %d1, (12,%sp) 694*4cce1074Sknickish; ATOMIC-NEXT: move.l %d0, (8,%sp) 695*4cce1074Sknickish; ATOMIC-NEXT: move.l #5, (20,%sp) 696*4cce1074Sknickish; ATOMIC-NEXT: move.l #5, (16,%sp) 697*4cce1074Sknickish; ATOMIC-NEXT: jsr __atomic_compare_exchange_8 698*4cce1074Sknickish; ATOMIC-NEXT: move.b %d0, %d2 699*4cce1074Sknickish; ATOMIC-NEXT: move.l (28,%sp), %d1 700*4cce1074Sknickish; ATOMIC-NEXT: move.l (24,%sp), %d0 701*4cce1074Sknickish; ATOMIC-NEXT: cmpi.b #0, %d2 702*4cce1074Sknickish; ATOMIC-NEXT: bne .LBB7_4 703*4cce1074Sknickish; ATOMIC-NEXT: .LBB7_1: ; %atomicrmw.start 704*4cce1074Sknickish; ATOMIC-NEXT: ; =>This Inner Loop Header: Depth=1 705*4cce1074Sknickish; ATOMIC-NEXT: move.l %d0, (24,%sp) 706*4cce1074Sknickish; ATOMIC-NEXT: move.l %d1, (28,%sp) 707*4cce1074Sknickish; ATOMIC-NEXT: move.l %a2, (%sp) 708*4cce1074Sknickish; ATOMIC-NEXT: move.l %a3, (4,%sp) 709*4cce1074Sknickish; ATOMIC-NEXT: move.l %d3, %d2 710*4cce1074Sknickish; ATOMIC-NEXT: sub.l %d1, %d2 711*4cce1074Sknickish; ATOMIC-NEXT: move.l %d4, %d2 712*4cce1074Sknickish; ATOMIC-NEXT: subx.l %d0, %d2 713*4cce1074Sknickish; ATOMIC-NEXT: slt %d2 714*4cce1074Sknickish; ATOMIC-NEXT: cmpi.b #0, %d2 715*4cce1074Sknickish; ATOMIC-NEXT: bne .LBB7_3 716*4cce1074Sknickish; ATOMIC-NEXT: ; %bb.2: ; %atomicrmw.start 717*4cce1074Sknickish; ATOMIC-NEXT: ; in Loop: Header=BB7_1 Depth=1 718*4cce1074Sknickish; ATOMIC-NEXT: move.l %d3, %d1 719*4cce1074Sknickish; ATOMIC-NEXT: move.l %d4, %d0 720*4cce1074Sknickish; ATOMIC-NEXT: bra .LBB7_3 721*4cce1074Sknickish; ATOMIC-NEXT: .LBB7_4: ; %atomicrmw.end 722*4cce1074Sknickish; ATOMIC-NEXT: movem.l (32,%sp), %d2-%d4/%a2-%a3 ; 24-byte Folded Reload 723*4cce1074Sknickish; ATOMIC-NEXT: adda.l #52, %sp 724*4cce1074Sknickish; ATOMIC-NEXT: rts 725*4cce1074Sknickish; 726*4cce1074Sknickish; ATOMIC-PIC-LABEL: atomicrmw_max_i64: 727*4cce1074Sknickish; ATOMIC-PIC: .cfi_startproc 728*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; %bb.0: 729*4cce1074Sknickish; ATOMIC-PIC-NEXT: suba.l #52, %sp 730*4cce1074Sknickish; ATOMIC-PIC-NEXT: .cfi_def_cfa_offset -56 731*4cce1074Sknickish; ATOMIC-PIC-NEXT: movem.l %d2-%d4/%a2-%a3, (32,%sp) ; 24-byte Folded Spill 732*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l (60,%sp), %d3 733*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l (56,%sp), %d4 734*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l (64,%sp), %a2 735*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l (4,%a2), %d1 736*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l (%a2), %d0 737*4cce1074Sknickish; ATOMIC-PIC-NEXT: lea (24,%sp), %a3 738*4cce1074Sknickish; ATOMIC-PIC-NEXT: bra .LBB7_1 739*4cce1074Sknickish; ATOMIC-PIC-NEXT: .LBB7_3: ; %atomicrmw.start 740*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; in Loop: Header=BB7_1 Depth=1 741*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l %d1, (12,%sp) 742*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l %d0, (8,%sp) 743*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l #5, (20,%sp) 744*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l #5, (16,%sp) 745*4cce1074Sknickish; ATOMIC-PIC-NEXT: jsr (__atomic_compare_exchange_8@PLT,%pc) 746*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.b %d0, %d2 747*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l (28,%sp), %d1 748*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l (24,%sp), %d0 749*4cce1074Sknickish; ATOMIC-PIC-NEXT: cmpi.b #0, %d2 750*4cce1074Sknickish; ATOMIC-PIC-NEXT: bne .LBB7_4 751*4cce1074Sknickish; ATOMIC-PIC-NEXT: .LBB7_1: ; %atomicrmw.start 752*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; =>This Inner Loop Header: Depth=1 753*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l %d0, (24,%sp) 754*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l %d1, (28,%sp) 755*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l %a2, (%sp) 756*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l %a3, (4,%sp) 757*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l %d3, %d2 758*4cce1074Sknickish; ATOMIC-PIC-NEXT: sub.l %d1, %d2 759*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l %d4, %d2 760*4cce1074Sknickish; ATOMIC-PIC-NEXT: subx.l %d0, %d2 761*4cce1074Sknickish; ATOMIC-PIC-NEXT: slt %d2 762*4cce1074Sknickish; ATOMIC-PIC-NEXT: cmpi.b #0, %d2 763*4cce1074Sknickish; ATOMIC-PIC-NEXT: bne .LBB7_3 764*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; %bb.2: ; %atomicrmw.start 765*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; in Loop: Header=BB7_1 Depth=1 766*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l %d3, %d1 767*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l %d4, %d0 768*4cce1074Sknickish; ATOMIC-PIC-NEXT: bra .LBB7_3 769*4cce1074Sknickish; ATOMIC-PIC-NEXT: .LBB7_4: ; %atomicrmw.end 770*4cce1074Sknickish; ATOMIC-PIC-NEXT: movem.l (32,%sp), %d2-%d4/%a2-%a3 ; 24-byte Folded Reload 771*4cce1074Sknickish; ATOMIC-PIC-NEXT: adda.l #52, %sp 772*4cce1074Sknickish; ATOMIC-PIC-NEXT: rts 773*4cce1074Sknickish %old = atomicrmw max ptr %ptr, i64 %val seq_cst 774*4cce1074Sknickish ret i64 %old 775*4cce1074Sknickish} 776*4cce1074Sknickish 777*4cce1074Sknickishdefine i8 @atomicrmw_i8_umin(i8 %val, ptr %ptr) { 778*4cce1074Sknickish; NO-ATOMIC-LABEL: atomicrmw_i8_umin: 779*4cce1074Sknickish; NO-ATOMIC: .cfi_startproc 780*4cce1074Sknickish; NO-ATOMIC-NEXT: ; %bb.0: 781*4cce1074Sknickish; NO-ATOMIC-NEXT: suba.l #12, %sp 782*4cce1074Sknickish; NO-ATOMIC-NEXT: .cfi_def_cfa_offset -16 783*4cce1074Sknickish; NO-ATOMIC-NEXT: move.b (19,%sp), %d0 784*4cce1074Sknickish; NO-ATOMIC-NEXT: and.l #255, %d0 785*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l %d0, (4,%sp) 786*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l (20,%sp), (%sp) 787*4cce1074Sknickish; NO-ATOMIC-NEXT: jsr __sync_fetch_and_umin_1 788*4cce1074Sknickish; NO-ATOMIC-NEXT: adda.l #12, %sp 789*4cce1074Sknickish; NO-ATOMIC-NEXT: rts 790*4cce1074Sknickish; 791*4cce1074Sknickish; NO-ATOMIC-PIC-LABEL: atomicrmw_i8_umin: 792*4cce1074Sknickish; NO-ATOMIC-PIC: .cfi_startproc 793*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: ; %bb.0: 794*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: suba.l #12, %sp 795*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: .cfi_def_cfa_offset -16 796*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.b (19,%sp), %d0 797*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: and.l #255, %d0 798*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l %d0, (4,%sp) 799*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l (20,%sp), (%sp) 800*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: jsr (__sync_fetch_and_umin_1@PLT,%pc) 801*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: adda.l #12, %sp 802*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: rts 803*4cce1074Sknickish; 804*4cce1074Sknickish; ATOMIC-LABEL: atomicrmw_i8_umin: 805*4cce1074Sknickish; ATOMIC: .cfi_startproc 806*4cce1074Sknickish; ATOMIC-NEXT: ; %bb.0: 807*4cce1074Sknickish; ATOMIC-NEXT: suba.l #8, %sp 808*4cce1074Sknickish; ATOMIC-NEXT: .cfi_def_cfa_offset -12 809*4cce1074Sknickish; ATOMIC-NEXT: movem.l %d2-%d3, (0,%sp) ; 12-byte Folded Spill 810*4cce1074Sknickish; ATOMIC-NEXT: move.b (15,%sp), %d1 811*4cce1074Sknickish; ATOMIC-NEXT: move.l (16,%sp), %a0 812*4cce1074Sknickish; ATOMIC-NEXT: move.b (%a0), %d2 813*4cce1074Sknickish; ATOMIC-NEXT: bra .LBB8_1 814*4cce1074Sknickish; ATOMIC-NEXT: .LBB8_3: ; %atomicrmw.start 815*4cce1074Sknickish; ATOMIC-NEXT: ; in Loop: Header=BB8_1 Depth=1 816*4cce1074Sknickish; ATOMIC-NEXT: move.b %d2, %d0 817*4cce1074Sknickish; ATOMIC-NEXT: cas.b %d0, %d3, (%a0) 818*4cce1074Sknickish; ATOMIC-NEXT: move.b %d0, %d3 819*4cce1074Sknickish; ATOMIC-NEXT: sub.b %d2, %d3 820*4cce1074Sknickish; ATOMIC-NEXT: seq %d2 821*4cce1074Sknickish; ATOMIC-NEXT: sub.b #1, %d2 822*4cce1074Sknickish; ATOMIC-NEXT: move.b %d0, %d2 823*4cce1074Sknickish; ATOMIC-NEXT: beq .LBB8_4 824*4cce1074Sknickish; ATOMIC-NEXT: .LBB8_1: ; %atomicrmw.start 825*4cce1074Sknickish; ATOMIC-NEXT: ; =>This Inner Loop Header: Depth=1 826*4cce1074Sknickish; ATOMIC-NEXT: move.b %d2, %d0 827*4cce1074Sknickish; ATOMIC-NEXT: sub.b %d1, %d0 828*4cce1074Sknickish; ATOMIC-NEXT: move.b %d2, %d3 829*4cce1074Sknickish; ATOMIC-NEXT: bls .LBB8_3 830*4cce1074Sknickish; ATOMIC-NEXT: ; %bb.2: ; %atomicrmw.start 831*4cce1074Sknickish; ATOMIC-NEXT: ; in Loop: Header=BB8_1 Depth=1 832*4cce1074Sknickish; ATOMIC-NEXT: move.b %d1, %d3 833*4cce1074Sknickish; ATOMIC-NEXT: bra .LBB8_3 834*4cce1074Sknickish; ATOMIC-NEXT: .LBB8_4: ; %atomicrmw.end 835*4cce1074Sknickish; ATOMIC-NEXT: movem.l (0,%sp), %d2-%d3 ; 12-byte Folded Reload 836*4cce1074Sknickish; ATOMIC-NEXT: adda.l #8, %sp 837*4cce1074Sknickish; ATOMIC-NEXT: rts 838*4cce1074Sknickish; 839*4cce1074Sknickish; ATOMIC-PIC-LABEL: atomicrmw_i8_umin: 840*4cce1074Sknickish; ATOMIC-PIC: .cfi_startproc 841*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; %bb.0: 842*4cce1074Sknickish; ATOMIC-PIC-NEXT: suba.l #8, %sp 843*4cce1074Sknickish; ATOMIC-PIC-NEXT: .cfi_def_cfa_offset -12 844*4cce1074Sknickish; ATOMIC-PIC-NEXT: movem.l %d2-%d3, (0,%sp) ; 12-byte Folded Spill 845*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.b (15,%sp), %d1 846*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l (16,%sp), %a0 847*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.b (%a0), %d2 848*4cce1074Sknickish; ATOMIC-PIC-NEXT: bra .LBB8_1 849*4cce1074Sknickish; ATOMIC-PIC-NEXT: .LBB8_3: ; %atomicrmw.start 850*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; in Loop: Header=BB8_1 Depth=1 851*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.b %d2, %d0 852*4cce1074Sknickish; ATOMIC-PIC-NEXT: cas.b %d0, %d3, (%a0) 853*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.b %d0, %d3 854*4cce1074Sknickish; ATOMIC-PIC-NEXT: sub.b %d2, %d3 855*4cce1074Sknickish; ATOMIC-PIC-NEXT: seq %d2 856*4cce1074Sknickish; ATOMIC-PIC-NEXT: sub.b #1, %d2 857*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.b %d0, %d2 858*4cce1074Sknickish; ATOMIC-PIC-NEXT: beq .LBB8_4 859*4cce1074Sknickish; ATOMIC-PIC-NEXT: .LBB8_1: ; %atomicrmw.start 860*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; =>This Inner Loop Header: Depth=1 861*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.b %d2, %d0 862*4cce1074Sknickish; ATOMIC-PIC-NEXT: sub.b %d1, %d0 863*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.b %d2, %d3 864*4cce1074Sknickish; ATOMIC-PIC-NEXT: bls .LBB8_3 865*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; %bb.2: ; %atomicrmw.start 866*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; in Loop: Header=BB8_1 Depth=1 867*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.b %d1, %d3 868*4cce1074Sknickish; ATOMIC-PIC-NEXT: bra .LBB8_3 869*4cce1074Sknickish; ATOMIC-PIC-NEXT: .LBB8_4: ; %atomicrmw.end 870*4cce1074Sknickish; ATOMIC-PIC-NEXT: movem.l (0,%sp), %d2-%d3 ; 12-byte Folded Reload 871*4cce1074Sknickish; ATOMIC-PIC-NEXT: adda.l #8, %sp 872*4cce1074Sknickish; ATOMIC-PIC-NEXT: rts 873*4cce1074Sknickish %old = atomicrmw umin ptr %ptr, i8 %val release 874*4cce1074Sknickish ret i8 %old 875*4cce1074Sknickish} 876*4cce1074Sknickish 877*4cce1074Sknickishdefine i16 @atomicrmw_umax_i16(i16 %val, ptr %ptr) { 878*4cce1074Sknickish; NO-ATOMIC-LABEL: atomicrmw_umax_i16: 879*4cce1074Sknickish; NO-ATOMIC: .cfi_startproc 880*4cce1074Sknickish; NO-ATOMIC-NEXT: ; %bb.0: 881*4cce1074Sknickish; NO-ATOMIC-NEXT: suba.l #12, %sp 882*4cce1074Sknickish; NO-ATOMIC-NEXT: .cfi_def_cfa_offset -16 883*4cce1074Sknickish; NO-ATOMIC-NEXT: move.w (18,%sp), %d0 884*4cce1074Sknickish; NO-ATOMIC-NEXT: and.l #65535, %d0 885*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l %d0, (4,%sp) 886*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l (20,%sp), (%sp) 887*4cce1074Sknickish; NO-ATOMIC-NEXT: jsr __sync_fetch_and_umax_2 888*4cce1074Sknickish; NO-ATOMIC-NEXT: adda.l #12, %sp 889*4cce1074Sknickish; NO-ATOMIC-NEXT: rts 890*4cce1074Sknickish; 891*4cce1074Sknickish; NO-ATOMIC-PIC-LABEL: atomicrmw_umax_i16: 892*4cce1074Sknickish; NO-ATOMIC-PIC: .cfi_startproc 893*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: ; %bb.0: 894*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: suba.l #12, %sp 895*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: .cfi_def_cfa_offset -16 896*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.w (18,%sp), %d0 897*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: and.l #65535, %d0 898*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l %d0, (4,%sp) 899*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l (20,%sp), (%sp) 900*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: jsr (__sync_fetch_and_umax_2@PLT,%pc) 901*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: adda.l #12, %sp 902*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: rts 903*4cce1074Sknickish; 904*4cce1074Sknickish; ATOMIC-LABEL: atomicrmw_umax_i16: 905*4cce1074Sknickish; ATOMIC: .cfi_startproc 906*4cce1074Sknickish; ATOMIC-NEXT: ; %bb.0: 907*4cce1074Sknickish; ATOMIC-NEXT: suba.l #8, %sp 908*4cce1074Sknickish; ATOMIC-NEXT: .cfi_def_cfa_offset -12 909*4cce1074Sknickish; ATOMIC-NEXT: movem.l %d2-%d3, (0,%sp) ; 12-byte Folded Spill 910*4cce1074Sknickish; ATOMIC-NEXT: move.w (14,%sp), %d1 911*4cce1074Sknickish; ATOMIC-NEXT: move.l (16,%sp), %a0 912*4cce1074Sknickish; ATOMIC-NEXT: move.w (%a0), %d2 913*4cce1074Sknickish; ATOMIC-NEXT: bra .LBB9_1 914*4cce1074Sknickish; ATOMIC-NEXT: .LBB9_3: ; %atomicrmw.start 915*4cce1074Sknickish; ATOMIC-NEXT: ; in Loop: Header=BB9_1 Depth=1 916*4cce1074Sknickish; ATOMIC-NEXT: move.w %d2, %d0 917*4cce1074Sknickish; ATOMIC-NEXT: cas.w %d0, %d3, (%a0) 918*4cce1074Sknickish; ATOMIC-NEXT: move.w %d0, %d3 919*4cce1074Sknickish; ATOMIC-NEXT: sub.w %d2, %d3 920*4cce1074Sknickish; ATOMIC-NEXT: seq %d2 921*4cce1074Sknickish; ATOMIC-NEXT: sub.b #1, %d2 922*4cce1074Sknickish; ATOMIC-NEXT: move.w %d0, %d2 923*4cce1074Sknickish; ATOMIC-NEXT: beq .LBB9_4 924*4cce1074Sknickish; ATOMIC-NEXT: .LBB9_1: ; %atomicrmw.start 925*4cce1074Sknickish; ATOMIC-NEXT: ; =>This Inner Loop Header: Depth=1 926*4cce1074Sknickish; ATOMIC-NEXT: move.w %d2, %d0 927*4cce1074Sknickish; ATOMIC-NEXT: sub.w %d1, %d0 928*4cce1074Sknickish; ATOMIC-NEXT: move.w %d2, %d3 929*4cce1074Sknickish; ATOMIC-NEXT: bhi .LBB9_3 930*4cce1074Sknickish; ATOMIC-NEXT: ; %bb.2: ; %atomicrmw.start 931*4cce1074Sknickish; ATOMIC-NEXT: ; in Loop: Header=BB9_1 Depth=1 932*4cce1074Sknickish; ATOMIC-NEXT: move.w %d1, %d3 933*4cce1074Sknickish; ATOMIC-NEXT: bra .LBB9_3 934*4cce1074Sknickish; ATOMIC-NEXT: .LBB9_4: ; %atomicrmw.end 935*4cce1074Sknickish; ATOMIC-NEXT: movem.l (0,%sp), %d2-%d3 ; 12-byte Folded Reload 936*4cce1074Sknickish; ATOMIC-NEXT: adda.l #8, %sp 937*4cce1074Sknickish; ATOMIC-NEXT: rts 938*4cce1074Sknickish; 939*4cce1074Sknickish; ATOMIC-PIC-LABEL: atomicrmw_umax_i16: 940*4cce1074Sknickish; ATOMIC-PIC: .cfi_startproc 941*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; %bb.0: 942*4cce1074Sknickish; ATOMIC-PIC-NEXT: suba.l #8, %sp 943*4cce1074Sknickish; ATOMIC-PIC-NEXT: .cfi_def_cfa_offset -12 944*4cce1074Sknickish; ATOMIC-PIC-NEXT: movem.l %d2-%d3, (0,%sp) ; 12-byte Folded Spill 945*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.w (14,%sp), %d1 946*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l (16,%sp), %a0 947*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.w (%a0), %d2 948*4cce1074Sknickish; ATOMIC-PIC-NEXT: bra .LBB9_1 949*4cce1074Sknickish; ATOMIC-PIC-NEXT: .LBB9_3: ; %atomicrmw.start 950*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; in Loop: Header=BB9_1 Depth=1 951*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.w %d2, %d0 952*4cce1074Sknickish; ATOMIC-PIC-NEXT: cas.w %d0, %d3, (%a0) 953*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.w %d0, %d3 954*4cce1074Sknickish; ATOMIC-PIC-NEXT: sub.w %d2, %d3 955*4cce1074Sknickish; ATOMIC-PIC-NEXT: seq %d2 956*4cce1074Sknickish; ATOMIC-PIC-NEXT: sub.b #1, %d2 957*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.w %d0, %d2 958*4cce1074Sknickish; ATOMIC-PIC-NEXT: beq .LBB9_4 959*4cce1074Sknickish; ATOMIC-PIC-NEXT: .LBB9_1: ; %atomicrmw.start 960*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; =>This Inner Loop Header: Depth=1 961*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.w %d2, %d0 962*4cce1074Sknickish; ATOMIC-PIC-NEXT: sub.w %d1, %d0 963*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.w %d2, %d3 964*4cce1074Sknickish; ATOMIC-PIC-NEXT: bhi .LBB9_3 965*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; %bb.2: ; %atomicrmw.start 966*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; in Loop: Header=BB9_1 Depth=1 967*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.w %d1, %d3 968*4cce1074Sknickish; ATOMIC-PIC-NEXT: bra .LBB9_3 969*4cce1074Sknickish; ATOMIC-PIC-NEXT: .LBB9_4: ; %atomicrmw.end 970*4cce1074Sknickish; ATOMIC-PIC-NEXT: movem.l (0,%sp), %d2-%d3 ; 12-byte Folded Reload 971*4cce1074Sknickish; ATOMIC-PIC-NEXT: adda.l #8, %sp 972*4cce1074Sknickish; ATOMIC-PIC-NEXT: rts 973*4cce1074Sknickish %old = atomicrmw umax ptr %ptr, i16 %val seq_cst 974*4cce1074Sknickish ret i16 %old 975*4cce1074Sknickish} 976*4cce1074Sknickish 977*4cce1074Sknickishdefine i16 @atomicrmw_xchg_i16(i16 %val, ptr %ptr) { 978*4cce1074Sknickish; NO-ATOMIC-LABEL: atomicrmw_xchg_i16: 979*4cce1074Sknickish; NO-ATOMIC: .cfi_startproc 980*4cce1074Sknickish; NO-ATOMIC-NEXT: ; %bb.0: ; %entry 981*4cce1074Sknickish; NO-ATOMIC-NEXT: suba.l #12, %sp 982*4cce1074Sknickish; NO-ATOMIC-NEXT: .cfi_def_cfa_offset -16 983*4cce1074Sknickish; NO-ATOMIC-NEXT: move.w (18,%sp), %d0 984*4cce1074Sknickish; NO-ATOMIC-NEXT: and.l #65535, %d0 985*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l %d0, (4,%sp) 986*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l (20,%sp), (%sp) 987*4cce1074Sknickish; NO-ATOMIC-NEXT: jsr __sync_lock_test_and_set_2 988*4cce1074Sknickish; NO-ATOMIC-NEXT: adda.l #12, %sp 989*4cce1074Sknickish; NO-ATOMIC-NEXT: rts 990*4cce1074Sknickish; 991*4cce1074Sknickish; NO-ATOMIC-PIC-LABEL: atomicrmw_xchg_i16: 992*4cce1074Sknickish; NO-ATOMIC-PIC: .cfi_startproc 993*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: ; %bb.0: ; %entry 994*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: suba.l #12, %sp 995*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: .cfi_def_cfa_offset -16 996*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.w (18,%sp), %d0 997*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: and.l #65535, %d0 998*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l %d0, (4,%sp) 999*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l (20,%sp), (%sp) 1000*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: jsr (__sync_lock_test_and_set_2@PLT,%pc) 1001*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: adda.l #12, %sp 1002*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: rts 1003*4cce1074Sknickish; 1004*4cce1074Sknickish; ATOMIC-LABEL: atomicrmw_xchg_i16: 1005*4cce1074Sknickish; ATOMIC: .cfi_startproc 1006*4cce1074Sknickish; ATOMIC-NEXT: ; %bb.0: ; %entry 1007*4cce1074Sknickish; ATOMIC-NEXT: suba.l #8, %sp 1008*4cce1074Sknickish; ATOMIC-NEXT: .cfi_def_cfa_offset -12 1009*4cce1074Sknickish; ATOMIC-NEXT: movem.l %d2-%d3, (0,%sp) ; 12-byte Folded Spill 1010*4cce1074Sknickish; ATOMIC-NEXT: move.w (14,%sp), %d1 1011*4cce1074Sknickish; ATOMIC-NEXT: move.l (16,%sp), %a0 1012*4cce1074Sknickish; ATOMIC-NEXT: move.w (%a0), %d2 1013*4cce1074Sknickish; ATOMIC-NEXT: move.w %d2, %d0 1014*4cce1074Sknickish; ATOMIC-NEXT: .LBB10_1: ; %atomicrmw.start 1015*4cce1074Sknickish; ATOMIC-NEXT: ; =>This Inner Loop Header: Depth=1 1016*4cce1074Sknickish; ATOMIC-NEXT: cas.w %d0, %d1, (%a0) 1017*4cce1074Sknickish; ATOMIC-NEXT: move.w %d0, %d3 1018*4cce1074Sknickish; ATOMIC-NEXT: sub.w %d2, %d3 1019*4cce1074Sknickish; ATOMIC-NEXT: seq %d2 1020*4cce1074Sknickish; ATOMIC-NEXT: sub.b #1, %d2 1021*4cce1074Sknickish; ATOMIC-NEXT: move.w %d0, %d2 1022*4cce1074Sknickish; ATOMIC-NEXT: bne .LBB10_1 1023*4cce1074Sknickish; ATOMIC-NEXT: ; %bb.2: ; %atomicrmw.end 1024*4cce1074Sknickish; ATOMIC-NEXT: movem.l (0,%sp), %d2-%d3 ; 12-byte Folded Reload 1025*4cce1074Sknickish; ATOMIC-NEXT: adda.l #8, %sp 1026*4cce1074Sknickish; ATOMIC-NEXT: rts 1027*4cce1074Sknickish; 1028*4cce1074Sknickish; ATOMIC-PIC-LABEL: atomicrmw_xchg_i16: 1029*4cce1074Sknickish; ATOMIC-PIC: .cfi_startproc 1030*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; %bb.0: ; %entry 1031*4cce1074Sknickish; ATOMIC-PIC-NEXT: suba.l #8, %sp 1032*4cce1074Sknickish; ATOMIC-PIC-NEXT: .cfi_def_cfa_offset -12 1033*4cce1074Sknickish; ATOMIC-PIC-NEXT: movem.l %d2-%d3, (0,%sp) ; 12-byte Folded Spill 1034*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.w (14,%sp), %d1 1035*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l (16,%sp), %a0 1036*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.w (%a0), %d2 1037*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.w %d2, %d0 1038*4cce1074Sknickish; ATOMIC-PIC-NEXT: .LBB10_1: ; %atomicrmw.start 1039*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; =>This Inner Loop Header: Depth=1 1040*4cce1074Sknickish; ATOMIC-PIC-NEXT: cas.w %d0, %d1, (%a0) 1041*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.w %d0, %d3 1042*4cce1074Sknickish; ATOMIC-PIC-NEXT: sub.w %d2, %d3 1043*4cce1074Sknickish; ATOMIC-PIC-NEXT: seq %d2 1044*4cce1074Sknickish; ATOMIC-PIC-NEXT: sub.b #1, %d2 1045*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.w %d0, %d2 1046*4cce1074Sknickish; ATOMIC-PIC-NEXT: bne .LBB10_1 1047*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; %bb.2: ; %atomicrmw.end 1048*4cce1074Sknickish; ATOMIC-PIC-NEXT: movem.l (0,%sp), %d2-%d3 ; 12-byte Folded Reload 1049*4cce1074Sknickish; ATOMIC-PIC-NEXT: adda.l #8, %sp 1050*4cce1074Sknickish; ATOMIC-PIC-NEXT: rts 1051*4cce1074Sknickishentry: 1052*4cce1074Sknickish %old = atomicrmw xchg ptr %ptr, i16 %val monotonic 1053*4cce1074Sknickish ret i16 %old 1054*4cce1074Sknickish} 1055*4cce1074Sknickish 1056*4cce1074Sknickishdefine i32 @atomicrmw_xchg_i32(i32 %val, ptr %ptr) { 1057*4cce1074Sknickish; NO-ATOMIC-LABEL: atomicrmw_xchg_i32: 1058*4cce1074Sknickish; NO-ATOMIC: .cfi_startproc 1059*4cce1074Sknickish; NO-ATOMIC-NEXT: ; %bb.0: ; %entry 1060*4cce1074Sknickish; NO-ATOMIC-NEXT: suba.l #12, %sp 1061*4cce1074Sknickish; NO-ATOMIC-NEXT: .cfi_def_cfa_offset -16 1062*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l (16,%sp), (4,%sp) 1063*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l (20,%sp), (%sp) 1064*4cce1074Sknickish; NO-ATOMIC-NEXT: jsr __sync_lock_test_and_set_4 1065*4cce1074Sknickish; NO-ATOMIC-NEXT: adda.l #12, %sp 1066*4cce1074Sknickish; NO-ATOMIC-NEXT: rts 1067*4cce1074Sknickish; 1068*4cce1074Sknickish; NO-ATOMIC-PIC-LABEL: atomicrmw_xchg_i32: 1069*4cce1074Sknickish; NO-ATOMIC-PIC: .cfi_startproc 1070*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: ; %bb.0: ; %entry 1071*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: suba.l #12, %sp 1072*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: .cfi_def_cfa_offset -16 1073*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l (16,%sp), (4,%sp) 1074*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l (20,%sp), (%sp) 1075*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: jsr (__sync_lock_test_and_set_4@PLT,%pc) 1076*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: adda.l #12, %sp 1077*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: rts 1078*4cce1074Sknickish; 1079*4cce1074Sknickish; ATOMIC-LABEL: atomicrmw_xchg_i32: 1080*4cce1074Sknickish; ATOMIC: .cfi_startproc 1081*4cce1074Sknickish; ATOMIC-NEXT: ; %bb.0: ; %entry 1082*4cce1074Sknickish; ATOMIC-NEXT: suba.l #8, %sp 1083*4cce1074Sknickish; ATOMIC-NEXT: .cfi_def_cfa_offset -12 1084*4cce1074Sknickish; ATOMIC-NEXT: movem.l %d2-%d3, (0,%sp) ; 12-byte Folded Spill 1085*4cce1074Sknickish; ATOMIC-NEXT: move.l (12,%sp), %d1 1086*4cce1074Sknickish; ATOMIC-NEXT: move.l (16,%sp), %a0 1087*4cce1074Sknickish; ATOMIC-NEXT: move.l (%a0), %d2 1088*4cce1074Sknickish; ATOMIC-NEXT: move.l %d2, %d0 1089*4cce1074Sknickish; ATOMIC-NEXT: .LBB11_1: ; %atomicrmw.start 1090*4cce1074Sknickish; ATOMIC-NEXT: ; =>This Inner Loop Header: Depth=1 1091*4cce1074Sknickish; ATOMIC-NEXT: cas.l %d0, %d1, (%a0) 1092*4cce1074Sknickish; ATOMIC-NEXT: move.l %d0, %d3 1093*4cce1074Sknickish; ATOMIC-NEXT: sub.l %d2, %d3 1094*4cce1074Sknickish; ATOMIC-NEXT: seq %d2 1095*4cce1074Sknickish; ATOMIC-NEXT: sub.b #1, %d2 1096*4cce1074Sknickish; ATOMIC-NEXT: move.l %d0, %d2 1097*4cce1074Sknickish; ATOMIC-NEXT: bne .LBB11_1 1098*4cce1074Sknickish; ATOMIC-NEXT: ; %bb.2: ; %atomicrmw.end 1099*4cce1074Sknickish; ATOMIC-NEXT: movem.l (0,%sp), %d2-%d3 ; 12-byte Folded Reload 1100*4cce1074Sknickish; ATOMIC-NEXT: adda.l #8, %sp 1101*4cce1074Sknickish; ATOMIC-NEXT: rts 1102*4cce1074Sknickish; 1103*4cce1074Sknickish; ATOMIC-PIC-LABEL: atomicrmw_xchg_i32: 1104*4cce1074Sknickish; ATOMIC-PIC: .cfi_startproc 1105*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; %bb.0: ; %entry 1106*4cce1074Sknickish; ATOMIC-PIC-NEXT: suba.l #8, %sp 1107*4cce1074Sknickish; ATOMIC-PIC-NEXT: .cfi_def_cfa_offset -12 1108*4cce1074Sknickish; ATOMIC-PIC-NEXT: movem.l %d2-%d3, (0,%sp) ; 12-byte Folded Spill 1109*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l (12,%sp), %d1 1110*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l (16,%sp), %a0 1111*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l (%a0), %d2 1112*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l %d2, %d0 1113*4cce1074Sknickish; ATOMIC-PIC-NEXT: .LBB11_1: ; %atomicrmw.start 1114*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; =>This Inner Loop Header: Depth=1 1115*4cce1074Sknickish; ATOMIC-PIC-NEXT: cas.l %d0, %d1, (%a0) 1116*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l %d0, %d3 1117*4cce1074Sknickish; ATOMIC-PIC-NEXT: sub.l %d2, %d3 1118*4cce1074Sknickish; ATOMIC-PIC-NEXT: seq %d2 1119*4cce1074Sknickish; ATOMIC-PIC-NEXT: sub.b #1, %d2 1120*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l %d0, %d2 1121*4cce1074Sknickish; ATOMIC-PIC-NEXT: bne .LBB11_1 1122*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; %bb.2: ; %atomicrmw.end 1123*4cce1074Sknickish; ATOMIC-PIC-NEXT: movem.l (0,%sp), %d2-%d3 ; 12-byte Folded Reload 1124*4cce1074Sknickish; ATOMIC-PIC-NEXT: adda.l #8, %sp 1125*4cce1074Sknickish; ATOMIC-PIC-NEXT: rts 1126*4cce1074Sknickishentry: 1127*4cce1074Sknickish %old = atomicrmw xchg ptr %ptr, i32 %val monotonic 1128*4cce1074Sknickish ret i32 %old 1129*4cce1074Sknickish} 1130*4cce1074Sknickish 1131*4cce1074Sknickishdefine i8 @atomicrmw_sub_i8_arid(ptr align 2 %self) { 1132*4cce1074Sknickish; NO-ATOMIC-LABEL: atomicrmw_sub_i8_arid: 1133*4cce1074Sknickish; NO-ATOMIC: .cfi_startproc 1134*4cce1074Sknickish; NO-ATOMIC-NEXT: ; %bb.0: ; %start 1135*4cce1074Sknickish; NO-ATOMIC-NEXT: suba.l #12, %sp 1136*4cce1074Sknickish; NO-ATOMIC-NEXT: .cfi_def_cfa_offset -16 1137*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l (16,%sp), %a0 1138*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l (%a0), %d0 1139*4cce1074Sknickish; NO-ATOMIC-NEXT: add.l #4, %d0 1140*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l %d0, (%sp) 1141*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l #1, (4,%sp) 1142*4cce1074Sknickish; NO-ATOMIC-NEXT: jsr __sync_fetch_and_sub_1 1143*4cce1074Sknickish; NO-ATOMIC-NEXT: adda.l #12, %sp 1144*4cce1074Sknickish; NO-ATOMIC-NEXT: rts 1145*4cce1074Sknickish; 1146*4cce1074Sknickish; NO-ATOMIC-PIC-LABEL: atomicrmw_sub_i8_arid: 1147*4cce1074Sknickish; NO-ATOMIC-PIC: .cfi_startproc 1148*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: ; %bb.0: ; %start 1149*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: suba.l #12, %sp 1150*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: .cfi_def_cfa_offset -16 1151*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l (16,%sp), %a0 1152*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l (%a0), %d0 1153*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: add.l #4, %d0 1154*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l %d0, (%sp) 1155*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l #1, (4,%sp) 1156*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: jsr (__sync_fetch_and_sub_1@PLT,%pc) 1157*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: adda.l #12, %sp 1158*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: rts 1159*4cce1074Sknickish; 1160*4cce1074Sknickish; ATOMIC-LABEL: atomicrmw_sub_i8_arid: 1161*4cce1074Sknickish; ATOMIC: .cfi_startproc 1162*4cce1074Sknickish; ATOMIC-NEXT: ; %bb.0: ; %start 1163*4cce1074Sknickish; ATOMIC-NEXT: suba.l #4, %sp 1164*4cce1074Sknickish; ATOMIC-NEXT: .cfi_def_cfa_offset -8 1165*4cce1074Sknickish; ATOMIC-NEXT: movem.l %d2, (0,%sp) ; 8-byte Folded Spill 1166*4cce1074Sknickish; ATOMIC-NEXT: move.l (8,%sp), %a0 1167*4cce1074Sknickish; ATOMIC-NEXT: move.l (%a0), %a0 1168*4cce1074Sknickish; ATOMIC-NEXT: move.b (4,%a0), %d1 1169*4cce1074Sknickish; ATOMIC-NEXT: move.b %d1, %d0 1170*4cce1074Sknickish; ATOMIC-NEXT: .LBB12_1: ; %atomicrmw.start 1171*4cce1074Sknickish; ATOMIC-NEXT: ; =>This Inner Loop Header: Depth=1 1172*4cce1074Sknickish; ATOMIC-NEXT: move.b %d1, %d2 1173*4cce1074Sknickish; ATOMIC-NEXT: add.b #-1, %d2 1174*4cce1074Sknickish; ATOMIC-NEXT: cas.b %d0, %d2, (4,%a0) 1175*4cce1074Sknickish; ATOMIC-NEXT: move.b %d0, %d2 1176*4cce1074Sknickish; ATOMIC-NEXT: sub.b %d1, %d2 1177*4cce1074Sknickish; ATOMIC-NEXT: seq %d1 1178*4cce1074Sknickish; ATOMIC-NEXT: sub.b #1, %d1 1179*4cce1074Sknickish; ATOMIC-NEXT: move.b %d0, %d1 1180*4cce1074Sknickish; ATOMIC-NEXT: bne .LBB12_1 1181*4cce1074Sknickish; ATOMIC-NEXT: ; %bb.2: ; %atomicrmw.end 1182*4cce1074Sknickish; ATOMIC-NEXT: movem.l (0,%sp), %d2 ; 8-byte Folded Reload 1183*4cce1074Sknickish; ATOMIC-NEXT: adda.l #4, %sp 1184*4cce1074Sknickish; ATOMIC-NEXT: rts 1185*4cce1074Sknickish; 1186*4cce1074Sknickish; ATOMIC-PIC-LABEL: atomicrmw_sub_i8_arid: 1187*4cce1074Sknickish; ATOMIC-PIC: .cfi_startproc 1188*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; %bb.0: ; %start 1189*4cce1074Sknickish; ATOMIC-PIC-NEXT: suba.l #4, %sp 1190*4cce1074Sknickish; ATOMIC-PIC-NEXT: .cfi_def_cfa_offset -8 1191*4cce1074Sknickish; ATOMIC-PIC-NEXT: movem.l %d2, (0,%sp) ; 8-byte Folded Spill 1192*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l (8,%sp), %a0 1193*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l (%a0), %a0 1194*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.b (4,%a0), %d1 1195*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.b %d1, %d0 1196*4cce1074Sknickish; ATOMIC-PIC-NEXT: .LBB12_1: ; %atomicrmw.start 1197*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; =>This Inner Loop Header: Depth=1 1198*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.b %d1, %d2 1199*4cce1074Sknickish; ATOMIC-PIC-NEXT: add.b #-1, %d2 1200*4cce1074Sknickish; ATOMIC-PIC-NEXT: cas.b %d0, %d2, (4,%a0) 1201*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.b %d0, %d2 1202*4cce1074Sknickish; ATOMIC-PIC-NEXT: sub.b %d1, %d2 1203*4cce1074Sknickish; ATOMIC-PIC-NEXT: seq %d1 1204*4cce1074Sknickish; ATOMIC-PIC-NEXT: sub.b #1, %d1 1205*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.b %d0, %d1 1206*4cce1074Sknickish; ATOMIC-PIC-NEXT: bne .LBB12_1 1207*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; %bb.2: ; %atomicrmw.end 1208*4cce1074Sknickish; ATOMIC-PIC-NEXT: movem.l (0,%sp), %d2 ; 8-byte Folded Reload 1209*4cce1074Sknickish; ATOMIC-PIC-NEXT: adda.l #4, %sp 1210*4cce1074Sknickish; ATOMIC-PIC-NEXT: rts 1211*4cce1074Sknickishstart: 1212*4cce1074Sknickish %self1 = load ptr, ptr %self, align 2 1213*4cce1074Sknickish %_18.i.i = getelementptr inbounds i8, ptr %self1, i32 4 1214*4cce1074Sknickish %6 = atomicrmw sub ptr %_18.i.i, i8 1 release, align 4 1215*4cce1074Sknickish ret i8 %6 1216*4cce1074Sknickish} 1217*4cce1074Sknickish 1218*4cce1074Sknickishdefine i16 @atomicrmw_sub_i16_arid(ptr align 2 %self) { 1219*4cce1074Sknickish; NO-ATOMIC-LABEL: atomicrmw_sub_i16_arid: 1220*4cce1074Sknickish; NO-ATOMIC: .cfi_startproc 1221*4cce1074Sknickish; NO-ATOMIC-NEXT: ; %bb.0: ; %start 1222*4cce1074Sknickish; NO-ATOMIC-NEXT: suba.l #12, %sp 1223*4cce1074Sknickish; NO-ATOMIC-NEXT: .cfi_def_cfa_offset -16 1224*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l (16,%sp), %a0 1225*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l (%a0), %d0 1226*4cce1074Sknickish; NO-ATOMIC-NEXT: add.l #4, %d0 1227*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l %d0, (%sp) 1228*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l #1, (4,%sp) 1229*4cce1074Sknickish; NO-ATOMIC-NEXT: jsr __sync_fetch_and_sub_2 1230*4cce1074Sknickish; NO-ATOMIC-NEXT: adda.l #12, %sp 1231*4cce1074Sknickish; NO-ATOMIC-NEXT: rts 1232*4cce1074Sknickish; 1233*4cce1074Sknickish; NO-ATOMIC-PIC-LABEL: atomicrmw_sub_i16_arid: 1234*4cce1074Sknickish; NO-ATOMIC-PIC: .cfi_startproc 1235*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: ; %bb.0: ; %start 1236*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: suba.l #12, %sp 1237*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: .cfi_def_cfa_offset -16 1238*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l (16,%sp), %a0 1239*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l (%a0), %d0 1240*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: add.l #4, %d0 1241*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l %d0, (%sp) 1242*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l #1, (4,%sp) 1243*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: jsr (__sync_fetch_and_sub_2@PLT,%pc) 1244*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: adda.l #12, %sp 1245*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: rts 1246*4cce1074Sknickish; 1247*4cce1074Sknickish; ATOMIC-LABEL: atomicrmw_sub_i16_arid: 1248*4cce1074Sknickish; ATOMIC: .cfi_startproc 1249*4cce1074Sknickish; ATOMIC-NEXT: ; %bb.0: ; %start 1250*4cce1074Sknickish; ATOMIC-NEXT: suba.l #4, %sp 1251*4cce1074Sknickish; ATOMIC-NEXT: .cfi_def_cfa_offset -8 1252*4cce1074Sknickish; ATOMIC-NEXT: movem.l %d2, (0,%sp) ; 8-byte Folded Spill 1253*4cce1074Sknickish; ATOMIC-NEXT: move.l (8,%sp), %a0 1254*4cce1074Sknickish; ATOMIC-NEXT: move.l (%a0), %a0 1255*4cce1074Sknickish; ATOMIC-NEXT: move.w (4,%a0), %d1 1256*4cce1074Sknickish; ATOMIC-NEXT: move.w %d1, %d0 1257*4cce1074Sknickish; ATOMIC-NEXT: .LBB13_1: ; %atomicrmw.start 1258*4cce1074Sknickish; ATOMIC-NEXT: ; =>This Inner Loop Header: Depth=1 1259*4cce1074Sknickish; ATOMIC-NEXT: move.w %d1, %d2 1260*4cce1074Sknickish; ATOMIC-NEXT: add.w #-1, %d2 1261*4cce1074Sknickish; ATOMIC-NEXT: cas.w %d0, %d2, (4,%a0) 1262*4cce1074Sknickish; ATOMIC-NEXT: move.w %d0, %d2 1263*4cce1074Sknickish; ATOMIC-NEXT: sub.w %d1, %d2 1264*4cce1074Sknickish; ATOMIC-NEXT: seq %d1 1265*4cce1074Sknickish; ATOMIC-NEXT: sub.b #1, %d1 1266*4cce1074Sknickish; ATOMIC-NEXT: move.w %d0, %d1 1267*4cce1074Sknickish; ATOMIC-NEXT: bne .LBB13_1 1268*4cce1074Sknickish; ATOMIC-NEXT: ; %bb.2: ; %atomicrmw.end 1269*4cce1074Sknickish; ATOMIC-NEXT: movem.l (0,%sp), %d2 ; 8-byte Folded Reload 1270*4cce1074Sknickish; ATOMIC-NEXT: adda.l #4, %sp 1271*4cce1074Sknickish; ATOMIC-NEXT: rts 1272*4cce1074Sknickish; 1273*4cce1074Sknickish; ATOMIC-PIC-LABEL: atomicrmw_sub_i16_arid: 1274*4cce1074Sknickish; ATOMIC-PIC: .cfi_startproc 1275*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; %bb.0: ; %start 1276*4cce1074Sknickish; ATOMIC-PIC-NEXT: suba.l #4, %sp 1277*4cce1074Sknickish; ATOMIC-PIC-NEXT: .cfi_def_cfa_offset -8 1278*4cce1074Sknickish; ATOMIC-PIC-NEXT: movem.l %d2, (0,%sp) ; 8-byte Folded Spill 1279*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l (8,%sp), %a0 1280*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l (%a0), %a0 1281*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.w (4,%a0), %d1 1282*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.w %d1, %d0 1283*4cce1074Sknickish; ATOMIC-PIC-NEXT: .LBB13_1: ; %atomicrmw.start 1284*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; =>This Inner Loop Header: Depth=1 1285*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.w %d1, %d2 1286*4cce1074Sknickish; ATOMIC-PIC-NEXT: add.w #-1, %d2 1287*4cce1074Sknickish; ATOMIC-PIC-NEXT: cas.w %d0, %d2, (4,%a0) 1288*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.w %d0, %d2 1289*4cce1074Sknickish; ATOMIC-PIC-NEXT: sub.w %d1, %d2 1290*4cce1074Sknickish; ATOMIC-PIC-NEXT: seq %d1 1291*4cce1074Sknickish; ATOMIC-PIC-NEXT: sub.b #1, %d1 1292*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.w %d0, %d1 1293*4cce1074Sknickish; ATOMIC-PIC-NEXT: bne .LBB13_1 1294*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; %bb.2: ; %atomicrmw.end 1295*4cce1074Sknickish; ATOMIC-PIC-NEXT: movem.l (0,%sp), %d2 ; 8-byte Folded Reload 1296*4cce1074Sknickish; ATOMIC-PIC-NEXT: adda.l #4, %sp 1297*4cce1074Sknickish; ATOMIC-PIC-NEXT: rts 1298*4cce1074Sknickishstart: 1299*4cce1074Sknickish %self1 = load ptr, ptr %self, align 2 1300*4cce1074Sknickish %_18.i.i = getelementptr inbounds i8, ptr %self1, i32 4 1301*4cce1074Sknickish %6 = atomicrmw sub ptr %_18.i.i, i16 1 release, align 4 1302*4cce1074Sknickish ret i16 %6 1303*4cce1074Sknickish} 1304*4cce1074Sknickish 1305*4cce1074Sknickishdefine i32 @atomicrmw_sub_i32_arid(ptr align 2 %self) { 1306*4cce1074Sknickish; NO-ATOMIC-LABEL: atomicrmw_sub_i32_arid: 1307*4cce1074Sknickish; NO-ATOMIC: .cfi_startproc 1308*4cce1074Sknickish; NO-ATOMIC-NEXT: ; %bb.0: ; %start 1309*4cce1074Sknickish; NO-ATOMIC-NEXT: suba.l #12, %sp 1310*4cce1074Sknickish; NO-ATOMIC-NEXT: .cfi_def_cfa_offset -16 1311*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l (16,%sp), %a0 1312*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l (%a0), %d0 1313*4cce1074Sknickish; NO-ATOMIC-NEXT: add.l #4, %d0 1314*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l %d0, (%sp) 1315*4cce1074Sknickish; NO-ATOMIC-NEXT: move.l #1, (4,%sp) 1316*4cce1074Sknickish; NO-ATOMIC-NEXT: jsr __sync_fetch_and_sub_4 1317*4cce1074Sknickish; NO-ATOMIC-NEXT: adda.l #12, %sp 1318*4cce1074Sknickish; NO-ATOMIC-NEXT: rts 1319*4cce1074Sknickish; 1320*4cce1074Sknickish; NO-ATOMIC-PIC-LABEL: atomicrmw_sub_i32_arid: 1321*4cce1074Sknickish; NO-ATOMIC-PIC: .cfi_startproc 1322*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: ; %bb.0: ; %start 1323*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: suba.l #12, %sp 1324*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: .cfi_def_cfa_offset -16 1325*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l (16,%sp), %a0 1326*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l (%a0), %d0 1327*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: add.l #4, %d0 1328*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l %d0, (%sp) 1329*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: move.l #1, (4,%sp) 1330*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: jsr (__sync_fetch_and_sub_4@PLT,%pc) 1331*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: adda.l #12, %sp 1332*4cce1074Sknickish; NO-ATOMIC-PIC-NEXT: rts 1333*4cce1074Sknickish; 1334*4cce1074Sknickish; ATOMIC-LABEL: atomicrmw_sub_i32_arid: 1335*4cce1074Sknickish; ATOMIC: .cfi_startproc 1336*4cce1074Sknickish; ATOMIC-NEXT: ; %bb.0: ; %start 1337*4cce1074Sknickish; ATOMIC-NEXT: suba.l #4, %sp 1338*4cce1074Sknickish; ATOMIC-NEXT: .cfi_def_cfa_offset -8 1339*4cce1074Sknickish; ATOMIC-NEXT: movem.l %d2, (0,%sp) ; 8-byte Folded Spill 1340*4cce1074Sknickish; ATOMIC-NEXT: move.l (8,%sp), %a0 1341*4cce1074Sknickish; ATOMIC-NEXT: move.l (%a0), %a0 1342*4cce1074Sknickish; ATOMIC-NEXT: move.l (4,%a0), %d1 1343*4cce1074Sknickish; ATOMIC-NEXT: move.l %d1, %d0 1344*4cce1074Sknickish; ATOMIC-NEXT: .LBB14_1: ; %atomicrmw.start 1345*4cce1074Sknickish; ATOMIC-NEXT: ; =>This Inner Loop Header: Depth=1 1346*4cce1074Sknickish; ATOMIC-NEXT: move.l %d1, %d2 1347*4cce1074Sknickish; ATOMIC-NEXT: add.l #-1, %d2 1348*4cce1074Sknickish; ATOMIC-NEXT: cas.l %d0, %d2, (4,%a0) 1349*4cce1074Sknickish; ATOMIC-NEXT: move.l %d0, %d2 1350*4cce1074Sknickish; ATOMIC-NEXT: sub.l %d1, %d2 1351*4cce1074Sknickish; ATOMIC-NEXT: seq %d1 1352*4cce1074Sknickish; ATOMIC-NEXT: sub.b #1, %d1 1353*4cce1074Sknickish; ATOMIC-NEXT: move.l %d0, %d1 1354*4cce1074Sknickish; ATOMIC-NEXT: bne .LBB14_1 1355*4cce1074Sknickish; ATOMIC-NEXT: ; %bb.2: ; %atomicrmw.end 1356*4cce1074Sknickish; ATOMIC-NEXT: movem.l (0,%sp), %d2 ; 8-byte Folded Reload 1357*4cce1074Sknickish; ATOMIC-NEXT: adda.l #4, %sp 1358*4cce1074Sknickish; ATOMIC-NEXT: rts 1359*4cce1074Sknickish; 1360*4cce1074Sknickish; ATOMIC-PIC-LABEL: atomicrmw_sub_i32_arid: 1361*4cce1074Sknickish; ATOMIC-PIC: .cfi_startproc 1362*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; %bb.0: ; %start 1363*4cce1074Sknickish; ATOMIC-PIC-NEXT: suba.l #4, %sp 1364*4cce1074Sknickish; ATOMIC-PIC-NEXT: .cfi_def_cfa_offset -8 1365*4cce1074Sknickish; ATOMIC-PIC-NEXT: movem.l %d2, (0,%sp) ; 8-byte Folded Spill 1366*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l (8,%sp), %a0 1367*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l (%a0), %a0 1368*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l (4,%a0), %d1 1369*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l %d1, %d0 1370*4cce1074Sknickish; ATOMIC-PIC-NEXT: .LBB14_1: ; %atomicrmw.start 1371*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; =>This Inner Loop Header: Depth=1 1372*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l %d1, %d2 1373*4cce1074Sknickish; ATOMIC-PIC-NEXT: add.l #-1, %d2 1374*4cce1074Sknickish; ATOMIC-PIC-NEXT: cas.l %d0, %d2, (4,%a0) 1375*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l %d0, %d2 1376*4cce1074Sknickish; ATOMIC-PIC-NEXT: sub.l %d1, %d2 1377*4cce1074Sknickish; ATOMIC-PIC-NEXT: seq %d1 1378*4cce1074Sknickish; ATOMIC-PIC-NEXT: sub.b #1, %d1 1379*4cce1074Sknickish; ATOMIC-PIC-NEXT: move.l %d0, %d1 1380*4cce1074Sknickish; ATOMIC-PIC-NEXT: bne .LBB14_1 1381*4cce1074Sknickish; ATOMIC-PIC-NEXT: ; %bb.2: ; %atomicrmw.end 1382*4cce1074Sknickish; ATOMIC-PIC-NEXT: movem.l (0,%sp), %d2 ; 8-byte Folded Reload 1383*4cce1074Sknickish; ATOMIC-PIC-NEXT: adda.l #4, %sp 1384*4cce1074Sknickish; ATOMIC-PIC-NEXT: rts 1385*4cce1074Sknickishstart: 1386*4cce1074Sknickish %self1 = load ptr, ptr %self, align 2 1387*4cce1074Sknickish %_18.i.i = getelementptr inbounds i8, ptr %self1, i32 4 1388*4cce1074Sknickish %6 = atomicrmw sub ptr %_18.i.i, i32 1 release, align 4 1389*4cce1074Sknickish ret i32 %6 1390*4cce1074Sknickish} 1391