1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=csky -verify-machineinstrs -csky-no-aliases -mattr=+2e3 < %s \ 3; RUN: | FileCheck -check-prefix=CSKY %s 4 5define i8 @atomic_load_i8_unordered(ptr %a) nounwind { 6; CSKY-LABEL: atomic_load_i8_unordered: 7; CSKY: # %bb.0: 8; CSKY-NEXT: subi16 sp, sp, 4 9; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 10; CSKY-NEXT: movi16 a1, 0 11; CSKY-NEXT: jsri32 [.LCPI0_0] 12; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 13; CSKY-NEXT: addi16 sp, sp, 4 14; CSKY-NEXT: rts16 15; CSKY-NEXT: .p2align 1 16; CSKY-NEXT: # %bb.1: 17; CSKY-NEXT: .p2align 2 18; CSKY-NEXT: .LCPI0_0: 19; CSKY-NEXT: .long __atomic_load_1 20; 21 %1 = load atomic i8, ptr %a unordered, align 1 22 ret i8 %1 23} 24 25define i8 @atomic_load_i8_monotonic(ptr %a) nounwind { 26; CSKY-LABEL: atomic_load_i8_monotonic: 27; CSKY: # %bb.0: 28; CSKY-NEXT: subi16 sp, sp, 4 29; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 30; CSKY-NEXT: movi16 a1, 0 31; CSKY-NEXT: jsri32 [.LCPI1_0] 32; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 33; CSKY-NEXT: addi16 sp, sp, 4 34; CSKY-NEXT: rts16 35; CSKY-NEXT: .p2align 1 36; CSKY-NEXT: # %bb.1: 37; CSKY-NEXT: .p2align 2 38; CSKY-NEXT: .LCPI1_0: 39; CSKY-NEXT: .long __atomic_load_1 40; 41 %1 = load atomic i8, ptr %a monotonic, align 1 42 ret i8 %1 43} 44 45define i8 @atomic_load_i8_acquire(ptr %a) nounwind { 46; CSKY-LABEL: atomic_load_i8_acquire: 47; CSKY: # %bb.0: 48; CSKY-NEXT: subi16 sp, sp, 4 49; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 50; CSKY-NEXT: movi16 a1, 2 51; CSKY-NEXT: jsri32 [.LCPI2_0] 52; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 53; CSKY-NEXT: addi16 sp, sp, 4 54; CSKY-NEXT: rts16 55; CSKY-NEXT: .p2align 1 56; CSKY-NEXT: # %bb.1: 57; CSKY-NEXT: .p2align 2 58; CSKY-NEXT: .LCPI2_0: 59; CSKY-NEXT: .long __atomic_load_1 60; 61 %1 = load atomic i8, ptr %a acquire, align 1 62 ret i8 %1 63} 64 65define i8 @atomic_load_i8_seq_cst(ptr %a) nounwind { 66; CSKY-LABEL: atomic_load_i8_seq_cst: 67; CSKY: # %bb.0: 68; CSKY-NEXT: subi16 sp, sp, 4 69; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 70; CSKY-NEXT: movi16 a1, 5 71; CSKY-NEXT: jsri32 [.LCPI3_0] 72; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 73; CSKY-NEXT: addi16 sp, sp, 4 74; CSKY-NEXT: rts16 75; CSKY-NEXT: .p2align 1 76; CSKY-NEXT: # %bb.1: 77; CSKY-NEXT: .p2align 2 78; CSKY-NEXT: .LCPI3_0: 79; CSKY-NEXT: .long __atomic_load_1 80; 81 %1 = load atomic i8, ptr %a seq_cst, align 1 82 ret i8 %1 83} 84 85define i16 @atomic_load_i16_unordered(ptr %a) nounwind { 86; CSKY-LABEL: atomic_load_i16_unordered: 87; CSKY: # %bb.0: 88; CSKY-NEXT: subi16 sp, sp, 4 89; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 90; CSKY-NEXT: movi16 a1, 0 91; CSKY-NEXT: jsri32 [.LCPI4_0] 92; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 93; CSKY-NEXT: addi16 sp, sp, 4 94; CSKY-NEXT: rts16 95; CSKY-NEXT: .p2align 1 96; CSKY-NEXT: # %bb.1: 97; CSKY-NEXT: .p2align 2 98; CSKY-NEXT: .LCPI4_0: 99; CSKY-NEXT: .long __atomic_load_2 100; 101 %1 = load atomic i16, ptr %a unordered, align 2 102 ret i16 %1 103} 104 105define i16 @atomic_load_i16_monotonic(ptr %a) nounwind { 106; CSKY-LABEL: atomic_load_i16_monotonic: 107; CSKY: # %bb.0: 108; CSKY-NEXT: subi16 sp, sp, 4 109; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 110; CSKY-NEXT: movi16 a1, 0 111; CSKY-NEXT: jsri32 [.LCPI5_0] 112; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 113; CSKY-NEXT: addi16 sp, sp, 4 114; CSKY-NEXT: rts16 115; CSKY-NEXT: .p2align 1 116; CSKY-NEXT: # %bb.1: 117; CSKY-NEXT: .p2align 2 118; CSKY-NEXT: .LCPI5_0: 119; CSKY-NEXT: .long __atomic_load_2 120; 121 %1 = load atomic i16, ptr %a monotonic, align 2 122 ret i16 %1 123} 124 125define i16 @atomic_load_i16_acquire(ptr %a) nounwind { 126; CSKY-LABEL: atomic_load_i16_acquire: 127; CSKY: # %bb.0: 128; CSKY-NEXT: subi16 sp, sp, 4 129; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 130; CSKY-NEXT: movi16 a1, 2 131; CSKY-NEXT: jsri32 [.LCPI6_0] 132; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 133; CSKY-NEXT: addi16 sp, sp, 4 134; CSKY-NEXT: rts16 135; CSKY-NEXT: .p2align 1 136; CSKY-NEXT: # %bb.1: 137; CSKY-NEXT: .p2align 2 138; CSKY-NEXT: .LCPI6_0: 139; CSKY-NEXT: .long __atomic_load_2 140; 141 %1 = load atomic i16, ptr %a acquire, align 2 142 ret i16 %1 143} 144 145define i16 @atomic_load_i16_seq_cst(ptr %a) nounwind { 146; CSKY-LABEL: atomic_load_i16_seq_cst: 147; CSKY: # %bb.0: 148; CSKY-NEXT: subi16 sp, sp, 4 149; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 150; CSKY-NEXT: movi16 a1, 5 151; CSKY-NEXT: jsri32 [.LCPI7_0] 152; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 153; CSKY-NEXT: addi16 sp, sp, 4 154; CSKY-NEXT: rts16 155; CSKY-NEXT: .p2align 1 156; CSKY-NEXT: # %bb.1: 157; CSKY-NEXT: .p2align 2 158; CSKY-NEXT: .LCPI7_0: 159; CSKY-NEXT: .long __atomic_load_2 160; 161 %1 = load atomic i16, ptr %a seq_cst, align 2 162 ret i16 %1 163} 164 165define i32 @atomic_load_i32_unordered(ptr %a) nounwind { 166; CSKY-LABEL: atomic_load_i32_unordered: 167; CSKY: # %bb.0: 168; CSKY-NEXT: subi16 sp, sp, 4 169; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 170; CSKY-NEXT: movi16 a1, 0 171; CSKY-NEXT: jsri32 [.LCPI8_0] 172; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 173; CSKY-NEXT: addi16 sp, sp, 4 174; CSKY-NEXT: rts16 175; CSKY-NEXT: .p2align 1 176; CSKY-NEXT: # %bb.1: 177; CSKY-NEXT: .p2align 2 178; CSKY-NEXT: .LCPI8_0: 179; CSKY-NEXT: .long __atomic_load_4 180; 181 %1 = load atomic i32, ptr %a unordered, align 4 182 ret i32 %1 183} 184 185define i32 @atomic_load_i32_monotonic(ptr %a) nounwind { 186; CSKY-LABEL: atomic_load_i32_monotonic: 187; CSKY: # %bb.0: 188; CSKY-NEXT: subi16 sp, sp, 4 189; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 190; CSKY-NEXT: movi16 a1, 0 191; CSKY-NEXT: jsri32 [.LCPI9_0] 192; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 193; CSKY-NEXT: addi16 sp, sp, 4 194; CSKY-NEXT: rts16 195; CSKY-NEXT: .p2align 1 196; CSKY-NEXT: # %bb.1: 197; CSKY-NEXT: .p2align 2 198; CSKY-NEXT: .LCPI9_0: 199; CSKY-NEXT: .long __atomic_load_4 200; 201 %1 = load atomic i32, ptr %a monotonic, align 4 202 ret i32 %1 203} 204 205define i32 @atomic_load_i32_acquire(ptr %a) nounwind { 206; CSKY-LABEL: atomic_load_i32_acquire: 207; CSKY: # %bb.0: 208; CSKY-NEXT: subi16 sp, sp, 4 209; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 210; CSKY-NEXT: movi16 a1, 2 211; CSKY-NEXT: jsri32 [.LCPI10_0] 212; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 213; CSKY-NEXT: addi16 sp, sp, 4 214; CSKY-NEXT: rts16 215; CSKY-NEXT: .p2align 1 216; CSKY-NEXT: # %bb.1: 217; CSKY-NEXT: .p2align 2 218; CSKY-NEXT: .LCPI10_0: 219; CSKY-NEXT: .long __atomic_load_4 220; 221 %1 = load atomic i32, ptr %a acquire, align 4 222 ret i32 %1 223} 224 225define i32 @atomic_load_i32_seq_cst(ptr %a) nounwind { 226; CSKY-LABEL: atomic_load_i32_seq_cst: 227; CSKY: # %bb.0: 228; CSKY-NEXT: subi16 sp, sp, 4 229; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 230; CSKY-NEXT: movi16 a1, 5 231; CSKY-NEXT: jsri32 [.LCPI11_0] 232; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 233; CSKY-NEXT: addi16 sp, sp, 4 234; CSKY-NEXT: rts16 235; CSKY-NEXT: .p2align 1 236; CSKY-NEXT: # %bb.1: 237; CSKY-NEXT: .p2align 2 238; CSKY-NEXT: .LCPI11_0: 239; CSKY-NEXT: .long __atomic_load_4 240; 241 %1 = load atomic i32, ptr %a seq_cst, align 4 242 ret i32 %1 243} 244 245define i64 @atomic_load_i64_unordered(ptr %a) nounwind { 246; CSKY-LABEL: atomic_load_i64_unordered: 247; CSKY: # %bb.0: 248; CSKY-NEXT: subi16 sp, sp, 4 249; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 250; CSKY-NEXT: movi16 a1, 0 251; CSKY-NEXT: jsri32 [.LCPI12_0] 252; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 253; CSKY-NEXT: addi16 sp, sp, 4 254; CSKY-NEXT: rts16 255; CSKY-NEXT: .p2align 1 256; CSKY-NEXT: # %bb.1: 257; CSKY-NEXT: .p2align 2 258; CSKY-NEXT: .LCPI12_0: 259; CSKY-NEXT: .long __atomic_load_8 260; 261 %1 = load atomic i64, ptr %a unordered, align 8 262 ret i64 %1 263} 264 265define i64 @atomic_load_i64_monotonic(ptr %a) nounwind { 266; CSKY-LABEL: atomic_load_i64_monotonic: 267; CSKY: # %bb.0: 268; CSKY-NEXT: subi16 sp, sp, 4 269; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 270; CSKY-NEXT: movi16 a1, 0 271; CSKY-NEXT: jsri32 [.LCPI13_0] 272; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 273; CSKY-NEXT: addi16 sp, sp, 4 274; CSKY-NEXT: rts16 275; CSKY-NEXT: .p2align 1 276; CSKY-NEXT: # %bb.1: 277; CSKY-NEXT: .p2align 2 278; CSKY-NEXT: .LCPI13_0: 279; CSKY-NEXT: .long __atomic_load_8 280; 281 %1 = load atomic i64, ptr %a monotonic, align 8 282 ret i64 %1 283} 284 285define i64 @atomic_load_i64_acquire(ptr %a) nounwind { 286; CSKY-LABEL: atomic_load_i64_acquire: 287; CSKY: # %bb.0: 288; CSKY-NEXT: subi16 sp, sp, 4 289; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 290; CSKY-NEXT: movi16 a1, 2 291; CSKY-NEXT: jsri32 [.LCPI14_0] 292; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 293; CSKY-NEXT: addi16 sp, sp, 4 294; CSKY-NEXT: rts16 295; CSKY-NEXT: .p2align 1 296; CSKY-NEXT: # %bb.1: 297; CSKY-NEXT: .p2align 2 298; CSKY-NEXT: .LCPI14_0: 299; CSKY-NEXT: .long __atomic_load_8 300; 301 %1 = load atomic i64, ptr %a acquire, align 8 302 ret i64 %1 303} 304 305define i64 @atomic_load_i64_seq_cst(ptr %a) nounwind { 306; CSKY-LABEL: atomic_load_i64_seq_cst: 307; CSKY: # %bb.0: 308; CSKY-NEXT: subi16 sp, sp, 4 309; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 310; CSKY-NEXT: movi16 a1, 5 311; CSKY-NEXT: jsri32 [.LCPI15_0] 312; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 313; CSKY-NEXT: addi16 sp, sp, 4 314; CSKY-NEXT: rts16 315; CSKY-NEXT: .p2align 1 316; CSKY-NEXT: # %bb.1: 317; CSKY-NEXT: .p2align 2 318; CSKY-NEXT: .LCPI15_0: 319; CSKY-NEXT: .long __atomic_load_8 320; 321 %1 = load atomic i64, ptr %a seq_cst, align 8 322 ret i64 %1 323} 324 325define void @atomic_store_i8_unordered(ptr %a, i8 %b) nounwind { 326; CSKY-LABEL: atomic_store_i8_unordered: 327; CSKY: # %bb.0: 328; CSKY-NEXT: subi16 sp, sp, 4 329; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 330; CSKY-NEXT: movi16 a2, 0 331; CSKY-NEXT: jsri32 [.LCPI16_0] 332; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 333; CSKY-NEXT: addi16 sp, sp, 4 334; CSKY-NEXT: rts16 335; CSKY-NEXT: .p2align 1 336; CSKY-NEXT: # %bb.1: 337; CSKY-NEXT: .p2align 2 338; CSKY-NEXT: .LCPI16_0: 339; CSKY-NEXT: .long __atomic_store_1 340; 341 store atomic i8 %b, ptr %a unordered, align 1 342 ret void 343} 344 345define void @atomic_store_i8_monotonic(ptr %a, i8 %b) nounwind { 346; CSKY-LABEL: atomic_store_i8_monotonic: 347; CSKY: # %bb.0: 348; CSKY-NEXT: subi16 sp, sp, 4 349; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 350; CSKY-NEXT: movi16 a2, 0 351; CSKY-NEXT: jsri32 [.LCPI17_0] 352; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 353; CSKY-NEXT: addi16 sp, sp, 4 354; CSKY-NEXT: rts16 355; CSKY-NEXT: .p2align 1 356; CSKY-NEXT: # %bb.1: 357; CSKY-NEXT: .p2align 2 358; CSKY-NEXT: .LCPI17_0: 359; CSKY-NEXT: .long __atomic_store_1 360; 361 store atomic i8 %b, ptr %a monotonic, align 1 362 ret void 363} 364 365define void @atomic_store_i8_release(ptr %a, i8 %b) nounwind { 366; CSKY-LABEL: atomic_store_i8_release: 367; CSKY: # %bb.0: 368; CSKY-NEXT: subi16 sp, sp, 4 369; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 370; CSKY-NEXT: movi16 a2, 3 371; CSKY-NEXT: jsri32 [.LCPI18_0] 372; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 373; CSKY-NEXT: addi16 sp, sp, 4 374; CSKY-NEXT: rts16 375; CSKY-NEXT: .p2align 1 376; CSKY-NEXT: # %bb.1: 377; CSKY-NEXT: .p2align 2 378; CSKY-NEXT: .LCPI18_0: 379; CSKY-NEXT: .long __atomic_store_1 380; 381 store atomic i8 %b, ptr %a release, align 1 382 ret void 383} 384 385define void @atomic_store_i8_seq_cst(ptr %a, i8 %b) nounwind { 386; CSKY-LABEL: atomic_store_i8_seq_cst: 387; CSKY: # %bb.0: 388; CSKY-NEXT: subi16 sp, sp, 4 389; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 390; CSKY-NEXT: movi16 a2, 5 391; CSKY-NEXT: jsri32 [.LCPI19_0] 392; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 393; CSKY-NEXT: addi16 sp, sp, 4 394; CSKY-NEXT: rts16 395; CSKY-NEXT: .p2align 1 396; CSKY-NEXT: # %bb.1: 397; CSKY-NEXT: .p2align 2 398; CSKY-NEXT: .LCPI19_0: 399; CSKY-NEXT: .long __atomic_store_1 400; 401 store atomic i8 %b, ptr %a seq_cst, align 1 402 ret void 403} 404 405define void @atomic_store_i16_unordered(ptr %a, i16 %b) nounwind { 406; CSKY-LABEL: atomic_store_i16_unordered: 407; CSKY: # %bb.0: 408; CSKY-NEXT: subi16 sp, sp, 4 409; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 410; CSKY-NEXT: movi16 a2, 0 411; CSKY-NEXT: jsri32 [.LCPI20_0] 412; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 413; CSKY-NEXT: addi16 sp, sp, 4 414; CSKY-NEXT: rts16 415; CSKY-NEXT: .p2align 1 416; CSKY-NEXT: # %bb.1: 417; CSKY-NEXT: .p2align 2 418; CSKY-NEXT: .LCPI20_0: 419; CSKY-NEXT: .long __atomic_store_2 420; 421 store atomic i16 %b, ptr %a unordered, align 2 422 ret void 423} 424 425define void @atomic_store_i16_monotonic(ptr %a, i16 %b) nounwind { 426; CSKY-LABEL: atomic_store_i16_monotonic: 427; CSKY: # %bb.0: 428; CSKY-NEXT: subi16 sp, sp, 4 429; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 430; CSKY-NEXT: movi16 a2, 0 431; CSKY-NEXT: jsri32 [.LCPI21_0] 432; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 433; CSKY-NEXT: addi16 sp, sp, 4 434; CSKY-NEXT: rts16 435; CSKY-NEXT: .p2align 1 436; CSKY-NEXT: # %bb.1: 437; CSKY-NEXT: .p2align 2 438; CSKY-NEXT: .LCPI21_0: 439; CSKY-NEXT: .long __atomic_store_2 440; 441 store atomic i16 %b, ptr %a monotonic, align 2 442 ret void 443} 444 445define void @atomic_store_i16_release(ptr %a, i16 %b) nounwind { 446; CSKY-LABEL: atomic_store_i16_release: 447; CSKY: # %bb.0: 448; CSKY-NEXT: subi16 sp, sp, 4 449; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 450; CSKY-NEXT: movi16 a2, 3 451; CSKY-NEXT: jsri32 [.LCPI22_0] 452; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 453; CSKY-NEXT: addi16 sp, sp, 4 454; CSKY-NEXT: rts16 455; CSKY-NEXT: .p2align 1 456; CSKY-NEXT: # %bb.1: 457; CSKY-NEXT: .p2align 2 458; CSKY-NEXT: .LCPI22_0: 459; CSKY-NEXT: .long __atomic_store_2 460; 461 store atomic i16 %b, ptr %a release, align 2 462 ret void 463} 464 465define void @atomic_store_i16_seq_cst(ptr %a, i16 %b) nounwind { 466; CSKY-LABEL: atomic_store_i16_seq_cst: 467; CSKY: # %bb.0: 468; CSKY-NEXT: subi16 sp, sp, 4 469; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 470; CSKY-NEXT: movi16 a2, 5 471; CSKY-NEXT: jsri32 [.LCPI23_0] 472; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 473; CSKY-NEXT: addi16 sp, sp, 4 474; CSKY-NEXT: rts16 475; CSKY-NEXT: .p2align 1 476; CSKY-NEXT: # %bb.1: 477; CSKY-NEXT: .p2align 2 478; CSKY-NEXT: .LCPI23_0: 479; CSKY-NEXT: .long __atomic_store_2 480; 481 store atomic i16 %b, ptr %a seq_cst, align 2 482 ret void 483} 484 485define void @atomic_store_i32_unordered(ptr %a, i32 %b) nounwind { 486; CSKY-LABEL: atomic_store_i32_unordered: 487; CSKY: # %bb.0: 488; CSKY-NEXT: subi16 sp, sp, 4 489; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 490; CSKY-NEXT: movi16 a2, 0 491; CSKY-NEXT: jsri32 [.LCPI24_0] 492; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 493; CSKY-NEXT: addi16 sp, sp, 4 494; CSKY-NEXT: rts16 495; CSKY-NEXT: .p2align 1 496; CSKY-NEXT: # %bb.1: 497; CSKY-NEXT: .p2align 2 498; CSKY-NEXT: .LCPI24_0: 499; CSKY-NEXT: .long __atomic_store_4 500; 501 store atomic i32 %b, ptr %a unordered, align 4 502 ret void 503} 504 505define void @atomic_store_i32_monotonic(ptr %a, i32 %b) nounwind { 506; CSKY-LABEL: atomic_store_i32_monotonic: 507; CSKY: # %bb.0: 508; CSKY-NEXT: subi16 sp, sp, 4 509; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 510; CSKY-NEXT: movi16 a2, 0 511; CSKY-NEXT: jsri32 [.LCPI25_0] 512; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 513; CSKY-NEXT: addi16 sp, sp, 4 514; CSKY-NEXT: rts16 515; CSKY-NEXT: .p2align 1 516; CSKY-NEXT: # %bb.1: 517; CSKY-NEXT: .p2align 2 518; CSKY-NEXT: .LCPI25_0: 519; CSKY-NEXT: .long __atomic_store_4 520; 521 store atomic i32 %b, ptr %a monotonic, align 4 522 ret void 523} 524 525define void @atomic_store_i32_release(ptr %a, i32 %b) nounwind { 526; CSKY-LABEL: atomic_store_i32_release: 527; CSKY: # %bb.0: 528; CSKY-NEXT: subi16 sp, sp, 4 529; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 530; CSKY-NEXT: movi16 a2, 3 531; CSKY-NEXT: jsri32 [.LCPI26_0] 532; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 533; CSKY-NEXT: addi16 sp, sp, 4 534; CSKY-NEXT: rts16 535; CSKY-NEXT: .p2align 1 536; CSKY-NEXT: # %bb.1: 537; CSKY-NEXT: .p2align 2 538; CSKY-NEXT: .LCPI26_0: 539; CSKY-NEXT: .long __atomic_store_4 540; 541 store atomic i32 %b, ptr %a release, align 4 542 ret void 543} 544 545define void @atomic_store_i32_seq_cst(ptr %a, i32 %b) nounwind { 546; CSKY-LABEL: atomic_store_i32_seq_cst: 547; CSKY: # %bb.0: 548; CSKY-NEXT: subi16 sp, sp, 4 549; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 550; CSKY-NEXT: movi16 a2, 5 551; CSKY-NEXT: jsri32 [.LCPI27_0] 552; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 553; CSKY-NEXT: addi16 sp, sp, 4 554; CSKY-NEXT: rts16 555; CSKY-NEXT: .p2align 1 556; CSKY-NEXT: # %bb.1: 557; CSKY-NEXT: .p2align 2 558; CSKY-NEXT: .LCPI27_0: 559; CSKY-NEXT: .long __atomic_store_4 560; 561 store atomic i32 %b, ptr %a seq_cst, align 4 562 ret void 563} 564 565define void @atomic_store_i64_unordered(ptr %a, i64 %b) nounwind { 566; CSKY-LABEL: atomic_store_i64_unordered: 567; CSKY: # %bb.0: 568; CSKY-NEXT: subi16 sp, sp, 4 569; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 570; CSKY-NEXT: movi16 a3, 0 571; CSKY-NEXT: jsri32 [.LCPI28_0] 572; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 573; CSKY-NEXT: addi16 sp, sp, 4 574; CSKY-NEXT: rts16 575; CSKY-NEXT: .p2align 1 576; CSKY-NEXT: # %bb.1: 577; CSKY-NEXT: .p2align 2 578; CSKY-NEXT: .LCPI28_0: 579; CSKY-NEXT: .long __atomic_store_8 580; 581 store atomic i64 %b, ptr %a unordered, align 8 582 ret void 583} 584 585define void @atomic_store_i64_monotonic(ptr %a, i64 %b) nounwind { 586; CSKY-LABEL: atomic_store_i64_monotonic: 587; CSKY: # %bb.0: 588; CSKY-NEXT: subi16 sp, sp, 4 589; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 590; CSKY-NEXT: movi16 a3, 0 591; CSKY-NEXT: jsri32 [.LCPI29_0] 592; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 593; CSKY-NEXT: addi16 sp, sp, 4 594; CSKY-NEXT: rts16 595; CSKY-NEXT: .p2align 1 596; CSKY-NEXT: # %bb.1: 597; CSKY-NEXT: .p2align 2 598; CSKY-NEXT: .LCPI29_0: 599; CSKY-NEXT: .long __atomic_store_8 600; 601 store atomic i64 %b, ptr %a monotonic, align 8 602 ret void 603} 604 605define void @atomic_store_i64_release(ptr %a, i64 %b) nounwind { 606; CSKY-LABEL: atomic_store_i64_release: 607; CSKY: # %bb.0: 608; CSKY-NEXT: subi16 sp, sp, 4 609; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 610; CSKY-NEXT: movi16 a3, 3 611; CSKY-NEXT: jsri32 [.LCPI30_0] 612; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 613; CSKY-NEXT: addi16 sp, sp, 4 614; CSKY-NEXT: rts16 615; CSKY-NEXT: .p2align 1 616; CSKY-NEXT: # %bb.1: 617; CSKY-NEXT: .p2align 2 618; CSKY-NEXT: .LCPI30_0: 619; CSKY-NEXT: .long __atomic_store_8 620; 621 store atomic i64 %b, ptr %a release, align 8 622 ret void 623} 624 625define void @atomic_store_i64_seq_cst(ptr %a, i64 %b) nounwind { 626; CSKY-LABEL: atomic_store_i64_seq_cst: 627; CSKY: # %bb.0: 628; CSKY-NEXT: subi16 sp, sp, 4 629; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 630; CSKY-NEXT: movi16 a3, 5 631; CSKY-NEXT: jsri32 [.LCPI31_0] 632; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 633; CSKY-NEXT: addi16 sp, sp, 4 634; CSKY-NEXT: rts16 635; CSKY-NEXT: .p2align 1 636; CSKY-NEXT: # %bb.1: 637; CSKY-NEXT: .p2align 2 638; CSKY-NEXT: .LCPI31_0: 639; CSKY-NEXT: .long __atomic_store_8 640; 641 store atomic i64 %b, ptr %a seq_cst, align 8 642 ret void 643} 644