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