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 @atomicrmw_xchg_i8_monotonic(i8* %a, i8 %b) nounwind { 6; CSKY-LABEL: atomicrmw_xchg_i8_monotonic: 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 a2, 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_exchange_1 20; 21 %1 = atomicrmw xchg i8* %a, i8 %b monotonic 22 ret i8 %1 23} 24 25define i8 @atomicrmw_xchg_i8_acquire(i8* %a, i8 %b) nounwind { 26; CSKY-LABEL: atomicrmw_xchg_i8_acquire: 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 a2, 2 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_exchange_1 40; 41 %1 = atomicrmw xchg i8* %a, i8 %b acquire 42 ret i8 %1 43} 44 45define i8 @atomicrmw_xchg_i8_release(i8* %a, i8 %b) nounwind { 46; CSKY-LABEL: atomicrmw_xchg_i8_release: 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 a2, 3 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_exchange_1 60; 61 %1 = atomicrmw xchg i8* %a, i8 %b release 62 ret i8 %1 63} 64 65define i8 @atomicrmw_xchg_i8_acq_rel(i8* %a, i8 %b) nounwind { 66; CSKY-LABEL: atomicrmw_xchg_i8_acq_rel: 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 a2, 4 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_exchange_1 80; 81 %1 = atomicrmw xchg i8* %a, i8 %b acq_rel 82 ret i8 %1 83} 84 85define i8 @atomicrmw_xchg_i8_seq_cst(i8* %a, i8 %b) nounwind { 86; CSKY-LABEL: atomicrmw_xchg_i8_seq_cst: 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 a2, 5 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_exchange_1 100; 101 %1 = atomicrmw xchg i8* %a, i8 %b seq_cst 102 ret i8 %1 103} 104 105define i8 @atomicrmw_add_i8_monotonic(i8 *%a, i8 %b) nounwind { 106; CSKY-LABEL: atomicrmw_add_i8_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 a2, 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_fetch_add_1 120; 121 %1 = atomicrmw add i8* %a, i8 %b monotonic 122 ret i8 %1 123} 124 125define i8 @atomicrmw_add_i8_acquire(i8 *%a, i8 %b) nounwind { 126; CSKY-LABEL: atomicrmw_add_i8_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 a2, 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_fetch_add_1 140; 141 %1 = atomicrmw add i8* %a, i8 %b acquire 142 ret i8 %1 143} 144 145define i8 @atomicrmw_add_i8_release(i8 *%a, i8 %b) nounwind { 146; CSKY-LABEL: atomicrmw_add_i8_release: 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 a2, 3 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_fetch_add_1 160; 161 %1 = atomicrmw add i8* %a, i8 %b release 162 ret i8 %1 163} 164 165define i8 @atomicrmw_add_i8_acq_rel(i8 *%a, i8 %b) nounwind { 166; CSKY-LABEL: atomicrmw_add_i8_acq_rel: 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 a2, 4 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_fetch_add_1 180; 181 %1 = atomicrmw add i8* %a, i8 %b acq_rel 182 ret i8 %1 183} 184 185define i8 @atomicrmw_add_i8_seq_cst(i8 *%a, i8 %b) nounwind { 186; CSKY-LABEL: atomicrmw_add_i8_seq_cst: 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 a2, 5 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_fetch_add_1 200; 201 %1 = atomicrmw add i8* %a, i8 %b seq_cst 202 ret i8 %1 203} 204 205define i8 @atomicrmw_sub_i8_monotonic(i8* %a, i8 %b) nounwind { 206; CSKY-LABEL: atomicrmw_sub_i8_monotonic: 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 a2, 0 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_fetch_sub_1 220; 221 %1 = atomicrmw sub i8* %a, i8 %b monotonic 222 ret i8 %1 223} 224 225define i8 @atomicrmw_sub_i8_acquire(i8* %a, i8 %b) nounwind { 226; CSKY-LABEL: atomicrmw_sub_i8_acquire: 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 a2, 2 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_fetch_sub_1 240; 241 %1 = atomicrmw sub i8* %a, i8 %b acquire 242 ret i8 %1 243} 244 245define i8 @atomicrmw_sub_i8_release(i8* %a, i8 %b) nounwind { 246; CSKY-LABEL: atomicrmw_sub_i8_release: 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 a2, 3 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_fetch_sub_1 260; 261 %1 = atomicrmw sub i8* %a, i8 %b release 262 ret i8 %1 263} 264 265define i8 @atomicrmw_sub_i8_acq_rel(i8* %a, i8 %b) nounwind { 266; CSKY-LABEL: atomicrmw_sub_i8_acq_rel: 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 a2, 4 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_fetch_sub_1 280; 281 %1 = atomicrmw sub i8* %a, i8 %b acq_rel 282 ret i8 %1 283} 284 285define i8 @atomicrmw_sub_i8_seq_cst(i8* %a, i8 %b) nounwind { 286; CSKY-LABEL: atomicrmw_sub_i8_seq_cst: 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 a2, 5 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_fetch_sub_1 300; 301 %1 = atomicrmw sub i8* %a, i8 %b seq_cst 302 ret i8 %1 303} 304 305define i8 @atomicrmw_and_i8_monotonic(i8 *%a, i8 %b) nounwind { 306; CSKY-LABEL: atomicrmw_and_i8_monotonic: 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 a2, 0 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_fetch_and_1 320; 321 %1 = atomicrmw and i8* %a, i8 %b monotonic 322 ret i8 %1 323} 324 325define i8 @atomicrmw_and_i8_acquire(i8 *%a, i8 %b) nounwind { 326; CSKY-LABEL: atomicrmw_and_i8_acquire: 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, 2 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_fetch_and_1 340; 341 %1 = atomicrmw and i8* %a, i8 %b acquire 342 ret i8 %1 343} 344 345define i8 @atomicrmw_and_i8_release(i8 *%a, i8 %b) nounwind { 346; CSKY-LABEL: atomicrmw_and_i8_release: 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, 3 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_fetch_and_1 360; 361 %1 = atomicrmw and i8* %a, i8 %b release 362 ret i8 %1 363} 364 365define i8 @atomicrmw_and_i8_acq_rel(i8 *%a, i8 %b) nounwind { 366; CSKY-LABEL: atomicrmw_and_i8_acq_rel: 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, 4 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_fetch_and_1 380; 381 %1 = atomicrmw and i8* %a, i8 %b acq_rel 382 ret i8 %1 383} 384 385define i8 @atomicrmw_and_i8_seq_cst(i8 *%a, i8 %b) nounwind { 386; CSKY-LABEL: atomicrmw_and_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_fetch_and_1 400; 401 %1 = atomicrmw and i8* %a, i8 %b seq_cst 402 ret i8 %1 403} 404 405define i8 @atomicrmw_nand_i8_monotonic(i8* %a, i8 %b) nounwind { 406; CSKY-LABEL: atomicrmw_nand_i8_monotonic: 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_fetch_nand_1 420; 421 %1 = atomicrmw nand i8* %a, i8 %b monotonic 422 ret i8 %1 423} 424 425define i8 @atomicrmw_nand_i8_acquire(i8* %a, i8 %b) nounwind { 426; CSKY-LABEL: atomicrmw_nand_i8_acquire: 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, 2 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_fetch_nand_1 440; 441 %1 = atomicrmw nand i8* %a, i8 %b acquire 442 ret i8 %1 443} 444 445define i8 @atomicrmw_nand_i8_release(i8* %a, i8 %b) nounwind { 446; CSKY-LABEL: atomicrmw_nand_i8_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_fetch_nand_1 460; 461 %1 = atomicrmw nand i8* %a, i8 %b release 462 ret i8 %1 463} 464 465define i8 @atomicrmw_nand_i8_acq_rel(i8* %a, i8 %b) nounwind { 466; CSKY-LABEL: atomicrmw_nand_i8_acq_rel: 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, 4 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_fetch_nand_1 480; 481 %1 = atomicrmw nand i8* %a, i8 %b acq_rel 482 ret i8 %1 483} 484 485define i8 @atomicrmw_nand_i8_seq_cst(i8* %a, i8 %b) nounwind { 486; CSKY-LABEL: atomicrmw_nand_i8_seq_cst: 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, 5 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_fetch_nand_1 500; 501 %1 = atomicrmw nand i8* %a, i8 %b seq_cst 502 ret i8 %1 503} 504 505define i8 @atomicrmw_or_i8_monotonic(i8 *%a, i8 %b) nounwind { 506; CSKY-LABEL: atomicrmw_or_i8_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_fetch_or_1 520; 521 %1 = atomicrmw or i8* %a, i8 %b monotonic 522 ret i8 %1 523} 524 525define i8 @atomicrmw_or_i8_acquire(i8 *%a, i8 %b) nounwind { 526; CSKY-LABEL: atomicrmw_or_i8_acquire: 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, 2 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_fetch_or_1 540; 541 %1 = atomicrmw or i8* %a, i8 %b acquire 542 ret i8 %1 543} 544 545define i8 @atomicrmw_or_i8_release(i8 *%a, i8 %b) nounwind { 546; CSKY-LABEL: atomicrmw_or_i8_release: 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, 3 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_fetch_or_1 560; 561 %1 = atomicrmw or i8* %a, i8 %b release 562 ret i8 %1 563} 564 565define i8 @atomicrmw_or_i8_acq_rel(i8 *%a, i8 %b) nounwind { 566; CSKY-LABEL: atomicrmw_or_i8_acq_rel: 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 a2, 4 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_fetch_or_1 580; 581 %1 = atomicrmw or i8* %a, i8 %b acq_rel 582 ret i8 %1 583} 584 585define i8 @atomicrmw_or_i8_seq_cst(i8 *%a, i8 %b) nounwind { 586; CSKY-LABEL: atomicrmw_or_i8_seq_cst: 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 a2, 5 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_fetch_or_1 600; 601 %1 = atomicrmw or i8* %a, i8 %b seq_cst 602 ret i8 %1 603} 604 605define i8 @atomicrmw_xor_i8_monotonic(i8 *%a, i8 %b) nounwind { 606; CSKY-LABEL: atomicrmw_xor_i8_monotonic: 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 a2, 0 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_fetch_xor_1 620; 621 %1 = atomicrmw xor i8* %a, i8 %b monotonic 622 ret i8 %1 623} 624 625define i8 @atomicrmw_xor_i8_acquire(i8 *%a, i8 %b) nounwind { 626; CSKY-LABEL: atomicrmw_xor_i8_acquire: 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 a2, 2 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_fetch_xor_1 640; 641 %1 = atomicrmw xor i8* %a, i8 %b acquire 642 ret i8 %1 643} 644 645define i8 @atomicrmw_xor_i8_release(i8 *%a, i8 %b) nounwind { 646; CSKY-LABEL: atomicrmw_xor_i8_release: 647; CSKY: # %bb.0: 648; CSKY-NEXT: subi16 sp, sp, 4 649; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 650; CSKY-NEXT: movi16 a2, 3 651; CSKY-NEXT: jsri32 [.LCPI32_0] 652; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 653; CSKY-NEXT: addi16 sp, sp, 4 654; CSKY-NEXT: rts16 655; CSKY-NEXT: .p2align 1 656; CSKY-NEXT: # %bb.1: 657; CSKY-NEXT: .p2align 2 658; CSKY-NEXT: .LCPI32_0: 659; CSKY-NEXT: .long __atomic_fetch_xor_1 660; 661 %1 = atomicrmw xor i8* %a, i8 %b release 662 ret i8 %1 663} 664 665define i8 @atomicrmw_xor_i8_acq_rel(i8 *%a, i8 %b) nounwind { 666; CSKY-LABEL: atomicrmw_xor_i8_acq_rel: 667; CSKY: # %bb.0: 668; CSKY-NEXT: subi16 sp, sp, 4 669; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 670; CSKY-NEXT: movi16 a2, 4 671; CSKY-NEXT: jsri32 [.LCPI33_0] 672; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 673; CSKY-NEXT: addi16 sp, sp, 4 674; CSKY-NEXT: rts16 675; CSKY-NEXT: .p2align 1 676; CSKY-NEXT: # %bb.1: 677; CSKY-NEXT: .p2align 2 678; CSKY-NEXT: .LCPI33_0: 679; CSKY-NEXT: .long __atomic_fetch_xor_1 680; 681 %1 = atomicrmw xor i8* %a, i8 %b acq_rel 682 ret i8 %1 683} 684 685define i8 @atomicrmw_xor_i8_seq_cst(i8 *%a, i8 %b) nounwind { 686; CSKY-LABEL: atomicrmw_xor_i8_seq_cst: 687; CSKY: # %bb.0: 688; CSKY-NEXT: subi16 sp, sp, 4 689; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 690; CSKY-NEXT: movi16 a2, 5 691; CSKY-NEXT: jsri32 [.LCPI34_0] 692; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 693; CSKY-NEXT: addi16 sp, sp, 4 694; CSKY-NEXT: rts16 695; CSKY-NEXT: .p2align 1 696; CSKY-NEXT: # %bb.1: 697; CSKY-NEXT: .p2align 2 698; CSKY-NEXT: .LCPI34_0: 699; CSKY-NEXT: .long __atomic_fetch_xor_1 700; 701 %1 = atomicrmw xor i8* %a, i8 %b seq_cst 702 ret i8 %1 703} 704 705define i8 @atomicrmw_max_i8_monotonic(i8 *%a, i8 %b) nounwind { 706; CSKY-LABEL: atomicrmw_max_i8_monotonic: 707; CSKY: # %bb.0: 708; CSKY-NEXT: subi16 sp, sp, 20 709; CSKY-NEXT: st16.w l3, (sp, 16) 710; CSKY-NEXT: st16.w l2, (sp, 12) 711; CSKY-NEXT: st16.w l1, (sp, 8) 712; CSKY-NEXT: st16.w l0, (sp, 4) 713; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 714; CSKY-NEXT: subi16 sp, sp, 8 715; CSKY-NEXT: mov16 l0, a1 716; CSKY-NEXT: mov16 l1, a0 717; CSKY-NEXT: ld16.b a0, (a0, 0) 718; CSKY-NEXT: sextb16 l2, a1 719; CSKY-NEXT: movi16 l3, 0 720; CSKY-NEXT: .LBB35_1: # %atomicrmw.start 721; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 722; CSKY-NEXT: sextb16 a1, a0 723; CSKY-NEXT: cmplt16 l2, a1 724; CSKY-NEXT: mov16 a2, l0 725; CSKY-NEXT: movt32 a2, a0 726; CSKY-NEXT: st32.b a0, (sp, 7) 727; CSKY-NEXT: st16.w l3, (sp, 0) 728; CSKY-NEXT: mov16 a0, l1 729; CSKY-NEXT: addi32 a1, sp, 7 730; CSKY-NEXT: movi16 a3, 0 731; CSKY-NEXT: jsri32 [.LCPI35_0] 732; CSKY-NEXT: mov16 a1, a0 733; CSKY-NEXT: ld32.b a0, (sp, 7) 734; CSKY-NEXT: bez32 a1, .LBB35_1 735; CSKY-NEXT: # %bb.2: # %atomicrmw.end 736; CSKY-NEXT: addi16 sp, sp, 8 737; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 738; CSKY-NEXT: ld16.w l0, (sp, 4) 739; CSKY-NEXT: ld16.w l1, (sp, 8) 740; CSKY-NEXT: ld16.w l2, (sp, 12) 741; CSKY-NEXT: ld16.w l3, (sp, 16) 742; CSKY-NEXT: addi16 sp, sp, 20 743; CSKY-NEXT: rts16 744; CSKY-NEXT: .p2align 1 745; CSKY-NEXT: # %bb.3: 746; CSKY-NEXT: .p2align 2 747; CSKY-NEXT: .LCPI35_0: 748; CSKY-NEXT: .long __atomic_compare_exchange_1 749; 750 %1 = atomicrmw max i8* %a, i8 %b monotonic 751 ret i8 %1 752} 753 754define i8 @atomicrmw_max_i8_acquire(i8 *%a, i8 %b) nounwind { 755; CSKY-LABEL: atomicrmw_max_i8_acquire: 756; CSKY: # %bb.0: 757; CSKY-NEXT: subi16 sp, sp, 20 758; CSKY-NEXT: st16.w l3, (sp, 16) 759; CSKY-NEXT: st16.w l2, (sp, 12) 760; CSKY-NEXT: st16.w l1, (sp, 8) 761; CSKY-NEXT: st16.w l0, (sp, 4) 762; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 763; CSKY-NEXT: subi16 sp, sp, 8 764; CSKY-NEXT: mov16 l0, a1 765; CSKY-NEXT: mov16 l1, a0 766; CSKY-NEXT: ld16.b a0, (a0, 0) 767; CSKY-NEXT: sextb16 l2, a1 768; CSKY-NEXT: movi16 l3, 2 769; CSKY-NEXT: .LBB36_1: # %atomicrmw.start 770; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 771; CSKY-NEXT: sextb16 a1, a0 772; CSKY-NEXT: cmplt16 l2, a1 773; CSKY-NEXT: mov16 a2, l0 774; CSKY-NEXT: movt32 a2, a0 775; CSKY-NEXT: st32.b a0, (sp, 7) 776; CSKY-NEXT: st16.w l3, (sp, 0) 777; CSKY-NEXT: mov16 a0, l1 778; CSKY-NEXT: addi32 a1, sp, 7 779; CSKY-NEXT: movi16 a3, 2 780; CSKY-NEXT: jsri32 [.LCPI36_0] 781; CSKY-NEXT: mov16 a1, a0 782; CSKY-NEXT: ld32.b a0, (sp, 7) 783; CSKY-NEXT: bez32 a1, .LBB36_1 784; CSKY-NEXT: # %bb.2: # %atomicrmw.end 785; CSKY-NEXT: addi16 sp, sp, 8 786; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 787; CSKY-NEXT: ld16.w l0, (sp, 4) 788; CSKY-NEXT: ld16.w l1, (sp, 8) 789; CSKY-NEXT: ld16.w l2, (sp, 12) 790; CSKY-NEXT: ld16.w l3, (sp, 16) 791; CSKY-NEXT: addi16 sp, sp, 20 792; CSKY-NEXT: rts16 793; CSKY-NEXT: .p2align 1 794; CSKY-NEXT: # %bb.3: 795; CSKY-NEXT: .p2align 2 796; CSKY-NEXT: .LCPI36_0: 797; CSKY-NEXT: .long __atomic_compare_exchange_1 798; 799 %1 = atomicrmw max i8* %a, i8 %b acquire 800 ret i8 %1 801} 802 803define i8 @atomicrmw_max_i8_release(i8 *%a, i8 %b) nounwind { 804; CSKY-LABEL: atomicrmw_max_i8_release: 805; CSKY: # %bb.0: 806; CSKY-NEXT: subi16 sp, sp, 20 807; CSKY-NEXT: st16.w l3, (sp, 16) 808; CSKY-NEXT: st16.w l2, (sp, 12) 809; CSKY-NEXT: st16.w l1, (sp, 8) 810; CSKY-NEXT: st16.w l0, (sp, 4) 811; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 812; CSKY-NEXT: subi16 sp, sp, 8 813; CSKY-NEXT: mov16 l0, a1 814; CSKY-NEXT: mov16 l1, a0 815; CSKY-NEXT: ld16.b a0, (a0, 0) 816; CSKY-NEXT: sextb16 l2, a1 817; CSKY-NEXT: movi16 l3, 0 818; CSKY-NEXT: .LBB37_1: # %atomicrmw.start 819; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 820; CSKY-NEXT: sextb16 a1, a0 821; CSKY-NEXT: cmplt16 l2, a1 822; CSKY-NEXT: mov16 a2, l0 823; CSKY-NEXT: movt32 a2, a0 824; CSKY-NEXT: st32.b a0, (sp, 7) 825; CSKY-NEXT: st16.w l3, (sp, 0) 826; CSKY-NEXT: mov16 a0, l1 827; CSKY-NEXT: addi32 a1, sp, 7 828; CSKY-NEXT: movi16 a3, 3 829; CSKY-NEXT: jsri32 [.LCPI37_0] 830; CSKY-NEXT: mov16 a1, a0 831; CSKY-NEXT: ld32.b a0, (sp, 7) 832; CSKY-NEXT: bez32 a1, .LBB37_1 833; CSKY-NEXT: # %bb.2: # %atomicrmw.end 834; CSKY-NEXT: addi16 sp, sp, 8 835; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 836; CSKY-NEXT: ld16.w l0, (sp, 4) 837; CSKY-NEXT: ld16.w l1, (sp, 8) 838; CSKY-NEXT: ld16.w l2, (sp, 12) 839; CSKY-NEXT: ld16.w l3, (sp, 16) 840; CSKY-NEXT: addi16 sp, sp, 20 841; CSKY-NEXT: rts16 842; CSKY-NEXT: .p2align 1 843; CSKY-NEXT: # %bb.3: 844; CSKY-NEXT: .p2align 2 845; CSKY-NEXT: .LCPI37_0: 846; CSKY-NEXT: .long __atomic_compare_exchange_1 847; 848 %1 = atomicrmw max i8* %a, i8 %b release 849 ret i8 %1 850} 851 852define i8 @atomicrmw_max_i8_acq_rel(i8 *%a, i8 %b) nounwind { 853; CSKY-LABEL: atomicrmw_max_i8_acq_rel: 854; CSKY: # %bb.0: 855; CSKY-NEXT: subi16 sp, sp, 20 856; CSKY-NEXT: st16.w l3, (sp, 16) 857; CSKY-NEXT: st16.w l2, (sp, 12) 858; CSKY-NEXT: st16.w l1, (sp, 8) 859; CSKY-NEXT: st16.w l0, (sp, 4) 860; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 861; CSKY-NEXT: subi16 sp, sp, 8 862; CSKY-NEXT: mov16 l0, a1 863; CSKY-NEXT: mov16 l1, a0 864; CSKY-NEXT: ld16.b a0, (a0, 0) 865; CSKY-NEXT: sextb16 l2, a1 866; CSKY-NEXT: movi16 l3, 2 867; CSKY-NEXT: .LBB38_1: # %atomicrmw.start 868; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 869; CSKY-NEXT: sextb16 a1, a0 870; CSKY-NEXT: cmplt16 l2, a1 871; CSKY-NEXT: mov16 a2, l0 872; CSKY-NEXT: movt32 a2, a0 873; CSKY-NEXT: st32.b a0, (sp, 7) 874; CSKY-NEXT: st16.w l3, (sp, 0) 875; CSKY-NEXT: mov16 a0, l1 876; CSKY-NEXT: addi32 a1, sp, 7 877; CSKY-NEXT: movi16 a3, 4 878; CSKY-NEXT: jsri32 [.LCPI38_0] 879; CSKY-NEXT: mov16 a1, a0 880; CSKY-NEXT: ld32.b a0, (sp, 7) 881; CSKY-NEXT: bez32 a1, .LBB38_1 882; CSKY-NEXT: # %bb.2: # %atomicrmw.end 883; CSKY-NEXT: addi16 sp, sp, 8 884; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 885; CSKY-NEXT: ld16.w l0, (sp, 4) 886; CSKY-NEXT: ld16.w l1, (sp, 8) 887; CSKY-NEXT: ld16.w l2, (sp, 12) 888; CSKY-NEXT: ld16.w l3, (sp, 16) 889; CSKY-NEXT: addi16 sp, sp, 20 890; CSKY-NEXT: rts16 891; CSKY-NEXT: .p2align 1 892; CSKY-NEXT: # %bb.3: 893; CSKY-NEXT: .p2align 2 894; CSKY-NEXT: .LCPI38_0: 895; CSKY-NEXT: .long __atomic_compare_exchange_1 896; 897 %1 = atomicrmw max i8* %a, i8 %b acq_rel 898 ret i8 %1 899} 900 901define i8 @atomicrmw_max_i8_seq_cst(i8 *%a, i8 %b) nounwind { 902; CSKY-LABEL: atomicrmw_max_i8_seq_cst: 903; CSKY: # %bb.0: 904; CSKY-NEXT: subi16 sp, sp, 20 905; CSKY-NEXT: st16.w l3, (sp, 16) 906; CSKY-NEXT: st16.w l2, (sp, 12) 907; CSKY-NEXT: st16.w l1, (sp, 8) 908; CSKY-NEXT: st16.w l0, (sp, 4) 909; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 910; CSKY-NEXT: subi16 sp, sp, 8 911; CSKY-NEXT: mov16 l0, a1 912; CSKY-NEXT: mov16 l1, a0 913; CSKY-NEXT: ld16.b a0, (a0, 0) 914; CSKY-NEXT: sextb16 l2, a1 915; CSKY-NEXT: movi16 l3, 5 916; CSKY-NEXT: .LBB39_1: # %atomicrmw.start 917; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 918; CSKY-NEXT: sextb16 a1, a0 919; CSKY-NEXT: cmplt16 l2, a1 920; CSKY-NEXT: mov16 a2, l0 921; CSKY-NEXT: movt32 a2, a0 922; CSKY-NEXT: st32.b a0, (sp, 7) 923; CSKY-NEXT: st16.w l3, (sp, 0) 924; CSKY-NEXT: mov16 a0, l1 925; CSKY-NEXT: addi32 a1, sp, 7 926; CSKY-NEXT: movi16 a3, 5 927; CSKY-NEXT: jsri32 [.LCPI39_0] 928; CSKY-NEXT: mov16 a1, a0 929; CSKY-NEXT: ld32.b a0, (sp, 7) 930; CSKY-NEXT: bez32 a1, .LBB39_1 931; CSKY-NEXT: # %bb.2: # %atomicrmw.end 932; CSKY-NEXT: addi16 sp, sp, 8 933; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 934; CSKY-NEXT: ld16.w l0, (sp, 4) 935; CSKY-NEXT: ld16.w l1, (sp, 8) 936; CSKY-NEXT: ld16.w l2, (sp, 12) 937; CSKY-NEXT: ld16.w l3, (sp, 16) 938; CSKY-NEXT: addi16 sp, sp, 20 939; CSKY-NEXT: rts16 940; CSKY-NEXT: .p2align 1 941; CSKY-NEXT: # %bb.3: 942; CSKY-NEXT: .p2align 2 943; CSKY-NEXT: .LCPI39_0: 944; CSKY-NEXT: .long __atomic_compare_exchange_1 945; 946 %1 = atomicrmw max i8* %a, i8 %b seq_cst 947 ret i8 %1 948} 949 950define i8 @atomicrmw_min_i8_monotonic(i8 *%a, i8 %b) nounwind { 951; CSKY-LABEL: atomicrmw_min_i8_monotonic: 952; CSKY: # %bb.0: 953; CSKY-NEXT: subi16 sp, sp, 20 954; CSKY-NEXT: st16.w l3, (sp, 16) 955; CSKY-NEXT: st16.w l2, (sp, 12) 956; CSKY-NEXT: st16.w l1, (sp, 8) 957; CSKY-NEXT: st16.w l0, (sp, 4) 958; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 959; CSKY-NEXT: subi16 sp, sp, 8 960; CSKY-NEXT: mov16 l0, a1 961; CSKY-NEXT: mov16 l1, a0 962; CSKY-NEXT: ld16.b a0, (a0, 0) 963; CSKY-NEXT: sextb16 l2, a1 964; CSKY-NEXT: movi16 l3, 0 965; CSKY-NEXT: .LBB40_1: # %atomicrmw.start 966; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 967; CSKY-NEXT: sextb16 a1, a0 968; CSKY-NEXT: cmplt16 l2, a1 969; CSKY-NEXT: mov16 a2, l0 970; CSKY-NEXT: movf32 a2, a0 971; CSKY-NEXT: st32.b a0, (sp, 7) 972; CSKY-NEXT: st16.w l3, (sp, 0) 973; CSKY-NEXT: mov16 a0, l1 974; CSKY-NEXT: addi32 a1, sp, 7 975; CSKY-NEXT: movi16 a3, 0 976; CSKY-NEXT: jsri32 [.LCPI40_0] 977; CSKY-NEXT: mov16 a1, a0 978; CSKY-NEXT: ld32.b a0, (sp, 7) 979; CSKY-NEXT: bez32 a1, .LBB40_1 980; CSKY-NEXT: # %bb.2: # %atomicrmw.end 981; CSKY-NEXT: addi16 sp, sp, 8 982; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 983; CSKY-NEXT: ld16.w l0, (sp, 4) 984; CSKY-NEXT: ld16.w l1, (sp, 8) 985; CSKY-NEXT: ld16.w l2, (sp, 12) 986; CSKY-NEXT: ld16.w l3, (sp, 16) 987; CSKY-NEXT: addi16 sp, sp, 20 988; CSKY-NEXT: rts16 989; CSKY-NEXT: .p2align 1 990; CSKY-NEXT: # %bb.3: 991; CSKY-NEXT: .p2align 2 992; CSKY-NEXT: .LCPI40_0: 993; CSKY-NEXT: .long __atomic_compare_exchange_1 994; 995 %1 = atomicrmw min i8* %a, i8 %b monotonic 996 ret i8 %1 997} 998 999define i8 @atomicrmw_min_i8_acquire(i8 *%a, i8 %b) nounwind { 1000; CSKY-LABEL: atomicrmw_min_i8_acquire: 1001; CSKY: # %bb.0: 1002; CSKY-NEXT: subi16 sp, sp, 20 1003; CSKY-NEXT: st16.w l3, (sp, 16) 1004; CSKY-NEXT: st16.w l2, (sp, 12) 1005; CSKY-NEXT: st16.w l1, (sp, 8) 1006; CSKY-NEXT: st16.w l0, (sp, 4) 1007; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 1008; CSKY-NEXT: subi16 sp, sp, 8 1009; CSKY-NEXT: mov16 l0, a1 1010; CSKY-NEXT: mov16 l1, a0 1011; CSKY-NEXT: ld16.b a0, (a0, 0) 1012; CSKY-NEXT: sextb16 l2, a1 1013; CSKY-NEXT: movi16 l3, 2 1014; CSKY-NEXT: .LBB41_1: # %atomicrmw.start 1015; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 1016; CSKY-NEXT: sextb16 a1, a0 1017; CSKY-NEXT: cmplt16 l2, a1 1018; CSKY-NEXT: mov16 a2, l0 1019; CSKY-NEXT: movf32 a2, a0 1020; CSKY-NEXT: st32.b a0, (sp, 7) 1021; CSKY-NEXT: st16.w l3, (sp, 0) 1022; CSKY-NEXT: mov16 a0, l1 1023; CSKY-NEXT: addi32 a1, sp, 7 1024; CSKY-NEXT: movi16 a3, 2 1025; CSKY-NEXT: jsri32 [.LCPI41_0] 1026; CSKY-NEXT: mov16 a1, a0 1027; CSKY-NEXT: ld32.b a0, (sp, 7) 1028; CSKY-NEXT: bez32 a1, .LBB41_1 1029; CSKY-NEXT: # %bb.2: # %atomicrmw.end 1030; CSKY-NEXT: addi16 sp, sp, 8 1031; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 1032; CSKY-NEXT: ld16.w l0, (sp, 4) 1033; CSKY-NEXT: ld16.w l1, (sp, 8) 1034; CSKY-NEXT: ld16.w l2, (sp, 12) 1035; CSKY-NEXT: ld16.w l3, (sp, 16) 1036; CSKY-NEXT: addi16 sp, sp, 20 1037; CSKY-NEXT: rts16 1038; CSKY-NEXT: .p2align 1 1039; CSKY-NEXT: # %bb.3: 1040; CSKY-NEXT: .p2align 2 1041; CSKY-NEXT: .LCPI41_0: 1042; CSKY-NEXT: .long __atomic_compare_exchange_1 1043; 1044 %1 = atomicrmw min i8* %a, i8 %b acquire 1045 ret i8 %1 1046} 1047 1048define i8 @atomicrmw_min_i8_release(i8 *%a, i8 %b) nounwind { 1049; CSKY-LABEL: atomicrmw_min_i8_release: 1050; CSKY: # %bb.0: 1051; CSKY-NEXT: subi16 sp, sp, 20 1052; CSKY-NEXT: st16.w l3, (sp, 16) 1053; CSKY-NEXT: st16.w l2, (sp, 12) 1054; CSKY-NEXT: st16.w l1, (sp, 8) 1055; CSKY-NEXT: st16.w l0, (sp, 4) 1056; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 1057; CSKY-NEXT: subi16 sp, sp, 8 1058; CSKY-NEXT: mov16 l0, a1 1059; CSKY-NEXT: mov16 l1, a0 1060; CSKY-NEXT: ld16.b a0, (a0, 0) 1061; CSKY-NEXT: sextb16 l2, a1 1062; CSKY-NEXT: movi16 l3, 0 1063; CSKY-NEXT: .LBB42_1: # %atomicrmw.start 1064; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 1065; CSKY-NEXT: sextb16 a1, a0 1066; CSKY-NEXT: cmplt16 l2, a1 1067; CSKY-NEXT: mov16 a2, l0 1068; CSKY-NEXT: movf32 a2, a0 1069; CSKY-NEXT: st32.b a0, (sp, 7) 1070; CSKY-NEXT: st16.w l3, (sp, 0) 1071; CSKY-NEXT: mov16 a0, l1 1072; CSKY-NEXT: addi32 a1, sp, 7 1073; CSKY-NEXT: movi16 a3, 3 1074; CSKY-NEXT: jsri32 [.LCPI42_0] 1075; CSKY-NEXT: mov16 a1, a0 1076; CSKY-NEXT: ld32.b a0, (sp, 7) 1077; CSKY-NEXT: bez32 a1, .LBB42_1 1078; CSKY-NEXT: # %bb.2: # %atomicrmw.end 1079; CSKY-NEXT: addi16 sp, sp, 8 1080; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 1081; CSKY-NEXT: ld16.w l0, (sp, 4) 1082; CSKY-NEXT: ld16.w l1, (sp, 8) 1083; CSKY-NEXT: ld16.w l2, (sp, 12) 1084; CSKY-NEXT: ld16.w l3, (sp, 16) 1085; CSKY-NEXT: addi16 sp, sp, 20 1086; CSKY-NEXT: rts16 1087; CSKY-NEXT: .p2align 1 1088; CSKY-NEXT: # %bb.3: 1089; CSKY-NEXT: .p2align 2 1090; CSKY-NEXT: .LCPI42_0: 1091; CSKY-NEXT: .long __atomic_compare_exchange_1 1092; 1093 %1 = atomicrmw min i8* %a, i8 %b release 1094 ret i8 %1 1095} 1096 1097define i8 @atomicrmw_min_i8_acq_rel(i8 *%a, i8 %b) nounwind { 1098; CSKY-LABEL: atomicrmw_min_i8_acq_rel: 1099; CSKY: # %bb.0: 1100; CSKY-NEXT: subi16 sp, sp, 20 1101; CSKY-NEXT: st16.w l3, (sp, 16) 1102; CSKY-NEXT: st16.w l2, (sp, 12) 1103; CSKY-NEXT: st16.w l1, (sp, 8) 1104; CSKY-NEXT: st16.w l0, (sp, 4) 1105; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 1106; CSKY-NEXT: subi16 sp, sp, 8 1107; CSKY-NEXT: mov16 l0, a1 1108; CSKY-NEXT: mov16 l1, a0 1109; CSKY-NEXT: ld16.b a0, (a0, 0) 1110; CSKY-NEXT: sextb16 l2, a1 1111; CSKY-NEXT: movi16 l3, 2 1112; CSKY-NEXT: .LBB43_1: # %atomicrmw.start 1113; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 1114; CSKY-NEXT: sextb16 a1, a0 1115; CSKY-NEXT: cmplt16 l2, a1 1116; CSKY-NEXT: mov16 a2, l0 1117; CSKY-NEXT: movf32 a2, a0 1118; CSKY-NEXT: st32.b a0, (sp, 7) 1119; CSKY-NEXT: st16.w l3, (sp, 0) 1120; CSKY-NEXT: mov16 a0, l1 1121; CSKY-NEXT: addi32 a1, sp, 7 1122; CSKY-NEXT: movi16 a3, 4 1123; CSKY-NEXT: jsri32 [.LCPI43_0] 1124; CSKY-NEXT: mov16 a1, a0 1125; CSKY-NEXT: ld32.b a0, (sp, 7) 1126; CSKY-NEXT: bez32 a1, .LBB43_1 1127; CSKY-NEXT: # %bb.2: # %atomicrmw.end 1128; CSKY-NEXT: addi16 sp, sp, 8 1129; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 1130; CSKY-NEXT: ld16.w l0, (sp, 4) 1131; CSKY-NEXT: ld16.w l1, (sp, 8) 1132; CSKY-NEXT: ld16.w l2, (sp, 12) 1133; CSKY-NEXT: ld16.w l3, (sp, 16) 1134; CSKY-NEXT: addi16 sp, sp, 20 1135; CSKY-NEXT: rts16 1136; CSKY-NEXT: .p2align 1 1137; CSKY-NEXT: # %bb.3: 1138; CSKY-NEXT: .p2align 2 1139; CSKY-NEXT: .LCPI43_0: 1140; CSKY-NEXT: .long __atomic_compare_exchange_1 1141; 1142 %1 = atomicrmw min i8* %a, i8 %b acq_rel 1143 ret i8 %1 1144} 1145 1146define i8 @atomicrmw_min_i8_seq_cst(i8 *%a, i8 %b) nounwind { 1147; CSKY-LABEL: atomicrmw_min_i8_seq_cst: 1148; CSKY: # %bb.0: 1149; CSKY-NEXT: subi16 sp, sp, 20 1150; CSKY-NEXT: st16.w l3, (sp, 16) 1151; CSKY-NEXT: st16.w l2, (sp, 12) 1152; CSKY-NEXT: st16.w l1, (sp, 8) 1153; CSKY-NEXT: st16.w l0, (sp, 4) 1154; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 1155; CSKY-NEXT: subi16 sp, sp, 8 1156; CSKY-NEXT: mov16 l0, a1 1157; CSKY-NEXT: mov16 l1, a0 1158; CSKY-NEXT: ld16.b a0, (a0, 0) 1159; CSKY-NEXT: sextb16 l2, a1 1160; CSKY-NEXT: movi16 l3, 5 1161; CSKY-NEXT: .LBB44_1: # %atomicrmw.start 1162; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 1163; CSKY-NEXT: sextb16 a1, a0 1164; CSKY-NEXT: cmplt16 l2, a1 1165; CSKY-NEXT: mov16 a2, l0 1166; CSKY-NEXT: movf32 a2, a0 1167; CSKY-NEXT: st32.b a0, (sp, 7) 1168; CSKY-NEXT: st16.w l3, (sp, 0) 1169; CSKY-NEXT: mov16 a0, l1 1170; CSKY-NEXT: addi32 a1, sp, 7 1171; CSKY-NEXT: movi16 a3, 5 1172; CSKY-NEXT: jsri32 [.LCPI44_0] 1173; CSKY-NEXT: mov16 a1, a0 1174; CSKY-NEXT: ld32.b a0, (sp, 7) 1175; CSKY-NEXT: bez32 a1, .LBB44_1 1176; CSKY-NEXT: # %bb.2: # %atomicrmw.end 1177; CSKY-NEXT: addi16 sp, sp, 8 1178; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 1179; CSKY-NEXT: ld16.w l0, (sp, 4) 1180; CSKY-NEXT: ld16.w l1, (sp, 8) 1181; CSKY-NEXT: ld16.w l2, (sp, 12) 1182; CSKY-NEXT: ld16.w l3, (sp, 16) 1183; CSKY-NEXT: addi16 sp, sp, 20 1184; CSKY-NEXT: rts16 1185; CSKY-NEXT: .p2align 1 1186; CSKY-NEXT: # %bb.3: 1187; CSKY-NEXT: .p2align 2 1188; CSKY-NEXT: .LCPI44_0: 1189; CSKY-NEXT: .long __atomic_compare_exchange_1 1190; 1191 %1 = atomicrmw min i8* %a, i8 %b seq_cst 1192 ret i8 %1 1193} 1194 1195define i8 @atomicrmw_umax_i8_monotonic(i8 *%a, i8 %b) nounwind { 1196; CSKY-LABEL: atomicrmw_umax_i8_monotonic: 1197; CSKY: # %bb.0: 1198; CSKY-NEXT: subi16 sp, sp, 20 1199; CSKY-NEXT: st16.w l3, (sp, 16) 1200; CSKY-NEXT: st16.w l2, (sp, 12) 1201; CSKY-NEXT: st16.w l1, (sp, 8) 1202; CSKY-NEXT: st16.w l0, (sp, 4) 1203; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 1204; CSKY-NEXT: subi16 sp, sp, 8 1205; CSKY-NEXT: mov16 l0, a1 1206; CSKY-NEXT: mov16 l1, a0 1207; CSKY-NEXT: ld16.b a0, (a0, 0) 1208; CSKY-NEXT: zextb16 l2, a1 1209; CSKY-NEXT: movi16 l3, 0 1210; CSKY-NEXT: .LBB45_1: # %atomicrmw.start 1211; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 1212; CSKY-NEXT: zextb16 a1, a0 1213; CSKY-NEXT: cmphs16 l2, a1 1214; CSKY-NEXT: mov16 a2, l0 1215; CSKY-NEXT: movf32 a2, a0 1216; CSKY-NEXT: st32.b a0, (sp, 7) 1217; CSKY-NEXT: st16.w l3, (sp, 0) 1218; CSKY-NEXT: mov16 a0, l1 1219; CSKY-NEXT: addi32 a1, sp, 7 1220; CSKY-NEXT: movi16 a3, 0 1221; CSKY-NEXT: jsri32 [.LCPI45_0] 1222; CSKY-NEXT: mov16 a1, a0 1223; CSKY-NEXT: ld32.b a0, (sp, 7) 1224; CSKY-NEXT: bez32 a1, .LBB45_1 1225; CSKY-NEXT: # %bb.2: # %atomicrmw.end 1226; CSKY-NEXT: addi16 sp, sp, 8 1227; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 1228; CSKY-NEXT: ld16.w l0, (sp, 4) 1229; CSKY-NEXT: ld16.w l1, (sp, 8) 1230; CSKY-NEXT: ld16.w l2, (sp, 12) 1231; CSKY-NEXT: ld16.w l3, (sp, 16) 1232; CSKY-NEXT: addi16 sp, sp, 20 1233; CSKY-NEXT: rts16 1234; CSKY-NEXT: .p2align 1 1235; CSKY-NEXT: # %bb.3: 1236; CSKY-NEXT: .p2align 2 1237; CSKY-NEXT: .LCPI45_0: 1238; CSKY-NEXT: .long __atomic_compare_exchange_1 1239; 1240 %1 = atomicrmw umax i8* %a, i8 %b monotonic 1241 ret i8 %1 1242} 1243 1244define i8 @atomicrmw_umax_i8_acquire(i8 *%a, i8 %b) nounwind { 1245; CSKY-LABEL: atomicrmw_umax_i8_acquire: 1246; CSKY: # %bb.0: 1247; CSKY-NEXT: subi16 sp, sp, 20 1248; CSKY-NEXT: st16.w l3, (sp, 16) 1249; CSKY-NEXT: st16.w l2, (sp, 12) 1250; CSKY-NEXT: st16.w l1, (sp, 8) 1251; CSKY-NEXT: st16.w l0, (sp, 4) 1252; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 1253; CSKY-NEXT: subi16 sp, sp, 8 1254; CSKY-NEXT: mov16 l0, a1 1255; CSKY-NEXT: mov16 l1, a0 1256; CSKY-NEXT: ld16.b a0, (a0, 0) 1257; CSKY-NEXT: zextb16 l2, a1 1258; CSKY-NEXT: movi16 l3, 2 1259; CSKY-NEXT: .LBB46_1: # %atomicrmw.start 1260; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 1261; CSKY-NEXT: zextb16 a1, a0 1262; CSKY-NEXT: cmphs16 l2, a1 1263; CSKY-NEXT: mov16 a2, l0 1264; CSKY-NEXT: movf32 a2, a0 1265; CSKY-NEXT: st32.b a0, (sp, 7) 1266; CSKY-NEXT: st16.w l3, (sp, 0) 1267; CSKY-NEXT: mov16 a0, l1 1268; CSKY-NEXT: addi32 a1, sp, 7 1269; CSKY-NEXT: movi16 a3, 2 1270; CSKY-NEXT: jsri32 [.LCPI46_0] 1271; CSKY-NEXT: mov16 a1, a0 1272; CSKY-NEXT: ld32.b a0, (sp, 7) 1273; CSKY-NEXT: bez32 a1, .LBB46_1 1274; CSKY-NEXT: # %bb.2: # %atomicrmw.end 1275; CSKY-NEXT: addi16 sp, sp, 8 1276; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 1277; CSKY-NEXT: ld16.w l0, (sp, 4) 1278; CSKY-NEXT: ld16.w l1, (sp, 8) 1279; CSKY-NEXT: ld16.w l2, (sp, 12) 1280; CSKY-NEXT: ld16.w l3, (sp, 16) 1281; CSKY-NEXT: addi16 sp, sp, 20 1282; CSKY-NEXT: rts16 1283; CSKY-NEXT: .p2align 1 1284; CSKY-NEXT: # %bb.3: 1285; CSKY-NEXT: .p2align 2 1286; CSKY-NEXT: .LCPI46_0: 1287; CSKY-NEXT: .long __atomic_compare_exchange_1 1288; 1289 %1 = atomicrmw umax i8* %a, i8 %b acquire 1290 ret i8 %1 1291} 1292 1293define i8 @atomicrmw_umax_i8_release(i8 *%a, i8 %b) nounwind { 1294; CSKY-LABEL: atomicrmw_umax_i8_release: 1295; CSKY: # %bb.0: 1296; CSKY-NEXT: subi16 sp, sp, 20 1297; CSKY-NEXT: st16.w l3, (sp, 16) 1298; CSKY-NEXT: st16.w l2, (sp, 12) 1299; CSKY-NEXT: st16.w l1, (sp, 8) 1300; CSKY-NEXT: st16.w l0, (sp, 4) 1301; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 1302; CSKY-NEXT: subi16 sp, sp, 8 1303; CSKY-NEXT: mov16 l0, a1 1304; CSKY-NEXT: mov16 l1, a0 1305; CSKY-NEXT: ld16.b a0, (a0, 0) 1306; CSKY-NEXT: zextb16 l2, a1 1307; CSKY-NEXT: movi16 l3, 0 1308; CSKY-NEXT: .LBB47_1: # %atomicrmw.start 1309; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 1310; CSKY-NEXT: zextb16 a1, a0 1311; CSKY-NEXT: cmphs16 l2, a1 1312; CSKY-NEXT: mov16 a2, l0 1313; CSKY-NEXT: movf32 a2, a0 1314; CSKY-NEXT: st32.b a0, (sp, 7) 1315; CSKY-NEXT: st16.w l3, (sp, 0) 1316; CSKY-NEXT: mov16 a0, l1 1317; CSKY-NEXT: addi32 a1, sp, 7 1318; CSKY-NEXT: movi16 a3, 3 1319; CSKY-NEXT: jsri32 [.LCPI47_0] 1320; CSKY-NEXT: mov16 a1, a0 1321; CSKY-NEXT: ld32.b a0, (sp, 7) 1322; CSKY-NEXT: bez32 a1, .LBB47_1 1323; CSKY-NEXT: # %bb.2: # %atomicrmw.end 1324; CSKY-NEXT: addi16 sp, sp, 8 1325; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 1326; CSKY-NEXT: ld16.w l0, (sp, 4) 1327; CSKY-NEXT: ld16.w l1, (sp, 8) 1328; CSKY-NEXT: ld16.w l2, (sp, 12) 1329; CSKY-NEXT: ld16.w l3, (sp, 16) 1330; CSKY-NEXT: addi16 sp, sp, 20 1331; CSKY-NEXT: rts16 1332; CSKY-NEXT: .p2align 1 1333; CSKY-NEXT: # %bb.3: 1334; CSKY-NEXT: .p2align 2 1335; CSKY-NEXT: .LCPI47_0: 1336; CSKY-NEXT: .long __atomic_compare_exchange_1 1337; 1338 %1 = atomicrmw umax i8* %a, i8 %b release 1339 ret i8 %1 1340} 1341 1342define i8 @atomicrmw_umax_i8_acq_rel(i8 *%a, i8 %b) nounwind { 1343; CSKY-LABEL: atomicrmw_umax_i8_acq_rel: 1344; CSKY: # %bb.0: 1345; CSKY-NEXT: subi16 sp, sp, 20 1346; CSKY-NEXT: st16.w l3, (sp, 16) 1347; CSKY-NEXT: st16.w l2, (sp, 12) 1348; CSKY-NEXT: st16.w l1, (sp, 8) 1349; CSKY-NEXT: st16.w l0, (sp, 4) 1350; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 1351; CSKY-NEXT: subi16 sp, sp, 8 1352; CSKY-NEXT: mov16 l0, a1 1353; CSKY-NEXT: mov16 l1, a0 1354; CSKY-NEXT: ld16.b a0, (a0, 0) 1355; CSKY-NEXT: zextb16 l2, a1 1356; CSKY-NEXT: movi16 l3, 2 1357; CSKY-NEXT: .LBB48_1: # %atomicrmw.start 1358; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 1359; CSKY-NEXT: zextb16 a1, a0 1360; CSKY-NEXT: cmphs16 l2, a1 1361; CSKY-NEXT: mov16 a2, l0 1362; CSKY-NEXT: movf32 a2, a0 1363; CSKY-NEXT: st32.b a0, (sp, 7) 1364; CSKY-NEXT: st16.w l3, (sp, 0) 1365; CSKY-NEXT: mov16 a0, l1 1366; CSKY-NEXT: addi32 a1, sp, 7 1367; CSKY-NEXT: movi16 a3, 4 1368; CSKY-NEXT: jsri32 [.LCPI48_0] 1369; CSKY-NEXT: mov16 a1, a0 1370; CSKY-NEXT: ld32.b a0, (sp, 7) 1371; CSKY-NEXT: bez32 a1, .LBB48_1 1372; CSKY-NEXT: # %bb.2: # %atomicrmw.end 1373; CSKY-NEXT: addi16 sp, sp, 8 1374; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 1375; CSKY-NEXT: ld16.w l0, (sp, 4) 1376; CSKY-NEXT: ld16.w l1, (sp, 8) 1377; CSKY-NEXT: ld16.w l2, (sp, 12) 1378; CSKY-NEXT: ld16.w l3, (sp, 16) 1379; CSKY-NEXT: addi16 sp, sp, 20 1380; CSKY-NEXT: rts16 1381; CSKY-NEXT: .p2align 1 1382; CSKY-NEXT: # %bb.3: 1383; CSKY-NEXT: .p2align 2 1384; CSKY-NEXT: .LCPI48_0: 1385; CSKY-NEXT: .long __atomic_compare_exchange_1 1386; 1387 %1 = atomicrmw umax i8* %a, i8 %b acq_rel 1388 ret i8 %1 1389} 1390 1391define i8 @atomicrmw_umax_i8_seq_cst(i8 *%a, i8 %b) nounwind { 1392; CSKY-LABEL: atomicrmw_umax_i8_seq_cst: 1393; CSKY: # %bb.0: 1394; CSKY-NEXT: subi16 sp, sp, 20 1395; CSKY-NEXT: st16.w l3, (sp, 16) 1396; CSKY-NEXT: st16.w l2, (sp, 12) 1397; CSKY-NEXT: st16.w l1, (sp, 8) 1398; CSKY-NEXT: st16.w l0, (sp, 4) 1399; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 1400; CSKY-NEXT: subi16 sp, sp, 8 1401; CSKY-NEXT: mov16 l0, a1 1402; CSKY-NEXT: mov16 l1, a0 1403; CSKY-NEXT: ld16.b a0, (a0, 0) 1404; CSKY-NEXT: zextb16 l2, a1 1405; CSKY-NEXT: movi16 l3, 5 1406; CSKY-NEXT: .LBB49_1: # %atomicrmw.start 1407; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 1408; CSKY-NEXT: zextb16 a1, a0 1409; CSKY-NEXT: cmphs16 l2, a1 1410; CSKY-NEXT: mov16 a2, l0 1411; CSKY-NEXT: movf32 a2, a0 1412; CSKY-NEXT: st32.b a0, (sp, 7) 1413; CSKY-NEXT: st16.w l3, (sp, 0) 1414; CSKY-NEXT: mov16 a0, l1 1415; CSKY-NEXT: addi32 a1, sp, 7 1416; CSKY-NEXT: movi16 a3, 5 1417; CSKY-NEXT: jsri32 [.LCPI49_0] 1418; CSKY-NEXT: mov16 a1, a0 1419; CSKY-NEXT: ld32.b a0, (sp, 7) 1420; CSKY-NEXT: bez32 a1, .LBB49_1 1421; CSKY-NEXT: # %bb.2: # %atomicrmw.end 1422; CSKY-NEXT: addi16 sp, sp, 8 1423; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 1424; CSKY-NEXT: ld16.w l0, (sp, 4) 1425; CSKY-NEXT: ld16.w l1, (sp, 8) 1426; CSKY-NEXT: ld16.w l2, (sp, 12) 1427; CSKY-NEXT: ld16.w l3, (sp, 16) 1428; CSKY-NEXT: addi16 sp, sp, 20 1429; CSKY-NEXT: rts16 1430; CSKY-NEXT: .p2align 1 1431; CSKY-NEXT: # %bb.3: 1432; CSKY-NEXT: .p2align 2 1433; CSKY-NEXT: .LCPI49_0: 1434; CSKY-NEXT: .long __atomic_compare_exchange_1 1435; 1436 %1 = atomicrmw umax i8* %a, i8 %b seq_cst 1437 ret i8 %1 1438} 1439 1440define i8 @atomicrmw_umin_i8_monotonic(i8 *%a, i8 %b) nounwind { 1441; CSKY-LABEL: atomicrmw_umin_i8_monotonic: 1442; CSKY: # %bb.0: 1443; CSKY-NEXT: subi16 sp, sp, 20 1444; CSKY-NEXT: st16.w l3, (sp, 16) 1445; CSKY-NEXT: st16.w l2, (sp, 12) 1446; CSKY-NEXT: st16.w l1, (sp, 8) 1447; CSKY-NEXT: st16.w l0, (sp, 4) 1448; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 1449; CSKY-NEXT: subi16 sp, sp, 8 1450; CSKY-NEXT: mov16 l0, a1 1451; CSKY-NEXT: mov16 l1, a0 1452; CSKY-NEXT: ld16.b a0, (a0, 0) 1453; CSKY-NEXT: zextb16 l2, a1 1454; CSKY-NEXT: movi16 l3, 0 1455; CSKY-NEXT: .LBB50_1: # %atomicrmw.start 1456; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 1457; CSKY-NEXT: zextb16 a1, a0 1458; CSKY-NEXT: cmphs16 l2, a1 1459; CSKY-NEXT: mov16 a2, l0 1460; CSKY-NEXT: movt32 a2, a0 1461; CSKY-NEXT: st32.b a0, (sp, 7) 1462; CSKY-NEXT: st16.w l3, (sp, 0) 1463; CSKY-NEXT: mov16 a0, l1 1464; CSKY-NEXT: addi32 a1, sp, 7 1465; CSKY-NEXT: movi16 a3, 0 1466; CSKY-NEXT: jsri32 [.LCPI50_0] 1467; CSKY-NEXT: mov16 a1, a0 1468; CSKY-NEXT: ld32.b a0, (sp, 7) 1469; CSKY-NEXT: bez32 a1, .LBB50_1 1470; CSKY-NEXT: # %bb.2: # %atomicrmw.end 1471; CSKY-NEXT: addi16 sp, sp, 8 1472; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 1473; CSKY-NEXT: ld16.w l0, (sp, 4) 1474; CSKY-NEXT: ld16.w l1, (sp, 8) 1475; CSKY-NEXT: ld16.w l2, (sp, 12) 1476; CSKY-NEXT: ld16.w l3, (sp, 16) 1477; CSKY-NEXT: addi16 sp, sp, 20 1478; CSKY-NEXT: rts16 1479; CSKY-NEXT: .p2align 1 1480; CSKY-NEXT: # %bb.3: 1481; CSKY-NEXT: .p2align 2 1482; CSKY-NEXT: .LCPI50_0: 1483; CSKY-NEXT: .long __atomic_compare_exchange_1 1484; 1485 %1 = atomicrmw umin i8* %a, i8 %b monotonic 1486 ret i8 %1 1487} 1488 1489define i8 @atomicrmw_umin_i8_acquire(i8 *%a, i8 %b) nounwind { 1490; CSKY-LABEL: atomicrmw_umin_i8_acquire: 1491; CSKY: # %bb.0: 1492; CSKY-NEXT: subi16 sp, sp, 20 1493; CSKY-NEXT: st16.w l3, (sp, 16) 1494; CSKY-NEXT: st16.w l2, (sp, 12) 1495; CSKY-NEXT: st16.w l1, (sp, 8) 1496; CSKY-NEXT: st16.w l0, (sp, 4) 1497; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 1498; CSKY-NEXT: subi16 sp, sp, 8 1499; CSKY-NEXT: mov16 l0, a1 1500; CSKY-NEXT: mov16 l1, a0 1501; CSKY-NEXT: ld16.b a0, (a0, 0) 1502; CSKY-NEXT: zextb16 l2, a1 1503; CSKY-NEXT: movi16 l3, 2 1504; CSKY-NEXT: .LBB51_1: # %atomicrmw.start 1505; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 1506; CSKY-NEXT: zextb16 a1, a0 1507; CSKY-NEXT: cmphs16 l2, a1 1508; CSKY-NEXT: mov16 a2, l0 1509; CSKY-NEXT: movt32 a2, a0 1510; CSKY-NEXT: st32.b a0, (sp, 7) 1511; CSKY-NEXT: st16.w l3, (sp, 0) 1512; CSKY-NEXT: mov16 a0, l1 1513; CSKY-NEXT: addi32 a1, sp, 7 1514; CSKY-NEXT: movi16 a3, 2 1515; CSKY-NEXT: jsri32 [.LCPI51_0] 1516; CSKY-NEXT: mov16 a1, a0 1517; CSKY-NEXT: ld32.b a0, (sp, 7) 1518; CSKY-NEXT: bez32 a1, .LBB51_1 1519; CSKY-NEXT: # %bb.2: # %atomicrmw.end 1520; CSKY-NEXT: addi16 sp, sp, 8 1521; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 1522; CSKY-NEXT: ld16.w l0, (sp, 4) 1523; CSKY-NEXT: ld16.w l1, (sp, 8) 1524; CSKY-NEXT: ld16.w l2, (sp, 12) 1525; CSKY-NEXT: ld16.w l3, (sp, 16) 1526; CSKY-NEXT: addi16 sp, sp, 20 1527; CSKY-NEXT: rts16 1528; CSKY-NEXT: .p2align 1 1529; CSKY-NEXT: # %bb.3: 1530; CSKY-NEXT: .p2align 2 1531; CSKY-NEXT: .LCPI51_0: 1532; CSKY-NEXT: .long __atomic_compare_exchange_1 1533; 1534 %1 = atomicrmw umin i8* %a, i8 %b acquire 1535 ret i8 %1 1536} 1537 1538define i8 @atomicrmw_umin_i8_release(i8 *%a, i8 %b) nounwind { 1539; CSKY-LABEL: atomicrmw_umin_i8_release: 1540; CSKY: # %bb.0: 1541; CSKY-NEXT: subi16 sp, sp, 20 1542; CSKY-NEXT: st16.w l3, (sp, 16) 1543; CSKY-NEXT: st16.w l2, (sp, 12) 1544; CSKY-NEXT: st16.w l1, (sp, 8) 1545; CSKY-NEXT: st16.w l0, (sp, 4) 1546; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 1547; CSKY-NEXT: subi16 sp, sp, 8 1548; CSKY-NEXT: mov16 l0, a1 1549; CSKY-NEXT: mov16 l1, a0 1550; CSKY-NEXT: ld16.b a0, (a0, 0) 1551; CSKY-NEXT: zextb16 l2, a1 1552; CSKY-NEXT: movi16 l3, 0 1553; CSKY-NEXT: .LBB52_1: # %atomicrmw.start 1554; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 1555; CSKY-NEXT: zextb16 a1, a0 1556; CSKY-NEXT: cmphs16 l2, a1 1557; CSKY-NEXT: mov16 a2, l0 1558; CSKY-NEXT: movt32 a2, a0 1559; CSKY-NEXT: st32.b a0, (sp, 7) 1560; CSKY-NEXT: st16.w l3, (sp, 0) 1561; CSKY-NEXT: mov16 a0, l1 1562; CSKY-NEXT: addi32 a1, sp, 7 1563; CSKY-NEXT: movi16 a3, 3 1564; CSKY-NEXT: jsri32 [.LCPI52_0] 1565; CSKY-NEXT: mov16 a1, a0 1566; CSKY-NEXT: ld32.b a0, (sp, 7) 1567; CSKY-NEXT: bez32 a1, .LBB52_1 1568; CSKY-NEXT: # %bb.2: # %atomicrmw.end 1569; CSKY-NEXT: addi16 sp, sp, 8 1570; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 1571; CSKY-NEXT: ld16.w l0, (sp, 4) 1572; CSKY-NEXT: ld16.w l1, (sp, 8) 1573; CSKY-NEXT: ld16.w l2, (sp, 12) 1574; CSKY-NEXT: ld16.w l3, (sp, 16) 1575; CSKY-NEXT: addi16 sp, sp, 20 1576; CSKY-NEXT: rts16 1577; CSKY-NEXT: .p2align 1 1578; CSKY-NEXT: # %bb.3: 1579; CSKY-NEXT: .p2align 2 1580; CSKY-NEXT: .LCPI52_0: 1581; CSKY-NEXT: .long __atomic_compare_exchange_1 1582; 1583 %1 = atomicrmw umin i8* %a, i8 %b release 1584 ret i8 %1 1585} 1586 1587define i8 @atomicrmw_umin_i8_acq_rel(i8 *%a, i8 %b) nounwind { 1588; CSKY-LABEL: atomicrmw_umin_i8_acq_rel: 1589; CSKY: # %bb.0: 1590; CSKY-NEXT: subi16 sp, sp, 20 1591; CSKY-NEXT: st16.w l3, (sp, 16) 1592; CSKY-NEXT: st16.w l2, (sp, 12) 1593; CSKY-NEXT: st16.w l1, (sp, 8) 1594; CSKY-NEXT: st16.w l0, (sp, 4) 1595; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 1596; CSKY-NEXT: subi16 sp, sp, 8 1597; CSKY-NEXT: mov16 l0, a1 1598; CSKY-NEXT: mov16 l1, a0 1599; CSKY-NEXT: ld16.b a0, (a0, 0) 1600; CSKY-NEXT: zextb16 l2, a1 1601; CSKY-NEXT: movi16 l3, 2 1602; CSKY-NEXT: .LBB53_1: # %atomicrmw.start 1603; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 1604; CSKY-NEXT: zextb16 a1, a0 1605; CSKY-NEXT: cmphs16 l2, a1 1606; CSKY-NEXT: mov16 a2, l0 1607; CSKY-NEXT: movt32 a2, a0 1608; CSKY-NEXT: st32.b a0, (sp, 7) 1609; CSKY-NEXT: st16.w l3, (sp, 0) 1610; CSKY-NEXT: mov16 a0, l1 1611; CSKY-NEXT: addi32 a1, sp, 7 1612; CSKY-NEXT: movi16 a3, 4 1613; CSKY-NEXT: jsri32 [.LCPI53_0] 1614; CSKY-NEXT: mov16 a1, a0 1615; CSKY-NEXT: ld32.b a0, (sp, 7) 1616; CSKY-NEXT: bez32 a1, .LBB53_1 1617; CSKY-NEXT: # %bb.2: # %atomicrmw.end 1618; CSKY-NEXT: addi16 sp, sp, 8 1619; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 1620; CSKY-NEXT: ld16.w l0, (sp, 4) 1621; CSKY-NEXT: ld16.w l1, (sp, 8) 1622; CSKY-NEXT: ld16.w l2, (sp, 12) 1623; CSKY-NEXT: ld16.w l3, (sp, 16) 1624; CSKY-NEXT: addi16 sp, sp, 20 1625; CSKY-NEXT: rts16 1626; CSKY-NEXT: .p2align 1 1627; CSKY-NEXT: # %bb.3: 1628; CSKY-NEXT: .p2align 2 1629; CSKY-NEXT: .LCPI53_0: 1630; CSKY-NEXT: .long __atomic_compare_exchange_1 1631; 1632 %1 = atomicrmw umin i8* %a, i8 %b acq_rel 1633 ret i8 %1 1634} 1635 1636define i8 @atomicrmw_umin_i8_seq_cst(i8 *%a, i8 %b) nounwind { 1637; CSKY-LABEL: atomicrmw_umin_i8_seq_cst: 1638; CSKY: # %bb.0: 1639; CSKY-NEXT: subi16 sp, sp, 20 1640; CSKY-NEXT: st16.w l3, (sp, 16) 1641; CSKY-NEXT: st16.w l2, (sp, 12) 1642; CSKY-NEXT: st16.w l1, (sp, 8) 1643; CSKY-NEXT: st16.w l0, (sp, 4) 1644; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 1645; CSKY-NEXT: subi16 sp, sp, 8 1646; CSKY-NEXT: mov16 l0, a1 1647; CSKY-NEXT: mov16 l1, a0 1648; CSKY-NEXT: ld16.b a0, (a0, 0) 1649; CSKY-NEXT: zextb16 l2, a1 1650; CSKY-NEXT: movi16 l3, 5 1651; CSKY-NEXT: .LBB54_1: # %atomicrmw.start 1652; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 1653; CSKY-NEXT: zextb16 a1, a0 1654; CSKY-NEXT: cmphs16 l2, a1 1655; CSKY-NEXT: mov16 a2, l0 1656; CSKY-NEXT: movt32 a2, a0 1657; CSKY-NEXT: st32.b a0, (sp, 7) 1658; CSKY-NEXT: st16.w l3, (sp, 0) 1659; CSKY-NEXT: mov16 a0, l1 1660; CSKY-NEXT: addi32 a1, sp, 7 1661; CSKY-NEXT: movi16 a3, 5 1662; CSKY-NEXT: jsri32 [.LCPI54_0] 1663; CSKY-NEXT: mov16 a1, a0 1664; CSKY-NEXT: ld32.b a0, (sp, 7) 1665; CSKY-NEXT: bez32 a1, .LBB54_1 1666; CSKY-NEXT: # %bb.2: # %atomicrmw.end 1667; CSKY-NEXT: addi16 sp, sp, 8 1668; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 1669; CSKY-NEXT: ld16.w l0, (sp, 4) 1670; CSKY-NEXT: ld16.w l1, (sp, 8) 1671; CSKY-NEXT: ld16.w l2, (sp, 12) 1672; CSKY-NEXT: ld16.w l3, (sp, 16) 1673; CSKY-NEXT: addi16 sp, sp, 20 1674; CSKY-NEXT: rts16 1675; CSKY-NEXT: .p2align 1 1676; CSKY-NEXT: # %bb.3: 1677; CSKY-NEXT: .p2align 2 1678; CSKY-NEXT: .LCPI54_0: 1679; CSKY-NEXT: .long __atomic_compare_exchange_1 1680; 1681 %1 = atomicrmw umin i8* %a, i8 %b seq_cst 1682 ret i8 %1 1683} 1684 1685define i16 @atomicrmw_xchg_i16_monotonic(i16* %a, i16 %b) nounwind { 1686; CSKY-LABEL: atomicrmw_xchg_i16_monotonic: 1687; CSKY: # %bb.0: 1688; CSKY-NEXT: subi16 sp, sp, 4 1689; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 1690; CSKY-NEXT: movi16 a2, 0 1691; CSKY-NEXT: jsri32 [.LCPI55_0] 1692; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 1693; CSKY-NEXT: addi16 sp, sp, 4 1694; CSKY-NEXT: rts16 1695; CSKY-NEXT: .p2align 1 1696; CSKY-NEXT: # %bb.1: 1697; CSKY-NEXT: .p2align 2 1698; CSKY-NEXT: .LCPI55_0: 1699; CSKY-NEXT: .long __atomic_exchange_2 1700; 1701 %1 = atomicrmw xchg i16* %a, i16 %b monotonic 1702 ret i16 %1 1703} 1704 1705define i16 @atomicrmw_xchg_i16_acquire(i16* %a, i16 %b) nounwind { 1706; CSKY-LABEL: atomicrmw_xchg_i16_acquire: 1707; CSKY: # %bb.0: 1708; CSKY-NEXT: subi16 sp, sp, 4 1709; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 1710; CSKY-NEXT: movi16 a2, 2 1711; CSKY-NEXT: jsri32 [.LCPI56_0] 1712; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 1713; CSKY-NEXT: addi16 sp, sp, 4 1714; CSKY-NEXT: rts16 1715; CSKY-NEXT: .p2align 1 1716; CSKY-NEXT: # %bb.1: 1717; CSKY-NEXT: .p2align 2 1718; CSKY-NEXT: .LCPI56_0: 1719; CSKY-NEXT: .long __atomic_exchange_2 1720; 1721 %1 = atomicrmw xchg i16* %a, i16 %b acquire 1722 ret i16 %1 1723} 1724 1725define i16 @atomicrmw_xchg_i16_release(i16* %a, i16 %b) nounwind { 1726; CSKY-LABEL: atomicrmw_xchg_i16_release: 1727; CSKY: # %bb.0: 1728; CSKY-NEXT: subi16 sp, sp, 4 1729; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 1730; CSKY-NEXT: movi16 a2, 3 1731; CSKY-NEXT: jsri32 [.LCPI57_0] 1732; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 1733; CSKY-NEXT: addi16 sp, sp, 4 1734; CSKY-NEXT: rts16 1735; CSKY-NEXT: .p2align 1 1736; CSKY-NEXT: # %bb.1: 1737; CSKY-NEXT: .p2align 2 1738; CSKY-NEXT: .LCPI57_0: 1739; CSKY-NEXT: .long __atomic_exchange_2 1740; 1741 %1 = atomicrmw xchg i16* %a, i16 %b release 1742 ret i16 %1 1743} 1744 1745define i16 @atomicrmw_xchg_i16_acq_rel(i16* %a, i16 %b) nounwind { 1746; CSKY-LABEL: atomicrmw_xchg_i16_acq_rel: 1747; CSKY: # %bb.0: 1748; CSKY-NEXT: subi16 sp, sp, 4 1749; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 1750; CSKY-NEXT: movi16 a2, 4 1751; CSKY-NEXT: jsri32 [.LCPI58_0] 1752; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 1753; CSKY-NEXT: addi16 sp, sp, 4 1754; CSKY-NEXT: rts16 1755; CSKY-NEXT: .p2align 1 1756; CSKY-NEXT: # %bb.1: 1757; CSKY-NEXT: .p2align 2 1758; CSKY-NEXT: .LCPI58_0: 1759; CSKY-NEXT: .long __atomic_exchange_2 1760; 1761 %1 = atomicrmw xchg i16* %a, i16 %b acq_rel 1762 ret i16 %1 1763} 1764 1765define i16 @atomicrmw_xchg_i16_seq_cst(i16* %a, i16 %b) nounwind { 1766; CSKY-LABEL: atomicrmw_xchg_i16_seq_cst: 1767; CSKY: # %bb.0: 1768; CSKY-NEXT: subi16 sp, sp, 4 1769; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 1770; CSKY-NEXT: movi16 a2, 5 1771; CSKY-NEXT: jsri32 [.LCPI59_0] 1772; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 1773; CSKY-NEXT: addi16 sp, sp, 4 1774; CSKY-NEXT: rts16 1775; CSKY-NEXT: .p2align 1 1776; CSKY-NEXT: # %bb.1: 1777; CSKY-NEXT: .p2align 2 1778; CSKY-NEXT: .LCPI59_0: 1779; CSKY-NEXT: .long __atomic_exchange_2 1780; 1781 %1 = atomicrmw xchg i16* %a, i16 %b seq_cst 1782 ret i16 %1 1783} 1784 1785define i16 @atomicrmw_add_i16_monotonic(i16 *%a, i16 %b) nounwind { 1786; CSKY-LABEL: atomicrmw_add_i16_monotonic: 1787; CSKY: # %bb.0: 1788; CSKY-NEXT: subi16 sp, sp, 4 1789; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 1790; CSKY-NEXT: movi16 a2, 0 1791; CSKY-NEXT: jsri32 [.LCPI60_0] 1792; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 1793; CSKY-NEXT: addi16 sp, sp, 4 1794; CSKY-NEXT: rts16 1795; CSKY-NEXT: .p2align 1 1796; CSKY-NEXT: # %bb.1: 1797; CSKY-NEXT: .p2align 2 1798; CSKY-NEXT: .LCPI60_0: 1799; CSKY-NEXT: .long __atomic_fetch_add_2 1800; 1801 %1 = atomicrmw add i16* %a, i16 %b monotonic 1802 ret i16 %1 1803} 1804 1805define i16 @atomicrmw_add_i16_acquire(i16 *%a, i16 %b) nounwind { 1806; CSKY-LABEL: atomicrmw_add_i16_acquire: 1807; CSKY: # %bb.0: 1808; CSKY-NEXT: subi16 sp, sp, 4 1809; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 1810; CSKY-NEXT: movi16 a2, 2 1811; CSKY-NEXT: jsri32 [.LCPI61_0] 1812; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 1813; CSKY-NEXT: addi16 sp, sp, 4 1814; CSKY-NEXT: rts16 1815; CSKY-NEXT: .p2align 1 1816; CSKY-NEXT: # %bb.1: 1817; CSKY-NEXT: .p2align 2 1818; CSKY-NEXT: .LCPI61_0: 1819; CSKY-NEXT: .long __atomic_fetch_add_2 1820; 1821 %1 = atomicrmw add i16* %a, i16 %b acquire 1822 ret i16 %1 1823} 1824 1825define i16 @atomicrmw_add_i16_release(i16 *%a, i16 %b) nounwind { 1826; CSKY-LABEL: atomicrmw_add_i16_release: 1827; CSKY: # %bb.0: 1828; CSKY-NEXT: subi16 sp, sp, 4 1829; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 1830; CSKY-NEXT: movi16 a2, 3 1831; CSKY-NEXT: jsri32 [.LCPI62_0] 1832; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 1833; CSKY-NEXT: addi16 sp, sp, 4 1834; CSKY-NEXT: rts16 1835; CSKY-NEXT: .p2align 1 1836; CSKY-NEXT: # %bb.1: 1837; CSKY-NEXT: .p2align 2 1838; CSKY-NEXT: .LCPI62_0: 1839; CSKY-NEXT: .long __atomic_fetch_add_2 1840; 1841 %1 = atomicrmw add i16* %a, i16 %b release 1842 ret i16 %1 1843} 1844 1845define i16 @atomicrmw_add_i16_acq_rel(i16 *%a, i16 %b) nounwind { 1846; CSKY-LABEL: atomicrmw_add_i16_acq_rel: 1847; CSKY: # %bb.0: 1848; CSKY-NEXT: subi16 sp, sp, 4 1849; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 1850; CSKY-NEXT: movi16 a2, 4 1851; CSKY-NEXT: jsri32 [.LCPI63_0] 1852; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 1853; CSKY-NEXT: addi16 sp, sp, 4 1854; CSKY-NEXT: rts16 1855; CSKY-NEXT: .p2align 1 1856; CSKY-NEXT: # %bb.1: 1857; CSKY-NEXT: .p2align 2 1858; CSKY-NEXT: .LCPI63_0: 1859; CSKY-NEXT: .long __atomic_fetch_add_2 1860; 1861 %1 = atomicrmw add i16* %a, i16 %b acq_rel 1862 ret i16 %1 1863} 1864 1865define i16 @atomicrmw_add_i16_seq_cst(i16 *%a, i16 %b) nounwind { 1866; CSKY-LABEL: atomicrmw_add_i16_seq_cst: 1867; CSKY: # %bb.0: 1868; CSKY-NEXT: subi16 sp, sp, 4 1869; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 1870; CSKY-NEXT: movi16 a2, 5 1871; CSKY-NEXT: jsri32 [.LCPI64_0] 1872; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 1873; CSKY-NEXT: addi16 sp, sp, 4 1874; CSKY-NEXT: rts16 1875; CSKY-NEXT: .p2align 1 1876; CSKY-NEXT: # %bb.1: 1877; CSKY-NEXT: .p2align 2 1878; CSKY-NEXT: .LCPI64_0: 1879; CSKY-NEXT: .long __atomic_fetch_add_2 1880; 1881 %1 = atomicrmw add i16* %a, i16 %b seq_cst 1882 ret i16 %1 1883} 1884 1885define i16 @atomicrmw_sub_i16_monotonic(i16* %a, i16 %b) nounwind { 1886; CSKY-LABEL: atomicrmw_sub_i16_monotonic: 1887; CSKY: # %bb.0: 1888; CSKY-NEXT: subi16 sp, sp, 4 1889; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 1890; CSKY-NEXT: movi16 a2, 0 1891; CSKY-NEXT: jsri32 [.LCPI65_0] 1892; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 1893; CSKY-NEXT: addi16 sp, sp, 4 1894; CSKY-NEXT: rts16 1895; CSKY-NEXT: .p2align 1 1896; CSKY-NEXT: # %bb.1: 1897; CSKY-NEXT: .p2align 2 1898; CSKY-NEXT: .LCPI65_0: 1899; CSKY-NEXT: .long __atomic_fetch_sub_2 1900; 1901 %1 = atomicrmw sub i16* %a, i16 %b monotonic 1902 ret i16 %1 1903} 1904 1905define i16 @atomicrmw_sub_i16_acquire(i16* %a, i16 %b) nounwind { 1906; CSKY-LABEL: atomicrmw_sub_i16_acquire: 1907; CSKY: # %bb.0: 1908; CSKY-NEXT: subi16 sp, sp, 4 1909; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 1910; CSKY-NEXT: movi16 a2, 2 1911; CSKY-NEXT: jsri32 [.LCPI66_0] 1912; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 1913; CSKY-NEXT: addi16 sp, sp, 4 1914; CSKY-NEXT: rts16 1915; CSKY-NEXT: .p2align 1 1916; CSKY-NEXT: # %bb.1: 1917; CSKY-NEXT: .p2align 2 1918; CSKY-NEXT: .LCPI66_0: 1919; CSKY-NEXT: .long __atomic_fetch_sub_2 1920; 1921 %1 = atomicrmw sub i16* %a, i16 %b acquire 1922 ret i16 %1 1923} 1924 1925define i16 @atomicrmw_sub_i16_release(i16* %a, i16 %b) nounwind { 1926; CSKY-LABEL: atomicrmw_sub_i16_release: 1927; CSKY: # %bb.0: 1928; CSKY-NEXT: subi16 sp, sp, 4 1929; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 1930; CSKY-NEXT: movi16 a2, 3 1931; CSKY-NEXT: jsri32 [.LCPI67_0] 1932; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 1933; CSKY-NEXT: addi16 sp, sp, 4 1934; CSKY-NEXT: rts16 1935; CSKY-NEXT: .p2align 1 1936; CSKY-NEXT: # %bb.1: 1937; CSKY-NEXT: .p2align 2 1938; CSKY-NEXT: .LCPI67_0: 1939; CSKY-NEXT: .long __atomic_fetch_sub_2 1940; 1941 %1 = atomicrmw sub i16* %a, i16 %b release 1942 ret i16 %1 1943} 1944 1945define i16 @atomicrmw_sub_i16_acq_rel(i16* %a, i16 %b) nounwind { 1946; CSKY-LABEL: atomicrmw_sub_i16_acq_rel: 1947; CSKY: # %bb.0: 1948; CSKY-NEXT: subi16 sp, sp, 4 1949; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 1950; CSKY-NEXT: movi16 a2, 4 1951; CSKY-NEXT: jsri32 [.LCPI68_0] 1952; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 1953; CSKY-NEXT: addi16 sp, sp, 4 1954; CSKY-NEXT: rts16 1955; CSKY-NEXT: .p2align 1 1956; CSKY-NEXT: # %bb.1: 1957; CSKY-NEXT: .p2align 2 1958; CSKY-NEXT: .LCPI68_0: 1959; CSKY-NEXT: .long __atomic_fetch_sub_2 1960; 1961 %1 = atomicrmw sub i16* %a, i16 %b acq_rel 1962 ret i16 %1 1963} 1964 1965define i16 @atomicrmw_sub_i16_seq_cst(i16* %a, i16 %b) nounwind { 1966; CSKY-LABEL: atomicrmw_sub_i16_seq_cst: 1967; CSKY: # %bb.0: 1968; CSKY-NEXT: subi16 sp, sp, 4 1969; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 1970; CSKY-NEXT: movi16 a2, 5 1971; CSKY-NEXT: jsri32 [.LCPI69_0] 1972; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 1973; CSKY-NEXT: addi16 sp, sp, 4 1974; CSKY-NEXT: rts16 1975; CSKY-NEXT: .p2align 1 1976; CSKY-NEXT: # %bb.1: 1977; CSKY-NEXT: .p2align 2 1978; CSKY-NEXT: .LCPI69_0: 1979; CSKY-NEXT: .long __atomic_fetch_sub_2 1980; 1981 %1 = atomicrmw sub i16* %a, i16 %b seq_cst 1982 ret i16 %1 1983} 1984 1985define i16 @atomicrmw_and_i16_monotonic(i16 *%a, i16 %b) nounwind { 1986; CSKY-LABEL: atomicrmw_and_i16_monotonic: 1987; CSKY: # %bb.0: 1988; CSKY-NEXT: subi16 sp, sp, 4 1989; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 1990; CSKY-NEXT: movi16 a2, 0 1991; CSKY-NEXT: jsri32 [.LCPI70_0] 1992; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 1993; CSKY-NEXT: addi16 sp, sp, 4 1994; CSKY-NEXT: rts16 1995; CSKY-NEXT: .p2align 1 1996; CSKY-NEXT: # %bb.1: 1997; CSKY-NEXT: .p2align 2 1998; CSKY-NEXT: .LCPI70_0: 1999; CSKY-NEXT: .long __atomic_fetch_and_2 2000; 2001 %1 = atomicrmw and i16* %a, i16 %b monotonic 2002 ret i16 %1 2003} 2004 2005define i16 @atomicrmw_and_i16_acquire(i16 *%a, i16 %b) nounwind { 2006; CSKY-LABEL: atomicrmw_and_i16_acquire: 2007; CSKY: # %bb.0: 2008; CSKY-NEXT: subi16 sp, sp, 4 2009; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 2010; CSKY-NEXT: movi16 a2, 2 2011; CSKY-NEXT: jsri32 [.LCPI71_0] 2012; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 2013; CSKY-NEXT: addi16 sp, sp, 4 2014; CSKY-NEXT: rts16 2015; CSKY-NEXT: .p2align 1 2016; CSKY-NEXT: # %bb.1: 2017; CSKY-NEXT: .p2align 2 2018; CSKY-NEXT: .LCPI71_0: 2019; CSKY-NEXT: .long __atomic_fetch_and_2 2020; 2021 %1 = atomicrmw and i16* %a, i16 %b acquire 2022 ret i16 %1 2023} 2024 2025define i16 @atomicrmw_and_i16_release(i16 *%a, i16 %b) nounwind { 2026; CSKY-LABEL: atomicrmw_and_i16_release: 2027; CSKY: # %bb.0: 2028; CSKY-NEXT: subi16 sp, sp, 4 2029; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 2030; CSKY-NEXT: movi16 a2, 3 2031; CSKY-NEXT: jsri32 [.LCPI72_0] 2032; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 2033; CSKY-NEXT: addi16 sp, sp, 4 2034; CSKY-NEXT: rts16 2035; CSKY-NEXT: .p2align 1 2036; CSKY-NEXT: # %bb.1: 2037; CSKY-NEXT: .p2align 2 2038; CSKY-NEXT: .LCPI72_0: 2039; CSKY-NEXT: .long __atomic_fetch_and_2 2040; 2041 %1 = atomicrmw and i16* %a, i16 %b release 2042 ret i16 %1 2043} 2044 2045define i16 @atomicrmw_and_i16_acq_rel(i16 *%a, i16 %b) nounwind { 2046; CSKY-LABEL: atomicrmw_and_i16_acq_rel: 2047; CSKY: # %bb.0: 2048; CSKY-NEXT: subi16 sp, sp, 4 2049; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 2050; CSKY-NEXT: movi16 a2, 4 2051; CSKY-NEXT: jsri32 [.LCPI73_0] 2052; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 2053; CSKY-NEXT: addi16 sp, sp, 4 2054; CSKY-NEXT: rts16 2055; CSKY-NEXT: .p2align 1 2056; CSKY-NEXT: # %bb.1: 2057; CSKY-NEXT: .p2align 2 2058; CSKY-NEXT: .LCPI73_0: 2059; CSKY-NEXT: .long __atomic_fetch_and_2 2060; 2061 %1 = atomicrmw and i16* %a, i16 %b acq_rel 2062 ret i16 %1 2063} 2064 2065define i16 @atomicrmw_and_i16_seq_cst(i16 *%a, i16 %b) nounwind { 2066; CSKY-LABEL: atomicrmw_and_i16_seq_cst: 2067; CSKY: # %bb.0: 2068; CSKY-NEXT: subi16 sp, sp, 4 2069; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 2070; CSKY-NEXT: movi16 a2, 5 2071; CSKY-NEXT: jsri32 [.LCPI74_0] 2072; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 2073; CSKY-NEXT: addi16 sp, sp, 4 2074; CSKY-NEXT: rts16 2075; CSKY-NEXT: .p2align 1 2076; CSKY-NEXT: # %bb.1: 2077; CSKY-NEXT: .p2align 2 2078; CSKY-NEXT: .LCPI74_0: 2079; CSKY-NEXT: .long __atomic_fetch_and_2 2080; 2081 %1 = atomicrmw and i16* %a, i16 %b seq_cst 2082 ret i16 %1 2083} 2084 2085define i16 @atomicrmw_nand_i16_monotonic(i16* %a, i16 %b) nounwind { 2086; CSKY-LABEL: atomicrmw_nand_i16_monotonic: 2087; CSKY: # %bb.0: 2088; CSKY-NEXT: subi16 sp, sp, 4 2089; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 2090; CSKY-NEXT: movi16 a2, 0 2091; CSKY-NEXT: jsri32 [.LCPI75_0] 2092; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 2093; CSKY-NEXT: addi16 sp, sp, 4 2094; CSKY-NEXT: rts16 2095; CSKY-NEXT: .p2align 1 2096; CSKY-NEXT: # %bb.1: 2097; CSKY-NEXT: .p2align 2 2098; CSKY-NEXT: .LCPI75_0: 2099; CSKY-NEXT: .long __atomic_fetch_nand_2 2100; 2101 %1 = atomicrmw nand i16* %a, i16 %b monotonic 2102 ret i16 %1 2103} 2104 2105define i16 @atomicrmw_nand_i16_acquire(i16* %a, i16 %b) nounwind { 2106; CSKY-LABEL: atomicrmw_nand_i16_acquire: 2107; CSKY: # %bb.0: 2108; CSKY-NEXT: subi16 sp, sp, 4 2109; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 2110; CSKY-NEXT: movi16 a2, 2 2111; CSKY-NEXT: jsri32 [.LCPI76_0] 2112; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 2113; CSKY-NEXT: addi16 sp, sp, 4 2114; CSKY-NEXT: rts16 2115; CSKY-NEXT: .p2align 1 2116; CSKY-NEXT: # %bb.1: 2117; CSKY-NEXT: .p2align 2 2118; CSKY-NEXT: .LCPI76_0: 2119; CSKY-NEXT: .long __atomic_fetch_nand_2 2120; 2121 %1 = atomicrmw nand i16* %a, i16 %b acquire 2122 ret i16 %1 2123} 2124 2125define i16 @atomicrmw_nand_i16_release(i16* %a, i16 %b) nounwind { 2126; CSKY-LABEL: atomicrmw_nand_i16_release: 2127; CSKY: # %bb.0: 2128; CSKY-NEXT: subi16 sp, sp, 4 2129; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 2130; CSKY-NEXT: movi16 a2, 3 2131; CSKY-NEXT: jsri32 [.LCPI77_0] 2132; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 2133; CSKY-NEXT: addi16 sp, sp, 4 2134; CSKY-NEXT: rts16 2135; CSKY-NEXT: .p2align 1 2136; CSKY-NEXT: # %bb.1: 2137; CSKY-NEXT: .p2align 2 2138; CSKY-NEXT: .LCPI77_0: 2139; CSKY-NEXT: .long __atomic_fetch_nand_2 2140; 2141 %1 = atomicrmw nand i16* %a, i16 %b release 2142 ret i16 %1 2143} 2144 2145define i16 @atomicrmw_nand_i16_acq_rel(i16* %a, i16 %b) nounwind { 2146; CSKY-LABEL: atomicrmw_nand_i16_acq_rel: 2147; CSKY: # %bb.0: 2148; CSKY-NEXT: subi16 sp, sp, 4 2149; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 2150; CSKY-NEXT: movi16 a2, 4 2151; CSKY-NEXT: jsri32 [.LCPI78_0] 2152; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 2153; CSKY-NEXT: addi16 sp, sp, 4 2154; CSKY-NEXT: rts16 2155; CSKY-NEXT: .p2align 1 2156; CSKY-NEXT: # %bb.1: 2157; CSKY-NEXT: .p2align 2 2158; CSKY-NEXT: .LCPI78_0: 2159; CSKY-NEXT: .long __atomic_fetch_nand_2 2160; 2161 %1 = atomicrmw nand i16* %a, i16 %b acq_rel 2162 ret i16 %1 2163} 2164 2165define i16 @atomicrmw_nand_i16_seq_cst(i16* %a, i16 %b) nounwind { 2166; CSKY-LABEL: atomicrmw_nand_i16_seq_cst: 2167; CSKY: # %bb.0: 2168; CSKY-NEXT: subi16 sp, sp, 4 2169; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 2170; CSKY-NEXT: movi16 a2, 5 2171; CSKY-NEXT: jsri32 [.LCPI79_0] 2172; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 2173; CSKY-NEXT: addi16 sp, sp, 4 2174; CSKY-NEXT: rts16 2175; CSKY-NEXT: .p2align 1 2176; CSKY-NEXT: # %bb.1: 2177; CSKY-NEXT: .p2align 2 2178; CSKY-NEXT: .LCPI79_0: 2179; CSKY-NEXT: .long __atomic_fetch_nand_2 2180; 2181 %1 = atomicrmw nand i16* %a, i16 %b seq_cst 2182 ret i16 %1 2183} 2184 2185define i16 @atomicrmw_or_i16_monotonic(i16 *%a, i16 %b) nounwind { 2186; CSKY-LABEL: atomicrmw_or_i16_monotonic: 2187; CSKY: # %bb.0: 2188; CSKY-NEXT: subi16 sp, sp, 4 2189; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 2190; CSKY-NEXT: movi16 a2, 0 2191; CSKY-NEXT: jsri32 [.LCPI80_0] 2192; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 2193; CSKY-NEXT: addi16 sp, sp, 4 2194; CSKY-NEXT: rts16 2195; CSKY-NEXT: .p2align 1 2196; CSKY-NEXT: # %bb.1: 2197; CSKY-NEXT: .p2align 2 2198; CSKY-NEXT: .LCPI80_0: 2199; CSKY-NEXT: .long __atomic_fetch_or_2 2200; 2201 %1 = atomicrmw or i16* %a, i16 %b monotonic 2202 ret i16 %1 2203} 2204 2205define i16 @atomicrmw_or_i16_acquire(i16 *%a, i16 %b) nounwind { 2206; CSKY-LABEL: atomicrmw_or_i16_acquire: 2207; CSKY: # %bb.0: 2208; CSKY-NEXT: subi16 sp, sp, 4 2209; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 2210; CSKY-NEXT: movi16 a2, 2 2211; CSKY-NEXT: jsri32 [.LCPI81_0] 2212; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 2213; CSKY-NEXT: addi16 sp, sp, 4 2214; CSKY-NEXT: rts16 2215; CSKY-NEXT: .p2align 1 2216; CSKY-NEXT: # %bb.1: 2217; CSKY-NEXT: .p2align 2 2218; CSKY-NEXT: .LCPI81_0: 2219; CSKY-NEXT: .long __atomic_fetch_or_2 2220; 2221 %1 = atomicrmw or i16* %a, i16 %b acquire 2222 ret i16 %1 2223} 2224 2225define i16 @atomicrmw_or_i16_release(i16 *%a, i16 %b) nounwind { 2226; CSKY-LABEL: atomicrmw_or_i16_release: 2227; CSKY: # %bb.0: 2228; CSKY-NEXT: subi16 sp, sp, 4 2229; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 2230; CSKY-NEXT: movi16 a2, 3 2231; CSKY-NEXT: jsri32 [.LCPI82_0] 2232; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 2233; CSKY-NEXT: addi16 sp, sp, 4 2234; CSKY-NEXT: rts16 2235; CSKY-NEXT: .p2align 1 2236; CSKY-NEXT: # %bb.1: 2237; CSKY-NEXT: .p2align 2 2238; CSKY-NEXT: .LCPI82_0: 2239; CSKY-NEXT: .long __atomic_fetch_or_2 2240; 2241 %1 = atomicrmw or i16* %a, i16 %b release 2242 ret i16 %1 2243} 2244 2245define i16 @atomicrmw_or_i16_acq_rel(i16 *%a, i16 %b) nounwind { 2246; CSKY-LABEL: atomicrmw_or_i16_acq_rel: 2247; CSKY: # %bb.0: 2248; CSKY-NEXT: subi16 sp, sp, 4 2249; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 2250; CSKY-NEXT: movi16 a2, 4 2251; CSKY-NEXT: jsri32 [.LCPI83_0] 2252; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 2253; CSKY-NEXT: addi16 sp, sp, 4 2254; CSKY-NEXT: rts16 2255; CSKY-NEXT: .p2align 1 2256; CSKY-NEXT: # %bb.1: 2257; CSKY-NEXT: .p2align 2 2258; CSKY-NEXT: .LCPI83_0: 2259; CSKY-NEXT: .long __atomic_fetch_or_2 2260; 2261 %1 = atomicrmw or i16* %a, i16 %b acq_rel 2262 ret i16 %1 2263} 2264 2265define i16 @atomicrmw_or_i16_seq_cst(i16 *%a, i16 %b) nounwind { 2266; CSKY-LABEL: atomicrmw_or_i16_seq_cst: 2267; CSKY: # %bb.0: 2268; CSKY-NEXT: subi16 sp, sp, 4 2269; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 2270; CSKY-NEXT: movi16 a2, 5 2271; CSKY-NEXT: jsri32 [.LCPI84_0] 2272; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 2273; CSKY-NEXT: addi16 sp, sp, 4 2274; CSKY-NEXT: rts16 2275; CSKY-NEXT: .p2align 1 2276; CSKY-NEXT: # %bb.1: 2277; CSKY-NEXT: .p2align 2 2278; CSKY-NEXT: .LCPI84_0: 2279; CSKY-NEXT: .long __atomic_fetch_or_2 2280; 2281 %1 = atomicrmw or i16* %a, i16 %b seq_cst 2282 ret i16 %1 2283} 2284 2285define i16 @atomicrmw_xor_i16_monotonic(i16 *%a, i16 %b) nounwind { 2286; CSKY-LABEL: atomicrmw_xor_i16_monotonic: 2287; CSKY: # %bb.0: 2288; CSKY-NEXT: subi16 sp, sp, 4 2289; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 2290; CSKY-NEXT: movi16 a2, 0 2291; CSKY-NEXT: jsri32 [.LCPI85_0] 2292; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 2293; CSKY-NEXT: addi16 sp, sp, 4 2294; CSKY-NEXT: rts16 2295; CSKY-NEXT: .p2align 1 2296; CSKY-NEXT: # %bb.1: 2297; CSKY-NEXT: .p2align 2 2298; CSKY-NEXT: .LCPI85_0: 2299; CSKY-NEXT: .long __atomic_fetch_xor_2 2300; 2301 %1 = atomicrmw xor i16* %a, i16 %b monotonic 2302 ret i16 %1 2303} 2304 2305define i16 @atomicrmw_xor_i16_acquire(i16 *%a, i16 %b) nounwind { 2306; CSKY-LABEL: atomicrmw_xor_i16_acquire: 2307; CSKY: # %bb.0: 2308; CSKY-NEXT: subi16 sp, sp, 4 2309; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 2310; CSKY-NEXT: movi16 a2, 2 2311; CSKY-NEXT: jsri32 [.LCPI86_0] 2312; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 2313; CSKY-NEXT: addi16 sp, sp, 4 2314; CSKY-NEXT: rts16 2315; CSKY-NEXT: .p2align 1 2316; CSKY-NEXT: # %bb.1: 2317; CSKY-NEXT: .p2align 2 2318; CSKY-NEXT: .LCPI86_0: 2319; CSKY-NEXT: .long __atomic_fetch_xor_2 2320; 2321 %1 = atomicrmw xor i16* %a, i16 %b acquire 2322 ret i16 %1 2323} 2324 2325define i16 @atomicrmw_xor_i16_release(i16 *%a, i16 %b) nounwind { 2326; CSKY-LABEL: atomicrmw_xor_i16_release: 2327; CSKY: # %bb.0: 2328; CSKY-NEXT: subi16 sp, sp, 4 2329; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 2330; CSKY-NEXT: movi16 a2, 3 2331; CSKY-NEXT: jsri32 [.LCPI87_0] 2332; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 2333; CSKY-NEXT: addi16 sp, sp, 4 2334; CSKY-NEXT: rts16 2335; CSKY-NEXT: .p2align 1 2336; CSKY-NEXT: # %bb.1: 2337; CSKY-NEXT: .p2align 2 2338; CSKY-NEXT: .LCPI87_0: 2339; CSKY-NEXT: .long __atomic_fetch_xor_2 2340; 2341 %1 = atomicrmw xor i16* %a, i16 %b release 2342 ret i16 %1 2343} 2344 2345define i16 @atomicrmw_xor_i16_acq_rel(i16 *%a, i16 %b) nounwind { 2346; CSKY-LABEL: atomicrmw_xor_i16_acq_rel: 2347; CSKY: # %bb.0: 2348; CSKY-NEXT: subi16 sp, sp, 4 2349; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 2350; CSKY-NEXT: movi16 a2, 4 2351; CSKY-NEXT: jsri32 [.LCPI88_0] 2352; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 2353; CSKY-NEXT: addi16 sp, sp, 4 2354; CSKY-NEXT: rts16 2355; CSKY-NEXT: .p2align 1 2356; CSKY-NEXT: # %bb.1: 2357; CSKY-NEXT: .p2align 2 2358; CSKY-NEXT: .LCPI88_0: 2359; CSKY-NEXT: .long __atomic_fetch_xor_2 2360; 2361 %1 = atomicrmw xor i16* %a, i16 %b acq_rel 2362 ret i16 %1 2363} 2364 2365define i16 @atomicrmw_xor_i16_seq_cst(i16 *%a, i16 %b) nounwind { 2366; CSKY-LABEL: atomicrmw_xor_i16_seq_cst: 2367; CSKY: # %bb.0: 2368; CSKY-NEXT: subi16 sp, sp, 4 2369; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 2370; CSKY-NEXT: movi16 a2, 5 2371; CSKY-NEXT: jsri32 [.LCPI89_0] 2372; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 2373; CSKY-NEXT: addi16 sp, sp, 4 2374; CSKY-NEXT: rts16 2375; CSKY-NEXT: .p2align 1 2376; CSKY-NEXT: # %bb.1: 2377; CSKY-NEXT: .p2align 2 2378; CSKY-NEXT: .LCPI89_0: 2379; CSKY-NEXT: .long __atomic_fetch_xor_2 2380; 2381 %1 = atomicrmw xor i16* %a, i16 %b seq_cst 2382 ret i16 %1 2383} 2384 2385define i16 @atomicrmw_max_i16_monotonic(i16 *%a, i16 %b) nounwind { 2386; CSKY-LABEL: atomicrmw_max_i16_monotonic: 2387; CSKY: # %bb.0: 2388; CSKY-NEXT: subi16 sp, sp, 20 2389; CSKY-NEXT: st16.w l3, (sp, 16) 2390; CSKY-NEXT: st16.w l2, (sp, 12) 2391; CSKY-NEXT: st16.w l1, (sp, 8) 2392; CSKY-NEXT: st16.w l0, (sp, 4) 2393; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 2394; CSKY-NEXT: subi16 sp, sp, 8 2395; CSKY-NEXT: mov16 l0, a1 2396; CSKY-NEXT: mov16 l1, a0 2397; CSKY-NEXT: ld16.h a0, (a0, 0) 2398; CSKY-NEXT: sexth16 l2, a1 2399; CSKY-NEXT: movi16 l3, 0 2400; CSKY-NEXT: .LBB90_1: # %atomicrmw.start 2401; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 2402; CSKY-NEXT: sexth16 a1, a0 2403; CSKY-NEXT: cmplt16 l2, a1 2404; CSKY-NEXT: mov16 a2, l0 2405; CSKY-NEXT: movt32 a2, a0 2406; CSKY-NEXT: st32.h a0, (sp, 6) 2407; CSKY-NEXT: st16.w l3, (sp, 0) 2408; CSKY-NEXT: mov16 a0, l1 2409; CSKY-NEXT: addi32 a1, sp, 6 2410; CSKY-NEXT: movi16 a3, 0 2411; CSKY-NEXT: jsri32 [.LCPI90_0] 2412; CSKY-NEXT: mov16 a1, a0 2413; CSKY-NEXT: ld32.h a0, (sp, 6) 2414; CSKY-NEXT: bez32 a1, .LBB90_1 2415; CSKY-NEXT: # %bb.2: # %atomicrmw.end 2416; CSKY-NEXT: addi16 sp, sp, 8 2417; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 2418; CSKY-NEXT: ld16.w l0, (sp, 4) 2419; CSKY-NEXT: ld16.w l1, (sp, 8) 2420; CSKY-NEXT: ld16.w l2, (sp, 12) 2421; CSKY-NEXT: ld16.w l3, (sp, 16) 2422; CSKY-NEXT: addi16 sp, sp, 20 2423; CSKY-NEXT: rts16 2424; CSKY-NEXT: .p2align 1 2425; CSKY-NEXT: # %bb.3: 2426; CSKY-NEXT: .p2align 2 2427; CSKY-NEXT: .LCPI90_0: 2428; CSKY-NEXT: .long __atomic_compare_exchange_2 2429; 2430 %1 = atomicrmw max i16* %a, i16 %b monotonic 2431 ret i16 %1 2432} 2433 2434define i16 @atomicrmw_max_i16_acquire(i16 *%a, i16 %b) nounwind { 2435; CSKY-LABEL: atomicrmw_max_i16_acquire: 2436; CSKY: # %bb.0: 2437; CSKY-NEXT: subi16 sp, sp, 20 2438; CSKY-NEXT: st16.w l3, (sp, 16) 2439; CSKY-NEXT: st16.w l2, (sp, 12) 2440; CSKY-NEXT: st16.w l1, (sp, 8) 2441; CSKY-NEXT: st16.w l0, (sp, 4) 2442; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 2443; CSKY-NEXT: subi16 sp, sp, 8 2444; CSKY-NEXT: mov16 l0, a1 2445; CSKY-NEXT: mov16 l1, a0 2446; CSKY-NEXT: ld16.h a0, (a0, 0) 2447; CSKY-NEXT: sexth16 l2, a1 2448; CSKY-NEXT: movi16 l3, 2 2449; CSKY-NEXT: .LBB91_1: # %atomicrmw.start 2450; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 2451; CSKY-NEXT: sexth16 a1, a0 2452; CSKY-NEXT: cmplt16 l2, a1 2453; CSKY-NEXT: mov16 a2, l0 2454; CSKY-NEXT: movt32 a2, a0 2455; CSKY-NEXT: st32.h a0, (sp, 6) 2456; CSKY-NEXT: st16.w l3, (sp, 0) 2457; CSKY-NEXT: mov16 a0, l1 2458; CSKY-NEXT: addi32 a1, sp, 6 2459; CSKY-NEXT: movi16 a3, 2 2460; CSKY-NEXT: jsri32 [.LCPI91_0] 2461; CSKY-NEXT: mov16 a1, a0 2462; CSKY-NEXT: ld32.h a0, (sp, 6) 2463; CSKY-NEXT: bez32 a1, .LBB91_1 2464; CSKY-NEXT: # %bb.2: # %atomicrmw.end 2465; CSKY-NEXT: addi16 sp, sp, 8 2466; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 2467; CSKY-NEXT: ld16.w l0, (sp, 4) 2468; CSKY-NEXT: ld16.w l1, (sp, 8) 2469; CSKY-NEXT: ld16.w l2, (sp, 12) 2470; CSKY-NEXT: ld16.w l3, (sp, 16) 2471; CSKY-NEXT: addi16 sp, sp, 20 2472; CSKY-NEXT: rts16 2473; CSKY-NEXT: .p2align 1 2474; CSKY-NEXT: # %bb.3: 2475; CSKY-NEXT: .p2align 2 2476; CSKY-NEXT: .LCPI91_0: 2477; CSKY-NEXT: .long __atomic_compare_exchange_2 2478; 2479 %1 = atomicrmw max i16* %a, i16 %b acquire 2480 ret i16 %1 2481} 2482 2483define i16 @atomicrmw_max_i16_release(i16 *%a, i16 %b) nounwind { 2484; CSKY-LABEL: atomicrmw_max_i16_release: 2485; CSKY: # %bb.0: 2486; CSKY-NEXT: subi16 sp, sp, 20 2487; CSKY-NEXT: st16.w l3, (sp, 16) 2488; CSKY-NEXT: st16.w l2, (sp, 12) 2489; CSKY-NEXT: st16.w l1, (sp, 8) 2490; CSKY-NEXT: st16.w l0, (sp, 4) 2491; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 2492; CSKY-NEXT: subi16 sp, sp, 8 2493; CSKY-NEXT: mov16 l0, a1 2494; CSKY-NEXT: mov16 l1, a0 2495; CSKY-NEXT: ld16.h a0, (a0, 0) 2496; CSKY-NEXT: sexth16 l2, a1 2497; CSKY-NEXT: movi16 l3, 0 2498; CSKY-NEXT: .LBB92_1: # %atomicrmw.start 2499; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 2500; CSKY-NEXT: sexth16 a1, a0 2501; CSKY-NEXT: cmplt16 l2, a1 2502; CSKY-NEXT: mov16 a2, l0 2503; CSKY-NEXT: movt32 a2, a0 2504; CSKY-NEXT: st32.h a0, (sp, 6) 2505; CSKY-NEXT: st16.w l3, (sp, 0) 2506; CSKY-NEXT: mov16 a0, l1 2507; CSKY-NEXT: addi32 a1, sp, 6 2508; CSKY-NEXT: movi16 a3, 3 2509; CSKY-NEXT: jsri32 [.LCPI92_0] 2510; CSKY-NEXT: mov16 a1, a0 2511; CSKY-NEXT: ld32.h a0, (sp, 6) 2512; CSKY-NEXT: bez32 a1, .LBB92_1 2513; CSKY-NEXT: # %bb.2: # %atomicrmw.end 2514; CSKY-NEXT: addi16 sp, sp, 8 2515; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 2516; CSKY-NEXT: ld16.w l0, (sp, 4) 2517; CSKY-NEXT: ld16.w l1, (sp, 8) 2518; CSKY-NEXT: ld16.w l2, (sp, 12) 2519; CSKY-NEXT: ld16.w l3, (sp, 16) 2520; CSKY-NEXT: addi16 sp, sp, 20 2521; CSKY-NEXT: rts16 2522; CSKY-NEXT: .p2align 1 2523; CSKY-NEXT: # %bb.3: 2524; CSKY-NEXT: .p2align 2 2525; CSKY-NEXT: .LCPI92_0: 2526; CSKY-NEXT: .long __atomic_compare_exchange_2 2527; 2528 %1 = atomicrmw max i16* %a, i16 %b release 2529 ret i16 %1 2530} 2531 2532define i16 @atomicrmw_max_i16_acq_rel(i16 *%a, i16 %b) nounwind { 2533; CSKY-LABEL: atomicrmw_max_i16_acq_rel: 2534; CSKY: # %bb.0: 2535; CSKY-NEXT: subi16 sp, sp, 20 2536; CSKY-NEXT: st16.w l3, (sp, 16) 2537; CSKY-NEXT: st16.w l2, (sp, 12) 2538; CSKY-NEXT: st16.w l1, (sp, 8) 2539; CSKY-NEXT: st16.w l0, (sp, 4) 2540; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 2541; CSKY-NEXT: subi16 sp, sp, 8 2542; CSKY-NEXT: mov16 l0, a1 2543; CSKY-NEXT: mov16 l1, a0 2544; CSKY-NEXT: ld16.h a0, (a0, 0) 2545; CSKY-NEXT: sexth16 l2, a1 2546; CSKY-NEXT: movi16 l3, 2 2547; CSKY-NEXT: .LBB93_1: # %atomicrmw.start 2548; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 2549; CSKY-NEXT: sexth16 a1, a0 2550; CSKY-NEXT: cmplt16 l2, a1 2551; CSKY-NEXT: mov16 a2, l0 2552; CSKY-NEXT: movt32 a2, a0 2553; CSKY-NEXT: st32.h a0, (sp, 6) 2554; CSKY-NEXT: st16.w l3, (sp, 0) 2555; CSKY-NEXT: mov16 a0, l1 2556; CSKY-NEXT: addi32 a1, sp, 6 2557; CSKY-NEXT: movi16 a3, 4 2558; CSKY-NEXT: jsri32 [.LCPI93_0] 2559; CSKY-NEXT: mov16 a1, a0 2560; CSKY-NEXT: ld32.h a0, (sp, 6) 2561; CSKY-NEXT: bez32 a1, .LBB93_1 2562; CSKY-NEXT: # %bb.2: # %atomicrmw.end 2563; CSKY-NEXT: addi16 sp, sp, 8 2564; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 2565; CSKY-NEXT: ld16.w l0, (sp, 4) 2566; CSKY-NEXT: ld16.w l1, (sp, 8) 2567; CSKY-NEXT: ld16.w l2, (sp, 12) 2568; CSKY-NEXT: ld16.w l3, (sp, 16) 2569; CSKY-NEXT: addi16 sp, sp, 20 2570; CSKY-NEXT: rts16 2571; CSKY-NEXT: .p2align 1 2572; CSKY-NEXT: # %bb.3: 2573; CSKY-NEXT: .p2align 2 2574; CSKY-NEXT: .LCPI93_0: 2575; CSKY-NEXT: .long __atomic_compare_exchange_2 2576; 2577 %1 = atomicrmw max i16* %a, i16 %b acq_rel 2578 ret i16 %1 2579} 2580 2581define i16 @atomicrmw_max_i16_seq_cst(i16 *%a, i16 %b) nounwind { 2582; CSKY-LABEL: atomicrmw_max_i16_seq_cst: 2583; CSKY: # %bb.0: 2584; CSKY-NEXT: subi16 sp, sp, 20 2585; CSKY-NEXT: st16.w l3, (sp, 16) 2586; CSKY-NEXT: st16.w l2, (sp, 12) 2587; CSKY-NEXT: st16.w l1, (sp, 8) 2588; CSKY-NEXT: st16.w l0, (sp, 4) 2589; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 2590; CSKY-NEXT: subi16 sp, sp, 8 2591; CSKY-NEXT: mov16 l0, a1 2592; CSKY-NEXT: mov16 l1, a0 2593; CSKY-NEXT: ld16.h a0, (a0, 0) 2594; CSKY-NEXT: sexth16 l2, a1 2595; CSKY-NEXT: movi16 l3, 5 2596; CSKY-NEXT: .LBB94_1: # %atomicrmw.start 2597; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 2598; CSKY-NEXT: sexth16 a1, a0 2599; CSKY-NEXT: cmplt16 l2, a1 2600; CSKY-NEXT: mov16 a2, l0 2601; CSKY-NEXT: movt32 a2, a0 2602; CSKY-NEXT: st32.h a0, (sp, 6) 2603; CSKY-NEXT: st16.w l3, (sp, 0) 2604; CSKY-NEXT: mov16 a0, l1 2605; CSKY-NEXT: addi32 a1, sp, 6 2606; CSKY-NEXT: movi16 a3, 5 2607; CSKY-NEXT: jsri32 [.LCPI94_0] 2608; CSKY-NEXT: mov16 a1, a0 2609; CSKY-NEXT: ld32.h a0, (sp, 6) 2610; CSKY-NEXT: bez32 a1, .LBB94_1 2611; CSKY-NEXT: # %bb.2: # %atomicrmw.end 2612; CSKY-NEXT: addi16 sp, sp, 8 2613; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 2614; CSKY-NEXT: ld16.w l0, (sp, 4) 2615; CSKY-NEXT: ld16.w l1, (sp, 8) 2616; CSKY-NEXT: ld16.w l2, (sp, 12) 2617; CSKY-NEXT: ld16.w l3, (sp, 16) 2618; CSKY-NEXT: addi16 sp, sp, 20 2619; CSKY-NEXT: rts16 2620; CSKY-NEXT: .p2align 1 2621; CSKY-NEXT: # %bb.3: 2622; CSKY-NEXT: .p2align 2 2623; CSKY-NEXT: .LCPI94_0: 2624; CSKY-NEXT: .long __atomic_compare_exchange_2 2625; 2626 %1 = atomicrmw max i16* %a, i16 %b seq_cst 2627 ret i16 %1 2628} 2629 2630define i16 @atomicrmw_min_i16_monotonic(i16 *%a, i16 %b) nounwind { 2631; CSKY-LABEL: atomicrmw_min_i16_monotonic: 2632; CSKY: # %bb.0: 2633; CSKY-NEXT: subi16 sp, sp, 20 2634; CSKY-NEXT: st16.w l3, (sp, 16) 2635; CSKY-NEXT: st16.w l2, (sp, 12) 2636; CSKY-NEXT: st16.w l1, (sp, 8) 2637; CSKY-NEXT: st16.w l0, (sp, 4) 2638; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 2639; CSKY-NEXT: subi16 sp, sp, 8 2640; CSKY-NEXT: mov16 l0, a1 2641; CSKY-NEXT: mov16 l1, a0 2642; CSKY-NEXT: ld16.h a0, (a0, 0) 2643; CSKY-NEXT: sexth16 l2, a1 2644; CSKY-NEXT: movi16 l3, 0 2645; CSKY-NEXT: .LBB95_1: # %atomicrmw.start 2646; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 2647; CSKY-NEXT: sexth16 a1, a0 2648; CSKY-NEXT: cmplt16 l2, a1 2649; CSKY-NEXT: mov16 a2, l0 2650; CSKY-NEXT: movf32 a2, a0 2651; CSKY-NEXT: st32.h a0, (sp, 6) 2652; CSKY-NEXT: st16.w l3, (sp, 0) 2653; CSKY-NEXT: mov16 a0, l1 2654; CSKY-NEXT: addi32 a1, sp, 6 2655; CSKY-NEXT: movi16 a3, 0 2656; CSKY-NEXT: jsri32 [.LCPI95_0] 2657; CSKY-NEXT: mov16 a1, a0 2658; CSKY-NEXT: ld32.h a0, (sp, 6) 2659; CSKY-NEXT: bez32 a1, .LBB95_1 2660; CSKY-NEXT: # %bb.2: # %atomicrmw.end 2661; CSKY-NEXT: addi16 sp, sp, 8 2662; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 2663; CSKY-NEXT: ld16.w l0, (sp, 4) 2664; CSKY-NEXT: ld16.w l1, (sp, 8) 2665; CSKY-NEXT: ld16.w l2, (sp, 12) 2666; CSKY-NEXT: ld16.w l3, (sp, 16) 2667; CSKY-NEXT: addi16 sp, sp, 20 2668; CSKY-NEXT: rts16 2669; CSKY-NEXT: .p2align 1 2670; CSKY-NEXT: # %bb.3: 2671; CSKY-NEXT: .p2align 2 2672; CSKY-NEXT: .LCPI95_0: 2673; CSKY-NEXT: .long __atomic_compare_exchange_2 2674; 2675 %1 = atomicrmw min i16* %a, i16 %b monotonic 2676 ret i16 %1 2677} 2678 2679define i16 @atomicrmw_min_i16_acquire(i16 *%a, i16 %b) nounwind { 2680; CSKY-LABEL: atomicrmw_min_i16_acquire: 2681; CSKY: # %bb.0: 2682; CSKY-NEXT: subi16 sp, sp, 20 2683; CSKY-NEXT: st16.w l3, (sp, 16) 2684; CSKY-NEXT: st16.w l2, (sp, 12) 2685; CSKY-NEXT: st16.w l1, (sp, 8) 2686; CSKY-NEXT: st16.w l0, (sp, 4) 2687; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 2688; CSKY-NEXT: subi16 sp, sp, 8 2689; CSKY-NEXT: mov16 l0, a1 2690; CSKY-NEXT: mov16 l1, a0 2691; CSKY-NEXT: ld16.h a0, (a0, 0) 2692; CSKY-NEXT: sexth16 l2, a1 2693; CSKY-NEXT: movi16 l3, 2 2694; CSKY-NEXT: .LBB96_1: # %atomicrmw.start 2695; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 2696; CSKY-NEXT: sexth16 a1, a0 2697; CSKY-NEXT: cmplt16 l2, a1 2698; CSKY-NEXT: mov16 a2, l0 2699; CSKY-NEXT: movf32 a2, a0 2700; CSKY-NEXT: st32.h a0, (sp, 6) 2701; CSKY-NEXT: st16.w l3, (sp, 0) 2702; CSKY-NEXT: mov16 a0, l1 2703; CSKY-NEXT: addi32 a1, sp, 6 2704; CSKY-NEXT: movi16 a3, 2 2705; CSKY-NEXT: jsri32 [.LCPI96_0] 2706; CSKY-NEXT: mov16 a1, a0 2707; CSKY-NEXT: ld32.h a0, (sp, 6) 2708; CSKY-NEXT: bez32 a1, .LBB96_1 2709; CSKY-NEXT: # %bb.2: # %atomicrmw.end 2710; CSKY-NEXT: addi16 sp, sp, 8 2711; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 2712; CSKY-NEXT: ld16.w l0, (sp, 4) 2713; CSKY-NEXT: ld16.w l1, (sp, 8) 2714; CSKY-NEXT: ld16.w l2, (sp, 12) 2715; CSKY-NEXT: ld16.w l3, (sp, 16) 2716; CSKY-NEXT: addi16 sp, sp, 20 2717; CSKY-NEXT: rts16 2718; CSKY-NEXT: .p2align 1 2719; CSKY-NEXT: # %bb.3: 2720; CSKY-NEXT: .p2align 2 2721; CSKY-NEXT: .LCPI96_0: 2722; CSKY-NEXT: .long __atomic_compare_exchange_2 2723; 2724 %1 = atomicrmw min i16* %a, i16 %b acquire 2725 ret i16 %1 2726} 2727 2728define i16 @atomicrmw_min_i16_release(i16 *%a, i16 %b) nounwind { 2729; CSKY-LABEL: atomicrmw_min_i16_release: 2730; CSKY: # %bb.0: 2731; CSKY-NEXT: subi16 sp, sp, 20 2732; CSKY-NEXT: st16.w l3, (sp, 16) 2733; CSKY-NEXT: st16.w l2, (sp, 12) 2734; CSKY-NEXT: st16.w l1, (sp, 8) 2735; CSKY-NEXT: st16.w l0, (sp, 4) 2736; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 2737; CSKY-NEXT: subi16 sp, sp, 8 2738; CSKY-NEXT: mov16 l0, a1 2739; CSKY-NEXT: mov16 l1, a0 2740; CSKY-NEXT: ld16.h a0, (a0, 0) 2741; CSKY-NEXT: sexth16 l2, a1 2742; CSKY-NEXT: movi16 l3, 0 2743; CSKY-NEXT: .LBB97_1: # %atomicrmw.start 2744; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 2745; CSKY-NEXT: sexth16 a1, a0 2746; CSKY-NEXT: cmplt16 l2, a1 2747; CSKY-NEXT: mov16 a2, l0 2748; CSKY-NEXT: movf32 a2, a0 2749; CSKY-NEXT: st32.h a0, (sp, 6) 2750; CSKY-NEXT: st16.w l3, (sp, 0) 2751; CSKY-NEXT: mov16 a0, l1 2752; CSKY-NEXT: addi32 a1, sp, 6 2753; CSKY-NEXT: movi16 a3, 3 2754; CSKY-NEXT: jsri32 [.LCPI97_0] 2755; CSKY-NEXT: mov16 a1, a0 2756; CSKY-NEXT: ld32.h a0, (sp, 6) 2757; CSKY-NEXT: bez32 a1, .LBB97_1 2758; CSKY-NEXT: # %bb.2: # %atomicrmw.end 2759; CSKY-NEXT: addi16 sp, sp, 8 2760; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 2761; CSKY-NEXT: ld16.w l0, (sp, 4) 2762; CSKY-NEXT: ld16.w l1, (sp, 8) 2763; CSKY-NEXT: ld16.w l2, (sp, 12) 2764; CSKY-NEXT: ld16.w l3, (sp, 16) 2765; CSKY-NEXT: addi16 sp, sp, 20 2766; CSKY-NEXT: rts16 2767; CSKY-NEXT: .p2align 1 2768; CSKY-NEXT: # %bb.3: 2769; CSKY-NEXT: .p2align 2 2770; CSKY-NEXT: .LCPI97_0: 2771; CSKY-NEXT: .long __atomic_compare_exchange_2 2772; 2773 %1 = atomicrmw min i16* %a, i16 %b release 2774 ret i16 %1 2775} 2776 2777define i16 @atomicrmw_min_i16_acq_rel(i16 *%a, i16 %b) nounwind { 2778; CSKY-LABEL: atomicrmw_min_i16_acq_rel: 2779; CSKY: # %bb.0: 2780; CSKY-NEXT: subi16 sp, sp, 20 2781; CSKY-NEXT: st16.w l3, (sp, 16) 2782; CSKY-NEXT: st16.w l2, (sp, 12) 2783; CSKY-NEXT: st16.w l1, (sp, 8) 2784; CSKY-NEXT: st16.w l0, (sp, 4) 2785; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 2786; CSKY-NEXT: subi16 sp, sp, 8 2787; CSKY-NEXT: mov16 l0, a1 2788; CSKY-NEXT: mov16 l1, a0 2789; CSKY-NEXT: ld16.h a0, (a0, 0) 2790; CSKY-NEXT: sexth16 l2, a1 2791; CSKY-NEXT: movi16 l3, 2 2792; CSKY-NEXT: .LBB98_1: # %atomicrmw.start 2793; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 2794; CSKY-NEXT: sexth16 a1, a0 2795; CSKY-NEXT: cmplt16 l2, a1 2796; CSKY-NEXT: mov16 a2, l0 2797; CSKY-NEXT: movf32 a2, a0 2798; CSKY-NEXT: st32.h a0, (sp, 6) 2799; CSKY-NEXT: st16.w l3, (sp, 0) 2800; CSKY-NEXT: mov16 a0, l1 2801; CSKY-NEXT: addi32 a1, sp, 6 2802; CSKY-NEXT: movi16 a3, 4 2803; CSKY-NEXT: jsri32 [.LCPI98_0] 2804; CSKY-NEXT: mov16 a1, a0 2805; CSKY-NEXT: ld32.h a0, (sp, 6) 2806; CSKY-NEXT: bez32 a1, .LBB98_1 2807; CSKY-NEXT: # %bb.2: # %atomicrmw.end 2808; CSKY-NEXT: addi16 sp, sp, 8 2809; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 2810; CSKY-NEXT: ld16.w l0, (sp, 4) 2811; CSKY-NEXT: ld16.w l1, (sp, 8) 2812; CSKY-NEXT: ld16.w l2, (sp, 12) 2813; CSKY-NEXT: ld16.w l3, (sp, 16) 2814; CSKY-NEXT: addi16 sp, sp, 20 2815; CSKY-NEXT: rts16 2816; CSKY-NEXT: .p2align 1 2817; CSKY-NEXT: # %bb.3: 2818; CSKY-NEXT: .p2align 2 2819; CSKY-NEXT: .LCPI98_0: 2820; CSKY-NEXT: .long __atomic_compare_exchange_2 2821; 2822 %1 = atomicrmw min i16* %a, i16 %b acq_rel 2823 ret i16 %1 2824} 2825 2826define i16 @atomicrmw_min_i16_seq_cst(i16 *%a, i16 %b) nounwind { 2827; CSKY-LABEL: atomicrmw_min_i16_seq_cst: 2828; CSKY: # %bb.0: 2829; CSKY-NEXT: subi16 sp, sp, 20 2830; CSKY-NEXT: st16.w l3, (sp, 16) 2831; CSKY-NEXT: st16.w l2, (sp, 12) 2832; CSKY-NEXT: st16.w l1, (sp, 8) 2833; CSKY-NEXT: st16.w l0, (sp, 4) 2834; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 2835; CSKY-NEXT: subi16 sp, sp, 8 2836; CSKY-NEXT: mov16 l0, a1 2837; CSKY-NEXT: mov16 l1, a0 2838; CSKY-NEXT: ld16.h a0, (a0, 0) 2839; CSKY-NEXT: sexth16 l2, a1 2840; CSKY-NEXT: movi16 l3, 5 2841; CSKY-NEXT: .LBB99_1: # %atomicrmw.start 2842; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 2843; CSKY-NEXT: sexth16 a1, a0 2844; CSKY-NEXT: cmplt16 l2, a1 2845; CSKY-NEXT: mov16 a2, l0 2846; CSKY-NEXT: movf32 a2, a0 2847; CSKY-NEXT: st32.h a0, (sp, 6) 2848; CSKY-NEXT: st16.w l3, (sp, 0) 2849; CSKY-NEXT: mov16 a0, l1 2850; CSKY-NEXT: addi32 a1, sp, 6 2851; CSKY-NEXT: movi16 a3, 5 2852; CSKY-NEXT: jsri32 [.LCPI99_0] 2853; CSKY-NEXT: mov16 a1, a0 2854; CSKY-NEXT: ld32.h a0, (sp, 6) 2855; CSKY-NEXT: bez32 a1, .LBB99_1 2856; CSKY-NEXT: # %bb.2: # %atomicrmw.end 2857; CSKY-NEXT: addi16 sp, sp, 8 2858; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 2859; CSKY-NEXT: ld16.w l0, (sp, 4) 2860; CSKY-NEXT: ld16.w l1, (sp, 8) 2861; CSKY-NEXT: ld16.w l2, (sp, 12) 2862; CSKY-NEXT: ld16.w l3, (sp, 16) 2863; CSKY-NEXT: addi16 sp, sp, 20 2864; CSKY-NEXT: rts16 2865; CSKY-NEXT: .p2align 1 2866; CSKY-NEXT: # %bb.3: 2867; CSKY-NEXT: .p2align 2 2868; CSKY-NEXT: .LCPI99_0: 2869; CSKY-NEXT: .long __atomic_compare_exchange_2 2870; 2871 %1 = atomicrmw min i16* %a, i16 %b seq_cst 2872 ret i16 %1 2873} 2874 2875define i16 @atomicrmw_umax_i16_monotonic(i16 *%a, i16 %b) nounwind { 2876; CSKY-LABEL: atomicrmw_umax_i16_monotonic: 2877; CSKY: # %bb.0: 2878; CSKY-NEXT: subi16 sp, sp, 20 2879; CSKY-NEXT: st16.w l3, (sp, 16) 2880; CSKY-NEXT: st16.w l2, (sp, 12) 2881; CSKY-NEXT: st16.w l1, (sp, 8) 2882; CSKY-NEXT: st16.w l0, (sp, 4) 2883; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 2884; CSKY-NEXT: subi16 sp, sp, 8 2885; CSKY-NEXT: mov16 l0, a1 2886; CSKY-NEXT: mov16 l1, a0 2887; CSKY-NEXT: ld16.h a0, (a0, 0) 2888; CSKY-NEXT: zexth16 l2, a1 2889; CSKY-NEXT: movi16 l3, 0 2890; CSKY-NEXT: .LBB100_1: # %atomicrmw.start 2891; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 2892; CSKY-NEXT: zexth16 a1, a0 2893; CSKY-NEXT: cmphs16 l2, a1 2894; CSKY-NEXT: mov16 a2, l0 2895; CSKY-NEXT: movf32 a2, a0 2896; CSKY-NEXT: st32.h a0, (sp, 6) 2897; CSKY-NEXT: st16.w l3, (sp, 0) 2898; CSKY-NEXT: mov16 a0, l1 2899; CSKY-NEXT: addi32 a1, sp, 6 2900; CSKY-NEXT: movi16 a3, 0 2901; CSKY-NEXT: jsri32 [.LCPI100_0] 2902; CSKY-NEXT: mov16 a1, a0 2903; CSKY-NEXT: ld32.h a0, (sp, 6) 2904; CSKY-NEXT: bez32 a1, .LBB100_1 2905; CSKY-NEXT: # %bb.2: # %atomicrmw.end 2906; CSKY-NEXT: addi16 sp, sp, 8 2907; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 2908; CSKY-NEXT: ld16.w l0, (sp, 4) 2909; CSKY-NEXT: ld16.w l1, (sp, 8) 2910; CSKY-NEXT: ld16.w l2, (sp, 12) 2911; CSKY-NEXT: ld16.w l3, (sp, 16) 2912; CSKY-NEXT: addi16 sp, sp, 20 2913; CSKY-NEXT: rts16 2914; CSKY-NEXT: .p2align 1 2915; CSKY-NEXT: # %bb.3: 2916; CSKY-NEXT: .p2align 2 2917; CSKY-NEXT: .LCPI100_0: 2918; CSKY-NEXT: .long __atomic_compare_exchange_2 2919; 2920 %1 = atomicrmw umax i16* %a, i16 %b monotonic 2921 ret i16 %1 2922} 2923 2924define i16 @atomicrmw_umax_i16_acquire(i16 *%a, i16 %b) nounwind { 2925; CSKY-LABEL: atomicrmw_umax_i16_acquire: 2926; CSKY: # %bb.0: 2927; CSKY-NEXT: subi16 sp, sp, 20 2928; CSKY-NEXT: st16.w l3, (sp, 16) 2929; CSKY-NEXT: st16.w l2, (sp, 12) 2930; CSKY-NEXT: st16.w l1, (sp, 8) 2931; CSKY-NEXT: st16.w l0, (sp, 4) 2932; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 2933; CSKY-NEXT: subi16 sp, sp, 8 2934; CSKY-NEXT: mov16 l0, a1 2935; CSKY-NEXT: mov16 l1, a0 2936; CSKY-NEXT: ld16.h a0, (a0, 0) 2937; CSKY-NEXT: zexth16 l2, a1 2938; CSKY-NEXT: movi16 l3, 2 2939; CSKY-NEXT: .LBB101_1: # %atomicrmw.start 2940; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 2941; CSKY-NEXT: zexth16 a1, a0 2942; CSKY-NEXT: cmphs16 l2, a1 2943; CSKY-NEXT: mov16 a2, l0 2944; CSKY-NEXT: movf32 a2, a0 2945; CSKY-NEXT: st32.h a0, (sp, 6) 2946; CSKY-NEXT: st16.w l3, (sp, 0) 2947; CSKY-NEXT: mov16 a0, l1 2948; CSKY-NEXT: addi32 a1, sp, 6 2949; CSKY-NEXT: movi16 a3, 2 2950; CSKY-NEXT: jsri32 [.LCPI101_0] 2951; CSKY-NEXT: mov16 a1, a0 2952; CSKY-NEXT: ld32.h a0, (sp, 6) 2953; CSKY-NEXT: bez32 a1, .LBB101_1 2954; CSKY-NEXT: # %bb.2: # %atomicrmw.end 2955; CSKY-NEXT: addi16 sp, sp, 8 2956; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 2957; CSKY-NEXT: ld16.w l0, (sp, 4) 2958; CSKY-NEXT: ld16.w l1, (sp, 8) 2959; CSKY-NEXT: ld16.w l2, (sp, 12) 2960; CSKY-NEXT: ld16.w l3, (sp, 16) 2961; CSKY-NEXT: addi16 sp, sp, 20 2962; CSKY-NEXT: rts16 2963; CSKY-NEXT: .p2align 1 2964; CSKY-NEXT: # %bb.3: 2965; CSKY-NEXT: .p2align 2 2966; CSKY-NEXT: .LCPI101_0: 2967; CSKY-NEXT: .long __atomic_compare_exchange_2 2968; 2969 %1 = atomicrmw umax i16* %a, i16 %b acquire 2970 ret i16 %1 2971} 2972 2973define i16 @atomicrmw_umax_i16_release(i16 *%a, i16 %b) nounwind { 2974; CSKY-LABEL: atomicrmw_umax_i16_release: 2975; CSKY: # %bb.0: 2976; CSKY-NEXT: subi16 sp, sp, 20 2977; CSKY-NEXT: st16.w l3, (sp, 16) 2978; CSKY-NEXT: st16.w l2, (sp, 12) 2979; CSKY-NEXT: st16.w l1, (sp, 8) 2980; CSKY-NEXT: st16.w l0, (sp, 4) 2981; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 2982; CSKY-NEXT: subi16 sp, sp, 8 2983; CSKY-NEXT: mov16 l0, a1 2984; CSKY-NEXT: mov16 l1, a0 2985; CSKY-NEXT: ld16.h a0, (a0, 0) 2986; CSKY-NEXT: zexth16 l2, a1 2987; CSKY-NEXT: movi16 l3, 0 2988; CSKY-NEXT: .LBB102_1: # %atomicrmw.start 2989; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 2990; CSKY-NEXT: zexth16 a1, a0 2991; CSKY-NEXT: cmphs16 l2, a1 2992; CSKY-NEXT: mov16 a2, l0 2993; CSKY-NEXT: movf32 a2, a0 2994; CSKY-NEXT: st32.h a0, (sp, 6) 2995; CSKY-NEXT: st16.w l3, (sp, 0) 2996; CSKY-NEXT: mov16 a0, l1 2997; CSKY-NEXT: addi32 a1, sp, 6 2998; CSKY-NEXT: movi16 a3, 3 2999; CSKY-NEXT: jsri32 [.LCPI102_0] 3000; CSKY-NEXT: mov16 a1, a0 3001; CSKY-NEXT: ld32.h a0, (sp, 6) 3002; CSKY-NEXT: bez32 a1, .LBB102_1 3003; CSKY-NEXT: # %bb.2: # %atomicrmw.end 3004; CSKY-NEXT: addi16 sp, sp, 8 3005; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3006; CSKY-NEXT: ld16.w l0, (sp, 4) 3007; CSKY-NEXT: ld16.w l1, (sp, 8) 3008; CSKY-NEXT: ld16.w l2, (sp, 12) 3009; CSKY-NEXT: ld16.w l3, (sp, 16) 3010; CSKY-NEXT: addi16 sp, sp, 20 3011; CSKY-NEXT: rts16 3012; CSKY-NEXT: .p2align 1 3013; CSKY-NEXT: # %bb.3: 3014; CSKY-NEXT: .p2align 2 3015; CSKY-NEXT: .LCPI102_0: 3016; CSKY-NEXT: .long __atomic_compare_exchange_2 3017; 3018 %1 = atomicrmw umax i16* %a, i16 %b release 3019 ret i16 %1 3020} 3021 3022define i16 @atomicrmw_umax_i16_acq_rel(i16 *%a, i16 %b) nounwind { 3023; CSKY-LABEL: atomicrmw_umax_i16_acq_rel: 3024; CSKY: # %bb.0: 3025; CSKY-NEXT: subi16 sp, sp, 20 3026; CSKY-NEXT: st16.w l3, (sp, 16) 3027; CSKY-NEXT: st16.w l2, (sp, 12) 3028; CSKY-NEXT: st16.w l1, (sp, 8) 3029; CSKY-NEXT: st16.w l0, (sp, 4) 3030; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3031; CSKY-NEXT: subi16 sp, sp, 8 3032; CSKY-NEXT: mov16 l0, a1 3033; CSKY-NEXT: mov16 l1, a0 3034; CSKY-NEXT: ld16.h a0, (a0, 0) 3035; CSKY-NEXT: zexth16 l2, a1 3036; CSKY-NEXT: movi16 l3, 2 3037; CSKY-NEXT: .LBB103_1: # %atomicrmw.start 3038; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 3039; CSKY-NEXT: zexth16 a1, a0 3040; CSKY-NEXT: cmphs16 l2, a1 3041; CSKY-NEXT: mov16 a2, l0 3042; CSKY-NEXT: movf32 a2, a0 3043; CSKY-NEXT: st32.h a0, (sp, 6) 3044; CSKY-NEXT: st16.w l3, (sp, 0) 3045; CSKY-NEXT: mov16 a0, l1 3046; CSKY-NEXT: addi32 a1, sp, 6 3047; CSKY-NEXT: movi16 a3, 4 3048; CSKY-NEXT: jsri32 [.LCPI103_0] 3049; CSKY-NEXT: mov16 a1, a0 3050; CSKY-NEXT: ld32.h a0, (sp, 6) 3051; CSKY-NEXT: bez32 a1, .LBB103_1 3052; CSKY-NEXT: # %bb.2: # %atomicrmw.end 3053; CSKY-NEXT: addi16 sp, sp, 8 3054; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3055; CSKY-NEXT: ld16.w l0, (sp, 4) 3056; CSKY-NEXT: ld16.w l1, (sp, 8) 3057; CSKY-NEXT: ld16.w l2, (sp, 12) 3058; CSKY-NEXT: ld16.w l3, (sp, 16) 3059; CSKY-NEXT: addi16 sp, sp, 20 3060; CSKY-NEXT: rts16 3061; CSKY-NEXT: .p2align 1 3062; CSKY-NEXT: # %bb.3: 3063; CSKY-NEXT: .p2align 2 3064; CSKY-NEXT: .LCPI103_0: 3065; CSKY-NEXT: .long __atomic_compare_exchange_2 3066; 3067 %1 = atomicrmw umax i16* %a, i16 %b acq_rel 3068 ret i16 %1 3069} 3070 3071define i16 @atomicrmw_umax_i16_seq_cst(i16 *%a, i16 %b) nounwind { 3072; CSKY-LABEL: atomicrmw_umax_i16_seq_cst: 3073; CSKY: # %bb.0: 3074; CSKY-NEXT: subi16 sp, sp, 20 3075; CSKY-NEXT: st16.w l3, (sp, 16) 3076; CSKY-NEXT: st16.w l2, (sp, 12) 3077; CSKY-NEXT: st16.w l1, (sp, 8) 3078; CSKY-NEXT: st16.w l0, (sp, 4) 3079; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3080; CSKY-NEXT: subi16 sp, sp, 8 3081; CSKY-NEXT: mov16 l0, a1 3082; CSKY-NEXT: mov16 l1, a0 3083; CSKY-NEXT: ld16.h a0, (a0, 0) 3084; CSKY-NEXT: zexth16 l2, a1 3085; CSKY-NEXT: movi16 l3, 5 3086; CSKY-NEXT: .LBB104_1: # %atomicrmw.start 3087; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 3088; CSKY-NEXT: zexth16 a1, a0 3089; CSKY-NEXT: cmphs16 l2, a1 3090; CSKY-NEXT: mov16 a2, l0 3091; CSKY-NEXT: movf32 a2, a0 3092; CSKY-NEXT: st32.h a0, (sp, 6) 3093; CSKY-NEXT: st16.w l3, (sp, 0) 3094; CSKY-NEXT: mov16 a0, l1 3095; CSKY-NEXT: addi32 a1, sp, 6 3096; CSKY-NEXT: movi16 a3, 5 3097; CSKY-NEXT: jsri32 [.LCPI104_0] 3098; CSKY-NEXT: mov16 a1, a0 3099; CSKY-NEXT: ld32.h a0, (sp, 6) 3100; CSKY-NEXT: bez32 a1, .LBB104_1 3101; CSKY-NEXT: # %bb.2: # %atomicrmw.end 3102; CSKY-NEXT: addi16 sp, sp, 8 3103; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3104; CSKY-NEXT: ld16.w l0, (sp, 4) 3105; CSKY-NEXT: ld16.w l1, (sp, 8) 3106; CSKY-NEXT: ld16.w l2, (sp, 12) 3107; CSKY-NEXT: ld16.w l3, (sp, 16) 3108; CSKY-NEXT: addi16 sp, sp, 20 3109; CSKY-NEXT: rts16 3110; CSKY-NEXT: .p2align 1 3111; CSKY-NEXT: # %bb.3: 3112; CSKY-NEXT: .p2align 2 3113; CSKY-NEXT: .LCPI104_0: 3114; CSKY-NEXT: .long __atomic_compare_exchange_2 3115; 3116 %1 = atomicrmw umax i16* %a, i16 %b seq_cst 3117 ret i16 %1 3118} 3119 3120define i16 @atomicrmw_umin_i16_monotonic(i16 *%a, i16 %b) nounwind { 3121; CSKY-LABEL: atomicrmw_umin_i16_monotonic: 3122; CSKY: # %bb.0: 3123; CSKY-NEXT: subi16 sp, sp, 20 3124; CSKY-NEXT: st16.w l3, (sp, 16) 3125; CSKY-NEXT: st16.w l2, (sp, 12) 3126; CSKY-NEXT: st16.w l1, (sp, 8) 3127; CSKY-NEXT: st16.w l0, (sp, 4) 3128; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3129; CSKY-NEXT: subi16 sp, sp, 8 3130; CSKY-NEXT: mov16 l0, a1 3131; CSKY-NEXT: mov16 l1, a0 3132; CSKY-NEXT: ld16.h a0, (a0, 0) 3133; CSKY-NEXT: zexth16 l2, a1 3134; CSKY-NEXT: movi16 l3, 0 3135; CSKY-NEXT: .LBB105_1: # %atomicrmw.start 3136; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 3137; CSKY-NEXT: zexth16 a1, a0 3138; CSKY-NEXT: cmphs16 l2, a1 3139; CSKY-NEXT: mov16 a2, l0 3140; CSKY-NEXT: movt32 a2, a0 3141; CSKY-NEXT: st32.h a0, (sp, 6) 3142; CSKY-NEXT: st16.w l3, (sp, 0) 3143; CSKY-NEXT: mov16 a0, l1 3144; CSKY-NEXT: addi32 a1, sp, 6 3145; CSKY-NEXT: movi16 a3, 0 3146; CSKY-NEXT: jsri32 [.LCPI105_0] 3147; CSKY-NEXT: mov16 a1, a0 3148; CSKY-NEXT: ld32.h a0, (sp, 6) 3149; CSKY-NEXT: bez32 a1, .LBB105_1 3150; CSKY-NEXT: # %bb.2: # %atomicrmw.end 3151; CSKY-NEXT: addi16 sp, sp, 8 3152; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3153; CSKY-NEXT: ld16.w l0, (sp, 4) 3154; CSKY-NEXT: ld16.w l1, (sp, 8) 3155; CSKY-NEXT: ld16.w l2, (sp, 12) 3156; CSKY-NEXT: ld16.w l3, (sp, 16) 3157; CSKY-NEXT: addi16 sp, sp, 20 3158; CSKY-NEXT: rts16 3159; CSKY-NEXT: .p2align 1 3160; CSKY-NEXT: # %bb.3: 3161; CSKY-NEXT: .p2align 2 3162; CSKY-NEXT: .LCPI105_0: 3163; CSKY-NEXT: .long __atomic_compare_exchange_2 3164; 3165 %1 = atomicrmw umin i16* %a, i16 %b monotonic 3166 ret i16 %1 3167} 3168 3169define i16 @atomicrmw_umin_i16_acquire(i16 *%a, i16 %b) nounwind { 3170; CSKY-LABEL: atomicrmw_umin_i16_acquire: 3171; CSKY: # %bb.0: 3172; CSKY-NEXT: subi16 sp, sp, 20 3173; CSKY-NEXT: st16.w l3, (sp, 16) 3174; CSKY-NEXT: st16.w l2, (sp, 12) 3175; CSKY-NEXT: st16.w l1, (sp, 8) 3176; CSKY-NEXT: st16.w l0, (sp, 4) 3177; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3178; CSKY-NEXT: subi16 sp, sp, 8 3179; CSKY-NEXT: mov16 l0, a1 3180; CSKY-NEXT: mov16 l1, a0 3181; CSKY-NEXT: ld16.h a0, (a0, 0) 3182; CSKY-NEXT: zexth16 l2, a1 3183; CSKY-NEXT: movi16 l3, 2 3184; CSKY-NEXT: .LBB106_1: # %atomicrmw.start 3185; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 3186; CSKY-NEXT: zexth16 a1, a0 3187; CSKY-NEXT: cmphs16 l2, a1 3188; CSKY-NEXT: mov16 a2, l0 3189; CSKY-NEXT: movt32 a2, a0 3190; CSKY-NEXT: st32.h a0, (sp, 6) 3191; CSKY-NEXT: st16.w l3, (sp, 0) 3192; CSKY-NEXT: mov16 a0, l1 3193; CSKY-NEXT: addi32 a1, sp, 6 3194; CSKY-NEXT: movi16 a3, 2 3195; CSKY-NEXT: jsri32 [.LCPI106_0] 3196; CSKY-NEXT: mov16 a1, a0 3197; CSKY-NEXT: ld32.h a0, (sp, 6) 3198; CSKY-NEXT: bez32 a1, .LBB106_1 3199; CSKY-NEXT: # %bb.2: # %atomicrmw.end 3200; CSKY-NEXT: addi16 sp, sp, 8 3201; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3202; CSKY-NEXT: ld16.w l0, (sp, 4) 3203; CSKY-NEXT: ld16.w l1, (sp, 8) 3204; CSKY-NEXT: ld16.w l2, (sp, 12) 3205; CSKY-NEXT: ld16.w l3, (sp, 16) 3206; CSKY-NEXT: addi16 sp, sp, 20 3207; CSKY-NEXT: rts16 3208; CSKY-NEXT: .p2align 1 3209; CSKY-NEXT: # %bb.3: 3210; CSKY-NEXT: .p2align 2 3211; CSKY-NEXT: .LCPI106_0: 3212; CSKY-NEXT: .long __atomic_compare_exchange_2 3213; 3214 %1 = atomicrmw umin i16* %a, i16 %b acquire 3215 ret i16 %1 3216} 3217 3218define i16 @atomicrmw_umin_i16_release(i16 *%a, i16 %b) nounwind { 3219; CSKY-LABEL: atomicrmw_umin_i16_release: 3220; CSKY: # %bb.0: 3221; CSKY-NEXT: subi16 sp, sp, 20 3222; CSKY-NEXT: st16.w l3, (sp, 16) 3223; CSKY-NEXT: st16.w l2, (sp, 12) 3224; CSKY-NEXT: st16.w l1, (sp, 8) 3225; CSKY-NEXT: st16.w l0, (sp, 4) 3226; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3227; CSKY-NEXT: subi16 sp, sp, 8 3228; CSKY-NEXT: mov16 l0, a1 3229; CSKY-NEXT: mov16 l1, a0 3230; CSKY-NEXT: ld16.h a0, (a0, 0) 3231; CSKY-NEXT: zexth16 l2, a1 3232; CSKY-NEXT: movi16 l3, 0 3233; CSKY-NEXT: .LBB107_1: # %atomicrmw.start 3234; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 3235; CSKY-NEXT: zexth16 a1, a0 3236; CSKY-NEXT: cmphs16 l2, a1 3237; CSKY-NEXT: mov16 a2, l0 3238; CSKY-NEXT: movt32 a2, a0 3239; CSKY-NEXT: st32.h a0, (sp, 6) 3240; CSKY-NEXT: st16.w l3, (sp, 0) 3241; CSKY-NEXT: mov16 a0, l1 3242; CSKY-NEXT: addi32 a1, sp, 6 3243; CSKY-NEXT: movi16 a3, 3 3244; CSKY-NEXT: jsri32 [.LCPI107_0] 3245; CSKY-NEXT: mov16 a1, a0 3246; CSKY-NEXT: ld32.h a0, (sp, 6) 3247; CSKY-NEXT: bez32 a1, .LBB107_1 3248; CSKY-NEXT: # %bb.2: # %atomicrmw.end 3249; CSKY-NEXT: addi16 sp, sp, 8 3250; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3251; CSKY-NEXT: ld16.w l0, (sp, 4) 3252; CSKY-NEXT: ld16.w l1, (sp, 8) 3253; CSKY-NEXT: ld16.w l2, (sp, 12) 3254; CSKY-NEXT: ld16.w l3, (sp, 16) 3255; CSKY-NEXT: addi16 sp, sp, 20 3256; CSKY-NEXT: rts16 3257; CSKY-NEXT: .p2align 1 3258; CSKY-NEXT: # %bb.3: 3259; CSKY-NEXT: .p2align 2 3260; CSKY-NEXT: .LCPI107_0: 3261; CSKY-NEXT: .long __atomic_compare_exchange_2 3262; 3263 %1 = atomicrmw umin i16* %a, i16 %b release 3264 ret i16 %1 3265} 3266 3267define i16 @atomicrmw_umin_i16_acq_rel(i16 *%a, i16 %b) nounwind { 3268; CSKY-LABEL: atomicrmw_umin_i16_acq_rel: 3269; CSKY: # %bb.0: 3270; CSKY-NEXT: subi16 sp, sp, 20 3271; CSKY-NEXT: st16.w l3, (sp, 16) 3272; CSKY-NEXT: st16.w l2, (sp, 12) 3273; CSKY-NEXT: st16.w l1, (sp, 8) 3274; CSKY-NEXT: st16.w l0, (sp, 4) 3275; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3276; CSKY-NEXT: subi16 sp, sp, 8 3277; CSKY-NEXT: mov16 l0, a1 3278; CSKY-NEXT: mov16 l1, a0 3279; CSKY-NEXT: ld16.h a0, (a0, 0) 3280; CSKY-NEXT: zexth16 l2, a1 3281; CSKY-NEXT: movi16 l3, 2 3282; CSKY-NEXT: .LBB108_1: # %atomicrmw.start 3283; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 3284; CSKY-NEXT: zexth16 a1, a0 3285; CSKY-NEXT: cmphs16 l2, a1 3286; CSKY-NEXT: mov16 a2, l0 3287; CSKY-NEXT: movt32 a2, a0 3288; CSKY-NEXT: st32.h a0, (sp, 6) 3289; CSKY-NEXT: st16.w l3, (sp, 0) 3290; CSKY-NEXT: mov16 a0, l1 3291; CSKY-NEXT: addi32 a1, sp, 6 3292; CSKY-NEXT: movi16 a3, 4 3293; CSKY-NEXT: jsri32 [.LCPI108_0] 3294; CSKY-NEXT: mov16 a1, a0 3295; CSKY-NEXT: ld32.h a0, (sp, 6) 3296; CSKY-NEXT: bez32 a1, .LBB108_1 3297; CSKY-NEXT: # %bb.2: # %atomicrmw.end 3298; CSKY-NEXT: addi16 sp, sp, 8 3299; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3300; CSKY-NEXT: ld16.w l0, (sp, 4) 3301; CSKY-NEXT: ld16.w l1, (sp, 8) 3302; CSKY-NEXT: ld16.w l2, (sp, 12) 3303; CSKY-NEXT: ld16.w l3, (sp, 16) 3304; CSKY-NEXT: addi16 sp, sp, 20 3305; CSKY-NEXT: rts16 3306; CSKY-NEXT: .p2align 1 3307; CSKY-NEXT: # %bb.3: 3308; CSKY-NEXT: .p2align 2 3309; CSKY-NEXT: .LCPI108_0: 3310; CSKY-NEXT: .long __atomic_compare_exchange_2 3311; 3312 %1 = atomicrmw umin i16* %a, i16 %b acq_rel 3313 ret i16 %1 3314} 3315 3316define i16 @atomicrmw_umin_i16_seq_cst(i16 *%a, i16 %b) nounwind { 3317; CSKY-LABEL: atomicrmw_umin_i16_seq_cst: 3318; CSKY: # %bb.0: 3319; CSKY-NEXT: subi16 sp, sp, 20 3320; CSKY-NEXT: st16.w l3, (sp, 16) 3321; CSKY-NEXT: st16.w l2, (sp, 12) 3322; CSKY-NEXT: st16.w l1, (sp, 8) 3323; CSKY-NEXT: st16.w l0, (sp, 4) 3324; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3325; CSKY-NEXT: subi16 sp, sp, 8 3326; CSKY-NEXT: mov16 l0, a1 3327; CSKY-NEXT: mov16 l1, a0 3328; CSKY-NEXT: ld16.h a0, (a0, 0) 3329; CSKY-NEXT: zexth16 l2, a1 3330; CSKY-NEXT: movi16 l3, 5 3331; CSKY-NEXT: .LBB109_1: # %atomicrmw.start 3332; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 3333; CSKY-NEXT: zexth16 a1, a0 3334; CSKY-NEXT: cmphs16 l2, a1 3335; CSKY-NEXT: mov16 a2, l0 3336; CSKY-NEXT: movt32 a2, a0 3337; CSKY-NEXT: st32.h a0, (sp, 6) 3338; CSKY-NEXT: st16.w l3, (sp, 0) 3339; CSKY-NEXT: mov16 a0, l1 3340; CSKY-NEXT: addi32 a1, sp, 6 3341; CSKY-NEXT: movi16 a3, 5 3342; CSKY-NEXT: jsri32 [.LCPI109_0] 3343; CSKY-NEXT: mov16 a1, a0 3344; CSKY-NEXT: ld32.h a0, (sp, 6) 3345; CSKY-NEXT: bez32 a1, .LBB109_1 3346; CSKY-NEXT: # %bb.2: # %atomicrmw.end 3347; CSKY-NEXT: addi16 sp, sp, 8 3348; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3349; CSKY-NEXT: ld16.w l0, (sp, 4) 3350; CSKY-NEXT: ld16.w l1, (sp, 8) 3351; CSKY-NEXT: ld16.w l2, (sp, 12) 3352; CSKY-NEXT: ld16.w l3, (sp, 16) 3353; CSKY-NEXT: addi16 sp, sp, 20 3354; CSKY-NEXT: rts16 3355; CSKY-NEXT: .p2align 1 3356; CSKY-NEXT: # %bb.3: 3357; CSKY-NEXT: .p2align 2 3358; CSKY-NEXT: .LCPI109_0: 3359; CSKY-NEXT: .long __atomic_compare_exchange_2 3360; 3361 %1 = atomicrmw umin i16* %a, i16 %b seq_cst 3362 ret i16 %1 3363} 3364 3365define i32 @atomicrmw_xchg_i32_monotonic(i32* %a, i32 %b) nounwind { 3366; CSKY-LABEL: atomicrmw_xchg_i32_monotonic: 3367; CSKY: # %bb.0: 3368; CSKY-NEXT: subi16 sp, sp, 4 3369; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3370; CSKY-NEXT: movi16 a2, 0 3371; CSKY-NEXT: jsri32 [.LCPI110_0] 3372; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3373; CSKY-NEXT: addi16 sp, sp, 4 3374; CSKY-NEXT: rts16 3375; CSKY-NEXT: .p2align 1 3376; CSKY-NEXT: # %bb.1: 3377; CSKY-NEXT: .p2align 2 3378; CSKY-NEXT: .LCPI110_0: 3379; CSKY-NEXT: .long __atomic_exchange_4 3380; 3381 %1 = atomicrmw xchg i32* %a, i32 %b monotonic 3382 ret i32 %1 3383} 3384 3385define i32 @atomicrmw_xchg_i32_acquire(i32* %a, i32 %b) nounwind { 3386; CSKY-LABEL: atomicrmw_xchg_i32_acquire: 3387; CSKY: # %bb.0: 3388; CSKY-NEXT: subi16 sp, sp, 4 3389; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3390; CSKY-NEXT: movi16 a2, 2 3391; CSKY-NEXT: jsri32 [.LCPI111_0] 3392; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3393; CSKY-NEXT: addi16 sp, sp, 4 3394; CSKY-NEXT: rts16 3395; CSKY-NEXT: .p2align 1 3396; CSKY-NEXT: # %bb.1: 3397; CSKY-NEXT: .p2align 2 3398; CSKY-NEXT: .LCPI111_0: 3399; CSKY-NEXT: .long __atomic_exchange_4 3400; 3401 %1 = atomicrmw xchg i32* %a, i32 %b acquire 3402 ret i32 %1 3403} 3404 3405define i32 @atomicrmw_xchg_i32_release(i32* %a, i32 %b) nounwind { 3406; CSKY-LABEL: atomicrmw_xchg_i32_release: 3407; CSKY: # %bb.0: 3408; CSKY-NEXT: subi16 sp, sp, 4 3409; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3410; CSKY-NEXT: movi16 a2, 3 3411; CSKY-NEXT: jsri32 [.LCPI112_0] 3412; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3413; CSKY-NEXT: addi16 sp, sp, 4 3414; CSKY-NEXT: rts16 3415; CSKY-NEXT: .p2align 1 3416; CSKY-NEXT: # %bb.1: 3417; CSKY-NEXT: .p2align 2 3418; CSKY-NEXT: .LCPI112_0: 3419; CSKY-NEXT: .long __atomic_exchange_4 3420; 3421 %1 = atomicrmw xchg i32* %a, i32 %b release 3422 ret i32 %1 3423} 3424 3425define i32 @atomicrmw_xchg_i32_acq_rel(i32* %a, i32 %b) nounwind { 3426; CSKY-LABEL: atomicrmw_xchg_i32_acq_rel: 3427; CSKY: # %bb.0: 3428; CSKY-NEXT: subi16 sp, sp, 4 3429; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3430; CSKY-NEXT: movi16 a2, 4 3431; CSKY-NEXT: jsri32 [.LCPI113_0] 3432; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3433; CSKY-NEXT: addi16 sp, sp, 4 3434; CSKY-NEXT: rts16 3435; CSKY-NEXT: .p2align 1 3436; CSKY-NEXT: # %bb.1: 3437; CSKY-NEXT: .p2align 2 3438; CSKY-NEXT: .LCPI113_0: 3439; CSKY-NEXT: .long __atomic_exchange_4 3440; 3441 %1 = atomicrmw xchg i32* %a, i32 %b acq_rel 3442 ret i32 %1 3443} 3444 3445define i32 @atomicrmw_xchg_i32_seq_cst(i32* %a, i32 %b) nounwind { 3446; CSKY-LABEL: atomicrmw_xchg_i32_seq_cst: 3447; CSKY: # %bb.0: 3448; CSKY-NEXT: subi16 sp, sp, 4 3449; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3450; CSKY-NEXT: movi16 a2, 5 3451; CSKY-NEXT: jsri32 [.LCPI114_0] 3452; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3453; CSKY-NEXT: addi16 sp, sp, 4 3454; CSKY-NEXT: rts16 3455; CSKY-NEXT: .p2align 1 3456; CSKY-NEXT: # %bb.1: 3457; CSKY-NEXT: .p2align 2 3458; CSKY-NEXT: .LCPI114_0: 3459; CSKY-NEXT: .long __atomic_exchange_4 3460; 3461 %1 = atomicrmw xchg i32* %a, i32 %b seq_cst 3462 ret i32 %1 3463} 3464 3465define i32 @atomicrmw_add_i32_monotonic(i32 *%a, i32 %b) nounwind { 3466; CSKY-LABEL: atomicrmw_add_i32_monotonic: 3467; CSKY: # %bb.0: 3468; CSKY-NEXT: subi16 sp, sp, 4 3469; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3470; CSKY-NEXT: movi16 a2, 0 3471; CSKY-NEXT: jsri32 [.LCPI115_0] 3472; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3473; CSKY-NEXT: addi16 sp, sp, 4 3474; CSKY-NEXT: rts16 3475; CSKY-NEXT: .p2align 1 3476; CSKY-NEXT: # %bb.1: 3477; CSKY-NEXT: .p2align 2 3478; CSKY-NEXT: .LCPI115_0: 3479; CSKY-NEXT: .long __atomic_fetch_add_4 3480; 3481 %1 = atomicrmw add i32* %a, i32 %b monotonic 3482 ret i32 %1 3483} 3484 3485define i32 @atomicrmw_add_i32_acquire(i32 *%a, i32 %b) nounwind { 3486; CSKY-LABEL: atomicrmw_add_i32_acquire: 3487; CSKY: # %bb.0: 3488; CSKY-NEXT: subi16 sp, sp, 4 3489; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3490; CSKY-NEXT: movi16 a2, 2 3491; CSKY-NEXT: jsri32 [.LCPI116_0] 3492; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3493; CSKY-NEXT: addi16 sp, sp, 4 3494; CSKY-NEXT: rts16 3495; CSKY-NEXT: .p2align 1 3496; CSKY-NEXT: # %bb.1: 3497; CSKY-NEXT: .p2align 2 3498; CSKY-NEXT: .LCPI116_0: 3499; CSKY-NEXT: .long __atomic_fetch_add_4 3500; 3501 %1 = atomicrmw add i32* %a, i32 %b acquire 3502 ret i32 %1 3503} 3504 3505define i32 @atomicrmw_add_i32_release(i32 *%a, i32 %b) nounwind { 3506; CSKY-LABEL: atomicrmw_add_i32_release: 3507; CSKY: # %bb.0: 3508; CSKY-NEXT: subi16 sp, sp, 4 3509; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3510; CSKY-NEXT: movi16 a2, 3 3511; CSKY-NEXT: jsri32 [.LCPI117_0] 3512; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3513; CSKY-NEXT: addi16 sp, sp, 4 3514; CSKY-NEXT: rts16 3515; CSKY-NEXT: .p2align 1 3516; CSKY-NEXT: # %bb.1: 3517; CSKY-NEXT: .p2align 2 3518; CSKY-NEXT: .LCPI117_0: 3519; CSKY-NEXT: .long __atomic_fetch_add_4 3520; 3521 %1 = atomicrmw add i32* %a, i32 %b release 3522 ret i32 %1 3523} 3524 3525define i32 @atomicrmw_add_i32_acq_rel(i32 *%a, i32 %b) nounwind { 3526; CSKY-LABEL: atomicrmw_add_i32_acq_rel: 3527; CSKY: # %bb.0: 3528; CSKY-NEXT: subi16 sp, sp, 4 3529; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3530; CSKY-NEXT: movi16 a2, 4 3531; CSKY-NEXT: jsri32 [.LCPI118_0] 3532; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3533; CSKY-NEXT: addi16 sp, sp, 4 3534; CSKY-NEXT: rts16 3535; CSKY-NEXT: .p2align 1 3536; CSKY-NEXT: # %bb.1: 3537; CSKY-NEXT: .p2align 2 3538; CSKY-NEXT: .LCPI118_0: 3539; CSKY-NEXT: .long __atomic_fetch_add_4 3540; 3541 %1 = atomicrmw add i32* %a, i32 %b acq_rel 3542 ret i32 %1 3543} 3544 3545define i32 @atomicrmw_add_i32_seq_cst(i32 *%a, i32 %b) nounwind { 3546; CSKY-LABEL: atomicrmw_add_i32_seq_cst: 3547; CSKY: # %bb.0: 3548; CSKY-NEXT: subi16 sp, sp, 4 3549; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3550; CSKY-NEXT: movi16 a2, 5 3551; CSKY-NEXT: jsri32 [.LCPI119_0] 3552; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3553; CSKY-NEXT: addi16 sp, sp, 4 3554; CSKY-NEXT: rts16 3555; CSKY-NEXT: .p2align 1 3556; CSKY-NEXT: # %bb.1: 3557; CSKY-NEXT: .p2align 2 3558; CSKY-NEXT: .LCPI119_0: 3559; CSKY-NEXT: .long __atomic_fetch_add_4 3560; 3561 %1 = atomicrmw add i32* %a, i32 %b seq_cst 3562 ret i32 %1 3563} 3564 3565define i32 @atomicrmw_sub_i32_monotonic(i32* %a, i32 %b) nounwind { 3566; CSKY-LABEL: atomicrmw_sub_i32_monotonic: 3567; CSKY: # %bb.0: 3568; CSKY-NEXT: subi16 sp, sp, 4 3569; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3570; CSKY-NEXT: movi16 a2, 0 3571; CSKY-NEXT: jsri32 [.LCPI120_0] 3572; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3573; CSKY-NEXT: addi16 sp, sp, 4 3574; CSKY-NEXT: rts16 3575; CSKY-NEXT: .p2align 1 3576; CSKY-NEXT: # %bb.1: 3577; CSKY-NEXT: .p2align 2 3578; CSKY-NEXT: .LCPI120_0: 3579; CSKY-NEXT: .long __atomic_fetch_sub_4 3580; 3581 %1 = atomicrmw sub i32* %a, i32 %b monotonic 3582 ret i32 %1 3583} 3584 3585define i32 @atomicrmw_sub_i32_acquire(i32* %a, i32 %b) nounwind { 3586; CSKY-LABEL: atomicrmw_sub_i32_acquire: 3587; CSKY: # %bb.0: 3588; CSKY-NEXT: subi16 sp, sp, 4 3589; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3590; CSKY-NEXT: movi16 a2, 2 3591; CSKY-NEXT: jsri32 [.LCPI121_0] 3592; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3593; CSKY-NEXT: addi16 sp, sp, 4 3594; CSKY-NEXT: rts16 3595; CSKY-NEXT: .p2align 1 3596; CSKY-NEXT: # %bb.1: 3597; CSKY-NEXT: .p2align 2 3598; CSKY-NEXT: .LCPI121_0: 3599; CSKY-NEXT: .long __atomic_fetch_sub_4 3600; 3601 %1 = atomicrmw sub i32* %a, i32 %b acquire 3602 ret i32 %1 3603} 3604 3605define i32 @atomicrmw_sub_i32_release(i32* %a, i32 %b) nounwind { 3606; CSKY-LABEL: atomicrmw_sub_i32_release: 3607; CSKY: # %bb.0: 3608; CSKY-NEXT: subi16 sp, sp, 4 3609; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3610; CSKY-NEXT: movi16 a2, 3 3611; CSKY-NEXT: jsri32 [.LCPI122_0] 3612; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3613; CSKY-NEXT: addi16 sp, sp, 4 3614; CSKY-NEXT: rts16 3615; CSKY-NEXT: .p2align 1 3616; CSKY-NEXT: # %bb.1: 3617; CSKY-NEXT: .p2align 2 3618; CSKY-NEXT: .LCPI122_0: 3619; CSKY-NEXT: .long __atomic_fetch_sub_4 3620; 3621 %1 = atomicrmw sub i32* %a, i32 %b release 3622 ret i32 %1 3623} 3624 3625define i32 @atomicrmw_sub_i32_acq_rel(i32* %a, i32 %b) nounwind { 3626; CSKY-LABEL: atomicrmw_sub_i32_acq_rel: 3627; CSKY: # %bb.0: 3628; CSKY-NEXT: subi16 sp, sp, 4 3629; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3630; CSKY-NEXT: movi16 a2, 4 3631; CSKY-NEXT: jsri32 [.LCPI123_0] 3632; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3633; CSKY-NEXT: addi16 sp, sp, 4 3634; CSKY-NEXT: rts16 3635; CSKY-NEXT: .p2align 1 3636; CSKY-NEXT: # %bb.1: 3637; CSKY-NEXT: .p2align 2 3638; CSKY-NEXT: .LCPI123_0: 3639; CSKY-NEXT: .long __atomic_fetch_sub_4 3640; 3641 %1 = atomicrmw sub i32* %a, i32 %b acq_rel 3642 ret i32 %1 3643} 3644 3645define i32 @atomicrmw_sub_i32_seq_cst(i32* %a, i32 %b) nounwind { 3646; CSKY-LABEL: atomicrmw_sub_i32_seq_cst: 3647; CSKY: # %bb.0: 3648; CSKY-NEXT: subi16 sp, sp, 4 3649; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3650; CSKY-NEXT: movi16 a2, 5 3651; CSKY-NEXT: jsri32 [.LCPI124_0] 3652; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3653; CSKY-NEXT: addi16 sp, sp, 4 3654; CSKY-NEXT: rts16 3655; CSKY-NEXT: .p2align 1 3656; CSKY-NEXT: # %bb.1: 3657; CSKY-NEXT: .p2align 2 3658; CSKY-NEXT: .LCPI124_0: 3659; CSKY-NEXT: .long __atomic_fetch_sub_4 3660; 3661 %1 = atomicrmw sub i32* %a, i32 %b seq_cst 3662 ret i32 %1 3663} 3664 3665define i32 @atomicrmw_and_i32_monotonic(i32 *%a, i32 %b) nounwind { 3666; CSKY-LABEL: atomicrmw_and_i32_monotonic: 3667; CSKY: # %bb.0: 3668; CSKY-NEXT: subi16 sp, sp, 4 3669; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3670; CSKY-NEXT: movi16 a2, 0 3671; CSKY-NEXT: jsri32 [.LCPI125_0] 3672; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3673; CSKY-NEXT: addi16 sp, sp, 4 3674; CSKY-NEXT: rts16 3675; CSKY-NEXT: .p2align 1 3676; CSKY-NEXT: # %bb.1: 3677; CSKY-NEXT: .p2align 2 3678; CSKY-NEXT: .LCPI125_0: 3679; CSKY-NEXT: .long __atomic_fetch_and_4 3680; 3681 %1 = atomicrmw and i32* %a, i32 %b monotonic 3682 ret i32 %1 3683} 3684 3685define i32 @atomicrmw_and_i32_acquire(i32 *%a, i32 %b) nounwind { 3686; CSKY-LABEL: atomicrmw_and_i32_acquire: 3687; CSKY: # %bb.0: 3688; CSKY-NEXT: subi16 sp, sp, 4 3689; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3690; CSKY-NEXT: movi16 a2, 2 3691; CSKY-NEXT: jsri32 [.LCPI126_0] 3692; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3693; CSKY-NEXT: addi16 sp, sp, 4 3694; CSKY-NEXT: rts16 3695; CSKY-NEXT: .p2align 1 3696; CSKY-NEXT: # %bb.1: 3697; CSKY-NEXT: .p2align 2 3698; CSKY-NEXT: .LCPI126_0: 3699; CSKY-NEXT: .long __atomic_fetch_and_4 3700; 3701 %1 = atomicrmw and i32* %a, i32 %b acquire 3702 ret i32 %1 3703} 3704 3705define i32 @atomicrmw_and_i32_release(i32 *%a, i32 %b) nounwind { 3706; CSKY-LABEL: atomicrmw_and_i32_release: 3707; CSKY: # %bb.0: 3708; CSKY-NEXT: subi16 sp, sp, 4 3709; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3710; CSKY-NEXT: movi16 a2, 3 3711; CSKY-NEXT: jsri32 [.LCPI127_0] 3712; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3713; CSKY-NEXT: addi16 sp, sp, 4 3714; CSKY-NEXT: rts16 3715; CSKY-NEXT: .p2align 1 3716; CSKY-NEXT: # %bb.1: 3717; CSKY-NEXT: .p2align 2 3718; CSKY-NEXT: .LCPI127_0: 3719; CSKY-NEXT: .long __atomic_fetch_and_4 3720; 3721 %1 = atomicrmw and i32* %a, i32 %b release 3722 ret i32 %1 3723} 3724 3725define i32 @atomicrmw_and_i32_acq_rel(i32 *%a, i32 %b) nounwind { 3726; CSKY-LABEL: atomicrmw_and_i32_acq_rel: 3727; CSKY: # %bb.0: 3728; CSKY-NEXT: subi16 sp, sp, 4 3729; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3730; CSKY-NEXT: movi16 a2, 4 3731; CSKY-NEXT: jsri32 [.LCPI128_0] 3732; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3733; CSKY-NEXT: addi16 sp, sp, 4 3734; CSKY-NEXT: rts16 3735; CSKY-NEXT: .p2align 1 3736; CSKY-NEXT: # %bb.1: 3737; CSKY-NEXT: .p2align 2 3738; CSKY-NEXT: .LCPI128_0: 3739; CSKY-NEXT: .long __atomic_fetch_and_4 3740; 3741 %1 = atomicrmw and i32* %a, i32 %b acq_rel 3742 ret i32 %1 3743} 3744 3745define i32 @atomicrmw_and_i32_seq_cst(i32 *%a, i32 %b) nounwind { 3746; CSKY-LABEL: atomicrmw_and_i32_seq_cst: 3747; CSKY: # %bb.0: 3748; CSKY-NEXT: subi16 sp, sp, 4 3749; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3750; CSKY-NEXT: movi16 a2, 5 3751; CSKY-NEXT: jsri32 [.LCPI129_0] 3752; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3753; CSKY-NEXT: addi16 sp, sp, 4 3754; CSKY-NEXT: rts16 3755; CSKY-NEXT: .p2align 1 3756; CSKY-NEXT: # %bb.1: 3757; CSKY-NEXT: .p2align 2 3758; CSKY-NEXT: .LCPI129_0: 3759; CSKY-NEXT: .long __atomic_fetch_and_4 3760; 3761 %1 = atomicrmw and i32* %a, i32 %b seq_cst 3762 ret i32 %1 3763} 3764 3765define i32 @atomicrmw_nand_i32_monotonic(i32* %a, i32 %b) nounwind { 3766; CSKY-LABEL: atomicrmw_nand_i32_monotonic: 3767; CSKY: # %bb.0: 3768; CSKY-NEXT: subi16 sp, sp, 4 3769; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3770; CSKY-NEXT: movi16 a2, 0 3771; CSKY-NEXT: jsri32 [.LCPI130_0] 3772; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3773; CSKY-NEXT: addi16 sp, sp, 4 3774; CSKY-NEXT: rts16 3775; CSKY-NEXT: .p2align 1 3776; CSKY-NEXT: # %bb.1: 3777; CSKY-NEXT: .p2align 2 3778; CSKY-NEXT: .LCPI130_0: 3779; CSKY-NEXT: .long __atomic_fetch_nand_4 3780; 3781 %1 = atomicrmw nand i32* %a, i32 %b monotonic 3782 ret i32 %1 3783} 3784 3785define i32 @atomicrmw_nand_i32_acquire(i32* %a, i32 %b) nounwind { 3786; CSKY-LABEL: atomicrmw_nand_i32_acquire: 3787; CSKY: # %bb.0: 3788; CSKY-NEXT: subi16 sp, sp, 4 3789; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3790; CSKY-NEXT: movi16 a2, 2 3791; CSKY-NEXT: jsri32 [.LCPI131_0] 3792; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3793; CSKY-NEXT: addi16 sp, sp, 4 3794; CSKY-NEXT: rts16 3795; CSKY-NEXT: .p2align 1 3796; CSKY-NEXT: # %bb.1: 3797; CSKY-NEXT: .p2align 2 3798; CSKY-NEXT: .LCPI131_0: 3799; CSKY-NEXT: .long __atomic_fetch_nand_4 3800; 3801 %1 = atomicrmw nand i32* %a, i32 %b acquire 3802 ret i32 %1 3803} 3804 3805define i32 @atomicrmw_nand_i32_release(i32* %a, i32 %b) nounwind { 3806; CSKY-LABEL: atomicrmw_nand_i32_release: 3807; CSKY: # %bb.0: 3808; CSKY-NEXT: subi16 sp, sp, 4 3809; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3810; CSKY-NEXT: movi16 a2, 3 3811; CSKY-NEXT: jsri32 [.LCPI132_0] 3812; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3813; CSKY-NEXT: addi16 sp, sp, 4 3814; CSKY-NEXT: rts16 3815; CSKY-NEXT: .p2align 1 3816; CSKY-NEXT: # %bb.1: 3817; CSKY-NEXT: .p2align 2 3818; CSKY-NEXT: .LCPI132_0: 3819; CSKY-NEXT: .long __atomic_fetch_nand_4 3820; 3821 %1 = atomicrmw nand i32* %a, i32 %b release 3822 ret i32 %1 3823} 3824 3825define i32 @atomicrmw_nand_i32_acq_rel(i32* %a, i32 %b) nounwind { 3826; CSKY-LABEL: atomicrmw_nand_i32_acq_rel: 3827; CSKY: # %bb.0: 3828; CSKY-NEXT: subi16 sp, sp, 4 3829; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3830; CSKY-NEXT: movi16 a2, 4 3831; CSKY-NEXT: jsri32 [.LCPI133_0] 3832; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3833; CSKY-NEXT: addi16 sp, sp, 4 3834; CSKY-NEXT: rts16 3835; CSKY-NEXT: .p2align 1 3836; CSKY-NEXT: # %bb.1: 3837; CSKY-NEXT: .p2align 2 3838; CSKY-NEXT: .LCPI133_0: 3839; CSKY-NEXT: .long __atomic_fetch_nand_4 3840; 3841 %1 = atomicrmw nand i32* %a, i32 %b acq_rel 3842 ret i32 %1 3843} 3844 3845define i32 @atomicrmw_nand_i32_seq_cst(i32* %a, i32 %b) nounwind { 3846; CSKY-LABEL: atomicrmw_nand_i32_seq_cst: 3847; CSKY: # %bb.0: 3848; CSKY-NEXT: subi16 sp, sp, 4 3849; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3850; CSKY-NEXT: movi16 a2, 5 3851; CSKY-NEXT: jsri32 [.LCPI134_0] 3852; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3853; CSKY-NEXT: addi16 sp, sp, 4 3854; CSKY-NEXT: rts16 3855; CSKY-NEXT: .p2align 1 3856; CSKY-NEXT: # %bb.1: 3857; CSKY-NEXT: .p2align 2 3858; CSKY-NEXT: .LCPI134_0: 3859; CSKY-NEXT: .long __atomic_fetch_nand_4 3860; 3861 %1 = atomicrmw nand i32* %a, i32 %b seq_cst 3862 ret i32 %1 3863} 3864 3865define i32 @atomicrmw_or_i32_monotonic(i32 *%a, i32 %b) nounwind { 3866; CSKY-LABEL: atomicrmw_or_i32_monotonic: 3867; CSKY: # %bb.0: 3868; CSKY-NEXT: subi16 sp, sp, 4 3869; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3870; CSKY-NEXT: movi16 a2, 0 3871; CSKY-NEXT: jsri32 [.LCPI135_0] 3872; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3873; CSKY-NEXT: addi16 sp, sp, 4 3874; CSKY-NEXT: rts16 3875; CSKY-NEXT: .p2align 1 3876; CSKY-NEXT: # %bb.1: 3877; CSKY-NEXT: .p2align 2 3878; CSKY-NEXT: .LCPI135_0: 3879; CSKY-NEXT: .long __atomic_fetch_or_4 3880; 3881 %1 = atomicrmw or i32* %a, i32 %b monotonic 3882 ret i32 %1 3883} 3884 3885define i32 @atomicrmw_or_i32_acquire(i32 *%a, i32 %b) nounwind { 3886; CSKY-LABEL: atomicrmw_or_i32_acquire: 3887; CSKY: # %bb.0: 3888; CSKY-NEXT: subi16 sp, sp, 4 3889; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3890; CSKY-NEXT: movi16 a2, 2 3891; CSKY-NEXT: jsri32 [.LCPI136_0] 3892; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3893; CSKY-NEXT: addi16 sp, sp, 4 3894; CSKY-NEXT: rts16 3895; CSKY-NEXT: .p2align 1 3896; CSKY-NEXT: # %bb.1: 3897; CSKY-NEXT: .p2align 2 3898; CSKY-NEXT: .LCPI136_0: 3899; CSKY-NEXT: .long __atomic_fetch_or_4 3900; 3901 %1 = atomicrmw or i32* %a, i32 %b acquire 3902 ret i32 %1 3903} 3904 3905define i32 @atomicrmw_or_i32_release(i32 *%a, i32 %b) nounwind { 3906; CSKY-LABEL: atomicrmw_or_i32_release: 3907; CSKY: # %bb.0: 3908; CSKY-NEXT: subi16 sp, sp, 4 3909; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3910; CSKY-NEXT: movi16 a2, 3 3911; CSKY-NEXT: jsri32 [.LCPI137_0] 3912; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3913; CSKY-NEXT: addi16 sp, sp, 4 3914; CSKY-NEXT: rts16 3915; CSKY-NEXT: .p2align 1 3916; CSKY-NEXT: # %bb.1: 3917; CSKY-NEXT: .p2align 2 3918; CSKY-NEXT: .LCPI137_0: 3919; CSKY-NEXT: .long __atomic_fetch_or_4 3920; 3921 %1 = atomicrmw or i32* %a, i32 %b release 3922 ret i32 %1 3923} 3924 3925define i32 @atomicrmw_or_i32_acq_rel(i32 *%a, i32 %b) nounwind { 3926; CSKY-LABEL: atomicrmw_or_i32_acq_rel: 3927; CSKY: # %bb.0: 3928; CSKY-NEXT: subi16 sp, sp, 4 3929; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3930; CSKY-NEXT: movi16 a2, 4 3931; CSKY-NEXT: jsri32 [.LCPI138_0] 3932; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3933; CSKY-NEXT: addi16 sp, sp, 4 3934; CSKY-NEXT: rts16 3935; CSKY-NEXT: .p2align 1 3936; CSKY-NEXT: # %bb.1: 3937; CSKY-NEXT: .p2align 2 3938; CSKY-NEXT: .LCPI138_0: 3939; CSKY-NEXT: .long __atomic_fetch_or_4 3940; 3941 %1 = atomicrmw or i32* %a, i32 %b acq_rel 3942 ret i32 %1 3943} 3944 3945define i32 @atomicrmw_or_i32_seq_cst(i32 *%a, i32 %b) nounwind { 3946; CSKY-LABEL: atomicrmw_or_i32_seq_cst: 3947; CSKY: # %bb.0: 3948; CSKY-NEXT: subi16 sp, sp, 4 3949; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3950; CSKY-NEXT: movi16 a2, 5 3951; CSKY-NEXT: jsri32 [.LCPI139_0] 3952; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3953; CSKY-NEXT: addi16 sp, sp, 4 3954; CSKY-NEXT: rts16 3955; CSKY-NEXT: .p2align 1 3956; CSKY-NEXT: # %bb.1: 3957; CSKY-NEXT: .p2align 2 3958; CSKY-NEXT: .LCPI139_0: 3959; CSKY-NEXT: .long __atomic_fetch_or_4 3960; 3961 %1 = atomicrmw or i32* %a, i32 %b seq_cst 3962 ret i32 %1 3963} 3964 3965define i32 @atomicrmw_xor_i32_monotonic(i32 *%a, i32 %b) nounwind { 3966; CSKY-LABEL: atomicrmw_xor_i32_monotonic: 3967; CSKY: # %bb.0: 3968; CSKY-NEXT: subi16 sp, sp, 4 3969; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3970; CSKY-NEXT: movi16 a2, 0 3971; CSKY-NEXT: jsri32 [.LCPI140_0] 3972; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3973; CSKY-NEXT: addi16 sp, sp, 4 3974; CSKY-NEXT: rts16 3975; CSKY-NEXT: .p2align 1 3976; CSKY-NEXT: # %bb.1: 3977; CSKY-NEXT: .p2align 2 3978; CSKY-NEXT: .LCPI140_0: 3979; CSKY-NEXT: .long __atomic_fetch_xor_4 3980; 3981 %1 = atomicrmw xor i32* %a, i32 %b monotonic 3982 ret i32 %1 3983} 3984 3985define i32 @atomicrmw_xor_i32_acquire(i32 *%a, i32 %b) nounwind { 3986; CSKY-LABEL: atomicrmw_xor_i32_acquire: 3987; CSKY: # %bb.0: 3988; CSKY-NEXT: subi16 sp, sp, 4 3989; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 3990; CSKY-NEXT: movi16 a2, 2 3991; CSKY-NEXT: jsri32 [.LCPI141_0] 3992; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 3993; CSKY-NEXT: addi16 sp, sp, 4 3994; CSKY-NEXT: rts16 3995; CSKY-NEXT: .p2align 1 3996; CSKY-NEXT: # %bb.1: 3997; CSKY-NEXT: .p2align 2 3998; CSKY-NEXT: .LCPI141_0: 3999; CSKY-NEXT: .long __atomic_fetch_xor_4 4000; 4001 %1 = atomicrmw xor i32* %a, i32 %b acquire 4002 ret i32 %1 4003} 4004 4005define i32 @atomicrmw_xor_i32_release(i32 *%a, i32 %b) nounwind { 4006; CSKY-LABEL: atomicrmw_xor_i32_release: 4007; CSKY: # %bb.0: 4008; CSKY-NEXT: subi16 sp, sp, 4 4009; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 4010; CSKY-NEXT: movi16 a2, 3 4011; CSKY-NEXT: jsri32 [.LCPI142_0] 4012; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 4013; CSKY-NEXT: addi16 sp, sp, 4 4014; CSKY-NEXT: rts16 4015; CSKY-NEXT: .p2align 1 4016; CSKY-NEXT: # %bb.1: 4017; CSKY-NEXT: .p2align 2 4018; CSKY-NEXT: .LCPI142_0: 4019; CSKY-NEXT: .long __atomic_fetch_xor_4 4020; 4021 %1 = atomicrmw xor i32* %a, i32 %b release 4022 ret i32 %1 4023} 4024 4025define i32 @atomicrmw_xor_i32_acq_rel(i32 *%a, i32 %b) nounwind { 4026; CSKY-LABEL: atomicrmw_xor_i32_acq_rel: 4027; CSKY: # %bb.0: 4028; CSKY-NEXT: subi16 sp, sp, 4 4029; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 4030; CSKY-NEXT: movi16 a2, 4 4031; CSKY-NEXT: jsri32 [.LCPI143_0] 4032; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 4033; CSKY-NEXT: addi16 sp, sp, 4 4034; CSKY-NEXT: rts16 4035; CSKY-NEXT: .p2align 1 4036; CSKY-NEXT: # %bb.1: 4037; CSKY-NEXT: .p2align 2 4038; CSKY-NEXT: .LCPI143_0: 4039; CSKY-NEXT: .long __atomic_fetch_xor_4 4040; 4041 %1 = atomicrmw xor i32* %a, i32 %b acq_rel 4042 ret i32 %1 4043} 4044 4045define i32 @atomicrmw_xor_i32_seq_cst(i32 *%a, i32 %b) nounwind { 4046; CSKY-LABEL: atomicrmw_xor_i32_seq_cst: 4047; CSKY: # %bb.0: 4048; CSKY-NEXT: subi16 sp, sp, 4 4049; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 4050; CSKY-NEXT: movi16 a2, 5 4051; CSKY-NEXT: jsri32 [.LCPI144_0] 4052; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 4053; CSKY-NEXT: addi16 sp, sp, 4 4054; CSKY-NEXT: rts16 4055; CSKY-NEXT: .p2align 1 4056; CSKY-NEXT: # %bb.1: 4057; CSKY-NEXT: .p2align 2 4058; CSKY-NEXT: .LCPI144_0: 4059; CSKY-NEXT: .long __atomic_fetch_xor_4 4060; 4061 %1 = atomicrmw xor i32* %a, i32 %b seq_cst 4062 ret i32 %1 4063} 4064 4065define i32 @atomicrmw_max_i32_monotonic(i32 *%a, i32 %b) nounwind { 4066; CSKY-LABEL: atomicrmw_max_i32_monotonic: 4067; CSKY: # %bb.0: 4068; CSKY-NEXT: subi16 sp, sp, 16 4069; CSKY-NEXT: st16.w l2, (sp, 12) 4070; CSKY-NEXT: st16.w l1, (sp, 8) 4071; CSKY-NEXT: st16.w l0, (sp, 4) 4072; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 4073; CSKY-NEXT: subi16 sp, sp, 8 4074; CSKY-NEXT: mov16 l0, a1 4075; CSKY-NEXT: mov16 l1, a0 4076; CSKY-NEXT: ld16.w a0, (a0, 0) 4077; CSKY-NEXT: movi16 l2, 0 4078; CSKY-NEXT: .LBB145_1: # %atomicrmw.start 4079; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 4080; CSKY-NEXT: cmplt16 l0, a0 4081; CSKY-NEXT: mov16 a2, l0 4082; CSKY-NEXT: movt32 a2, a0 4083; CSKY-NEXT: st16.w a0, (sp, 4) 4084; CSKY-NEXT: st16.w l2, (sp, 0) 4085; CSKY-NEXT: mov16 a0, l1 4086; CSKY-NEXT: addi16 a1, sp, 4 4087; CSKY-NEXT: movi16 a3, 0 4088; CSKY-NEXT: jsri32 [.LCPI145_0] 4089; CSKY-NEXT: mov16 a1, a0 4090; CSKY-NEXT: ld16.w a0, (sp, 4) 4091; CSKY-NEXT: bez32 a1, .LBB145_1 4092; CSKY-NEXT: # %bb.2: # %atomicrmw.end 4093; CSKY-NEXT: addi16 sp, sp, 8 4094; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 4095; CSKY-NEXT: ld16.w l0, (sp, 4) 4096; CSKY-NEXT: ld16.w l1, (sp, 8) 4097; CSKY-NEXT: ld16.w l2, (sp, 12) 4098; CSKY-NEXT: addi16 sp, sp, 16 4099; CSKY-NEXT: rts16 4100; CSKY-NEXT: .p2align 1 4101; CSKY-NEXT: # %bb.3: 4102; CSKY-NEXT: .p2align 2 4103; CSKY-NEXT: .LCPI145_0: 4104; CSKY-NEXT: .long __atomic_compare_exchange_4 4105; 4106 %1 = atomicrmw max i32* %a, i32 %b monotonic 4107 ret i32 %1 4108} 4109 4110define i32 @atomicrmw_max_i32_acquire(i32 *%a, i32 %b) nounwind { 4111; CSKY-LABEL: atomicrmw_max_i32_acquire: 4112; CSKY: # %bb.0: 4113; CSKY-NEXT: subi16 sp, sp, 16 4114; CSKY-NEXT: st16.w l2, (sp, 12) 4115; CSKY-NEXT: st16.w l1, (sp, 8) 4116; CSKY-NEXT: st16.w l0, (sp, 4) 4117; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 4118; CSKY-NEXT: subi16 sp, sp, 8 4119; CSKY-NEXT: mov16 l0, a1 4120; CSKY-NEXT: mov16 l1, a0 4121; CSKY-NEXT: ld16.w a0, (a0, 0) 4122; CSKY-NEXT: movi16 l2, 2 4123; CSKY-NEXT: .LBB146_1: # %atomicrmw.start 4124; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 4125; CSKY-NEXT: cmplt16 l0, a0 4126; CSKY-NEXT: mov16 a2, l0 4127; CSKY-NEXT: movt32 a2, a0 4128; CSKY-NEXT: st16.w a0, (sp, 4) 4129; CSKY-NEXT: st16.w l2, (sp, 0) 4130; CSKY-NEXT: mov16 a0, l1 4131; CSKY-NEXT: addi16 a1, sp, 4 4132; CSKY-NEXT: movi16 a3, 2 4133; CSKY-NEXT: jsri32 [.LCPI146_0] 4134; CSKY-NEXT: mov16 a1, a0 4135; CSKY-NEXT: ld16.w a0, (sp, 4) 4136; CSKY-NEXT: bez32 a1, .LBB146_1 4137; CSKY-NEXT: # %bb.2: # %atomicrmw.end 4138; CSKY-NEXT: addi16 sp, sp, 8 4139; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 4140; CSKY-NEXT: ld16.w l0, (sp, 4) 4141; CSKY-NEXT: ld16.w l1, (sp, 8) 4142; CSKY-NEXT: ld16.w l2, (sp, 12) 4143; CSKY-NEXT: addi16 sp, sp, 16 4144; CSKY-NEXT: rts16 4145; CSKY-NEXT: .p2align 1 4146; CSKY-NEXT: # %bb.3: 4147; CSKY-NEXT: .p2align 2 4148; CSKY-NEXT: .LCPI146_0: 4149; CSKY-NEXT: .long __atomic_compare_exchange_4 4150; 4151 %1 = atomicrmw max i32* %a, i32 %b acquire 4152 ret i32 %1 4153} 4154 4155define i32 @atomicrmw_max_i32_release(i32 *%a, i32 %b) nounwind { 4156; CSKY-LABEL: atomicrmw_max_i32_release: 4157; CSKY: # %bb.0: 4158; CSKY-NEXT: subi16 sp, sp, 16 4159; CSKY-NEXT: st16.w l2, (sp, 12) 4160; CSKY-NEXT: st16.w l1, (sp, 8) 4161; CSKY-NEXT: st16.w l0, (sp, 4) 4162; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 4163; CSKY-NEXT: subi16 sp, sp, 8 4164; CSKY-NEXT: mov16 l0, a1 4165; CSKY-NEXT: mov16 l1, a0 4166; CSKY-NEXT: ld16.w a0, (a0, 0) 4167; CSKY-NEXT: movi16 l2, 0 4168; CSKY-NEXT: .LBB147_1: # %atomicrmw.start 4169; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 4170; CSKY-NEXT: cmplt16 l0, a0 4171; CSKY-NEXT: mov16 a2, l0 4172; CSKY-NEXT: movt32 a2, a0 4173; CSKY-NEXT: st16.w a0, (sp, 4) 4174; CSKY-NEXT: st16.w l2, (sp, 0) 4175; CSKY-NEXT: mov16 a0, l1 4176; CSKY-NEXT: addi16 a1, sp, 4 4177; CSKY-NEXT: movi16 a3, 3 4178; CSKY-NEXT: jsri32 [.LCPI147_0] 4179; CSKY-NEXT: mov16 a1, a0 4180; CSKY-NEXT: ld16.w a0, (sp, 4) 4181; CSKY-NEXT: bez32 a1, .LBB147_1 4182; CSKY-NEXT: # %bb.2: # %atomicrmw.end 4183; CSKY-NEXT: addi16 sp, sp, 8 4184; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 4185; CSKY-NEXT: ld16.w l0, (sp, 4) 4186; CSKY-NEXT: ld16.w l1, (sp, 8) 4187; CSKY-NEXT: ld16.w l2, (sp, 12) 4188; CSKY-NEXT: addi16 sp, sp, 16 4189; CSKY-NEXT: rts16 4190; CSKY-NEXT: .p2align 1 4191; CSKY-NEXT: # %bb.3: 4192; CSKY-NEXT: .p2align 2 4193; CSKY-NEXT: .LCPI147_0: 4194; CSKY-NEXT: .long __atomic_compare_exchange_4 4195; 4196 %1 = atomicrmw max i32* %a, i32 %b release 4197 ret i32 %1 4198} 4199 4200define i32 @atomicrmw_max_i32_acq_rel(i32 *%a, i32 %b) nounwind { 4201; CSKY-LABEL: atomicrmw_max_i32_acq_rel: 4202; CSKY: # %bb.0: 4203; CSKY-NEXT: subi16 sp, sp, 16 4204; CSKY-NEXT: st16.w l2, (sp, 12) 4205; CSKY-NEXT: st16.w l1, (sp, 8) 4206; CSKY-NEXT: st16.w l0, (sp, 4) 4207; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 4208; CSKY-NEXT: subi16 sp, sp, 8 4209; CSKY-NEXT: mov16 l0, a1 4210; CSKY-NEXT: mov16 l1, a0 4211; CSKY-NEXT: ld16.w a0, (a0, 0) 4212; CSKY-NEXT: movi16 l2, 2 4213; CSKY-NEXT: .LBB148_1: # %atomicrmw.start 4214; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 4215; CSKY-NEXT: cmplt16 l0, a0 4216; CSKY-NEXT: mov16 a2, l0 4217; CSKY-NEXT: movt32 a2, a0 4218; CSKY-NEXT: st16.w a0, (sp, 4) 4219; CSKY-NEXT: st16.w l2, (sp, 0) 4220; CSKY-NEXT: mov16 a0, l1 4221; CSKY-NEXT: addi16 a1, sp, 4 4222; CSKY-NEXT: movi16 a3, 4 4223; CSKY-NEXT: jsri32 [.LCPI148_0] 4224; CSKY-NEXT: mov16 a1, a0 4225; CSKY-NEXT: ld16.w a0, (sp, 4) 4226; CSKY-NEXT: bez32 a1, .LBB148_1 4227; CSKY-NEXT: # %bb.2: # %atomicrmw.end 4228; CSKY-NEXT: addi16 sp, sp, 8 4229; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 4230; CSKY-NEXT: ld16.w l0, (sp, 4) 4231; CSKY-NEXT: ld16.w l1, (sp, 8) 4232; CSKY-NEXT: ld16.w l2, (sp, 12) 4233; CSKY-NEXT: addi16 sp, sp, 16 4234; CSKY-NEXT: rts16 4235; CSKY-NEXT: .p2align 1 4236; CSKY-NEXT: # %bb.3: 4237; CSKY-NEXT: .p2align 2 4238; CSKY-NEXT: .LCPI148_0: 4239; CSKY-NEXT: .long __atomic_compare_exchange_4 4240; 4241 %1 = atomicrmw max i32* %a, i32 %b acq_rel 4242 ret i32 %1 4243} 4244 4245define i32 @atomicrmw_max_i32_seq_cst(i32 *%a, i32 %b) nounwind { 4246; CSKY-LABEL: atomicrmw_max_i32_seq_cst: 4247; CSKY: # %bb.0: 4248; CSKY-NEXT: subi16 sp, sp, 16 4249; CSKY-NEXT: st16.w l2, (sp, 12) 4250; CSKY-NEXT: st16.w l1, (sp, 8) 4251; CSKY-NEXT: st16.w l0, (sp, 4) 4252; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 4253; CSKY-NEXT: subi16 sp, sp, 8 4254; CSKY-NEXT: mov16 l0, a1 4255; CSKY-NEXT: mov16 l1, a0 4256; CSKY-NEXT: ld16.w a0, (a0, 0) 4257; CSKY-NEXT: movi16 l2, 5 4258; CSKY-NEXT: .LBB149_1: # %atomicrmw.start 4259; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 4260; CSKY-NEXT: cmplt16 l0, a0 4261; CSKY-NEXT: mov16 a2, l0 4262; CSKY-NEXT: movt32 a2, a0 4263; CSKY-NEXT: st16.w a0, (sp, 4) 4264; CSKY-NEXT: st16.w l2, (sp, 0) 4265; CSKY-NEXT: mov16 a0, l1 4266; CSKY-NEXT: addi16 a1, sp, 4 4267; CSKY-NEXT: movi16 a3, 5 4268; CSKY-NEXT: jsri32 [.LCPI149_0] 4269; CSKY-NEXT: mov16 a1, a0 4270; CSKY-NEXT: ld16.w a0, (sp, 4) 4271; CSKY-NEXT: bez32 a1, .LBB149_1 4272; CSKY-NEXT: # %bb.2: # %atomicrmw.end 4273; CSKY-NEXT: addi16 sp, sp, 8 4274; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 4275; CSKY-NEXT: ld16.w l0, (sp, 4) 4276; CSKY-NEXT: ld16.w l1, (sp, 8) 4277; CSKY-NEXT: ld16.w l2, (sp, 12) 4278; CSKY-NEXT: addi16 sp, sp, 16 4279; CSKY-NEXT: rts16 4280; CSKY-NEXT: .p2align 1 4281; CSKY-NEXT: # %bb.3: 4282; CSKY-NEXT: .p2align 2 4283; CSKY-NEXT: .LCPI149_0: 4284; CSKY-NEXT: .long __atomic_compare_exchange_4 4285; 4286 %1 = atomicrmw max i32* %a, i32 %b seq_cst 4287 ret i32 %1 4288} 4289 4290define i32 @atomicrmw_min_i32_monotonic(i32 *%a, i32 %b) nounwind { 4291; CSKY-LABEL: atomicrmw_min_i32_monotonic: 4292; CSKY: # %bb.0: 4293; CSKY-NEXT: subi16 sp, sp, 16 4294; CSKY-NEXT: st16.w l2, (sp, 12) 4295; CSKY-NEXT: st16.w l1, (sp, 8) 4296; CSKY-NEXT: st16.w l0, (sp, 4) 4297; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 4298; CSKY-NEXT: subi16 sp, sp, 8 4299; CSKY-NEXT: mov16 l0, a1 4300; CSKY-NEXT: mov16 l1, a0 4301; CSKY-NEXT: ld16.w a0, (a0, 0) 4302; CSKY-NEXT: movi16 l2, 0 4303; CSKY-NEXT: .LBB150_1: # %atomicrmw.start 4304; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 4305; CSKY-NEXT: cmplt16 l0, a0 4306; CSKY-NEXT: mov16 a2, l0 4307; CSKY-NEXT: movf32 a2, a0 4308; CSKY-NEXT: st16.w a0, (sp, 4) 4309; CSKY-NEXT: st16.w l2, (sp, 0) 4310; CSKY-NEXT: mov16 a0, l1 4311; CSKY-NEXT: addi16 a1, sp, 4 4312; CSKY-NEXT: movi16 a3, 0 4313; CSKY-NEXT: jsri32 [.LCPI150_0] 4314; CSKY-NEXT: mov16 a1, a0 4315; CSKY-NEXT: ld16.w a0, (sp, 4) 4316; CSKY-NEXT: bez32 a1, .LBB150_1 4317; CSKY-NEXT: # %bb.2: # %atomicrmw.end 4318; CSKY-NEXT: addi16 sp, sp, 8 4319; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 4320; CSKY-NEXT: ld16.w l0, (sp, 4) 4321; CSKY-NEXT: ld16.w l1, (sp, 8) 4322; CSKY-NEXT: ld16.w l2, (sp, 12) 4323; CSKY-NEXT: addi16 sp, sp, 16 4324; CSKY-NEXT: rts16 4325; CSKY-NEXT: .p2align 1 4326; CSKY-NEXT: # %bb.3: 4327; CSKY-NEXT: .p2align 2 4328; CSKY-NEXT: .LCPI150_0: 4329; CSKY-NEXT: .long __atomic_compare_exchange_4 4330; 4331 %1 = atomicrmw min i32* %a, i32 %b monotonic 4332 ret i32 %1 4333} 4334 4335define i32 @atomicrmw_min_i32_acquire(i32 *%a, i32 %b) nounwind { 4336; CSKY-LABEL: atomicrmw_min_i32_acquire: 4337; CSKY: # %bb.0: 4338; CSKY-NEXT: subi16 sp, sp, 16 4339; CSKY-NEXT: st16.w l2, (sp, 12) 4340; CSKY-NEXT: st16.w l1, (sp, 8) 4341; CSKY-NEXT: st16.w l0, (sp, 4) 4342; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 4343; CSKY-NEXT: subi16 sp, sp, 8 4344; CSKY-NEXT: mov16 l0, a1 4345; CSKY-NEXT: mov16 l1, a0 4346; CSKY-NEXT: ld16.w a0, (a0, 0) 4347; CSKY-NEXT: movi16 l2, 2 4348; CSKY-NEXT: .LBB151_1: # %atomicrmw.start 4349; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 4350; CSKY-NEXT: cmplt16 l0, a0 4351; CSKY-NEXT: mov16 a2, l0 4352; CSKY-NEXT: movf32 a2, a0 4353; CSKY-NEXT: st16.w a0, (sp, 4) 4354; CSKY-NEXT: st16.w l2, (sp, 0) 4355; CSKY-NEXT: mov16 a0, l1 4356; CSKY-NEXT: addi16 a1, sp, 4 4357; CSKY-NEXT: movi16 a3, 2 4358; CSKY-NEXT: jsri32 [.LCPI151_0] 4359; CSKY-NEXT: mov16 a1, a0 4360; CSKY-NEXT: ld16.w a0, (sp, 4) 4361; CSKY-NEXT: bez32 a1, .LBB151_1 4362; CSKY-NEXT: # %bb.2: # %atomicrmw.end 4363; CSKY-NEXT: addi16 sp, sp, 8 4364; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 4365; CSKY-NEXT: ld16.w l0, (sp, 4) 4366; CSKY-NEXT: ld16.w l1, (sp, 8) 4367; CSKY-NEXT: ld16.w l2, (sp, 12) 4368; CSKY-NEXT: addi16 sp, sp, 16 4369; CSKY-NEXT: rts16 4370; CSKY-NEXT: .p2align 1 4371; CSKY-NEXT: # %bb.3: 4372; CSKY-NEXT: .p2align 2 4373; CSKY-NEXT: .LCPI151_0: 4374; CSKY-NEXT: .long __atomic_compare_exchange_4 4375; 4376 %1 = atomicrmw min i32* %a, i32 %b acquire 4377 ret i32 %1 4378} 4379 4380define i32 @atomicrmw_min_i32_release(i32 *%a, i32 %b) nounwind { 4381; CSKY-LABEL: atomicrmw_min_i32_release: 4382; CSKY: # %bb.0: 4383; CSKY-NEXT: subi16 sp, sp, 16 4384; CSKY-NEXT: st16.w l2, (sp, 12) 4385; CSKY-NEXT: st16.w l1, (sp, 8) 4386; CSKY-NEXT: st16.w l0, (sp, 4) 4387; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 4388; CSKY-NEXT: subi16 sp, sp, 8 4389; CSKY-NEXT: mov16 l0, a1 4390; CSKY-NEXT: mov16 l1, a0 4391; CSKY-NEXT: ld16.w a0, (a0, 0) 4392; CSKY-NEXT: movi16 l2, 0 4393; CSKY-NEXT: .LBB152_1: # %atomicrmw.start 4394; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 4395; CSKY-NEXT: cmplt16 l0, a0 4396; CSKY-NEXT: mov16 a2, l0 4397; CSKY-NEXT: movf32 a2, a0 4398; CSKY-NEXT: st16.w a0, (sp, 4) 4399; CSKY-NEXT: st16.w l2, (sp, 0) 4400; CSKY-NEXT: mov16 a0, l1 4401; CSKY-NEXT: addi16 a1, sp, 4 4402; CSKY-NEXT: movi16 a3, 3 4403; CSKY-NEXT: jsri32 [.LCPI152_0] 4404; CSKY-NEXT: mov16 a1, a0 4405; CSKY-NEXT: ld16.w a0, (sp, 4) 4406; CSKY-NEXT: bez32 a1, .LBB152_1 4407; CSKY-NEXT: # %bb.2: # %atomicrmw.end 4408; CSKY-NEXT: addi16 sp, sp, 8 4409; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 4410; CSKY-NEXT: ld16.w l0, (sp, 4) 4411; CSKY-NEXT: ld16.w l1, (sp, 8) 4412; CSKY-NEXT: ld16.w l2, (sp, 12) 4413; CSKY-NEXT: addi16 sp, sp, 16 4414; CSKY-NEXT: rts16 4415; CSKY-NEXT: .p2align 1 4416; CSKY-NEXT: # %bb.3: 4417; CSKY-NEXT: .p2align 2 4418; CSKY-NEXT: .LCPI152_0: 4419; CSKY-NEXT: .long __atomic_compare_exchange_4 4420; 4421 %1 = atomicrmw min i32* %a, i32 %b release 4422 ret i32 %1 4423} 4424 4425define i32 @atomicrmw_min_i32_acq_rel(i32 *%a, i32 %b) nounwind { 4426; CSKY-LABEL: atomicrmw_min_i32_acq_rel: 4427; CSKY: # %bb.0: 4428; CSKY-NEXT: subi16 sp, sp, 16 4429; CSKY-NEXT: st16.w l2, (sp, 12) 4430; CSKY-NEXT: st16.w l1, (sp, 8) 4431; CSKY-NEXT: st16.w l0, (sp, 4) 4432; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 4433; CSKY-NEXT: subi16 sp, sp, 8 4434; CSKY-NEXT: mov16 l0, a1 4435; CSKY-NEXT: mov16 l1, a0 4436; CSKY-NEXT: ld16.w a0, (a0, 0) 4437; CSKY-NEXT: movi16 l2, 2 4438; CSKY-NEXT: .LBB153_1: # %atomicrmw.start 4439; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 4440; CSKY-NEXT: cmplt16 l0, a0 4441; CSKY-NEXT: mov16 a2, l0 4442; CSKY-NEXT: movf32 a2, a0 4443; CSKY-NEXT: st16.w a0, (sp, 4) 4444; CSKY-NEXT: st16.w l2, (sp, 0) 4445; CSKY-NEXT: mov16 a0, l1 4446; CSKY-NEXT: addi16 a1, sp, 4 4447; CSKY-NEXT: movi16 a3, 4 4448; CSKY-NEXT: jsri32 [.LCPI153_0] 4449; CSKY-NEXT: mov16 a1, a0 4450; CSKY-NEXT: ld16.w a0, (sp, 4) 4451; CSKY-NEXT: bez32 a1, .LBB153_1 4452; CSKY-NEXT: # %bb.2: # %atomicrmw.end 4453; CSKY-NEXT: addi16 sp, sp, 8 4454; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 4455; CSKY-NEXT: ld16.w l0, (sp, 4) 4456; CSKY-NEXT: ld16.w l1, (sp, 8) 4457; CSKY-NEXT: ld16.w l2, (sp, 12) 4458; CSKY-NEXT: addi16 sp, sp, 16 4459; CSKY-NEXT: rts16 4460; CSKY-NEXT: .p2align 1 4461; CSKY-NEXT: # %bb.3: 4462; CSKY-NEXT: .p2align 2 4463; CSKY-NEXT: .LCPI153_0: 4464; CSKY-NEXT: .long __atomic_compare_exchange_4 4465; 4466 %1 = atomicrmw min i32* %a, i32 %b acq_rel 4467 ret i32 %1 4468} 4469 4470define i32 @atomicrmw_min_i32_seq_cst(i32 *%a, i32 %b) nounwind { 4471; CSKY-LABEL: atomicrmw_min_i32_seq_cst: 4472; CSKY: # %bb.0: 4473; CSKY-NEXT: subi16 sp, sp, 16 4474; CSKY-NEXT: st16.w l2, (sp, 12) 4475; CSKY-NEXT: st16.w l1, (sp, 8) 4476; CSKY-NEXT: st16.w l0, (sp, 4) 4477; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 4478; CSKY-NEXT: subi16 sp, sp, 8 4479; CSKY-NEXT: mov16 l0, a1 4480; CSKY-NEXT: mov16 l1, a0 4481; CSKY-NEXT: ld16.w a0, (a0, 0) 4482; CSKY-NEXT: movi16 l2, 5 4483; CSKY-NEXT: .LBB154_1: # %atomicrmw.start 4484; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 4485; CSKY-NEXT: cmplt16 l0, a0 4486; CSKY-NEXT: mov16 a2, l0 4487; CSKY-NEXT: movf32 a2, a0 4488; CSKY-NEXT: st16.w a0, (sp, 4) 4489; CSKY-NEXT: st16.w l2, (sp, 0) 4490; CSKY-NEXT: mov16 a0, l1 4491; CSKY-NEXT: addi16 a1, sp, 4 4492; CSKY-NEXT: movi16 a3, 5 4493; CSKY-NEXT: jsri32 [.LCPI154_0] 4494; CSKY-NEXT: mov16 a1, a0 4495; CSKY-NEXT: ld16.w a0, (sp, 4) 4496; CSKY-NEXT: bez32 a1, .LBB154_1 4497; CSKY-NEXT: # %bb.2: # %atomicrmw.end 4498; CSKY-NEXT: addi16 sp, sp, 8 4499; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 4500; CSKY-NEXT: ld16.w l0, (sp, 4) 4501; CSKY-NEXT: ld16.w l1, (sp, 8) 4502; CSKY-NEXT: ld16.w l2, (sp, 12) 4503; CSKY-NEXT: addi16 sp, sp, 16 4504; CSKY-NEXT: rts16 4505; CSKY-NEXT: .p2align 1 4506; CSKY-NEXT: # %bb.3: 4507; CSKY-NEXT: .p2align 2 4508; CSKY-NEXT: .LCPI154_0: 4509; CSKY-NEXT: .long __atomic_compare_exchange_4 4510; 4511 %1 = atomicrmw min i32* %a, i32 %b seq_cst 4512 ret i32 %1 4513} 4514 4515define i32 @atomicrmw_umax_i32_monotonic(i32 *%a, i32 %b) nounwind { 4516; CSKY-LABEL: atomicrmw_umax_i32_monotonic: 4517; CSKY: # %bb.0: 4518; CSKY-NEXT: subi16 sp, sp, 16 4519; CSKY-NEXT: st16.w l2, (sp, 12) 4520; CSKY-NEXT: st16.w l1, (sp, 8) 4521; CSKY-NEXT: st16.w l0, (sp, 4) 4522; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 4523; CSKY-NEXT: subi16 sp, sp, 8 4524; CSKY-NEXT: mov16 l0, a1 4525; CSKY-NEXT: mov16 l1, a0 4526; CSKY-NEXT: ld16.w a0, (a0, 0) 4527; CSKY-NEXT: movi16 l2, 0 4528; CSKY-NEXT: .LBB155_1: # %atomicrmw.start 4529; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 4530; CSKY-NEXT: cmphs16 l0, a0 4531; CSKY-NEXT: mov16 a2, l0 4532; CSKY-NEXT: movf32 a2, a0 4533; CSKY-NEXT: st16.w a0, (sp, 4) 4534; CSKY-NEXT: st16.w l2, (sp, 0) 4535; CSKY-NEXT: mov16 a0, l1 4536; CSKY-NEXT: addi16 a1, sp, 4 4537; CSKY-NEXT: movi16 a3, 0 4538; CSKY-NEXT: jsri32 [.LCPI155_0] 4539; CSKY-NEXT: mov16 a1, a0 4540; CSKY-NEXT: ld16.w a0, (sp, 4) 4541; CSKY-NEXT: bez32 a1, .LBB155_1 4542; CSKY-NEXT: # %bb.2: # %atomicrmw.end 4543; CSKY-NEXT: addi16 sp, sp, 8 4544; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 4545; CSKY-NEXT: ld16.w l0, (sp, 4) 4546; CSKY-NEXT: ld16.w l1, (sp, 8) 4547; CSKY-NEXT: ld16.w l2, (sp, 12) 4548; CSKY-NEXT: addi16 sp, sp, 16 4549; CSKY-NEXT: rts16 4550; CSKY-NEXT: .p2align 1 4551; CSKY-NEXT: # %bb.3: 4552; CSKY-NEXT: .p2align 2 4553; CSKY-NEXT: .LCPI155_0: 4554; CSKY-NEXT: .long __atomic_compare_exchange_4 4555; 4556 %1 = atomicrmw umax i32* %a, i32 %b monotonic 4557 ret i32 %1 4558} 4559 4560define i32 @atomicrmw_umax_i32_acquire(i32 *%a, i32 %b) nounwind { 4561; CSKY-LABEL: atomicrmw_umax_i32_acquire: 4562; CSKY: # %bb.0: 4563; CSKY-NEXT: subi16 sp, sp, 16 4564; CSKY-NEXT: st16.w l2, (sp, 12) 4565; CSKY-NEXT: st16.w l1, (sp, 8) 4566; CSKY-NEXT: st16.w l0, (sp, 4) 4567; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 4568; CSKY-NEXT: subi16 sp, sp, 8 4569; CSKY-NEXT: mov16 l0, a1 4570; CSKY-NEXT: mov16 l1, a0 4571; CSKY-NEXT: ld16.w a0, (a0, 0) 4572; CSKY-NEXT: movi16 l2, 2 4573; CSKY-NEXT: .LBB156_1: # %atomicrmw.start 4574; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 4575; CSKY-NEXT: cmphs16 l0, a0 4576; CSKY-NEXT: mov16 a2, l0 4577; CSKY-NEXT: movf32 a2, a0 4578; CSKY-NEXT: st16.w a0, (sp, 4) 4579; CSKY-NEXT: st16.w l2, (sp, 0) 4580; CSKY-NEXT: mov16 a0, l1 4581; CSKY-NEXT: addi16 a1, sp, 4 4582; CSKY-NEXT: movi16 a3, 2 4583; CSKY-NEXT: jsri32 [.LCPI156_0] 4584; CSKY-NEXT: mov16 a1, a0 4585; CSKY-NEXT: ld16.w a0, (sp, 4) 4586; CSKY-NEXT: bez32 a1, .LBB156_1 4587; CSKY-NEXT: # %bb.2: # %atomicrmw.end 4588; CSKY-NEXT: addi16 sp, sp, 8 4589; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 4590; CSKY-NEXT: ld16.w l0, (sp, 4) 4591; CSKY-NEXT: ld16.w l1, (sp, 8) 4592; CSKY-NEXT: ld16.w l2, (sp, 12) 4593; CSKY-NEXT: addi16 sp, sp, 16 4594; CSKY-NEXT: rts16 4595; CSKY-NEXT: .p2align 1 4596; CSKY-NEXT: # %bb.3: 4597; CSKY-NEXT: .p2align 2 4598; CSKY-NEXT: .LCPI156_0: 4599; CSKY-NEXT: .long __atomic_compare_exchange_4 4600; 4601 %1 = atomicrmw umax i32* %a, i32 %b acquire 4602 ret i32 %1 4603} 4604 4605define i32 @atomicrmw_umax_i32_release(i32 *%a, i32 %b) nounwind { 4606; CSKY-LABEL: atomicrmw_umax_i32_release: 4607; CSKY: # %bb.0: 4608; CSKY-NEXT: subi16 sp, sp, 16 4609; CSKY-NEXT: st16.w l2, (sp, 12) 4610; CSKY-NEXT: st16.w l1, (sp, 8) 4611; CSKY-NEXT: st16.w l0, (sp, 4) 4612; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 4613; CSKY-NEXT: subi16 sp, sp, 8 4614; CSKY-NEXT: mov16 l0, a1 4615; CSKY-NEXT: mov16 l1, a0 4616; CSKY-NEXT: ld16.w a0, (a0, 0) 4617; CSKY-NEXT: movi16 l2, 0 4618; CSKY-NEXT: .LBB157_1: # %atomicrmw.start 4619; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 4620; CSKY-NEXT: cmphs16 l0, a0 4621; CSKY-NEXT: mov16 a2, l0 4622; CSKY-NEXT: movf32 a2, a0 4623; CSKY-NEXT: st16.w a0, (sp, 4) 4624; CSKY-NEXT: st16.w l2, (sp, 0) 4625; CSKY-NEXT: mov16 a0, l1 4626; CSKY-NEXT: addi16 a1, sp, 4 4627; CSKY-NEXT: movi16 a3, 3 4628; CSKY-NEXT: jsri32 [.LCPI157_0] 4629; CSKY-NEXT: mov16 a1, a0 4630; CSKY-NEXT: ld16.w a0, (sp, 4) 4631; CSKY-NEXT: bez32 a1, .LBB157_1 4632; CSKY-NEXT: # %bb.2: # %atomicrmw.end 4633; CSKY-NEXT: addi16 sp, sp, 8 4634; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 4635; CSKY-NEXT: ld16.w l0, (sp, 4) 4636; CSKY-NEXT: ld16.w l1, (sp, 8) 4637; CSKY-NEXT: ld16.w l2, (sp, 12) 4638; CSKY-NEXT: addi16 sp, sp, 16 4639; CSKY-NEXT: rts16 4640; CSKY-NEXT: .p2align 1 4641; CSKY-NEXT: # %bb.3: 4642; CSKY-NEXT: .p2align 2 4643; CSKY-NEXT: .LCPI157_0: 4644; CSKY-NEXT: .long __atomic_compare_exchange_4 4645; 4646 %1 = atomicrmw umax i32* %a, i32 %b release 4647 ret i32 %1 4648} 4649 4650define i32 @atomicrmw_umax_i32_acq_rel(i32 *%a, i32 %b) nounwind { 4651; CSKY-LABEL: atomicrmw_umax_i32_acq_rel: 4652; CSKY: # %bb.0: 4653; CSKY-NEXT: subi16 sp, sp, 16 4654; CSKY-NEXT: st16.w l2, (sp, 12) 4655; CSKY-NEXT: st16.w l1, (sp, 8) 4656; CSKY-NEXT: st16.w l0, (sp, 4) 4657; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 4658; CSKY-NEXT: subi16 sp, sp, 8 4659; CSKY-NEXT: mov16 l0, a1 4660; CSKY-NEXT: mov16 l1, a0 4661; CSKY-NEXT: ld16.w a0, (a0, 0) 4662; CSKY-NEXT: movi16 l2, 2 4663; CSKY-NEXT: .LBB158_1: # %atomicrmw.start 4664; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 4665; CSKY-NEXT: cmphs16 l0, a0 4666; CSKY-NEXT: mov16 a2, l0 4667; CSKY-NEXT: movf32 a2, a0 4668; CSKY-NEXT: st16.w a0, (sp, 4) 4669; CSKY-NEXT: st16.w l2, (sp, 0) 4670; CSKY-NEXT: mov16 a0, l1 4671; CSKY-NEXT: addi16 a1, sp, 4 4672; CSKY-NEXT: movi16 a3, 4 4673; CSKY-NEXT: jsri32 [.LCPI158_0] 4674; CSKY-NEXT: mov16 a1, a0 4675; CSKY-NEXT: ld16.w a0, (sp, 4) 4676; CSKY-NEXT: bez32 a1, .LBB158_1 4677; CSKY-NEXT: # %bb.2: # %atomicrmw.end 4678; CSKY-NEXT: addi16 sp, sp, 8 4679; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 4680; CSKY-NEXT: ld16.w l0, (sp, 4) 4681; CSKY-NEXT: ld16.w l1, (sp, 8) 4682; CSKY-NEXT: ld16.w l2, (sp, 12) 4683; CSKY-NEXT: addi16 sp, sp, 16 4684; CSKY-NEXT: rts16 4685; CSKY-NEXT: .p2align 1 4686; CSKY-NEXT: # %bb.3: 4687; CSKY-NEXT: .p2align 2 4688; CSKY-NEXT: .LCPI158_0: 4689; CSKY-NEXT: .long __atomic_compare_exchange_4 4690; 4691 %1 = atomicrmw umax i32* %a, i32 %b acq_rel 4692 ret i32 %1 4693} 4694 4695define i32 @atomicrmw_umax_i32_seq_cst(i32 *%a, i32 %b) nounwind { 4696; CSKY-LABEL: atomicrmw_umax_i32_seq_cst: 4697; CSKY: # %bb.0: 4698; CSKY-NEXT: subi16 sp, sp, 16 4699; CSKY-NEXT: st16.w l2, (sp, 12) 4700; CSKY-NEXT: st16.w l1, (sp, 8) 4701; CSKY-NEXT: st16.w l0, (sp, 4) 4702; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 4703; CSKY-NEXT: subi16 sp, sp, 8 4704; CSKY-NEXT: mov16 l0, a1 4705; CSKY-NEXT: mov16 l1, a0 4706; CSKY-NEXT: ld16.w a0, (a0, 0) 4707; CSKY-NEXT: movi16 l2, 5 4708; CSKY-NEXT: .LBB159_1: # %atomicrmw.start 4709; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 4710; CSKY-NEXT: cmphs16 l0, a0 4711; CSKY-NEXT: mov16 a2, l0 4712; CSKY-NEXT: movf32 a2, a0 4713; CSKY-NEXT: st16.w a0, (sp, 4) 4714; CSKY-NEXT: st16.w l2, (sp, 0) 4715; CSKY-NEXT: mov16 a0, l1 4716; CSKY-NEXT: addi16 a1, sp, 4 4717; CSKY-NEXT: movi16 a3, 5 4718; CSKY-NEXT: jsri32 [.LCPI159_0] 4719; CSKY-NEXT: mov16 a1, a0 4720; CSKY-NEXT: ld16.w a0, (sp, 4) 4721; CSKY-NEXT: bez32 a1, .LBB159_1 4722; CSKY-NEXT: # %bb.2: # %atomicrmw.end 4723; CSKY-NEXT: addi16 sp, sp, 8 4724; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 4725; CSKY-NEXT: ld16.w l0, (sp, 4) 4726; CSKY-NEXT: ld16.w l1, (sp, 8) 4727; CSKY-NEXT: ld16.w l2, (sp, 12) 4728; CSKY-NEXT: addi16 sp, sp, 16 4729; CSKY-NEXT: rts16 4730; CSKY-NEXT: .p2align 1 4731; CSKY-NEXT: # %bb.3: 4732; CSKY-NEXT: .p2align 2 4733; CSKY-NEXT: .LCPI159_0: 4734; CSKY-NEXT: .long __atomic_compare_exchange_4 4735; 4736 %1 = atomicrmw umax i32* %a, i32 %b seq_cst 4737 ret i32 %1 4738} 4739 4740define i32 @atomicrmw_umin_i32_monotonic(i32 *%a, i32 %b) nounwind { 4741; CSKY-LABEL: atomicrmw_umin_i32_monotonic: 4742; CSKY: # %bb.0: 4743; CSKY-NEXT: subi16 sp, sp, 16 4744; CSKY-NEXT: st16.w l2, (sp, 12) 4745; CSKY-NEXT: st16.w l1, (sp, 8) 4746; CSKY-NEXT: st16.w l0, (sp, 4) 4747; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 4748; CSKY-NEXT: subi16 sp, sp, 8 4749; CSKY-NEXT: mov16 l0, a1 4750; CSKY-NEXT: mov16 l1, a0 4751; CSKY-NEXT: ld16.w a0, (a0, 0) 4752; CSKY-NEXT: movi16 l2, 0 4753; CSKY-NEXT: .LBB160_1: # %atomicrmw.start 4754; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 4755; CSKY-NEXT: cmphs16 l0, a0 4756; CSKY-NEXT: mov16 a2, l0 4757; CSKY-NEXT: movt32 a2, a0 4758; CSKY-NEXT: st16.w a0, (sp, 4) 4759; CSKY-NEXT: st16.w l2, (sp, 0) 4760; CSKY-NEXT: mov16 a0, l1 4761; CSKY-NEXT: addi16 a1, sp, 4 4762; CSKY-NEXT: movi16 a3, 0 4763; CSKY-NEXT: jsri32 [.LCPI160_0] 4764; CSKY-NEXT: mov16 a1, a0 4765; CSKY-NEXT: ld16.w a0, (sp, 4) 4766; CSKY-NEXT: bez32 a1, .LBB160_1 4767; CSKY-NEXT: # %bb.2: # %atomicrmw.end 4768; CSKY-NEXT: addi16 sp, sp, 8 4769; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 4770; CSKY-NEXT: ld16.w l0, (sp, 4) 4771; CSKY-NEXT: ld16.w l1, (sp, 8) 4772; CSKY-NEXT: ld16.w l2, (sp, 12) 4773; CSKY-NEXT: addi16 sp, sp, 16 4774; CSKY-NEXT: rts16 4775; CSKY-NEXT: .p2align 1 4776; CSKY-NEXT: # %bb.3: 4777; CSKY-NEXT: .p2align 2 4778; CSKY-NEXT: .LCPI160_0: 4779; CSKY-NEXT: .long __atomic_compare_exchange_4 4780; 4781 %1 = atomicrmw umin i32* %a, i32 %b monotonic 4782 ret i32 %1 4783} 4784 4785define i32 @atomicrmw_umin_i32_acquire(i32 *%a, i32 %b) nounwind { 4786; CSKY-LABEL: atomicrmw_umin_i32_acquire: 4787; CSKY: # %bb.0: 4788; CSKY-NEXT: subi16 sp, sp, 16 4789; CSKY-NEXT: st16.w l2, (sp, 12) 4790; CSKY-NEXT: st16.w l1, (sp, 8) 4791; CSKY-NEXT: st16.w l0, (sp, 4) 4792; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 4793; CSKY-NEXT: subi16 sp, sp, 8 4794; CSKY-NEXT: mov16 l0, a1 4795; CSKY-NEXT: mov16 l1, a0 4796; CSKY-NEXT: ld16.w a0, (a0, 0) 4797; CSKY-NEXT: movi16 l2, 2 4798; CSKY-NEXT: .LBB161_1: # %atomicrmw.start 4799; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 4800; CSKY-NEXT: cmphs16 l0, a0 4801; CSKY-NEXT: mov16 a2, l0 4802; CSKY-NEXT: movt32 a2, a0 4803; CSKY-NEXT: st16.w a0, (sp, 4) 4804; CSKY-NEXT: st16.w l2, (sp, 0) 4805; CSKY-NEXT: mov16 a0, l1 4806; CSKY-NEXT: addi16 a1, sp, 4 4807; CSKY-NEXT: movi16 a3, 2 4808; CSKY-NEXT: jsri32 [.LCPI161_0] 4809; CSKY-NEXT: mov16 a1, a0 4810; CSKY-NEXT: ld16.w a0, (sp, 4) 4811; CSKY-NEXT: bez32 a1, .LBB161_1 4812; CSKY-NEXT: # %bb.2: # %atomicrmw.end 4813; CSKY-NEXT: addi16 sp, sp, 8 4814; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 4815; CSKY-NEXT: ld16.w l0, (sp, 4) 4816; CSKY-NEXT: ld16.w l1, (sp, 8) 4817; CSKY-NEXT: ld16.w l2, (sp, 12) 4818; CSKY-NEXT: addi16 sp, sp, 16 4819; CSKY-NEXT: rts16 4820; CSKY-NEXT: .p2align 1 4821; CSKY-NEXT: # %bb.3: 4822; CSKY-NEXT: .p2align 2 4823; CSKY-NEXT: .LCPI161_0: 4824; CSKY-NEXT: .long __atomic_compare_exchange_4 4825; 4826 %1 = atomicrmw umin i32* %a, i32 %b acquire 4827 ret i32 %1 4828} 4829 4830define i32 @atomicrmw_umin_i32_release(i32 *%a, i32 %b) nounwind { 4831; CSKY-LABEL: atomicrmw_umin_i32_release: 4832; CSKY: # %bb.0: 4833; CSKY-NEXT: subi16 sp, sp, 16 4834; CSKY-NEXT: st16.w l2, (sp, 12) 4835; CSKY-NEXT: st16.w l1, (sp, 8) 4836; CSKY-NEXT: st16.w l0, (sp, 4) 4837; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 4838; CSKY-NEXT: subi16 sp, sp, 8 4839; CSKY-NEXT: mov16 l0, a1 4840; CSKY-NEXT: mov16 l1, a0 4841; CSKY-NEXT: ld16.w a0, (a0, 0) 4842; CSKY-NEXT: movi16 l2, 0 4843; CSKY-NEXT: .LBB162_1: # %atomicrmw.start 4844; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 4845; CSKY-NEXT: cmphs16 l0, a0 4846; CSKY-NEXT: mov16 a2, l0 4847; CSKY-NEXT: movt32 a2, a0 4848; CSKY-NEXT: st16.w a0, (sp, 4) 4849; CSKY-NEXT: st16.w l2, (sp, 0) 4850; CSKY-NEXT: mov16 a0, l1 4851; CSKY-NEXT: addi16 a1, sp, 4 4852; CSKY-NEXT: movi16 a3, 3 4853; CSKY-NEXT: jsri32 [.LCPI162_0] 4854; CSKY-NEXT: mov16 a1, a0 4855; CSKY-NEXT: ld16.w a0, (sp, 4) 4856; CSKY-NEXT: bez32 a1, .LBB162_1 4857; CSKY-NEXT: # %bb.2: # %atomicrmw.end 4858; CSKY-NEXT: addi16 sp, sp, 8 4859; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 4860; CSKY-NEXT: ld16.w l0, (sp, 4) 4861; CSKY-NEXT: ld16.w l1, (sp, 8) 4862; CSKY-NEXT: ld16.w l2, (sp, 12) 4863; CSKY-NEXT: addi16 sp, sp, 16 4864; CSKY-NEXT: rts16 4865; CSKY-NEXT: .p2align 1 4866; CSKY-NEXT: # %bb.3: 4867; CSKY-NEXT: .p2align 2 4868; CSKY-NEXT: .LCPI162_0: 4869; CSKY-NEXT: .long __atomic_compare_exchange_4 4870; 4871 %1 = atomicrmw umin i32* %a, i32 %b release 4872 ret i32 %1 4873} 4874 4875define i32 @atomicrmw_umin_i32_acq_rel(i32 *%a, i32 %b) nounwind { 4876; CSKY-LABEL: atomicrmw_umin_i32_acq_rel: 4877; CSKY: # %bb.0: 4878; CSKY-NEXT: subi16 sp, sp, 16 4879; CSKY-NEXT: st16.w l2, (sp, 12) 4880; CSKY-NEXT: st16.w l1, (sp, 8) 4881; CSKY-NEXT: st16.w l0, (sp, 4) 4882; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 4883; CSKY-NEXT: subi16 sp, sp, 8 4884; CSKY-NEXT: mov16 l0, a1 4885; CSKY-NEXT: mov16 l1, a0 4886; CSKY-NEXT: ld16.w a0, (a0, 0) 4887; CSKY-NEXT: movi16 l2, 2 4888; CSKY-NEXT: .LBB163_1: # %atomicrmw.start 4889; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 4890; CSKY-NEXT: cmphs16 l0, a0 4891; CSKY-NEXT: mov16 a2, l0 4892; CSKY-NEXT: movt32 a2, a0 4893; CSKY-NEXT: st16.w a0, (sp, 4) 4894; CSKY-NEXT: st16.w l2, (sp, 0) 4895; CSKY-NEXT: mov16 a0, l1 4896; CSKY-NEXT: addi16 a1, sp, 4 4897; CSKY-NEXT: movi16 a3, 4 4898; CSKY-NEXT: jsri32 [.LCPI163_0] 4899; CSKY-NEXT: mov16 a1, a0 4900; CSKY-NEXT: ld16.w a0, (sp, 4) 4901; CSKY-NEXT: bez32 a1, .LBB163_1 4902; CSKY-NEXT: # %bb.2: # %atomicrmw.end 4903; CSKY-NEXT: addi16 sp, sp, 8 4904; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 4905; CSKY-NEXT: ld16.w l0, (sp, 4) 4906; CSKY-NEXT: ld16.w l1, (sp, 8) 4907; CSKY-NEXT: ld16.w l2, (sp, 12) 4908; CSKY-NEXT: addi16 sp, sp, 16 4909; CSKY-NEXT: rts16 4910; CSKY-NEXT: .p2align 1 4911; CSKY-NEXT: # %bb.3: 4912; CSKY-NEXT: .p2align 2 4913; CSKY-NEXT: .LCPI163_0: 4914; CSKY-NEXT: .long __atomic_compare_exchange_4 4915; 4916 %1 = atomicrmw umin i32* %a, i32 %b acq_rel 4917 ret i32 %1 4918} 4919 4920define i32 @atomicrmw_umin_i32_seq_cst(i32 *%a, i32 %b) nounwind { 4921; CSKY-LABEL: atomicrmw_umin_i32_seq_cst: 4922; CSKY: # %bb.0: 4923; CSKY-NEXT: subi16 sp, sp, 16 4924; CSKY-NEXT: st16.w l2, (sp, 12) 4925; CSKY-NEXT: st16.w l1, (sp, 8) 4926; CSKY-NEXT: st16.w l0, (sp, 4) 4927; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 4928; CSKY-NEXT: subi16 sp, sp, 8 4929; CSKY-NEXT: mov16 l0, a1 4930; CSKY-NEXT: mov16 l1, a0 4931; CSKY-NEXT: ld16.w a0, (a0, 0) 4932; CSKY-NEXT: movi16 l2, 5 4933; CSKY-NEXT: .LBB164_1: # %atomicrmw.start 4934; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 4935; CSKY-NEXT: cmphs16 l0, a0 4936; CSKY-NEXT: mov16 a2, l0 4937; CSKY-NEXT: movt32 a2, a0 4938; CSKY-NEXT: st16.w a0, (sp, 4) 4939; CSKY-NEXT: st16.w l2, (sp, 0) 4940; CSKY-NEXT: mov16 a0, l1 4941; CSKY-NEXT: addi16 a1, sp, 4 4942; CSKY-NEXT: movi16 a3, 5 4943; CSKY-NEXT: jsri32 [.LCPI164_0] 4944; CSKY-NEXT: mov16 a1, a0 4945; CSKY-NEXT: ld16.w a0, (sp, 4) 4946; CSKY-NEXT: bez32 a1, .LBB164_1 4947; CSKY-NEXT: # %bb.2: # %atomicrmw.end 4948; CSKY-NEXT: addi16 sp, sp, 8 4949; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 4950; CSKY-NEXT: ld16.w l0, (sp, 4) 4951; CSKY-NEXT: ld16.w l1, (sp, 8) 4952; CSKY-NEXT: ld16.w l2, (sp, 12) 4953; CSKY-NEXT: addi16 sp, sp, 16 4954; CSKY-NEXT: rts16 4955; CSKY-NEXT: .p2align 1 4956; CSKY-NEXT: # %bb.3: 4957; CSKY-NEXT: .p2align 2 4958; CSKY-NEXT: .LCPI164_0: 4959; CSKY-NEXT: .long __atomic_compare_exchange_4 4960; 4961 %1 = atomicrmw umin i32* %a, i32 %b seq_cst 4962 ret i32 %1 4963} 4964 4965define i64 @atomicrmw_xchg_i64_monotonic(i64* %a, i64 %b) nounwind { 4966; CSKY-LABEL: atomicrmw_xchg_i64_monotonic: 4967; CSKY: # %bb.0: 4968; CSKY-NEXT: subi16 sp, sp, 4 4969; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 4970; CSKY-NEXT: movi16 a3, 0 4971; CSKY-NEXT: jsri32 [.LCPI165_0] 4972; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 4973; CSKY-NEXT: addi16 sp, sp, 4 4974; CSKY-NEXT: rts16 4975; CSKY-NEXT: .p2align 1 4976; CSKY-NEXT: # %bb.1: 4977; CSKY-NEXT: .p2align 2 4978; CSKY-NEXT: .LCPI165_0: 4979; CSKY-NEXT: .long __atomic_exchange_8 4980; 4981 %1 = atomicrmw xchg i64* %a, i64 %b monotonic 4982 ret i64 %1 4983} 4984 4985define i64 @atomicrmw_xchg_i64_acquire(i64* %a, i64 %b) nounwind { 4986; CSKY-LABEL: atomicrmw_xchg_i64_acquire: 4987; CSKY: # %bb.0: 4988; CSKY-NEXT: subi16 sp, sp, 4 4989; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 4990; CSKY-NEXT: movi16 a3, 2 4991; CSKY-NEXT: jsri32 [.LCPI166_0] 4992; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 4993; CSKY-NEXT: addi16 sp, sp, 4 4994; CSKY-NEXT: rts16 4995; CSKY-NEXT: .p2align 1 4996; CSKY-NEXT: # %bb.1: 4997; CSKY-NEXT: .p2align 2 4998; CSKY-NEXT: .LCPI166_0: 4999; CSKY-NEXT: .long __atomic_exchange_8 5000; 5001 %1 = atomicrmw xchg i64* %a, i64 %b acquire 5002 ret i64 %1 5003} 5004 5005define i64 @atomicrmw_xchg_i64_release(i64* %a, i64 %b) nounwind { 5006; CSKY-LABEL: atomicrmw_xchg_i64_release: 5007; CSKY: # %bb.0: 5008; CSKY-NEXT: subi16 sp, sp, 4 5009; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 5010; CSKY-NEXT: movi16 a3, 3 5011; CSKY-NEXT: jsri32 [.LCPI167_0] 5012; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 5013; CSKY-NEXT: addi16 sp, sp, 4 5014; CSKY-NEXT: rts16 5015; CSKY-NEXT: .p2align 1 5016; CSKY-NEXT: # %bb.1: 5017; CSKY-NEXT: .p2align 2 5018; CSKY-NEXT: .LCPI167_0: 5019; CSKY-NEXT: .long __atomic_exchange_8 5020; 5021 %1 = atomicrmw xchg i64* %a, i64 %b release 5022 ret i64 %1 5023} 5024 5025define i64 @atomicrmw_xchg_i64_acq_rel(i64* %a, i64 %b) nounwind { 5026; CSKY-LABEL: atomicrmw_xchg_i64_acq_rel: 5027; CSKY: # %bb.0: 5028; CSKY-NEXT: subi16 sp, sp, 4 5029; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 5030; CSKY-NEXT: movi16 a3, 4 5031; CSKY-NEXT: jsri32 [.LCPI168_0] 5032; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 5033; CSKY-NEXT: addi16 sp, sp, 4 5034; CSKY-NEXT: rts16 5035; CSKY-NEXT: .p2align 1 5036; CSKY-NEXT: # %bb.1: 5037; CSKY-NEXT: .p2align 2 5038; CSKY-NEXT: .LCPI168_0: 5039; CSKY-NEXT: .long __atomic_exchange_8 5040; 5041 %1 = atomicrmw xchg i64* %a, i64 %b acq_rel 5042 ret i64 %1 5043} 5044 5045define i64 @atomicrmw_xchg_i64_seq_cst(i64* %a, i64 %b) nounwind { 5046; CSKY-LABEL: atomicrmw_xchg_i64_seq_cst: 5047; CSKY: # %bb.0: 5048; CSKY-NEXT: subi16 sp, sp, 4 5049; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 5050; CSKY-NEXT: movi16 a3, 5 5051; CSKY-NEXT: jsri32 [.LCPI169_0] 5052; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 5053; CSKY-NEXT: addi16 sp, sp, 4 5054; CSKY-NEXT: rts16 5055; CSKY-NEXT: .p2align 1 5056; CSKY-NEXT: # %bb.1: 5057; CSKY-NEXT: .p2align 2 5058; CSKY-NEXT: .LCPI169_0: 5059; CSKY-NEXT: .long __atomic_exchange_8 5060; 5061 %1 = atomicrmw xchg i64* %a, i64 %b seq_cst 5062 ret i64 %1 5063} 5064 5065define i64 @atomicrmw_add_i64_monotonic(i64 *%a, i64 %b) nounwind { 5066; CSKY-LABEL: atomicrmw_add_i64_monotonic: 5067; CSKY: # %bb.0: 5068; CSKY-NEXT: subi16 sp, sp, 4 5069; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 5070; CSKY-NEXT: movi16 a3, 0 5071; CSKY-NEXT: jsri32 [.LCPI170_0] 5072; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 5073; CSKY-NEXT: addi16 sp, sp, 4 5074; CSKY-NEXT: rts16 5075; CSKY-NEXT: .p2align 1 5076; CSKY-NEXT: # %bb.1: 5077; CSKY-NEXT: .p2align 2 5078; CSKY-NEXT: .LCPI170_0: 5079; CSKY-NEXT: .long __atomic_fetch_add_8 5080; 5081 %1 = atomicrmw add i64* %a, i64 %b monotonic 5082 ret i64 %1 5083} 5084 5085define i64 @atomicrmw_add_i64_acquire(i64 *%a, i64 %b) nounwind { 5086; CSKY-LABEL: atomicrmw_add_i64_acquire: 5087; CSKY: # %bb.0: 5088; CSKY-NEXT: subi16 sp, sp, 4 5089; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 5090; CSKY-NEXT: movi16 a3, 2 5091; CSKY-NEXT: jsri32 [.LCPI171_0] 5092; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 5093; CSKY-NEXT: addi16 sp, sp, 4 5094; CSKY-NEXT: rts16 5095; CSKY-NEXT: .p2align 1 5096; CSKY-NEXT: # %bb.1: 5097; CSKY-NEXT: .p2align 2 5098; CSKY-NEXT: .LCPI171_0: 5099; CSKY-NEXT: .long __atomic_fetch_add_8 5100; 5101 %1 = atomicrmw add i64* %a, i64 %b acquire 5102 ret i64 %1 5103} 5104 5105define i64 @atomicrmw_add_i64_release(i64 *%a, i64 %b) nounwind { 5106; CSKY-LABEL: atomicrmw_add_i64_release: 5107; CSKY: # %bb.0: 5108; CSKY-NEXT: subi16 sp, sp, 4 5109; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 5110; CSKY-NEXT: movi16 a3, 3 5111; CSKY-NEXT: jsri32 [.LCPI172_0] 5112; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 5113; CSKY-NEXT: addi16 sp, sp, 4 5114; CSKY-NEXT: rts16 5115; CSKY-NEXT: .p2align 1 5116; CSKY-NEXT: # %bb.1: 5117; CSKY-NEXT: .p2align 2 5118; CSKY-NEXT: .LCPI172_0: 5119; CSKY-NEXT: .long __atomic_fetch_add_8 5120; 5121 %1 = atomicrmw add i64* %a, i64 %b release 5122 ret i64 %1 5123} 5124 5125define i64 @atomicrmw_add_i64_acq_rel(i64 *%a, i64 %b) nounwind { 5126; CSKY-LABEL: atomicrmw_add_i64_acq_rel: 5127; CSKY: # %bb.0: 5128; CSKY-NEXT: subi16 sp, sp, 4 5129; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 5130; CSKY-NEXT: movi16 a3, 4 5131; CSKY-NEXT: jsri32 [.LCPI173_0] 5132; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 5133; CSKY-NEXT: addi16 sp, sp, 4 5134; CSKY-NEXT: rts16 5135; CSKY-NEXT: .p2align 1 5136; CSKY-NEXT: # %bb.1: 5137; CSKY-NEXT: .p2align 2 5138; CSKY-NEXT: .LCPI173_0: 5139; CSKY-NEXT: .long __atomic_fetch_add_8 5140; 5141 %1 = atomicrmw add i64* %a, i64 %b acq_rel 5142 ret i64 %1 5143} 5144 5145define i64 @atomicrmw_add_i64_seq_cst(i64 *%a, i64 %b) nounwind { 5146; CSKY-LABEL: atomicrmw_add_i64_seq_cst: 5147; CSKY: # %bb.0: 5148; CSKY-NEXT: subi16 sp, sp, 4 5149; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 5150; CSKY-NEXT: movi16 a3, 5 5151; CSKY-NEXT: jsri32 [.LCPI174_0] 5152; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 5153; CSKY-NEXT: addi16 sp, sp, 4 5154; CSKY-NEXT: rts16 5155; CSKY-NEXT: .p2align 1 5156; CSKY-NEXT: # %bb.1: 5157; CSKY-NEXT: .p2align 2 5158; CSKY-NEXT: .LCPI174_0: 5159; CSKY-NEXT: .long __atomic_fetch_add_8 5160; 5161 %1 = atomicrmw add i64* %a, i64 %b seq_cst 5162 ret i64 %1 5163} 5164 5165define i64 @atomicrmw_sub_i64_monotonic(i64* %a, i64 %b) nounwind { 5166; CSKY-LABEL: atomicrmw_sub_i64_monotonic: 5167; CSKY: # %bb.0: 5168; CSKY-NEXT: subi16 sp, sp, 4 5169; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 5170; CSKY-NEXT: movi16 a3, 0 5171; CSKY-NEXT: jsri32 [.LCPI175_0] 5172; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 5173; CSKY-NEXT: addi16 sp, sp, 4 5174; CSKY-NEXT: rts16 5175; CSKY-NEXT: .p2align 1 5176; CSKY-NEXT: # %bb.1: 5177; CSKY-NEXT: .p2align 2 5178; CSKY-NEXT: .LCPI175_0: 5179; CSKY-NEXT: .long __atomic_fetch_sub_8 5180; 5181 %1 = atomicrmw sub i64* %a, i64 %b monotonic 5182 ret i64 %1 5183} 5184 5185define i64 @atomicrmw_sub_i64_acquire(i64* %a, i64 %b) nounwind { 5186; CSKY-LABEL: atomicrmw_sub_i64_acquire: 5187; CSKY: # %bb.0: 5188; CSKY-NEXT: subi16 sp, sp, 4 5189; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 5190; CSKY-NEXT: movi16 a3, 2 5191; CSKY-NEXT: jsri32 [.LCPI176_0] 5192; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 5193; CSKY-NEXT: addi16 sp, sp, 4 5194; CSKY-NEXT: rts16 5195; CSKY-NEXT: .p2align 1 5196; CSKY-NEXT: # %bb.1: 5197; CSKY-NEXT: .p2align 2 5198; CSKY-NEXT: .LCPI176_0: 5199; CSKY-NEXT: .long __atomic_fetch_sub_8 5200; 5201 %1 = atomicrmw sub i64* %a, i64 %b acquire 5202 ret i64 %1 5203} 5204 5205define i64 @atomicrmw_sub_i64_release(i64* %a, i64 %b) nounwind { 5206; CSKY-LABEL: atomicrmw_sub_i64_release: 5207; CSKY: # %bb.0: 5208; CSKY-NEXT: subi16 sp, sp, 4 5209; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 5210; CSKY-NEXT: movi16 a3, 3 5211; CSKY-NEXT: jsri32 [.LCPI177_0] 5212; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 5213; CSKY-NEXT: addi16 sp, sp, 4 5214; CSKY-NEXT: rts16 5215; CSKY-NEXT: .p2align 1 5216; CSKY-NEXT: # %bb.1: 5217; CSKY-NEXT: .p2align 2 5218; CSKY-NEXT: .LCPI177_0: 5219; CSKY-NEXT: .long __atomic_fetch_sub_8 5220; 5221 %1 = atomicrmw sub i64* %a, i64 %b release 5222 ret i64 %1 5223} 5224 5225define i64 @atomicrmw_sub_i64_acq_rel(i64* %a, i64 %b) nounwind { 5226; CSKY-LABEL: atomicrmw_sub_i64_acq_rel: 5227; CSKY: # %bb.0: 5228; CSKY-NEXT: subi16 sp, sp, 4 5229; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 5230; CSKY-NEXT: movi16 a3, 4 5231; CSKY-NEXT: jsri32 [.LCPI178_0] 5232; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 5233; CSKY-NEXT: addi16 sp, sp, 4 5234; CSKY-NEXT: rts16 5235; CSKY-NEXT: .p2align 1 5236; CSKY-NEXT: # %bb.1: 5237; CSKY-NEXT: .p2align 2 5238; CSKY-NEXT: .LCPI178_0: 5239; CSKY-NEXT: .long __atomic_fetch_sub_8 5240; 5241 %1 = atomicrmw sub i64* %a, i64 %b acq_rel 5242 ret i64 %1 5243} 5244 5245define i64 @atomicrmw_sub_i64_seq_cst(i64* %a, i64 %b) nounwind { 5246; CSKY-LABEL: atomicrmw_sub_i64_seq_cst: 5247; CSKY: # %bb.0: 5248; CSKY-NEXT: subi16 sp, sp, 4 5249; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 5250; CSKY-NEXT: movi16 a3, 5 5251; CSKY-NEXT: jsri32 [.LCPI179_0] 5252; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 5253; CSKY-NEXT: addi16 sp, sp, 4 5254; CSKY-NEXT: rts16 5255; CSKY-NEXT: .p2align 1 5256; CSKY-NEXT: # %bb.1: 5257; CSKY-NEXT: .p2align 2 5258; CSKY-NEXT: .LCPI179_0: 5259; CSKY-NEXT: .long __atomic_fetch_sub_8 5260; 5261 %1 = atomicrmw sub i64* %a, i64 %b seq_cst 5262 ret i64 %1 5263} 5264 5265define i64 @atomicrmw_and_i64_monotonic(i64 *%a, i64 %b) nounwind { 5266; CSKY-LABEL: atomicrmw_and_i64_monotonic: 5267; CSKY: # %bb.0: 5268; CSKY-NEXT: subi16 sp, sp, 4 5269; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 5270; CSKY-NEXT: movi16 a3, 0 5271; CSKY-NEXT: jsri32 [.LCPI180_0] 5272; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 5273; CSKY-NEXT: addi16 sp, sp, 4 5274; CSKY-NEXT: rts16 5275; CSKY-NEXT: .p2align 1 5276; CSKY-NEXT: # %bb.1: 5277; CSKY-NEXT: .p2align 2 5278; CSKY-NEXT: .LCPI180_0: 5279; CSKY-NEXT: .long __atomic_fetch_and_8 5280; 5281 %1 = atomicrmw and i64* %a, i64 %b monotonic 5282 ret i64 %1 5283} 5284 5285define i64 @atomicrmw_and_i64_acquire(i64 *%a, i64 %b) nounwind { 5286; CSKY-LABEL: atomicrmw_and_i64_acquire: 5287; CSKY: # %bb.0: 5288; CSKY-NEXT: subi16 sp, sp, 4 5289; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 5290; CSKY-NEXT: movi16 a3, 2 5291; CSKY-NEXT: jsri32 [.LCPI181_0] 5292; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 5293; CSKY-NEXT: addi16 sp, sp, 4 5294; CSKY-NEXT: rts16 5295; CSKY-NEXT: .p2align 1 5296; CSKY-NEXT: # %bb.1: 5297; CSKY-NEXT: .p2align 2 5298; CSKY-NEXT: .LCPI181_0: 5299; CSKY-NEXT: .long __atomic_fetch_and_8 5300; 5301 %1 = atomicrmw and i64* %a, i64 %b acquire 5302 ret i64 %1 5303} 5304 5305define i64 @atomicrmw_and_i64_release(i64 *%a, i64 %b) nounwind { 5306; CSKY-LABEL: atomicrmw_and_i64_release: 5307; CSKY: # %bb.0: 5308; CSKY-NEXT: subi16 sp, sp, 4 5309; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 5310; CSKY-NEXT: movi16 a3, 3 5311; CSKY-NEXT: jsri32 [.LCPI182_0] 5312; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 5313; CSKY-NEXT: addi16 sp, sp, 4 5314; CSKY-NEXT: rts16 5315; CSKY-NEXT: .p2align 1 5316; CSKY-NEXT: # %bb.1: 5317; CSKY-NEXT: .p2align 2 5318; CSKY-NEXT: .LCPI182_0: 5319; CSKY-NEXT: .long __atomic_fetch_and_8 5320; 5321 %1 = atomicrmw and i64* %a, i64 %b release 5322 ret i64 %1 5323} 5324 5325define i64 @atomicrmw_and_i64_acq_rel(i64 *%a, i64 %b) nounwind { 5326; CSKY-LABEL: atomicrmw_and_i64_acq_rel: 5327; CSKY: # %bb.0: 5328; CSKY-NEXT: subi16 sp, sp, 4 5329; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 5330; CSKY-NEXT: movi16 a3, 4 5331; CSKY-NEXT: jsri32 [.LCPI183_0] 5332; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 5333; CSKY-NEXT: addi16 sp, sp, 4 5334; CSKY-NEXT: rts16 5335; CSKY-NEXT: .p2align 1 5336; CSKY-NEXT: # %bb.1: 5337; CSKY-NEXT: .p2align 2 5338; CSKY-NEXT: .LCPI183_0: 5339; CSKY-NEXT: .long __atomic_fetch_and_8 5340; 5341 %1 = atomicrmw and i64* %a, i64 %b acq_rel 5342 ret i64 %1 5343} 5344 5345define i64 @atomicrmw_and_i64_seq_cst(i64 *%a, i64 %b) nounwind { 5346; CSKY-LABEL: atomicrmw_and_i64_seq_cst: 5347; CSKY: # %bb.0: 5348; CSKY-NEXT: subi16 sp, sp, 4 5349; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 5350; CSKY-NEXT: movi16 a3, 5 5351; CSKY-NEXT: jsri32 [.LCPI184_0] 5352; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 5353; CSKY-NEXT: addi16 sp, sp, 4 5354; CSKY-NEXT: rts16 5355; CSKY-NEXT: .p2align 1 5356; CSKY-NEXT: # %bb.1: 5357; CSKY-NEXT: .p2align 2 5358; CSKY-NEXT: .LCPI184_0: 5359; CSKY-NEXT: .long __atomic_fetch_and_8 5360; 5361 %1 = atomicrmw and i64* %a, i64 %b seq_cst 5362 ret i64 %1 5363} 5364 5365define i64 @atomicrmw_nand_i64_monotonic(i64* %a, i64 %b) nounwind { 5366; CSKY-LABEL: atomicrmw_nand_i64_monotonic: 5367; CSKY: # %bb.0: 5368; CSKY-NEXT: subi16 sp, sp, 4 5369; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 5370; CSKY-NEXT: movi16 a3, 0 5371; CSKY-NEXT: jsri32 [.LCPI185_0] 5372; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 5373; CSKY-NEXT: addi16 sp, sp, 4 5374; CSKY-NEXT: rts16 5375; CSKY-NEXT: .p2align 1 5376; CSKY-NEXT: # %bb.1: 5377; CSKY-NEXT: .p2align 2 5378; CSKY-NEXT: .LCPI185_0: 5379; CSKY-NEXT: .long __atomic_fetch_nand_8 5380; 5381 %1 = atomicrmw nand i64* %a, i64 %b monotonic 5382 ret i64 %1 5383} 5384 5385define i64 @atomicrmw_nand_i64_acquire(i64* %a, i64 %b) nounwind { 5386; CSKY-LABEL: atomicrmw_nand_i64_acquire: 5387; CSKY: # %bb.0: 5388; CSKY-NEXT: subi16 sp, sp, 4 5389; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 5390; CSKY-NEXT: movi16 a3, 2 5391; CSKY-NEXT: jsri32 [.LCPI186_0] 5392; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 5393; CSKY-NEXT: addi16 sp, sp, 4 5394; CSKY-NEXT: rts16 5395; CSKY-NEXT: .p2align 1 5396; CSKY-NEXT: # %bb.1: 5397; CSKY-NEXT: .p2align 2 5398; CSKY-NEXT: .LCPI186_0: 5399; CSKY-NEXT: .long __atomic_fetch_nand_8 5400; 5401 %1 = atomicrmw nand i64* %a, i64 %b acquire 5402 ret i64 %1 5403} 5404 5405define i64 @atomicrmw_nand_i64_release(i64* %a, i64 %b) nounwind { 5406; CSKY-LABEL: atomicrmw_nand_i64_release: 5407; CSKY: # %bb.0: 5408; CSKY-NEXT: subi16 sp, sp, 4 5409; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 5410; CSKY-NEXT: movi16 a3, 3 5411; CSKY-NEXT: jsri32 [.LCPI187_0] 5412; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 5413; CSKY-NEXT: addi16 sp, sp, 4 5414; CSKY-NEXT: rts16 5415; CSKY-NEXT: .p2align 1 5416; CSKY-NEXT: # %bb.1: 5417; CSKY-NEXT: .p2align 2 5418; CSKY-NEXT: .LCPI187_0: 5419; CSKY-NEXT: .long __atomic_fetch_nand_8 5420; 5421 %1 = atomicrmw nand i64* %a, i64 %b release 5422 ret i64 %1 5423} 5424 5425define i64 @atomicrmw_nand_i64_acq_rel(i64* %a, i64 %b) nounwind { 5426; CSKY-LABEL: atomicrmw_nand_i64_acq_rel: 5427; CSKY: # %bb.0: 5428; CSKY-NEXT: subi16 sp, sp, 4 5429; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 5430; CSKY-NEXT: movi16 a3, 4 5431; CSKY-NEXT: jsri32 [.LCPI188_0] 5432; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 5433; CSKY-NEXT: addi16 sp, sp, 4 5434; CSKY-NEXT: rts16 5435; CSKY-NEXT: .p2align 1 5436; CSKY-NEXT: # %bb.1: 5437; CSKY-NEXT: .p2align 2 5438; CSKY-NEXT: .LCPI188_0: 5439; CSKY-NEXT: .long __atomic_fetch_nand_8 5440; 5441 %1 = atomicrmw nand i64* %a, i64 %b acq_rel 5442 ret i64 %1 5443} 5444 5445define i64 @atomicrmw_nand_i64_seq_cst(i64* %a, i64 %b) nounwind { 5446; CSKY-LABEL: atomicrmw_nand_i64_seq_cst: 5447; CSKY: # %bb.0: 5448; CSKY-NEXT: subi16 sp, sp, 4 5449; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 5450; CSKY-NEXT: movi16 a3, 5 5451; CSKY-NEXT: jsri32 [.LCPI189_0] 5452; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 5453; CSKY-NEXT: addi16 sp, sp, 4 5454; CSKY-NEXT: rts16 5455; CSKY-NEXT: .p2align 1 5456; CSKY-NEXT: # %bb.1: 5457; CSKY-NEXT: .p2align 2 5458; CSKY-NEXT: .LCPI189_0: 5459; CSKY-NEXT: .long __atomic_fetch_nand_8 5460; 5461 %1 = atomicrmw nand i64* %a, i64 %b seq_cst 5462 ret i64 %1 5463} 5464 5465define i64 @atomicrmw_or_i64_monotonic(i64 *%a, i64 %b) nounwind { 5466; CSKY-LABEL: atomicrmw_or_i64_monotonic: 5467; CSKY: # %bb.0: 5468; CSKY-NEXT: subi16 sp, sp, 4 5469; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 5470; CSKY-NEXT: movi16 a3, 0 5471; CSKY-NEXT: jsri32 [.LCPI190_0] 5472; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 5473; CSKY-NEXT: addi16 sp, sp, 4 5474; CSKY-NEXT: rts16 5475; CSKY-NEXT: .p2align 1 5476; CSKY-NEXT: # %bb.1: 5477; CSKY-NEXT: .p2align 2 5478; CSKY-NEXT: .LCPI190_0: 5479; CSKY-NEXT: .long __atomic_fetch_or_8 5480; 5481 %1 = atomicrmw or i64* %a, i64 %b monotonic 5482 ret i64 %1 5483} 5484 5485define i64 @atomicrmw_or_i64_acquire(i64 *%a, i64 %b) nounwind { 5486; CSKY-LABEL: atomicrmw_or_i64_acquire: 5487; CSKY: # %bb.0: 5488; CSKY-NEXT: subi16 sp, sp, 4 5489; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 5490; CSKY-NEXT: movi16 a3, 2 5491; CSKY-NEXT: jsri32 [.LCPI191_0] 5492; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 5493; CSKY-NEXT: addi16 sp, sp, 4 5494; CSKY-NEXT: rts16 5495; CSKY-NEXT: .p2align 1 5496; CSKY-NEXT: # %bb.1: 5497; CSKY-NEXT: .p2align 2 5498; CSKY-NEXT: .LCPI191_0: 5499; CSKY-NEXT: .long __atomic_fetch_or_8 5500; 5501 %1 = atomicrmw or i64* %a, i64 %b acquire 5502 ret i64 %1 5503} 5504 5505define i64 @atomicrmw_or_i64_release(i64 *%a, i64 %b) nounwind { 5506; CSKY-LABEL: atomicrmw_or_i64_release: 5507; CSKY: # %bb.0: 5508; CSKY-NEXT: subi16 sp, sp, 4 5509; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 5510; CSKY-NEXT: movi16 a3, 3 5511; CSKY-NEXT: jsri32 [.LCPI192_0] 5512; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 5513; CSKY-NEXT: addi16 sp, sp, 4 5514; CSKY-NEXT: rts16 5515; CSKY-NEXT: .p2align 1 5516; CSKY-NEXT: # %bb.1: 5517; CSKY-NEXT: .p2align 2 5518; CSKY-NEXT: .LCPI192_0: 5519; CSKY-NEXT: .long __atomic_fetch_or_8 5520; 5521 %1 = atomicrmw or i64* %a, i64 %b release 5522 ret i64 %1 5523} 5524 5525define i64 @atomicrmw_or_i64_acq_rel(i64 *%a, i64 %b) nounwind { 5526; CSKY-LABEL: atomicrmw_or_i64_acq_rel: 5527; CSKY: # %bb.0: 5528; CSKY-NEXT: subi16 sp, sp, 4 5529; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 5530; CSKY-NEXT: movi16 a3, 4 5531; CSKY-NEXT: jsri32 [.LCPI193_0] 5532; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 5533; CSKY-NEXT: addi16 sp, sp, 4 5534; CSKY-NEXT: rts16 5535; CSKY-NEXT: .p2align 1 5536; CSKY-NEXT: # %bb.1: 5537; CSKY-NEXT: .p2align 2 5538; CSKY-NEXT: .LCPI193_0: 5539; CSKY-NEXT: .long __atomic_fetch_or_8 5540; 5541 %1 = atomicrmw or i64* %a, i64 %b acq_rel 5542 ret i64 %1 5543} 5544 5545define i64 @atomicrmw_or_i64_seq_cst(i64 *%a, i64 %b) nounwind { 5546; CSKY-LABEL: atomicrmw_or_i64_seq_cst: 5547; CSKY: # %bb.0: 5548; CSKY-NEXT: subi16 sp, sp, 4 5549; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 5550; CSKY-NEXT: movi16 a3, 5 5551; CSKY-NEXT: jsri32 [.LCPI194_0] 5552; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 5553; CSKY-NEXT: addi16 sp, sp, 4 5554; CSKY-NEXT: rts16 5555; CSKY-NEXT: .p2align 1 5556; CSKY-NEXT: # %bb.1: 5557; CSKY-NEXT: .p2align 2 5558; CSKY-NEXT: .LCPI194_0: 5559; CSKY-NEXT: .long __atomic_fetch_or_8 5560; 5561 %1 = atomicrmw or i64* %a, i64 %b seq_cst 5562 ret i64 %1 5563} 5564 5565define i64 @atomicrmw_xor_i64_monotonic(i64 *%a, i64 %b) nounwind { 5566; CSKY-LABEL: atomicrmw_xor_i64_monotonic: 5567; CSKY: # %bb.0: 5568; CSKY-NEXT: subi16 sp, sp, 4 5569; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 5570; CSKY-NEXT: movi16 a3, 0 5571; CSKY-NEXT: jsri32 [.LCPI195_0] 5572; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 5573; CSKY-NEXT: addi16 sp, sp, 4 5574; CSKY-NEXT: rts16 5575; CSKY-NEXT: .p2align 1 5576; CSKY-NEXT: # %bb.1: 5577; CSKY-NEXT: .p2align 2 5578; CSKY-NEXT: .LCPI195_0: 5579; CSKY-NEXT: .long __atomic_fetch_xor_8 5580; 5581 %1 = atomicrmw xor i64* %a, i64 %b monotonic 5582 ret i64 %1 5583} 5584 5585define i64 @atomicrmw_xor_i64_acquire(i64 *%a, i64 %b) nounwind { 5586; CSKY-LABEL: atomicrmw_xor_i64_acquire: 5587; CSKY: # %bb.0: 5588; CSKY-NEXT: subi16 sp, sp, 4 5589; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 5590; CSKY-NEXT: movi16 a3, 2 5591; CSKY-NEXT: jsri32 [.LCPI196_0] 5592; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 5593; CSKY-NEXT: addi16 sp, sp, 4 5594; CSKY-NEXT: rts16 5595; CSKY-NEXT: .p2align 1 5596; CSKY-NEXT: # %bb.1: 5597; CSKY-NEXT: .p2align 2 5598; CSKY-NEXT: .LCPI196_0: 5599; CSKY-NEXT: .long __atomic_fetch_xor_8 5600; 5601 %1 = atomicrmw xor i64* %a, i64 %b acquire 5602 ret i64 %1 5603} 5604 5605define i64 @atomicrmw_xor_i64_release(i64 *%a, i64 %b) nounwind { 5606; CSKY-LABEL: atomicrmw_xor_i64_release: 5607; CSKY: # %bb.0: 5608; CSKY-NEXT: subi16 sp, sp, 4 5609; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 5610; CSKY-NEXT: movi16 a3, 3 5611; CSKY-NEXT: jsri32 [.LCPI197_0] 5612; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 5613; CSKY-NEXT: addi16 sp, sp, 4 5614; CSKY-NEXT: rts16 5615; CSKY-NEXT: .p2align 1 5616; CSKY-NEXT: # %bb.1: 5617; CSKY-NEXT: .p2align 2 5618; CSKY-NEXT: .LCPI197_0: 5619; CSKY-NEXT: .long __atomic_fetch_xor_8 5620; 5621 %1 = atomicrmw xor i64* %a, i64 %b release 5622 ret i64 %1 5623} 5624 5625define i64 @atomicrmw_xor_i64_acq_rel(i64 *%a, i64 %b) nounwind { 5626; CSKY-LABEL: atomicrmw_xor_i64_acq_rel: 5627; CSKY: # %bb.0: 5628; CSKY-NEXT: subi16 sp, sp, 4 5629; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 5630; CSKY-NEXT: movi16 a3, 4 5631; CSKY-NEXT: jsri32 [.LCPI198_0] 5632; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 5633; CSKY-NEXT: addi16 sp, sp, 4 5634; CSKY-NEXT: rts16 5635; CSKY-NEXT: .p2align 1 5636; CSKY-NEXT: # %bb.1: 5637; CSKY-NEXT: .p2align 2 5638; CSKY-NEXT: .LCPI198_0: 5639; CSKY-NEXT: .long __atomic_fetch_xor_8 5640; 5641 %1 = atomicrmw xor i64* %a, i64 %b acq_rel 5642 ret i64 %1 5643} 5644 5645define i64 @atomicrmw_xor_i64_seq_cst(i64 *%a, i64 %b) nounwind { 5646; CSKY-LABEL: atomicrmw_xor_i64_seq_cst: 5647; CSKY: # %bb.0: 5648; CSKY-NEXT: subi16 sp, sp, 4 5649; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 5650; CSKY-NEXT: movi16 a3, 5 5651; CSKY-NEXT: jsri32 [.LCPI199_0] 5652; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 5653; CSKY-NEXT: addi16 sp, sp, 4 5654; CSKY-NEXT: rts16 5655; CSKY-NEXT: .p2align 1 5656; CSKY-NEXT: # %bb.1: 5657; CSKY-NEXT: .p2align 2 5658; CSKY-NEXT: .LCPI199_0: 5659; CSKY-NEXT: .long __atomic_fetch_xor_8 5660; 5661 %1 = atomicrmw xor i64* %a, i64 %b seq_cst 5662 ret i64 %1 5663} 5664 5665define i64 @atomicrmw_max_i64_monotonic(i64 *%a, i64 %b) nounwind { 5666; CSKY-LABEL: atomicrmw_max_i64_monotonic: 5667; CSKY: # %bb.0: 5668; CSKY-NEXT: subi16 sp, sp, 20 5669; CSKY-NEXT: st16.w l3, (sp, 16) 5670; CSKY-NEXT: st16.w l2, (sp, 12) 5671; CSKY-NEXT: st16.w l1, (sp, 8) 5672; CSKY-NEXT: st16.w l0, (sp, 4) 5673; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 5674; CSKY-NEXT: subi16 sp, sp, 28 5675; CSKY-NEXT: mov16 l0, a2 5676; CSKY-NEXT: mov16 l1, a1 5677; CSKY-NEXT: mov16 l2, a0 5678; CSKY-NEXT: ld16.w a1, (a0, 4) 5679; CSKY-NEXT: ld16.w a0, (a0, 0) 5680; CSKY-NEXT: movi16 l3, 0 5681; CSKY-NEXT: .LBB200_1: # %atomicrmw.start 5682; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 5683; CSKY-NEXT: cmplt16 l0, a1 5684; CSKY-NEXT: mvc32 a2 5685; CSKY-NEXT: st16.w a2, (sp, 12) 5686; CSKY-NEXT: cmpne16 a1, l0 5687; CSKY-NEXT: mvc32 a2 5688; CSKY-NEXT: st16.w a2, (sp, 16) 5689; CSKY-NEXT: cmphs16 l1, a0 5690; CSKY-NEXT: mvcv16 a2 5691; CSKY-NEXT: ld16.w a3, (sp, 12) 5692; CSKY-NEXT: btsti32 a3, 0 5693; CSKY-NEXT: mvc32 a3 5694; CSKY-NEXT: ld32.w t0, (sp, 16) 5695; CSKY-NEXT: btsti32 t0, 0 5696; CSKY-NEXT: movf32 a3, a2 5697; CSKY-NEXT: btsti32 a3, 0 5698; CSKY-NEXT: mov16 a2, l1 5699; CSKY-NEXT: movt32 a2, a0 5700; CSKY-NEXT: mov16 a3, l0 5701; CSKY-NEXT: movt32 a3, a1 5702; CSKY-NEXT: st16.w a0, (sp, 20) 5703; CSKY-NEXT: st16.w a1, (sp, 24) 5704; CSKY-NEXT: st16.w l3, (sp, 4) 5705; CSKY-NEXT: st16.w l3, (sp, 0) 5706; CSKY-NEXT: mov16 a0, l2 5707; CSKY-NEXT: addi16 a1, sp, 20 5708; CSKY-NEXT: jsri32 [.LCPI200_0] 5709; CSKY-NEXT: mov16 a2, a0 5710; CSKY-NEXT: ld16.w a1, (sp, 24) 5711; CSKY-NEXT: ld16.w a0, (sp, 20) 5712; CSKY-NEXT: bez32 a2, .LBB200_1 5713; CSKY-NEXT: # %bb.2: # %atomicrmw.end 5714; CSKY-NEXT: addi16 sp, sp, 28 5715; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 5716; CSKY-NEXT: ld16.w l0, (sp, 4) 5717; CSKY-NEXT: ld16.w l1, (sp, 8) 5718; CSKY-NEXT: ld16.w l2, (sp, 12) 5719; CSKY-NEXT: ld16.w l3, (sp, 16) 5720; CSKY-NEXT: addi16 sp, sp, 20 5721; CSKY-NEXT: rts16 5722; CSKY-NEXT: .p2align 1 5723; CSKY-NEXT: # %bb.3: 5724; CSKY-NEXT: .p2align 2 5725; CSKY-NEXT: .LCPI200_0: 5726; CSKY-NEXT: .long __atomic_compare_exchange_8 5727; 5728 %1 = atomicrmw max i64* %a, i64 %b monotonic 5729 ret i64 %1 5730} 5731 5732define i64 @atomicrmw_max_i64_acquire(i64 *%a, i64 %b) nounwind { 5733; CSKY-LABEL: atomicrmw_max_i64_acquire: 5734; CSKY: # %bb.0: 5735; CSKY-NEXT: subi16 sp, sp, 20 5736; CSKY-NEXT: st16.w l3, (sp, 16) 5737; CSKY-NEXT: st16.w l2, (sp, 12) 5738; CSKY-NEXT: st16.w l1, (sp, 8) 5739; CSKY-NEXT: st16.w l0, (sp, 4) 5740; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 5741; CSKY-NEXT: subi16 sp, sp, 28 5742; CSKY-NEXT: mov16 l0, a2 5743; CSKY-NEXT: mov16 l1, a1 5744; CSKY-NEXT: mov16 l2, a0 5745; CSKY-NEXT: ld16.w a1, (a0, 4) 5746; CSKY-NEXT: ld16.w a0, (a0, 0) 5747; CSKY-NEXT: movi16 l3, 2 5748; CSKY-NEXT: .LBB201_1: # %atomicrmw.start 5749; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 5750; CSKY-NEXT: cmplt16 l0, a1 5751; CSKY-NEXT: mvc32 a2 5752; CSKY-NEXT: st16.w a2, (sp, 12) 5753; CSKY-NEXT: cmpne16 a1, l0 5754; CSKY-NEXT: mvc32 a2 5755; CSKY-NEXT: st16.w a2, (sp, 16) 5756; CSKY-NEXT: cmphs16 l1, a0 5757; CSKY-NEXT: mvcv16 a2 5758; CSKY-NEXT: ld16.w a3, (sp, 12) 5759; CSKY-NEXT: btsti32 a3, 0 5760; CSKY-NEXT: mvc32 a3 5761; CSKY-NEXT: ld32.w t0, (sp, 16) 5762; CSKY-NEXT: btsti32 t0, 0 5763; CSKY-NEXT: movf32 a3, a2 5764; CSKY-NEXT: btsti32 a3, 0 5765; CSKY-NEXT: mov16 a2, l1 5766; CSKY-NEXT: movt32 a2, a0 5767; CSKY-NEXT: mov16 a3, l0 5768; CSKY-NEXT: movt32 a3, a1 5769; CSKY-NEXT: st16.w a0, (sp, 20) 5770; CSKY-NEXT: st16.w a1, (sp, 24) 5771; CSKY-NEXT: st16.w l3, (sp, 4) 5772; CSKY-NEXT: st16.w l3, (sp, 0) 5773; CSKY-NEXT: mov16 a0, l2 5774; CSKY-NEXT: addi16 a1, sp, 20 5775; CSKY-NEXT: jsri32 [.LCPI201_0] 5776; CSKY-NEXT: mov16 a2, a0 5777; CSKY-NEXT: ld16.w a1, (sp, 24) 5778; CSKY-NEXT: ld16.w a0, (sp, 20) 5779; CSKY-NEXT: bez32 a2, .LBB201_1 5780; CSKY-NEXT: # %bb.2: # %atomicrmw.end 5781; CSKY-NEXT: addi16 sp, sp, 28 5782; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 5783; CSKY-NEXT: ld16.w l0, (sp, 4) 5784; CSKY-NEXT: ld16.w l1, (sp, 8) 5785; CSKY-NEXT: ld16.w l2, (sp, 12) 5786; CSKY-NEXT: ld16.w l3, (sp, 16) 5787; CSKY-NEXT: addi16 sp, sp, 20 5788; CSKY-NEXT: rts16 5789; CSKY-NEXT: .p2align 1 5790; CSKY-NEXT: # %bb.3: 5791; CSKY-NEXT: .p2align 2 5792; CSKY-NEXT: .LCPI201_0: 5793; CSKY-NEXT: .long __atomic_compare_exchange_8 5794; 5795 %1 = atomicrmw max i64* %a, i64 %b acquire 5796 ret i64 %1 5797} 5798 5799define i64 @atomicrmw_max_i64_release(i64 *%a, i64 %b) nounwind { 5800; CSKY-LABEL: atomicrmw_max_i64_release: 5801; CSKY: # %bb.0: 5802; CSKY-NEXT: subi16 sp, sp, 24 5803; CSKY-NEXT: st16.w l3, (sp, 20) 5804; CSKY-NEXT: st16.w l2, (sp, 16) 5805; CSKY-NEXT: st16.w l1, (sp, 12) 5806; CSKY-NEXT: st16.w l0, (sp, 8) 5807; CSKY-NEXT: st32.w lr, (sp, 4) # 4-byte Folded Spill 5808; CSKY-NEXT: st32.w l4, (sp, 0) # 4-byte Folded Spill 5809; CSKY-NEXT: subi16 sp, sp, 28 5810; CSKY-NEXT: mov16 l0, a2 5811; CSKY-NEXT: mov16 l1, a1 5812; CSKY-NEXT: mov16 l2, a0 5813; CSKY-NEXT: ld16.w a1, (a0, 4) 5814; CSKY-NEXT: ld16.w a0, (a0, 0) 5815; CSKY-NEXT: movi16 l3, 0 5816; CSKY-NEXT: movi32 l4, 3 5817; CSKY-NEXT: .LBB202_1: # %atomicrmw.start 5818; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 5819; CSKY-NEXT: cmplt16 l0, a1 5820; CSKY-NEXT: mvc32 a2 5821; CSKY-NEXT: st16.w a2, (sp, 12) 5822; CSKY-NEXT: cmpne16 a1, l0 5823; CSKY-NEXT: mvc32 a2 5824; CSKY-NEXT: st16.w a2, (sp, 16) 5825; CSKY-NEXT: cmphs16 l1, a0 5826; CSKY-NEXT: mvcv16 a2 5827; CSKY-NEXT: ld16.w a3, (sp, 12) 5828; CSKY-NEXT: btsti32 a3, 0 5829; CSKY-NEXT: mvc32 a3 5830; CSKY-NEXT: ld32.w t0, (sp, 16) 5831; CSKY-NEXT: btsti32 t0, 0 5832; CSKY-NEXT: movf32 a3, a2 5833; CSKY-NEXT: btsti32 a3, 0 5834; CSKY-NEXT: mov16 a2, l1 5835; CSKY-NEXT: movt32 a2, a0 5836; CSKY-NEXT: mov16 a3, l0 5837; CSKY-NEXT: movt32 a3, a1 5838; CSKY-NEXT: st16.w a0, (sp, 20) 5839; CSKY-NEXT: st16.w a1, (sp, 24) 5840; CSKY-NEXT: st16.w l3, (sp, 4) 5841; CSKY-NEXT: st32.w l4, (sp, 0) 5842; CSKY-NEXT: mov16 a0, l2 5843; CSKY-NEXT: addi16 a1, sp, 20 5844; CSKY-NEXT: jsri32 [.LCPI202_0] 5845; CSKY-NEXT: mov16 a2, a0 5846; CSKY-NEXT: ld16.w a1, (sp, 24) 5847; CSKY-NEXT: ld16.w a0, (sp, 20) 5848; CSKY-NEXT: bez32 a2, .LBB202_1 5849; CSKY-NEXT: # %bb.2: # %atomicrmw.end 5850; CSKY-NEXT: addi16 sp, sp, 28 5851; CSKY-NEXT: ld32.w l4, (sp, 0) # 4-byte Folded Reload 5852; CSKY-NEXT: ld32.w lr, (sp, 4) # 4-byte Folded Reload 5853; CSKY-NEXT: ld16.w l0, (sp, 8) 5854; CSKY-NEXT: ld16.w l1, (sp, 12) 5855; CSKY-NEXT: ld16.w l2, (sp, 16) 5856; CSKY-NEXT: ld16.w l3, (sp, 20) 5857; CSKY-NEXT: addi16 sp, sp, 24 5858; CSKY-NEXT: rts16 5859; CSKY-NEXT: .p2align 1 5860; CSKY-NEXT: # %bb.3: 5861; CSKY-NEXT: .p2align 2 5862; CSKY-NEXT: .LCPI202_0: 5863; CSKY-NEXT: .long __atomic_compare_exchange_8 5864; 5865 %1 = atomicrmw max i64* %a, i64 %b release 5866 ret i64 %1 5867} 5868 5869define i64 @atomicrmw_max_i64_acq_rel(i64 *%a, i64 %b) nounwind { 5870; CSKY-LABEL: atomicrmw_max_i64_acq_rel: 5871; CSKY: # %bb.0: 5872; CSKY-NEXT: subi16 sp, sp, 24 5873; CSKY-NEXT: st16.w l3, (sp, 20) 5874; CSKY-NEXT: st16.w l2, (sp, 16) 5875; CSKY-NEXT: st16.w l1, (sp, 12) 5876; CSKY-NEXT: st16.w l0, (sp, 8) 5877; CSKY-NEXT: st32.w lr, (sp, 4) # 4-byte Folded Spill 5878; CSKY-NEXT: st32.w l4, (sp, 0) # 4-byte Folded Spill 5879; CSKY-NEXT: subi16 sp, sp, 28 5880; CSKY-NEXT: mov16 l0, a2 5881; CSKY-NEXT: mov16 l1, a1 5882; CSKY-NEXT: mov16 l2, a0 5883; CSKY-NEXT: ld16.w a1, (a0, 4) 5884; CSKY-NEXT: ld16.w a0, (a0, 0) 5885; CSKY-NEXT: movi16 l3, 2 5886; CSKY-NEXT: movi32 l4, 4 5887; CSKY-NEXT: .LBB203_1: # %atomicrmw.start 5888; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 5889; CSKY-NEXT: cmplt16 l0, a1 5890; CSKY-NEXT: mvc32 a2 5891; CSKY-NEXT: st16.w a2, (sp, 12) 5892; CSKY-NEXT: cmpne16 a1, l0 5893; CSKY-NEXT: mvc32 a2 5894; CSKY-NEXT: st16.w a2, (sp, 16) 5895; CSKY-NEXT: cmphs16 l1, a0 5896; CSKY-NEXT: mvcv16 a2 5897; CSKY-NEXT: ld16.w a3, (sp, 12) 5898; CSKY-NEXT: btsti32 a3, 0 5899; CSKY-NEXT: mvc32 a3 5900; CSKY-NEXT: ld32.w t0, (sp, 16) 5901; CSKY-NEXT: btsti32 t0, 0 5902; CSKY-NEXT: movf32 a3, a2 5903; CSKY-NEXT: btsti32 a3, 0 5904; CSKY-NEXT: mov16 a2, l1 5905; CSKY-NEXT: movt32 a2, a0 5906; CSKY-NEXT: mov16 a3, l0 5907; CSKY-NEXT: movt32 a3, a1 5908; CSKY-NEXT: st16.w a0, (sp, 20) 5909; CSKY-NEXT: st16.w a1, (sp, 24) 5910; CSKY-NEXT: st16.w l3, (sp, 4) 5911; CSKY-NEXT: st32.w l4, (sp, 0) 5912; CSKY-NEXT: mov16 a0, l2 5913; CSKY-NEXT: addi16 a1, sp, 20 5914; CSKY-NEXT: jsri32 [.LCPI203_0] 5915; CSKY-NEXT: mov16 a2, a0 5916; CSKY-NEXT: ld16.w a1, (sp, 24) 5917; CSKY-NEXT: ld16.w a0, (sp, 20) 5918; CSKY-NEXT: bez32 a2, .LBB203_1 5919; CSKY-NEXT: # %bb.2: # %atomicrmw.end 5920; CSKY-NEXT: addi16 sp, sp, 28 5921; CSKY-NEXT: ld32.w l4, (sp, 0) # 4-byte Folded Reload 5922; CSKY-NEXT: ld32.w lr, (sp, 4) # 4-byte Folded Reload 5923; CSKY-NEXT: ld16.w l0, (sp, 8) 5924; CSKY-NEXT: ld16.w l1, (sp, 12) 5925; CSKY-NEXT: ld16.w l2, (sp, 16) 5926; CSKY-NEXT: ld16.w l3, (sp, 20) 5927; CSKY-NEXT: addi16 sp, sp, 24 5928; CSKY-NEXT: rts16 5929; CSKY-NEXT: .p2align 1 5930; CSKY-NEXT: # %bb.3: 5931; CSKY-NEXT: .p2align 2 5932; CSKY-NEXT: .LCPI203_0: 5933; CSKY-NEXT: .long __atomic_compare_exchange_8 5934; 5935 %1 = atomicrmw max i64* %a, i64 %b acq_rel 5936 ret i64 %1 5937} 5938 5939define i64 @atomicrmw_max_i64_seq_cst(i64 *%a, i64 %b) nounwind { 5940; CSKY-LABEL: atomicrmw_max_i64_seq_cst: 5941; CSKY: # %bb.0: 5942; CSKY-NEXT: subi16 sp, sp, 20 5943; CSKY-NEXT: st16.w l3, (sp, 16) 5944; CSKY-NEXT: st16.w l2, (sp, 12) 5945; CSKY-NEXT: st16.w l1, (sp, 8) 5946; CSKY-NEXT: st16.w l0, (sp, 4) 5947; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 5948; CSKY-NEXT: subi16 sp, sp, 28 5949; CSKY-NEXT: mov16 l0, a2 5950; CSKY-NEXT: mov16 l1, a1 5951; CSKY-NEXT: mov16 l2, a0 5952; CSKY-NEXT: ld16.w a1, (a0, 4) 5953; CSKY-NEXT: ld16.w a0, (a0, 0) 5954; CSKY-NEXT: movi16 l3, 5 5955; CSKY-NEXT: .LBB204_1: # %atomicrmw.start 5956; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 5957; CSKY-NEXT: cmplt16 l0, a1 5958; CSKY-NEXT: mvc32 a2 5959; CSKY-NEXT: st16.w a2, (sp, 12) 5960; CSKY-NEXT: cmpne16 a1, l0 5961; CSKY-NEXT: mvc32 a2 5962; CSKY-NEXT: st16.w a2, (sp, 16) 5963; CSKY-NEXT: cmphs16 l1, a0 5964; CSKY-NEXT: mvcv16 a2 5965; CSKY-NEXT: ld16.w a3, (sp, 12) 5966; CSKY-NEXT: btsti32 a3, 0 5967; CSKY-NEXT: mvc32 a3 5968; CSKY-NEXT: ld32.w t0, (sp, 16) 5969; CSKY-NEXT: btsti32 t0, 0 5970; CSKY-NEXT: movf32 a3, a2 5971; CSKY-NEXT: btsti32 a3, 0 5972; CSKY-NEXT: mov16 a2, l1 5973; CSKY-NEXT: movt32 a2, a0 5974; CSKY-NEXT: mov16 a3, l0 5975; CSKY-NEXT: movt32 a3, a1 5976; CSKY-NEXT: st16.w a0, (sp, 20) 5977; CSKY-NEXT: st16.w a1, (sp, 24) 5978; CSKY-NEXT: st16.w l3, (sp, 4) 5979; CSKY-NEXT: st16.w l3, (sp, 0) 5980; CSKY-NEXT: mov16 a0, l2 5981; CSKY-NEXT: addi16 a1, sp, 20 5982; CSKY-NEXT: jsri32 [.LCPI204_0] 5983; CSKY-NEXT: mov16 a2, a0 5984; CSKY-NEXT: ld16.w a1, (sp, 24) 5985; CSKY-NEXT: ld16.w a0, (sp, 20) 5986; CSKY-NEXT: bez32 a2, .LBB204_1 5987; CSKY-NEXT: # %bb.2: # %atomicrmw.end 5988; CSKY-NEXT: addi16 sp, sp, 28 5989; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 5990; CSKY-NEXT: ld16.w l0, (sp, 4) 5991; CSKY-NEXT: ld16.w l1, (sp, 8) 5992; CSKY-NEXT: ld16.w l2, (sp, 12) 5993; CSKY-NEXT: ld16.w l3, (sp, 16) 5994; CSKY-NEXT: addi16 sp, sp, 20 5995; CSKY-NEXT: rts16 5996; CSKY-NEXT: .p2align 1 5997; CSKY-NEXT: # %bb.3: 5998; CSKY-NEXT: .p2align 2 5999; CSKY-NEXT: .LCPI204_0: 6000; CSKY-NEXT: .long __atomic_compare_exchange_8 6001; 6002 %1 = atomicrmw max i64* %a, i64 %b seq_cst 6003 ret i64 %1 6004} 6005 6006define i64 @atomicrmw_min_i64_monotonic(i64 *%a, i64 %b) nounwind { 6007; CSKY-LABEL: atomicrmw_min_i64_monotonic: 6008; CSKY: # %bb.0: 6009; CSKY-NEXT: subi16 sp, sp, 20 6010; CSKY-NEXT: st16.w l3, (sp, 16) 6011; CSKY-NEXT: st16.w l2, (sp, 12) 6012; CSKY-NEXT: st16.w l1, (sp, 8) 6013; CSKY-NEXT: st16.w l0, (sp, 4) 6014; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 6015; CSKY-NEXT: subi16 sp, sp, 28 6016; CSKY-NEXT: mov16 l0, a2 6017; CSKY-NEXT: mov16 l1, a1 6018; CSKY-NEXT: mov16 l2, a0 6019; CSKY-NEXT: ld16.w a1, (a0, 4) 6020; CSKY-NEXT: ld16.w a0, (a0, 0) 6021; CSKY-NEXT: movi16 l3, 0 6022; CSKY-NEXT: .LBB205_1: # %atomicrmw.start 6023; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 6024; CSKY-NEXT: cmphs16 l1, a0 6025; CSKY-NEXT: mvc32 a2 6026; CSKY-NEXT: st16.w a2, (sp, 12) 6027; CSKY-NEXT: cmpne16 a1, l0 6028; CSKY-NEXT: mvc32 a2 6029; CSKY-NEXT: st16.w a2, (sp, 16) 6030; CSKY-NEXT: cmplt16 l0, a1 6031; CSKY-NEXT: mvcv16 a2 6032; CSKY-NEXT: ld16.w a3, (sp, 12) 6033; CSKY-NEXT: btsti32 a3, 0 6034; CSKY-NEXT: mvc32 a3 6035; CSKY-NEXT: ld32.w t0, (sp, 16) 6036; CSKY-NEXT: btsti32 t0, 0 6037; CSKY-NEXT: movf32 a2, a3 6038; CSKY-NEXT: btsti32 a2, 0 6039; CSKY-NEXT: mov16 a2, l1 6040; CSKY-NEXT: movt32 a2, a0 6041; CSKY-NEXT: mov16 a3, l0 6042; CSKY-NEXT: movt32 a3, a1 6043; CSKY-NEXT: st16.w a0, (sp, 20) 6044; CSKY-NEXT: st16.w a1, (sp, 24) 6045; CSKY-NEXT: st16.w l3, (sp, 4) 6046; CSKY-NEXT: st16.w l3, (sp, 0) 6047; CSKY-NEXT: mov16 a0, l2 6048; CSKY-NEXT: addi16 a1, sp, 20 6049; CSKY-NEXT: jsri32 [.LCPI205_0] 6050; CSKY-NEXT: mov16 a2, a0 6051; CSKY-NEXT: ld16.w a1, (sp, 24) 6052; CSKY-NEXT: ld16.w a0, (sp, 20) 6053; CSKY-NEXT: bez32 a2, .LBB205_1 6054; CSKY-NEXT: # %bb.2: # %atomicrmw.end 6055; CSKY-NEXT: addi16 sp, sp, 28 6056; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 6057; CSKY-NEXT: ld16.w l0, (sp, 4) 6058; CSKY-NEXT: ld16.w l1, (sp, 8) 6059; CSKY-NEXT: ld16.w l2, (sp, 12) 6060; CSKY-NEXT: ld16.w l3, (sp, 16) 6061; CSKY-NEXT: addi16 sp, sp, 20 6062; CSKY-NEXT: rts16 6063; CSKY-NEXT: .p2align 1 6064; CSKY-NEXT: # %bb.3: 6065; CSKY-NEXT: .p2align 2 6066; CSKY-NEXT: .LCPI205_0: 6067; CSKY-NEXT: .long __atomic_compare_exchange_8 6068; 6069 %1 = atomicrmw min i64* %a, i64 %b monotonic 6070 ret i64 %1 6071} 6072 6073define i64 @atomicrmw_min_i64_acquire(i64 *%a, i64 %b) nounwind { 6074; CSKY-LABEL: atomicrmw_min_i64_acquire: 6075; CSKY: # %bb.0: 6076; CSKY-NEXT: subi16 sp, sp, 20 6077; CSKY-NEXT: st16.w l3, (sp, 16) 6078; CSKY-NEXT: st16.w l2, (sp, 12) 6079; CSKY-NEXT: st16.w l1, (sp, 8) 6080; CSKY-NEXT: st16.w l0, (sp, 4) 6081; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 6082; CSKY-NEXT: subi16 sp, sp, 28 6083; CSKY-NEXT: mov16 l0, a2 6084; CSKY-NEXT: mov16 l1, a1 6085; CSKY-NEXT: mov16 l2, a0 6086; CSKY-NEXT: ld16.w a1, (a0, 4) 6087; CSKY-NEXT: ld16.w a0, (a0, 0) 6088; CSKY-NEXT: movi16 l3, 2 6089; CSKY-NEXT: .LBB206_1: # %atomicrmw.start 6090; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 6091; CSKY-NEXT: cmphs16 l1, a0 6092; CSKY-NEXT: mvc32 a2 6093; CSKY-NEXT: st16.w a2, (sp, 12) 6094; CSKY-NEXT: cmpne16 a1, l0 6095; CSKY-NEXT: mvc32 a2 6096; CSKY-NEXT: st16.w a2, (sp, 16) 6097; CSKY-NEXT: cmplt16 l0, a1 6098; CSKY-NEXT: mvcv16 a2 6099; CSKY-NEXT: ld16.w a3, (sp, 12) 6100; CSKY-NEXT: btsti32 a3, 0 6101; CSKY-NEXT: mvc32 a3 6102; CSKY-NEXT: ld32.w t0, (sp, 16) 6103; CSKY-NEXT: btsti32 t0, 0 6104; CSKY-NEXT: movf32 a2, a3 6105; CSKY-NEXT: btsti32 a2, 0 6106; CSKY-NEXT: mov16 a2, l1 6107; CSKY-NEXT: movt32 a2, a0 6108; CSKY-NEXT: mov16 a3, l0 6109; CSKY-NEXT: movt32 a3, a1 6110; CSKY-NEXT: st16.w a0, (sp, 20) 6111; CSKY-NEXT: st16.w a1, (sp, 24) 6112; CSKY-NEXT: st16.w l3, (sp, 4) 6113; CSKY-NEXT: st16.w l3, (sp, 0) 6114; CSKY-NEXT: mov16 a0, l2 6115; CSKY-NEXT: addi16 a1, sp, 20 6116; CSKY-NEXT: jsri32 [.LCPI206_0] 6117; CSKY-NEXT: mov16 a2, a0 6118; CSKY-NEXT: ld16.w a1, (sp, 24) 6119; CSKY-NEXT: ld16.w a0, (sp, 20) 6120; CSKY-NEXT: bez32 a2, .LBB206_1 6121; CSKY-NEXT: # %bb.2: # %atomicrmw.end 6122; CSKY-NEXT: addi16 sp, sp, 28 6123; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 6124; CSKY-NEXT: ld16.w l0, (sp, 4) 6125; CSKY-NEXT: ld16.w l1, (sp, 8) 6126; CSKY-NEXT: ld16.w l2, (sp, 12) 6127; CSKY-NEXT: ld16.w l3, (sp, 16) 6128; CSKY-NEXT: addi16 sp, sp, 20 6129; CSKY-NEXT: rts16 6130; CSKY-NEXT: .p2align 1 6131; CSKY-NEXT: # %bb.3: 6132; CSKY-NEXT: .p2align 2 6133; CSKY-NEXT: .LCPI206_0: 6134; CSKY-NEXT: .long __atomic_compare_exchange_8 6135; 6136 %1 = atomicrmw min i64* %a, i64 %b acquire 6137 ret i64 %1 6138} 6139 6140define i64 @atomicrmw_min_i64_release(i64 *%a, i64 %b) nounwind { 6141; CSKY-LABEL: atomicrmw_min_i64_release: 6142; CSKY: # %bb.0: 6143; CSKY-NEXT: subi16 sp, sp, 24 6144; CSKY-NEXT: st16.w l3, (sp, 20) 6145; CSKY-NEXT: st16.w l2, (sp, 16) 6146; CSKY-NEXT: st16.w l1, (sp, 12) 6147; CSKY-NEXT: st16.w l0, (sp, 8) 6148; CSKY-NEXT: st32.w lr, (sp, 4) # 4-byte Folded Spill 6149; CSKY-NEXT: st32.w l4, (sp, 0) # 4-byte Folded Spill 6150; CSKY-NEXT: subi16 sp, sp, 28 6151; CSKY-NEXT: mov16 l0, a2 6152; CSKY-NEXT: mov16 l1, a1 6153; CSKY-NEXT: mov16 l2, a0 6154; CSKY-NEXT: ld16.w a1, (a0, 4) 6155; CSKY-NEXT: ld16.w a0, (a0, 0) 6156; CSKY-NEXT: movi16 l3, 0 6157; CSKY-NEXT: movi32 l4, 3 6158; CSKY-NEXT: .LBB207_1: # %atomicrmw.start 6159; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 6160; CSKY-NEXT: cmphs16 l1, a0 6161; CSKY-NEXT: mvc32 a2 6162; CSKY-NEXT: st16.w a2, (sp, 12) 6163; CSKY-NEXT: cmpne16 a1, l0 6164; CSKY-NEXT: mvc32 a2 6165; CSKY-NEXT: st16.w a2, (sp, 16) 6166; CSKY-NEXT: cmplt16 l0, a1 6167; CSKY-NEXT: mvcv16 a2 6168; CSKY-NEXT: ld16.w a3, (sp, 12) 6169; CSKY-NEXT: btsti32 a3, 0 6170; CSKY-NEXT: mvc32 a3 6171; CSKY-NEXT: ld32.w t0, (sp, 16) 6172; CSKY-NEXT: btsti32 t0, 0 6173; CSKY-NEXT: movf32 a2, a3 6174; CSKY-NEXT: btsti32 a2, 0 6175; CSKY-NEXT: mov16 a2, l1 6176; CSKY-NEXT: movt32 a2, a0 6177; CSKY-NEXT: mov16 a3, l0 6178; CSKY-NEXT: movt32 a3, a1 6179; CSKY-NEXT: st16.w a0, (sp, 20) 6180; CSKY-NEXT: st16.w a1, (sp, 24) 6181; CSKY-NEXT: st16.w l3, (sp, 4) 6182; CSKY-NEXT: st32.w l4, (sp, 0) 6183; CSKY-NEXT: mov16 a0, l2 6184; CSKY-NEXT: addi16 a1, sp, 20 6185; CSKY-NEXT: jsri32 [.LCPI207_0] 6186; CSKY-NEXT: mov16 a2, a0 6187; CSKY-NEXT: ld16.w a1, (sp, 24) 6188; CSKY-NEXT: ld16.w a0, (sp, 20) 6189; CSKY-NEXT: bez32 a2, .LBB207_1 6190; CSKY-NEXT: # %bb.2: # %atomicrmw.end 6191; CSKY-NEXT: addi16 sp, sp, 28 6192; CSKY-NEXT: ld32.w l4, (sp, 0) # 4-byte Folded Reload 6193; CSKY-NEXT: ld32.w lr, (sp, 4) # 4-byte Folded Reload 6194; CSKY-NEXT: ld16.w l0, (sp, 8) 6195; CSKY-NEXT: ld16.w l1, (sp, 12) 6196; CSKY-NEXT: ld16.w l2, (sp, 16) 6197; CSKY-NEXT: ld16.w l3, (sp, 20) 6198; CSKY-NEXT: addi16 sp, sp, 24 6199; CSKY-NEXT: rts16 6200; CSKY-NEXT: .p2align 1 6201; CSKY-NEXT: # %bb.3: 6202; CSKY-NEXT: .p2align 2 6203; CSKY-NEXT: .LCPI207_0: 6204; CSKY-NEXT: .long __atomic_compare_exchange_8 6205; 6206 %1 = atomicrmw min i64* %a, i64 %b release 6207 ret i64 %1 6208} 6209 6210define i64 @atomicrmw_min_i64_acq_rel(i64 *%a, i64 %b) nounwind { 6211; CSKY-LABEL: atomicrmw_min_i64_acq_rel: 6212; CSKY: # %bb.0: 6213; CSKY-NEXT: subi16 sp, sp, 24 6214; CSKY-NEXT: st16.w l3, (sp, 20) 6215; CSKY-NEXT: st16.w l2, (sp, 16) 6216; CSKY-NEXT: st16.w l1, (sp, 12) 6217; CSKY-NEXT: st16.w l0, (sp, 8) 6218; CSKY-NEXT: st32.w lr, (sp, 4) # 4-byte Folded Spill 6219; CSKY-NEXT: st32.w l4, (sp, 0) # 4-byte Folded Spill 6220; CSKY-NEXT: subi16 sp, sp, 28 6221; CSKY-NEXT: mov16 l0, a2 6222; CSKY-NEXT: mov16 l1, a1 6223; CSKY-NEXT: mov16 l2, a0 6224; CSKY-NEXT: ld16.w a1, (a0, 4) 6225; CSKY-NEXT: ld16.w a0, (a0, 0) 6226; CSKY-NEXT: movi16 l3, 2 6227; CSKY-NEXT: movi32 l4, 4 6228; CSKY-NEXT: .LBB208_1: # %atomicrmw.start 6229; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 6230; CSKY-NEXT: cmphs16 l1, a0 6231; CSKY-NEXT: mvc32 a2 6232; CSKY-NEXT: st16.w a2, (sp, 12) 6233; CSKY-NEXT: cmpne16 a1, l0 6234; CSKY-NEXT: mvc32 a2 6235; CSKY-NEXT: st16.w a2, (sp, 16) 6236; CSKY-NEXT: cmplt16 l0, a1 6237; CSKY-NEXT: mvcv16 a2 6238; CSKY-NEXT: ld16.w a3, (sp, 12) 6239; CSKY-NEXT: btsti32 a3, 0 6240; CSKY-NEXT: mvc32 a3 6241; CSKY-NEXT: ld32.w t0, (sp, 16) 6242; CSKY-NEXT: btsti32 t0, 0 6243; CSKY-NEXT: movf32 a2, a3 6244; CSKY-NEXT: btsti32 a2, 0 6245; CSKY-NEXT: mov16 a2, l1 6246; CSKY-NEXT: movt32 a2, a0 6247; CSKY-NEXT: mov16 a3, l0 6248; CSKY-NEXT: movt32 a3, a1 6249; CSKY-NEXT: st16.w a0, (sp, 20) 6250; CSKY-NEXT: st16.w a1, (sp, 24) 6251; CSKY-NEXT: st16.w l3, (sp, 4) 6252; CSKY-NEXT: st32.w l4, (sp, 0) 6253; CSKY-NEXT: mov16 a0, l2 6254; CSKY-NEXT: addi16 a1, sp, 20 6255; CSKY-NEXT: jsri32 [.LCPI208_0] 6256; CSKY-NEXT: mov16 a2, a0 6257; CSKY-NEXT: ld16.w a1, (sp, 24) 6258; CSKY-NEXT: ld16.w a0, (sp, 20) 6259; CSKY-NEXT: bez32 a2, .LBB208_1 6260; CSKY-NEXT: # %bb.2: # %atomicrmw.end 6261; CSKY-NEXT: addi16 sp, sp, 28 6262; CSKY-NEXT: ld32.w l4, (sp, 0) # 4-byte Folded Reload 6263; CSKY-NEXT: ld32.w lr, (sp, 4) # 4-byte Folded Reload 6264; CSKY-NEXT: ld16.w l0, (sp, 8) 6265; CSKY-NEXT: ld16.w l1, (sp, 12) 6266; CSKY-NEXT: ld16.w l2, (sp, 16) 6267; CSKY-NEXT: ld16.w l3, (sp, 20) 6268; CSKY-NEXT: addi16 sp, sp, 24 6269; CSKY-NEXT: rts16 6270; CSKY-NEXT: .p2align 1 6271; CSKY-NEXT: # %bb.3: 6272; CSKY-NEXT: .p2align 2 6273; CSKY-NEXT: .LCPI208_0: 6274; CSKY-NEXT: .long __atomic_compare_exchange_8 6275; 6276 %1 = atomicrmw min i64* %a, i64 %b acq_rel 6277 ret i64 %1 6278} 6279 6280define i64 @atomicrmw_min_i64_seq_cst(i64 *%a, i64 %b) nounwind { 6281; CSKY-LABEL: atomicrmw_min_i64_seq_cst: 6282; CSKY: # %bb.0: 6283; CSKY-NEXT: subi16 sp, sp, 20 6284; CSKY-NEXT: st16.w l3, (sp, 16) 6285; CSKY-NEXT: st16.w l2, (sp, 12) 6286; CSKY-NEXT: st16.w l1, (sp, 8) 6287; CSKY-NEXT: st16.w l0, (sp, 4) 6288; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 6289; CSKY-NEXT: subi16 sp, sp, 28 6290; CSKY-NEXT: mov16 l0, a2 6291; CSKY-NEXT: mov16 l1, a1 6292; CSKY-NEXT: mov16 l2, a0 6293; CSKY-NEXT: ld16.w a1, (a0, 4) 6294; CSKY-NEXT: ld16.w a0, (a0, 0) 6295; CSKY-NEXT: movi16 l3, 5 6296; CSKY-NEXT: .LBB209_1: # %atomicrmw.start 6297; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 6298; CSKY-NEXT: cmphs16 l1, a0 6299; CSKY-NEXT: mvc32 a2 6300; CSKY-NEXT: st16.w a2, (sp, 12) 6301; CSKY-NEXT: cmpne16 a1, l0 6302; CSKY-NEXT: mvc32 a2 6303; CSKY-NEXT: st16.w a2, (sp, 16) 6304; CSKY-NEXT: cmplt16 l0, a1 6305; CSKY-NEXT: mvcv16 a2 6306; CSKY-NEXT: ld16.w a3, (sp, 12) 6307; CSKY-NEXT: btsti32 a3, 0 6308; CSKY-NEXT: mvc32 a3 6309; CSKY-NEXT: ld32.w t0, (sp, 16) 6310; CSKY-NEXT: btsti32 t0, 0 6311; CSKY-NEXT: movf32 a2, a3 6312; CSKY-NEXT: btsti32 a2, 0 6313; CSKY-NEXT: mov16 a2, l1 6314; CSKY-NEXT: movt32 a2, a0 6315; CSKY-NEXT: mov16 a3, l0 6316; CSKY-NEXT: movt32 a3, a1 6317; CSKY-NEXT: st16.w a0, (sp, 20) 6318; CSKY-NEXT: st16.w a1, (sp, 24) 6319; CSKY-NEXT: st16.w l3, (sp, 4) 6320; CSKY-NEXT: st16.w l3, (sp, 0) 6321; CSKY-NEXT: mov16 a0, l2 6322; CSKY-NEXT: addi16 a1, sp, 20 6323; CSKY-NEXT: jsri32 [.LCPI209_0] 6324; CSKY-NEXT: mov16 a2, a0 6325; CSKY-NEXT: ld16.w a1, (sp, 24) 6326; CSKY-NEXT: ld16.w a0, (sp, 20) 6327; CSKY-NEXT: bez32 a2, .LBB209_1 6328; CSKY-NEXT: # %bb.2: # %atomicrmw.end 6329; CSKY-NEXT: addi16 sp, sp, 28 6330; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 6331; CSKY-NEXT: ld16.w l0, (sp, 4) 6332; CSKY-NEXT: ld16.w l1, (sp, 8) 6333; CSKY-NEXT: ld16.w l2, (sp, 12) 6334; CSKY-NEXT: ld16.w l3, (sp, 16) 6335; CSKY-NEXT: addi16 sp, sp, 20 6336; CSKY-NEXT: rts16 6337; CSKY-NEXT: .p2align 1 6338; CSKY-NEXT: # %bb.3: 6339; CSKY-NEXT: .p2align 2 6340; CSKY-NEXT: .LCPI209_0: 6341; CSKY-NEXT: .long __atomic_compare_exchange_8 6342; 6343 %1 = atomicrmw min i64* %a, i64 %b seq_cst 6344 ret i64 %1 6345} 6346 6347define i64 @atomicrmw_umax_i64_monotonic(i64 *%a, i64 %b) nounwind { 6348; CSKY-LABEL: atomicrmw_umax_i64_monotonic: 6349; CSKY: # %bb.0: 6350; CSKY-NEXT: subi16 sp, sp, 20 6351; CSKY-NEXT: st16.w l3, (sp, 16) 6352; CSKY-NEXT: st16.w l2, (sp, 12) 6353; CSKY-NEXT: st16.w l1, (sp, 8) 6354; CSKY-NEXT: st16.w l0, (sp, 4) 6355; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 6356; CSKY-NEXT: subi16 sp, sp, 24 6357; CSKY-NEXT: mov16 l0, a2 6358; CSKY-NEXT: mov16 l1, a1 6359; CSKY-NEXT: mov16 l2, a0 6360; CSKY-NEXT: ld16.w a1, (a0, 4) 6361; CSKY-NEXT: ld16.w a0, (a0, 0) 6362; CSKY-NEXT: movi16 l3, 0 6363; CSKY-NEXT: .LBB210_1: # %atomicrmw.start 6364; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 6365; CSKY-NEXT: cmpne16 a1, l0 6366; CSKY-NEXT: mvc32 a2 6367; CSKY-NEXT: st16.w a2, (sp, 12) 6368; CSKY-NEXT: cmphs16 l1, a0 6369; CSKY-NEXT: mvcv16 a2 6370; CSKY-NEXT: cmphs16 l0, a1 6371; CSKY-NEXT: mvcv16 a3 6372; CSKY-NEXT: ld32.w t0, (sp, 12) 6373; CSKY-NEXT: btsti32 t0, 0 6374; CSKY-NEXT: movf32 a3, a2 6375; CSKY-NEXT: btsti32 a3, 0 6376; CSKY-NEXT: mov16 a2, l1 6377; CSKY-NEXT: movt32 a2, a0 6378; CSKY-NEXT: mov16 a3, l0 6379; CSKY-NEXT: movt32 a3, a1 6380; CSKY-NEXT: st16.w a0, (sp, 16) 6381; CSKY-NEXT: st16.w a1, (sp, 20) 6382; CSKY-NEXT: st16.w l3, (sp, 4) 6383; CSKY-NEXT: st16.w l3, (sp, 0) 6384; CSKY-NEXT: mov16 a0, l2 6385; CSKY-NEXT: addi16 a1, sp, 16 6386; CSKY-NEXT: jsri32 [.LCPI210_0] 6387; CSKY-NEXT: mov16 a2, a0 6388; CSKY-NEXT: ld16.w a1, (sp, 20) 6389; CSKY-NEXT: ld16.w a0, (sp, 16) 6390; CSKY-NEXT: bez32 a2, .LBB210_1 6391; CSKY-NEXT: # %bb.2: # %atomicrmw.end 6392; CSKY-NEXT: addi16 sp, sp, 24 6393; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 6394; CSKY-NEXT: ld16.w l0, (sp, 4) 6395; CSKY-NEXT: ld16.w l1, (sp, 8) 6396; CSKY-NEXT: ld16.w l2, (sp, 12) 6397; CSKY-NEXT: ld16.w l3, (sp, 16) 6398; CSKY-NEXT: addi16 sp, sp, 20 6399; CSKY-NEXT: rts16 6400; CSKY-NEXT: .p2align 1 6401; CSKY-NEXT: # %bb.3: 6402; CSKY-NEXT: .p2align 2 6403; CSKY-NEXT: .LCPI210_0: 6404; CSKY-NEXT: .long __atomic_compare_exchange_8 6405; 6406 %1 = atomicrmw umax i64* %a, i64 %b monotonic 6407 ret i64 %1 6408} 6409 6410define i64 @atomicrmw_umax_i64_acquire(i64 *%a, i64 %b) nounwind { 6411; CSKY-LABEL: atomicrmw_umax_i64_acquire: 6412; CSKY: # %bb.0: 6413; CSKY-NEXT: subi16 sp, sp, 20 6414; CSKY-NEXT: st16.w l3, (sp, 16) 6415; CSKY-NEXT: st16.w l2, (sp, 12) 6416; CSKY-NEXT: st16.w l1, (sp, 8) 6417; CSKY-NEXT: st16.w l0, (sp, 4) 6418; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 6419; CSKY-NEXT: subi16 sp, sp, 24 6420; CSKY-NEXT: mov16 l0, a2 6421; CSKY-NEXT: mov16 l1, a1 6422; CSKY-NEXT: mov16 l2, a0 6423; CSKY-NEXT: ld16.w a1, (a0, 4) 6424; CSKY-NEXT: ld16.w a0, (a0, 0) 6425; CSKY-NEXT: movi16 l3, 2 6426; CSKY-NEXT: .LBB211_1: # %atomicrmw.start 6427; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 6428; CSKY-NEXT: cmpne16 a1, l0 6429; CSKY-NEXT: mvc32 a2 6430; CSKY-NEXT: st16.w a2, (sp, 12) 6431; CSKY-NEXT: cmphs16 l1, a0 6432; CSKY-NEXT: mvcv16 a2 6433; CSKY-NEXT: cmphs16 l0, a1 6434; CSKY-NEXT: mvcv16 a3 6435; CSKY-NEXT: ld32.w t0, (sp, 12) 6436; CSKY-NEXT: btsti32 t0, 0 6437; CSKY-NEXT: movf32 a3, a2 6438; CSKY-NEXT: btsti32 a3, 0 6439; CSKY-NEXT: mov16 a2, l1 6440; CSKY-NEXT: movt32 a2, a0 6441; CSKY-NEXT: mov16 a3, l0 6442; CSKY-NEXT: movt32 a3, a1 6443; CSKY-NEXT: st16.w a0, (sp, 16) 6444; CSKY-NEXT: st16.w a1, (sp, 20) 6445; CSKY-NEXT: st16.w l3, (sp, 4) 6446; CSKY-NEXT: st16.w l3, (sp, 0) 6447; CSKY-NEXT: mov16 a0, l2 6448; CSKY-NEXT: addi16 a1, sp, 16 6449; CSKY-NEXT: jsri32 [.LCPI211_0] 6450; CSKY-NEXT: mov16 a2, a0 6451; CSKY-NEXT: ld16.w a1, (sp, 20) 6452; CSKY-NEXT: ld16.w a0, (sp, 16) 6453; CSKY-NEXT: bez32 a2, .LBB211_1 6454; CSKY-NEXT: # %bb.2: # %atomicrmw.end 6455; CSKY-NEXT: addi16 sp, sp, 24 6456; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 6457; CSKY-NEXT: ld16.w l0, (sp, 4) 6458; CSKY-NEXT: ld16.w l1, (sp, 8) 6459; CSKY-NEXT: ld16.w l2, (sp, 12) 6460; CSKY-NEXT: ld16.w l3, (sp, 16) 6461; CSKY-NEXT: addi16 sp, sp, 20 6462; CSKY-NEXT: rts16 6463; CSKY-NEXT: .p2align 1 6464; CSKY-NEXT: # %bb.3: 6465; CSKY-NEXT: .p2align 2 6466; CSKY-NEXT: .LCPI211_0: 6467; CSKY-NEXT: .long __atomic_compare_exchange_8 6468; 6469 %1 = atomicrmw umax i64* %a, i64 %b acquire 6470 ret i64 %1 6471} 6472 6473define i64 @atomicrmw_umax_i64_release(i64 *%a, i64 %b) nounwind { 6474; CSKY-LABEL: atomicrmw_umax_i64_release: 6475; CSKY: # %bb.0: 6476; CSKY-NEXT: subi16 sp, sp, 24 6477; CSKY-NEXT: st16.w l3, (sp, 20) 6478; CSKY-NEXT: st16.w l2, (sp, 16) 6479; CSKY-NEXT: st16.w l1, (sp, 12) 6480; CSKY-NEXT: st16.w l0, (sp, 8) 6481; CSKY-NEXT: st32.w lr, (sp, 4) # 4-byte Folded Spill 6482; CSKY-NEXT: st32.w l4, (sp, 0) # 4-byte Folded Spill 6483; CSKY-NEXT: subi16 sp, sp, 24 6484; CSKY-NEXT: mov16 l0, a2 6485; CSKY-NEXT: mov16 l1, a1 6486; CSKY-NEXT: mov16 l2, a0 6487; CSKY-NEXT: ld16.w a1, (a0, 4) 6488; CSKY-NEXT: ld16.w a0, (a0, 0) 6489; CSKY-NEXT: movi16 l3, 0 6490; CSKY-NEXT: movi32 l4, 3 6491; CSKY-NEXT: .LBB212_1: # %atomicrmw.start 6492; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 6493; CSKY-NEXT: cmpne16 a1, l0 6494; CSKY-NEXT: mvc32 a2 6495; CSKY-NEXT: st16.w a2, (sp, 12) 6496; CSKY-NEXT: cmphs16 l1, a0 6497; CSKY-NEXT: mvcv16 a2 6498; CSKY-NEXT: cmphs16 l0, a1 6499; CSKY-NEXT: mvcv16 a3 6500; CSKY-NEXT: ld32.w t0, (sp, 12) 6501; CSKY-NEXT: btsti32 t0, 0 6502; CSKY-NEXT: movf32 a3, a2 6503; CSKY-NEXT: btsti32 a3, 0 6504; CSKY-NEXT: mov16 a2, l1 6505; CSKY-NEXT: movt32 a2, a0 6506; CSKY-NEXT: mov16 a3, l0 6507; CSKY-NEXT: movt32 a3, a1 6508; CSKY-NEXT: st16.w a0, (sp, 16) 6509; CSKY-NEXT: st16.w a1, (sp, 20) 6510; CSKY-NEXT: st16.w l3, (sp, 4) 6511; CSKY-NEXT: st32.w l4, (sp, 0) 6512; CSKY-NEXT: mov16 a0, l2 6513; CSKY-NEXT: addi16 a1, sp, 16 6514; CSKY-NEXT: jsri32 [.LCPI212_0] 6515; CSKY-NEXT: mov16 a2, a0 6516; CSKY-NEXT: ld16.w a1, (sp, 20) 6517; CSKY-NEXT: ld16.w a0, (sp, 16) 6518; CSKY-NEXT: bez32 a2, .LBB212_1 6519; CSKY-NEXT: # %bb.2: # %atomicrmw.end 6520; CSKY-NEXT: addi16 sp, sp, 24 6521; CSKY-NEXT: ld32.w l4, (sp, 0) # 4-byte Folded Reload 6522; CSKY-NEXT: ld32.w lr, (sp, 4) # 4-byte Folded Reload 6523; CSKY-NEXT: ld16.w l0, (sp, 8) 6524; CSKY-NEXT: ld16.w l1, (sp, 12) 6525; CSKY-NEXT: ld16.w l2, (sp, 16) 6526; CSKY-NEXT: ld16.w l3, (sp, 20) 6527; CSKY-NEXT: addi16 sp, sp, 24 6528; CSKY-NEXT: rts16 6529; CSKY-NEXT: .p2align 1 6530; CSKY-NEXT: # %bb.3: 6531; CSKY-NEXT: .p2align 2 6532; CSKY-NEXT: .LCPI212_0: 6533; CSKY-NEXT: .long __atomic_compare_exchange_8 6534; 6535 %1 = atomicrmw umax i64* %a, i64 %b release 6536 ret i64 %1 6537} 6538 6539define i64 @atomicrmw_umax_i64_acq_rel(i64 *%a, i64 %b) nounwind { 6540; CSKY-LABEL: atomicrmw_umax_i64_acq_rel: 6541; CSKY: # %bb.0: 6542; CSKY-NEXT: subi16 sp, sp, 24 6543; CSKY-NEXT: st16.w l3, (sp, 20) 6544; CSKY-NEXT: st16.w l2, (sp, 16) 6545; CSKY-NEXT: st16.w l1, (sp, 12) 6546; CSKY-NEXT: st16.w l0, (sp, 8) 6547; CSKY-NEXT: st32.w lr, (sp, 4) # 4-byte Folded Spill 6548; CSKY-NEXT: st32.w l4, (sp, 0) # 4-byte Folded Spill 6549; CSKY-NEXT: subi16 sp, sp, 24 6550; CSKY-NEXT: mov16 l0, a2 6551; CSKY-NEXT: mov16 l1, a1 6552; CSKY-NEXT: mov16 l2, a0 6553; CSKY-NEXT: ld16.w a1, (a0, 4) 6554; CSKY-NEXT: ld16.w a0, (a0, 0) 6555; CSKY-NEXT: movi16 l3, 2 6556; CSKY-NEXT: movi32 l4, 4 6557; CSKY-NEXT: .LBB213_1: # %atomicrmw.start 6558; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 6559; CSKY-NEXT: cmpne16 a1, l0 6560; CSKY-NEXT: mvc32 a2 6561; CSKY-NEXT: st16.w a2, (sp, 12) 6562; CSKY-NEXT: cmphs16 l1, a0 6563; CSKY-NEXT: mvcv16 a2 6564; CSKY-NEXT: cmphs16 l0, a1 6565; CSKY-NEXT: mvcv16 a3 6566; CSKY-NEXT: ld32.w t0, (sp, 12) 6567; CSKY-NEXT: btsti32 t0, 0 6568; CSKY-NEXT: movf32 a3, a2 6569; CSKY-NEXT: btsti32 a3, 0 6570; CSKY-NEXT: mov16 a2, l1 6571; CSKY-NEXT: movt32 a2, a0 6572; CSKY-NEXT: mov16 a3, l0 6573; CSKY-NEXT: movt32 a3, a1 6574; CSKY-NEXT: st16.w a0, (sp, 16) 6575; CSKY-NEXT: st16.w a1, (sp, 20) 6576; CSKY-NEXT: st16.w l3, (sp, 4) 6577; CSKY-NEXT: st32.w l4, (sp, 0) 6578; CSKY-NEXT: mov16 a0, l2 6579; CSKY-NEXT: addi16 a1, sp, 16 6580; CSKY-NEXT: jsri32 [.LCPI213_0] 6581; CSKY-NEXT: mov16 a2, a0 6582; CSKY-NEXT: ld16.w a1, (sp, 20) 6583; CSKY-NEXT: ld16.w a0, (sp, 16) 6584; CSKY-NEXT: bez32 a2, .LBB213_1 6585; CSKY-NEXT: # %bb.2: # %atomicrmw.end 6586; CSKY-NEXT: addi16 sp, sp, 24 6587; CSKY-NEXT: ld32.w l4, (sp, 0) # 4-byte Folded Reload 6588; CSKY-NEXT: ld32.w lr, (sp, 4) # 4-byte Folded Reload 6589; CSKY-NEXT: ld16.w l0, (sp, 8) 6590; CSKY-NEXT: ld16.w l1, (sp, 12) 6591; CSKY-NEXT: ld16.w l2, (sp, 16) 6592; CSKY-NEXT: ld16.w l3, (sp, 20) 6593; CSKY-NEXT: addi16 sp, sp, 24 6594; CSKY-NEXT: rts16 6595; CSKY-NEXT: .p2align 1 6596; CSKY-NEXT: # %bb.3: 6597; CSKY-NEXT: .p2align 2 6598; CSKY-NEXT: .LCPI213_0: 6599; CSKY-NEXT: .long __atomic_compare_exchange_8 6600; 6601 %1 = atomicrmw umax i64* %a, i64 %b acq_rel 6602 ret i64 %1 6603} 6604 6605define i64 @atomicrmw_umax_i64_seq_cst(i64 *%a, i64 %b) nounwind { 6606; CSKY-LABEL: atomicrmw_umax_i64_seq_cst: 6607; CSKY: # %bb.0: 6608; CSKY-NEXT: subi16 sp, sp, 20 6609; CSKY-NEXT: st16.w l3, (sp, 16) 6610; CSKY-NEXT: st16.w l2, (sp, 12) 6611; CSKY-NEXT: st16.w l1, (sp, 8) 6612; CSKY-NEXT: st16.w l0, (sp, 4) 6613; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 6614; CSKY-NEXT: subi16 sp, sp, 24 6615; CSKY-NEXT: mov16 l0, a2 6616; CSKY-NEXT: mov16 l1, a1 6617; CSKY-NEXT: mov16 l2, a0 6618; CSKY-NEXT: ld16.w a1, (a0, 4) 6619; CSKY-NEXT: ld16.w a0, (a0, 0) 6620; CSKY-NEXT: movi16 l3, 5 6621; CSKY-NEXT: .LBB214_1: # %atomicrmw.start 6622; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 6623; CSKY-NEXT: cmpne16 a1, l0 6624; CSKY-NEXT: mvc32 a2 6625; CSKY-NEXT: st16.w a2, (sp, 12) 6626; CSKY-NEXT: cmphs16 l1, a0 6627; CSKY-NEXT: mvcv16 a2 6628; CSKY-NEXT: cmphs16 l0, a1 6629; CSKY-NEXT: mvcv16 a3 6630; CSKY-NEXT: ld32.w t0, (sp, 12) 6631; CSKY-NEXT: btsti32 t0, 0 6632; CSKY-NEXT: movf32 a3, a2 6633; CSKY-NEXT: btsti32 a3, 0 6634; CSKY-NEXT: mov16 a2, l1 6635; CSKY-NEXT: movt32 a2, a0 6636; CSKY-NEXT: mov16 a3, l0 6637; CSKY-NEXT: movt32 a3, a1 6638; CSKY-NEXT: st16.w a0, (sp, 16) 6639; CSKY-NEXT: st16.w a1, (sp, 20) 6640; CSKY-NEXT: st16.w l3, (sp, 4) 6641; CSKY-NEXT: st16.w l3, (sp, 0) 6642; CSKY-NEXT: mov16 a0, l2 6643; CSKY-NEXT: addi16 a1, sp, 16 6644; CSKY-NEXT: jsri32 [.LCPI214_0] 6645; CSKY-NEXT: mov16 a2, a0 6646; CSKY-NEXT: ld16.w a1, (sp, 20) 6647; CSKY-NEXT: ld16.w a0, (sp, 16) 6648; CSKY-NEXT: bez32 a2, .LBB214_1 6649; CSKY-NEXT: # %bb.2: # %atomicrmw.end 6650; CSKY-NEXT: addi16 sp, sp, 24 6651; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 6652; CSKY-NEXT: ld16.w l0, (sp, 4) 6653; CSKY-NEXT: ld16.w l1, (sp, 8) 6654; CSKY-NEXT: ld16.w l2, (sp, 12) 6655; CSKY-NEXT: ld16.w l3, (sp, 16) 6656; CSKY-NEXT: addi16 sp, sp, 20 6657; CSKY-NEXT: rts16 6658; CSKY-NEXT: .p2align 1 6659; CSKY-NEXT: # %bb.3: 6660; CSKY-NEXT: .p2align 2 6661; CSKY-NEXT: .LCPI214_0: 6662; CSKY-NEXT: .long __atomic_compare_exchange_8 6663; 6664 %1 = atomicrmw umax i64* %a, i64 %b seq_cst 6665 ret i64 %1 6666} 6667 6668define i64 @atomicrmw_umin_i64_monotonic(i64 *%a, i64 %b) nounwind { 6669; CSKY-LABEL: atomicrmw_umin_i64_monotonic: 6670; CSKY: # %bb.0: 6671; CSKY-NEXT: subi16 sp, sp, 20 6672; CSKY-NEXT: st16.w l3, (sp, 16) 6673; CSKY-NEXT: st16.w l2, (sp, 12) 6674; CSKY-NEXT: st16.w l1, (sp, 8) 6675; CSKY-NEXT: st16.w l0, (sp, 4) 6676; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 6677; CSKY-NEXT: subi16 sp, sp, 32 6678; CSKY-NEXT: mov16 l0, a2 6679; CSKY-NEXT: mov16 l1, a1 6680; CSKY-NEXT: mov16 l2, a0 6681; CSKY-NEXT: ld16.w a1, (a0, 4) 6682; CSKY-NEXT: ld16.w a0, (a0, 0) 6683; CSKY-NEXT: movi16 l3, 0 6684; CSKY-NEXT: .LBB215_1: # %atomicrmw.start 6685; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 6686; CSKY-NEXT: cmphs16 l1, a0 6687; CSKY-NEXT: mvc32 a2 6688; CSKY-NEXT: st16.w a2, (sp, 16) 6689; CSKY-NEXT: cmphs16 l0, a1 6690; CSKY-NEXT: mvc32 a2 6691; CSKY-NEXT: st16.w a2, (sp, 12) 6692; CSKY-NEXT: cmpne16 a1, l0 6693; CSKY-NEXT: mvc32 a2 6694; CSKY-NEXT: st16.w a2, (sp, 20) 6695; CSKY-NEXT: ld16.w a2, (sp, 16) 6696; CSKY-NEXT: btsti32 a2, 0 6697; CSKY-NEXT: mvc32 a2 6698; CSKY-NEXT: ld16.w a3, (sp, 12) 6699; CSKY-NEXT: btsti32 a3, 0 6700; CSKY-NEXT: mvc32 a3 6701; CSKY-NEXT: ld32.w t0, (sp, 20) 6702; CSKY-NEXT: btsti32 t0, 0 6703; CSKY-NEXT: movf32 a3, a2 6704; CSKY-NEXT: btsti32 a3, 0 6705; CSKY-NEXT: mov16 a2, l1 6706; CSKY-NEXT: movt32 a2, a0 6707; CSKY-NEXT: mov16 a3, l0 6708; CSKY-NEXT: movt32 a3, a1 6709; CSKY-NEXT: st16.w a0, (sp, 24) 6710; CSKY-NEXT: st16.w a1, (sp, 28) 6711; CSKY-NEXT: st16.w l3, (sp, 4) 6712; CSKY-NEXT: st16.w l3, (sp, 0) 6713; CSKY-NEXT: mov16 a0, l2 6714; CSKY-NEXT: addi16 a1, sp, 24 6715; CSKY-NEXT: jsri32 [.LCPI215_0] 6716; CSKY-NEXT: mov16 a2, a0 6717; CSKY-NEXT: ld16.w a1, (sp, 28) 6718; CSKY-NEXT: ld16.w a0, (sp, 24) 6719; CSKY-NEXT: bez32 a2, .LBB215_1 6720; CSKY-NEXT: # %bb.2: # %atomicrmw.end 6721; CSKY-NEXT: addi16 sp, sp, 32 6722; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 6723; CSKY-NEXT: ld16.w l0, (sp, 4) 6724; CSKY-NEXT: ld16.w l1, (sp, 8) 6725; CSKY-NEXT: ld16.w l2, (sp, 12) 6726; CSKY-NEXT: ld16.w l3, (sp, 16) 6727; CSKY-NEXT: addi16 sp, sp, 20 6728; CSKY-NEXT: rts16 6729; CSKY-NEXT: .p2align 1 6730; CSKY-NEXT: # %bb.3: 6731; CSKY-NEXT: .p2align 2 6732; CSKY-NEXT: .LCPI215_0: 6733; CSKY-NEXT: .long __atomic_compare_exchange_8 6734; 6735 %1 = atomicrmw umin i64* %a, i64 %b monotonic 6736 ret i64 %1 6737} 6738 6739define i64 @atomicrmw_umin_i64_acquire(i64 *%a, i64 %b) nounwind { 6740; CSKY-LABEL: atomicrmw_umin_i64_acquire: 6741; CSKY: # %bb.0: 6742; CSKY-NEXT: subi16 sp, sp, 20 6743; CSKY-NEXT: st16.w l3, (sp, 16) 6744; CSKY-NEXT: st16.w l2, (sp, 12) 6745; CSKY-NEXT: st16.w l1, (sp, 8) 6746; CSKY-NEXT: st16.w l0, (sp, 4) 6747; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 6748; CSKY-NEXT: subi16 sp, sp, 32 6749; CSKY-NEXT: mov16 l0, a2 6750; CSKY-NEXT: mov16 l1, a1 6751; CSKY-NEXT: mov16 l2, a0 6752; CSKY-NEXT: ld16.w a1, (a0, 4) 6753; CSKY-NEXT: ld16.w a0, (a0, 0) 6754; CSKY-NEXT: movi16 l3, 2 6755; CSKY-NEXT: .LBB216_1: # %atomicrmw.start 6756; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 6757; CSKY-NEXT: cmphs16 l1, a0 6758; CSKY-NEXT: mvc32 a2 6759; CSKY-NEXT: st16.w a2, (sp, 16) 6760; CSKY-NEXT: cmphs16 l0, a1 6761; CSKY-NEXT: mvc32 a2 6762; CSKY-NEXT: st16.w a2, (sp, 12) 6763; CSKY-NEXT: cmpne16 a1, l0 6764; CSKY-NEXT: mvc32 a2 6765; CSKY-NEXT: st16.w a2, (sp, 20) 6766; CSKY-NEXT: ld16.w a2, (sp, 16) 6767; CSKY-NEXT: btsti32 a2, 0 6768; CSKY-NEXT: mvc32 a2 6769; CSKY-NEXT: ld16.w a3, (sp, 12) 6770; CSKY-NEXT: btsti32 a3, 0 6771; CSKY-NEXT: mvc32 a3 6772; CSKY-NEXT: ld32.w t0, (sp, 20) 6773; CSKY-NEXT: btsti32 t0, 0 6774; CSKY-NEXT: movf32 a3, a2 6775; CSKY-NEXT: btsti32 a3, 0 6776; CSKY-NEXT: mov16 a2, l1 6777; CSKY-NEXT: movt32 a2, a0 6778; CSKY-NEXT: mov16 a3, l0 6779; CSKY-NEXT: movt32 a3, a1 6780; CSKY-NEXT: st16.w a0, (sp, 24) 6781; CSKY-NEXT: st16.w a1, (sp, 28) 6782; CSKY-NEXT: st16.w l3, (sp, 4) 6783; CSKY-NEXT: st16.w l3, (sp, 0) 6784; CSKY-NEXT: mov16 a0, l2 6785; CSKY-NEXT: addi16 a1, sp, 24 6786; CSKY-NEXT: jsri32 [.LCPI216_0] 6787; CSKY-NEXT: mov16 a2, a0 6788; CSKY-NEXT: ld16.w a1, (sp, 28) 6789; CSKY-NEXT: ld16.w a0, (sp, 24) 6790; CSKY-NEXT: bez32 a2, .LBB216_1 6791; CSKY-NEXT: # %bb.2: # %atomicrmw.end 6792; CSKY-NEXT: addi16 sp, sp, 32 6793; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 6794; CSKY-NEXT: ld16.w l0, (sp, 4) 6795; CSKY-NEXT: ld16.w l1, (sp, 8) 6796; CSKY-NEXT: ld16.w l2, (sp, 12) 6797; CSKY-NEXT: ld16.w l3, (sp, 16) 6798; CSKY-NEXT: addi16 sp, sp, 20 6799; CSKY-NEXT: rts16 6800; CSKY-NEXT: .p2align 1 6801; CSKY-NEXT: # %bb.3: 6802; CSKY-NEXT: .p2align 2 6803; CSKY-NEXT: .LCPI216_0: 6804; CSKY-NEXT: .long __atomic_compare_exchange_8 6805; 6806 %1 = atomicrmw umin i64* %a, i64 %b acquire 6807 ret i64 %1 6808} 6809 6810define i64 @atomicrmw_umin_i64_release(i64 *%a, i64 %b) nounwind { 6811; CSKY-LABEL: atomicrmw_umin_i64_release: 6812; CSKY: # %bb.0: 6813; CSKY-NEXT: subi16 sp, sp, 24 6814; CSKY-NEXT: st16.w l3, (sp, 20) 6815; CSKY-NEXT: st16.w l2, (sp, 16) 6816; CSKY-NEXT: st16.w l1, (sp, 12) 6817; CSKY-NEXT: st16.w l0, (sp, 8) 6818; CSKY-NEXT: st32.w lr, (sp, 4) # 4-byte Folded Spill 6819; CSKY-NEXT: st32.w l4, (sp, 0) # 4-byte Folded Spill 6820; CSKY-NEXT: subi16 sp, sp, 32 6821; CSKY-NEXT: mov16 l0, a2 6822; CSKY-NEXT: mov16 l1, a1 6823; CSKY-NEXT: mov16 l2, a0 6824; CSKY-NEXT: ld16.w a1, (a0, 4) 6825; CSKY-NEXT: ld16.w a0, (a0, 0) 6826; CSKY-NEXT: movi16 l3, 0 6827; CSKY-NEXT: movi32 l4, 3 6828; CSKY-NEXT: .LBB217_1: # %atomicrmw.start 6829; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 6830; CSKY-NEXT: cmphs16 l1, a0 6831; CSKY-NEXT: mvc32 a2 6832; CSKY-NEXT: st16.w a2, (sp, 16) 6833; CSKY-NEXT: cmphs16 l0, a1 6834; CSKY-NEXT: mvc32 a2 6835; CSKY-NEXT: st16.w a2, (sp, 12) 6836; CSKY-NEXT: cmpne16 a1, l0 6837; CSKY-NEXT: mvc32 a2 6838; CSKY-NEXT: st16.w a2, (sp, 20) 6839; CSKY-NEXT: ld16.w a2, (sp, 16) 6840; CSKY-NEXT: btsti32 a2, 0 6841; CSKY-NEXT: mvc32 a2 6842; CSKY-NEXT: ld16.w a3, (sp, 12) 6843; CSKY-NEXT: btsti32 a3, 0 6844; CSKY-NEXT: mvc32 a3 6845; CSKY-NEXT: ld32.w t0, (sp, 20) 6846; CSKY-NEXT: btsti32 t0, 0 6847; CSKY-NEXT: movf32 a3, a2 6848; CSKY-NEXT: btsti32 a3, 0 6849; CSKY-NEXT: mov16 a2, l1 6850; CSKY-NEXT: movt32 a2, a0 6851; CSKY-NEXT: mov16 a3, l0 6852; CSKY-NEXT: movt32 a3, a1 6853; CSKY-NEXT: st16.w a0, (sp, 24) 6854; CSKY-NEXT: st16.w a1, (sp, 28) 6855; CSKY-NEXT: st16.w l3, (sp, 4) 6856; CSKY-NEXT: st32.w l4, (sp, 0) 6857; CSKY-NEXT: mov16 a0, l2 6858; CSKY-NEXT: addi16 a1, sp, 24 6859; CSKY-NEXT: jsri32 [.LCPI217_0] 6860; CSKY-NEXT: mov16 a2, a0 6861; CSKY-NEXT: ld16.w a1, (sp, 28) 6862; CSKY-NEXT: ld16.w a0, (sp, 24) 6863; CSKY-NEXT: bez32 a2, .LBB217_1 6864; CSKY-NEXT: # %bb.2: # %atomicrmw.end 6865; CSKY-NEXT: addi16 sp, sp, 32 6866; CSKY-NEXT: ld32.w l4, (sp, 0) # 4-byte Folded Reload 6867; CSKY-NEXT: ld32.w lr, (sp, 4) # 4-byte Folded Reload 6868; CSKY-NEXT: ld16.w l0, (sp, 8) 6869; CSKY-NEXT: ld16.w l1, (sp, 12) 6870; CSKY-NEXT: ld16.w l2, (sp, 16) 6871; CSKY-NEXT: ld16.w l3, (sp, 20) 6872; CSKY-NEXT: addi16 sp, sp, 24 6873; CSKY-NEXT: rts16 6874; CSKY-NEXT: .p2align 1 6875; CSKY-NEXT: # %bb.3: 6876; CSKY-NEXT: .p2align 2 6877; CSKY-NEXT: .LCPI217_0: 6878; CSKY-NEXT: .long __atomic_compare_exchange_8 6879; 6880 %1 = atomicrmw umin i64* %a, i64 %b release 6881 ret i64 %1 6882} 6883 6884define i64 @atomicrmw_umin_i64_acq_rel(i64 *%a, i64 %b) nounwind { 6885; CSKY-LABEL: atomicrmw_umin_i64_acq_rel: 6886; CSKY: # %bb.0: 6887; CSKY-NEXT: subi16 sp, sp, 24 6888; CSKY-NEXT: st16.w l3, (sp, 20) 6889; CSKY-NEXT: st16.w l2, (sp, 16) 6890; CSKY-NEXT: st16.w l1, (sp, 12) 6891; CSKY-NEXT: st16.w l0, (sp, 8) 6892; CSKY-NEXT: st32.w lr, (sp, 4) # 4-byte Folded Spill 6893; CSKY-NEXT: st32.w l4, (sp, 0) # 4-byte Folded Spill 6894; CSKY-NEXT: subi16 sp, sp, 32 6895; CSKY-NEXT: mov16 l0, a2 6896; CSKY-NEXT: mov16 l1, a1 6897; CSKY-NEXT: mov16 l2, a0 6898; CSKY-NEXT: ld16.w a1, (a0, 4) 6899; CSKY-NEXT: ld16.w a0, (a0, 0) 6900; CSKY-NEXT: movi16 l3, 2 6901; CSKY-NEXT: movi32 l4, 4 6902; CSKY-NEXT: .LBB218_1: # %atomicrmw.start 6903; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 6904; CSKY-NEXT: cmphs16 l1, a0 6905; CSKY-NEXT: mvc32 a2 6906; CSKY-NEXT: st16.w a2, (sp, 16) 6907; CSKY-NEXT: cmphs16 l0, a1 6908; CSKY-NEXT: mvc32 a2 6909; CSKY-NEXT: st16.w a2, (sp, 12) 6910; CSKY-NEXT: cmpne16 a1, l0 6911; CSKY-NEXT: mvc32 a2 6912; CSKY-NEXT: st16.w a2, (sp, 20) 6913; CSKY-NEXT: ld16.w a2, (sp, 16) 6914; CSKY-NEXT: btsti32 a2, 0 6915; CSKY-NEXT: mvc32 a2 6916; CSKY-NEXT: ld16.w a3, (sp, 12) 6917; CSKY-NEXT: btsti32 a3, 0 6918; CSKY-NEXT: mvc32 a3 6919; CSKY-NEXT: ld32.w t0, (sp, 20) 6920; CSKY-NEXT: btsti32 t0, 0 6921; CSKY-NEXT: movf32 a3, a2 6922; CSKY-NEXT: btsti32 a3, 0 6923; CSKY-NEXT: mov16 a2, l1 6924; CSKY-NEXT: movt32 a2, a0 6925; CSKY-NEXT: mov16 a3, l0 6926; CSKY-NEXT: movt32 a3, a1 6927; CSKY-NEXT: st16.w a0, (sp, 24) 6928; CSKY-NEXT: st16.w a1, (sp, 28) 6929; CSKY-NEXT: st16.w l3, (sp, 4) 6930; CSKY-NEXT: st32.w l4, (sp, 0) 6931; CSKY-NEXT: mov16 a0, l2 6932; CSKY-NEXT: addi16 a1, sp, 24 6933; CSKY-NEXT: jsri32 [.LCPI218_0] 6934; CSKY-NEXT: mov16 a2, a0 6935; CSKY-NEXT: ld16.w a1, (sp, 28) 6936; CSKY-NEXT: ld16.w a0, (sp, 24) 6937; CSKY-NEXT: bez32 a2, .LBB218_1 6938; CSKY-NEXT: # %bb.2: # %atomicrmw.end 6939; CSKY-NEXT: addi16 sp, sp, 32 6940; CSKY-NEXT: ld32.w l4, (sp, 0) # 4-byte Folded Reload 6941; CSKY-NEXT: ld32.w lr, (sp, 4) # 4-byte Folded Reload 6942; CSKY-NEXT: ld16.w l0, (sp, 8) 6943; CSKY-NEXT: ld16.w l1, (sp, 12) 6944; CSKY-NEXT: ld16.w l2, (sp, 16) 6945; CSKY-NEXT: ld16.w l3, (sp, 20) 6946; CSKY-NEXT: addi16 sp, sp, 24 6947; CSKY-NEXT: rts16 6948; CSKY-NEXT: .p2align 1 6949; CSKY-NEXT: # %bb.3: 6950; CSKY-NEXT: .p2align 2 6951; CSKY-NEXT: .LCPI218_0: 6952; CSKY-NEXT: .long __atomic_compare_exchange_8 6953; 6954 %1 = atomicrmw umin i64* %a, i64 %b acq_rel 6955 ret i64 %1 6956} 6957 6958define i64 @atomicrmw_umin_i64_seq_cst(i64 *%a, i64 %b) nounwind { 6959; CSKY-LABEL: atomicrmw_umin_i64_seq_cst: 6960; CSKY: # %bb.0: 6961; CSKY-NEXT: subi16 sp, sp, 20 6962; CSKY-NEXT: st16.w l3, (sp, 16) 6963; CSKY-NEXT: st16.w l2, (sp, 12) 6964; CSKY-NEXT: st16.w l1, (sp, 8) 6965; CSKY-NEXT: st16.w l0, (sp, 4) 6966; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 6967; CSKY-NEXT: subi16 sp, sp, 32 6968; CSKY-NEXT: mov16 l0, a2 6969; CSKY-NEXT: mov16 l1, a1 6970; CSKY-NEXT: mov16 l2, a0 6971; CSKY-NEXT: ld16.w a1, (a0, 4) 6972; CSKY-NEXT: ld16.w a0, (a0, 0) 6973; CSKY-NEXT: movi16 l3, 5 6974; CSKY-NEXT: .LBB219_1: # %atomicrmw.start 6975; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 6976; CSKY-NEXT: cmphs16 l1, a0 6977; CSKY-NEXT: mvc32 a2 6978; CSKY-NEXT: st16.w a2, (sp, 16) 6979; CSKY-NEXT: cmphs16 l0, a1 6980; CSKY-NEXT: mvc32 a2 6981; CSKY-NEXT: st16.w a2, (sp, 12) 6982; CSKY-NEXT: cmpne16 a1, l0 6983; CSKY-NEXT: mvc32 a2 6984; CSKY-NEXT: st16.w a2, (sp, 20) 6985; CSKY-NEXT: ld16.w a2, (sp, 16) 6986; CSKY-NEXT: btsti32 a2, 0 6987; CSKY-NEXT: mvc32 a2 6988; CSKY-NEXT: ld16.w a3, (sp, 12) 6989; CSKY-NEXT: btsti32 a3, 0 6990; CSKY-NEXT: mvc32 a3 6991; CSKY-NEXT: ld32.w t0, (sp, 20) 6992; CSKY-NEXT: btsti32 t0, 0 6993; CSKY-NEXT: movf32 a3, a2 6994; CSKY-NEXT: btsti32 a3, 0 6995; CSKY-NEXT: mov16 a2, l1 6996; CSKY-NEXT: movt32 a2, a0 6997; CSKY-NEXT: mov16 a3, l0 6998; CSKY-NEXT: movt32 a3, a1 6999; CSKY-NEXT: st16.w a0, (sp, 24) 7000; CSKY-NEXT: st16.w a1, (sp, 28) 7001; CSKY-NEXT: st16.w l3, (sp, 4) 7002; CSKY-NEXT: st16.w l3, (sp, 0) 7003; CSKY-NEXT: mov16 a0, l2 7004; CSKY-NEXT: addi16 a1, sp, 24 7005; CSKY-NEXT: jsri32 [.LCPI219_0] 7006; CSKY-NEXT: mov16 a2, a0 7007; CSKY-NEXT: ld16.w a1, (sp, 28) 7008; CSKY-NEXT: ld16.w a0, (sp, 24) 7009; CSKY-NEXT: bez32 a2, .LBB219_1 7010; CSKY-NEXT: # %bb.2: # %atomicrmw.end 7011; CSKY-NEXT: addi16 sp, sp, 32 7012; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 7013; CSKY-NEXT: ld16.w l0, (sp, 4) 7014; CSKY-NEXT: ld16.w l1, (sp, 8) 7015; CSKY-NEXT: ld16.w l2, (sp, 12) 7016; CSKY-NEXT: ld16.w l3, (sp, 16) 7017; CSKY-NEXT: addi16 sp, sp, 20 7018; CSKY-NEXT: rts16 7019; CSKY-NEXT: .p2align 1 7020; CSKY-NEXT: # %bb.3: 7021; CSKY-NEXT: .p2align 2 7022; CSKY-NEXT: .LCPI219_0: 7023; CSKY-NEXT: .long __atomic_compare_exchange_8 7024; 7025 %1 = atomicrmw umin i64* %a, i64 %b seq_cst 7026 ret i64 %1 7027} 7028