[NFC][Py Reformat] Reformat python files in llvm
[llvm-project.git] / llvm / test / CodeGen / Mips / llvm-ir / lshr.ll
blobc4e05117d28e15ebc30fb0aa869758ca5b862306
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
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
39 ; MIPS32-LABEL: lshr_i1:
40 ; MIPS32:       # %bb.0: # %entry
41 ; MIPS32-NEXT:    jr $ra
42 ; MIPS32-NEXT:    move $2, $4
44 ; MIPS32R2-LABEL: lshr_i1:
45 ; MIPS32R2:       # %bb.0: # %entry
46 ; MIPS32R2-NEXT:    jr $ra
47 ; MIPS32R2-NEXT:    move $2, $4
49 ; MIPS32R6-LABEL: lshr_i1:
50 ; MIPS32R6:       # %bb.0: # %entry
51 ; MIPS32R6-NEXT:    jr $ra
52 ; MIPS32R6-NEXT:    move $2, $4
54 ; MIPS3-LABEL: lshr_i1:
55 ; MIPS3:       # %bb.0: # %entry
56 ; MIPS3-NEXT:    jr $ra
57 ; MIPS3-NEXT:    move $2, $4
59 ; MIPS4-LABEL: lshr_i1:
60 ; MIPS4:       # %bb.0: # %entry
61 ; MIPS4-NEXT:    jr $ra
62 ; MIPS4-NEXT:    move $2, $4
64 ; MIPS64-LABEL: lshr_i1:
65 ; MIPS64:       # %bb.0: # %entry
66 ; MIPS64-NEXT:    jr $ra
67 ; MIPS64-NEXT:    move $2, $4
69 ; MIPS64R2-LABEL: lshr_i1:
70 ; MIPS64R2:       # %bb.0: # %entry
71 ; MIPS64R2-NEXT:    jr $ra
72 ; MIPS64R2-NEXT:    move $2, $4
74 ; MIPS64R6-LABEL: lshr_i1:
75 ; MIPS64R6:       # %bb.0: # %entry
76 ; MIPS64R6-NEXT:    jr $ra
77 ; MIPS64R6-NEXT:    move $2, $4
79 ; MMR3-LABEL: lshr_i1:
80 ; MMR3:       # %bb.0: # %entry
81 ; MMR3-NEXT:    move $2, $4
82 ; MMR3-NEXT:    jrc $ra
84 ; MMR6-LABEL: lshr_i1:
85 ; MMR6:       # %bb.0: # %entry
86 ; MMR6-NEXT:    move $2, $4
87 ; MMR6-NEXT:    jrc $ra
88 entry:
90   %r = lshr i1 %a, %b
91   ret i1 %r
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:    jr $ra
98 ; MIPS2-NEXT:    srlv $2, $4, $5
100 ; MIPS32-LABEL: lshr_i8:
101 ; MIPS32:       # %bb.0: # %entry
102 ; MIPS32-NEXT:    jr $ra
103 ; MIPS32-NEXT:    srlv $2, $4, $5
105 ; MIPS32R2-LABEL: lshr_i8:
106 ; MIPS32R2:       # %bb.0: # %entry
107 ; MIPS32R2-NEXT:    jr $ra
108 ; MIPS32R2-NEXT:    srlv $2, $4, $5
110 ; MIPS32R6-LABEL: lshr_i8:
111 ; MIPS32R6:       # %bb.0: # %entry
112 ; MIPS32R6-NEXT:    jr $ra
113 ; MIPS32R6-NEXT:    srlv $2, $4, $5
115 ; MIPS3-LABEL: lshr_i8:
116 ; MIPS3:       # %bb.0: # %entry
117 ; MIPS3-NEXT:    jr $ra
118 ; MIPS3-NEXT:    srlv $2, $4, $5
120 ; MIPS4-LABEL: lshr_i8:
121 ; MIPS4:       # %bb.0: # %entry
122 ; MIPS4-NEXT:    jr $ra
123 ; MIPS4-NEXT:    srlv $2, $4, $5
125 ; MIPS64-LABEL: lshr_i8:
126 ; MIPS64:       # %bb.0: # %entry
127 ; MIPS64-NEXT:    jr $ra
128 ; MIPS64-NEXT:    srlv $2, $4, $5
130 ; MIPS64R2-LABEL: lshr_i8:
131 ; MIPS64R2:       # %bb.0: # %entry
132 ; MIPS64R2-NEXT:    jr $ra
133 ; MIPS64R2-NEXT:    srlv $2, $4, $5
135 ; MIPS64R6-LABEL: lshr_i8:
136 ; MIPS64R6:       # %bb.0: # %entry
137 ; MIPS64R6-NEXT:    jr $ra
138 ; MIPS64R6-NEXT:    srlv $2, $4, $5
140 ; MMR3-LABEL: lshr_i8:
141 ; MMR3:       # %bb.0: # %entry
142 ; MMR3-NEXT:    jr $ra
143 ; MMR3-NEXT:    srlv $2, $4, $5
145 ; MMR6-LABEL: lshr_i8:
146 ; MMR6:       # %bb.0: # %entry
147 ; MMR6-NEXT:    srlv $2, $4, $5
148 ; MMR6-NEXT:    jrc $ra
149 entry:
151   %r = lshr i8 %a, %b
152   ret i8 %r
155 define 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
161 ; MIPS32-LABEL: lshr_i16:
162 ; MIPS32:       # %bb.0: # %entry
163 ; MIPS32-NEXT:    jr $ra
164 ; MIPS32-NEXT:    srlv $2, $4, $5
166 ; MIPS32R2-LABEL: lshr_i16:
167 ; MIPS32R2:       # %bb.0: # %entry
168 ; MIPS32R2-NEXT:    jr $ra
169 ; MIPS32R2-NEXT:    srlv $2, $4, $5
171 ; MIPS32R6-LABEL: lshr_i16:
172 ; MIPS32R6:       # %bb.0: # %entry
173 ; MIPS32R6-NEXT:    jr $ra
174 ; MIPS32R6-NEXT:    srlv $2, $4, $5
176 ; MIPS3-LABEL: lshr_i16:
177 ; MIPS3:       # %bb.0: # %entry
178 ; MIPS3-NEXT:    jr $ra
179 ; MIPS3-NEXT:    srlv $2, $4, $5
181 ; MIPS4-LABEL: lshr_i16:
182 ; MIPS4:       # %bb.0: # %entry
183 ; MIPS4-NEXT:    jr $ra
184 ; MIPS4-NEXT:    srlv $2, $4, $5
186 ; MIPS64-LABEL: lshr_i16:
187 ; MIPS64:       # %bb.0: # %entry
188 ; MIPS64-NEXT:    jr $ra
189 ; MIPS64-NEXT:    srlv $2, $4, $5
191 ; MIPS64R2-LABEL: lshr_i16:
192 ; MIPS64R2:       # %bb.0: # %entry
193 ; MIPS64R2-NEXT:    jr $ra
194 ; MIPS64R2-NEXT:    srlv $2, $4, $5
196 ; MIPS64R6-LABEL: lshr_i16:
197 ; MIPS64R6:       # %bb.0: # %entry
198 ; MIPS64R6-NEXT:    jr $ra
199 ; MIPS64R6-NEXT:    srlv $2, $4, $5
201 ; MMR3-LABEL: lshr_i16:
202 ; MMR3:       # %bb.0: # %entry
203 ; MMR3-NEXT:    jr $ra
204 ; MMR3-NEXT:    srlv $2, $4, $5
206 ; MMR6-LABEL: lshr_i16:
207 ; MMR6:       # %bb.0: # %entry
208 ; MMR6-NEXT:    srlv $2, $4, $5
209 ; MMR6-NEXT:    jrc $ra
210 entry:
212   %r = lshr i16 %a, %b
213   ret i16 %r
216 define 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
222 ; MIPS32-LABEL: lshr_i32:
223 ; MIPS32:       # %bb.0: # %entry
224 ; MIPS32-NEXT:    jr $ra
225 ; MIPS32-NEXT:    srlv $2, $4, $5
227 ; MIPS32R2-LABEL: lshr_i32:
228 ; MIPS32R2:       # %bb.0: # %entry
229 ; MIPS32R2-NEXT:    jr $ra
230 ; MIPS32R2-NEXT:    srlv $2, $4, $5
232 ; MIPS32R6-LABEL: lshr_i32:
233 ; MIPS32R6:       # %bb.0: # %entry
234 ; MIPS32R6-NEXT:    jr $ra
235 ; MIPS32R6-NEXT:    srlv $2, $4, $5
237 ; MIPS3-LABEL: lshr_i32:
238 ; MIPS3:       # %bb.0: # %entry
239 ; MIPS3-NEXT:    jr $ra
240 ; MIPS3-NEXT:    srlv $2, $4, $5
242 ; MIPS4-LABEL: lshr_i32:
243 ; MIPS4:       # %bb.0: # %entry
244 ; MIPS4-NEXT:    jr $ra
245 ; MIPS4-NEXT:    srlv $2, $4, $5
247 ; MIPS64-LABEL: lshr_i32:
248 ; MIPS64:       # %bb.0: # %entry
249 ; MIPS64-NEXT:    jr $ra
250 ; MIPS64-NEXT:    srlv $2, $4, $5
252 ; MIPS64R2-LABEL: lshr_i32:
253 ; MIPS64R2:       # %bb.0: # %entry
254 ; MIPS64R2-NEXT:    jr $ra
255 ; MIPS64R2-NEXT:    srlv $2, $4, $5
257 ; MIPS64R6-LABEL: lshr_i32:
258 ; MIPS64R6:       # %bb.0: # %entry
259 ; MIPS64R6-NEXT:    jr $ra
260 ; MIPS64R6-NEXT:    srlv $2, $4, $5
262 ; MMR3-LABEL: lshr_i32:
263 ; MMR3:       # %bb.0: # %entry
264 ; MMR3-NEXT:    jr $ra
265 ; MMR3-NEXT:    srlv $2, $4, $5
267 ; MMR6-LABEL: lshr_i32:
268 ; MMR6:       # %bb.0: # %entry
269 ; MMR6-NEXT:    srlv $2, $4, $5
270 ; MMR6-NEXT:    jrc $ra
271 entry:
273   %r = lshr i32 %a, %b
274   ret i32 %r
277 define 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:    not $2, $7
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
296 ; MIPS32-LABEL: lshr_i64:
297 ; MIPS32:       # %bb.0: # %entry
298 ; MIPS32-NEXT:    srlv $1, $5, $7
299 ; MIPS32-NEXT:    not $2, $7
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
309 ; MIPS32R2-LABEL: lshr_i64:
310 ; MIPS32R2:       # %bb.0: # %entry
311 ; MIPS32R2-NEXT:    srlv $1, $5, $7
312 ; MIPS32R2-NEXT:    not $2, $7
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
322 ; MIPS32R6-LABEL: lshr_i64:
323 ; MIPS32R6:       # %bb.0: # %entry
324 ; MIPS32R6-NEXT:    srlv $1, $5, $7
325 ; MIPS32R6-NEXT:    not $2, $7
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
337 ; MIPS3-LABEL: lshr_i64:
338 ; MIPS3:       # %bb.0: # %entry
339 ; MIPS3-NEXT:    jr $ra
340 ; MIPS3-NEXT:    dsrlv $2, $4, $5
342 ; MIPS4-LABEL: lshr_i64:
343 ; MIPS4:       # %bb.0: # %entry
344 ; MIPS4-NEXT:    jr $ra
345 ; MIPS4-NEXT:    dsrlv $2, $4, $5
347 ; MIPS64-LABEL: lshr_i64:
348 ; MIPS64:       # %bb.0: # %entry
349 ; MIPS64-NEXT:    jr $ra
350 ; MIPS64-NEXT:    dsrlv $2, $4, $5
352 ; MIPS64R2-LABEL: lshr_i64:
353 ; MIPS64R2:       # %bb.0: # %entry
354 ; MIPS64R2-NEXT:    jr $ra
355 ; MIPS64R2-NEXT:    dsrlv $2, $4, $5
357 ; MIPS64R6-LABEL: lshr_i64:
358 ; MIPS64R6:       # %bb.0: # %entry
359 ; MIPS64R6-NEXT:    jr $ra
360 ; MIPS64R6-NEXT:    dsrlv $2, $4, $5
362 ; MMR3-LABEL: lshr_i64:
363 ; MMR3:       # %bb.0: # %entry
364 ; MMR3-NEXT:    srlv $2, $5, $7
365 ; MMR3-NEXT:    not16 $3, $7
366 ; MMR3-NEXT:    sll16 $5, $4, 1
367 ; MMR3-NEXT:    sllv $3, $5, $3
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
376 ; MMR6-LABEL: lshr_i64:
377 ; MMR6:       # %bb.0: # %entry
378 ; MMR6-NEXT:    srlv $1, $5, $7
379 ; MMR6-NEXT:    not16 $2, $7
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
390 entry:
392   %r = lshr i64 %a, %b
393   ret i64 %r
396 define 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:    swl $7, 28($sp)
402 ; MIPS2-NEXT:    swl $6, 24($sp)
403 ; MIPS2-NEXT:    swl $5, 20($sp)
404 ; MIPS2-NEXT:    swl $4, 16($sp)
405 ; MIPS2-NEXT:    swl $zero, 12($sp)
406 ; MIPS2-NEXT:    swl $zero, 8($sp)
407 ; MIPS2-NEXT:    swl $zero, 4($sp)
408 ; MIPS2-NEXT:    swl $zero, 0($sp)
409 ; MIPS2-NEXT:    addiu $1, $sp, 0
410 ; MIPS2-NEXT:    swr $7, 31($sp)
411 ; MIPS2-NEXT:    swr $6, 27($sp)
412 ; MIPS2-NEXT:    swr $5, 23($sp)
413 ; MIPS2-NEXT:    swr $4, 19($sp)
414 ; MIPS2-NEXT:    swr $zero, 15($sp)
415 ; MIPS2-NEXT:    swr $zero, 11($sp)
416 ; MIPS2-NEXT:    swr $zero, 7($sp)
417 ; MIPS2-NEXT:    swr $zero, 3($sp)
418 ; MIPS2-NEXT:    addiu $1, $1, 16
419 ; MIPS2-NEXT:    lw $2, 60($sp)
420 ; MIPS2-NEXT:    srl $3, $2, 3
421 ; MIPS2-NEXT:    andi $3, $3, 15
422 ; MIPS2-NEXT:    subu $1, $1, $3
423 ; MIPS2-NEXT:    lwl $3, 4($1)
424 ; MIPS2-NEXT:    lwr $3, 7($1)
425 ; MIPS2-NEXT:    sll $4, $3, 1
426 ; MIPS2-NEXT:    lwl $5, 8($1)
427 ; MIPS2-NEXT:    lwr $5, 11($1)
428 ; MIPS2-NEXT:    andi $2, $2, 7
429 ; MIPS2-NEXT:    not $6, $2
430 ; MIPS2-NEXT:    andi $6, $6, 31
431 ; MIPS2-NEXT:    srlv $7, $5, $2
432 ; MIPS2-NEXT:    sllv $4, $4, $6
433 ; MIPS2-NEXT:    srlv $3, $3, $2
434 ; MIPS2-NEXT:    lwl $6, 0($1)
435 ; MIPS2-NEXT:    lwr $6, 3($1)
436 ; MIPS2-NEXT:    sll $8, $6, 1
437 ; MIPS2-NEXT:    xori $9, $2, 31
438 ; MIPS2-NEXT:    sllv $8, $8, $9
439 ; MIPS2-NEXT:    or $3, $3, $8
440 ; MIPS2-NEXT:    or $4, $7, $4
441 ; MIPS2-NEXT:    lwl $7, 12($1)
442 ; MIPS2-NEXT:    lwr $7, 15($1)
443 ; MIPS2-NEXT:    srlv $1, $7, $2
444 ; MIPS2-NEXT:    sll $5, $5, 1
445 ; MIPS2-NEXT:    sllv $5, $5, $9
446 ; MIPS2-NEXT:    or $5, $1, $5
447 ; MIPS2-NEXT:    srlv $2, $6, $2
448 ; MIPS2-NEXT:    jr $ra
449 ; MIPS2-NEXT:    addiu $sp, $sp, 32
451 ; MIPS32-LABEL: lshr_i128:
452 ; MIPS32:       # %bb.0: # %entry
453 ; MIPS32-NEXT:    addiu $sp, $sp, -32
454 ; MIPS32-NEXT:    .cfi_def_cfa_offset 32
455 ; MIPS32-NEXT:    swl $7, 28($sp)
456 ; MIPS32-NEXT:    swl $6, 24($sp)
457 ; MIPS32-NEXT:    swl $5, 20($sp)
458 ; MIPS32-NEXT:    swl $4, 16($sp)
459 ; MIPS32-NEXT:    swl $zero, 12($sp)
460 ; MIPS32-NEXT:    swl $zero, 8($sp)
461 ; MIPS32-NEXT:    swl $zero, 4($sp)
462 ; MIPS32-NEXT:    swl $zero, 0($sp)
463 ; MIPS32-NEXT:    addiu $1, $sp, 0
464 ; MIPS32-NEXT:    swr $7, 31($sp)
465 ; MIPS32-NEXT:    swr $6, 27($sp)
466 ; MIPS32-NEXT:    swr $5, 23($sp)
467 ; MIPS32-NEXT:    swr $4, 19($sp)
468 ; MIPS32-NEXT:    swr $zero, 15($sp)
469 ; MIPS32-NEXT:    swr $zero, 11($sp)
470 ; MIPS32-NEXT:    swr $zero, 7($sp)
471 ; MIPS32-NEXT:    swr $zero, 3($sp)
472 ; MIPS32-NEXT:    addiu $1, $1, 16
473 ; MIPS32-NEXT:    lw $2, 60($sp)
474 ; MIPS32-NEXT:    srl $3, $2, 3
475 ; MIPS32-NEXT:    andi $3, $3, 15
476 ; MIPS32-NEXT:    subu $1, $1, $3
477 ; MIPS32-NEXT:    lwl $3, 4($1)
478 ; MIPS32-NEXT:    lwr $3, 7($1)
479 ; MIPS32-NEXT:    sll $4, $3, 1
480 ; MIPS32-NEXT:    lwl $5, 8($1)
481 ; MIPS32-NEXT:    lwr $5, 11($1)
482 ; MIPS32-NEXT:    andi $2, $2, 7
483 ; MIPS32-NEXT:    not $6, $2
484 ; MIPS32-NEXT:    andi $6, $6, 31
485 ; MIPS32-NEXT:    srlv $7, $5, $2
486 ; MIPS32-NEXT:    sllv $4, $4, $6
487 ; MIPS32-NEXT:    srlv $3, $3, $2
488 ; MIPS32-NEXT:    lwl $6, 0($1)
489 ; MIPS32-NEXT:    lwr $6, 3($1)
490 ; MIPS32-NEXT:    sll $8, $6, 1
491 ; MIPS32-NEXT:    xori $9, $2, 31
492 ; MIPS32-NEXT:    sllv $8, $8, $9
493 ; MIPS32-NEXT:    or $3, $3, $8
494 ; MIPS32-NEXT:    or $4, $7, $4
495 ; MIPS32-NEXT:    lwl $7, 12($1)
496 ; MIPS32-NEXT:    lwr $7, 15($1)
497 ; MIPS32-NEXT:    srlv $1, $7, $2
498 ; MIPS32-NEXT:    sll $5, $5, 1
499 ; MIPS32-NEXT:    sllv $5, $5, $9
500 ; MIPS32-NEXT:    or $5, $1, $5
501 ; MIPS32-NEXT:    srlv $2, $6, $2
502 ; MIPS32-NEXT:    jr $ra
503 ; MIPS32-NEXT:    addiu $sp, $sp, 32
505 ; MIPS32R2-LABEL: lshr_i128:
506 ; MIPS32R2:       # %bb.0: # %entry
507 ; MIPS32R2-NEXT:    addiu $sp, $sp, -32
508 ; MIPS32R2-NEXT:    .cfi_def_cfa_offset 32
509 ; MIPS32R2-NEXT:    swl $7, 28($sp)
510 ; MIPS32R2-NEXT:    swl $6, 24($sp)
511 ; MIPS32R2-NEXT:    swl $5, 20($sp)
512 ; MIPS32R2-NEXT:    swl $4, 16($sp)
513 ; MIPS32R2-NEXT:    swl $zero, 12($sp)
514 ; MIPS32R2-NEXT:    swl $zero, 8($sp)
515 ; MIPS32R2-NEXT:    swl $zero, 4($sp)
516 ; MIPS32R2-NEXT:    swl $zero, 0($sp)
517 ; MIPS32R2-NEXT:    swr $7, 31($sp)
518 ; MIPS32R2-NEXT:    swr $6, 27($sp)
519 ; MIPS32R2-NEXT:    swr $5, 23($sp)
520 ; MIPS32R2-NEXT:    swr $4, 19($sp)
521 ; MIPS32R2-NEXT:    swr $zero, 15($sp)
522 ; MIPS32R2-NEXT:    swr $zero, 11($sp)
523 ; MIPS32R2-NEXT:    swr $zero, 7($sp)
524 ; MIPS32R2-NEXT:    swr $zero, 3($sp)
525 ; MIPS32R2-NEXT:    addiu $1, $sp, 0
526 ; MIPS32R2-NEXT:    addiu $1, $1, 16
527 ; MIPS32R2-NEXT:    lw $2, 60($sp)
528 ; MIPS32R2-NEXT:    ext $3, $2, 3, 4
529 ; MIPS32R2-NEXT:    subu $1, $1, $3
530 ; MIPS32R2-NEXT:    lwl $3, 4($1)
531 ; MIPS32R2-NEXT:    lwr $3, 7($1)
532 ; MIPS32R2-NEXT:    sll $4, $3, 1
533 ; MIPS32R2-NEXT:    lwl $5, 8($1)
534 ; MIPS32R2-NEXT:    lwr $5, 11($1)
535 ; MIPS32R2-NEXT:    andi $2, $2, 7
536 ; MIPS32R2-NEXT:    not $6, $2
537 ; MIPS32R2-NEXT:    andi $6, $6, 31
538 ; MIPS32R2-NEXT:    srlv $7, $5, $2
539 ; MIPS32R2-NEXT:    sllv $4, $4, $6
540 ; MIPS32R2-NEXT:    srlv $3, $3, $2
541 ; MIPS32R2-NEXT:    lwl $6, 0($1)
542 ; MIPS32R2-NEXT:    lwr $6, 3($1)
543 ; MIPS32R2-NEXT:    sll $8, $6, 1
544 ; MIPS32R2-NEXT:    xori $9, $2, 31
545 ; MIPS32R2-NEXT:    sllv $8, $8, $9
546 ; MIPS32R2-NEXT:    or $3, $3, $8
547 ; MIPS32R2-NEXT:    or $4, $7, $4
548 ; MIPS32R2-NEXT:    lwl $7, 12($1)
549 ; MIPS32R2-NEXT:    lwr $7, 15($1)
550 ; MIPS32R2-NEXT:    srlv $1, $7, $2
551 ; MIPS32R2-NEXT:    sll $5, $5, 1
552 ; MIPS32R2-NEXT:    sllv $5, $5, $9
553 ; MIPS32R2-NEXT:    or $5, $1, $5
554 ; MIPS32R2-NEXT:    srlv $2, $6, $2
555 ; MIPS32R2-NEXT:    jr $ra
556 ; MIPS32R2-NEXT:    addiu $sp, $sp, 32
558 ; MIPS32R6-LABEL: lshr_i128:
559 ; MIPS32R6:       # %bb.0: # %entry
560 ; MIPS32R6-NEXT:    addiu $sp, $sp, -32
561 ; MIPS32R6-NEXT:    .cfi_def_cfa_offset 32
562 ; MIPS32R6-NEXT:    addiu $1, $sp, 0
563 ; MIPS32R6-NEXT:    sw $7, 28($sp)
564 ; MIPS32R6-NEXT:    sw $6, 24($sp)
565 ; MIPS32R6-NEXT:    sw $5, 20($sp)
566 ; MIPS32R6-NEXT:    sw $4, 16($sp)
567 ; MIPS32R6-NEXT:    addiu $1, $1, 16
568 ; MIPS32R6-NEXT:    lw $2, 60($sp)
569 ; MIPS32R6-NEXT:    ext $3, $2, 3, 4
570 ; MIPS32R6-NEXT:    subu $1, $1, $3
571 ; MIPS32R6-NEXT:    sw $zero, 12($sp)
572 ; MIPS32R6-NEXT:    sw $zero, 8($sp)
573 ; MIPS32R6-NEXT:    sw $zero, 4($sp)
574 ; MIPS32R6-NEXT:    sw $zero, 0($sp)
575 ; MIPS32R6-NEXT:    lw $3, 4($1)
576 ; MIPS32R6-NEXT:    sll $4, $3, 1
577 ; MIPS32R6-NEXT:    lw $5, 8($1)
578 ; MIPS32R6-NEXT:    andi $2, $2, 7
579 ; MIPS32R6-NEXT:    not $6, $2
580 ; MIPS32R6-NEXT:    andi $6, $6, 31
581 ; MIPS32R6-NEXT:    srlv $7, $5, $2
582 ; MIPS32R6-NEXT:    sllv $4, $4, $6
583 ; MIPS32R6-NEXT:    srlv $3, $3, $2
584 ; MIPS32R6-NEXT:    lw $6, 0($1)
585 ; MIPS32R6-NEXT:    sll $8, $6, 1
586 ; MIPS32R6-NEXT:    xori $9, $2, 31
587 ; MIPS32R6-NEXT:    sllv $8, $8, $9
588 ; MIPS32R6-NEXT:    or $3, $3, $8
589 ; MIPS32R6-NEXT:    or $4, $7, $4
590 ; MIPS32R6-NEXT:    lw $1, 12($1)
591 ; MIPS32R6-NEXT:    srlv $1, $1, $2
592 ; MIPS32R6-NEXT:    sll $5, $5, 1
593 ; MIPS32R6-NEXT:    sllv $5, $5, $9
594 ; MIPS32R6-NEXT:    or $5, $1, $5
595 ; MIPS32R6-NEXT:    srlv $2, $6, $2
596 ; MIPS32R6-NEXT:    jr $ra
597 ; MIPS32R6-NEXT:    addiu $sp, $sp, 32
599 ; MIPS3-LABEL: lshr_i128:
600 ; MIPS3:       # %bb.0: # %entry
601 ; MIPS3-NEXT:    sll $3, $7, 0
602 ; MIPS3-NEXT:    dsrlv $6, $4, $7
603 ; MIPS3-NEXT:    andi $1, $3, 64
604 ; MIPS3-NEXT:    bnez $1, .LBB5_2
605 ; MIPS3-NEXT:    daddiu $2, $zero, 0
606 ; MIPS3-NEXT:  # %bb.1: # %entry
607 ; MIPS3-NEXT:    dsrlv $1, $5, $7
608 ; MIPS3-NEXT:    dsll $2, $4, 1
609 ; MIPS3-NEXT:    not $3, $3
610 ; MIPS3-NEXT:    dsllv $2, $2, $3
611 ; MIPS3-NEXT:    or $3, $2, $1
612 ; MIPS3-NEXT:    jr $ra
613 ; MIPS3-NEXT:    move $2, $6
614 ; MIPS3-NEXT:  .LBB5_2:
615 ; MIPS3-NEXT:    jr $ra
616 ; MIPS3-NEXT:    move $3, $6
618 ; MIPS4-LABEL: lshr_i128:
619 ; MIPS4:       # %bb.0: # %entry
620 ; MIPS4-NEXT:    dsrlv $1, $5, $7
621 ; MIPS4-NEXT:    dsll $2, $4, 1
622 ; MIPS4-NEXT:    sll $5, $7, 0
623 ; MIPS4-NEXT:    not $3, $5
624 ; MIPS4-NEXT:    dsllv $2, $2, $3
625 ; MIPS4-NEXT:    or $3, $2, $1
626 ; MIPS4-NEXT:    dsrlv $2, $4, $7
627 ; MIPS4-NEXT:    andi $1, $5, 64
628 ; MIPS4-NEXT:    movn $3, $2, $1
629 ; MIPS4-NEXT:    jr $ra
630 ; MIPS4-NEXT:    movn $2, $zero, $1
632 ; MIPS64-LABEL: lshr_i128:
633 ; MIPS64:       # %bb.0: # %entry
634 ; MIPS64-NEXT:    dsrlv $1, $5, $7
635 ; MIPS64-NEXT:    dsll $2, $4, 1
636 ; MIPS64-NEXT:    sll $5, $7, 0
637 ; MIPS64-NEXT:    not $3, $5
638 ; MIPS64-NEXT:    dsllv $2, $2, $3
639 ; MIPS64-NEXT:    or $3, $2, $1
640 ; MIPS64-NEXT:    dsrlv $2, $4, $7
641 ; MIPS64-NEXT:    andi $1, $5, 64
642 ; MIPS64-NEXT:    movn $3, $2, $1
643 ; MIPS64-NEXT:    jr $ra
644 ; MIPS64-NEXT:    movn $2, $zero, $1
646 ; MIPS64R2-LABEL: lshr_i128:
647 ; MIPS64R2:       # %bb.0: # %entry
648 ; MIPS64R2-NEXT:    dsrlv $1, $5, $7
649 ; MIPS64R2-NEXT:    dsll $2, $4, 1
650 ; MIPS64R2-NEXT:    sll $5, $7, 0
651 ; MIPS64R2-NEXT:    not $3, $5
652 ; MIPS64R2-NEXT:    dsllv $2, $2, $3
653 ; MIPS64R2-NEXT:    or $3, $2, $1
654 ; MIPS64R2-NEXT:    dsrlv $2, $4, $7
655 ; MIPS64R2-NEXT:    andi $1, $5, 64
656 ; MIPS64R2-NEXT:    movn $3, $2, $1
657 ; MIPS64R2-NEXT:    jr $ra
658 ; MIPS64R2-NEXT:    movn $2, $zero, $1
660 ; MIPS64R6-LABEL: lshr_i128:
661 ; MIPS64R6:       # %bb.0: # %entry
662 ; MIPS64R6-NEXT:    dsrlv $1, $5, $7
663 ; MIPS64R6-NEXT:    dsll $2, $4, 1
664 ; MIPS64R6-NEXT:    sll $3, $7, 0
665 ; MIPS64R6-NEXT:    not $5, $3
666 ; MIPS64R6-NEXT:    dsllv $2, $2, $5
667 ; MIPS64R6-NEXT:    or $1, $2, $1
668 ; MIPS64R6-NEXT:    andi $2, $3, 64
669 ; MIPS64R6-NEXT:    sll $2, $2, 0
670 ; MIPS64R6-NEXT:    seleqz $1, $1, $2
671 ; MIPS64R6-NEXT:    dsrlv $4, $4, $7
672 ; MIPS64R6-NEXT:    selnez $3, $4, $2
673 ; MIPS64R6-NEXT:    or $3, $3, $1
674 ; MIPS64R6-NEXT:    jr $ra
675 ; MIPS64R6-NEXT:    seleqz $2, $4, $2
677 ; MMR3-LABEL: lshr_i128:
678 ; MMR3:       # %bb.0: # %entry
679 ; MMR3-NEXT:    addiusp -40
680 ; MMR3-NEXT:    .cfi_def_cfa_offset 40
681 ; MMR3-NEXT:    swp $16, 32($sp)
682 ; MMR3-NEXT:    .cfi_offset 17, -4
683 ; MMR3-NEXT:    .cfi_offset 16, -8
684 ; MMR3-NEXT:    swl $7, 28($sp)
685 ; MMR3-NEXT:    swl $6, 24($sp)
686 ; MMR3-NEXT:    swl $5, 20($sp)
687 ; MMR3-NEXT:    li16 $2, 0
688 ; MMR3-NEXT:    swl $4, 16($sp)
689 ; MMR3-NEXT:    swl $2, 12($sp)
690 ; MMR3-NEXT:    swl $2, 8($sp)
691 ; MMR3-NEXT:    swl $2, 4($sp)
692 ; MMR3-NEXT:    swl $2, 0($sp)
693 ; MMR3-NEXT:    swr $7, 31($sp)
694 ; MMR3-NEXT:    swr $6, 27($sp)
695 ; MMR3-NEXT:    swr $5, 23($sp)
696 ; MMR3-NEXT:    swr $4, 19($sp)
697 ; MMR3-NEXT:    swr $2, 15($sp)
698 ; MMR3-NEXT:    swr $2, 11($sp)
699 ; MMR3-NEXT:    swr $2, 7($sp)
700 ; MMR3-NEXT:    swr $2, 3($sp)
701 ; MMR3-NEXT:    addiur1sp $2, 0
702 ; MMR3-NEXT:    addiur2 $2, $2, 16
703 ; MMR3-NEXT:    lw $3, 68($sp)
704 ; MMR3-NEXT:    ext $4, $3, 3, 4
705 ; MMR3-NEXT:    subu16 $2, $2, $4
706 ; MMR3-NEXT:    lwl $7, 4($2)
707 ; MMR3-NEXT:    lwr $7, 7($2)
708 ; MMR3-NEXT:    sll16 $4, $7, 1
709 ; MMR3-NEXT:    lwl $5, 8($2)
710 ; MMR3-NEXT:    lwr $5, 11($2)
711 ; MMR3-NEXT:    andi16 $6, $3, 7
712 ; MMR3-NEXT:    not16 $3, $6
713 ; MMR3-NEXT:    andi16 $3, $3, 31
714 ; MMR3-NEXT:    srlv $16, $5, $6
715 ; MMR3-NEXT:    sllv $4, $4, $3
716 ; MMR3-NEXT:    srlv $17, $7, $6
717 ; MMR3-NEXT:    lwl $7, 0($2)
718 ; MMR3-NEXT:    lwr $7, 3($2)
719 ; MMR3-NEXT:    sll16 $3, $7, 1
720 ; MMR3-NEXT:    xori $1, $6, 31
721 ; MMR3-NEXT:    sllv $3, $3, $1
722 ; MMR3-NEXT:    or16 $3, $17
723 ; MMR3-NEXT:    or16 $4, $16
724 ; MMR3-NEXT:    lwl $8, 12($2)
725 ; MMR3-NEXT:    lwr $8, 15($2)
726 ; MMR3-NEXT:    srlv $2, $8, $6
727 ; MMR3-NEXT:    sll16 $5, $5, 1
728 ; MMR3-NEXT:    sllv $5, $5, $1
729 ; MMR3-NEXT:    or16 $5, $2
730 ; MMR3-NEXT:    srlv $2, $7, $6
731 ; MMR3-NEXT:    lwp $16, 32($sp)
732 ; MMR3-NEXT:    addiusp 40
733 ; MMR3-NEXT:    jrc $ra
735 ; MMR6-LABEL: lshr_i128:
736 ; MMR6:       # %bb.0: # %entry
737 ; MMR6-NEXT:    addiu $sp, $sp, -40
738 ; MMR6-NEXT:    .cfi_def_cfa_offset 40
739 ; MMR6-NEXT:    sw $16, 36($sp) # 4-byte Folded Spill
740 ; MMR6-NEXT:    .cfi_offset 16, -4
741 ; MMR6-NEXT:    li16 $2, 0
742 ; MMR6-NEXT:    sw $7, 32($sp)
743 ; MMR6-NEXT:    sw $6, 28($sp)
744 ; MMR6-NEXT:    sw $5, 24($sp)
745 ; MMR6-NEXT:    sw $4, 20($sp)
746 ; MMR6-NEXT:    sw $2, 16($sp)
747 ; MMR6-NEXT:    sw $2, 12($sp)
748 ; MMR6-NEXT:    sw $2, 8($sp)
749 ; MMR6-NEXT:    sw $2, 4($sp)
750 ; MMR6-NEXT:    addiu $2, $sp, 4
751 ; MMR6-NEXT:    addiur2 $2, $2, 16
752 ; MMR6-NEXT:    lw $3, 68($sp)
753 ; MMR6-NEXT:    ext $4, $3, 3, 4
754 ; MMR6-NEXT:    subu16 $5, $2, $4
755 ; MMR6-NEXT:    lw16 $4, 4($5)
756 ; MMR6-NEXT:    sll16 $6, $4, 1
757 ; MMR6-NEXT:    lw16 $7, 8($5)
758 ; MMR6-NEXT:    andi16 $2, $3, 7
759 ; MMR6-NEXT:    not16 $3, $2
760 ; MMR6-NEXT:    andi16 $3, $3, 31
761 ; MMR6-NEXT:    srlv $1, $7, $2
762 ; MMR6-NEXT:    sllv $6, $6, $3
763 ; MMR6-NEXT:    srlv $3, $4, $2
764 ; MMR6-NEXT:    lw16 $16, 0($5)
765 ; MMR6-NEXT:    sll16 $4, $16, 1
766 ; MMR6-NEXT:    xori $8, $2, 31
767 ; MMR6-NEXT:    sllv $4, $4, $8
768 ; MMR6-NEXT:    or $3, $3, $4
769 ; MMR6-NEXT:    or $4, $1, $6
770 ; MMR6-NEXT:    lw16 $5, 12($5)
771 ; MMR6-NEXT:    srlv $1, $5, $2
772 ; MMR6-NEXT:    sll16 $5, $7, 1
773 ; MMR6-NEXT:    sllv $5, $5, $8
774 ; MMR6-NEXT:    or $5, $1, $5
775 ; MMR6-NEXT:    srlv $2, $16, $2
776 ; MMR6-NEXT:    lw $16, 36($sp) # 4-byte Folded Reload
777 ; MMR6-NEXT:    addiu $sp, $sp, 40
778 ; MMR6-NEXT:    jrc $ra
779 entry:
781 ; o32 shouldn't use TImode helpers.
782 ; GP32-NOT:       lw        $25, %call16(__lshrti3)($gp)
783 ; MM-NOT:         lw        $25, %call16(__lshrti3)($2)
785   %r = lshr i128 %a, %b
786   ret i128 %r