xref: /llvm-project/llvm/test/CodeGen/Mips/fmuladd-soft-float.ll (revision 5785cbb40570c3847aa994b2d2b7e03321eee7eb)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2; RUN: llc -mtriple=mips < %s | FileCheck %s -check-prefix=SOFT-FLOAT-32
3; RUN: llc -mtriple=mips -mcpu mips32r2 < %s | FileCheck %s -check-prefix=SOFT-FLOAT-32R2
4; RUN: llc -mtriple=mips64 < %s | FileCheck %s -check-prefix=SOFT-FLOAT-64
5; RUN: llc -mtriple=mips64 -mcpu mips64r2 < %s | FileCheck %s -check-prefix=SOFT-FLOAT-64R2
6
7define float @fmuladd_intrinsic_f32(float %a, float %b, float %c) #0 {
8; SOFT-FLOAT-32-LABEL: fmuladd_intrinsic_f32:
9; SOFT-FLOAT-32:       # %bb.0:
10; SOFT-FLOAT-32-NEXT:    addiu $sp, $sp, -24
11; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 24
12; SOFT-FLOAT-32-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
13; SOFT-FLOAT-32-NEXT:    sw $16, 16($sp) # 4-byte Folded Spill
14; SOFT-FLOAT-32-NEXT:    .cfi_offset 31, -4
15; SOFT-FLOAT-32-NEXT:    .cfi_offset 16, -8
16; SOFT-FLOAT-32-NEXT:    jal __mulsf3
17; SOFT-FLOAT-32-NEXT:    move $16, $6
18; SOFT-FLOAT-32-NEXT:    move $4, $2
19; SOFT-FLOAT-32-NEXT:    jal __addsf3
20; SOFT-FLOAT-32-NEXT:    move $5, $16
21; SOFT-FLOAT-32-NEXT:    lw $16, 16($sp) # 4-byte Folded Reload
22; SOFT-FLOAT-32-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
23; SOFT-FLOAT-32-NEXT:    jr $ra
24; SOFT-FLOAT-32-NEXT:    addiu $sp, $sp, 24
25;
26; SOFT-FLOAT-32R2-LABEL: fmuladd_intrinsic_f32:
27; SOFT-FLOAT-32R2:       # %bb.0:
28; SOFT-FLOAT-32R2-NEXT:    addiu $sp, $sp, -24
29; SOFT-FLOAT-32R2-NEXT:    .cfi_def_cfa_offset 24
30; SOFT-FLOAT-32R2-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
31; SOFT-FLOAT-32R2-NEXT:    sw $16, 16($sp) # 4-byte Folded Spill
32; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 31, -4
33; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 16, -8
34; SOFT-FLOAT-32R2-NEXT:    jal __mulsf3
35; SOFT-FLOAT-32R2-NEXT:    move $16, $6
36; SOFT-FLOAT-32R2-NEXT:    move $4, $2
37; SOFT-FLOAT-32R2-NEXT:    jal __addsf3
38; SOFT-FLOAT-32R2-NEXT:    move $5, $16
39; SOFT-FLOAT-32R2-NEXT:    lw $16, 16($sp) # 4-byte Folded Reload
40; SOFT-FLOAT-32R2-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
41; SOFT-FLOAT-32R2-NEXT:    jr $ra
42; SOFT-FLOAT-32R2-NEXT:    addiu $sp, $sp, 24
43;
44; SOFT-FLOAT-64-LABEL: fmuladd_intrinsic_f32:
45; SOFT-FLOAT-64:       # %bb.0:
46; SOFT-FLOAT-64-NEXT:    daddiu $sp, $sp, -16
47; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 16
48; SOFT-FLOAT-64-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
49; SOFT-FLOAT-64-NEXT:    sd $16, 0($sp) # 8-byte Folded Spill
50; SOFT-FLOAT-64-NEXT:    .cfi_offset 31, -8
51; SOFT-FLOAT-64-NEXT:    .cfi_offset 16, -16
52; SOFT-FLOAT-64-NEXT:    move $16, $6
53; SOFT-FLOAT-64-NEXT:    sll $4, $4, 0
54; SOFT-FLOAT-64-NEXT:    jal __mulsf3
55; SOFT-FLOAT-64-NEXT:    sll $5, $5, 0
56; SOFT-FLOAT-64-NEXT:    sll $4, $2, 0
57; SOFT-FLOAT-64-NEXT:    jal __addsf3
58; SOFT-FLOAT-64-NEXT:    sll $5, $16, 0
59; SOFT-FLOAT-64-NEXT:    ld $16, 0($sp) # 8-byte Folded Reload
60; SOFT-FLOAT-64-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
61; SOFT-FLOAT-64-NEXT:    jr $ra
62; SOFT-FLOAT-64-NEXT:    daddiu $sp, $sp, 16
63;
64; SOFT-FLOAT-64R2-LABEL: fmuladd_intrinsic_f32:
65; SOFT-FLOAT-64R2:       # %bb.0:
66; SOFT-FLOAT-64R2-NEXT:    daddiu $sp, $sp, -16
67; SOFT-FLOAT-64R2-NEXT:    .cfi_def_cfa_offset 16
68; SOFT-FLOAT-64R2-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
69; SOFT-FLOAT-64R2-NEXT:    sd $16, 0($sp) # 8-byte Folded Spill
70; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 31, -8
71; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 16, -16
72; SOFT-FLOAT-64R2-NEXT:    move $16, $6
73; SOFT-FLOAT-64R2-NEXT:    sll $4, $4, 0
74; SOFT-FLOAT-64R2-NEXT:    jal __mulsf3
75; SOFT-FLOAT-64R2-NEXT:    sll $5, $5, 0
76; SOFT-FLOAT-64R2-NEXT:    sll $4, $2, 0
77; SOFT-FLOAT-64R2-NEXT:    jal __addsf3
78; SOFT-FLOAT-64R2-NEXT:    sll $5, $16, 0
79; SOFT-FLOAT-64R2-NEXT:    ld $16, 0($sp) # 8-byte Folded Reload
80; SOFT-FLOAT-64R2-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
81; SOFT-FLOAT-64R2-NEXT:    jr $ra
82; SOFT-FLOAT-64R2-NEXT:    daddiu $sp, $sp, 16
83  %result = call float @llvm.fmuladd.f32(float %a, float %b, float %c)
84  ret float %result
85}
86
87define double @fmuladd_intrinsic_f64(double %a, double %b, double %c) #0 {
88; SOFT-FLOAT-32-LABEL: fmuladd_intrinsic_f64:
89; SOFT-FLOAT-32:       # %bb.0:
90; SOFT-FLOAT-32-NEXT:    addiu $sp, $sp, -24
91; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 24
92; SOFT-FLOAT-32-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
93; SOFT-FLOAT-32-NEXT:    .cfi_offset 31, -4
94; SOFT-FLOAT-32-NEXT:    jal __muldf3
95; SOFT-FLOAT-32-NEXT:    nop
96; SOFT-FLOAT-32-NEXT:    move $4, $2
97; SOFT-FLOAT-32-NEXT:    lw $6, 40($sp)
98; SOFT-FLOAT-32-NEXT:    lw $7, 44($sp)
99; SOFT-FLOAT-32-NEXT:    jal __adddf3
100; SOFT-FLOAT-32-NEXT:    move $5, $3
101; SOFT-FLOAT-32-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
102; SOFT-FLOAT-32-NEXT:    jr $ra
103; SOFT-FLOAT-32-NEXT:    addiu $sp, $sp, 24
104;
105; SOFT-FLOAT-32R2-LABEL: fmuladd_intrinsic_f64:
106; SOFT-FLOAT-32R2:       # %bb.0:
107; SOFT-FLOAT-32R2-NEXT:    addiu $sp, $sp, -24
108; SOFT-FLOAT-32R2-NEXT:    .cfi_def_cfa_offset 24
109; SOFT-FLOAT-32R2-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
110; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 31, -4
111; SOFT-FLOAT-32R2-NEXT:    jal __muldf3
112; SOFT-FLOAT-32R2-NEXT:    nop
113; SOFT-FLOAT-32R2-NEXT:    move $4, $2
114; SOFT-FLOAT-32R2-NEXT:    lw $6, 40($sp)
115; SOFT-FLOAT-32R2-NEXT:    lw $7, 44($sp)
116; SOFT-FLOAT-32R2-NEXT:    jal __adddf3
117; SOFT-FLOAT-32R2-NEXT:    move $5, $3
118; SOFT-FLOAT-32R2-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
119; SOFT-FLOAT-32R2-NEXT:    jr $ra
120; SOFT-FLOAT-32R2-NEXT:    addiu $sp, $sp, 24
121;
122; SOFT-FLOAT-64-LABEL: fmuladd_intrinsic_f64:
123; SOFT-FLOAT-64:       # %bb.0:
124; SOFT-FLOAT-64-NEXT:    daddiu $sp, $sp, -16
125; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 16
126; SOFT-FLOAT-64-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
127; SOFT-FLOAT-64-NEXT:    sd $16, 0($sp) # 8-byte Folded Spill
128; SOFT-FLOAT-64-NEXT:    .cfi_offset 31, -8
129; SOFT-FLOAT-64-NEXT:    .cfi_offset 16, -16
130; SOFT-FLOAT-64-NEXT:    jal __muldf3
131; SOFT-FLOAT-64-NEXT:    move $16, $6
132; SOFT-FLOAT-64-NEXT:    move $4, $2
133; SOFT-FLOAT-64-NEXT:    jal __adddf3
134; SOFT-FLOAT-64-NEXT:    move $5, $16
135; SOFT-FLOAT-64-NEXT:    ld $16, 0($sp) # 8-byte Folded Reload
136; SOFT-FLOAT-64-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
137; SOFT-FLOAT-64-NEXT:    jr $ra
138; SOFT-FLOAT-64-NEXT:    daddiu $sp, $sp, 16
139;
140; SOFT-FLOAT-64R2-LABEL: fmuladd_intrinsic_f64:
141; SOFT-FLOAT-64R2:       # %bb.0:
142; SOFT-FLOAT-64R2-NEXT:    daddiu $sp, $sp, -16
143; SOFT-FLOAT-64R2-NEXT:    .cfi_def_cfa_offset 16
144; SOFT-FLOAT-64R2-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
145; SOFT-FLOAT-64R2-NEXT:    sd $16, 0($sp) # 8-byte Folded Spill
146; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 31, -8
147; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 16, -16
148; SOFT-FLOAT-64R2-NEXT:    jal __muldf3
149; SOFT-FLOAT-64R2-NEXT:    move $16, $6
150; SOFT-FLOAT-64R2-NEXT:    move $4, $2
151; SOFT-FLOAT-64R2-NEXT:    jal __adddf3
152; SOFT-FLOAT-64R2-NEXT:    move $5, $16
153; SOFT-FLOAT-64R2-NEXT:    ld $16, 0($sp) # 8-byte Folded Reload
154; SOFT-FLOAT-64R2-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
155; SOFT-FLOAT-64R2-NEXT:    jr $ra
156; SOFT-FLOAT-64R2-NEXT:    daddiu $sp, $sp, 16
157  %result = call double @llvm.fmuladd.f64(double %a, double %b, double %c)
158  ret double %result
159}
160
161define float @fmuladd_contract_f32(float %a, float %b, float %c) #0 {
162; SOFT-FLOAT-32-LABEL: fmuladd_contract_f32:
163; SOFT-FLOAT-32:       # %bb.0:
164; SOFT-FLOAT-32-NEXT:    addiu $sp, $sp, -24
165; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 24
166; SOFT-FLOAT-32-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
167; SOFT-FLOAT-32-NEXT:    sw $16, 16($sp) # 4-byte Folded Spill
168; SOFT-FLOAT-32-NEXT:    .cfi_offset 31, -4
169; SOFT-FLOAT-32-NEXT:    .cfi_offset 16, -8
170; SOFT-FLOAT-32-NEXT:    jal __mulsf3
171; SOFT-FLOAT-32-NEXT:    move $16, $6
172; SOFT-FLOAT-32-NEXT:    move $4, $2
173; SOFT-FLOAT-32-NEXT:    jal __addsf3
174; SOFT-FLOAT-32-NEXT:    move $5, $16
175; SOFT-FLOAT-32-NEXT:    lw $16, 16($sp) # 4-byte Folded Reload
176; SOFT-FLOAT-32-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
177; SOFT-FLOAT-32-NEXT:    jr $ra
178; SOFT-FLOAT-32-NEXT:    addiu $sp, $sp, 24
179;
180; SOFT-FLOAT-32R2-LABEL: fmuladd_contract_f32:
181; SOFT-FLOAT-32R2:       # %bb.0:
182; SOFT-FLOAT-32R2-NEXT:    addiu $sp, $sp, -24
183; SOFT-FLOAT-32R2-NEXT:    .cfi_def_cfa_offset 24
184; SOFT-FLOAT-32R2-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
185; SOFT-FLOAT-32R2-NEXT:    sw $16, 16($sp) # 4-byte Folded Spill
186; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 31, -4
187; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 16, -8
188; SOFT-FLOAT-32R2-NEXT:    jal __mulsf3
189; SOFT-FLOAT-32R2-NEXT:    move $16, $6
190; SOFT-FLOAT-32R2-NEXT:    move $4, $2
191; SOFT-FLOAT-32R2-NEXT:    jal __addsf3
192; SOFT-FLOAT-32R2-NEXT:    move $5, $16
193; SOFT-FLOAT-32R2-NEXT:    lw $16, 16($sp) # 4-byte Folded Reload
194; SOFT-FLOAT-32R2-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
195; SOFT-FLOAT-32R2-NEXT:    jr $ra
196; SOFT-FLOAT-32R2-NEXT:    addiu $sp, $sp, 24
197;
198; SOFT-FLOAT-64-LABEL: fmuladd_contract_f32:
199; SOFT-FLOAT-64:       # %bb.0:
200; SOFT-FLOAT-64-NEXT:    daddiu $sp, $sp, -16
201; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 16
202; SOFT-FLOAT-64-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
203; SOFT-FLOAT-64-NEXT:    sd $16, 0($sp) # 8-byte Folded Spill
204; SOFT-FLOAT-64-NEXT:    .cfi_offset 31, -8
205; SOFT-FLOAT-64-NEXT:    .cfi_offset 16, -16
206; SOFT-FLOAT-64-NEXT:    move $16, $6
207; SOFT-FLOAT-64-NEXT:    sll $4, $4, 0
208; SOFT-FLOAT-64-NEXT:    jal __mulsf3
209; SOFT-FLOAT-64-NEXT:    sll $5, $5, 0
210; SOFT-FLOAT-64-NEXT:    sll $4, $2, 0
211; SOFT-FLOAT-64-NEXT:    jal __addsf3
212; SOFT-FLOAT-64-NEXT:    sll $5, $16, 0
213; SOFT-FLOAT-64-NEXT:    ld $16, 0($sp) # 8-byte Folded Reload
214; SOFT-FLOAT-64-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
215; SOFT-FLOAT-64-NEXT:    jr $ra
216; SOFT-FLOAT-64-NEXT:    daddiu $sp, $sp, 16
217;
218; SOFT-FLOAT-64R2-LABEL: fmuladd_contract_f32:
219; SOFT-FLOAT-64R2:       # %bb.0:
220; SOFT-FLOAT-64R2-NEXT:    daddiu $sp, $sp, -16
221; SOFT-FLOAT-64R2-NEXT:    .cfi_def_cfa_offset 16
222; SOFT-FLOAT-64R2-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
223; SOFT-FLOAT-64R2-NEXT:    sd $16, 0($sp) # 8-byte Folded Spill
224; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 31, -8
225; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 16, -16
226; SOFT-FLOAT-64R2-NEXT:    move $16, $6
227; SOFT-FLOAT-64R2-NEXT:    sll $4, $4, 0
228; SOFT-FLOAT-64R2-NEXT:    jal __mulsf3
229; SOFT-FLOAT-64R2-NEXT:    sll $5, $5, 0
230; SOFT-FLOAT-64R2-NEXT:    sll $4, $2, 0
231; SOFT-FLOAT-64R2-NEXT:    jal __addsf3
232; SOFT-FLOAT-64R2-NEXT:    sll $5, $16, 0
233; SOFT-FLOAT-64R2-NEXT:    ld $16, 0($sp) # 8-byte Folded Reload
234; SOFT-FLOAT-64R2-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
235; SOFT-FLOAT-64R2-NEXT:    jr $ra
236; SOFT-FLOAT-64R2-NEXT:    daddiu $sp, $sp, 16
237  %product = fmul contract float %a, %b
238  %result = fadd contract float %product, %c
239  ret float %result
240}
241
242define double @fmuladd_contract_f64(double %a, double %b, double %c) #0 {
243; SOFT-FLOAT-32-LABEL: fmuladd_contract_f64:
244; SOFT-FLOAT-32:       # %bb.0:
245; SOFT-FLOAT-32-NEXT:    addiu $sp, $sp, -24
246; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 24
247; SOFT-FLOAT-32-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
248; SOFT-FLOAT-32-NEXT:    .cfi_offset 31, -4
249; SOFT-FLOAT-32-NEXT:    jal __muldf3
250; SOFT-FLOAT-32-NEXT:    nop
251; SOFT-FLOAT-32-NEXT:    move $4, $2
252; SOFT-FLOAT-32-NEXT:    lw $6, 40($sp)
253; SOFT-FLOAT-32-NEXT:    lw $7, 44($sp)
254; SOFT-FLOAT-32-NEXT:    jal __adddf3
255; SOFT-FLOAT-32-NEXT:    move $5, $3
256; SOFT-FLOAT-32-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
257; SOFT-FLOAT-32-NEXT:    jr $ra
258; SOFT-FLOAT-32-NEXT:    addiu $sp, $sp, 24
259;
260; SOFT-FLOAT-32R2-LABEL: fmuladd_contract_f64:
261; SOFT-FLOAT-32R2:       # %bb.0:
262; SOFT-FLOAT-32R2-NEXT:    addiu $sp, $sp, -24
263; SOFT-FLOAT-32R2-NEXT:    .cfi_def_cfa_offset 24
264; SOFT-FLOAT-32R2-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
265; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 31, -4
266; SOFT-FLOAT-32R2-NEXT:    jal __muldf3
267; SOFT-FLOAT-32R2-NEXT:    nop
268; SOFT-FLOAT-32R2-NEXT:    move $4, $2
269; SOFT-FLOAT-32R2-NEXT:    lw $6, 40($sp)
270; SOFT-FLOAT-32R2-NEXT:    lw $7, 44($sp)
271; SOFT-FLOAT-32R2-NEXT:    jal __adddf3
272; SOFT-FLOAT-32R2-NEXT:    move $5, $3
273; SOFT-FLOAT-32R2-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
274; SOFT-FLOAT-32R2-NEXT:    jr $ra
275; SOFT-FLOAT-32R2-NEXT:    addiu $sp, $sp, 24
276;
277; SOFT-FLOAT-64-LABEL: fmuladd_contract_f64:
278; SOFT-FLOAT-64:       # %bb.0:
279; SOFT-FLOAT-64-NEXT:    daddiu $sp, $sp, -16
280; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 16
281; SOFT-FLOAT-64-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
282; SOFT-FLOAT-64-NEXT:    sd $16, 0($sp) # 8-byte Folded Spill
283; SOFT-FLOAT-64-NEXT:    .cfi_offset 31, -8
284; SOFT-FLOAT-64-NEXT:    .cfi_offset 16, -16
285; SOFT-FLOAT-64-NEXT:    jal __muldf3
286; SOFT-FLOAT-64-NEXT:    move $16, $6
287; SOFT-FLOAT-64-NEXT:    move $4, $2
288; SOFT-FLOAT-64-NEXT:    jal __adddf3
289; SOFT-FLOAT-64-NEXT:    move $5, $16
290; SOFT-FLOAT-64-NEXT:    ld $16, 0($sp) # 8-byte Folded Reload
291; SOFT-FLOAT-64-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
292; SOFT-FLOAT-64-NEXT:    jr $ra
293; SOFT-FLOAT-64-NEXT:    daddiu $sp, $sp, 16
294;
295; SOFT-FLOAT-64R2-LABEL: fmuladd_contract_f64:
296; SOFT-FLOAT-64R2:       # %bb.0:
297; SOFT-FLOAT-64R2-NEXT:    daddiu $sp, $sp, -16
298; SOFT-FLOAT-64R2-NEXT:    .cfi_def_cfa_offset 16
299; SOFT-FLOAT-64R2-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
300; SOFT-FLOAT-64R2-NEXT:    sd $16, 0($sp) # 8-byte Folded Spill
301; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 31, -8
302; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 16, -16
303; SOFT-FLOAT-64R2-NEXT:    jal __muldf3
304; SOFT-FLOAT-64R2-NEXT:    move $16, $6
305; SOFT-FLOAT-64R2-NEXT:    move $4, $2
306; SOFT-FLOAT-64R2-NEXT:    jal __adddf3
307; SOFT-FLOAT-64R2-NEXT:    move $5, $16
308; SOFT-FLOAT-64R2-NEXT:    ld $16, 0($sp) # 8-byte Folded Reload
309; SOFT-FLOAT-64R2-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
310; SOFT-FLOAT-64R2-NEXT:    jr $ra
311; SOFT-FLOAT-64R2-NEXT:    daddiu $sp, $sp, 16
312  %product = fmul contract double %a, %b
313  %result = fadd contract double %product, %c
314  ret double %result
315}
316
317define <4 x float> @fmuladd_contract_v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %c) #0 {
318; SOFT-FLOAT-32-LABEL: fmuladd_contract_v4f32:
319; SOFT-FLOAT-32:       # %bb.0:
320; SOFT-FLOAT-32-NEXT:    addiu $sp, $sp, -48
321; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 48
322; SOFT-FLOAT-32-NEXT:    sw $ra, 44($sp) # 4-byte Folded Spill
323; SOFT-FLOAT-32-NEXT:    sw $21, 40($sp) # 4-byte Folded Spill
324; SOFT-FLOAT-32-NEXT:    sw $20, 36($sp) # 4-byte Folded Spill
325; SOFT-FLOAT-32-NEXT:    sw $19, 32($sp) # 4-byte Folded Spill
326; SOFT-FLOAT-32-NEXT:    sw $18, 28($sp) # 4-byte Folded Spill
327; SOFT-FLOAT-32-NEXT:    sw $17, 24($sp) # 4-byte Folded Spill
328; SOFT-FLOAT-32-NEXT:    sw $16, 20($sp) # 4-byte Folded Spill
329; SOFT-FLOAT-32-NEXT:    .cfi_offset 31, -4
330; SOFT-FLOAT-32-NEXT:    .cfi_offset 21, -8
331; SOFT-FLOAT-32-NEXT:    .cfi_offset 20, -12
332; SOFT-FLOAT-32-NEXT:    .cfi_offset 19, -16
333; SOFT-FLOAT-32-NEXT:    .cfi_offset 18, -20
334; SOFT-FLOAT-32-NEXT:    .cfi_offset 17, -24
335; SOFT-FLOAT-32-NEXT:    .cfi_offset 16, -28
336; SOFT-FLOAT-32-NEXT:    move $17, $7
337; SOFT-FLOAT-32-NEXT:    move $16, $4
338; SOFT-FLOAT-32-NEXT:    lw $4, 64($sp)
339; SOFT-FLOAT-32-NEXT:    lw $5, 80($sp)
340; SOFT-FLOAT-32-NEXT:    jal __mulsf3
341; SOFT-FLOAT-32-NEXT:    move $18, $6
342; SOFT-FLOAT-32-NEXT:    lw $5, 96($sp)
343; SOFT-FLOAT-32-NEXT:    jal __addsf3
344; SOFT-FLOAT-32-NEXT:    move $4, $2
345; SOFT-FLOAT-32-NEXT:    lw $4, 68($sp)
346; SOFT-FLOAT-32-NEXT:    lw $5, 84($sp)
347; SOFT-FLOAT-32-NEXT:    jal __mulsf3
348; SOFT-FLOAT-32-NEXT:    move $19, $2
349; SOFT-FLOAT-32-NEXT:    lw $5, 100($sp)
350; SOFT-FLOAT-32-NEXT:    jal __addsf3
351; SOFT-FLOAT-32-NEXT:    move $4, $2
352; SOFT-FLOAT-32-NEXT:    move $20, $2
353; SOFT-FLOAT-32-NEXT:    lw $5, 76($sp)
354; SOFT-FLOAT-32-NEXT:    jal __mulsf3
355; SOFT-FLOAT-32-NEXT:    move $4, $17
356; SOFT-FLOAT-32-NEXT:    move $4, $2
357; SOFT-FLOAT-32-NEXT:    lw $17, 88($sp)
358; SOFT-FLOAT-32-NEXT:    lw $21, 72($sp)
359; SOFT-FLOAT-32-NEXT:    lw $5, 92($sp)
360; SOFT-FLOAT-32-NEXT:    sw $20, 12($16)
361; SOFT-FLOAT-32-NEXT:    jal __addsf3
362; SOFT-FLOAT-32-NEXT:    sw $19, 8($16)
363; SOFT-FLOAT-32-NEXT:    sw $2, 4($16)
364; SOFT-FLOAT-32-NEXT:    move $4, $18
365; SOFT-FLOAT-32-NEXT:    jal __mulsf3
366; SOFT-FLOAT-32-NEXT:    move $5, $21
367; SOFT-FLOAT-32-NEXT:    move $4, $2
368; SOFT-FLOAT-32-NEXT:    jal __addsf3
369; SOFT-FLOAT-32-NEXT:    move $5, $17
370; SOFT-FLOAT-32-NEXT:    sw $2, 0($16)
371; SOFT-FLOAT-32-NEXT:    lw $16, 20($sp) # 4-byte Folded Reload
372; SOFT-FLOAT-32-NEXT:    lw $17, 24($sp) # 4-byte Folded Reload
373; SOFT-FLOAT-32-NEXT:    lw $18, 28($sp) # 4-byte Folded Reload
374; SOFT-FLOAT-32-NEXT:    lw $19, 32($sp) # 4-byte Folded Reload
375; SOFT-FLOAT-32-NEXT:    lw $20, 36($sp) # 4-byte Folded Reload
376; SOFT-FLOAT-32-NEXT:    lw $21, 40($sp) # 4-byte Folded Reload
377; SOFT-FLOAT-32-NEXT:    lw $ra, 44($sp) # 4-byte Folded Reload
378; SOFT-FLOAT-32-NEXT:    jr $ra
379; SOFT-FLOAT-32-NEXT:    addiu $sp, $sp, 48
380;
381; SOFT-FLOAT-32R2-LABEL: fmuladd_contract_v4f32:
382; SOFT-FLOAT-32R2:       # %bb.0:
383; SOFT-FLOAT-32R2-NEXT:    addiu $sp, $sp, -48
384; SOFT-FLOAT-32R2-NEXT:    .cfi_def_cfa_offset 48
385; SOFT-FLOAT-32R2-NEXT:    sw $ra, 44($sp) # 4-byte Folded Spill
386; SOFT-FLOAT-32R2-NEXT:    sw $21, 40($sp) # 4-byte Folded Spill
387; SOFT-FLOAT-32R2-NEXT:    sw $20, 36($sp) # 4-byte Folded Spill
388; SOFT-FLOAT-32R2-NEXT:    sw $19, 32($sp) # 4-byte Folded Spill
389; SOFT-FLOAT-32R2-NEXT:    sw $18, 28($sp) # 4-byte Folded Spill
390; SOFT-FLOAT-32R2-NEXT:    sw $17, 24($sp) # 4-byte Folded Spill
391; SOFT-FLOAT-32R2-NEXT:    sw $16, 20($sp) # 4-byte Folded Spill
392; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 31, -4
393; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 21, -8
394; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 20, -12
395; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 19, -16
396; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 18, -20
397; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 17, -24
398; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 16, -28
399; SOFT-FLOAT-32R2-NEXT:    move $17, $7
400; SOFT-FLOAT-32R2-NEXT:    move $16, $4
401; SOFT-FLOAT-32R2-NEXT:    lw $4, 64($sp)
402; SOFT-FLOAT-32R2-NEXT:    lw $5, 80($sp)
403; SOFT-FLOAT-32R2-NEXT:    jal __mulsf3
404; SOFT-FLOAT-32R2-NEXT:    move $18, $6
405; SOFT-FLOAT-32R2-NEXT:    lw $5, 96($sp)
406; SOFT-FLOAT-32R2-NEXT:    jal __addsf3
407; SOFT-FLOAT-32R2-NEXT:    move $4, $2
408; SOFT-FLOAT-32R2-NEXT:    lw $4, 68($sp)
409; SOFT-FLOAT-32R2-NEXT:    lw $5, 84($sp)
410; SOFT-FLOAT-32R2-NEXT:    jal __mulsf3
411; SOFT-FLOAT-32R2-NEXT:    move $19, $2
412; SOFT-FLOAT-32R2-NEXT:    lw $5, 100($sp)
413; SOFT-FLOAT-32R2-NEXT:    jal __addsf3
414; SOFT-FLOAT-32R2-NEXT:    move $4, $2
415; SOFT-FLOAT-32R2-NEXT:    move $20, $2
416; SOFT-FLOAT-32R2-NEXT:    lw $5, 76($sp)
417; SOFT-FLOAT-32R2-NEXT:    jal __mulsf3
418; SOFT-FLOAT-32R2-NEXT:    move $4, $17
419; SOFT-FLOAT-32R2-NEXT:    move $4, $2
420; SOFT-FLOAT-32R2-NEXT:    lw $17, 88($sp)
421; SOFT-FLOAT-32R2-NEXT:    lw $21, 72($sp)
422; SOFT-FLOAT-32R2-NEXT:    lw $5, 92($sp)
423; SOFT-FLOAT-32R2-NEXT:    sw $20, 12($16)
424; SOFT-FLOAT-32R2-NEXT:    jal __addsf3
425; SOFT-FLOAT-32R2-NEXT:    sw $19, 8($16)
426; SOFT-FLOAT-32R2-NEXT:    sw $2, 4($16)
427; SOFT-FLOAT-32R2-NEXT:    move $4, $18
428; SOFT-FLOAT-32R2-NEXT:    jal __mulsf3
429; SOFT-FLOAT-32R2-NEXT:    move $5, $21
430; SOFT-FLOAT-32R2-NEXT:    move $4, $2
431; SOFT-FLOAT-32R2-NEXT:    jal __addsf3
432; SOFT-FLOAT-32R2-NEXT:    move $5, $17
433; SOFT-FLOAT-32R2-NEXT:    sw $2, 0($16)
434; SOFT-FLOAT-32R2-NEXT:    lw $16, 20($sp) # 4-byte Folded Reload
435; SOFT-FLOAT-32R2-NEXT:    lw $17, 24($sp) # 4-byte Folded Reload
436; SOFT-FLOAT-32R2-NEXT:    lw $18, 28($sp) # 4-byte Folded Reload
437; SOFT-FLOAT-32R2-NEXT:    lw $19, 32($sp) # 4-byte Folded Reload
438; SOFT-FLOAT-32R2-NEXT:    lw $20, 36($sp) # 4-byte Folded Reload
439; SOFT-FLOAT-32R2-NEXT:    lw $21, 40($sp) # 4-byte Folded Reload
440; SOFT-FLOAT-32R2-NEXT:    lw $ra, 44($sp) # 4-byte Folded Reload
441; SOFT-FLOAT-32R2-NEXT:    jr $ra
442; SOFT-FLOAT-32R2-NEXT:    addiu $sp, $sp, 48
443;
444; SOFT-FLOAT-64-LABEL: fmuladd_contract_v4f32:
445; SOFT-FLOAT-64:       # %bb.0:
446; SOFT-FLOAT-64-NEXT:    daddiu $sp, $sp, -64
447; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 64
448; SOFT-FLOAT-64-NEXT:    sd $ra, 56($sp) # 8-byte Folded Spill
449; SOFT-FLOAT-64-NEXT:    sd $22, 48($sp) # 8-byte Folded Spill
450; SOFT-FLOAT-64-NEXT:    sd $21, 40($sp) # 8-byte Folded Spill
451; SOFT-FLOAT-64-NEXT:    sd $20, 32($sp) # 8-byte Folded Spill
452; SOFT-FLOAT-64-NEXT:    sd $19, 24($sp) # 8-byte Folded Spill
453; SOFT-FLOAT-64-NEXT:    sd $18, 16($sp) # 8-byte Folded Spill
454; SOFT-FLOAT-64-NEXT:    sd $17, 8($sp) # 8-byte Folded Spill
455; SOFT-FLOAT-64-NEXT:    sd $16, 0($sp) # 8-byte Folded Spill
456; SOFT-FLOAT-64-NEXT:    .cfi_offset 31, -8
457; SOFT-FLOAT-64-NEXT:    .cfi_offset 22, -16
458; SOFT-FLOAT-64-NEXT:    .cfi_offset 21, -24
459; SOFT-FLOAT-64-NEXT:    .cfi_offset 20, -32
460; SOFT-FLOAT-64-NEXT:    .cfi_offset 19, -40
461; SOFT-FLOAT-64-NEXT:    .cfi_offset 18, -48
462; SOFT-FLOAT-64-NEXT:    .cfi_offset 17, -56
463; SOFT-FLOAT-64-NEXT:    .cfi_offset 16, -64
464; SOFT-FLOAT-64-NEXT:    move $16, $9
465; SOFT-FLOAT-64-NEXT:    move $17, $8
466; SOFT-FLOAT-64-NEXT:    move $18, $7
467; SOFT-FLOAT-64-NEXT:    move $19, $6
468; SOFT-FLOAT-64-NEXT:    move $20, $5
469; SOFT-FLOAT-64-NEXT:    move $21, $4
470; SOFT-FLOAT-64-NEXT:    sll $4, $4, 0
471; SOFT-FLOAT-64-NEXT:    jal __mulsf3
472; SOFT-FLOAT-64-NEXT:    sll $5, $6, 0
473; SOFT-FLOAT-64-NEXT:    move $22, $2
474; SOFT-FLOAT-64-NEXT:    dsra $4, $21, 32
475; SOFT-FLOAT-64-NEXT:    jal __mulsf3
476; SOFT-FLOAT-64-NEXT:    dsra $5, $19, 32
477; SOFT-FLOAT-64-NEXT:    sll $4, $2, 0
478; SOFT-FLOAT-64-NEXT:    jal __addsf3
479; SOFT-FLOAT-64-NEXT:    dsra $5, $17, 32
480; SOFT-FLOAT-64-NEXT:    # kill: def $v0 killed $v0 def $v0_64
481; SOFT-FLOAT-64-NEXT:    sll $4, $22, 0
482; SOFT-FLOAT-64-NEXT:    sll $5, $17, 0
483; SOFT-FLOAT-64-NEXT:    jal __addsf3
484; SOFT-FLOAT-64-NEXT:    dsll $17, $2, 32
485; SOFT-FLOAT-64-NEXT:    dsll $1, $2, 32
486; SOFT-FLOAT-64-NEXT:    dsrl $1, $1, 32
487; SOFT-FLOAT-64-NEXT:    sll $4, $20, 0
488; SOFT-FLOAT-64-NEXT:    sll $5, $18, 0
489; SOFT-FLOAT-64-NEXT:    jal __mulsf3
490; SOFT-FLOAT-64-NEXT:    or $17, $1, $17
491; SOFT-FLOAT-64-NEXT:    move $19, $2
492; SOFT-FLOAT-64-NEXT:    dsra $4, $20, 32
493; SOFT-FLOAT-64-NEXT:    jal __mulsf3
494; SOFT-FLOAT-64-NEXT:    dsra $5, $18, 32
495; SOFT-FLOAT-64-NEXT:    sll $4, $2, 0
496; SOFT-FLOAT-64-NEXT:    jal __addsf3
497; SOFT-FLOAT-64-NEXT:    dsra $5, $16, 32
498; SOFT-FLOAT-64-NEXT:    # kill: def $v0 killed $v0 def $v0_64
499; SOFT-FLOAT-64-NEXT:    dsll $18, $2, 32
500; SOFT-FLOAT-64-NEXT:    sll $4, $19, 0
501; SOFT-FLOAT-64-NEXT:    jal __addsf3
502; SOFT-FLOAT-64-NEXT:    sll $5, $16, 0
503; SOFT-FLOAT-64-NEXT:    dsll $1, $2, 32
504; SOFT-FLOAT-64-NEXT:    dsrl $1, $1, 32
505; SOFT-FLOAT-64-NEXT:    or $3, $1, $18
506; SOFT-FLOAT-64-NEXT:    move $2, $17
507; SOFT-FLOAT-64-NEXT:    ld $16, 0($sp) # 8-byte Folded Reload
508; SOFT-FLOAT-64-NEXT:    ld $17, 8($sp) # 8-byte Folded Reload
509; SOFT-FLOAT-64-NEXT:    ld $18, 16($sp) # 8-byte Folded Reload
510; SOFT-FLOAT-64-NEXT:    ld $19, 24($sp) # 8-byte Folded Reload
511; SOFT-FLOAT-64-NEXT:    ld $20, 32($sp) # 8-byte Folded Reload
512; SOFT-FLOAT-64-NEXT:    ld $21, 40($sp) # 8-byte Folded Reload
513; SOFT-FLOAT-64-NEXT:    ld $22, 48($sp) # 8-byte Folded Reload
514; SOFT-FLOAT-64-NEXT:    ld $ra, 56($sp) # 8-byte Folded Reload
515; SOFT-FLOAT-64-NEXT:    jr $ra
516; SOFT-FLOAT-64-NEXT:    daddiu $sp, $sp, 64
517;
518; SOFT-FLOAT-64R2-LABEL: fmuladd_contract_v4f32:
519; SOFT-FLOAT-64R2:       # %bb.0:
520; SOFT-FLOAT-64R2-NEXT:    daddiu $sp, $sp, -64
521; SOFT-FLOAT-64R2-NEXT:    .cfi_def_cfa_offset 64
522; SOFT-FLOAT-64R2-NEXT:    sd $ra, 56($sp) # 8-byte Folded Spill
523; SOFT-FLOAT-64R2-NEXT:    sd $22, 48($sp) # 8-byte Folded Spill
524; SOFT-FLOAT-64R2-NEXT:    sd $21, 40($sp) # 8-byte Folded Spill
525; SOFT-FLOAT-64R2-NEXT:    sd $20, 32($sp) # 8-byte Folded Spill
526; SOFT-FLOAT-64R2-NEXT:    sd $19, 24($sp) # 8-byte Folded Spill
527; SOFT-FLOAT-64R2-NEXT:    sd $18, 16($sp) # 8-byte Folded Spill
528; SOFT-FLOAT-64R2-NEXT:    sd $17, 8($sp) # 8-byte Folded Spill
529; SOFT-FLOAT-64R2-NEXT:    sd $16, 0($sp) # 8-byte Folded Spill
530; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 31, -8
531; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 22, -16
532; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 21, -24
533; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 20, -32
534; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 19, -40
535; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 18, -48
536; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 17, -56
537; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 16, -64
538; SOFT-FLOAT-64R2-NEXT:    move $16, $9
539; SOFT-FLOAT-64R2-NEXT:    move $17, $8
540; SOFT-FLOAT-64R2-NEXT:    move $18, $7
541; SOFT-FLOAT-64R2-NEXT:    move $19, $6
542; SOFT-FLOAT-64R2-NEXT:    move $20, $5
543; SOFT-FLOAT-64R2-NEXT:    move $21, $4
544; SOFT-FLOAT-64R2-NEXT:    dsra $4, $4, 32
545; SOFT-FLOAT-64R2-NEXT:    jal __mulsf3
546; SOFT-FLOAT-64R2-NEXT:    dsra $5, $6, 32
547; SOFT-FLOAT-64R2-NEXT:    move $22, $2
548; SOFT-FLOAT-64R2-NEXT:    sll $4, $21, 0
549; SOFT-FLOAT-64R2-NEXT:    jal __mulsf3
550; SOFT-FLOAT-64R2-NEXT:    sll $5, $19, 0
551; SOFT-FLOAT-64R2-NEXT:    sll $4, $2, 0
552; SOFT-FLOAT-64R2-NEXT:    jal __addsf3
553; SOFT-FLOAT-64R2-NEXT:    sll $5, $17, 0
554; SOFT-FLOAT-64R2-NEXT:    sll $4, $22, 0
555; SOFT-FLOAT-64R2-NEXT:    dsra $5, $17, 32
556; SOFT-FLOAT-64R2-NEXT:    jal __addsf3
557; SOFT-FLOAT-64R2-NEXT:    dext $17, $2, 0, 32
558; SOFT-FLOAT-64R2-NEXT:    # kill: def $v0 killed $v0 def $v0_64
559; SOFT-FLOAT-64R2-NEXT:    dsll $1, $2, 32
560; SOFT-FLOAT-64R2-NEXT:    dsra $4, $20, 32
561; SOFT-FLOAT-64R2-NEXT:    dsra $5, $18, 32
562; SOFT-FLOAT-64R2-NEXT:    jal __mulsf3
563; SOFT-FLOAT-64R2-NEXT:    or $17, $17, $1
564; SOFT-FLOAT-64R2-NEXT:    move $19, $2
565; SOFT-FLOAT-64R2-NEXT:    sll $4, $20, 0
566; SOFT-FLOAT-64R2-NEXT:    jal __mulsf3
567; SOFT-FLOAT-64R2-NEXT:    sll $5, $18, 0
568; SOFT-FLOAT-64R2-NEXT:    sll $4, $2, 0
569; SOFT-FLOAT-64R2-NEXT:    jal __addsf3
570; SOFT-FLOAT-64R2-NEXT:    sll $5, $16, 0
571; SOFT-FLOAT-64R2-NEXT:    dext $18, $2, 0, 32
572; SOFT-FLOAT-64R2-NEXT:    sll $4, $19, 0
573; SOFT-FLOAT-64R2-NEXT:    jal __addsf3
574; SOFT-FLOAT-64R2-NEXT:    dsra $5, $16, 32
575; SOFT-FLOAT-64R2-NEXT:    # kill: def $v0 killed $v0 def $v0_64
576; SOFT-FLOAT-64R2-NEXT:    dsll $1, $2, 32
577; SOFT-FLOAT-64R2-NEXT:    or $3, $18, $1
578; SOFT-FLOAT-64R2-NEXT:    move $2, $17
579; SOFT-FLOAT-64R2-NEXT:    ld $16, 0($sp) # 8-byte Folded Reload
580; SOFT-FLOAT-64R2-NEXT:    ld $17, 8($sp) # 8-byte Folded Reload
581; SOFT-FLOAT-64R2-NEXT:    ld $18, 16($sp) # 8-byte Folded Reload
582; SOFT-FLOAT-64R2-NEXT:    ld $19, 24($sp) # 8-byte Folded Reload
583; SOFT-FLOAT-64R2-NEXT:    ld $20, 32($sp) # 8-byte Folded Reload
584; SOFT-FLOAT-64R2-NEXT:    ld $21, 40($sp) # 8-byte Folded Reload
585; SOFT-FLOAT-64R2-NEXT:    ld $22, 48($sp) # 8-byte Folded Reload
586; SOFT-FLOAT-64R2-NEXT:    ld $ra, 56($sp) # 8-byte Folded Reload
587; SOFT-FLOAT-64R2-NEXT:    jr $ra
588; SOFT-FLOAT-64R2-NEXT:    daddiu $sp, $sp, 64
589  %product = fmul contract <4 x float> %a, %b
590  %result = fadd contract <4 x float> %product, %c
591  ret <4 x float> %result
592}
593
594define <4 x double> @fmuladd_contract_v4f64(<4 x double> %a, <4 x double> %b, <4 x double> %c) #0 {
595; SOFT-FLOAT-32-LABEL: fmuladd_contract_v4f64:
596; SOFT-FLOAT-32:       # %bb.0:
597; SOFT-FLOAT-32-NEXT:    addiu $sp, $sp, -64
598; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 64
599; SOFT-FLOAT-32-NEXT:    sw $ra, 60($sp) # 4-byte Folded Spill
600; SOFT-FLOAT-32-NEXT:    sw $fp, 56($sp) # 4-byte Folded Spill
601; SOFT-FLOAT-32-NEXT:    sw $23, 52($sp) # 4-byte Folded Spill
602; SOFT-FLOAT-32-NEXT:    sw $22, 48($sp) # 4-byte Folded Spill
603; SOFT-FLOAT-32-NEXT:    sw $21, 44($sp) # 4-byte Folded Spill
604; SOFT-FLOAT-32-NEXT:    sw $20, 40($sp) # 4-byte Folded Spill
605; SOFT-FLOAT-32-NEXT:    sw $19, 36($sp) # 4-byte Folded Spill
606; SOFT-FLOAT-32-NEXT:    sw $18, 32($sp) # 4-byte Folded Spill
607; SOFT-FLOAT-32-NEXT:    sw $17, 28($sp) # 4-byte Folded Spill
608; SOFT-FLOAT-32-NEXT:    sw $16, 24($sp) # 4-byte Folded Spill
609; SOFT-FLOAT-32-NEXT:    .cfi_offset 31, -4
610; SOFT-FLOAT-32-NEXT:    .cfi_offset 30, -8
611; SOFT-FLOAT-32-NEXT:    .cfi_offset 23, -12
612; SOFT-FLOAT-32-NEXT:    .cfi_offset 22, -16
613; SOFT-FLOAT-32-NEXT:    .cfi_offset 21, -20
614; SOFT-FLOAT-32-NEXT:    .cfi_offset 20, -24
615; SOFT-FLOAT-32-NEXT:    .cfi_offset 19, -28
616; SOFT-FLOAT-32-NEXT:    .cfi_offset 18, -32
617; SOFT-FLOAT-32-NEXT:    .cfi_offset 17, -36
618; SOFT-FLOAT-32-NEXT:    .cfi_offset 16, -40
619; SOFT-FLOAT-32-NEXT:    sw $7, 20($sp) # 4-byte Folded Spill
620; SOFT-FLOAT-32-NEXT:    sw $6, 16($sp) # 4-byte Folded Spill
621; SOFT-FLOAT-32-NEXT:    move $16, $4
622; SOFT-FLOAT-32-NEXT:    lw $4, 88($sp)
623; SOFT-FLOAT-32-NEXT:    lw $5, 92($sp)
624; SOFT-FLOAT-32-NEXT:    lw $6, 120($sp)
625; SOFT-FLOAT-32-NEXT:    lw $7, 124($sp)
626; SOFT-FLOAT-32-NEXT:    jal __muldf3
627; SOFT-FLOAT-32-NEXT:    nop
628; SOFT-FLOAT-32-NEXT:    move $4, $2
629; SOFT-FLOAT-32-NEXT:    lw $6, 152($sp)
630; SOFT-FLOAT-32-NEXT:    lw $7, 156($sp)
631; SOFT-FLOAT-32-NEXT:    jal __adddf3
632; SOFT-FLOAT-32-NEXT:    move $5, $3
633; SOFT-FLOAT-32-NEXT:    move $19, $2
634; SOFT-FLOAT-32-NEXT:    lw $4, 96($sp)
635; SOFT-FLOAT-32-NEXT:    lw $5, 100($sp)
636; SOFT-FLOAT-32-NEXT:    lw $6, 128($sp)
637; SOFT-FLOAT-32-NEXT:    lw $7, 132($sp)
638; SOFT-FLOAT-32-NEXT:    jal __muldf3
639; SOFT-FLOAT-32-NEXT:    move $20, $3
640; SOFT-FLOAT-32-NEXT:    move $4, $2
641; SOFT-FLOAT-32-NEXT:    lw $6, 160($sp)
642; SOFT-FLOAT-32-NEXT:    lw $7, 164($sp)
643; SOFT-FLOAT-32-NEXT:    jal __adddf3
644; SOFT-FLOAT-32-NEXT:    move $5, $3
645; SOFT-FLOAT-32-NEXT:    move $21, $2
646; SOFT-FLOAT-32-NEXT:    lw $4, 80($sp)
647; SOFT-FLOAT-32-NEXT:    lw $5, 84($sp)
648; SOFT-FLOAT-32-NEXT:    lw $6, 112($sp)
649; SOFT-FLOAT-32-NEXT:    lw $7, 116($sp)
650; SOFT-FLOAT-32-NEXT:    jal __muldf3
651; SOFT-FLOAT-32-NEXT:    move $22, $3
652; SOFT-FLOAT-32-NEXT:    move $4, $2
653; SOFT-FLOAT-32-NEXT:    move $5, $3
654; SOFT-FLOAT-32-NEXT:    lw $23, 140($sp)
655; SOFT-FLOAT-32-NEXT:    lw $fp, 136($sp)
656; SOFT-FLOAT-32-NEXT:    lw $17, 108($sp)
657; SOFT-FLOAT-32-NEXT:    lw $18, 104($sp)
658; SOFT-FLOAT-32-NEXT:    lw $7, 148($sp)
659; SOFT-FLOAT-32-NEXT:    lw $6, 144($sp)
660; SOFT-FLOAT-32-NEXT:    sw $22, 28($16)
661; SOFT-FLOAT-32-NEXT:    sw $21, 24($16)
662; SOFT-FLOAT-32-NEXT:    sw $20, 20($16)
663; SOFT-FLOAT-32-NEXT:    jal __adddf3
664; SOFT-FLOAT-32-NEXT:    sw $19, 16($16)
665; SOFT-FLOAT-32-NEXT:    sw $3, 12($16)
666; SOFT-FLOAT-32-NEXT:    sw $2, 8($16)
667; SOFT-FLOAT-32-NEXT:    lw $4, 16($sp) # 4-byte Folded Reload
668; SOFT-FLOAT-32-NEXT:    lw $5, 20($sp) # 4-byte Folded Reload
669; SOFT-FLOAT-32-NEXT:    move $6, $18
670; SOFT-FLOAT-32-NEXT:    jal __muldf3
671; SOFT-FLOAT-32-NEXT:    move $7, $17
672; SOFT-FLOAT-32-NEXT:    move $4, $2
673; SOFT-FLOAT-32-NEXT:    move $5, $3
674; SOFT-FLOAT-32-NEXT:    move $6, $fp
675; SOFT-FLOAT-32-NEXT:    jal __adddf3
676; SOFT-FLOAT-32-NEXT:    move $7, $23
677; SOFT-FLOAT-32-NEXT:    sw $3, 4($16)
678; SOFT-FLOAT-32-NEXT:    sw $2, 0($16)
679; SOFT-FLOAT-32-NEXT:    lw $16, 24($sp) # 4-byte Folded Reload
680; SOFT-FLOAT-32-NEXT:    lw $17, 28($sp) # 4-byte Folded Reload
681; SOFT-FLOAT-32-NEXT:    lw $18, 32($sp) # 4-byte Folded Reload
682; SOFT-FLOAT-32-NEXT:    lw $19, 36($sp) # 4-byte Folded Reload
683; SOFT-FLOAT-32-NEXT:    lw $20, 40($sp) # 4-byte Folded Reload
684; SOFT-FLOAT-32-NEXT:    lw $21, 44($sp) # 4-byte Folded Reload
685; SOFT-FLOAT-32-NEXT:    lw $22, 48($sp) # 4-byte Folded Reload
686; SOFT-FLOAT-32-NEXT:    lw $23, 52($sp) # 4-byte Folded Reload
687; SOFT-FLOAT-32-NEXT:    lw $fp, 56($sp) # 4-byte Folded Reload
688; SOFT-FLOAT-32-NEXT:    lw $ra, 60($sp) # 4-byte Folded Reload
689; SOFT-FLOAT-32-NEXT:    jr $ra
690; SOFT-FLOAT-32-NEXT:    addiu $sp, $sp, 64
691;
692; SOFT-FLOAT-32R2-LABEL: fmuladd_contract_v4f64:
693; SOFT-FLOAT-32R2:       # %bb.0:
694; SOFT-FLOAT-32R2-NEXT:    addiu $sp, $sp, -64
695; SOFT-FLOAT-32R2-NEXT:    .cfi_def_cfa_offset 64
696; SOFT-FLOAT-32R2-NEXT:    sw $ra, 60($sp) # 4-byte Folded Spill
697; SOFT-FLOAT-32R2-NEXT:    sw $fp, 56($sp) # 4-byte Folded Spill
698; SOFT-FLOAT-32R2-NEXT:    sw $23, 52($sp) # 4-byte Folded Spill
699; SOFT-FLOAT-32R2-NEXT:    sw $22, 48($sp) # 4-byte Folded Spill
700; SOFT-FLOAT-32R2-NEXT:    sw $21, 44($sp) # 4-byte Folded Spill
701; SOFT-FLOAT-32R2-NEXT:    sw $20, 40($sp) # 4-byte Folded Spill
702; SOFT-FLOAT-32R2-NEXT:    sw $19, 36($sp) # 4-byte Folded Spill
703; SOFT-FLOAT-32R2-NEXT:    sw $18, 32($sp) # 4-byte Folded Spill
704; SOFT-FLOAT-32R2-NEXT:    sw $17, 28($sp) # 4-byte Folded Spill
705; SOFT-FLOAT-32R2-NEXT:    sw $16, 24($sp) # 4-byte Folded Spill
706; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 31, -4
707; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 30, -8
708; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 23, -12
709; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 22, -16
710; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 21, -20
711; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 20, -24
712; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 19, -28
713; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 18, -32
714; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 17, -36
715; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 16, -40
716; SOFT-FLOAT-32R2-NEXT:    sw $7, 20($sp) # 4-byte Folded Spill
717; SOFT-FLOAT-32R2-NEXT:    sw $6, 16($sp) # 4-byte Folded Spill
718; SOFT-FLOAT-32R2-NEXT:    move $16, $4
719; SOFT-FLOAT-32R2-NEXT:    lw $4, 88($sp)
720; SOFT-FLOAT-32R2-NEXT:    lw $5, 92($sp)
721; SOFT-FLOAT-32R2-NEXT:    lw $6, 120($sp)
722; SOFT-FLOAT-32R2-NEXT:    lw $7, 124($sp)
723; SOFT-FLOAT-32R2-NEXT:    jal __muldf3
724; SOFT-FLOAT-32R2-NEXT:    nop
725; SOFT-FLOAT-32R2-NEXT:    move $4, $2
726; SOFT-FLOAT-32R2-NEXT:    lw $6, 152($sp)
727; SOFT-FLOAT-32R2-NEXT:    lw $7, 156($sp)
728; SOFT-FLOAT-32R2-NEXT:    jal __adddf3
729; SOFT-FLOAT-32R2-NEXT:    move $5, $3
730; SOFT-FLOAT-32R2-NEXT:    move $19, $2
731; SOFT-FLOAT-32R2-NEXT:    lw $4, 96($sp)
732; SOFT-FLOAT-32R2-NEXT:    lw $5, 100($sp)
733; SOFT-FLOAT-32R2-NEXT:    lw $6, 128($sp)
734; SOFT-FLOAT-32R2-NEXT:    lw $7, 132($sp)
735; SOFT-FLOAT-32R2-NEXT:    jal __muldf3
736; SOFT-FLOAT-32R2-NEXT:    move $20, $3
737; SOFT-FLOAT-32R2-NEXT:    move $4, $2
738; SOFT-FLOAT-32R2-NEXT:    lw $6, 160($sp)
739; SOFT-FLOAT-32R2-NEXT:    lw $7, 164($sp)
740; SOFT-FLOAT-32R2-NEXT:    jal __adddf3
741; SOFT-FLOAT-32R2-NEXT:    move $5, $3
742; SOFT-FLOAT-32R2-NEXT:    move $21, $2
743; SOFT-FLOAT-32R2-NEXT:    lw $4, 80($sp)
744; SOFT-FLOAT-32R2-NEXT:    lw $5, 84($sp)
745; SOFT-FLOAT-32R2-NEXT:    lw $6, 112($sp)
746; SOFT-FLOAT-32R2-NEXT:    lw $7, 116($sp)
747; SOFT-FLOAT-32R2-NEXT:    jal __muldf3
748; SOFT-FLOAT-32R2-NEXT:    move $22, $3
749; SOFT-FLOAT-32R2-NEXT:    move $4, $2
750; SOFT-FLOAT-32R2-NEXT:    move $5, $3
751; SOFT-FLOAT-32R2-NEXT:    lw $23, 140($sp)
752; SOFT-FLOAT-32R2-NEXT:    lw $fp, 136($sp)
753; SOFT-FLOAT-32R2-NEXT:    lw $17, 108($sp)
754; SOFT-FLOAT-32R2-NEXT:    lw $18, 104($sp)
755; SOFT-FLOAT-32R2-NEXT:    lw $7, 148($sp)
756; SOFT-FLOAT-32R2-NEXT:    lw $6, 144($sp)
757; SOFT-FLOAT-32R2-NEXT:    sw $22, 28($16)
758; SOFT-FLOAT-32R2-NEXT:    sw $21, 24($16)
759; SOFT-FLOAT-32R2-NEXT:    sw $20, 20($16)
760; SOFT-FLOAT-32R2-NEXT:    jal __adddf3
761; SOFT-FLOAT-32R2-NEXT:    sw $19, 16($16)
762; SOFT-FLOAT-32R2-NEXT:    sw $3, 12($16)
763; SOFT-FLOAT-32R2-NEXT:    sw $2, 8($16)
764; SOFT-FLOAT-32R2-NEXT:    lw $4, 16($sp) # 4-byte Folded Reload
765; SOFT-FLOAT-32R2-NEXT:    lw $5, 20($sp) # 4-byte Folded Reload
766; SOFT-FLOAT-32R2-NEXT:    move $6, $18
767; SOFT-FLOAT-32R2-NEXT:    jal __muldf3
768; SOFT-FLOAT-32R2-NEXT:    move $7, $17
769; SOFT-FLOAT-32R2-NEXT:    move $4, $2
770; SOFT-FLOAT-32R2-NEXT:    move $5, $3
771; SOFT-FLOAT-32R2-NEXT:    move $6, $fp
772; SOFT-FLOAT-32R2-NEXT:    jal __adddf3
773; SOFT-FLOAT-32R2-NEXT:    move $7, $23
774; SOFT-FLOAT-32R2-NEXT:    sw $3, 4($16)
775; SOFT-FLOAT-32R2-NEXT:    sw $2, 0($16)
776; SOFT-FLOAT-32R2-NEXT:    lw $16, 24($sp) # 4-byte Folded Reload
777; SOFT-FLOAT-32R2-NEXT:    lw $17, 28($sp) # 4-byte Folded Reload
778; SOFT-FLOAT-32R2-NEXT:    lw $18, 32($sp) # 4-byte Folded Reload
779; SOFT-FLOAT-32R2-NEXT:    lw $19, 36($sp) # 4-byte Folded Reload
780; SOFT-FLOAT-32R2-NEXT:    lw $20, 40($sp) # 4-byte Folded Reload
781; SOFT-FLOAT-32R2-NEXT:    lw $21, 44($sp) # 4-byte Folded Reload
782; SOFT-FLOAT-32R2-NEXT:    lw $22, 48($sp) # 4-byte Folded Reload
783; SOFT-FLOAT-32R2-NEXT:    lw $23, 52($sp) # 4-byte Folded Reload
784; SOFT-FLOAT-32R2-NEXT:    lw $fp, 56($sp) # 4-byte Folded Reload
785; SOFT-FLOAT-32R2-NEXT:    lw $ra, 60($sp) # 4-byte Folded Reload
786; SOFT-FLOAT-32R2-NEXT:    jr $ra
787; SOFT-FLOAT-32R2-NEXT:    addiu $sp, $sp, 64
788;
789; SOFT-FLOAT-64-LABEL: fmuladd_contract_v4f64:
790; SOFT-FLOAT-64:       # %bb.0:
791; SOFT-FLOAT-64-NEXT:    daddiu $sp, $sp, -64
792; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 64
793; SOFT-FLOAT-64-NEXT:    sd $ra, 56($sp) # 8-byte Folded Spill
794; SOFT-FLOAT-64-NEXT:    sd $22, 48($sp) # 8-byte Folded Spill
795; SOFT-FLOAT-64-NEXT:    sd $21, 40($sp) # 8-byte Folded Spill
796; SOFT-FLOAT-64-NEXT:    sd $20, 32($sp) # 8-byte Folded Spill
797; SOFT-FLOAT-64-NEXT:    sd $19, 24($sp) # 8-byte Folded Spill
798; SOFT-FLOAT-64-NEXT:    sd $18, 16($sp) # 8-byte Folded Spill
799; SOFT-FLOAT-64-NEXT:    sd $17, 8($sp) # 8-byte Folded Spill
800; SOFT-FLOAT-64-NEXT:    sd $16, 0($sp) # 8-byte Folded Spill
801; SOFT-FLOAT-64-NEXT:    .cfi_offset 31, -8
802; SOFT-FLOAT-64-NEXT:    .cfi_offset 22, -16
803; SOFT-FLOAT-64-NEXT:    .cfi_offset 21, -24
804; SOFT-FLOAT-64-NEXT:    .cfi_offset 20, -32
805; SOFT-FLOAT-64-NEXT:    .cfi_offset 19, -40
806; SOFT-FLOAT-64-NEXT:    .cfi_offset 18, -48
807; SOFT-FLOAT-64-NEXT:    .cfi_offset 17, -56
808; SOFT-FLOAT-64-NEXT:    .cfi_offset 16, -64
809; SOFT-FLOAT-64-NEXT:    move $17, $10
810; SOFT-FLOAT-64-NEXT:    move $18, $9
811; SOFT-FLOAT-64-NEXT:    move $19, $8
812; SOFT-FLOAT-64-NEXT:    move $20, $6
813; SOFT-FLOAT-64-NEXT:    move $21, $5
814; SOFT-FLOAT-64-NEXT:    move $16, $4
815; SOFT-FLOAT-64-NEXT:    move $4, $7
816; SOFT-FLOAT-64-NEXT:    jal __muldf3
817; SOFT-FLOAT-64-NEXT:    move $5, $11
818; SOFT-FLOAT-64-NEXT:    ld $5, 88($sp)
819; SOFT-FLOAT-64-NEXT:    jal __adddf3
820; SOFT-FLOAT-64-NEXT:    move $4, $2
821; SOFT-FLOAT-64-NEXT:    move $22, $2
822; SOFT-FLOAT-64-NEXT:    ld $5, 64($sp)
823; SOFT-FLOAT-64-NEXT:    jal __muldf3
824; SOFT-FLOAT-64-NEXT:    move $4, $19
825; SOFT-FLOAT-64-NEXT:    ld $5, 96($sp)
826; SOFT-FLOAT-64-NEXT:    jal __adddf3
827; SOFT-FLOAT-64-NEXT:    move $4, $2
828; SOFT-FLOAT-64-NEXT:    move $19, $2
829; SOFT-FLOAT-64-NEXT:    move $4, $20
830; SOFT-FLOAT-64-NEXT:    jal __muldf3
831; SOFT-FLOAT-64-NEXT:    move $5, $17
832; SOFT-FLOAT-64-NEXT:    move $4, $2
833; SOFT-FLOAT-64-NEXT:    ld $17, 72($sp)
834; SOFT-FLOAT-64-NEXT:    ld $5, 80($sp)
835; SOFT-FLOAT-64-NEXT:    sd $19, 24($16)
836; SOFT-FLOAT-64-NEXT:    jal __adddf3
837; SOFT-FLOAT-64-NEXT:    sd $22, 16($16)
838; SOFT-FLOAT-64-NEXT:    sd $2, 8($16)
839; SOFT-FLOAT-64-NEXT:    move $4, $21
840; SOFT-FLOAT-64-NEXT:    jal __muldf3
841; SOFT-FLOAT-64-NEXT:    move $5, $18
842; SOFT-FLOAT-64-NEXT:    move $4, $2
843; SOFT-FLOAT-64-NEXT:    jal __adddf3
844; SOFT-FLOAT-64-NEXT:    move $5, $17
845; SOFT-FLOAT-64-NEXT:    sd $2, 0($16)
846; SOFT-FLOAT-64-NEXT:    ld $16, 0($sp) # 8-byte Folded Reload
847; SOFT-FLOAT-64-NEXT:    ld $17, 8($sp) # 8-byte Folded Reload
848; SOFT-FLOAT-64-NEXT:    ld $18, 16($sp) # 8-byte Folded Reload
849; SOFT-FLOAT-64-NEXT:    ld $19, 24($sp) # 8-byte Folded Reload
850; SOFT-FLOAT-64-NEXT:    ld $20, 32($sp) # 8-byte Folded Reload
851; SOFT-FLOAT-64-NEXT:    ld $21, 40($sp) # 8-byte Folded Reload
852; SOFT-FLOAT-64-NEXT:    ld $22, 48($sp) # 8-byte Folded Reload
853; SOFT-FLOAT-64-NEXT:    ld $ra, 56($sp) # 8-byte Folded Reload
854; SOFT-FLOAT-64-NEXT:    jr $ra
855; SOFT-FLOAT-64-NEXT:    daddiu $sp, $sp, 64
856;
857; SOFT-FLOAT-64R2-LABEL: fmuladd_contract_v4f64:
858; SOFT-FLOAT-64R2:       # %bb.0:
859; SOFT-FLOAT-64R2-NEXT:    daddiu $sp, $sp, -64
860; SOFT-FLOAT-64R2-NEXT:    .cfi_def_cfa_offset 64
861; SOFT-FLOAT-64R2-NEXT:    sd $ra, 56($sp) # 8-byte Folded Spill
862; SOFT-FLOAT-64R2-NEXT:    sd $22, 48($sp) # 8-byte Folded Spill
863; SOFT-FLOAT-64R2-NEXT:    sd $21, 40($sp) # 8-byte Folded Spill
864; SOFT-FLOAT-64R2-NEXT:    sd $20, 32($sp) # 8-byte Folded Spill
865; SOFT-FLOAT-64R2-NEXT:    sd $19, 24($sp) # 8-byte Folded Spill
866; SOFT-FLOAT-64R2-NEXT:    sd $18, 16($sp) # 8-byte Folded Spill
867; SOFT-FLOAT-64R2-NEXT:    sd $17, 8($sp) # 8-byte Folded Spill
868; SOFT-FLOAT-64R2-NEXT:    sd $16, 0($sp) # 8-byte Folded Spill
869; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 31, -8
870; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 22, -16
871; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 21, -24
872; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 20, -32
873; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 19, -40
874; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 18, -48
875; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 17, -56
876; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 16, -64
877; SOFT-FLOAT-64R2-NEXT:    move $17, $10
878; SOFT-FLOAT-64R2-NEXT:    move $18, $9
879; SOFT-FLOAT-64R2-NEXT:    move $19, $8
880; SOFT-FLOAT-64R2-NEXT:    move $20, $6
881; SOFT-FLOAT-64R2-NEXT:    move $21, $5
882; SOFT-FLOAT-64R2-NEXT:    move $16, $4
883; SOFT-FLOAT-64R2-NEXT:    move $4, $7
884; SOFT-FLOAT-64R2-NEXT:    jal __muldf3
885; SOFT-FLOAT-64R2-NEXT:    move $5, $11
886; SOFT-FLOAT-64R2-NEXT:    ld $5, 88($sp)
887; SOFT-FLOAT-64R2-NEXT:    jal __adddf3
888; SOFT-FLOAT-64R2-NEXT:    move $4, $2
889; SOFT-FLOAT-64R2-NEXT:    move $22, $2
890; SOFT-FLOAT-64R2-NEXT:    ld $5, 64($sp)
891; SOFT-FLOAT-64R2-NEXT:    jal __muldf3
892; SOFT-FLOAT-64R2-NEXT:    move $4, $19
893; SOFT-FLOAT-64R2-NEXT:    ld $5, 96($sp)
894; SOFT-FLOAT-64R2-NEXT:    jal __adddf3
895; SOFT-FLOAT-64R2-NEXT:    move $4, $2
896; SOFT-FLOAT-64R2-NEXT:    move $19, $2
897; SOFT-FLOAT-64R2-NEXT:    move $4, $20
898; SOFT-FLOAT-64R2-NEXT:    jal __muldf3
899; SOFT-FLOAT-64R2-NEXT:    move $5, $17
900; SOFT-FLOAT-64R2-NEXT:    move $4, $2
901; SOFT-FLOAT-64R2-NEXT:    ld $17, 72($sp)
902; SOFT-FLOAT-64R2-NEXT:    ld $5, 80($sp)
903; SOFT-FLOAT-64R2-NEXT:    sd $19, 24($16)
904; SOFT-FLOAT-64R2-NEXT:    jal __adddf3
905; SOFT-FLOAT-64R2-NEXT:    sd $22, 16($16)
906; SOFT-FLOAT-64R2-NEXT:    sd $2, 8($16)
907; SOFT-FLOAT-64R2-NEXT:    move $4, $21
908; SOFT-FLOAT-64R2-NEXT:    jal __muldf3
909; SOFT-FLOAT-64R2-NEXT:    move $5, $18
910; SOFT-FLOAT-64R2-NEXT:    move $4, $2
911; SOFT-FLOAT-64R2-NEXT:    jal __adddf3
912; SOFT-FLOAT-64R2-NEXT:    move $5, $17
913; SOFT-FLOAT-64R2-NEXT:    sd $2, 0($16)
914; SOFT-FLOAT-64R2-NEXT:    ld $16, 0($sp) # 8-byte Folded Reload
915; SOFT-FLOAT-64R2-NEXT:    ld $17, 8($sp) # 8-byte Folded Reload
916; SOFT-FLOAT-64R2-NEXT:    ld $18, 16($sp) # 8-byte Folded Reload
917; SOFT-FLOAT-64R2-NEXT:    ld $19, 24($sp) # 8-byte Folded Reload
918; SOFT-FLOAT-64R2-NEXT:    ld $20, 32($sp) # 8-byte Folded Reload
919; SOFT-FLOAT-64R2-NEXT:    ld $21, 40($sp) # 8-byte Folded Reload
920; SOFT-FLOAT-64R2-NEXT:    ld $22, 48($sp) # 8-byte Folded Reload
921; SOFT-FLOAT-64R2-NEXT:    ld $ra, 56($sp) # 8-byte Folded Reload
922; SOFT-FLOAT-64R2-NEXT:    jr $ra
923; SOFT-FLOAT-64R2-NEXT:    daddiu $sp, $sp, 64
924  %product = fmul contract <4 x double> %a, %b
925  %result = fadd contract <4 x double> %product, %c
926  ret <4 x double> %result
927}
928
929attributes #0 = { "use-soft-float"="true" }
930
931declare float @llvm.fmuladd.f32(float %a, float %b, float %c)
932declare double @llvm.fmuladd.f64(double %a, double %b, double %c)
933