1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc %s -o - -mtriple=m68k -mcpu=M68000 --code-model=large | FileCheck %s --check-prefix=NO-ATOMIC 3; RUN: llc %s -o - -mtriple=m68k -mcpu=M68010 --code-model=large | FileCheck %s --check-prefix=NO-ATOMIC 4; RUN: llc %s -o - -mtriple=m68k -mcpu=M68000 --code-model=large --relocation-model=pic | FileCheck %s --check-prefix=NO-ATOMIC-PIC 5; RUN: llc %s -o - -mtriple=m68k -mcpu=M68010 --code-model=large --relocation-model=pic | FileCheck %s --check-prefix=NO-ATOMIC-PIC 6; RUN: llc %s -o - -mtriple=m68k -mcpu=M68020 --code-model=large | FileCheck %s --check-prefix=ATOMIC 7; RUN: llc %s -o - -mtriple=m68k -mcpu=M68030 --code-model=large | FileCheck %s --check-prefix=ATOMIC 8; RUN: llc %s -o - -mtriple=m68k -mcpu=M68040 --code-model=large | FileCheck %s --check-prefix=ATOMIC 9; RUN: llc %s -o - -mtriple=m68k -mcpu=M68020 --code-model=large --relocation-model=pic | FileCheck %s --check-prefix=ATOMIC-PIC 10; RUN: llc %s -o - -mtriple=m68k -mcpu=M68030 --code-model=large --relocation-model=pic | FileCheck %s --check-prefix=ATOMIC-PIC 11; RUN: llc %s -o - -mtriple=m68k -mcpu=M68040 --code-model=large --relocation-model=pic | FileCheck %s --check-prefix=ATOMIC-PIC 12 13define i8 @atomic_load_i8_unordered(ptr %a) nounwind { 14; NO-ATOMIC-LABEL: atomic_load_i8_unordered: 15; NO-ATOMIC: ; %bb.0: 16; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 17; NO-ATOMIC-NEXT: move.b (%a0), %d0 18; NO-ATOMIC-NEXT: rts 19; 20; NO-ATOMIC-PIC-LABEL: atomic_load_i8_unordered: 21; NO-ATOMIC-PIC: ; %bb.0: 22; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 23; NO-ATOMIC-PIC-NEXT: move.b (%a0), %d0 24; NO-ATOMIC-PIC-NEXT: rts 25; 26; ATOMIC-LABEL: atomic_load_i8_unordered: 27; ATOMIC: ; %bb.0: 28; ATOMIC-NEXT: move.l (4,%sp), %a0 29; ATOMIC-NEXT: move.b (%a0), %d0 30; ATOMIC-NEXT: rts 31; 32; ATOMIC-PIC-LABEL: atomic_load_i8_unordered: 33; ATOMIC-PIC: ; %bb.0: 34; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 35; ATOMIC-PIC-NEXT: move.b (%a0), %d0 36; ATOMIC-PIC-NEXT: rts 37 %1 = load atomic i8, ptr %a unordered, align 1 38 ret i8 %1 39} 40 41define i8 @atomic_load_i8_monotonic(ptr %a) nounwind { 42; NO-ATOMIC-LABEL: atomic_load_i8_monotonic: 43; NO-ATOMIC: ; %bb.0: 44; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 45; NO-ATOMIC-NEXT: move.b (%a0), %d0 46; NO-ATOMIC-NEXT: rts 47; 48; NO-ATOMIC-PIC-LABEL: atomic_load_i8_monotonic: 49; NO-ATOMIC-PIC: ; %bb.0: 50; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 51; NO-ATOMIC-PIC-NEXT: move.b (%a0), %d0 52; NO-ATOMIC-PIC-NEXT: rts 53; 54; ATOMIC-LABEL: atomic_load_i8_monotonic: 55; ATOMIC: ; %bb.0: 56; ATOMIC-NEXT: move.l (4,%sp), %a0 57; ATOMIC-NEXT: move.b (%a0), %d0 58; ATOMIC-NEXT: rts 59; 60; ATOMIC-PIC-LABEL: atomic_load_i8_monotonic: 61; ATOMIC-PIC: ; %bb.0: 62; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 63; ATOMIC-PIC-NEXT: move.b (%a0), %d0 64; ATOMIC-PIC-NEXT: rts 65 %1 = load atomic i8, ptr %a monotonic, align 1 66 ret i8 %1 67} 68 69define i8 @atomic_load_i8_acquire(ptr %a) nounwind { 70; NO-ATOMIC-LABEL: atomic_load_i8_acquire: 71; NO-ATOMIC: ; %bb.0: 72; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 73; NO-ATOMIC-NEXT: move.b (%a0), %d0 74; NO-ATOMIC-NEXT: rts 75; 76; NO-ATOMIC-PIC-LABEL: atomic_load_i8_acquire: 77; NO-ATOMIC-PIC: ; %bb.0: 78; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 79; NO-ATOMIC-PIC-NEXT: move.b (%a0), %d0 80; NO-ATOMIC-PIC-NEXT: rts 81; 82; ATOMIC-LABEL: atomic_load_i8_acquire: 83; ATOMIC: ; %bb.0: 84; ATOMIC-NEXT: move.l (4,%sp), %a0 85; ATOMIC-NEXT: move.b (%a0), %d0 86; ATOMIC-NEXT: rts 87; 88; ATOMIC-PIC-LABEL: atomic_load_i8_acquire: 89; ATOMIC-PIC: ; %bb.0: 90; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 91; ATOMIC-PIC-NEXT: move.b (%a0), %d0 92; ATOMIC-PIC-NEXT: rts 93 %1 = load atomic i8, ptr %a acquire, align 1 94 ret i8 %1 95} 96 97define i8 @atomic_load_i8_seq_cst(ptr %a) nounwind { 98; NO-ATOMIC-LABEL: atomic_load_i8_seq_cst: 99; NO-ATOMIC: ; %bb.0: 100; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 101; NO-ATOMIC-NEXT: move.b (%a0), %d0 102; NO-ATOMIC-NEXT: rts 103; 104; NO-ATOMIC-PIC-LABEL: atomic_load_i8_seq_cst: 105; NO-ATOMIC-PIC: ; %bb.0: 106; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 107; NO-ATOMIC-PIC-NEXT: move.b (%a0), %d0 108; NO-ATOMIC-PIC-NEXT: rts 109; 110; ATOMIC-LABEL: atomic_load_i8_seq_cst: 111; ATOMIC: ; %bb.0: 112; ATOMIC-NEXT: move.l (4,%sp), %a0 113; ATOMIC-NEXT: move.b (%a0), %d0 114; ATOMIC-NEXT: rts 115; 116; ATOMIC-PIC-LABEL: atomic_load_i8_seq_cst: 117; ATOMIC-PIC: ; %bb.0: 118; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 119; ATOMIC-PIC-NEXT: move.b (%a0), %d0 120; ATOMIC-PIC-NEXT: rts 121 %1 = load atomic i8, ptr %a seq_cst, align 1 122 ret i8 %1 123} 124 125define i16 @atomic_load_i16_unordered(ptr %a) nounwind { 126; NO-ATOMIC-LABEL: atomic_load_i16_unordered: 127; NO-ATOMIC: ; %bb.0: 128; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 129; NO-ATOMIC-NEXT: move.w (%a0), %d0 130; NO-ATOMIC-NEXT: rts 131; 132; NO-ATOMIC-PIC-LABEL: atomic_load_i16_unordered: 133; NO-ATOMIC-PIC: ; %bb.0: 134; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 135; NO-ATOMIC-PIC-NEXT: move.w (%a0), %d0 136; NO-ATOMIC-PIC-NEXT: rts 137; 138; ATOMIC-LABEL: atomic_load_i16_unordered: 139; ATOMIC: ; %bb.0: 140; ATOMIC-NEXT: move.l (4,%sp), %a0 141; ATOMIC-NEXT: move.w (%a0), %d0 142; ATOMIC-NEXT: rts 143; 144; ATOMIC-PIC-LABEL: atomic_load_i16_unordered: 145; ATOMIC-PIC: ; %bb.0: 146; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 147; ATOMIC-PIC-NEXT: move.w (%a0), %d0 148; ATOMIC-PIC-NEXT: rts 149 %1 = load atomic i16, ptr %a unordered, align 2 150 ret i16 %1 151} 152 153define i16 @atomic_load_i16_monotonic(ptr %a) nounwind { 154; NO-ATOMIC-LABEL: atomic_load_i16_monotonic: 155; NO-ATOMIC: ; %bb.0: 156; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 157; NO-ATOMIC-NEXT: move.w (%a0), %d0 158; NO-ATOMIC-NEXT: rts 159; 160; NO-ATOMIC-PIC-LABEL: atomic_load_i16_monotonic: 161; NO-ATOMIC-PIC: ; %bb.0: 162; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 163; NO-ATOMIC-PIC-NEXT: move.w (%a0), %d0 164; NO-ATOMIC-PIC-NEXT: rts 165; 166; ATOMIC-LABEL: atomic_load_i16_monotonic: 167; ATOMIC: ; %bb.0: 168; ATOMIC-NEXT: move.l (4,%sp), %a0 169; ATOMIC-NEXT: move.w (%a0), %d0 170; ATOMIC-NEXT: rts 171; 172; ATOMIC-PIC-LABEL: atomic_load_i16_monotonic: 173; ATOMIC-PIC: ; %bb.0: 174; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 175; ATOMIC-PIC-NEXT: move.w (%a0), %d0 176; ATOMIC-PIC-NEXT: rts 177 %1 = load atomic i16, ptr %a monotonic, align 2 178 ret i16 %1 179} 180 181define i16 @atomic_load_i16_acquire(ptr %a) nounwind { 182; NO-ATOMIC-LABEL: atomic_load_i16_acquire: 183; NO-ATOMIC: ; %bb.0: 184; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 185; NO-ATOMIC-NEXT: move.w (%a0), %d0 186; NO-ATOMIC-NEXT: rts 187; 188; NO-ATOMIC-PIC-LABEL: atomic_load_i16_acquire: 189; NO-ATOMIC-PIC: ; %bb.0: 190; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 191; NO-ATOMIC-PIC-NEXT: move.w (%a0), %d0 192; NO-ATOMIC-PIC-NEXT: rts 193; 194; ATOMIC-LABEL: atomic_load_i16_acquire: 195; ATOMIC: ; %bb.0: 196; ATOMIC-NEXT: move.l (4,%sp), %a0 197; ATOMIC-NEXT: move.w (%a0), %d0 198; ATOMIC-NEXT: rts 199; 200; ATOMIC-PIC-LABEL: atomic_load_i16_acquire: 201; ATOMIC-PIC: ; %bb.0: 202; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 203; ATOMIC-PIC-NEXT: move.w (%a0), %d0 204; ATOMIC-PIC-NEXT: rts 205 %1 = load atomic i16, ptr %a acquire, align 2 206 ret i16 %1 207} 208 209define i16 @atomic_load_i16_seq_cst(ptr %a) nounwind { 210; NO-ATOMIC-LABEL: atomic_load_i16_seq_cst: 211; NO-ATOMIC: ; %bb.0: 212; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 213; NO-ATOMIC-NEXT: move.w (%a0), %d0 214; NO-ATOMIC-NEXT: rts 215; 216; NO-ATOMIC-PIC-LABEL: atomic_load_i16_seq_cst: 217; NO-ATOMIC-PIC: ; %bb.0: 218; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 219; NO-ATOMIC-PIC-NEXT: move.w (%a0), %d0 220; NO-ATOMIC-PIC-NEXT: rts 221; 222; ATOMIC-LABEL: atomic_load_i16_seq_cst: 223; ATOMIC: ; %bb.0: 224; ATOMIC-NEXT: move.l (4,%sp), %a0 225; ATOMIC-NEXT: move.w (%a0), %d0 226; ATOMIC-NEXT: rts 227; 228; ATOMIC-PIC-LABEL: atomic_load_i16_seq_cst: 229; ATOMIC-PIC: ; %bb.0: 230; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 231; ATOMIC-PIC-NEXT: move.w (%a0), %d0 232; ATOMIC-PIC-NEXT: rts 233 %1 = load atomic i16, ptr %a seq_cst, align 2 234 ret i16 %1 235} 236 237define i32 @atomic_load_i32_unordered(ptr %a) nounwind { 238; NO-ATOMIC-LABEL: atomic_load_i32_unordered: 239; NO-ATOMIC: ; %bb.0: 240; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 241; NO-ATOMIC-NEXT: move.l (%a0), %d0 242; NO-ATOMIC-NEXT: rts 243; 244; NO-ATOMIC-PIC-LABEL: atomic_load_i32_unordered: 245; NO-ATOMIC-PIC: ; %bb.0: 246; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 247; NO-ATOMIC-PIC-NEXT: move.l (%a0), %d0 248; NO-ATOMIC-PIC-NEXT: rts 249; 250; ATOMIC-LABEL: atomic_load_i32_unordered: 251; ATOMIC: ; %bb.0: 252; ATOMIC-NEXT: move.l (4,%sp), %a0 253; ATOMIC-NEXT: move.l (%a0), %d0 254; ATOMIC-NEXT: rts 255; 256; ATOMIC-PIC-LABEL: atomic_load_i32_unordered: 257; ATOMIC-PIC: ; %bb.0: 258; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 259; ATOMIC-PIC-NEXT: move.l (%a0), %d0 260; ATOMIC-PIC-NEXT: rts 261 %1 = load atomic i32, ptr %a unordered, align 4 262 ret i32 %1 263} 264 265define i32 @atomic_load_i32_monotonic(ptr %a) nounwind { 266; NO-ATOMIC-LABEL: atomic_load_i32_monotonic: 267; NO-ATOMIC: ; %bb.0: 268; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 269; NO-ATOMIC-NEXT: move.l (%a0), %d0 270; NO-ATOMIC-NEXT: rts 271; 272; NO-ATOMIC-PIC-LABEL: atomic_load_i32_monotonic: 273; NO-ATOMIC-PIC: ; %bb.0: 274; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 275; NO-ATOMIC-PIC-NEXT: move.l (%a0), %d0 276; NO-ATOMIC-PIC-NEXT: rts 277; 278; ATOMIC-LABEL: atomic_load_i32_monotonic: 279; ATOMIC: ; %bb.0: 280; ATOMIC-NEXT: move.l (4,%sp), %a0 281; ATOMIC-NEXT: move.l (%a0), %d0 282; ATOMIC-NEXT: rts 283; 284; ATOMIC-PIC-LABEL: atomic_load_i32_monotonic: 285; ATOMIC-PIC: ; %bb.0: 286; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 287; ATOMIC-PIC-NEXT: move.l (%a0), %d0 288; ATOMIC-PIC-NEXT: rts 289 %1 = load atomic i32, ptr %a monotonic, align 4 290 ret i32 %1 291} 292 293define i32 @atomic_load_i32_acquire(ptr %a) nounwind { 294; NO-ATOMIC-LABEL: atomic_load_i32_acquire: 295; NO-ATOMIC: ; %bb.0: 296; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 297; NO-ATOMIC-NEXT: move.l (%a0), %d0 298; NO-ATOMIC-NEXT: rts 299; 300; NO-ATOMIC-PIC-LABEL: atomic_load_i32_acquire: 301; NO-ATOMIC-PIC: ; %bb.0: 302; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 303; NO-ATOMIC-PIC-NEXT: move.l (%a0), %d0 304; NO-ATOMIC-PIC-NEXT: rts 305; 306; ATOMIC-LABEL: atomic_load_i32_acquire: 307; ATOMIC: ; %bb.0: 308; ATOMIC-NEXT: move.l (4,%sp), %a0 309; ATOMIC-NEXT: move.l (%a0), %d0 310; ATOMIC-NEXT: rts 311; 312; ATOMIC-PIC-LABEL: atomic_load_i32_acquire: 313; ATOMIC-PIC: ; %bb.0: 314; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 315; ATOMIC-PIC-NEXT: move.l (%a0), %d0 316; ATOMIC-PIC-NEXT: rts 317 %1 = load atomic i32, ptr %a acquire, align 4 318 ret i32 %1 319} 320 321define i32 @atomic_load_i32_seq_cst(ptr %a) nounwind { 322; NO-ATOMIC-LABEL: atomic_load_i32_seq_cst: 323; NO-ATOMIC: ; %bb.0: 324; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 325; NO-ATOMIC-NEXT: move.l (%a0), %d0 326; NO-ATOMIC-NEXT: rts 327; 328; NO-ATOMIC-PIC-LABEL: atomic_load_i32_seq_cst: 329; NO-ATOMIC-PIC: ; %bb.0: 330; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 331; NO-ATOMIC-PIC-NEXT: move.l (%a0), %d0 332; NO-ATOMIC-PIC-NEXT: rts 333; 334; ATOMIC-LABEL: atomic_load_i32_seq_cst: 335; ATOMIC: ; %bb.0: 336; ATOMIC-NEXT: move.l (4,%sp), %a0 337; ATOMIC-NEXT: move.l (%a0), %d0 338; ATOMIC-NEXT: rts 339; 340; ATOMIC-PIC-LABEL: atomic_load_i32_seq_cst: 341; ATOMIC-PIC: ; %bb.0: 342; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 343; ATOMIC-PIC-NEXT: move.l (%a0), %d0 344; ATOMIC-PIC-NEXT: rts 345 %1 = load atomic i32, ptr %a seq_cst, align 4 346 ret i32 %1 347} 348 349define i64 @atomic_load_i64_unordered(ptr %a) nounwind { 350; NO-ATOMIC-LABEL: atomic_load_i64_unordered: 351; NO-ATOMIC: ; %bb.0: 352; NO-ATOMIC-NEXT: suba.l #12, %sp 353; NO-ATOMIC-NEXT: move.l #0, (4,%sp) 354; NO-ATOMIC-NEXT: move.l (16,%sp), (%sp) 355; NO-ATOMIC-NEXT: jsr __atomic_load_8 356; NO-ATOMIC-NEXT: adda.l #12, %sp 357; NO-ATOMIC-NEXT: rts 358; 359; NO-ATOMIC-PIC-LABEL: atomic_load_i64_unordered: 360; NO-ATOMIC-PIC: ; %bb.0: 361; NO-ATOMIC-PIC-NEXT: suba.l #12, %sp 362; NO-ATOMIC-PIC-NEXT: move.l #0, (4,%sp) 363; NO-ATOMIC-PIC-NEXT: move.l (16,%sp), (%sp) 364; NO-ATOMIC-PIC-NEXT: jsr (__atomic_load_8@PLT,%pc) 365; NO-ATOMIC-PIC-NEXT: adda.l #12, %sp 366; NO-ATOMIC-PIC-NEXT: rts 367; 368; ATOMIC-LABEL: atomic_load_i64_unordered: 369; ATOMIC: ; %bb.0: 370; ATOMIC-NEXT: suba.l #12, %sp 371; ATOMIC-NEXT: move.l #0, (4,%sp) 372; ATOMIC-NEXT: move.l (16,%sp), (%sp) 373; ATOMIC-NEXT: jsr __atomic_load_8 374; ATOMIC-NEXT: adda.l #12, %sp 375; ATOMIC-NEXT: rts 376; 377; ATOMIC-PIC-LABEL: atomic_load_i64_unordered: 378; ATOMIC-PIC: ; %bb.0: 379; ATOMIC-PIC-NEXT: suba.l #12, %sp 380; ATOMIC-PIC-NEXT: move.l #0, (4,%sp) 381; ATOMIC-PIC-NEXT: move.l (16,%sp), (%sp) 382; ATOMIC-PIC-NEXT: jsr (__atomic_load_8@PLT,%pc) 383; ATOMIC-PIC-NEXT: adda.l #12, %sp 384; ATOMIC-PIC-NEXT: rts 385 %1 = load atomic i64, ptr %a unordered, align 8 386 ret i64 %1 387} 388 389define i64 @atomic_load_i64_monotonic(ptr %a) nounwind { 390; NO-ATOMIC-LABEL: atomic_load_i64_monotonic: 391; NO-ATOMIC: ; %bb.0: 392; NO-ATOMIC-NEXT: suba.l #12, %sp 393; NO-ATOMIC-NEXT: move.l #0, (4,%sp) 394; NO-ATOMIC-NEXT: move.l (16,%sp), (%sp) 395; NO-ATOMIC-NEXT: jsr __atomic_load_8 396; NO-ATOMIC-NEXT: adda.l #12, %sp 397; NO-ATOMIC-NEXT: rts 398; 399; NO-ATOMIC-PIC-LABEL: atomic_load_i64_monotonic: 400; NO-ATOMIC-PIC: ; %bb.0: 401; NO-ATOMIC-PIC-NEXT: suba.l #12, %sp 402; NO-ATOMIC-PIC-NEXT: move.l #0, (4,%sp) 403; NO-ATOMIC-PIC-NEXT: move.l (16,%sp), (%sp) 404; NO-ATOMIC-PIC-NEXT: jsr (__atomic_load_8@PLT,%pc) 405; NO-ATOMIC-PIC-NEXT: adda.l #12, %sp 406; NO-ATOMIC-PIC-NEXT: rts 407; 408; ATOMIC-LABEL: atomic_load_i64_monotonic: 409; ATOMIC: ; %bb.0: 410; ATOMIC-NEXT: suba.l #12, %sp 411; ATOMIC-NEXT: move.l #0, (4,%sp) 412; ATOMIC-NEXT: move.l (16,%sp), (%sp) 413; ATOMIC-NEXT: jsr __atomic_load_8 414; ATOMIC-NEXT: adda.l #12, %sp 415; ATOMIC-NEXT: rts 416; 417; ATOMIC-PIC-LABEL: atomic_load_i64_monotonic: 418; ATOMIC-PIC: ; %bb.0: 419; ATOMIC-PIC-NEXT: suba.l #12, %sp 420; ATOMIC-PIC-NEXT: move.l #0, (4,%sp) 421; ATOMIC-PIC-NEXT: move.l (16,%sp), (%sp) 422; ATOMIC-PIC-NEXT: jsr (__atomic_load_8@PLT,%pc) 423; ATOMIC-PIC-NEXT: adda.l #12, %sp 424; ATOMIC-PIC-NEXT: rts 425 %1 = load atomic i64, ptr %a monotonic, align 8 426 ret i64 %1 427} 428 429define i64 @atomic_load_i64_acquire(ptr %a) nounwind { 430; NO-ATOMIC-LABEL: atomic_load_i64_acquire: 431; NO-ATOMIC: ; %bb.0: 432; NO-ATOMIC-NEXT: suba.l #12, %sp 433; NO-ATOMIC-NEXT: move.l #2, (4,%sp) 434; NO-ATOMIC-NEXT: move.l (16,%sp), (%sp) 435; NO-ATOMIC-NEXT: jsr __atomic_load_8 436; NO-ATOMIC-NEXT: adda.l #12, %sp 437; NO-ATOMIC-NEXT: rts 438; 439; NO-ATOMIC-PIC-LABEL: atomic_load_i64_acquire: 440; NO-ATOMIC-PIC: ; %bb.0: 441; NO-ATOMIC-PIC-NEXT: suba.l #12, %sp 442; NO-ATOMIC-PIC-NEXT: move.l #2, (4,%sp) 443; NO-ATOMIC-PIC-NEXT: move.l (16,%sp), (%sp) 444; NO-ATOMIC-PIC-NEXT: jsr (__atomic_load_8@PLT,%pc) 445; NO-ATOMIC-PIC-NEXT: adda.l #12, %sp 446; NO-ATOMIC-PIC-NEXT: rts 447; 448; ATOMIC-LABEL: atomic_load_i64_acquire: 449; ATOMIC: ; %bb.0: 450; ATOMIC-NEXT: suba.l #12, %sp 451; ATOMIC-NEXT: move.l #2, (4,%sp) 452; ATOMIC-NEXT: move.l (16,%sp), (%sp) 453; ATOMIC-NEXT: jsr __atomic_load_8 454; ATOMIC-NEXT: adda.l #12, %sp 455; ATOMIC-NEXT: rts 456; 457; ATOMIC-PIC-LABEL: atomic_load_i64_acquire: 458; ATOMIC-PIC: ; %bb.0: 459; ATOMIC-PIC-NEXT: suba.l #12, %sp 460; ATOMIC-PIC-NEXT: move.l #2, (4,%sp) 461; ATOMIC-PIC-NEXT: move.l (16,%sp), (%sp) 462; ATOMIC-PIC-NEXT: jsr (__atomic_load_8@PLT,%pc) 463; ATOMIC-PIC-NEXT: adda.l #12, %sp 464; ATOMIC-PIC-NEXT: rts 465 %1 = load atomic i64, ptr %a acquire, align 8 466 ret i64 %1 467} 468 469define i64 @atomic_load_i64_seq_cst(ptr %a) nounwind { 470; NO-ATOMIC-LABEL: atomic_load_i64_seq_cst: 471; NO-ATOMIC: ; %bb.0: 472; NO-ATOMIC-NEXT: suba.l #12, %sp 473; NO-ATOMIC-NEXT: move.l #5, (4,%sp) 474; NO-ATOMIC-NEXT: move.l (16,%sp), (%sp) 475; NO-ATOMIC-NEXT: jsr __atomic_load_8 476; NO-ATOMIC-NEXT: adda.l #12, %sp 477; NO-ATOMIC-NEXT: rts 478; 479; NO-ATOMIC-PIC-LABEL: atomic_load_i64_seq_cst: 480; NO-ATOMIC-PIC: ; %bb.0: 481; NO-ATOMIC-PIC-NEXT: suba.l #12, %sp 482; NO-ATOMIC-PIC-NEXT: move.l #5, (4,%sp) 483; NO-ATOMIC-PIC-NEXT: move.l (16,%sp), (%sp) 484; NO-ATOMIC-PIC-NEXT: jsr (__atomic_load_8@PLT,%pc) 485; NO-ATOMIC-PIC-NEXT: adda.l #12, %sp 486; NO-ATOMIC-PIC-NEXT: rts 487; 488; ATOMIC-LABEL: atomic_load_i64_seq_cst: 489; ATOMIC: ; %bb.0: 490; ATOMIC-NEXT: suba.l #12, %sp 491; ATOMIC-NEXT: move.l #5, (4,%sp) 492; ATOMIC-NEXT: move.l (16,%sp), (%sp) 493; ATOMIC-NEXT: jsr __atomic_load_8 494; ATOMIC-NEXT: adda.l #12, %sp 495; ATOMIC-NEXT: rts 496; 497; ATOMIC-PIC-LABEL: atomic_load_i64_seq_cst: 498; ATOMIC-PIC: ; %bb.0: 499; ATOMIC-PIC-NEXT: suba.l #12, %sp 500; ATOMIC-PIC-NEXT: move.l #5, (4,%sp) 501; ATOMIC-PIC-NEXT: move.l (16,%sp), (%sp) 502; ATOMIC-PIC-NEXT: jsr (__atomic_load_8@PLT,%pc) 503; ATOMIC-PIC-NEXT: adda.l #12, %sp 504; ATOMIC-PIC-NEXT: rts 505 %1 = load atomic i64, ptr %a seq_cst, align 8 506 ret i64 %1 507} 508 509define void @atomic_store_i8_unordered(ptr %a, i8 %val) nounwind { 510; NO-ATOMIC-LABEL: atomic_store_i8_unordered: 511; NO-ATOMIC: ; %bb.0: 512; NO-ATOMIC-NEXT: move.b (11,%sp), %d0 513; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 514; NO-ATOMIC-NEXT: move.b %d0, (%a0) 515; NO-ATOMIC-NEXT: rts 516; 517; NO-ATOMIC-PIC-LABEL: atomic_store_i8_unordered: 518; NO-ATOMIC-PIC: ; %bb.0: 519; NO-ATOMIC-PIC-NEXT: move.b (11,%sp), %d0 520; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 521; NO-ATOMIC-PIC-NEXT: move.b %d0, (%a0) 522; NO-ATOMIC-PIC-NEXT: rts 523; 524; ATOMIC-LABEL: atomic_store_i8_unordered: 525; ATOMIC: ; %bb.0: 526; ATOMIC-NEXT: move.b (11,%sp), %d0 527; ATOMIC-NEXT: move.l (4,%sp), %a0 528; ATOMIC-NEXT: move.b %d0, (%a0) 529; ATOMIC-NEXT: rts 530; 531; ATOMIC-PIC-LABEL: atomic_store_i8_unordered: 532; ATOMIC-PIC: ; %bb.0: 533; ATOMIC-PIC-NEXT: move.b (11,%sp), %d0 534; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 535; ATOMIC-PIC-NEXT: move.b %d0, (%a0) 536; ATOMIC-PIC-NEXT: rts 537 store atomic i8 %val, ptr %a unordered, align 1 538 ret void 539} 540 541define void @atomic_store_i8_monotonic(ptr %a, i8 %val) nounwind { 542; NO-ATOMIC-LABEL: atomic_store_i8_monotonic: 543; NO-ATOMIC: ; %bb.0: 544; NO-ATOMIC-NEXT: move.b (11,%sp), %d0 545; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 546; NO-ATOMIC-NEXT: move.b %d0, (%a0) 547; NO-ATOMIC-NEXT: rts 548; 549; NO-ATOMIC-PIC-LABEL: atomic_store_i8_monotonic: 550; NO-ATOMIC-PIC: ; %bb.0: 551; NO-ATOMIC-PIC-NEXT: move.b (11,%sp), %d0 552; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 553; NO-ATOMIC-PIC-NEXT: move.b %d0, (%a0) 554; NO-ATOMIC-PIC-NEXT: rts 555; 556; ATOMIC-LABEL: atomic_store_i8_monotonic: 557; ATOMIC: ; %bb.0: 558; ATOMIC-NEXT: move.b (11,%sp), %d0 559; ATOMIC-NEXT: move.l (4,%sp), %a0 560; ATOMIC-NEXT: move.b %d0, (%a0) 561; ATOMIC-NEXT: rts 562; 563; ATOMIC-PIC-LABEL: atomic_store_i8_monotonic: 564; ATOMIC-PIC: ; %bb.0: 565; ATOMIC-PIC-NEXT: move.b (11,%sp), %d0 566; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 567; ATOMIC-PIC-NEXT: move.b %d0, (%a0) 568; ATOMIC-PIC-NEXT: rts 569 store atomic i8 %val, ptr %a monotonic, align 1 570 ret void 571} 572 573define void @atomic_store_i8_release(ptr %a, i8 %val) nounwind { 574; NO-ATOMIC-LABEL: atomic_store_i8_release: 575; NO-ATOMIC: ; %bb.0: 576; NO-ATOMIC-NEXT: move.b (11,%sp), %d0 577; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 578; NO-ATOMIC-NEXT: move.b %d0, (%a0) 579; NO-ATOMIC-NEXT: rts 580; 581; NO-ATOMIC-PIC-LABEL: atomic_store_i8_release: 582; NO-ATOMIC-PIC: ; %bb.0: 583; NO-ATOMIC-PIC-NEXT: move.b (11,%sp), %d0 584; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 585; NO-ATOMIC-PIC-NEXT: move.b %d0, (%a0) 586; NO-ATOMIC-PIC-NEXT: rts 587; 588; ATOMIC-LABEL: atomic_store_i8_release: 589; ATOMIC: ; %bb.0: 590; ATOMIC-NEXT: move.b (11,%sp), %d0 591; ATOMIC-NEXT: move.l (4,%sp), %a0 592; ATOMIC-NEXT: move.b %d0, (%a0) 593; ATOMIC-NEXT: rts 594; 595; ATOMIC-PIC-LABEL: atomic_store_i8_release: 596; ATOMIC-PIC: ; %bb.0: 597; ATOMIC-PIC-NEXT: move.b (11,%sp), %d0 598; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 599; ATOMIC-PIC-NEXT: move.b %d0, (%a0) 600; ATOMIC-PIC-NEXT: rts 601 store atomic i8 %val, ptr %a release, align 1 602 ret void 603} 604 605define void @atomic_store_i8_seq_cst(ptr %a, i8 %val) nounwind { 606; NO-ATOMIC-LABEL: atomic_store_i8_seq_cst: 607; NO-ATOMIC: ; %bb.0: 608; NO-ATOMIC-NEXT: move.b (11,%sp), %d0 609; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 610; NO-ATOMIC-NEXT: move.b %d0, (%a0) 611; NO-ATOMIC-NEXT: rts 612; 613; NO-ATOMIC-PIC-LABEL: atomic_store_i8_seq_cst: 614; NO-ATOMIC-PIC: ; %bb.0: 615; NO-ATOMIC-PIC-NEXT: move.b (11,%sp), %d0 616; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 617; NO-ATOMIC-PIC-NEXT: move.b %d0, (%a0) 618; NO-ATOMIC-PIC-NEXT: rts 619; 620; ATOMIC-LABEL: atomic_store_i8_seq_cst: 621; ATOMIC: ; %bb.0: 622; ATOMIC-NEXT: move.b (11,%sp), %d0 623; ATOMIC-NEXT: move.l (4,%sp), %a0 624; ATOMIC-NEXT: move.b %d0, (%a0) 625; ATOMIC-NEXT: rts 626; 627; ATOMIC-PIC-LABEL: atomic_store_i8_seq_cst: 628; ATOMIC-PIC: ; %bb.0: 629; ATOMIC-PIC-NEXT: move.b (11,%sp), %d0 630; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 631; ATOMIC-PIC-NEXT: move.b %d0, (%a0) 632; ATOMIC-PIC-NEXT: rts 633 store atomic i8 %val, ptr %a seq_cst, align 1 634 ret void 635} 636 637define void @atomic_store_i16_unordered(ptr %a, i16 %val) nounwind { 638; NO-ATOMIC-LABEL: atomic_store_i16_unordered: 639; NO-ATOMIC: ; %bb.0: 640; NO-ATOMIC-NEXT: move.w (10,%sp), %d0 641; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 642; NO-ATOMIC-NEXT: move.w %d0, (%a0) 643; NO-ATOMIC-NEXT: rts 644; 645; NO-ATOMIC-PIC-LABEL: atomic_store_i16_unordered: 646; NO-ATOMIC-PIC: ; %bb.0: 647; NO-ATOMIC-PIC-NEXT: move.w (10,%sp), %d0 648; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 649; NO-ATOMIC-PIC-NEXT: move.w %d0, (%a0) 650; NO-ATOMIC-PIC-NEXT: rts 651; 652; ATOMIC-LABEL: atomic_store_i16_unordered: 653; ATOMIC: ; %bb.0: 654; ATOMIC-NEXT: move.w (10,%sp), %d0 655; ATOMIC-NEXT: move.l (4,%sp), %a0 656; ATOMIC-NEXT: move.w %d0, (%a0) 657; ATOMIC-NEXT: rts 658; 659; ATOMIC-PIC-LABEL: atomic_store_i16_unordered: 660; ATOMIC-PIC: ; %bb.0: 661; ATOMIC-PIC-NEXT: move.w (10,%sp), %d0 662; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 663; ATOMIC-PIC-NEXT: move.w %d0, (%a0) 664; ATOMIC-PIC-NEXT: rts 665 store atomic i16 %val, ptr %a unordered, align 2 666 ret void 667} 668 669define void @atomic_store_i16_monotonic(ptr %a, i16 %val) nounwind { 670; NO-ATOMIC-LABEL: atomic_store_i16_monotonic: 671; NO-ATOMIC: ; %bb.0: 672; NO-ATOMIC-NEXT: move.w (10,%sp), %d0 673; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 674; NO-ATOMIC-NEXT: move.w %d0, (%a0) 675; NO-ATOMIC-NEXT: rts 676; 677; NO-ATOMIC-PIC-LABEL: atomic_store_i16_monotonic: 678; NO-ATOMIC-PIC: ; %bb.0: 679; NO-ATOMIC-PIC-NEXT: move.w (10,%sp), %d0 680; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 681; NO-ATOMIC-PIC-NEXT: move.w %d0, (%a0) 682; NO-ATOMIC-PIC-NEXT: rts 683; 684; ATOMIC-LABEL: atomic_store_i16_monotonic: 685; ATOMIC: ; %bb.0: 686; ATOMIC-NEXT: move.w (10,%sp), %d0 687; ATOMIC-NEXT: move.l (4,%sp), %a0 688; ATOMIC-NEXT: move.w %d0, (%a0) 689; ATOMIC-NEXT: rts 690; 691; ATOMIC-PIC-LABEL: atomic_store_i16_monotonic: 692; ATOMIC-PIC: ; %bb.0: 693; ATOMIC-PIC-NEXT: move.w (10,%sp), %d0 694; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 695; ATOMIC-PIC-NEXT: move.w %d0, (%a0) 696; ATOMIC-PIC-NEXT: rts 697 store atomic i16 %val, ptr %a monotonic, align 2 698 ret void 699} 700 701define void @atomic_store_i16_release(ptr %a, i16 %val) nounwind { 702; NO-ATOMIC-LABEL: atomic_store_i16_release: 703; NO-ATOMIC: ; %bb.0: 704; NO-ATOMIC-NEXT: move.w (10,%sp), %d0 705; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 706; NO-ATOMIC-NEXT: move.w %d0, (%a0) 707; NO-ATOMIC-NEXT: rts 708; 709; NO-ATOMIC-PIC-LABEL: atomic_store_i16_release: 710; NO-ATOMIC-PIC: ; %bb.0: 711; NO-ATOMIC-PIC-NEXT: move.w (10,%sp), %d0 712; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 713; NO-ATOMIC-PIC-NEXT: move.w %d0, (%a0) 714; NO-ATOMIC-PIC-NEXT: rts 715; 716; ATOMIC-LABEL: atomic_store_i16_release: 717; ATOMIC: ; %bb.0: 718; ATOMIC-NEXT: move.w (10,%sp), %d0 719; ATOMIC-NEXT: move.l (4,%sp), %a0 720; ATOMIC-NEXT: move.w %d0, (%a0) 721; ATOMIC-NEXT: rts 722; 723; ATOMIC-PIC-LABEL: atomic_store_i16_release: 724; ATOMIC-PIC: ; %bb.0: 725; ATOMIC-PIC-NEXT: move.w (10,%sp), %d0 726; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 727; ATOMIC-PIC-NEXT: move.w %d0, (%a0) 728; ATOMIC-PIC-NEXT: rts 729 store atomic i16 %val, ptr %a release, align 2 730 ret void 731} 732 733define void @atomic_store_i16_seq_cst(ptr %a, i16 %val) nounwind { 734; NO-ATOMIC-LABEL: atomic_store_i16_seq_cst: 735; NO-ATOMIC: ; %bb.0: 736; NO-ATOMIC-NEXT: move.w (10,%sp), %d0 737; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 738; NO-ATOMIC-NEXT: move.w %d0, (%a0) 739; NO-ATOMIC-NEXT: rts 740; 741; NO-ATOMIC-PIC-LABEL: atomic_store_i16_seq_cst: 742; NO-ATOMIC-PIC: ; %bb.0: 743; NO-ATOMIC-PIC-NEXT: move.w (10,%sp), %d0 744; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 745; NO-ATOMIC-PIC-NEXT: move.w %d0, (%a0) 746; NO-ATOMIC-PIC-NEXT: rts 747; 748; ATOMIC-LABEL: atomic_store_i16_seq_cst: 749; ATOMIC: ; %bb.0: 750; ATOMIC-NEXT: move.w (10,%sp), %d0 751; ATOMIC-NEXT: move.l (4,%sp), %a0 752; ATOMIC-NEXT: move.w %d0, (%a0) 753; ATOMIC-NEXT: rts 754; 755; ATOMIC-PIC-LABEL: atomic_store_i16_seq_cst: 756; ATOMIC-PIC: ; %bb.0: 757; ATOMIC-PIC-NEXT: move.w (10,%sp), %d0 758; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 759; ATOMIC-PIC-NEXT: move.w %d0, (%a0) 760; ATOMIC-PIC-NEXT: rts 761 store atomic i16 %val, ptr %a seq_cst, align 2 762 ret void 763} 764 765define void @atomic_store_i32_unordered(ptr %a, i32 %val) nounwind { 766; NO-ATOMIC-LABEL: atomic_store_i32_unordered: 767; NO-ATOMIC: ; %bb.0: 768; NO-ATOMIC-NEXT: move.l (8,%sp), %d0 769; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 770; NO-ATOMIC-NEXT: move.l %d0, (%a0) 771; NO-ATOMIC-NEXT: rts 772; 773; NO-ATOMIC-PIC-LABEL: atomic_store_i32_unordered: 774; NO-ATOMIC-PIC: ; %bb.0: 775; NO-ATOMIC-PIC-NEXT: move.l (8,%sp), %d0 776; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 777; NO-ATOMIC-PIC-NEXT: move.l %d0, (%a0) 778; NO-ATOMIC-PIC-NEXT: rts 779; 780; ATOMIC-LABEL: atomic_store_i32_unordered: 781; ATOMIC: ; %bb.0: 782; ATOMIC-NEXT: move.l (8,%sp), %d0 783; ATOMIC-NEXT: move.l (4,%sp), %a0 784; ATOMIC-NEXT: move.l %d0, (%a0) 785; ATOMIC-NEXT: rts 786; 787; ATOMIC-PIC-LABEL: atomic_store_i32_unordered: 788; ATOMIC-PIC: ; %bb.0: 789; ATOMIC-PIC-NEXT: move.l (8,%sp), %d0 790; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 791; ATOMIC-PIC-NEXT: move.l %d0, (%a0) 792; ATOMIC-PIC-NEXT: rts 793 store atomic i32 %val, ptr %a unordered, align 4 794 ret void 795} 796 797define void @atomic_store_i32_monotonic(ptr %a, i32 %val) nounwind { 798; NO-ATOMIC-LABEL: atomic_store_i32_monotonic: 799; NO-ATOMIC: ; %bb.0: 800; NO-ATOMIC-NEXT: move.l (8,%sp), %d0 801; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 802; NO-ATOMIC-NEXT: move.l %d0, (%a0) 803; NO-ATOMIC-NEXT: rts 804; 805; NO-ATOMIC-PIC-LABEL: atomic_store_i32_monotonic: 806; NO-ATOMIC-PIC: ; %bb.0: 807; NO-ATOMIC-PIC-NEXT: move.l (8,%sp), %d0 808; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 809; NO-ATOMIC-PIC-NEXT: move.l %d0, (%a0) 810; NO-ATOMIC-PIC-NEXT: rts 811; 812; ATOMIC-LABEL: atomic_store_i32_monotonic: 813; ATOMIC: ; %bb.0: 814; ATOMIC-NEXT: move.l (8,%sp), %d0 815; ATOMIC-NEXT: move.l (4,%sp), %a0 816; ATOMIC-NEXT: move.l %d0, (%a0) 817; ATOMIC-NEXT: rts 818; 819; ATOMIC-PIC-LABEL: atomic_store_i32_monotonic: 820; ATOMIC-PIC: ; %bb.0: 821; ATOMIC-PIC-NEXT: move.l (8,%sp), %d0 822; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 823; ATOMIC-PIC-NEXT: move.l %d0, (%a0) 824; ATOMIC-PIC-NEXT: rts 825 store atomic i32 %val, ptr %a monotonic, align 4 826 ret void 827} 828 829define void @atomic_store_i32_release(ptr %a, i32 %val) nounwind { 830; NO-ATOMIC-LABEL: atomic_store_i32_release: 831; NO-ATOMIC: ; %bb.0: 832; NO-ATOMIC-NEXT: move.l (8,%sp), %d0 833; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 834; NO-ATOMIC-NEXT: move.l %d0, (%a0) 835; NO-ATOMIC-NEXT: rts 836; 837; NO-ATOMIC-PIC-LABEL: atomic_store_i32_release: 838; NO-ATOMIC-PIC: ; %bb.0: 839; NO-ATOMIC-PIC-NEXT: move.l (8,%sp), %d0 840; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 841; NO-ATOMIC-PIC-NEXT: move.l %d0, (%a0) 842; NO-ATOMIC-PIC-NEXT: rts 843; 844; ATOMIC-LABEL: atomic_store_i32_release: 845; ATOMIC: ; %bb.0: 846; ATOMIC-NEXT: move.l (8,%sp), %d0 847; ATOMIC-NEXT: move.l (4,%sp), %a0 848; ATOMIC-NEXT: move.l %d0, (%a0) 849; ATOMIC-NEXT: rts 850; 851; ATOMIC-PIC-LABEL: atomic_store_i32_release: 852; ATOMIC-PIC: ; %bb.0: 853; ATOMIC-PIC-NEXT: move.l (8,%sp), %d0 854; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 855; ATOMIC-PIC-NEXT: move.l %d0, (%a0) 856; ATOMIC-PIC-NEXT: rts 857 store atomic i32 %val, ptr %a release, align 4 858 ret void 859} 860 861define void @atomic_store_i32_seq_cst(ptr %a, i32 %val) nounwind { 862; NO-ATOMIC-LABEL: atomic_store_i32_seq_cst: 863; NO-ATOMIC: ; %bb.0: 864; NO-ATOMIC-NEXT: move.l (8,%sp), %d0 865; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 866; NO-ATOMIC-NEXT: move.l %d0, (%a0) 867; NO-ATOMIC-NEXT: rts 868; 869; NO-ATOMIC-PIC-LABEL: atomic_store_i32_seq_cst: 870; NO-ATOMIC-PIC: ; %bb.0: 871; NO-ATOMIC-PIC-NEXT: move.l (8,%sp), %d0 872; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 873; NO-ATOMIC-PIC-NEXT: move.l %d0, (%a0) 874; NO-ATOMIC-PIC-NEXT: rts 875; 876; ATOMIC-LABEL: atomic_store_i32_seq_cst: 877; ATOMIC: ; %bb.0: 878; ATOMIC-NEXT: move.l (8,%sp), %d0 879; ATOMIC-NEXT: move.l (4,%sp), %a0 880; ATOMIC-NEXT: move.l %d0, (%a0) 881; ATOMIC-NEXT: rts 882; 883; ATOMIC-PIC-LABEL: atomic_store_i32_seq_cst: 884; ATOMIC-PIC: ; %bb.0: 885; ATOMIC-PIC-NEXT: move.l (8,%sp), %d0 886; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 887; ATOMIC-PIC-NEXT: move.l %d0, (%a0) 888; ATOMIC-PIC-NEXT: rts 889 store atomic i32 %val, ptr %a seq_cst, align 4 890 ret void 891} 892 893define void @atomic_store_i64_unordered(ptr %a, i64 %val) nounwind { 894; NO-ATOMIC-LABEL: atomic_store_i64_unordered: 895; NO-ATOMIC: ; %bb.0: 896; NO-ATOMIC-NEXT: suba.l #20, %sp 897; NO-ATOMIC-NEXT: move.l #0, (12,%sp) 898; NO-ATOMIC-NEXT: move.l (32,%sp), (8,%sp) 899; NO-ATOMIC-NEXT: move.l (28,%sp), (4,%sp) 900; NO-ATOMIC-NEXT: move.l (24,%sp), (%sp) 901; NO-ATOMIC-NEXT: jsr __atomic_store_8 902; NO-ATOMIC-NEXT: adda.l #20, %sp 903; NO-ATOMIC-NEXT: rts 904; 905; NO-ATOMIC-PIC-LABEL: atomic_store_i64_unordered: 906; NO-ATOMIC-PIC: ; %bb.0: 907; NO-ATOMIC-PIC-NEXT: suba.l #20, %sp 908; NO-ATOMIC-PIC-NEXT: move.l #0, (12,%sp) 909; NO-ATOMIC-PIC-NEXT: move.l (32,%sp), (8,%sp) 910; NO-ATOMIC-PIC-NEXT: move.l (28,%sp), (4,%sp) 911; NO-ATOMIC-PIC-NEXT: move.l (24,%sp), (%sp) 912; NO-ATOMIC-PIC-NEXT: jsr (__atomic_store_8@PLT,%pc) 913; NO-ATOMIC-PIC-NEXT: adda.l #20, %sp 914; NO-ATOMIC-PIC-NEXT: rts 915; 916; ATOMIC-LABEL: atomic_store_i64_unordered: 917; ATOMIC: ; %bb.0: 918; ATOMIC-NEXT: suba.l #20, %sp 919; ATOMIC-NEXT: move.l #0, (12,%sp) 920; ATOMIC-NEXT: move.l (32,%sp), (8,%sp) 921; ATOMIC-NEXT: move.l (28,%sp), (4,%sp) 922; ATOMIC-NEXT: move.l (24,%sp), (%sp) 923; ATOMIC-NEXT: jsr __atomic_store_8 924; ATOMIC-NEXT: adda.l #20, %sp 925; ATOMIC-NEXT: rts 926; 927; ATOMIC-PIC-LABEL: atomic_store_i64_unordered: 928; ATOMIC-PIC: ; %bb.0: 929; ATOMIC-PIC-NEXT: suba.l #20, %sp 930; ATOMIC-PIC-NEXT: move.l #0, (12,%sp) 931; ATOMIC-PIC-NEXT: move.l (32,%sp), (8,%sp) 932; ATOMIC-PIC-NEXT: move.l (28,%sp), (4,%sp) 933; ATOMIC-PIC-NEXT: move.l (24,%sp), (%sp) 934; ATOMIC-PIC-NEXT: jsr (__atomic_store_8@PLT,%pc) 935; ATOMIC-PIC-NEXT: adda.l #20, %sp 936; ATOMIC-PIC-NEXT: rts 937 store atomic i64 %val, ptr %a unordered, align 8 938 ret void 939} 940 941define void @atomic_store_i64_monotonic(ptr %a, i64 %val) nounwind { 942; NO-ATOMIC-LABEL: atomic_store_i64_monotonic: 943; NO-ATOMIC: ; %bb.0: 944; NO-ATOMIC-NEXT: suba.l #20, %sp 945; NO-ATOMIC-NEXT: move.l #0, (12,%sp) 946; NO-ATOMIC-NEXT: move.l (32,%sp), (8,%sp) 947; NO-ATOMIC-NEXT: move.l (28,%sp), (4,%sp) 948; NO-ATOMIC-NEXT: move.l (24,%sp), (%sp) 949; NO-ATOMIC-NEXT: jsr __atomic_store_8 950; NO-ATOMIC-NEXT: adda.l #20, %sp 951; NO-ATOMIC-NEXT: rts 952; 953; NO-ATOMIC-PIC-LABEL: atomic_store_i64_monotonic: 954; NO-ATOMIC-PIC: ; %bb.0: 955; NO-ATOMIC-PIC-NEXT: suba.l #20, %sp 956; NO-ATOMIC-PIC-NEXT: move.l #0, (12,%sp) 957; NO-ATOMIC-PIC-NEXT: move.l (32,%sp), (8,%sp) 958; NO-ATOMIC-PIC-NEXT: move.l (28,%sp), (4,%sp) 959; NO-ATOMIC-PIC-NEXT: move.l (24,%sp), (%sp) 960; NO-ATOMIC-PIC-NEXT: jsr (__atomic_store_8@PLT,%pc) 961; NO-ATOMIC-PIC-NEXT: adda.l #20, %sp 962; NO-ATOMIC-PIC-NEXT: rts 963; 964; ATOMIC-LABEL: atomic_store_i64_monotonic: 965; ATOMIC: ; %bb.0: 966; ATOMIC-NEXT: suba.l #20, %sp 967; ATOMIC-NEXT: move.l #0, (12,%sp) 968; ATOMIC-NEXT: move.l (32,%sp), (8,%sp) 969; ATOMIC-NEXT: move.l (28,%sp), (4,%sp) 970; ATOMIC-NEXT: move.l (24,%sp), (%sp) 971; ATOMIC-NEXT: jsr __atomic_store_8 972; ATOMIC-NEXT: adda.l #20, %sp 973; ATOMIC-NEXT: rts 974; 975; ATOMIC-PIC-LABEL: atomic_store_i64_monotonic: 976; ATOMIC-PIC: ; %bb.0: 977; ATOMIC-PIC-NEXT: suba.l #20, %sp 978; ATOMIC-PIC-NEXT: move.l #0, (12,%sp) 979; ATOMIC-PIC-NEXT: move.l (32,%sp), (8,%sp) 980; ATOMIC-PIC-NEXT: move.l (28,%sp), (4,%sp) 981; ATOMIC-PIC-NEXT: move.l (24,%sp), (%sp) 982; ATOMIC-PIC-NEXT: jsr (__atomic_store_8@PLT,%pc) 983; ATOMIC-PIC-NEXT: adda.l #20, %sp 984; ATOMIC-PIC-NEXT: rts 985 store atomic i64 %val, ptr %a monotonic, align 8 986 ret void 987} 988 989define void @atomic_store_i64_release(ptr %a, i64 %val) nounwind { 990; NO-ATOMIC-LABEL: atomic_store_i64_release: 991; NO-ATOMIC: ; %bb.0: 992; NO-ATOMIC-NEXT: suba.l #20, %sp 993; NO-ATOMIC-NEXT: move.l #3, (12,%sp) 994; NO-ATOMIC-NEXT: move.l (32,%sp), (8,%sp) 995; NO-ATOMIC-NEXT: move.l (28,%sp), (4,%sp) 996; NO-ATOMIC-NEXT: move.l (24,%sp), (%sp) 997; NO-ATOMIC-NEXT: jsr __atomic_store_8 998; NO-ATOMIC-NEXT: adda.l #20, %sp 999; NO-ATOMIC-NEXT: rts 1000; 1001; NO-ATOMIC-PIC-LABEL: atomic_store_i64_release: 1002; NO-ATOMIC-PIC: ; %bb.0: 1003; NO-ATOMIC-PIC-NEXT: suba.l #20, %sp 1004; NO-ATOMIC-PIC-NEXT: move.l #3, (12,%sp) 1005; NO-ATOMIC-PIC-NEXT: move.l (32,%sp), (8,%sp) 1006; NO-ATOMIC-PIC-NEXT: move.l (28,%sp), (4,%sp) 1007; NO-ATOMIC-PIC-NEXT: move.l (24,%sp), (%sp) 1008; NO-ATOMIC-PIC-NEXT: jsr (__atomic_store_8@PLT,%pc) 1009; NO-ATOMIC-PIC-NEXT: adda.l #20, %sp 1010; NO-ATOMIC-PIC-NEXT: rts 1011; 1012; ATOMIC-LABEL: atomic_store_i64_release: 1013; ATOMIC: ; %bb.0: 1014; ATOMIC-NEXT: suba.l #20, %sp 1015; ATOMIC-NEXT: move.l #3, (12,%sp) 1016; ATOMIC-NEXT: move.l (32,%sp), (8,%sp) 1017; ATOMIC-NEXT: move.l (28,%sp), (4,%sp) 1018; ATOMIC-NEXT: move.l (24,%sp), (%sp) 1019; ATOMIC-NEXT: jsr __atomic_store_8 1020; ATOMIC-NEXT: adda.l #20, %sp 1021; ATOMIC-NEXT: rts 1022; 1023; ATOMIC-PIC-LABEL: atomic_store_i64_release: 1024; ATOMIC-PIC: ; %bb.0: 1025; ATOMIC-PIC-NEXT: suba.l #20, %sp 1026; ATOMIC-PIC-NEXT: move.l #3, (12,%sp) 1027; ATOMIC-PIC-NEXT: move.l (32,%sp), (8,%sp) 1028; ATOMIC-PIC-NEXT: move.l (28,%sp), (4,%sp) 1029; ATOMIC-PIC-NEXT: move.l (24,%sp), (%sp) 1030; ATOMIC-PIC-NEXT: jsr (__atomic_store_8@PLT,%pc) 1031; ATOMIC-PIC-NEXT: adda.l #20, %sp 1032; ATOMIC-PIC-NEXT: rts 1033 store atomic i64 %val, ptr %a release, align 8 1034 ret void 1035} 1036 1037define void @atomic_store_i64_seq_cst(ptr %a, i64 %val) nounwind { 1038; NO-ATOMIC-LABEL: atomic_store_i64_seq_cst: 1039; NO-ATOMIC: ; %bb.0: 1040; NO-ATOMIC-NEXT: suba.l #20, %sp 1041; NO-ATOMIC-NEXT: move.l #5, (12,%sp) 1042; NO-ATOMIC-NEXT: move.l (32,%sp), (8,%sp) 1043; NO-ATOMIC-NEXT: move.l (28,%sp), (4,%sp) 1044; NO-ATOMIC-NEXT: move.l (24,%sp), (%sp) 1045; NO-ATOMIC-NEXT: jsr __atomic_store_8 1046; NO-ATOMIC-NEXT: adda.l #20, %sp 1047; NO-ATOMIC-NEXT: rts 1048; 1049; NO-ATOMIC-PIC-LABEL: atomic_store_i64_seq_cst: 1050; NO-ATOMIC-PIC: ; %bb.0: 1051; NO-ATOMIC-PIC-NEXT: suba.l #20, %sp 1052; NO-ATOMIC-PIC-NEXT: move.l #5, (12,%sp) 1053; NO-ATOMIC-PIC-NEXT: move.l (32,%sp), (8,%sp) 1054; NO-ATOMIC-PIC-NEXT: move.l (28,%sp), (4,%sp) 1055; NO-ATOMIC-PIC-NEXT: move.l (24,%sp), (%sp) 1056; NO-ATOMIC-PIC-NEXT: jsr (__atomic_store_8@PLT,%pc) 1057; NO-ATOMIC-PIC-NEXT: adda.l #20, %sp 1058; NO-ATOMIC-PIC-NEXT: rts 1059; 1060; ATOMIC-LABEL: atomic_store_i64_seq_cst: 1061; ATOMIC: ; %bb.0: 1062; ATOMIC-NEXT: suba.l #20, %sp 1063; ATOMIC-NEXT: move.l #5, (12,%sp) 1064; ATOMIC-NEXT: move.l (32,%sp), (8,%sp) 1065; ATOMIC-NEXT: move.l (28,%sp), (4,%sp) 1066; ATOMIC-NEXT: move.l (24,%sp), (%sp) 1067; ATOMIC-NEXT: jsr __atomic_store_8 1068; ATOMIC-NEXT: adda.l #20, %sp 1069; ATOMIC-NEXT: rts 1070; 1071; ATOMIC-PIC-LABEL: atomic_store_i64_seq_cst: 1072; ATOMIC-PIC: ; %bb.0: 1073; ATOMIC-PIC-NEXT: suba.l #20, %sp 1074; ATOMIC-PIC-NEXT: move.l #5, (12,%sp) 1075; ATOMIC-PIC-NEXT: move.l (32,%sp), (8,%sp) 1076; ATOMIC-PIC-NEXT: move.l (28,%sp), (4,%sp) 1077; ATOMIC-PIC-NEXT: move.l (24,%sp), (%sp) 1078; ATOMIC-PIC-NEXT: jsr (__atomic_store_8@PLT,%pc) 1079; ATOMIC-PIC-NEXT: adda.l #20, %sp 1080; ATOMIC-PIC-NEXT: rts 1081 store atomic i64 %val, ptr %a seq_cst, align 8 1082 ret void 1083} 1084 1085define void @store_arid(ptr nonnull align 4 %a) { 1086; NO-ATOMIC-LABEL: store_arid: 1087; NO-ATOMIC: .cfi_startproc 1088; NO-ATOMIC-NEXT: ; %bb.0: ; %start 1089; NO-ATOMIC-NEXT: moveq #1, %d0 1090; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 1091; NO-ATOMIC-NEXT: move.l %d0, (32,%a0) 1092; NO-ATOMIC-NEXT: rts 1093; 1094; NO-ATOMIC-PIC-LABEL: store_arid: 1095; NO-ATOMIC-PIC: .cfi_startproc 1096; NO-ATOMIC-PIC-NEXT: ; %bb.0: ; %start 1097; NO-ATOMIC-PIC-NEXT: moveq #1, %d0 1098; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 1099; NO-ATOMIC-PIC-NEXT: move.l %d0, (32,%a0) 1100; NO-ATOMIC-PIC-NEXT: rts 1101; 1102; ATOMIC-LABEL: store_arid: 1103; ATOMIC: .cfi_startproc 1104; ATOMIC-NEXT: ; %bb.0: ; %start 1105; ATOMIC-NEXT: moveq #1, %d0 1106; ATOMIC-NEXT: move.l (4,%sp), %a0 1107; ATOMIC-NEXT: move.l %d0, (32,%a0) 1108; ATOMIC-NEXT: rts 1109; 1110; ATOMIC-PIC-LABEL: store_arid: 1111; ATOMIC-PIC: .cfi_startproc 1112; ATOMIC-PIC-NEXT: ; %bb.0: ; %start 1113; ATOMIC-PIC-NEXT: moveq #1, %d0 1114; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 1115; ATOMIC-PIC-NEXT: move.l %d0, (32,%a0) 1116; ATOMIC-PIC-NEXT: rts 1117start: 1118 %1 = getelementptr inbounds i32, ptr %a, i32 8 1119 store atomic i32 1, ptr %1 seq_cst, align 4 1120 br label %exit 1121 1122exit: ; preds = %start 1123 ret void 1124} 1125 1126define i32 @load_arid(ptr nonnull align 4 %a) { 1127; NO-ATOMIC-LABEL: load_arid: 1128; NO-ATOMIC: .cfi_startproc 1129; NO-ATOMIC-NEXT: ; %bb.0: ; %start 1130; NO-ATOMIC-NEXT: move.l (4,%sp), %a0 1131; NO-ATOMIC-NEXT: move.l (32,%a0), %d0 1132; NO-ATOMIC-NEXT: rts 1133; 1134; NO-ATOMIC-PIC-LABEL: load_arid: 1135; NO-ATOMIC-PIC: .cfi_startproc 1136; NO-ATOMIC-PIC-NEXT: ; %bb.0: ; %start 1137; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 1138; NO-ATOMIC-PIC-NEXT: move.l (32,%a0), %d0 1139; NO-ATOMIC-PIC-NEXT: rts 1140; 1141; ATOMIC-LABEL: load_arid: 1142; ATOMIC: .cfi_startproc 1143; ATOMIC-NEXT: ; %bb.0: ; %start 1144; ATOMIC-NEXT: move.l (4,%sp), %a0 1145; ATOMIC-NEXT: move.l (32,%a0), %d0 1146; ATOMIC-NEXT: rts 1147; 1148; ATOMIC-PIC-LABEL: load_arid: 1149; ATOMIC-PIC: .cfi_startproc 1150; ATOMIC-PIC-NEXT: ; %bb.0: ; %start 1151; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0 1152; ATOMIC-PIC-NEXT: move.l (32,%a0), %d0 1153; ATOMIC-PIC-NEXT: rts 1154start: 1155 %1 = getelementptr inbounds i32, ptr %a, i32 8 1156 %2 = load atomic i32, ptr %1 seq_cst, align 4 1157 br label %exit 1158 1159exit: ; preds = %start 1160 ret i32 %2 1161} 1162