1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips2 -relocation-model=pic | FileCheck %s \ 3; RUN: -check-prefix=MIPS2 4; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32 -relocation-model=pic | FileCheck %s \ 5; RUN: -check-prefix=MIPS32 6; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r2 -relocation-model=pic | FileCheck %s \ 7; RUN: -check-prefix=MIPS32R2 8; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r3 -relocation-model=pic | FileCheck %s \ 9; RUN: -check-prefix=MIPS32R2 10; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r5 -relocation-model=pic | FileCheck %s \ 11; RUN: -check-prefix=MIPS32R2 12; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r6 -relocation-model=pic | FileCheck %s \ 13; RUN: -check-prefix=MIPS32R6 14; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips3 -relocation-model=pic | FileCheck %s \ 15; RUN: -check-prefix=MIPS3 16; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips4 -relocation-model=pic | FileCheck %s \ 17; RUN: -check-prefix=MIPS4 18; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64 -relocation-model=pic | FileCheck %s \ 19; RUN: -check-prefix=MIPS64 20; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64r2 -relocation-model=pic | FileCheck %s \ 21; RUN: -check-prefix=MIPS64R2 22; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64r3 -relocation-model=pic | FileCheck %s \ 23; RUN: -check-prefix=MIPS64R2 24; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64r5 -relocation-model=pic | FileCheck %s \ 25; RUN: -check-prefix=MIPS64R2 26; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64r6 -relocation-model=pic | FileCheck %s \ 27; RUN: -check-prefix=MIPS64R6 28; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r3 -mattr=+micromips -relocation-model=pic | FileCheck %s \ 29; RUN: -check-prefix=MMR3 30; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r6 -mattr=+micromips -relocation-model=pic | FileCheck %s \ 31; RUN: -check-prefix=MMR6 32 33define signext i1 @lshr_i1(i1 signext %a, i1 signext %b) { 34; MIPS2-LABEL: lshr_i1: 35; MIPS2: # %bb.0: # %entry 36; MIPS2-NEXT: jr $ra 37; MIPS2-NEXT: move $2, $4 38; 39; MIPS32-LABEL: lshr_i1: 40; MIPS32: # %bb.0: # %entry 41; MIPS32-NEXT: jr $ra 42; MIPS32-NEXT: move $2, $4 43; 44; MIPS32R2-LABEL: lshr_i1: 45; MIPS32R2: # %bb.0: # %entry 46; MIPS32R2-NEXT: jr $ra 47; MIPS32R2-NEXT: move $2, $4 48; 49; MIPS32R6-LABEL: lshr_i1: 50; MIPS32R6: # %bb.0: # %entry 51; MIPS32R6-NEXT: jr $ra 52; MIPS32R6-NEXT: move $2, $4 53; 54; MIPS3-LABEL: lshr_i1: 55; MIPS3: # %bb.0: # %entry 56; MIPS3-NEXT: jr $ra 57; MIPS3-NEXT: move $2, $4 58; 59; MIPS4-LABEL: lshr_i1: 60; MIPS4: # %bb.0: # %entry 61; MIPS4-NEXT: jr $ra 62; MIPS4-NEXT: move $2, $4 63; 64; MIPS64-LABEL: lshr_i1: 65; MIPS64: # %bb.0: # %entry 66; MIPS64-NEXT: jr $ra 67; MIPS64-NEXT: move $2, $4 68; 69; MIPS64R2-LABEL: lshr_i1: 70; MIPS64R2: # %bb.0: # %entry 71; MIPS64R2-NEXT: jr $ra 72; MIPS64R2-NEXT: move $2, $4 73; 74; MIPS64R6-LABEL: lshr_i1: 75; MIPS64R6: # %bb.0: # %entry 76; MIPS64R6-NEXT: jr $ra 77; MIPS64R6-NEXT: move $2, $4 78; 79; MMR3-LABEL: lshr_i1: 80; MMR3: # %bb.0: # %entry 81; MMR3-NEXT: move $2, $4 82; MMR3-NEXT: jrc $ra 83; 84; MMR6-LABEL: lshr_i1: 85; MMR6: # %bb.0: # %entry 86; MMR6-NEXT: move $2, $4 87; MMR6-NEXT: jrc $ra 88entry: 89 90 %r = lshr i1 %a, %b 91 ret i1 %r 92} 93 94define zeroext i8 @lshr_i8(i8 zeroext %a, i8 zeroext %b) { 95; MIPS2-LABEL: lshr_i8: 96; MIPS2: # %bb.0: # %entry 97; MIPS2-NEXT: jr $ra 98; MIPS2-NEXT: srlv $2, $4, $5 99; 100; MIPS32-LABEL: lshr_i8: 101; MIPS32: # %bb.0: # %entry 102; MIPS32-NEXT: jr $ra 103; MIPS32-NEXT: srlv $2, $4, $5 104; 105; MIPS32R2-LABEL: lshr_i8: 106; MIPS32R2: # %bb.0: # %entry 107; MIPS32R2-NEXT: jr $ra 108; MIPS32R2-NEXT: srlv $2, $4, $5 109; 110; MIPS32R6-LABEL: lshr_i8: 111; MIPS32R6: # %bb.0: # %entry 112; MIPS32R6-NEXT: jr $ra 113; MIPS32R6-NEXT: srlv $2, $4, $5 114; 115; MIPS3-LABEL: lshr_i8: 116; MIPS3: # %bb.0: # %entry 117; MIPS3-NEXT: jr $ra 118; MIPS3-NEXT: srlv $2, $4, $5 119; 120; MIPS4-LABEL: lshr_i8: 121; MIPS4: # %bb.0: # %entry 122; MIPS4-NEXT: jr $ra 123; MIPS4-NEXT: srlv $2, $4, $5 124; 125; MIPS64-LABEL: lshr_i8: 126; MIPS64: # %bb.0: # %entry 127; MIPS64-NEXT: jr $ra 128; MIPS64-NEXT: srlv $2, $4, $5 129; 130; MIPS64R2-LABEL: lshr_i8: 131; MIPS64R2: # %bb.0: # %entry 132; MIPS64R2-NEXT: jr $ra 133; MIPS64R2-NEXT: srlv $2, $4, $5 134; 135; MIPS64R6-LABEL: lshr_i8: 136; MIPS64R6: # %bb.0: # %entry 137; MIPS64R6-NEXT: jr $ra 138; MIPS64R6-NEXT: srlv $2, $4, $5 139; 140; MMR3-LABEL: lshr_i8: 141; MMR3: # %bb.0: # %entry 142; MMR3-NEXT: jr $ra 143; MMR3-NEXT: srlv $2, $4, $5 144; 145; MMR6-LABEL: lshr_i8: 146; MMR6: # %bb.0: # %entry 147; MMR6-NEXT: srlv $2, $4, $5 148; MMR6-NEXT: jrc $ra 149entry: 150 151 %r = lshr i8 %a, %b 152 ret i8 %r 153} 154 155define zeroext i16 @lshr_i16(i16 zeroext %a, i16 zeroext %b) { 156; MIPS2-LABEL: lshr_i16: 157; MIPS2: # %bb.0: # %entry 158; MIPS2-NEXT: jr $ra 159; MIPS2-NEXT: srlv $2, $4, $5 160; 161; MIPS32-LABEL: lshr_i16: 162; MIPS32: # %bb.0: # %entry 163; MIPS32-NEXT: jr $ra 164; MIPS32-NEXT: srlv $2, $4, $5 165; 166; MIPS32R2-LABEL: lshr_i16: 167; MIPS32R2: # %bb.0: # %entry 168; MIPS32R2-NEXT: jr $ra 169; MIPS32R2-NEXT: srlv $2, $4, $5 170; 171; MIPS32R6-LABEL: lshr_i16: 172; MIPS32R6: # %bb.0: # %entry 173; MIPS32R6-NEXT: jr $ra 174; MIPS32R6-NEXT: srlv $2, $4, $5 175; 176; MIPS3-LABEL: lshr_i16: 177; MIPS3: # %bb.0: # %entry 178; MIPS3-NEXT: jr $ra 179; MIPS3-NEXT: srlv $2, $4, $5 180; 181; MIPS4-LABEL: lshr_i16: 182; MIPS4: # %bb.0: # %entry 183; MIPS4-NEXT: jr $ra 184; MIPS4-NEXT: srlv $2, $4, $5 185; 186; MIPS64-LABEL: lshr_i16: 187; MIPS64: # %bb.0: # %entry 188; MIPS64-NEXT: jr $ra 189; MIPS64-NEXT: srlv $2, $4, $5 190; 191; MIPS64R2-LABEL: lshr_i16: 192; MIPS64R2: # %bb.0: # %entry 193; MIPS64R2-NEXT: jr $ra 194; MIPS64R2-NEXT: srlv $2, $4, $5 195; 196; MIPS64R6-LABEL: lshr_i16: 197; MIPS64R6: # %bb.0: # %entry 198; MIPS64R6-NEXT: jr $ra 199; MIPS64R6-NEXT: srlv $2, $4, $5 200; 201; MMR3-LABEL: lshr_i16: 202; MMR3: # %bb.0: # %entry 203; MMR3-NEXT: jr $ra 204; MMR3-NEXT: srlv $2, $4, $5 205; 206; MMR6-LABEL: lshr_i16: 207; MMR6: # %bb.0: # %entry 208; MMR6-NEXT: srlv $2, $4, $5 209; MMR6-NEXT: jrc $ra 210entry: 211 212 %r = lshr i16 %a, %b 213 ret i16 %r 214} 215 216define signext i32 @lshr_i32(i32 signext %a, i32 signext %b) { 217; MIPS2-LABEL: lshr_i32: 218; MIPS2: # %bb.0: # %entry 219; MIPS2-NEXT: jr $ra 220; MIPS2-NEXT: srlv $2, $4, $5 221; 222; MIPS32-LABEL: lshr_i32: 223; MIPS32: # %bb.0: # %entry 224; MIPS32-NEXT: jr $ra 225; MIPS32-NEXT: srlv $2, $4, $5 226; 227; MIPS32R2-LABEL: lshr_i32: 228; MIPS32R2: # %bb.0: # %entry 229; MIPS32R2-NEXT: jr $ra 230; MIPS32R2-NEXT: srlv $2, $4, $5 231; 232; MIPS32R6-LABEL: lshr_i32: 233; MIPS32R6: # %bb.0: # %entry 234; MIPS32R6-NEXT: jr $ra 235; MIPS32R6-NEXT: srlv $2, $4, $5 236; 237; MIPS3-LABEL: lshr_i32: 238; MIPS3: # %bb.0: # %entry 239; MIPS3-NEXT: jr $ra 240; MIPS3-NEXT: srlv $2, $4, $5 241; 242; MIPS4-LABEL: lshr_i32: 243; MIPS4: # %bb.0: # %entry 244; MIPS4-NEXT: jr $ra 245; MIPS4-NEXT: srlv $2, $4, $5 246; 247; MIPS64-LABEL: lshr_i32: 248; MIPS64: # %bb.0: # %entry 249; MIPS64-NEXT: jr $ra 250; MIPS64-NEXT: srlv $2, $4, $5 251; 252; MIPS64R2-LABEL: lshr_i32: 253; MIPS64R2: # %bb.0: # %entry 254; MIPS64R2-NEXT: jr $ra 255; MIPS64R2-NEXT: srlv $2, $4, $5 256; 257; MIPS64R6-LABEL: lshr_i32: 258; MIPS64R6: # %bb.0: # %entry 259; MIPS64R6-NEXT: jr $ra 260; MIPS64R6-NEXT: srlv $2, $4, $5 261; 262; MMR3-LABEL: lshr_i32: 263; MMR3: # %bb.0: # %entry 264; MMR3-NEXT: jr $ra 265; MMR3-NEXT: srlv $2, $4, $5 266; 267; MMR6-LABEL: lshr_i32: 268; MMR6: # %bb.0: # %entry 269; MMR6-NEXT: srlv $2, $4, $5 270; MMR6-NEXT: jrc $ra 271entry: 272 273 %r = lshr i32 %a, %b 274 ret i32 %r 275} 276 277define signext i64 @lshr_i64(i64 signext %a, i64 signext %b) { 278; MIPS2-LABEL: lshr_i64: 279; MIPS2: # %bb.0: # %entry 280; MIPS2-NEXT: srlv $6, $4, $7 281; MIPS2-NEXT: andi $1, $7, 32 282; MIPS2-NEXT: bnez $1, $BB4_2 283; MIPS2-NEXT: addiu $2, $zero, 0 284; MIPS2-NEXT: # %bb.1: # %entry 285; MIPS2-NEXT: srlv $1, $5, $7 286; MIPS2-NEXT: xori $2, $7, 31 287; MIPS2-NEXT: sll $3, $4, 1 288; MIPS2-NEXT: sllv $2, $3, $2 289; MIPS2-NEXT: or $3, $2, $1 290; MIPS2-NEXT: jr $ra 291; MIPS2-NEXT: move $2, $6 292; MIPS2-NEXT: $BB4_2: 293; MIPS2-NEXT: jr $ra 294; MIPS2-NEXT: move $3, $6 295; 296; MIPS32-LABEL: lshr_i64: 297; MIPS32: # %bb.0: # %entry 298; MIPS32-NEXT: srlv $1, $5, $7 299; MIPS32-NEXT: xori $2, $7, 31 300; MIPS32-NEXT: sll $3, $4, 1 301; MIPS32-NEXT: sllv $2, $3, $2 302; MIPS32-NEXT: or $3, $2, $1 303; MIPS32-NEXT: srlv $2, $4, $7 304; MIPS32-NEXT: andi $1, $7, 32 305; MIPS32-NEXT: movn $3, $2, $1 306; MIPS32-NEXT: jr $ra 307; MIPS32-NEXT: movn $2, $zero, $1 308; 309; MIPS32R2-LABEL: lshr_i64: 310; MIPS32R2: # %bb.0: # %entry 311; MIPS32R2-NEXT: srlv $1, $5, $7 312; MIPS32R2-NEXT: xori $2, $7, 31 313; MIPS32R2-NEXT: sll $3, $4, 1 314; MIPS32R2-NEXT: sllv $2, $3, $2 315; MIPS32R2-NEXT: or $3, $2, $1 316; MIPS32R2-NEXT: srlv $2, $4, $7 317; MIPS32R2-NEXT: andi $1, $7, 32 318; MIPS32R2-NEXT: movn $3, $2, $1 319; MIPS32R2-NEXT: jr $ra 320; MIPS32R2-NEXT: movn $2, $zero, $1 321; 322; MIPS32R6-LABEL: lshr_i64: 323; MIPS32R6: # %bb.0: # %entry 324; MIPS32R6-NEXT: srlv $1, $5, $7 325; MIPS32R6-NEXT: xori $2, $7, 31 326; MIPS32R6-NEXT: sll $3, $4, 1 327; MIPS32R6-NEXT: sllv $2, $3, $2 328; MIPS32R6-NEXT: or $1, $2, $1 329; MIPS32R6-NEXT: andi $2, $7, 32 330; MIPS32R6-NEXT: seleqz $1, $1, $2 331; MIPS32R6-NEXT: srlv $4, $4, $7 332; MIPS32R6-NEXT: selnez $3, $4, $2 333; MIPS32R6-NEXT: or $3, $3, $1 334; MIPS32R6-NEXT: jr $ra 335; MIPS32R6-NEXT: seleqz $2, $4, $2 336; 337; MIPS3-LABEL: lshr_i64: 338; MIPS3: # %bb.0: # %entry 339; MIPS3-NEXT: jr $ra 340; MIPS3-NEXT: dsrlv $2, $4, $5 341; 342; MIPS4-LABEL: lshr_i64: 343; MIPS4: # %bb.0: # %entry 344; MIPS4-NEXT: jr $ra 345; MIPS4-NEXT: dsrlv $2, $4, $5 346; 347; MIPS64-LABEL: lshr_i64: 348; MIPS64: # %bb.0: # %entry 349; MIPS64-NEXT: jr $ra 350; MIPS64-NEXT: dsrlv $2, $4, $5 351; 352; MIPS64R2-LABEL: lshr_i64: 353; MIPS64R2: # %bb.0: # %entry 354; MIPS64R2-NEXT: jr $ra 355; MIPS64R2-NEXT: dsrlv $2, $4, $5 356; 357; MIPS64R6-LABEL: lshr_i64: 358; MIPS64R6: # %bb.0: # %entry 359; MIPS64R6-NEXT: jr $ra 360; MIPS64R6-NEXT: dsrlv $2, $4, $5 361; 362; MMR3-LABEL: lshr_i64: 363; MMR3: # %bb.0: # %entry 364; MMR3-NEXT: srlv $2, $5, $7 365; MMR3-NEXT: xori $1, $7, 31 366; MMR3-NEXT: sll16 $3, $4, 1 367; MMR3-NEXT: sllv $3, $3, $1 368; MMR3-NEXT: or16 $3, $2 369; MMR3-NEXT: srlv $2, $4, $7 370; MMR3-NEXT: andi16 $4, $7, 32 371; MMR3-NEXT: movn $3, $2, $4 372; MMR3-NEXT: li16 $5, 0 373; MMR3-NEXT: jr $ra 374; MMR3-NEXT: movn $2, $5, $4 375; 376; MMR6-LABEL: lshr_i64: 377; MMR6: # %bb.0: # %entry 378; MMR6-NEXT: srlv $1, $5, $7 379; MMR6-NEXT: xori $2, $7, 31 380; MMR6-NEXT: sll16 $3, $4, 1 381; MMR6-NEXT: sllv $2, $3, $2 382; MMR6-NEXT: or $1, $2, $1 383; MMR6-NEXT: andi16 $2, $7, 32 384; MMR6-NEXT: seleqz $1, $1, $2 385; MMR6-NEXT: srlv $4, $4, $7 386; MMR6-NEXT: selnez $3, $4, $2 387; MMR6-NEXT: or $3, $3, $1 388; MMR6-NEXT: seleqz $2, $4, $2 389; MMR6-NEXT: jrc $ra 390entry: 391 392 %r = lshr i64 %a, %b 393 ret i64 %r 394} 395 396define signext i128 @lshr_i128(i128 signext %a, i128 signext %b) { 397; MIPS2-LABEL: lshr_i128: 398; MIPS2: # %bb.0: # %entry 399; MIPS2-NEXT: addiu $sp, $sp, -32 400; MIPS2-NEXT: .cfi_def_cfa_offset 32 401; MIPS2-NEXT: addiu $1, $sp, 0 402; MIPS2-NEXT: sw $7, 28($sp) 403; MIPS2-NEXT: sw $6, 24($sp) 404; MIPS2-NEXT: sw $5, 20($sp) 405; MIPS2-NEXT: sw $4, 16($sp) 406; MIPS2-NEXT: addiu $1, $1, 16 407; MIPS2-NEXT: lw $2, 60($sp) 408; MIPS2-NEXT: srl $3, $2, 3 409; MIPS2-NEXT: andi $3, $3, 12 410; MIPS2-NEXT: subu $1, $1, $3 411; MIPS2-NEXT: sw $zero, 12($sp) 412; MIPS2-NEXT: sw $zero, 8($sp) 413; MIPS2-NEXT: sw $zero, 4($sp) 414; MIPS2-NEXT: sw $zero, 0($sp) 415; MIPS2-NEXT: lw $3, 4($1) 416; MIPS2-NEXT: lw $5, 8($1) 417; MIPS2-NEXT: srlv $4, $5, $2 418; MIPS2-NEXT: sll $6, $3, 1 419; MIPS2-NEXT: andi $7, $2, 31 420; MIPS2-NEXT: xori $7, $7, 31 421; MIPS2-NEXT: sllv $6, $6, $7 422; MIPS2-NEXT: srlv $3, $3, $2 423; MIPS2-NEXT: lw $8, 0($1) 424; MIPS2-NEXT: sll $9, $8, 1 425; MIPS2-NEXT: sllv $9, $9, $7 426; MIPS2-NEXT: or $3, $3, $9 427; MIPS2-NEXT: or $4, $4, $6 428; MIPS2-NEXT: lw $1, 12($1) 429; MIPS2-NEXT: srlv $1, $1, $2 430; MIPS2-NEXT: sll $5, $5, 1 431; MIPS2-NEXT: sllv $5, $5, $7 432; MIPS2-NEXT: or $5, $1, $5 433; MIPS2-NEXT: srlv $2, $8, $2 434; MIPS2-NEXT: jr $ra 435; MIPS2-NEXT: addiu $sp, $sp, 32 436; 437; MIPS32-LABEL: lshr_i128: 438; MIPS32: # %bb.0: # %entry 439; MIPS32-NEXT: addiu $sp, $sp, -32 440; MIPS32-NEXT: .cfi_def_cfa_offset 32 441; MIPS32-NEXT: addiu $1, $sp, 0 442; MIPS32-NEXT: sw $7, 28($sp) 443; MIPS32-NEXT: sw $6, 24($sp) 444; MIPS32-NEXT: sw $5, 20($sp) 445; MIPS32-NEXT: sw $4, 16($sp) 446; MIPS32-NEXT: addiu $1, $1, 16 447; MIPS32-NEXT: lw $2, 60($sp) 448; MIPS32-NEXT: srl $3, $2, 3 449; MIPS32-NEXT: andi $3, $3, 12 450; MIPS32-NEXT: subu $1, $1, $3 451; MIPS32-NEXT: sw $zero, 12($sp) 452; MIPS32-NEXT: sw $zero, 8($sp) 453; MIPS32-NEXT: sw $zero, 4($sp) 454; MIPS32-NEXT: sw $zero, 0($sp) 455; MIPS32-NEXT: lw $3, 4($1) 456; MIPS32-NEXT: lw $5, 8($1) 457; MIPS32-NEXT: srlv $4, $5, $2 458; MIPS32-NEXT: sll $6, $3, 1 459; MIPS32-NEXT: andi $7, $2, 31 460; MIPS32-NEXT: xori $7, $7, 31 461; MIPS32-NEXT: sllv $6, $6, $7 462; MIPS32-NEXT: srlv $3, $3, $2 463; MIPS32-NEXT: lw $8, 0($1) 464; MIPS32-NEXT: sll $9, $8, 1 465; MIPS32-NEXT: sllv $9, $9, $7 466; MIPS32-NEXT: or $3, $3, $9 467; MIPS32-NEXT: or $4, $4, $6 468; MIPS32-NEXT: lw $1, 12($1) 469; MIPS32-NEXT: srlv $1, $1, $2 470; MIPS32-NEXT: sll $5, $5, 1 471; MIPS32-NEXT: sllv $5, $5, $7 472; MIPS32-NEXT: or $5, $1, $5 473; MIPS32-NEXT: srlv $2, $8, $2 474; MIPS32-NEXT: jr $ra 475; MIPS32-NEXT: addiu $sp, $sp, 32 476; 477; MIPS32R2-LABEL: lshr_i128: 478; MIPS32R2: # %bb.0: # %entry 479; MIPS32R2-NEXT: addiu $sp, $sp, -32 480; MIPS32R2-NEXT: .cfi_def_cfa_offset 32 481; MIPS32R2-NEXT: addiu $1, $sp, 0 482; MIPS32R2-NEXT: sw $7, 28($sp) 483; MIPS32R2-NEXT: sw $6, 24($sp) 484; MIPS32R2-NEXT: sw $5, 20($sp) 485; MIPS32R2-NEXT: sw $4, 16($sp) 486; MIPS32R2-NEXT: addiu $1, $1, 16 487; MIPS32R2-NEXT: lw $2, 60($sp) 488; MIPS32R2-NEXT: srl $3, $2, 3 489; MIPS32R2-NEXT: andi $3, $3, 12 490; MIPS32R2-NEXT: subu $1, $1, $3 491; MIPS32R2-NEXT: sw $zero, 12($sp) 492; MIPS32R2-NEXT: sw $zero, 8($sp) 493; MIPS32R2-NEXT: sw $zero, 4($sp) 494; MIPS32R2-NEXT: sw $zero, 0($sp) 495; MIPS32R2-NEXT: lw $3, 4($1) 496; MIPS32R2-NEXT: lw $5, 8($1) 497; MIPS32R2-NEXT: srlv $4, $5, $2 498; MIPS32R2-NEXT: sll $6, $3, 1 499; MIPS32R2-NEXT: andi $7, $2, 31 500; MIPS32R2-NEXT: xori $7, $7, 31 501; MIPS32R2-NEXT: sllv $6, $6, $7 502; MIPS32R2-NEXT: srlv $3, $3, $2 503; MIPS32R2-NEXT: lw $8, 0($1) 504; MIPS32R2-NEXT: sll $9, $8, 1 505; MIPS32R2-NEXT: sllv $9, $9, $7 506; MIPS32R2-NEXT: or $3, $3, $9 507; MIPS32R2-NEXT: or $4, $4, $6 508; MIPS32R2-NEXT: lw $1, 12($1) 509; MIPS32R2-NEXT: srlv $1, $1, $2 510; MIPS32R2-NEXT: sll $5, $5, 1 511; MIPS32R2-NEXT: sllv $5, $5, $7 512; MIPS32R2-NEXT: or $5, $1, $5 513; MIPS32R2-NEXT: srlv $2, $8, $2 514; MIPS32R2-NEXT: jr $ra 515; MIPS32R2-NEXT: addiu $sp, $sp, 32 516; 517; MIPS32R6-LABEL: lshr_i128: 518; MIPS32R6: # %bb.0: # %entry 519; MIPS32R6-NEXT: addiu $sp, $sp, -32 520; MIPS32R6-NEXT: .cfi_def_cfa_offset 32 521; MIPS32R6-NEXT: addiu $1, $sp, 0 522; MIPS32R6-NEXT: sw $7, 28($sp) 523; MIPS32R6-NEXT: sw $6, 24($sp) 524; MIPS32R6-NEXT: sw $5, 20($sp) 525; MIPS32R6-NEXT: sw $4, 16($sp) 526; MIPS32R6-NEXT: addiu $1, $1, 16 527; MIPS32R6-NEXT: lw $2, 60($sp) 528; MIPS32R6-NEXT: srl $3, $2, 3 529; MIPS32R6-NEXT: andi $3, $3, 12 530; MIPS32R6-NEXT: subu $1, $1, $3 531; MIPS32R6-NEXT: sw $zero, 12($sp) 532; MIPS32R6-NEXT: sw $zero, 8($sp) 533; MIPS32R6-NEXT: sw $zero, 4($sp) 534; MIPS32R6-NEXT: sw $zero, 0($sp) 535; MIPS32R6-NEXT: lw $3, 4($1) 536; MIPS32R6-NEXT: lw $5, 8($1) 537; MIPS32R6-NEXT: srlv $4, $5, $2 538; MIPS32R6-NEXT: sll $6, $3, 1 539; MIPS32R6-NEXT: andi $7, $2, 31 540; MIPS32R6-NEXT: xori $7, $7, 31 541; MIPS32R6-NEXT: sllv $6, $6, $7 542; MIPS32R6-NEXT: srlv $3, $3, $2 543; MIPS32R6-NEXT: lw $8, 0($1) 544; MIPS32R6-NEXT: sll $9, $8, 1 545; MIPS32R6-NEXT: sllv $9, $9, $7 546; MIPS32R6-NEXT: or $3, $3, $9 547; MIPS32R6-NEXT: or $4, $4, $6 548; MIPS32R6-NEXT: lw $1, 12($1) 549; MIPS32R6-NEXT: srlv $1, $1, $2 550; MIPS32R6-NEXT: sll $5, $5, 1 551; MIPS32R6-NEXT: sllv $5, $5, $7 552; MIPS32R6-NEXT: or $5, $1, $5 553; MIPS32R6-NEXT: srlv $2, $8, $2 554; MIPS32R6-NEXT: jr $ra 555; MIPS32R6-NEXT: addiu $sp, $sp, 32 556; 557; MIPS3-LABEL: lshr_i128: 558; MIPS3: # %bb.0: # %entry 559; MIPS3-NEXT: sll $3, $7, 0 560; MIPS3-NEXT: dsrlv $6, $4, $7 561; MIPS3-NEXT: andi $1, $3, 64 562; MIPS3-NEXT: bnez $1, .LBB5_2 563; MIPS3-NEXT: daddiu $2, $zero, 0 564; MIPS3-NEXT: # %bb.1: # %entry 565; MIPS3-NEXT: dsrlv $1, $5, $7 566; MIPS3-NEXT: dsll $2, $4, 1 567; MIPS3-NEXT: xori $3, $3, 63 568; MIPS3-NEXT: dsllv $2, $2, $3 569; MIPS3-NEXT: or $3, $2, $1 570; MIPS3-NEXT: jr $ra 571; MIPS3-NEXT: move $2, $6 572; MIPS3-NEXT: .LBB5_2: 573; MIPS3-NEXT: jr $ra 574; MIPS3-NEXT: move $3, $6 575; 576; MIPS4-LABEL: lshr_i128: 577; MIPS4: # %bb.0: # %entry 578; MIPS4-NEXT: dsrlv $1, $5, $7 579; MIPS4-NEXT: dsll $2, $4, 1 580; MIPS4-NEXT: sll $5, $7, 0 581; MIPS4-NEXT: xori $3, $5, 63 582; MIPS4-NEXT: dsllv $2, $2, $3 583; MIPS4-NEXT: or $3, $2, $1 584; MIPS4-NEXT: dsrlv $2, $4, $7 585; MIPS4-NEXT: andi $1, $5, 64 586; MIPS4-NEXT: movn $3, $2, $1 587; MIPS4-NEXT: jr $ra 588; MIPS4-NEXT: movn $2, $zero, $1 589; 590; MIPS64-LABEL: lshr_i128: 591; MIPS64: # %bb.0: # %entry 592; MIPS64-NEXT: dsrlv $1, $5, $7 593; MIPS64-NEXT: dsll $2, $4, 1 594; MIPS64-NEXT: sll $5, $7, 0 595; MIPS64-NEXT: xori $3, $5, 63 596; MIPS64-NEXT: dsllv $2, $2, $3 597; MIPS64-NEXT: or $3, $2, $1 598; MIPS64-NEXT: dsrlv $2, $4, $7 599; MIPS64-NEXT: andi $1, $5, 64 600; MIPS64-NEXT: movn $3, $2, $1 601; MIPS64-NEXT: jr $ra 602; MIPS64-NEXT: movn $2, $zero, $1 603; 604; MIPS64R2-LABEL: lshr_i128: 605; MIPS64R2: # %bb.0: # %entry 606; MIPS64R2-NEXT: dsrlv $1, $5, $7 607; MIPS64R2-NEXT: dsll $2, $4, 1 608; MIPS64R2-NEXT: sll $5, $7, 0 609; MIPS64R2-NEXT: xori $3, $5, 63 610; MIPS64R2-NEXT: dsllv $2, $2, $3 611; MIPS64R2-NEXT: or $3, $2, $1 612; MIPS64R2-NEXT: dsrlv $2, $4, $7 613; MIPS64R2-NEXT: andi $1, $5, 64 614; MIPS64R2-NEXT: movn $3, $2, $1 615; MIPS64R2-NEXT: jr $ra 616; MIPS64R2-NEXT: movn $2, $zero, $1 617; 618; MIPS64R6-LABEL: lshr_i128: 619; MIPS64R6: # %bb.0: # %entry 620; MIPS64R6-NEXT: dsrlv $1, $5, $7 621; MIPS64R6-NEXT: dsll $2, $4, 1 622; MIPS64R6-NEXT: sll $3, $7, 0 623; MIPS64R6-NEXT: xori $5, $3, 63 624; MIPS64R6-NEXT: dsllv $2, $2, $5 625; MIPS64R6-NEXT: or $1, $2, $1 626; MIPS64R6-NEXT: andi $2, $3, 64 627; MIPS64R6-NEXT: sll $2, $2, 0 628; MIPS64R6-NEXT: seleqz $1, $1, $2 629; MIPS64R6-NEXT: dsrlv $4, $4, $7 630; MIPS64R6-NEXT: selnez $3, $4, $2 631; MIPS64R6-NEXT: or $3, $3, $1 632; MIPS64R6-NEXT: jr $ra 633; MIPS64R6-NEXT: seleqz $2, $4, $2 634; 635; MMR3-LABEL: lshr_i128: 636; MMR3: # %bb.0: # %entry 637; MMR3-NEXT: addiusp -40 638; MMR3-NEXT: .cfi_def_cfa_offset 40 639; MMR3-NEXT: swp $16, 32($sp) 640; MMR3-NEXT: .cfi_offset 17, -4 641; MMR3-NEXT: .cfi_offset 16, -8 642; MMR3-NEXT: li16 $2, 0 643; MMR3-NEXT: swp $6, 24($sp) 644; MMR3-NEXT: swp $4, 16($sp) 645; MMR3-NEXT: sw $2, 12($sp) 646; MMR3-NEXT: sw $2, 8($sp) 647; MMR3-NEXT: sw $2, 4($sp) 648; MMR3-NEXT: sw $2, 0($sp) 649; MMR3-NEXT: addiur1sp $2, 0 650; MMR3-NEXT: addiur2 $2, $2, 16 651; MMR3-NEXT: lw $3, 68($sp) 652; MMR3-NEXT: srl16 $4, $3, 3 653; MMR3-NEXT: andi $4, $4, 12 654; MMR3-NEXT: subu16 $5, $2, $4 655; MMR3-NEXT: lwp $6, 4($5) 656; MMR3-NEXT: andi16 $2, $3, 31 657; MMR3-NEXT: srlv $16, $7, $2 658; MMR3-NEXT: sll16 $3, $6, 1 659; MMR3-NEXT: xori $1, $2, 31 660; MMR3-NEXT: sllv $4, $3, $1 661; MMR3-NEXT: srlv $6, $6, $2 662; MMR3-NEXT: lw16 $17, 0($5) 663; MMR3-NEXT: sll16 $3, $17, 1 664; MMR3-NEXT: sllv $3, $3, $1 665; MMR3-NEXT: or16 $3, $6 666; MMR3-NEXT: or16 $4, $16 667; MMR3-NEXT: lw16 $5, 12($5) 668; MMR3-NEXT: srlv $6, $5, $2 669; MMR3-NEXT: sll16 $5, $7, 1 670; MMR3-NEXT: sllv $5, $5, $1 671; MMR3-NEXT: or16 $5, $6 672; MMR3-NEXT: srlv $2, $17, $2 673; MMR3-NEXT: lwp $16, 32($sp) 674; MMR3-NEXT: addiusp 40 675; MMR3-NEXT: jrc $ra 676; 677; MMR6-LABEL: lshr_i128: 678; MMR6: # %bb.0: # %entry 679; MMR6-NEXT: addiu $sp, $sp, -40 680; MMR6-NEXT: .cfi_def_cfa_offset 40 681; MMR6-NEXT: sw $16, 36($sp) # 4-byte Folded Spill 682; MMR6-NEXT: .cfi_offset 16, -4 683; MMR6-NEXT: li16 $2, 0 684; MMR6-NEXT: sw $7, 28($sp) 685; MMR6-NEXT: sw $6, 24($sp) 686; MMR6-NEXT: sw $5, 20($sp) 687; MMR6-NEXT: sw $4, 16($sp) 688; MMR6-NEXT: sw $2, 12($sp) 689; MMR6-NEXT: sw $2, 8($sp) 690; MMR6-NEXT: sw $2, 4($sp) 691; MMR6-NEXT: sw $2, 0($sp) 692; MMR6-NEXT: addiu $2, $sp, 0 693; MMR6-NEXT: addiur2 $2, $2, 16 694; MMR6-NEXT: lw $3, 68($sp) 695; MMR6-NEXT: srl16 $4, $3, 3 696; MMR6-NEXT: andi $4, $4, 12 697; MMR6-NEXT: subu16 $2, $2, $4 698; MMR6-NEXT: lw16 $4, 4($2) 699; MMR6-NEXT: lw16 $5, 8($2) 700; MMR6-NEXT: andi16 $6, $3, 31 701; MMR6-NEXT: srlv $1, $5, $6 702; MMR6-NEXT: sll16 $3, $4, 1 703; MMR6-NEXT: xori $7, $6, 31 704; MMR6-NEXT: sllv $8, $3, $7 705; MMR6-NEXT: srlv $3, $4, $6 706; MMR6-NEXT: lw16 $16, 0($2) 707; MMR6-NEXT: sll16 $4, $16, 1 708; MMR6-NEXT: sllv $4, $4, $7 709; MMR6-NEXT: or $3, $3, $4 710; MMR6-NEXT: or $4, $1, $8 711; MMR6-NEXT: lw16 $2, 12($2) 712; MMR6-NEXT: srlv $1, $2, $6 713; MMR6-NEXT: sll16 $2, $5, 1 714; MMR6-NEXT: sllv $2, $2, $7 715; MMR6-NEXT: or $5, $1, $2 716; MMR6-NEXT: srlv $2, $16, $6 717; MMR6-NEXT: lw $16, 36($sp) # 4-byte Folded Reload 718; MMR6-NEXT: addiu $sp, $sp, 40 719; MMR6-NEXT: jrc $ra 720entry: 721 722; o32 shouldn't use TImode helpers. 723; GP32-NOT: lw $25, %call16(__lshrti3)($gp) 724; MM-NOT: lw $25, %call16(__lshrti3)($2) 725 726 %r = lshr i128 %a, %b 727 ret i128 %r 728} 729