blob: ef0502c85d59bb017262fece51229fe6278548da [file] [log] [blame]
Simon Atanasyan1ea206b2018-10-01 14:43:07 +00001; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=mips -mcpu=mips2 -relocation-model=pic \
3; RUN: | FileCheck %s -check-prefixes=GP32,GP32R0R2
4; RUN: llc < %s -mtriple=mips -mcpu=mips32 -relocation-model=pic \
5; RUN: | FileCheck %s -check-prefixes=GP32,GP32R0R2
6; RUN: llc < %s -mtriple=mips -mcpu=mips32r2 -relocation-model=pic \
7; RUN: | FileCheck %s -check-prefixes=GP32,GP32R2R5
8; RUN: llc < %s -mtriple=mips -mcpu=mips32r3 -relocation-model=pic \
9; RUN: | FileCheck %s -check-prefixes=GP32,GP32R2R5
10; RUN: llc < %s -mtriple=mips -mcpu=mips32r5 -relocation-model=pic \
11; RUN: | FileCheck %s -check-prefixes=GP32,GP32R2R5
12; RUN: llc < %s -mtriple=mips -mcpu=mips32r6 -relocation-model=pic \
13; RUN: | FileCheck %s -check-prefix=GP32R6
Vasileios Kalintirisd10ce392016-04-14 09:13:13 +000014
Simon Atanasyan1ea206b2018-10-01 14:43:07 +000015; RUN: llc < %s -mtriple=mips64 -mcpu=mips3 -relocation-model=pic \
16; RUN: | FileCheck %s -check-prefixes=GP64,GP64R0R1
17; RUN: llc < %s -mtriple=mips64 -mcpu=mips4 -relocation-model=pic \
18; RUN: | FileCheck %s -check-prefixes=GP64,GP64R0R1
19; RUN: llc < %s -mtriple=mips64 -mcpu=mips64 -relocation-model=pic \
20; RUN: | FileCheck %s -check-prefixes=GP64,GP64R0R1
21; RUN: llc < %s -mtriple=mips64 -mcpu=mips64r2 -relocation-model=pic \
22; RUN: | FileCheck %s -check-prefixes=GP64,GP64R2R5
23; RUN: llc < %s -mtriple=mips64 -mcpu=mips64r3 -relocation-model=pic \
24; RUN: | FileCheck %s -check-prefixes=GP64,GP64R2R5
25; RUN: llc < %s -mtriple=mips64 -mcpu=mips64r5 -relocation-model=pic \
26; RUN: | FileCheck %s -check-prefixes=GP64,GP64R2R5
27; RUN: llc < %s -mtriple=mips64 -mcpu=mips64r6 -relocation-model=pic \
28; RUN: | FileCheck %s -check-prefix=GP64R6
Vasileios Kalintirisd10ce392016-04-14 09:13:13 +000029
Simon Atanasyan1ea206b2018-10-01 14:43:07 +000030; RUN: llc < %s -mtriple=mips -mcpu=mips32r3 -mattr=+micromips -relocation-model=pic \
31; RUN: | FileCheck %s -check-prefix=MMR3
32; RUN: llc < %s -mtriple=mips -mcpu=mips32r6 -mattr=+micromips -relocation-model=pic \
33; RUN: | FileCheck %s -check-prefix=MMR6
Vasileios Kalintiris2ed214f2015-01-26 12:04:40 +000034
35define signext i1 @srem_i1(i1 signext %a, i1 signext %b) {
Simon Atanasyan1ea206b2018-10-01 14:43:07 +000036; GP32-LABEL: srem_i1:
37; GP32: # %bb.0: # %entry
Simon Atanasyan1ea206b2018-10-01 14:43:07 +000038; GP32-NEXT: jr $ra
David Bolvanskydfdbb032018-10-30 09:07:22 +000039; GP32-NEXT: addiu $2, $zero, 0
Simon Atanasyan1ea206b2018-10-01 14:43:07 +000040;
41; GP32R6-LABEL: srem_i1:
42; GP32R6: # %bb.0: # %entry
Simon Atanasyan1ea206b2018-10-01 14:43:07 +000043; GP32R6-NEXT: jr $ra
David Bolvanskydfdbb032018-10-30 09:07:22 +000044; GP32R6-NEXT: addiu $2, $zero, 0
Simon Atanasyan1ea206b2018-10-01 14:43:07 +000045;
46; GP64-LABEL: srem_i1:
47; GP64: # %bb.0: # %entry
Simon Atanasyan1ea206b2018-10-01 14:43:07 +000048; GP64-NEXT: jr $ra
David Bolvanskydfdbb032018-10-30 09:07:22 +000049; GP64-NEXT: addiu $2, $zero, 0
Simon Atanasyan1ea206b2018-10-01 14:43:07 +000050;
51; GP64R6-LABEL: srem_i1:
52; GP64R6: # %bb.0: # %entry
Simon Atanasyan1ea206b2018-10-01 14:43:07 +000053; GP64R6-NEXT: jr $ra
David Bolvanskydfdbb032018-10-30 09:07:22 +000054; GP64R6-NEXT: addiu $2, $zero, 0
Simon Atanasyan1ea206b2018-10-01 14:43:07 +000055;
56; MMR3-LABEL: srem_i1:
57; MMR3: # %bb.0: # %entry
David Bolvanskydfdbb032018-10-30 09:07:22 +000058; MMR3-NEXT: li16 $2, 0
Simon Atanasyan1ea206b2018-10-01 14:43:07 +000059; MMR3-NEXT: jrc $ra
60;
61; MMR6-LABEL: srem_i1:
62; MMR6: # %bb.0: # %entry
David Bolvanskydfdbb032018-10-30 09:07:22 +000063; MMR6-NEXT: li16 $2, 0
Simon Atanasyan1ea206b2018-10-01 14:43:07 +000064; MMR6-NEXT: jrc $ra
Vasileios Kalintiris2ed214f2015-01-26 12:04:40 +000065entry:
Vasileios Kalintiris2ed214f2015-01-26 12:04:40 +000066 %r = srem i1 %a, %b
67 ret i1 %r
68}
69
70define signext i8 @srem_i8(i8 signext %a, i8 signext %b) {
Simon Atanasyan1ea206b2018-10-01 14:43:07 +000071; GP32R0R2-LABEL: srem_i8:
72; GP32R0R2: # %bb.0: # %entry
73; GP32R0R2-NEXT: div $zero, $4, $5
74; GP32R0R2-NEXT: teq $5, $zero, 7
75; GP32R0R2-NEXT: mfhi $1
76; GP32R0R2-NEXT: sll $1, $1, 24
77; GP32R0R2-NEXT: jr $ra
78; GP32R0R2-NEXT: sra $2, $1, 24
79;
80; GP32R2R5-LABEL: srem_i8:
81; GP32R2R5: # %bb.0: # %entry
82; GP32R2R5-NEXT: div $zero, $4, $5
83; GP32R2R5-NEXT: teq $5, $zero, 7
84; GP32R2R5-NEXT: mfhi $1
85; GP32R2R5-NEXT: jr $ra
86; GP32R2R5-NEXT: seb $2, $1
87;
88; GP32R6-LABEL: srem_i8:
89; GP32R6: # %bb.0: # %entry
90; GP32R6-NEXT: mod $1, $4, $5
91; GP32R6-NEXT: teq $5, $zero, 7
92; GP32R6-NEXT: jr $ra
93; GP32R6-NEXT: seb $2, $1
94;
95; GP64R0R1-LABEL: srem_i8:
96; GP64R0R1: # %bb.0: # %entry
97; GP64R0R1-NEXT: div $zero, $4, $5
98; GP64R0R1-NEXT: teq $5, $zero, 7
99; GP64R0R1-NEXT: mfhi $1
100; GP64R0R1-NEXT: sll $1, $1, 24
101; GP64R0R1-NEXT: jr $ra
102; GP64R0R1-NEXT: sra $2, $1, 24
103;
104; GP64R2R5-LABEL: srem_i8:
105; GP64R2R5: # %bb.0: # %entry
106; GP64R2R5-NEXT: div $zero, $4, $5
107; GP64R2R5-NEXT: teq $5, $zero, 7
108; GP64R2R5-NEXT: mfhi $1
109; GP64R2R5-NEXT: jr $ra
110; GP64R2R5-NEXT: seb $2, $1
111;
112; GP64R6-LABEL: srem_i8:
113; GP64R6: # %bb.0: # %entry
114; GP64R6-NEXT: mod $1, $4, $5
115; GP64R6-NEXT: teq $5, $zero, 7
116; GP64R6-NEXT: jr $ra
117; GP64R6-NEXT: seb $2, $1
118;
119; MMR3-LABEL: srem_i8:
120; MMR3: # %bb.0: # %entry
121; MMR3-NEXT: div $zero, $4, $5
122; MMR3-NEXT: teq $5, $zero, 7
123; MMR3-NEXT: mfhi16 $1
124; MMR3-NEXT: jr $ra
125; MMR3-NEXT: seb $2, $1
126;
127; MMR6-LABEL: srem_i8:
128; MMR6: # %bb.0: # %entry
129; MMR6-NEXT: mod $1, $4, $5
130; MMR6-NEXT: teq $5, $zero, 7
131; MMR6-NEXT: seb $2, $1
132; MMR6-NEXT: jrc $ra
Vasileios Kalintiris2ed214f2015-01-26 12:04:40 +0000133entry:
Vasileios Kalintiris2ed214f2015-01-26 12:04:40 +0000134 %r = srem i8 %a, %b
135 ret i8 %r
136}
137
138define signext i16 @srem_i16(i16 signext %a, i16 signext %b) {
Simon Atanasyan1ea206b2018-10-01 14:43:07 +0000139; GP32R0R2-LABEL: srem_i16:
140; GP32R0R2: # %bb.0: # %entry
141; GP32R0R2-NEXT: div $zero, $4, $5
142; GP32R0R2-NEXT: teq $5, $zero, 7
143; GP32R0R2-NEXT: mfhi $1
144; GP32R0R2-NEXT: sll $1, $1, 16
145; GP32R0R2-NEXT: jr $ra
146; GP32R0R2-NEXT: sra $2, $1, 16
147;
148; GP32R2R5-LABEL: srem_i16:
149; GP32R2R5: # %bb.0: # %entry
150; GP32R2R5-NEXT: div $zero, $4, $5
151; GP32R2R5-NEXT: teq $5, $zero, 7
152; GP32R2R5-NEXT: mfhi $1
153; GP32R2R5-NEXT: jr $ra
154; GP32R2R5-NEXT: seh $2, $1
155;
156; GP32R6-LABEL: srem_i16:
157; GP32R6: # %bb.0: # %entry
158; GP32R6-NEXT: mod $1, $4, $5
159; GP32R6-NEXT: teq $5, $zero, 7
160; GP32R6-NEXT: jr $ra
161; GP32R6-NEXT: seh $2, $1
162;
163; GP64R0R1-LABEL: srem_i16:
164; GP64R0R1: # %bb.0: # %entry
165; GP64R0R1-NEXT: div $zero, $4, $5
166; GP64R0R1-NEXT: teq $5, $zero, 7
167; GP64R0R1-NEXT: mfhi $1
168; GP64R0R1-NEXT: sll $1, $1, 16
169; GP64R0R1-NEXT: jr $ra
170; GP64R0R1-NEXT: sra $2, $1, 16
171;
172; GP64R2R5-LABEL: srem_i16:
173; GP64R2R5: # %bb.0: # %entry
174; GP64R2R5-NEXT: div $zero, $4, $5
175; GP64R2R5-NEXT: teq $5, $zero, 7
176; GP64R2R5-NEXT: mfhi $1
177; GP64R2R5-NEXT: jr $ra
178; GP64R2R5-NEXT: seh $2, $1
179;
180; GP64R6-LABEL: srem_i16:
181; GP64R6: # %bb.0: # %entry
182; GP64R6-NEXT: mod $1, $4, $5
183; GP64R6-NEXT: teq $5, $zero, 7
184; GP64R6-NEXT: jr $ra
185; GP64R6-NEXT: seh $2, $1
186;
187; MMR3-LABEL: srem_i16:
188; MMR3: # %bb.0: # %entry
189; MMR3-NEXT: div $zero, $4, $5
190; MMR3-NEXT: teq $5, $zero, 7
191; MMR3-NEXT: mfhi16 $1
192; MMR3-NEXT: jr $ra
193; MMR3-NEXT: seh $2, $1
194;
195; MMR6-LABEL: srem_i16:
196; MMR6: # %bb.0: # %entry
197; MMR6-NEXT: mod $1, $4, $5
198; MMR6-NEXT: teq $5, $zero, 7
199; MMR6-NEXT: seh $2, $1
200; MMR6-NEXT: jrc $ra
Vasileios Kalintiris2ed214f2015-01-26 12:04:40 +0000201entry:
Vasileios Kalintiris2ed214f2015-01-26 12:04:40 +0000202 %r = srem i16 %a, %b
203 ret i16 %r
204}
205
206define signext i32 @srem_i32(i32 signext %a, i32 signext %b) {
Simon Atanasyan1ea206b2018-10-01 14:43:07 +0000207; GP32-LABEL: srem_i32:
208; GP32: # %bb.0: # %entry
209; GP32-NEXT: div $zero, $4, $5
210; GP32-NEXT: teq $5, $zero, 7
211; GP32-NEXT: jr $ra
212; GP32-NEXT: mfhi $2
213;
214; GP32R6-LABEL: srem_i32:
215; GP32R6: # %bb.0: # %entry
216; GP32R6-NEXT: mod $2, $4, $5
217; GP32R6-NEXT: teq $5, $zero, 7
218; GP32R6-NEXT: jrc $ra
219;
220; GP64-LABEL: srem_i32:
221; GP64: # %bb.0: # %entry
222; GP64-NEXT: div $zero, $4, $5
223; GP64-NEXT: teq $5, $zero, 7
224; GP64-NEXT: jr $ra
225; GP64-NEXT: mfhi $2
226;
227; GP64R6-LABEL: srem_i32:
228; GP64R6: # %bb.0: # %entry
229; GP64R6-NEXT: mod $2, $4, $5
230; GP64R6-NEXT: teq $5, $zero, 7
231; GP64R6-NEXT: jrc $ra
232;
233; MMR3-LABEL: srem_i32:
234; MMR3: # %bb.0: # %entry
235; MMR3-NEXT: div $zero, $4, $5
236; MMR3-NEXT: teq $5, $zero, 7
237; MMR3-NEXT: mfhi16 $2
238; MMR3-NEXT: jrc $ra
239;
240; MMR6-LABEL: srem_i32:
241; MMR6: # %bb.0: # %entry
242; MMR6-NEXT: mod $2, $4, $5
243; MMR6-NEXT: teq $5, $zero, 7
244; MMR6-NEXT: jrc $ra
Vasileios Kalintiris2ed214f2015-01-26 12:04:40 +0000245entry:
Vasileios Kalintiris2ed214f2015-01-26 12:04:40 +0000246 %r = srem i32 %a, %b
247 ret i32 %r
248}
249
250define signext i64 @srem_i64(i64 signext %a, i64 signext %b) {
Simon Atanasyan1ea206b2018-10-01 14:43:07 +0000251; GP32-LABEL: srem_i64:
252; GP32: # %bb.0: # %entry
253; GP32-NEXT: lui $2, %hi(_gp_disp)
254; GP32-NEXT: addiu $2, $2, %lo(_gp_disp)
255; GP32-NEXT: addiu $sp, $sp, -24
256; GP32-NEXT: .cfi_def_cfa_offset 24
257; GP32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill
258; GP32-NEXT: .cfi_offset 31, -4
259; GP32-NEXT: addu $gp, $2, $25
260; GP32-NEXT: lw $25, %call16(__moddi3)($gp)
261; GP32-NEXT: jalr $25
262; GP32-NEXT: nop
263; GP32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload
264; GP32-NEXT: jr $ra
265; GP32-NEXT: addiu $sp, $sp, 24
266;
267; GP32R6-LABEL: srem_i64:
268; GP32R6: # %bb.0: # %entry
269; GP32R6-NEXT: lui $2, %hi(_gp_disp)
270; GP32R6-NEXT: addiu $2, $2, %lo(_gp_disp)
271; GP32R6-NEXT: addiu $sp, $sp, -24
272; GP32R6-NEXT: .cfi_def_cfa_offset 24
273; GP32R6-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill
274; GP32R6-NEXT: .cfi_offset 31, -4
275; GP32R6-NEXT: addu $gp, $2, $25
276; GP32R6-NEXT: lw $25, %call16(__moddi3)($gp)
277; GP32R6-NEXT: jalrc $25
278; GP32R6-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload
279; GP32R6-NEXT: jr $ra
280; GP32R6-NEXT: addiu $sp, $sp, 24
281;
282; GP64-LABEL: srem_i64:
283; GP64: # %bb.0: # %entry
284; GP64-NEXT: ddiv $zero, $4, $5
285; GP64-NEXT: teq $5, $zero, 7
286; GP64-NEXT: jr $ra
287; GP64-NEXT: mfhi $2
288;
289; GP64R6-LABEL: srem_i64:
290; GP64R6: # %bb.0: # %entry
291; GP64R6-NEXT: dmod $2, $4, $5
292; GP64R6-NEXT: teq $5, $zero, 7
293; GP64R6-NEXT: jrc $ra
294;
295; MMR3-LABEL: srem_i64:
296; MMR3: # %bb.0: # %entry
297; MMR3-NEXT: lui $2, %hi(_gp_disp)
298; MMR3-NEXT: addiu $2, $2, %lo(_gp_disp)
299; MMR3-NEXT: addiusp -24
300; MMR3-NEXT: .cfi_def_cfa_offset 24
301; MMR3-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill
302; MMR3-NEXT: .cfi_offset 31, -4
303; MMR3-NEXT: addu $2, $2, $25
304; MMR3-NEXT: lw $25, %call16(__moddi3)($2)
305; MMR3-NEXT: move $gp, $2
306; MMR3-NEXT: jalr $25
307; MMR3-NEXT: nop
308; MMR3-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload
309; MMR3-NEXT: addiusp 24
310; MMR3-NEXT: jrc $ra
311;
312; MMR6-LABEL: srem_i64:
313; MMR6: # %bb.0: # %entry
314; MMR6-NEXT: lui $2, %hi(_gp_disp)
315; MMR6-NEXT: addiu $2, $2, %lo(_gp_disp)
316; MMR6-NEXT: addiu $sp, $sp, -24
317; MMR6-NEXT: .cfi_def_cfa_offset 24
318; MMR6-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill
319; MMR6-NEXT: .cfi_offset 31, -4
320; MMR6-NEXT: addu $2, $2, $25
321; MMR6-NEXT: lw $25, %call16(__moddi3)($2)
322; MMR6-NEXT: move $gp, $2
323; MMR6-NEXT: jalr $25
324; MMR6-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload
325; MMR6-NEXT: addiu $sp, $sp, 24
326; MMR6-NEXT: jrc $ra
Vasileios Kalintiris2ed214f2015-01-26 12:04:40 +0000327entry:
Vasileios Kalintiris2ed214f2015-01-26 12:04:40 +0000328 %r = srem i64 %a, %b
329 ret i64 %r
330}
Vasileios Kalintirisef96a8e2015-01-26 12:33:22 +0000331
332define signext i128 @srem_i128(i128 signext %a, i128 signext %b) {
Simon Atanasyan1ea206b2018-10-01 14:43:07 +0000333; GP32-LABEL: srem_i128:
334; GP32: # %bb.0: # %entry
335; GP32-NEXT: lui $2, %hi(_gp_disp)
336; GP32-NEXT: addiu $2, $2, %lo(_gp_disp)
337; GP32-NEXT: addiu $sp, $sp, -40
338; GP32-NEXT: .cfi_def_cfa_offset 40
339; GP32-NEXT: sw $ra, 36($sp) # 4-byte Folded Spill
340; GP32-NEXT: .cfi_offset 31, -4
341; GP32-NEXT: addu $gp, $2, $25
342; GP32-NEXT: lw $1, 60($sp)
343; GP32-NEXT: lw $2, 64($sp)
344; GP32-NEXT: lw $3, 68($sp)
345; GP32-NEXT: sw $3, 28($sp)
346; GP32-NEXT: sw $2, 24($sp)
347; GP32-NEXT: sw $1, 20($sp)
348; GP32-NEXT: lw $1, 56($sp)
349; GP32-NEXT: sw $1, 16($sp)
350; GP32-NEXT: lw $25, %call16(__modti3)($gp)
351; GP32-NEXT: jalr $25
352; GP32-NEXT: nop
353; GP32-NEXT: lw $ra, 36($sp) # 4-byte Folded Reload
354; GP32-NEXT: jr $ra
355; GP32-NEXT: addiu $sp, $sp, 40
356;
357; GP32R6-LABEL: srem_i128:
358; GP32R6: # %bb.0: # %entry
359; GP32R6-NEXT: lui $2, %hi(_gp_disp)
360; GP32R6-NEXT: addiu $2, $2, %lo(_gp_disp)
361; GP32R6-NEXT: addiu $sp, $sp, -40
362; GP32R6-NEXT: .cfi_def_cfa_offset 40
363; GP32R6-NEXT: sw $ra, 36($sp) # 4-byte Folded Spill
364; GP32R6-NEXT: .cfi_offset 31, -4
365; GP32R6-NEXT: addu $gp, $2, $25
366; GP32R6-NEXT: lw $1, 60($sp)
367; GP32R6-NEXT: lw $2, 64($sp)
368; GP32R6-NEXT: lw $3, 68($sp)
369; GP32R6-NEXT: sw $3, 28($sp)
370; GP32R6-NEXT: sw $2, 24($sp)
371; GP32R6-NEXT: sw $1, 20($sp)
372; GP32R6-NEXT: lw $1, 56($sp)
373; GP32R6-NEXT: sw $1, 16($sp)
374; GP32R6-NEXT: lw $25, %call16(__modti3)($gp)
375; GP32R6-NEXT: jalrc $25
376; GP32R6-NEXT: lw $ra, 36($sp) # 4-byte Folded Reload
377; GP32R6-NEXT: jr $ra
378; GP32R6-NEXT: addiu $sp, $sp, 40
379;
380; GP64-LABEL: srem_i128:
381; GP64: # %bb.0: # %entry
382; GP64-NEXT: daddiu $sp, $sp, -16
383; GP64-NEXT: .cfi_def_cfa_offset 16
384; GP64-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
385; GP64-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill
386; GP64-NEXT: .cfi_offset 31, -8
387; GP64-NEXT: .cfi_offset 28, -16
388; GP64-NEXT: lui $1, %hi(%neg(%gp_rel(srem_i128)))
389; GP64-NEXT: daddu $1, $1, $25
390; GP64-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(srem_i128)))
391; GP64-NEXT: ld $25, %call16(__modti3)($gp)
392; GP64-NEXT: jalr $25
393; GP64-NEXT: nop
394; GP64-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload
395; GP64-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
396; GP64-NEXT: jr $ra
397; GP64-NEXT: daddiu $sp, $sp, 16
398;
399; GP64R6-LABEL: srem_i128:
400; GP64R6: # %bb.0: # %entry
401; GP64R6-NEXT: daddiu $sp, $sp, -16
402; GP64R6-NEXT: .cfi_def_cfa_offset 16
403; GP64R6-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
404; GP64R6-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill
405; GP64R6-NEXT: .cfi_offset 31, -8
406; GP64R6-NEXT: .cfi_offset 28, -16
407; GP64R6-NEXT: lui $1, %hi(%neg(%gp_rel(srem_i128)))
408; GP64R6-NEXT: daddu $1, $1, $25
409; GP64R6-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(srem_i128)))
410; GP64R6-NEXT: ld $25, %call16(__modti3)($gp)
411; GP64R6-NEXT: jalrc $25
412; GP64R6-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload
413; GP64R6-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
414; GP64R6-NEXT: jr $ra
415; GP64R6-NEXT: daddiu $sp, $sp, 16
416;
417; MMR3-LABEL: srem_i128:
418; MMR3: # %bb.0: # %entry
419; MMR3-NEXT: lui $2, %hi(_gp_disp)
420; MMR3-NEXT: addiu $2, $2, %lo(_gp_disp)
421; MMR3-NEXT: addiusp -48
422; MMR3-NEXT: .cfi_def_cfa_offset 48
423; MMR3-NEXT: sw $ra, 44($sp) # 4-byte Folded Spill
424; MMR3-NEXT: swp $16, 36($sp)
425; MMR3-NEXT: .cfi_offset 31, -4
426; MMR3-NEXT: .cfi_offset 17, -8
427; MMR3-NEXT: .cfi_offset 16, -12
428; MMR3-NEXT: addu $16, $2, $25
429; MMR3-NEXT: move $1, $7
430; MMR3-NEXT: lw $7, 68($sp)
431; MMR3-NEXT: lw $17, 72($sp)
432; MMR3-NEXT: lw $3, 76($sp)
433; MMR3-NEXT: move $2, $sp
434; MMR3-NEXT: sw16 $3, 28($2)
435; MMR3-NEXT: sw16 $17, 24($2)
436; MMR3-NEXT: sw16 $7, 20($2)
437; MMR3-NEXT: lw $3, 64($sp)
438; MMR3-NEXT: sw16 $3, 16($2)
439; MMR3-NEXT: lw $25, %call16(__modti3)($16)
440; MMR3-NEXT: move $7, $1
441; MMR3-NEXT: move $gp, $16
442; MMR3-NEXT: jalr $25
443; MMR3-NEXT: nop
444; MMR3-NEXT: lwp $16, 36($sp)
445; MMR3-NEXT: lw $ra, 44($sp) # 4-byte Folded Reload
446; MMR3-NEXT: addiusp 48
447; MMR3-NEXT: jrc $ra
448;
449; MMR6-LABEL: srem_i128:
450; MMR6: # %bb.0: # %entry
451; MMR6-NEXT: lui $2, %hi(_gp_disp)
452; MMR6-NEXT: addiu $2, $2, %lo(_gp_disp)
453; MMR6-NEXT: addiu $sp, $sp, -48
454; MMR6-NEXT: .cfi_def_cfa_offset 48
455; MMR6-NEXT: sw $ra, 44($sp) # 4-byte Folded Spill
456; MMR6-NEXT: sw $17, 40($sp) # 4-byte Folded Spill
457; MMR6-NEXT: sw $16, 36($sp) # 4-byte Folded Spill
458; MMR6-NEXT: .cfi_offset 31, -4
459; MMR6-NEXT: .cfi_offset 17, -8
460; MMR6-NEXT: .cfi_offset 16, -12
461; MMR6-NEXT: addu $16, $2, $25
462; MMR6-NEXT: move $1, $7
463; MMR6-NEXT: lw $7, 68($sp)
464; MMR6-NEXT: lw $17, 72($sp)
465; MMR6-NEXT: lw $3, 76($sp)
466; MMR6-NEXT: move $2, $sp
467; MMR6-NEXT: sw16 $3, 28($2)
468; MMR6-NEXT: sw16 $17, 24($2)
469; MMR6-NEXT: sw16 $7, 20($2)
470; MMR6-NEXT: lw $3, 64($sp)
471; MMR6-NEXT: sw16 $3, 16($2)
472; MMR6-NEXT: lw $25, %call16(__modti3)($16)
473; MMR6-NEXT: move $7, $1
474; MMR6-NEXT: move $gp, $16
475; MMR6-NEXT: jalr $25
476; MMR6-NEXT: lw $16, 36($sp) # 4-byte Folded Reload
477; MMR6-NEXT: lw $17, 40($sp) # 4-byte Folded Reload
478; MMR6-NEXT: lw $ra, 44($sp) # 4-byte Folded Reload
479; MMR6-NEXT: addiu $sp, $sp, 48
480; MMR6-NEXT: jrc $ra
Vasileios Kalintirisef96a8e2015-01-26 12:33:22 +0000481entry:
Vasileios Kalintirisd10ce392016-04-14 09:13:13 +0000482 %r = srem i128 %a, %b
Zlatko Buljan58d6a952016-04-13 08:02:26 +0000483 ret i128 %r
484}