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