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 33 define 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 88 entry: 89 90 %r = lshr i1 %a, %b 91 ret i1 %r 92 } 93 94 define zeroext i8 @lshr_i8(i8 zeroext %a, i8 zeroext %b) { 95 ; MIPS2-LABEL: lshr_i8: 96 ; MIPS2: # %bb.0: # %entry 97 ; MIPS2-NEXT: srlv $1, $4, $5 98 ; MIPS2-NEXT: jr $ra 99 ; MIPS2-NEXT: andi $2, $1, 255 100 ; 101 ; MIPS32-LABEL: lshr_i8: 102 ; MIPS32: # %bb.0: # %entry 103 ; MIPS32-NEXT: srlv $1, $4, $5 104 ; MIPS32-NEXT: jr $ra 105 ; MIPS32-NEXT: andi $2, $1, 255 106 ; 107 ; MIPS32R2-LABEL: lshr_i8: 108 ; MIPS32R2: # %bb.0: # %entry 109 ; MIPS32R2-NEXT: srlv $1, $4, $5 110 ; MIPS32R2-NEXT: jr $ra 111 ; MIPS32R2-NEXT: andi $2, $1, 255 112 ; 113 ; MIPS32R6-LABEL: lshr_i8: 114 ; MIPS32R6: # %bb.0: # %entry 115 ; MIPS32R6-NEXT: srlv $1, $4, $5 116 ; MIPS32R6-NEXT: jr $ra 117 ; MIPS32R6-NEXT: andi $2, $1, 255 118 ; 119 ; MIPS3-LABEL: lshr_i8: 120 ; MIPS3: # %bb.0: # %entry 121 ; MIPS3-NEXT: srlv $1, $4, $5 122 ; MIPS3-NEXT: jr $ra 123 ; MIPS3-NEXT: andi $2, $1, 255 124 ; 125 ; MIPS4-LABEL: lshr_i8: 126 ; MIPS4: # %bb.0: # %entry 127 ; MIPS4-NEXT: srlv $1, $4, $5 128 ; MIPS4-NEXT: jr $ra 129 ; MIPS4-NEXT: andi $2, $1, 255 130 ; 131 ; MIPS64-LABEL: lshr_i8: 132 ; MIPS64: # %bb.0: # %entry 133 ; MIPS64-NEXT: srlv $1, $4, $5 134 ; MIPS64-NEXT: jr $ra 135 ; MIPS64-NEXT: andi $2, $1, 255 136 ; 137 ; MIPS64R2-LABEL: lshr_i8: 138 ; MIPS64R2: # %bb.0: # %entry 139 ; MIPS64R2-NEXT: srlv $1, $4, $5 140 ; MIPS64R2-NEXT: jr $ra 141 ; MIPS64R2-NEXT: andi $2, $1, 255 142 ; 143 ; MIPS64R6-LABEL: lshr_i8: 144 ; MIPS64R6: # %bb.0: # %entry 145 ; MIPS64R6-NEXT: srlv $1, $4, $5 146 ; MIPS64R6-NEXT: jr $ra 147 ; MIPS64R6-NEXT: andi $2, $1, 255 148 ; 149 ; MMR3-LABEL: lshr_i8: 150 ; MMR3: # %bb.0: # %entry 151 ; MMR3-NEXT: srlv $2, $4, $5 152 ; MMR3-NEXT: andi16 $2, $2, 255 153 ; MMR3-NEXT: jrc $ra 154 ; 155 ; MMR6-LABEL: lshr_i8: 156 ; MMR6: # %bb.0: # %entry 157 ; MMR6-NEXT: srlv $2, $4, $5 158 ; MMR6-NEXT: andi16 $2, $2, 255 159 ; MMR6-NEXT: jrc $ra 160 entry: 161 162 %r = lshr i8 %a, %b 163 ret i8 %r 164 } 165 166 define zeroext i16 @lshr_i16(i16 zeroext %a, i16 zeroext %b) { 167 ; MIPS2-LABEL: lshr_i16: 168 ; MIPS2: # %bb.0: # %entry 169 ; MIPS2-NEXT: srlv $1, $4, $5 170 ; MIPS2-NEXT: jr $ra 171 ; MIPS2-NEXT: andi $2, $1, 65535 172 ; 173 ; MIPS32-LABEL: lshr_i16: 174 ; MIPS32: # %bb.0: # %entry 175 ; MIPS32-NEXT: srlv $1, $4, $5 176 ; MIPS32-NEXT: jr $ra 177 ; MIPS32-NEXT: andi $2, $1, 65535 178 ; 179 ; MIPS32R2-LABEL: lshr_i16: 180 ; MIPS32R2: # %bb.0: # %entry 181 ; MIPS32R2-NEXT: srlv $1, $4, $5 182 ; MIPS32R2-NEXT: jr $ra 183 ; MIPS32R2-NEXT: andi $2, $1, 65535 184 ; 185 ; MIPS32R6-LABEL: lshr_i16: 186 ; MIPS32R6: # %bb.0: # %entry 187 ; MIPS32R6-NEXT: srlv $1, $4, $5 188 ; MIPS32R6-NEXT: jr $ra 189 ; MIPS32R6-NEXT: andi $2, $1, 65535 190 ; 191 ; MIPS3-LABEL: lshr_i16: 192 ; MIPS3: # %bb.0: # %entry 193 ; MIPS3-NEXT: srlv $1, $4, $5 194 ; MIPS3-NEXT: jr $ra 195 ; MIPS3-NEXT: andi $2, $1, 65535 196 ; 197 ; MIPS4-LABEL: lshr_i16: 198 ; MIPS4: # %bb.0: # %entry 199 ; MIPS4-NEXT: srlv $1, $4, $5 200 ; MIPS4-NEXT: jr $ra 201 ; MIPS4-NEXT: andi $2, $1, 65535 202 ; 203 ; MIPS64-LABEL: lshr_i16: 204 ; MIPS64: # %bb.0: # %entry 205 ; MIPS64-NEXT: srlv $1, $4, $5 206 ; MIPS64-NEXT: jr $ra 207 ; MIPS64-NEXT: andi $2, $1, 65535 208 ; 209 ; MIPS64R2-LABEL: lshr_i16: 210 ; MIPS64R2: # %bb.0: # %entry 211 ; MIPS64R2-NEXT: srlv $1, $4, $5 212 ; MIPS64R2-NEXT: jr $ra 213 ; MIPS64R2-NEXT: andi $2, $1, 65535 214 ; 215 ; MIPS64R6-LABEL: lshr_i16: 216 ; MIPS64R6: # %bb.0: # %entry 217 ; MIPS64R6-NEXT: srlv $1, $4, $5 218 ; MIPS64R6-NEXT: jr $ra 219 ; MIPS64R6-NEXT: andi $2, $1, 65535 220 ; 221 ; MMR3-LABEL: lshr_i16: 222 ; MMR3: # %bb.0: # %entry 223 ; MMR3-NEXT: srlv $2, $4, $5 224 ; MMR3-NEXT: andi16 $2, $2, 65535 225 ; MMR3-NEXT: jrc $ra 226 ; 227 ; MMR6-LABEL: lshr_i16: 228 ; MMR6: # %bb.0: # %entry 229 ; MMR6-NEXT: srlv $2, $4, $5 230 ; MMR6-NEXT: andi16 $2, $2, 65535 231 ; MMR6-NEXT: jrc $ra 232 entry: 233 234 %r = lshr i16 %a, %b 235 ret i16 %r 236 } 237 238 define signext i32 @lshr_i32(i32 signext %a, i32 signext %b) { 239 ; MIPS2-LABEL: lshr_i32: 240 ; MIPS2: # %bb.0: # %entry 241 ; MIPS2-NEXT: jr $ra 242 ; MIPS2-NEXT: srlv $2, $4, $5 243 ; 244 ; MIPS32-LABEL: lshr_i32: 245 ; MIPS32: # %bb.0: # %entry 246 ; MIPS32-NEXT: jr $ra 247 ; MIPS32-NEXT: srlv $2, $4, $5 248 ; 249 ; MIPS32R2-LABEL: lshr_i32: 250 ; MIPS32R2: # %bb.0: # %entry 251 ; MIPS32R2-NEXT: jr $ra 252 ; MIPS32R2-NEXT: srlv $2, $4, $5 253 ; 254 ; MIPS32R6-LABEL: lshr_i32: 255 ; MIPS32R6: # %bb.0: # %entry 256 ; MIPS32R6-NEXT: jr $ra 257 ; MIPS32R6-NEXT: srlv $2, $4, $5 258 ; 259 ; MIPS3-LABEL: lshr_i32: 260 ; MIPS3: # %bb.0: # %entry 261 ; MIPS3-NEXT: jr $ra 262 ; MIPS3-NEXT: srlv $2, $4, $5 263 ; 264 ; MIPS4-LABEL: lshr_i32: 265 ; MIPS4: # %bb.0: # %entry 266 ; MIPS4-NEXT: jr $ra 267 ; MIPS4-NEXT: srlv $2, $4, $5 268 ; 269 ; MIPS64-LABEL: lshr_i32: 270 ; MIPS64: # %bb.0: # %entry 271 ; MIPS64-NEXT: jr $ra 272 ; MIPS64-NEXT: srlv $2, $4, $5 273 ; 274 ; MIPS64R2-LABEL: lshr_i32: 275 ; MIPS64R2: # %bb.0: # %entry 276 ; MIPS64R2-NEXT: jr $ra 277 ; MIPS64R2-NEXT: srlv $2, $4, $5 278 ; 279 ; MIPS64R6-LABEL: lshr_i32: 280 ; MIPS64R6: # %bb.0: # %entry 281 ; MIPS64R6-NEXT: jr $ra 282 ; MIPS64R6-NEXT: srlv $2, $4, $5 283 ; 284 ; MMR3-LABEL: lshr_i32: 285 ; MMR3: # %bb.0: # %entry 286 ; MMR3-NEXT: jr $ra 287 ; MMR3-NEXT: srlv $2, $4, $5 288 ; 289 ; MMR6-LABEL: lshr_i32: 290 ; MMR6: # %bb.0: # %entry 291 ; MMR6-NEXT: srlv $2, $4, $5 292 ; MMR6-NEXT: jrc $ra 293 entry: 294 295 %r = lshr i32 %a, %b 296 ret i32 %r 297 } 298 299 define signext i64 @lshr_i64(i64 signext %a, i64 signext %b) { 300 ; MIPS2-LABEL: lshr_i64: 301 ; MIPS2: # %bb.0: # %entry 302 ; MIPS2-NEXT: srlv $6, $4, $7 303 ; MIPS2-NEXT: andi $8, $7, 32 304 ; MIPS2-NEXT: beqz $8, $BB4_3 305 ; MIPS2-NEXT: move $3, $6 306 ; MIPS2-NEXT: # %bb.1: # %entry 307 ; MIPS2-NEXT: beqz $8, $BB4_4 308 ; MIPS2-NEXT: addiu $2, $zero, 0 309 ; MIPS2-NEXT: $BB4_2: # %entry 310 ; MIPS2-NEXT: jr $ra 311 ; MIPS2-NEXT: nop 312 ; MIPS2-NEXT: $BB4_3: # %entry 313 ; MIPS2-NEXT: srlv $1, $5, $7 314 ; MIPS2-NEXT: not $2, $7 315 ; MIPS2-NEXT: sll $3, $4, 1 316 ; MIPS2-NEXT: sllv $2, $3, $2 317 ; MIPS2-NEXT: or $3, $2, $1 318 ; MIPS2-NEXT: bnez $8, $BB4_2 319 ; MIPS2-NEXT: addiu $2, $zero, 0 320 ; MIPS2-NEXT: $BB4_4: # %entry 321 ; MIPS2-NEXT: jr $ra 322 ; MIPS2-NEXT: move $2, $6 323 ; 324 ; MIPS32-LABEL: lshr_i64: 325 ; MIPS32: # %bb.0: # %entry 326 ; MIPS32-NEXT: srlv $1, $5, $7 327 ; MIPS32-NEXT: not $2, $7 328 ; MIPS32-NEXT: sll $3, $4, 1 329 ; MIPS32-NEXT: sllv $2, $3, $2 330 ; MIPS32-NEXT: or $3, $2, $1 331 ; MIPS32-NEXT: srlv $2, $4, $7 332 ; MIPS32-NEXT: andi $1, $7, 32 333 ; MIPS32-NEXT: movn $3, $2, $1 334 ; MIPS32-NEXT: jr $ra 335 ; MIPS32-NEXT: movn $2, $zero, $1 336 ; 337 ; MIPS32R2-LABEL: lshr_i64: 338 ; MIPS32R2: # %bb.0: # %entry 339 ; MIPS32R2-NEXT: srlv $1, $5, $7 340 ; MIPS32R2-NEXT: not $2, $7 341 ; MIPS32R2-NEXT: sll $3, $4, 1 342 ; MIPS32R2-NEXT: sllv $2, $3, $2 343 ; MIPS32R2-NEXT: or $3, $2, $1 344 ; MIPS32R2-NEXT: srlv $2, $4, $7 345 ; MIPS32R2-NEXT: andi $1, $7, 32 346 ; MIPS32R2-NEXT: movn $3, $2, $1 347 ; MIPS32R2-NEXT: jr $ra 348 ; MIPS32R2-NEXT: movn $2, $zero, $1 349 ; 350 ; MIPS32R6-LABEL: lshr_i64: 351 ; MIPS32R6: # %bb.0: # %entry 352 ; MIPS32R6-NEXT: srlv $1, $5, $7 353 ; MIPS32R6-NEXT: not $2, $7 354 ; MIPS32R6-NEXT: sll $3, $4, 1 355 ; MIPS32R6-NEXT: sllv $2, $3, $2 356 ; MIPS32R6-NEXT: or $1, $2, $1 357 ; MIPS32R6-NEXT: andi $2, $7, 32 358 ; MIPS32R6-NEXT: seleqz $1, $1, $2 359 ; MIPS32R6-NEXT: srlv $4, $4, $7 360 ; MIPS32R6-NEXT: selnez $3, $4, $2 361 ; MIPS32R6-NEXT: or $3, $3, $1 362 ; MIPS32R6-NEXT: jr $ra 363 ; MIPS32R6-NEXT: seleqz $2, $4, $2 364 ; 365 ; MIPS3-LABEL: lshr_i64: 366 ; MIPS3: # %bb.0: # %entry 367 ; MIPS3-NEXT: jr $ra 368 ; MIPS3-NEXT: dsrlv $2, $4, $5 369 ; 370 ; MIPS4-LABEL: lshr_i64: 371 ; MIPS4: # %bb.0: # %entry 372 ; MIPS4-NEXT: jr $ra 373 ; MIPS4-NEXT: dsrlv $2, $4, $5 374 ; 375 ; MIPS64-LABEL: lshr_i64: 376 ; MIPS64: # %bb.0: # %entry 377 ; MIPS64-NEXT: jr $ra 378 ; MIPS64-NEXT: dsrlv $2, $4, $5 379 ; 380 ; MIPS64R2-LABEL: lshr_i64: 381 ; MIPS64R2: # %bb.0: # %entry 382 ; MIPS64R2-NEXT: jr $ra 383 ; MIPS64R2-NEXT: dsrlv $2, $4, $5 384 ; 385 ; MIPS64R6-LABEL: lshr_i64: 386 ; MIPS64R6: # %bb.0: # %entry 387 ; MIPS64R6-NEXT: jr $ra 388 ; MIPS64R6-NEXT: dsrlv $2, $4, $5 389 ; 390 ; MMR3-LABEL: lshr_i64: 391 ; MMR3: # %bb.0: # %entry 392 ; MMR3-NEXT: srlv $2, $5, $7 393 ; MMR3-NEXT: not16 $3, $7 394 ; MMR3-NEXT: sll16 $5, $4, 1 395 ; MMR3-NEXT: sllv $3, $5, $3 396 ; MMR3-NEXT: or16 $3, $2 397 ; MMR3-NEXT: srlv $2, $4, $7 398 ; MMR3-NEXT: andi16 $4, $7, 32 399 ; MMR3-NEXT: movn $3, $2, $4 400 ; MMR3-NEXT: li16 $5, 0 401 ; MMR3-NEXT: jr $ra 402 ; MMR3-NEXT: movn $2, $5, $4 403 ; 404 ; MMR6-LABEL: lshr_i64: 405 ; MMR6: # %bb.0: # %entry 406 ; MMR6-NEXT: srlv $1, $5, $7 407 ; MMR6-NEXT: not16 $2, $7 408 ; MMR6-NEXT: sll16 $3, $4, 1 409 ; MMR6-NEXT: sllv $2, $3, $2 410 ; MMR6-NEXT: or $1, $2, $1 411 ; MMR6-NEXT: andi16 $2, $7, 32 412 ; MMR6-NEXT: seleqz $1, $1, $2 413 ; MMR6-NEXT: srlv $4, $4, $7 414 ; MMR6-NEXT: selnez $3, $4, $2 415 ; MMR6-NEXT: or $3, $3, $1 416 ; MMR6-NEXT: seleqz $2, $4, $2 417 ; MMR6-NEXT: jrc $ra 418 entry: 419 420 %r = lshr i64 %a, %b 421 ret i64 %r 422 } 423 424 define signext i128 @lshr_i128(i128 signext %a, i128 signext %b) { 425 ; MIPS2-LABEL: lshr_i128: 426 ; MIPS2: # %bb.0: # %entry 427 ; MIPS2-NEXT: addiu $sp, $sp, -8 428 ; MIPS2-NEXT: .cfi_def_cfa_offset 8 429 ; MIPS2-NEXT: sw $17, 4($sp) # 4-byte Folded Spill 430 ; MIPS2-NEXT: sw $16, 0($sp) # 4-byte Folded Spill 431 ; MIPS2-NEXT: .cfi_offset 17, -4 432 ; MIPS2-NEXT: .cfi_offset 16, -8 433 ; MIPS2-NEXT: lw $2, 36($sp) 434 ; MIPS2-NEXT: addiu $1, $zero, 64 435 ; MIPS2-NEXT: subu $10, $1, $2 436 ; MIPS2-NEXT: sllv $9, $5, $10 437 ; MIPS2-NEXT: andi $13, $10, 32 438 ; MIPS2-NEXT: addiu $8, $zero, 0 439 ; MIPS2-NEXT: bnez $13, $BB5_2 440 ; MIPS2-NEXT: addiu $25, $zero, 0 441 ; MIPS2-NEXT: # %bb.1: # %entry 442 ; MIPS2-NEXT: move $25, $9 443 ; MIPS2-NEXT: $BB5_2: # %entry 444 ; MIPS2-NEXT: not $3, $2 445 ; MIPS2-NEXT: srlv $11, $6, $2 446 ; MIPS2-NEXT: andi $12, $2, 32 447 ; MIPS2-NEXT: bnez $12, $BB5_4 448 ; MIPS2-NEXT: move $16, $11 449 ; MIPS2-NEXT: # %bb.3: # %entry 450 ; MIPS2-NEXT: srlv $1, $7, $2 451 ; MIPS2-NEXT: sll $14, $6, 1 452 ; MIPS2-NEXT: sllv $14, $14, $3 453 ; MIPS2-NEXT: or $16, $14, $1 454 ; MIPS2-NEXT: $BB5_4: # %entry 455 ; MIPS2-NEXT: addiu $24, $2, -64 456 ; MIPS2-NEXT: sll $17, $4, 1 457 ; MIPS2-NEXT: srlv $14, $4, $24 458 ; MIPS2-NEXT: andi $15, $24, 32 459 ; MIPS2-NEXT: bnez $15, $BB5_6 460 ; MIPS2-NEXT: move $gp, $14 461 ; MIPS2-NEXT: # %bb.5: # %entry 462 ; MIPS2-NEXT: srlv $1, $5, $24 463 ; MIPS2-NEXT: not $24, $24 464 ; MIPS2-NEXT: sllv $24, $17, $24 465 ; MIPS2-NEXT: or $gp, $24, $1 466 ; MIPS2-NEXT: $BB5_6: # %entry 467 ; MIPS2-NEXT: sltiu $24, $2, 64 468 ; MIPS2-NEXT: beqz $24, $BB5_8 469 ; MIPS2-NEXT: nop 470 ; MIPS2-NEXT: # %bb.7: 471 ; MIPS2-NEXT: or $gp, $16, $25 472 ; MIPS2-NEXT: $BB5_8: # %entry 473 ; MIPS2-NEXT: srlv $25, $4, $2 474 ; MIPS2-NEXT: bnez $12, $BB5_10 475 ; MIPS2-NEXT: move $16, $25 476 ; MIPS2-NEXT: # %bb.9: # %entry 477 ; MIPS2-NEXT: srlv $1, $5, $2 478 ; MIPS2-NEXT: sllv $3, $17, $3 479 ; MIPS2-NEXT: or $16, $3, $1 480 ; MIPS2-NEXT: $BB5_10: # %entry 481 ; MIPS2-NEXT: bnez $12, $BB5_12 482 ; MIPS2-NEXT: addiu $3, $zero, 0 483 ; MIPS2-NEXT: # %bb.11: # %entry 484 ; MIPS2-NEXT: move $3, $25 485 ; MIPS2-NEXT: $BB5_12: # %entry 486 ; MIPS2-NEXT: addiu $1, $zero, 63 487 ; MIPS2-NEXT: sltiu $25, $2, 1 488 ; MIPS2-NEXT: beqz $25, $BB5_22 489 ; MIPS2-NEXT: sltu $17, $1, $2 490 ; MIPS2-NEXT: # %bb.13: # %entry 491 ; MIPS2-NEXT: beqz $17, $BB5_23 492 ; MIPS2-NEXT: addiu $2, $zero, 0 493 ; MIPS2-NEXT: $BB5_14: # %entry 494 ; MIPS2-NEXT: beqz $17, $BB5_24 495 ; MIPS2-NEXT: addiu $3, $zero, 0 496 ; MIPS2-NEXT: $BB5_15: # %entry 497 ; MIPS2-NEXT: beqz $13, $BB5_25 498 ; MIPS2-NEXT: nop 499 ; MIPS2-NEXT: $BB5_16: # %entry 500 ; MIPS2-NEXT: beqz $12, $BB5_26 501 ; MIPS2-NEXT: addiu $4, $zero, 0 502 ; MIPS2-NEXT: $BB5_17: # %entry 503 ; MIPS2-NEXT: beqz $15, $BB5_27 504 ; MIPS2-NEXT: nop 505 ; MIPS2-NEXT: $BB5_18: # %entry 506 ; MIPS2-NEXT: bnez $24, $BB5_28 507 ; MIPS2-NEXT: nop 508 ; MIPS2-NEXT: $BB5_19: # %entry 509 ; MIPS2-NEXT: bnez $25, $BB5_21 510 ; MIPS2-NEXT: nop 511 ; MIPS2-NEXT: $BB5_20: # %entry 512 ; MIPS2-NEXT: move $6, $8 513 ; MIPS2-NEXT: $BB5_21: # %entry 514 ; MIPS2-NEXT: move $4, $6 515 ; MIPS2-NEXT: move $5, $7 516 ; MIPS2-NEXT: lw $16, 0($sp) # 4-byte Folded Reload 517 ; MIPS2-NEXT: lw $17, 4($sp) # 4-byte Folded Reload 518 ; MIPS2-NEXT: jr $ra 519 ; MIPS2-NEXT: addiu $sp, $sp, 8 520 ; MIPS2-NEXT: $BB5_22: # %entry 521 ; MIPS2-NEXT: move $7, $gp 522 ; MIPS2-NEXT: bnez $17, $BB5_14 523 ; MIPS2-NEXT: addiu $2, $zero, 0 524 ; MIPS2-NEXT: $BB5_23: # %entry 525 ; MIPS2-NEXT: move $2, $3 526 ; MIPS2-NEXT: bnez $17, $BB5_15 527 ; MIPS2-NEXT: addiu $3, $zero, 0 528 ; MIPS2-NEXT: $BB5_24: # %entry 529 ; MIPS2-NEXT: bnez $13, $BB5_16 530 ; MIPS2-NEXT: move $3, $16 531 ; MIPS2-NEXT: $BB5_25: # %entry 532 ; MIPS2-NEXT: not $1, $10 533 ; MIPS2-NEXT: srl $5, $5, 1 534 ; MIPS2-NEXT: sllv $4, $4, $10 535 ; MIPS2-NEXT: srlv $1, $5, $1 536 ; MIPS2-NEXT: or $9, $4, $1 537 ; MIPS2-NEXT: bnez $12, $BB5_17 538 ; MIPS2-NEXT: addiu $4, $zero, 0 539 ; MIPS2-NEXT: $BB5_26: # %entry 540 ; MIPS2-NEXT: bnez $15, $BB5_18 541 ; MIPS2-NEXT: move $4, $11 542 ; MIPS2-NEXT: $BB5_27: # %entry 543 ; MIPS2-NEXT: beqz $24, $BB5_19 544 ; MIPS2-NEXT: move $8, $14 545 ; MIPS2-NEXT: $BB5_28: 546 ; MIPS2-NEXT: bnez $25, $BB5_21 547 ; MIPS2-NEXT: or $8, $4, $9 548 ; MIPS2-NEXT: # %bb.29: 549 ; MIPS2-NEXT: b $BB5_20 550 ; MIPS2-NEXT: nop 551 ; 552 ; MIPS32-LABEL: lshr_i128: 553 ; MIPS32: # %bb.0: # %entry 554 ; MIPS32-NEXT: lw $9, 28($sp) 555 ; MIPS32-NEXT: addiu $1, $zero, 64 556 ; MIPS32-NEXT: subu $2, $1, $9 557 ; MIPS32-NEXT: sllv $10, $5, $2 558 ; MIPS32-NEXT: andi $11, $2, 32 559 ; MIPS32-NEXT: move $1, $10 560 ; MIPS32-NEXT: movn $1, $zero, $11 561 ; MIPS32-NEXT: srlv $3, $7, $9 562 ; MIPS32-NEXT: not $12, $9 563 ; MIPS32-NEXT: sll $8, $6, 1 564 ; MIPS32-NEXT: sllv $8, $8, $12 565 ; MIPS32-NEXT: or $3, $8, $3 566 ; MIPS32-NEXT: srlv $13, $6, $9 567 ; MIPS32-NEXT: andi $14, $9, 32 568 ; MIPS32-NEXT: movn $3, $13, $14 569 ; MIPS32-NEXT: addiu $15, $9, -64 570 ; MIPS32-NEXT: or $3, $3, $1 571 ; MIPS32-NEXT: srlv $1, $5, $15 572 ; MIPS32-NEXT: sll $24, $4, 1 573 ; MIPS32-NEXT: not $8, $15 574 ; MIPS32-NEXT: sllv $8, $24, $8 575 ; MIPS32-NEXT: or $1, $8, $1 576 ; MIPS32-NEXT: srlv $8, $4, $15 577 ; MIPS32-NEXT: andi $15, $15, 32 578 ; MIPS32-NEXT: movn $1, $8, $15 579 ; MIPS32-NEXT: sltiu $25, $9, 64 580 ; MIPS32-NEXT: movn $1, $3, $25 581 ; MIPS32-NEXT: sllv $3, $4, $2 582 ; MIPS32-NEXT: not $2, $2 583 ; MIPS32-NEXT: srl $gp, $5, 1 584 ; MIPS32-NEXT: srlv $2, $gp, $2 585 ; MIPS32-NEXT: or $gp, $3, $2 586 ; MIPS32-NEXT: srlv $2, $5, $9 587 ; MIPS32-NEXT: sllv $3, $24, $12 588 ; MIPS32-NEXT: or $3, $3, $2 589 ; MIPS32-NEXT: srlv $2, $4, $9 590 ; MIPS32-NEXT: movn $3, $2, $14 591 ; MIPS32-NEXT: movz $1, $7, $9 592 ; MIPS32-NEXT: movz $3, $zero, $25 593 ; MIPS32-NEXT: movn $gp, $10, $11 594 ; MIPS32-NEXT: movn $13, $zero, $14 595 ; MIPS32-NEXT: or $4, $13, $gp 596 ; MIPS32-NEXT: movn $8, $zero, $15 597 ; MIPS32-NEXT: movn $8, $4, $25 598 ; MIPS32-NEXT: movz $8, $6, $9 599 ; MIPS32-NEXT: movn $2, $zero, $14 600 ; MIPS32-NEXT: movz $2, $zero, $25 601 ; MIPS32-NEXT: move $4, $8 602 ; MIPS32-NEXT: jr $ra 603 ; MIPS32-NEXT: move $5, $1 604 ; 605 ; MIPS32R2-LABEL: lshr_i128: 606 ; MIPS32R2: # %bb.0: # %entry 607 ; MIPS32R2-NEXT: lw $9, 28($sp) 608 ; MIPS32R2-NEXT: addiu $1, $zero, 64 609 ; MIPS32R2-NEXT: subu $2, $1, $9 610 ; MIPS32R2-NEXT: sllv $10, $5, $2 611 ; MIPS32R2-NEXT: andi $11, $2, 32 612 ; MIPS32R2-NEXT: move $1, $10 613 ; MIPS32R2-NEXT: movn $1, $zero, $11 614 ; MIPS32R2-NEXT: srlv $3, $7, $9 615 ; MIPS32R2-NEXT: not $12, $9 616 ; MIPS32R2-NEXT: sll $8, $6, 1 617 ; MIPS32R2-NEXT: sllv $8, $8, $12 618 ; MIPS32R2-NEXT: or $3, $8, $3 619 ; MIPS32R2-NEXT: srlv $13, $6, $9 620 ; MIPS32R2-NEXT: andi $14, $9, 32 621 ; MIPS32R2-NEXT: movn $3, $13, $14 622 ; MIPS32R2-NEXT: addiu $15, $9, -64 623 ; MIPS32R2-NEXT: or $3, $3, $1 624 ; MIPS32R2-NEXT: srlv $1, $5, $15 625 ; MIPS32R2-NEXT: sll $24, $4, 1 626 ; MIPS32R2-NEXT: not $8, $15 627 ; MIPS32R2-NEXT: sllv $8, $24, $8 628 ; MIPS32R2-NEXT: or $1, $8, $1 629 ; MIPS32R2-NEXT: srlv $8, $4, $15 630 ; MIPS32R2-NEXT: andi $15, $15, 32 631 ; MIPS32R2-NEXT: movn $1, $8, $15 632 ; MIPS32R2-NEXT: sltiu $25, $9, 64 633 ; MIPS32R2-NEXT: movn $1, $3, $25 634 ; MIPS32R2-NEXT: sllv $3, $4, $2 635 ; MIPS32R2-NEXT: not $2, $2 636 ; MIPS32R2-NEXT: srl $gp, $5, 1 637 ; MIPS32R2-NEXT: srlv $2, $gp, $2 638 ; MIPS32R2-NEXT: or $gp, $3, $2 639 ; MIPS32R2-NEXT: srlv $2, $5, $9 640 ; MIPS32R2-NEXT: sllv $3, $24, $12 641 ; MIPS32R2-NEXT: or $3, $3, $2 642 ; MIPS32R2-NEXT: srlv $2, $4, $9 643 ; MIPS32R2-NEXT: movn $3, $2, $14 644 ; MIPS32R2-NEXT: movz $1, $7, $9 645 ; MIPS32R2-NEXT: movz $3, $zero, $25 646 ; MIPS32R2-NEXT: movn $gp, $10, $11 647 ; MIPS32R2-NEXT: movn $13, $zero, $14 648 ; MIPS32R2-NEXT: or $4, $13, $gp 649 ; MIPS32R2-NEXT: movn $8, $zero, $15 650 ; MIPS32R2-NEXT: movn $8, $4, $25 651 ; MIPS32R2-NEXT: movz $8, $6, $9 652 ; MIPS32R2-NEXT: movn $2, $zero, $14 653 ; MIPS32R2-NEXT: movz $2, $zero, $25 654 ; MIPS32R2-NEXT: move $4, $8 655 ; MIPS32R2-NEXT: jr $ra 656 ; MIPS32R2-NEXT: move $5, $1 657 ; 658 ; MIPS32R6-LABEL: lshr_i128: 659 ; MIPS32R6: # %bb.0: # %entry 660 ; MIPS32R6-NEXT: addiu $sp, $sp, -8 661 ; MIPS32R6-NEXT: .cfi_def_cfa_offset 8 662 ; MIPS32R6-NEXT: sw $16, 4($sp) # 4-byte Folded Spill 663 ; MIPS32R6-NEXT: .cfi_offset 16, -4 664 ; MIPS32R6-NEXT: lw $1, 36($sp) 665 ; MIPS32R6-NEXT: srlv $2, $7, $1 666 ; MIPS32R6-NEXT: not $3, $1 667 ; MIPS32R6-NEXT: sll $8, $6, 1 668 ; MIPS32R6-NEXT: sllv $8, $8, $3 669 ; MIPS32R6-NEXT: or $2, $8, $2 670 ; MIPS32R6-NEXT: addiu $8, $1, -64 671 ; MIPS32R6-NEXT: srlv $9, $5, $8 672 ; MIPS32R6-NEXT: sll $10, $4, 1 673 ; MIPS32R6-NEXT: not $11, $8 674 ; MIPS32R6-NEXT: sllv $11, $10, $11 675 ; MIPS32R6-NEXT: andi $12, $1, 32 676 ; MIPS32R6-NEXT: seleqz $2, $2, $12 677 ; MIPS32R6-NEXT: or $9, $11, $9 678 ; MIPS32R6-NEXT: srlv $11, $6, $1 679 ; MIPS32R6-NEXT: selnez $13, $11, $12 680 ; MIPS32R6-NEXT: addiu $14, $zero, 64 681 ; MIPS32R6-NEXT: subu $14, $14, $1 682 ; MIPS32R6-NEXT: sllv $15, $5, $14 683 ; MIPS32R6-NEXT: andi $24, $14, 32 684 ; MIPS32R6-NEXT: andi $25, $8, 32 685 ; MIPS32R6-NEXT: seleqz $9, $9, $25 686 ; MIPS32R6-NEXT: seleqz $gp, $15, $24 687 ; MIPS32R6-NEXT: or $2, $13, $2 688 ; MIPS32R6-NEXT: selnez $13, $15, $24 689 ; MIPS32R6-NEXT: sllv $15, $4, $14 690 ; MIPS32R6-NEXT: not $14, $14 691 ; MIPS32R6-NEXT: srl $16, $5, 1 692 ; MIPS32R6-NEXT: srlv $14, $16, $14 693 ; MIPS32R6-NEXT: or $14, $15, $14 694 ; MIPS32R6-NEXT: seleqz $14, $14, $24 695 ; MIPS32R6-NEXT: srlv $8, $4, $8 696 ; MIPS32R6-NEXT: or $13, $13, $14 697 ; MIPS32R6-NEXT: or $2, $2, $gp 698 ; MIPS32R6-NEXT: srlv $5, $5, $1 699 ; MIPS32R6-NEXT: selnez $14, $8, $25 700 ; MIPS32R6-NEXT: sltiu $15, $1, 64 701 ; MIPS32R6-NEXT: selnez $2, $2, $15 702 ; MIPS32R6-NEXT: or $9, $14, $9 703 ; MIPS32R6-NEXT: sllv $3, $10, $3 704 ; MIPS32R6-NEXT: seleqz $10, $11, $12 705 ; MIPS32R6-NEXT: or $10, $10, $13 706 ; MIPS32R6-NEXT: or $3, $3, $5 707 ; MIPS32R6-NEXT: seleqz $5, $9, $15 708 ; MIPS32R6-NEXT: seleqz $9, $zero, $15 709 ; MIPS32R6-NEXT: srlv $4, $4, $1 710 ; MIPS32R6-NEXT: seleqz $11, $4, $12 711 ; MIPS32R6-NEXT: selnez $11, $11, $15 712 ; MIPS32R6-NEXT: seleqz $7, $7, $1 713 ; MIPS32R6-NEXT: or $2, $2, $5 714 ; MIPS32R6-NEXT: selnez $2, $2, $1 715 ; MIPS32R6-NEXT: or $5, $7, $2 716 ; MIPS32R6-NEXT: or $2, $9, $11 717 ; MIPS32R6-NEXT: seleqz $3, $3, $12 718 ; MIPS32R6-NEXT: selnez $7, $4, $12 719 ; MIPS32R6-NEXT: seleqz $4, $6, $1 720 ; MIPS32R6-NEXT: selnez $6, $10, $15 721 ; MIPS32R6-NEXT: seleqz $8, $8, $25 722 ; MIPS32R6-NEXT: seleqz $8, $8, $15 723 ; MIPS32R6-NEXT: or $6, $6, $8 724 ; MIPS32R6-NEXT: selnez $1, $6, $1 725 ; MIPS32R6-NEXT: or $4, $4, $1 726 ; MIPS32R6-NEXT: or $1, $7, $3 727 ; MIPS32R6-NEXT: selnez $1, $1, $15 728 ; MIPS32R6-NEXT: or $3, $9, $1 729 ; MIPS32R6-NEXT: lw $16, 4($sp) # 4-byte Folded Reload 730 ; MIPS32R6-NEXT: jr $ra 731 ; MIPS32R6-NEXT: addiu $sp, $sp, 8 732 ; 733 ; MIPS3-LABEL: lshr_i128: 734 ; MIPS3: # %bb.0: # %entry 735 ; MIPS3-NEXT: sll $2, $7, 0 736 ; MIPS3-NEXT: dsrlv $6, $4, $7 737 ; MIPS3-NEXT: andi $8, $2, 64 738 ; MIPS3-NEXT: beqz $8, .LBB5_3 739 ; MIPS3-NEXT: move $3, $6 740 ; MIPS3-NEXT: # %bb.1: # %entry 741 ; MIPS3-NEXT: beqz $8, .LBB5_4 742 ; MIPS3-NEXT: daddiu $2, $zero, 0 743 ; MIPS3-NEXT: .LBB5_2: # %entry 744 ; MIPS3-NEXT: jr $ra 745 ; MIPS3-NEXT: nop 746 ; MIPS3-NEXT: .LBB5_3: # %entry 747 ; MIPS3-NEXT: dsrlv $1, $5, $7 748 ; MIPS3-NEXT: dsll $3, $4, 1 749 ; MIPS3-NEXT: not $2, $2 750 ; MIPS3-NEXT: dsllv $2, $3, $2 751 ; MIPS3-NEXT: or $3, $2, $1 752 ; MIPS3-NEXT: bnez $8, .LBB5_2 753 ; MIPS3-NEXT: daddiu $2, $zero, 0 754 ; MIPS3-NEXT: .LBB5_4: # %entry 755 ; MIPS3-NEXT: jr $ra 756 ; MIPS3-NEXT: move $2, $6 757 ; 758 ; MIPS4-LABEL: lshr_i128: 759 ; MIPS4: # %bb.0: # %entry 760 ; MIPS4-NEXT: dsrlv $1, $5, $7 761 ; MIPS4-NEXT: dsll $2, $4, 1 762 ; MIPS4-NEXT: sll $5, $7, 0 763 ; MIPS4-NEXT: not $3, $5 764 ; MIPS4-NEXT: dsllv $2, $2, $3 765 ; MIPS4-NEXT: or $3, $2, $1 766 ; MIPS4-NEXT: dsrlv $2, $4, $7 767 ; MIPS4-NEXT: andi $1, $5, 64 768 ; MIPS4-NEXT: movn $3, $2, $1 769 ; MIPS4-NEXT: jr $ra 770 ; MIPS4-NEXT: movn $2, $zero, $1 771 ; 772 ; MIPS64-LABEL: lshr_i128: 773 ; MIPS64: # %bb.0: # %entry 774 ; MIPS64-NEXT: dsrlv $1, $5, $7 775 ; MIPS64-NEXT: dsll $2, $4, 1 776 ; MIPS64-NEXT: sll $5, $7, 0 777 ; MIPS64-NEXT: not $3, $5 778 ; MIPS64-NEXT: dsllv $2, $2, $3 779 ; MIPS64-NEXT: or $3, $2, $1 780 ; MIPS64-NEXT: dsrlv $2, $4, $7 781 ; MIPS64-NEXT: andi $1, $5, 64 782 ; MIPS64-NEXT: movn $3, $2, $1 783 ; MIPS64-NEXT: jr $ra 784 ; MIPS64-NEXT: movn $2, $zero, $1 785 ; 786 ; MIPS64R2-LABEL: lshr_i128: 787 ; MIPS64R2: # %bb.0: # %entry 788 ; MIPS64R2-NEXT: dsrlv $1, $5, $7 789 ; MIPS64R2-NEXT: dsll $2, $4, 1 790 ; MIPS64R2-NEXT: sll $5, $7, 0 791 ; MIPS64R2-NEXT: not $3, $5 792 ; MIPS64R2-NEXT: dsllv $2, $2, $3 793 ; MIPS64R2-NEXT: or $3, $2, $1 794 ; MIPS64R2-NEXT: dsrlv $2, $4, $7 795 ; MIPS64R2-NEXT: andi $1, $5, 64 796 ; MIPS64R2-NEXT: movn $3, $2, $1 797 ; MIPS64R2-NEXT: jr $ra 798 ; MIPS64R2-NEXT: movn $2, $zero, $1 799 ; 800 ; MIPS64R6-LABEL: lshr_i128: 801 ; MIPS64R6: # %bb.0: # %entry 802 ; MIPS64R6-NEXT: dsrlv $1, $5, $7 803 ; MIPS64R6-NEXT: dsll $2, $4, 1 804 ; MIPS64R6-NEXT: sll $3, $7, 0 805 ; MIPS64R6-NEXT: not $5, $3 806 ; MIPS64R6-NEXT: dsllv $2, $2, $5 807 ; MIPS64R6-NEXT: or $1, $2, $1 808 ; MIPS64R6-NEXT: andi $2, $3, 64 809 ; MIPS64R6-NEXT: sll $2, $2, 0 810 ; MIPS64R6-NEXT: seleqz $1, $1, $2 811 ; MIPS64R6-NEXT: dsrlv $4, $4, $7 812 ; MIPS64R6-NEXT: selnez $3, $4, $2 813 ; MIPS64R6-NEXT: or $3, $3, $1 814 ; MIPS64R6-NEXT: jr $ra 815 ; MIPS64R6-NEXT: seleqz $2, $4, $2 816 ; 817 ; MMR3-LABEL: lshr_i128: 818 ; MMR3: # %bb.0: # %entry 819 ; MMR3-NEXT: addiusp -40 820 ; MMR3-NEXT: .cfi_def_cfa_offset 40 821 ; MMR3-NEXT: swp $16, 32($sp) 822 ; MMR3-NEXT: .cfi_offset 17, -4 823 ; MMR3-NEXT: .cfi_offset 16, -8 824 ; MMR3-NEXT: move $8, $7 825 ; MMR3-NEXT: sw $6, 24($sp) # 4-byte Folded Spill 826 ; MMR3-NEXT: sw $4, 28($sp) # 4-byte Folded Spill 827 ; MMR3-NEXT: lw $16, 68($sp) 828 ; MMR3-NEXT: li16 $2, 64 829 ; MMR3-NEXT: subu16 $7, $2, $16 830 ; MMR3-NEXT: sllv $9, $5, $7 831 ; MMR3-NEXT: move $17, $5 832 ; MMR3-NEXT: sw $5, 0($sp) # 4-byte Folded Spill 833 ; MMR3-NEXT: andi16 $3, $7, 32 834 ; MMR3-NEXT: sw $3, 20($sp) # 4-byte Folded Spill 835 ; MMR3-NEXT: li16 $2, 0 836 ; MMR3-NEXT: move $4, $9 837 ; MMR3-NEXT: movn $4, $2, $3 838 ; MMR3-NEXT: srlv $5, $8, $16 839 ; MMR3-NEXT: not16 $3, $16 840 ; MMR3-NEXT: sw $3, 16($sp) # 4-byte Folded Spill 841 ; MMR3-NEXT: sll16 $2, $6, 1 842 ; MMR3-NEXT: sllv $2, $2, $3 843 ; MMR3-NEXT: or16 $2, $5 844 ; MMR3-NEXT: srlv $5, $6, $16 845 ; MMR3-NEXT: sw $5, 4($sp) # 4-byte Folded Spill 846 ; MMR3-NEXT: andi16 $3, $16, 32 847 ; MMR3-NEXT: sw $3, 12($sp) # 4-byte Folded Spill 848 ; MMR3-NEXT: movn $2, $5, $3 849 ; MMR3-NEXT: addiu $3, $16, -64 850 ; MMR3-NEXT: or16 $2, $4 851 ; MMR3-NEXT: srlv $4, $17, $3 852 ; MMR3-NEXT: sw $4, 8($sp) # 4-byte Folded Spill 853 ; MMR3-NEXT: lw $4, 28($sp) # 4-byte Folded Reload 854 ; MMR3-NEXT: sll16 $6, $4, 1 855 ; MMR3-NEXT: not16 $5, $3 856 ; MMR3-NEXT: sllv $5, $6, $5 857 ; MMR3-NEXT: lw $17, 8($sp) # 4-byte Folded Reload 858 ; MMR3-NEXT: or16 $5, $17 859 ; MMR3-NEXT: srlv $1, $4, $3 860 ; MMR3-NEXT: andi16 $3, $3, 32 861 ; MMR3-NEXT: sw $3, 8($sp) # 4-byte Folded Spill 862 ; MMR3-NEXT: movn $5, $1, $3 863 ; MMR3-NEXT: sltiu $10, $16, 64 864 ; MMR3-NEXT: movn $5, $2, $10 865 ; MMR3-NEXT: sllv $2, $4, $7 866 ; MMR3-NEXT: not16 $3, $7 867 ; MMR3-NEXT: lw $7, 0($sp) # 4-byte Folded Reload 868 ; MMR3-NEXT: srl16 $4, $7, 1 869 ; MMR3-NEXT: srlv $4, $4, $3 870 ; MMR3-NEXT: or16 $4, $2 871 ; MMR3-NEXT: srlv $2, $7, $16 872 ; MMR3-NEXT: lw $3, 16($sp) # 4-byte Folded Reload 873 ; MMR3-NEXT: sllv $3, $6, $3 874 ; MMR3-NEXT: or16 $3, $2 875 ; MMR3-NEXT: lw $2, 28($sp) # 4-byte Folded Reload 876 ; MMR3-NEXT: srlv $2, $2, $16 877 ; MMR3-NEXT: lw $17, 12($sp) # 4-byte Folded Reload 878 ; MMR3-NEXT: movn $3, $2, $17 879 ; MMR3-NEXT: movz $5, $8, $16 880 ; MMR3-NEXT: li16 $6, 0 881 ; MMR3-NEXT: movz $3, $6, $10 882 ; MMR3-NEXT: lw $7, 20($sp) # 4-byte Folded Reload 883 ; MMR3-NEXT: movn $4, $9, $7 884 ; MMR3-NEXT: lw $6, 4($sp) # 4-byte Folded Reload 885 ; MMR3-NEXT: li16 $7, 0 886 ; MMR3-NEXT: movn $6, $7, $17 887 ; MMR3-NEXT: or16 $6, $4 888 ; MMR3-NEXT: lw $4, 8($sp) # 4-byte Folded Reload 889 ; MMR3-NEXT: movn $1, $7, $4 890 ; MMR3-NEXT: li16 $7, 0 891 ; MMR3-NEXT: movn $1, $6, $10 892 ; MMR3-NEXT: lw $4, 24($sp) # 4-byte Folded Reload 893 ; MMR3-NEXT: movz $1, $4, $16 894 ; MMR3-NEXT: movn $2, $7, $17 895 ; MMR3-NEXT: li16 $4, 0 896 ; MMR3-NEXT: movz $2, $4, $10 897 ; MMR3-NEXT: move $4, $1 898 ; MMR3-NEXT: lwp $16, 32($sp) 899 ; MMR3-NEXT: addiusp 40 900 ; MMR3-NEXT: jrc $ra 901 ; 902 ; MMR6-LABEL: lshr_i128: 903 ; MMR6: # %bb.0: # %entry 904 ; MMR6-NEXT: addiu $sp, $sp, -32 905 ; MMR6-NEXT: .cfi_def_cfa_offset 32 906 ; MMR6-NEXT: sw $17, 28($sp) # 4-byte Folded Spill 907 ; MMR6-NEXT: sw $16, 24($sp) # 4-byte Folded Spill 908 ; MMR6-NEXT: .cfi_offset 17, -4 909 ; MMR6-NEXT: .cfi_offset 16, -8 910 ; MMR6-NEXT: move $1, $7 911 ; MMR6-NEXT: move $7, $5 912 ; MMR6-NEXT: lw $3, 60($sp) 913 ; MMR6-NEXT: srlv $2, $1, $3 914 ; MMR6-NEXT: not16 $5, $3 915 ; MMR6-NEXT: sw $5, 12($sp) # 4-byte Folded Spill 916 ; MMR6-NEXT: move $17, $6 917 ; MMR6-NEXT: sw $6, 16($sp) # 4-byte Folded Spill 918 ; MMR6-NEXT: sll16 $6, $6, 1 919 ; MMR6-NEXT: sllv $6, $6, $5 920 ; MMR6-NEXT: or $8, $6, $2 921 ; MMR6-NEXT: addiu $5, $3, -64 922 ; MMR6-NEXT: srlv $9, $7, $5 923 ; MMR6-NEXT: move $6, $4 924 ; MMR6-NEXT: sll16 $2, $4, 1 925 ; MMR6-NEXT: sw $2, 8($sp) # 4-byte Folded Spill 926 ; MMR6-NEXT: not16 $16, $5 927 ; MMR6-NEXT: sllv $10, $2, $16 928 ; MMR6-NEXT: andi16 $16, $3, 32 929 ; MMR6-NEXT: seleqz $8, $8, $16 930 ; MMR6-NEXT: or $9, $10, $9 931 ; MMR6-NEXT: srlv $10, $17, $3 932 ; MMR6-NEXT: selnez $11, $10, $16 933 ; MMR6-NEXT: li16 $17, 64 934 ; MMR6-NEXT: subu16 $2, $17, $3 935 ; MMR6-NEXT: sllv $12, $7, $2 936 ; MMR6-NEXT: move $17, $7 937 ; MMR6-NEXT: andi16 $4, $2, 32 938 ; MMR6-NEXT: andi16 $7, $5, 32 939 ; MMR6-NEXT: sw $7, 20($sp) # 4-byte Folded Spill 940 ; MMR6-NEXT: seleqz $9, $9, $7 941 ; MMR6-NEXT: seleqz $13, $12, $4 942 ; MMR6-NEXT: or $8, $11, $8 943 ; MMR6-NEXT: selnez $11, $12, $4 944 ; MMR6-NEXT: sllv $12, $6, $2 945 ; MMR6-NEXT: move $7, $6 946 ; MMR6-NEXT: sw $6, 4($sp) # 4-byte Folded Spill 947 ; MMR6-NEXT: not16 $2, $2 948 ; MMR6-NEXT: srl16 $6, $17, 1 949 ; MMR6-NEXT: srlv $2, $6, $2 950 ; MMR6-NEXT: or $2, $12, $2 951 ; MMR6-NEXT: seleqz $2, $2, $4 952 ; MMR6-NEXT: srlv $4, $7, $5 953 ; MMR6-NEXT: or $11, $11, $2 954 ; MMR6-NEXT: or $5, $8, $13 955 ; MMR6-NEXT: srlv $6, $17, $3 956 ; MMR6-NEXT: lw $2, 20($sp) # 4-byte Folded Reload 957 ; MMR6-NEXT: selnez $7, $4, $2 958 ; MMR6-NEXT: sltiu $8, $3, 64 959 ; MMR6-NEXT: selnez $12, $5, $8 960 ; MMR6-NEXT: or $7, $7, $9 961 ; MMR6-NEXT: lw $5, 12($sp) # 4-byte Folded Reload 962 ; MMR6-NEXT: lw $2, 8($sp) # 4-byte Folded Reload 963 ; MMR6-NEXT: sllv $9, $2, $5 964 ; MMR6-NEXT: seleqz $10, $10, $16 965 ; MMR6-NEXT: li16 $5, 0 966 ; MMR6-NEXT: or $10, $10, $11 967 ; MMR6-NEXT: or $6, $9, $6 968 ; MMR6-NEXT: seleqz $2, $7, $8 969 ; MMR6-NEXT: seleqz $7, $5, $8 970 ; MMR6-NEXT: lw $5, 4($sp) # 4-byte Folded Reload 971 ; MMR6-NEXT: srlv $9, $5, $3 972 ; MMR6-NEXT: seleqz $11, $9, $16 973 ; MMR6-NEXT: selnez $11, $11, $8 974 ; MMR6-NEXT: seleqz $1, $1, $3 975 ; MMR6-NEXT: or $2, $12, $2 976 ; MMR6-NEXT: selnez $2, $2, $3 977 ; MMR6-NEXT: or $5, $1, $2 978 ; MMR6-NEXT: or $2, $7, $11 979 ; MMR6-NEXT: seleqz $1, $6, $16 980 ; MMR6-NEXT: selnez $6, $9, $16 981 ; MMR6-NEXT: lw $16, 16($sp) # 4-byte Folded Reload 982 ; MMR6-NEXT: seleqz $9, $16, $3 983 ; MMR6-NEXT: selnez $10, $10, $8 984 ; MMR6-NEXT: lw $16, 20($sp) # 4-byte Folded Reload 985 ; MMR6-NEXT: seleqz $4, $4, $16 986 ; MMR6-NEXT: seleqz $4, $4, $8 987 ; MMR6-NEXT: or $4, $10, $4 988 ; MMR6-NEXT: selnez $3, $4, $3 989 ; MMR6-NEXT: or $4, $9, $3 990 ; MMR6-NEXT: or $1, $6, $1 991 ; MMR6-NEXT: selnez $1, $1, $8 992 ; MMR6-NEXT: or $3, $7, $1 993 ; MMR6-NEXT: lw $16, 24($sp) # 4-byte Folded Reload 994 ; MMR6-NEXT: lw $17, 28($sp) # 4-byte Folded Reload 995 ; MMR6-NEXT: addiu $sp, $sp, 32 996 ; MMR6-NEXT: jrc $ra 997 entry: 998 999 ; o32 shouldn't use TImode helpers. 1000 ; GP32-NOT: lw $25, %call16(__lshrti3)($gp) 1001 ; MM-NOT: lw $25, %call16(__lshrti3)($2) 1002 1003 %r = lshr i128 %a, %b 1004 ret i128 %r 1005 } 1006