[RISCV] Add shrinkwrap test cases showing gaps in current impl
[llvm-project.git] / llvm / test / CodeGen / X86 / fmuladd-soft-float.ll
blobccb2f37590b0ad37ee668dd2399e77da8626e354
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2 ; RUN: llc -mtriple=i386 < %s | FileCheck %s -check-prefix=SOFT-FLOAT-32
3 ; RUN: llc -mtriple=i386 -mattr +fma < %s | FileCheck %s -check-prefix=SOFT-FLOAT-32-FMA
4 ; RUN: llc -mtriple=i386 -mattr +fma4 < %s | FileCheck %s -check-prefix=SOFT-FLOAT-32-FMA4
5 ; RUN: llc -mtriple=x86_64 < %s | FileCheck %s -check-prefix=SOFT-FLOAT-64
6 ; RUN: llc -mtriple=x86_64 -mattr +fma < %s | FileCheck %s -check-prefix=SOFT-FLOAT-64-FMA
7 ; RUN: llc -mtriple=x86_64 -mattr +fma4 < %s | FileCheck %s -check-prefix=SOFT-FLOAT-64-FMA4
9 define float @fmuladd_intrinsic_f32(float %a, float %b, float %c) #0 {
10 ; SOFT-FLOAT-32-LABEL: fmuladd_intrinsic_f32:
11 ; SOFT-FLOAT-32:       # %bb.0:
12 ; SOFT-FLOAT-32-NEXT:    pushl %esi
13 ; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 8
14 ; SOFT-FLOAT-32-NEXT:    .cfi_offset %esi, -8
15 ; SOFT-FLOAT-32-NEXT:    movl {{[0-9]+}}(%esp), %esi
16 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
17 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
18 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
19 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
20 ; SOFT-FLOAT-32-NEXT:    calll __mulsf3
21 ; SOFT-FLOAT-32-NEXT:    addl $8, %esp
22 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset -8
23 ; SOFT-FLOAT-32-NEXT:    pushl %esi
24 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
25 ; SOFT-FLOAT-32-NEXT:    pushl %eax
26 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
27 ; SOFT-FLOAT-32-NEXT:    calll __addsf3
28 ; SOFT-FLOAT-32-NEXT:    addl $8, %esp
29 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset -8
30 ; SOFT-FLOAT-32-NEXT:    popl %esi
31 ; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 4
32 ; SOFT-FLOAT-32-NEXT:    retl
34 ; SOFT-FLOAT-32-FMA-LABEL: fmuladd_intrinsic_f32:
35 ; SOFT-FLOAT-32-FMA:       # %bb.0:
36 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %esi
37 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_def_cfa_offset 8
38 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_offset %esi, -8
39 ; SOFT-FLOAT-32-FMA-NEXT:    movl {{[0-9]+}}(%esp), %esi
40 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
41 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
42 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
43 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
44 ; SOFT-FLOAT-32-FMA-NEXT:    calll __mulsf3
45 ; SOFT-FLOAT-32-FMA-NEXT:    addl $8, %esp
46 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset -8
47 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %esi
48 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
49 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %eax
50 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
51 ; SOFT-FLOAT-32-FMA-NEXT:    calll __addsf3
52 ; SOFT-FLOAT-32-FMA-NEXT:    addl $8, %esp
53 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset -8
54 ; SOFT-FLOAT-32-FMA-NEXT:    popl %esi
55 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_def_cfa_offset 4
56 ; SOFT-FLOAT-32-FMA-NEXT:    retl
58 ; SOFT-FLOAT-32-FMA4-LABEL: fmuladd_intrinsic_f32:
59 ; SOFT-FLOAT-32-FMA4:       # %bb.0:
60 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %esi
61 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_def_cfa_offset 8
62 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_offset %esi, -8
63 ; SOFT-FLOAT-32-FMA4-NEXT:    movl {{[0-9]+}}(%esp), %esi
64 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
65 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
66 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
67 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
68 ; SOFT-FLOAT-32-FMA4-NEXT:    calll __mulsf3
69 ; SOFT-FLOAT-32-FMA4-NEXT:    addl $8, %esp
70 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset -8
71 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %esi
72 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
73 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %eax
74 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
75 ; SOFT-FLOAT-32-FMA4-NEXT:    calll __addsf3
76 ; SOFT-FLOAT-32-FMA4-NEXT:    addl $8, %esp
77 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset -8
78 ; SOFT-FLOAT-32-FMA4-NEXT:    popl %esi
79 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_def_cfa_offset 4
80 ; SOFT-FLOAT-32-FMA4-NEXT:    retl
82 ; SOFT-FLOAT-64-LABEL: fmuladd_intrinsic_f32:
83 ; SOFT-FLOAT-64:       # %bb.0:
84 ; SOFT-FLOAT-64-NEXT:    pushq %rbx
85 ; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 16
86 ; SOFT-FLOAT-64-NEXT:    .cfi_offset %rbx, -16
87 ; SOFT-FLOAT-64-NEXT:    movl %edx, %ebx
88 ; SOFT-FLOAT-64-NEXT:    callq __mulsf3@PLT
89 ; SOFT-FLOAT-64-NEXT:    movl %eax, %edi
90 ; SOFT-FLOAT-64-NEXT:    movl %ebx, %esi
91 ; SOFT-FLOAT-64-NEXT:    callq __addsf3@PLT
92 ; SOFT-FLOAT-64-NEXT:    popq %rbx
93 ; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 8
94 ; SOFT-FLOAT-64-NEXT:    retq
96 ; SOFT-FLOAT-64-FMA-LABEL: fmuladd_intrinsic_f32:
97 ; SOFT-FLOAT-64-FMA:       # %bb.0:
98 ; SOFT-FLOAT-64-FMA-NEXT:    pushq %rbx
99 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_def_cfa_offset 16
100 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_offset %rbx, -16
101 ; SOFT-FLOAT-64-FMA-NEXT:    movl %edx, %ebx
102 ; SOFT-FLOAT-64-FMA-NEXT:    callq __mulsf3@PLT
103 ; SOFT-FLOAT-64-FMA-NEXT:    movl %eax, %edi
104 ; SOFT-FLOAT-64-FMA-NEXT:    movl %ebx, %esi
105 ; SOFT-FLOAT-64-FMA-NEXT:    callq __addsf3@PLT
106 ; SOFT-FLOAT-64-FMA-NEXT:    popq %rbx
107 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_def_cfa_offset 8
108 ; SOFT-FLOAT-64-FMA-NEXT:    retq
110 ; SOFT-FLOAT-64-FMA4-LABEL: fmuladd_intrinsic_f32:
111 ; SOFT-FLOAT-64-FMA4:       # %bb.0:
112 ; SOFT-FLOAT-64-FMA4-NEXT:    pushq %rbx
113 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_def_cfa_offset 16
114 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_offset %rbx, -16
115 ; SOFT-FLOAT-64-FMA4-NEXT:    movl %edx, %ebx
116 ; SOFT-FLOAT-64-FMA4-NEXT:    callq __mulsf3@PLT
117 ; SOFT-FLOAT-64-FMA4-NEXT:    movl %eax, %edi
118 ; SOFT-FLOAT-64-FMA4-NEXT:    movl %ebx, %esi
119 ; SOFT-FLOAT-64-FMA4-NEXT:    callq __addsf3@PLT
120 ; SOFT-FLOAT-64-FMA4-NEXT:    popq %rbx
121 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_def_cfa_offset 8
122 ; SOFT-FLOAT-64-FMA4-NEXT:    retq
123   %result = call float @llvm.fmuladd.f32(float %a, float %b, float %c)
124   ret float %result
127 define double @fmuladd_intrinsic_f64(double %a, double %b, double %c) #0 {
128 ; SOFT-FLOAT-32-LABEL: fmuladd_intrinsic_f64:
129 ; SOFT-FLOAT-32:       # %bb.0:
130 ; SOFT-FLOAT-32-NEXT:    pushl %edi
131 ; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 8
132 ; SOFT-FLOAT-32-NEXT:    pushl %esi
133 ; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 12
134 ; SOFT-FLOAT-32-NEXT:    .cfi_offset %esi, -12
135 ; SOFT-FLOAT-32-NEXT:    .cfi_offset %edi, -8
136 ; SOFT-FLOAT-32-NEXT:    movl {{[0-9]+}}(%esp), %esi
137 ; SOFT-FLOAT-32-NEXT:    movl {{[0-9]+}}(%esp), %edi
138 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
139 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
140 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
141 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
142 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
143 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
144 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
145 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
146 ; SOFT-FLOAT-32-NEXT:    calll __muldf3
147 ; SOFT-FLOAT-32-NEXT:    addl $16, %esp
148 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset -16
149 ; SOFT-FLOAT-32-NEXT:    pushl %edi
150 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
151 ; SOFT-FLOAT-32-NEXT:    pushl %esi
152 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
153 ; SOFT-FLOAT-32-NEXT:    pushl %edx
154 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
155 ; SOFT-FLOAT-32-NEXT:    pushl %eax
156 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
157 ; SOFT-FLOAT-32-NEXT:    calll __adddf3
158 ; SOFT-FLOAT-32-NEXT:    addl $16, %esp
159 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset -16
160 ; SOFT-FLOAT-32-NEXT:    popl %esi
161 ; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 8
162 ; SOFT-FLOAT-32-NEXT:    popl %edi
163 ; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 4
164 ; SOFT-FLOAT-32-NEXT:    retl
166 ; SOFT-FLOAT-32-FMA-LABEL: fmuladd_intrinsic_f64:
167 ; SOFT-FLOAT-32-FMA:       # %bb.0:
168 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %edi
169 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_def_cfa_offset 8
170 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %esi
171 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_def_cfa_offset 12
172 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_offset %esi, -12
173 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_offset %edi, -8
174 ; SOFT-FLOAT-32-FMA-NEXT:    movl {{[0-9]+}}(%esp), %esi
175 ; SOFT-FLOAT-32-FMA-NEXT:    movl {{[0-9]+}}(%esp), %edi
176 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
177 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
178 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
179 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
180 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
181 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
182 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
183 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
184 ; SOFT-FLOAT-32-FMA-NEXT:    calll __muldf3
185 ; SOFT-FLOAT-32-FMA-NEXT:    addl $16, %esp
186 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset -16
187 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %edi
188 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
189 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %esi
190 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
191 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %edx
192 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
193 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %eax
194 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
195 ; SOFT-FLOAT-32-FMA-NEXT:    calll __adddf3
196 ; SOFT-FLOAT-32-FMA-NEXT:    addl $16, %esp
197 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset -16
198 ; SOFT-FLOAT-32-FMA-NEXT:    popl %esi
199 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_def_cfa_offset 8
200 ; SOFT-FLOAT-32-FMA-NEXT:    popl %edi
201 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_def_cfa_offset 4
202 ; SOFT-FLOAT-32-FMA-NEXT:    retl
204 ; SOFT-FLOAT-32-FMA4-LABEL: fmuladd_intrinsic_f64:
205 ; SOFT-FLOAT-32-FMA4:       # %bb.0:
206 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %edi
207 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_def_cfa_offset 8
208 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %esi
209 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_def_cfa_offset 12
210 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_offset %esi, -12
211 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_offset %edi, -8
212 ; SOFT-FLOAT-32-FMA4-NEXT:    movl {{[0-9]+}}(%esp), %esi
213 ; SOFT-FLOAT-32-FMA4-NEXT:    movl {{[0-9]+}}(%esp), %edi
214 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
215 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
216 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
217 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
218 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
219 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
220 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
221 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
222 ; SOFT-FLOAT-32-FMA4-NEXT:    calll __muldf3
223 ; SOFT-FLOAT-32-FMA4-NEXT:    addl $16, %esp
224 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset -16
225 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %edi
226 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
227 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %esi
228 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
229 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %edx
230 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
231 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %eax
232 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
233 ; SOFT-FLOAT-32-FMA4-NEXT:    calll __adddf3
234 ; SOFT-FLOAT-32-FMA4-NEXT:    addl $16, %esp
235 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset -16
236 ; SOFT-FLOAT-32-FMA4-NEXT:    popl %esi
237 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_def_cfa_offset 8
238 ; SOFT-FLOAT-32-FMA4-NEXT:    popl %edi
239 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_def_cfa_offset 4
240 ; SOFT-FLOAT-32-FMA4-NEXT:    retl
242 ; SOFT-FLOAT-64-LABEL: fmuladd_intrinsic_f64:
243 ; SOFT-FLOAT-64:       # %bb.0:
244 ; SOFT-FLOAT-64-NEXT:    pushq %rbx
245 ; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 16
246 ; SOFT-FLOAT-64-NEXT:    .cfi_offset %rbx, -16
247 ; SOFT-FLOAT-64-NEXT:    movq %rdx, %rbx
248 ; SOFT-FLOAT-64-NEXT:    callq __muldf3@PLT
249 ; SOFT-FLOAT-64-NEXT:    movq %rax, %rdi
250 ; SOFT-FLOAT-64-NEXT:    movq %rbx, %rsi
251 ; SOFT-FLOAT-64-NEXT:    callq __adddf3@PLT
252 ; SOFT-FLOAT-64-NEXT:    popq %rbx
253 ; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 8
254 ; SOFT-FLOAT-64-NEXT:    retq
256 ; SOFT-FLOAT-64-FMA-LABEL: fmuladd_intrinsic_f64:
257 ; SOFT-FLOAT-64-FMA:       # %bb.0:
258 ; SOFT-FLOAT-64-FMA-NEXT:    pushq %rbx
259 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_def_cfa_offset 16
260 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_offset %rbx, -16
261 ; SOFT-FLOAT-64-FMA-NEXT:    movq %rdx, %rbx
262 ; SOFT-FLOAT-64-FMA-NEXT:    callq __muldf3@PLT
263 ; SOFT-FLOAT-64-FMA-NEXT:    movq %rax, %rdi
264 ; SOFT-FLOAT-64-FMA-NEXT:    movq %rbx, %rsi
265 ; SOFT-FLOAT-64-FMA-NEXT:    callq __adddf3@PLT
266 ; SOFT-FLOAT-64-FMA-NEXT:    popq %rbx
267 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_def_cfa_offset 8
268 ; SOFT-FLOAT-64-FMA-NEXT:    retq
270 ; SOFT-FLOAT-64-FMA4-LABEL: fmuladd_intrinsic_f64:
271 ; SOFT-FLOAT-64-FMA4:       # %bb.0:
272 ; SOFT-FLOAT-64-FMA4-NEXT:    pushq %rbx
273 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_def_cfa_offset 16
274 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_offset %rbx, -16
275 ; SOFT-FLOAT-64-FMA4-NEXT:    movq %rdx, %rbx
276 ; SOFT-FLOAT-64-FMA4-NEXT:    callq __muldf3@PLT
277 ; SOFT-FLOAT-64-FMA4-NEXT:    movq %rax, %rdi
278 ; SOFT-FLOAT-64-FMA4-NEXT:    movq %rbx, %rsi
279 ; SOFT-FLOAT-64-FMA4-NEXT:    callq __adddf3@PLT
280 ; SOFT-FLOAT-64-FMA4-NEXT:    popq %rbx
281 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_def_cfa_offset 8
282 ; SOFT-FLOAT-64-FMA4-NEXT:    retq
283   %result = call double @llvm.fmuladd.f64(double %a, double %b, double %c)
284   ret double %result
287 define float @fmuladd_contract_f32(float %a, float %b, float %c) #0 {
288 ; SOFT-FLOAT-32-LABEL: fmuladd_contract_f32:
289 ; SOFT-FLOAT-32:       # %bb.0:
290 ; SOFT-FLOAT-32-NEXT:    pushl %esi
291 ; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 8
292 ; SOFT-FLOAT-32-NEXT:    .cfi_offset %esi, -8
293 ; SOFT-FLOAT-32-NEXT:    movl {{[0-9]+}}(%esp), %esi
294 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
295 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
296 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
297 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
298 ; SOFT-FLOAT-32-NEXT:    calll __mulsf3
299 ; SOFT-FLOAT-32-NEXT:    addl $8, %esp
300 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset -8
301 ; SOFT-FLOAT-32-NEXT:    pushl %esi
302 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
303 ; SOFT-FLOAT-32-NEXT:    pushl %eax
304 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
305 ; SOFT-FLOAT-32-NEXT:    calll __addsf3
306 ; SOFT-FLOAT-32-NEXT:    addl $8, %esp
307 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset -8
308 ; SOFT-FLOAT-32-NEXT:    popl %esi
309 ; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 4
310 ; SOFT-FLOAT-32-NEXT:    retl
312 ; SOFT-FLOAT-32-FMA-LABEL: fmuladd_contract_f32:
313 ; SOFT-FLOAT-32-FMA:       # %bb.0:
314 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %esi
315 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_def_cfa_offset 8
316 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_offset %esi, -8
317 ; SOFT-FLOAT-32-FMA-NEXT:    movl {{[0-9]+}}(%esp), %esi
318 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
319 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
320 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
321 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
322 ; SOFT-FLOAT-32-FMA-NEXT:    calll __mulsf3
323 ; SOFT-FLOAT-32-FMA-NEXT:    addl $8, %esp
324 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset -8
325 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %esi
326 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
327 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %eax
328 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
329 ; SOFT-FLOAT-32-FMA-NEXT:    calll __addsf3
330 ; SOFT-FLOAT-32-FMA-NEXT:    addl $8, %esp
331 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset -8
332 ; SOFT-FLOAT-32-FMA-NEXT:    popl %esi
333 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_def_cfa_offset 4
334 ; SOFT-FLOAT-32-FMA-NEXT:    retl
336 ; SOFT-FLOAT-32-FMA4-LABEL: fmuladd_contract_f32:
337 ; SOFT-FLOAT-32-FMA4:       # %bb.0:
338 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %esi
339 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_def_cfa_offset 8
340 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_offset %esi, -8
341 ; SOFT-FLOAT-32-FMA4-NEXT:    movl {{[0-9]+}}(%esp), %esi
342 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
343 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
344 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
345 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
346 ; SOFT-FLOAT-32-FMA4-NEXT:    calll __mulsf3
347 ; SOFT-FLOAT-32-FMA4-NEXT:    addl $8, %esp
348 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset -8
349 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %esi
350 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
351 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %eax
352 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
353 ; SOFT-FLOAT-32-FMA4-NEXT:    calll __addsf3
354 ; SOFT-FLOAT-32-FMA4-NEXT:    addl $8, %esp
355 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset -8
356 ; SOFT-FLOAT-32-FMA4-NEXT:    popl %esi
357 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_def_cfa_offset 4
358 ; SOFT-FLOAT-32-FMA4-NEXT:    retl
360 ; SOFT-FLOAT-64-LABEL: fmuladd_contract_f32:
361 ; SOFT-FLOAT-64:       # %bb.0:
362 ; SOFT-FLOAT-64-NEXT:    pushq %rbx
363 ; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 16
364 ; SOFT-FLOAT-64-NEXT:    .cfi_offset %rbx, -16
365 ; SOFT-FLOAT-64-NEXT:    movl %edx, %ebx
366 ; SOFT-FLOAT-64-NEXT:    callq __mulsf3@PLT
367 ; SOFT-FLOAT-64-NEXT:    movl %eax, %edi
368 ; SOFT-FLOAT-64-NEXT:    movl %ebx, %esi
369 ; SOFT-FLOAT-64-NEXT:    callq __addsf3@PLT
370 ; SOFT-FLOAT-64-NEXT:    popq %rbx
371 ; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 8
372 ; SOFT-FLOAT-64-NEXT:    retq
374 ; SOFT-FLOAT-64-FMA-LABEL: fmuladd_contract_f32:
375 ; SOFT-FLOAT-64-FMA:       # %bb.0:
376 ; SOFT-FLOAT-64-FMA-NEXT:    pushq %rbx
377 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_def_cfa_offset 16
378 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_offset %rbx, -16
379 ; SOFT-FLOAT-64-FMA-NEXT:    movl %edx, %ebx
380 ; SOFT-FLOAT-64-FMA-NEXT:    callq __mulsf3@PLT
381 ; SOFT-FLOAT-64-FMA-NEXT:    movl %eax, %edi
382 ; SOFT-FLOAT-64-FMA-NEXT:    movl %ebx, %esi
383 ; SOFT-FLOAT-64-FMA-NEXT:    callq __addsf3@PLT
384 ; SOFT-FLOAT-64-FMA-NEXT:    popq %rbx
385 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_def_cfa_offset 8
386 ; SOFT-FLOAT-64-FMA-NEXT:    retq
388 ; SOFT-FLOAT-64-FMA4-LABEL: fmuladd_contract_f32:
389 ; SOFT-FLOAT-64-FMA4:       # %bb.0:
390 ; SOFT-FLOAT-64-FMA4-NEXT:    pushq %rbx
391 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_def_cfa_offset 16
392 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_offset %rbx, -16
393 ; SOFT-FLOAT-64-FMA4-NEXT:    movl %edx, %ebx
394 ; SOFT-FLOAT-64-FMA4-NEXT:    callq __mulsf3@PLT
395 ; SOFT-FLOAT-64-FMA4-NEXT:    movl %eax, %edi
396 ; SOFT-FLOAT-64-FMA4-NEXT:    movl %ebx, %esi
397 ; SOFT-FLOAT-64-FMA4-NEXT:    callq __addsf3@PLT
398 ; SOFT-FLOAT-64-FMA4-NEXT:    popq %rbx
399 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_def_cfa_offset 8
400 ; SOFT-FLOAT-64-FMA4-NEXT:    retq
401   %product = fmul contract float %a, %b
402   %result = fadd contract float %product, %c
403   ret float %result
406 define double @fmuladd_contract_f64(double %a, double %b, double %c) #0 {
407 ; SOFT-FLOAT-32-LABEL: fmuladd_contract_f64:
408 ; SOFT-FLOAT-32:       # %bb.0:
409 ; SOFT-FLOAT-32-NEXT:    pushl %edi
410 ; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 8
411 ; SOFT-FLOAT-32-NEXT:    pushl %esi
412 ; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 12
413 ; SOFT-FLOAT-32-NEXT:    .cfi_offset %esi, -12
414 ; SOFT-FLOAT-32-NEXT:    .cfi_offset %edi, -8
415 ; SOFT-FLOAT-32-NEXT:    movl {{[0-9]+}}(%esp), %esi
416 ; SOFT-FLOAT-32-NEXT:    movl {{[0-9]+}}(%esp), %edi
417 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
418 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
419 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
420 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
421 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
422 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
423 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
424 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
425 ; SOFT-FLOAT-32-NEXT:    calll __muldf3
426 ; SOFT-FLOAT-32-NEXT:    addl $16, %esp
427 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset -16
428 ; SOFT-FLOAT-32-NEXT:    pushl %edi
429 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
430 ; SOFT-FLOAT-32-NEXT:    pushl %esi
431 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
432 ; SOFT-FLOAT-32-NEXT:    pushl %edx
433 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
434 ; SOFT-FLOAT-32-NEXT:    pushl %eax
435 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
436 ; SOFT-FLOAT-32-NEXT:    calll __adddf3
437 ; SOFT-FLOAT-32-NEXT:    addl $16, %esp
438 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset -16
439 ; SOFT-FLOAT-32-NEXT:    popl %esi
440 ; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 8
441 ; SOFT-FLOAT-32-NEXT:    popl %edi
442 ; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 4
443 ; SOFT-FLOAT-32-NEXT:    retl
445 ; SOFT-FLOAT-32-FMA-LABEL: fmuladd_contract_f64:
446 ; SOFT-FLOAT-32-FMA:       # %bb.0:
447 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %edi
448 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_def_cfa_offset 8
449 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %esi
450 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_def_cfa_offset 12
451 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_offset %esi, -12
452 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_offset %edi, -8
453 ; SOFT-FLOAT-32-FMA-NEXT:    movl {{[0-9]+}}(%esp), %esi
454 ; SOFT-FLOAT-32-FMA-NEXT:    movl {{[0-9]+}}(%esp), %edi
455 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
456 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
457 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
458 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
459 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
460 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
461 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
462 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
463 ; SOFT-FLOAT-32-FMA-NEXT:    calll __muldf3
464 ; SOFT-FLOAT-32-FMA-NEXT:    addl $16, %esp
465 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset -16
466 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %edi
467 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
468 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %esi
469 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
470 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %edx
471 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
472 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %eax
473 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
474 ; SOFT-FLOAT-32-FMA-NEXT:    calll __adddf3
475 ; SOFT-FLOAT-32-FMA-NEXT:    addl $16, %esp
476 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset -16
477 ; SOFT-FLOAT-32-FMA-NEXT:    popl %esi
478 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_def_cfa_offset 8
479 ; SOFT-FLOAT-32-FMA-NEXT:    popl %edi
480 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_def_cfa_offset 4
481 ; SOFT-FLOAT-32-FMA-NEXT:    retl
483 ; SOFT-FLOAT-32-FMA4-LABEL: fmuladd_contract_f64:
484 ; SOFT-FLOAT-32-FMA4:       # %bb.0:
485 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %edi
486 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_def_cfa_offset 8
487 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %esi
488 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_def_cfa_offset 12
489 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_offset %esi, -12
490 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_offset %edi, -8
491 ; SOFT-FLOAT-32-FMA4-NEXT:    movl {{[0-9]+}}(%esp), %esi
492 ; SOFT-FLOAT-32-FMA4-NEXT:    movl {{[0-9]+}}(%esp), %edi
493 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
494 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
495 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
496 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
497 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
498 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
499 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
500 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
501 ; SOFT-FLOAT-32-FMA4-NEXT:    calll __muldf3
502 ; SOFT-FLOAT-32-FMA4-NEXT:    addl $16, %esp
503 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset -16
504 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %edi
505 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
506 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %esi
507 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
508 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %edx
509 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
510 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %eax
511 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
512 ; SOFT-FLOAT-32-FMA4-NEXT:    calll __adddf3
513 ; SOFT-FLOAT-32-FMA4-NEXT:    addl $16, %esp
514 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset -16
515 ; SOFT-FLOAT-32-FMA4-NEXT:    popl %esi
516 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_def_cfa_offset 8
517 ; SOFT-FLOAT-32-FMA4-NEXT:    popl %edi
518 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_def_cfa_offset 4
519 ; SOFT-FLOAT-32-FMA4-NEXT:    retl
521 ; SOFT-FLOAT-64-LABEL: fmuladd_contract_f64:
522 ; SOFT-FLOAT-64:       # %bb.0:
523 ; SOFT-FLOAT-64-NEXT:    pushq %rbx
524 ; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 16
525 ; SOFT-FLOAT-64-NEXT:    .cfi_offset %rbx, -16
526 ; SOFT-FLOAT-64-NEXT:    movq %rdx, %rbx
527 ; SOFT-FLOAT-64-NEXT:    callq __muldf3@PLT
528 ; SOFT-FLOAT-64-NEXT:    movq %rax, %rdi
529 ; SOFT-FLOAT-64-NEXT:    movq %rbx, %rsi
530 ; SOFT-FLOAT-64-NEXT:    callq __adddf3@PLT
531 ; SOFT-FLOAT-64-NEXT:    popq %rbx
532 ; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 8
533 ; SOFT-FLOAT-64-NEXT:    retq
535 ; SOFT-FLOAT-64-FMA-LABEL: fmuladd_contract_f64:
536 ; SOFT-FLOAT-64-FMA:       # %bb.0:
537 ; SOFT-FLOAT-64-FMA-NEXT:    pushq %rbx
538 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_def_cfa_offset 16
539 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_offset %rbx, -16
540 ; SOFT-FLOAT-64-FMA-NEXT:    movq %rdx, %rbx
541 ; SOFT-FLOAT-64-FMA-NEXT:    callq __muldf3@PLT
542 ; SOFT-FLOAT-64-FMA-NEXT:    movq %rax, %rdi
543 ; SOFT-FLOAT-64-FMA-NEXT:    movq %rbx, %rsi
544 ; SOFT-FLOAT-64-FMA-NEXT:    callq __adddf3@PLT
545 ; SOFT-FLOAT-64-FMA-NEXT:    popq %rbx
546 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_def_cfa_offset 8
547 ; SOFT-FLOAT-64-FMA-NEXT:    retq
549 ; SOFT-FLOAT-64-FMA4-LABEL: fmuladd_contract_f64:
550 ; SOFT-FLOAT-64-FMA4:       # %bb.0:
551 ; SOFT-FLOAT-64-FMA4-NEXT:    pushq %rbx
552 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_def_cfa_offset 16
553 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_offset %rbx, -16
554 ; SOFT-FLOAT-64-FMA4-NEXT:    movq %rdx, %rbx
555 ; SOFT-FLOAT-64-FMA4-NEXT:    callq __muldf3@PLT
556 ; SOFT-FLOAT-64-FMA4-NEXT:    movq %rax, %rdi
557 ; SOFT-FLOAT-64-FMA4-NEXT:    movq %rbx, %rsi
558 ; SOFT-FLOAT-64-FMA4-NEXT:    callq __adddf3@PLT
559 ; SOFT-FLOAT-64-FMA4-NEXT:    popq %rbx
560 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_def_cfa_offset 8
561 ; SOFT-FLOAT-64-FMA4-NEXT:    retq
562   %product = fmul contract double %a, %b
563   %result = fadd contract double %product, %c
564   ret double %result
567 define <4 x float> @fmuladd_contract_v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %c) #0 {
568 ; SOFT-FLOAT-32-LABEL: fmuladd_contract_v4f32:
569 ; SOFT-FLOAT-32:       # %bb.0:
570 ; SOFT-FLOAT-32-NEXT:    pushl %ebp
571 ; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 8
572 ; SOFT-FLOAT-32-NEXT:    pushl %ebx
573 ; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 12
574 ; SOFT-FLOAT-32-NEXT:    pushl %edi
575 ; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 16
576 ; SOFT-FLOAT-32-NEXT:    pushl %esi
577 ; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 20
578 ; SOFT-FLOAT-32-NEXT:    pushl %eax
579 ; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 24
580 ; SOFT-FLOAT-32-NEXT:    .cfi_offset %esi, -20
581 ; SOFT-FLOAT-32-NEXT:    .cfi_offset %edi, -16
582 ; SOFT-FLOAT-32-NEXT:    .cfi_offset %ebx, -12
583 ; SOFT-FLOAT-32-NEXT:    .cfi_offset %ebp, -8
584 ; SOFT-FLOAT-32-NEXT:    movl {{[0-9]+}}(%esp), %esi
585 ; SOFT-FLOAT-32-NEXT:    movl {{[0-9]+}}(%esp), %ebp
586 ; SOFT-FLOAT-32-NEXT:    movl {{[0-9]+}}(%esp), %ebx
587 ; SOFT-FLOAT-32-NEXT:    movl {{[0-9]+}}(%esp), %edi
588 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
589 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
590 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
591 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
592 ; SOFT-FLOAT-32-NEXT:    calll __mulsf3
593 ; SOFT-FLOAT-32-NEXT:    addl $8, %esp
594 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset -8
595 ; SOFT-FLOAT-32-NEXT:    movl %eax, (%esp) # 4-byte Spill
596 ; SOFT-FLOAT-32-NEXT:    pushl %edi
597 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
598 ; SOFT-FLOAT-32-NEXT:    pushl %ebx
599 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
600 ; SOFT-FLOAT-32-NEXT:    calll __mulsf3
601 ; SOFT-FLOAT-32-NEXT:    addl $8, %esp
602 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset -8
603 ; SOFT-FLOAT-32-NEXT:    movl %eax, %ebx
604 ; SOFT-FLOAT-32-NEXT:    pushl %ebp
605 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
606 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
607 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
608 ; SOFT-FLOAT-32-NEXT:    calll __mulsf3
609 ; SOFT-FLOAT-32-NEXT:    addl $8, %esp
610 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset -8
611 ; SOFT-FLOAT-32-NEXT:    movl %eax, %edi
612 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
613 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
614 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
615 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
616 ; SOFT-FLOAT-32-NEXT:    calll __mulsf3
617 ; SOFT-FLOAT-32-NEXT:    addl $8, %esp
618 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset -8
619 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
620 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
621 ; SOFT-FLOAT-32-NEXT:    pushl %eax
622 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
623 ; SOFT-FLOAT-32-NEXT:    calll __addsf3
624 ; SOFT-FLOAT-32-NEXT:    addl $8, %esp
625 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset -8
626 ; SOFT-FLOAT-32-NEXT:    movl %eax, %ebp
627 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
628 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
629 ; SOFT-FLOAT-32-NEXT:    pushl %edi
630 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
631 ; SOFT-FLOAT-32-NEXT:    calll __addsf3
632 ; SOFT-FLOAT-32-NEXT:    addl $8, %esp
633 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset -8
634 ; SOFT-FLOAT-32-NEXT:    movl %eax, %edi
635 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
636 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
637 ; SOFT-FLOAT-32-NEXT:    pushl %ebx
638 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
639 ; SOFT-FLOAT-32-NEXT:    calll __addsf3
640 ; SOFT-FLOAT-32-NEXT:    addl $8, %esp
641 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset -8
642 ; SOFT-FLOAT-32-NEXT:    movl %eax, %ebx
643 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
644 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
645 ; SOFT-FLOAT-32-NEXT:    pushl {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload
646 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
647 ; SOFT-FLOAT-32-NEXT:    calll __addsf3
648 ; SOFT-FLOAT-32-NEXT:    addl $8, %esp
649 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset -8
650 ; SOFT-FLOAT-32-NEXT:    movl %eax, 12(%esi)
651 ; SOFT-FLOAT-32-NEXT:    movl %ebx, 8(%esi)
652 ; SOFT-FLOAT-32-NEXT:    movl %edi, 4(%esi)
653 ; SOFT-FLOAT-32-NEXT:    movl %ebp, (%esi)
654 ; SOFT-FLOAT-32-NEXT:    movl %esi, %eax
655 ; SOFT-FLOAT-32-NEXT:    addl $4, %esp
656 ; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 20
657 ; SOFT-FLOAT-32-NEXT:    popl %esi
658 ; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 16
659 ; SOFT-FLOAT-32-NEXT:    popl %edi
660 ; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 12
661 ; SOFT-FLOAT-32-NEXT:    popl %ebx
662 ; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 8
663 ; SOFT-FLOAT-32-NEXT:    popl %ebp
664 ; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 4
665 ; SOFT-FLOAT-32-NEXT:    retl $4
667 ; SOFT-FLOAT-32-FMA-LABEL: fmuladd_contract_v4f32:
668 ; SOFT-FLOAT-32-FMA:       # %bb.0:
669 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %ebp
670 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_def_cfa_offset 8
671 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %ebx
672 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_def_cfa_offset 12
673 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %edi
674 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_def_cfa_offset 16
675 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %esi
676 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_def_cfa_offset 20
677 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %eax
678 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_def_cfa_offset 24
679 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_offset %esi, -20
680 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_offset %edi, -16
681 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_offset %ebx, -12
682 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_offset %ebp, -8
683 ; SOFT-FLOAT-32-FMA-NEXT:    movl {{[0-9]+}}(%esp), %esi
684 ; SOFT-FLOAT-32-FMA-NEXT:    movl {{[0-9]+}}(%esp), %ebp
685 ; SOFT-FLOAT-32-FMA-NEXT:    movl {{[0-9]+}}(%esp), %ebx
686 ; SOFT-FLOAT-32-FMA-NEXT:    movl {{[0-9]+}}(%esp), %edi
687 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
688 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
689 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
690 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
691 ; SOFT-FLOAT-32-FMA-NEXT:    calll __mulsf3
692 ; SOFT-FLOAT-32-FMA-NEXT:    addl $8, %esp
693 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset -8
694 ; SOFT-FLOAT-32-FMA-NEXT:    movl %eax, (%esp) # 4-byte Spill
695 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %edi
696 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
697 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %ebx
698 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
699 ; SOFT-FLOAT-32-FMA-NEXT:    calll __mulsf3
700 ; SOFT-FLOAT-32-FMA-NEXT:    addl $8, %esp
701 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset -8
702 ; SOFT-FLOAT-32-FMA-NEXT:    movl %eax, %ebx
703 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %ebp
704 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
705 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
706 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
707 ; SOFT-FLOAT-32-FMA-NEXT:    calll __mulsf3
708 ; SOFT-FLOAT-32-FMA-NEXT:    addl $8, %esp
709 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset -8
710 ; SOFT-FLOAT-32-FMA-NEXT:    movl %eax, %edi
711 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
712 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
713 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
714 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
715 ; SOFT-FLOAT-32-FMA-NEXT:    calll __mulsf3
716 ; SOFT-FLOAT-32-FMA-NEXT:    addl $8, %esp
717 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset -8
718 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
719 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
720 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %eax
721 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
722 ; SOFT-FLOAT-32-FMA-NEXT:    calll __addsf3
723 ; SOFT-FLOAT-32-FMA-NEXT:    addl $8, %esp
724 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset -8
725 ; SOFT-FLOAT-32-FMA-NEXT:    movl %eax, %ebp
726 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
727 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
728 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %edi
729 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
730 ; SOFT-FLOAT-32-FMA-NEXT:    calll __addsf3
731 ; SOFT-FLOAT-32-FMA-NEXT:    addl $8, %esp
732 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset -8
733 ; SOFT-FLOAT-32-FMA-NEXT:    movl %eax, %edi
734 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
735 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
736 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %ebx
737 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
738 ; SOFT-FLOAT-32-FMA-NEXT:    calll __addsf3
739 ; SOFT-FLOAT-32-FMA-NEXT:    addl $8, %esp
740 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset -8
741 ; SOFT-FLOAT-32-FMA-NEXT:    movl %eax, %ebx
742 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
743 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
744 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload
745 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
746 ; SOFT-FLOAT-32-FMA-NEXT:    calll __addsf3
747 ; SOFT-FLOAT-32-FMA-NEXT:    addl $8, %esp
748 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset -8
749 ; SOFT-FLOAT-32-FMA-NEXT:    movl %eax, 12(%esi)
750 ; SOFT-FLOAT-32-FMA-NEXT:    movl %ebx, 8(%esi)
751 ; SOFT-FLOAT-32-FMA-NEXT:    movl %edi, 4(%esi)
752 ; SOFT-FLOAT-32-FMA-NEXT:    movl %ebp, (%esi)
753 ; SOFT-FLOAT-32-FMA-NEXT:    movl %esi, %eax
754 ; SOFT-FLOAT-32-FMA-NEXT:    addl $4, %esp
755 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_def_cfa_offset 20
756 ; SOFT-FLOAT-32-FMA-NEXT:    popl %esi
757 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_def_cfa_offset 16
758 ; SOFT-FLOAT-32-FMA-NEXT:    popl %edi
759 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_def_cfa_offset 12
760 ; SOFT-FLOAT-32-FMA-NEXT:    popl %ebx
761 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_def_cfa_offset 8
762 ; SOFT-FLOAT-32-FMA-NEXT:    popl %ebp
763 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_def_cfa_offset 4
764 ; SOFT-FLOAT-32-FMA-NEXT:    retl $4
766 ; SOFT-FLOAT-32-FMA4-LABEL: fmuladd_contract_v4f32:
767 ; SOFT-FLOAT-32-FMA4:       # %bb.0:
768 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %ebp
769 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_def_cfa_offset 8
770 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %ebx
771 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_def_cfa_offset 12
772 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %edi
773 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_def_cfa_offset 16
774 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %esi
775 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_def_cfa_offset 20
776 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %eax
777 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_def_cfa_offset 24
778 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_offset %esi, -20
779 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_offset %edi, -16
780 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_offset %ebx, -12
781 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_offset %ebp, -8
782 ; SOFT-FLOAT-32-FMA4-NEXT:    movl {{[0-9]+}}(%esp), %esi
783 ; SOFT-FLOAT-32-FMA4-NEXT:    movl {{[0-9]+}}(%esp), %ebp
784 ; SOFT-FLOAT-32-FMA4-NEXT:    movl {{[0-9]+}}(%esp), %ebx
785 ; SOFT-FLOAT-32-FMA4-NEXT:    movl {{[0-9]+}}(%esp), %edi
786 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
787 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
788 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
789 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
790 ; SOFT-FLOAT-32-FMA4-NEXT:    calll __mulsf3
791 ; SOFT-FLOAT-32-FMA4-NEXT:    addl $8, %esp
792 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset -8
793 ; SOFT-FLOAT-32-FMA4-NEXT:    movl %eax, (%esp) # 4-byte Spill
794 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %edi
795 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
796 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %ebx
797 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
798 ; SOFT-FLOAT-32-FMA4-NEXT:    calll __mulsf3
799 ; SOFT-FLOAT-32-FMA4-NEXT:    addl $8, %esp
800 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset -8
801 ; SOFT-FLOAT-32-FMA4-NEXT:    movl %eax, %ebx
802 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %ebp
803 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
804 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
805 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
806 ; SOFT-FLOAT-32-FMA4-NEXT:    calll __mulsf3
807 ; SOFT-FLOAT-32-FMA4-NEXT:    addl $8, %esp
808 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset -8
809 ; SOFT-FLOAT-32-FMA4-NEXT:    movl %eax, %edi
810 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
811 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
812 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
813 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
814 ; SOFT-FLOAT-32-FMA4-NEXT:    calll __mulsf3
815 ; SOFT-FLOAT-32-FMA4-NEXT:    addl $8, %esp
816 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset -8
817 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
818 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
819 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %eax
820 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
821 ; SOFT-FLOAT-32-FMA4-NEXT:    calll __addsf3
822 ; SOFT-FLOAT-32-FMA4-NEXT:    addl $8, %esp
823 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset -8
824 ; SOFT-FLOAT-32-FMA4-NEXT:    movl %eax, %ebp
825 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
826 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
827 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %edi
828 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
829 ; SOFT-FLOAT-32-FMA4-NEXT:    calll __addsf3
830 ; SOFT-FLOAT-32-FMA4-NEXT:    addl $8, %esp
831 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset -8
832 ; SOFT-FLOAT-32-FMA4-NEXT:    movl %eax, %edi
833 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
834 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
835 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %ebx
836 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
837 ; SOFT-FLOAT-32-FMA4-NEXT:    calll __addsf3
838 ; SOFT-FLOAT-32-FMA4-NEXT:    addl $8, %esp
839 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset -8
840 ; SOFT-FLOAT-32-FMA4-NEXT:    movl %eax, %ebx
841 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
842 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
843 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload
844 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
845 ; SOFT-FLOAT-32-FMA4-NEXT:    calll __addsf3
846 ; SOFT-FLOAT-32-FMA4-NEXT:    addl $8, %esp
847 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset -8
848 ; SOFT-FLOAT-32-FMA4-NEXT:    movl %eax, 12(%esi)
849 ; SOFT-FLOAT-32-FMA4-NEXT:    movl %ebx, 8(%esi)
850 ; SOFT-FLOAT-32-FMA4-NEXT:    movl %edi, 4(%esi)
851 ; SOFT-FLOAT-32-FMA4-NEXT:    movl %ebp, (%esi)
852 ; SOFT-FLOAT-32-FMA4-NEXT:    movl %esi, %eax
853 ; SOFT-FLOAT-32-FMA4-NEXT:    addl $4, %esp
854 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_def_cfa_offset 20
855 ; SOFT-FLOAT-32-FMA4-NEXT:    popl %esi
856 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_def_cfa_offset 16
857 ; SOFT-FLOAT-32-FMA4-NEXT:    popl %edi
858 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_def_cfa_offset 12
859 ; SOFT-FLOAT-32-FMA4-NEXT:    popl %ebx
860 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_def_cfa_offset 8
861 ; SOFT-FLOAT-32-FMA4-NEXT:    popl %ebp
862 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_def_cfa_offset 4
863 ; SOFT-FLOAT-32-FMA4-NEXT:    retl $4
865 ; SOFT-FLOAT-64-LABEL: fmuladd_contract_v4f32:
866 ; SOFT-FLOAT-64:       # %bb.0:
867 ; SOFT-FLOAT-64-NEXT:    pushq %rbp
868 ; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 16
869 ; SOFT-FLOAT-64-NEXT:    pushq %r15
870 ; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 24
871 ; SOFT-FLOAT-64-NEXT:    pushq %r14
872 ; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 32
873 ; SOFT-FLOAT-64-NEXT:    pushq %r13
874 ; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 40
875 ; SOFT-FLOAT-64-NEXT:    pushq %r12
876 ; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 48
877 ; SOFT-FLOAT-64-NEXT:    pushq %rbx
878 ; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 56
879 ; SOFT-FLOAT-64-NEXT:    pushq %rax
880 ; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 64
881 ; SOFT-FLOAT-64-NEXT:    .cfi_offset %rbx, -56
882 ; SOFT-FLOAT-64-NEXT:    .cfi_offset %r12, -48
883 ; SOFT-FLOAT-64-NEXT:    .cfi_offset %r13, -40
884 ; SOFT-FLOAT-64-NEXT:    .cfi_offset %r14, -32
885 ; SOFT-FLOAT-64-NEXT:    .cfi_offset %r15, -24
886 ; SOFT-FLOAT-64-NEXT:    .cfi_offset %rbp, -16
887 ; SOFT-FLOAT-64-NEXT:    movl %r9d, %r13d
888 ; SOFT-FLOAT-64-NEXT:    movl %ecx, %ebp
889 ; SOFT-FLOAT-64-NEXT:    movl %edx, %r14d
890 ; SOFT-FLOAT-64-NEXT:    movl %esi, %r12d
891 ; SOFT-FLOAT-64-NEXT:    movq %rdi, %rbx
892 ; SOFT-FLOAT-64-NEXT:    movl {{[0-9]+}}(%rsp), %esi
893 ; SOFT-FLOAT-64-NEXT:    movl %r8d, %edi
894 ; SOFT-FLOAT-64-NEXT:    callq __mulsf3@PLT
895 ; SOFT-FLOAT-64-NEXT:    movl %eax, %r15d
896 ; SOFT-FLOAT-64-NEXT:    movl %ebp, %edi
897 ; SOFT-FLOAT-64-NEXT:    movl {{[0-9]+}}(%rsp), %esi
898 ; SOFT-FLOAT-64-NEXT:    callq __mulsf3@PLT
899 ; SOFT-FLOAT-64-NEXT:    movl %eax, %ebp
900 ; SOFT-FLOAT-64-NEXT:    movl %r14d, %edi
901 ; SOFT-FLOAT-64-NEXT:    movl {{[0-9]+}}(%rsp), %esi
902 ; SOFT-FLOAT-64-NEXT:    callq __mulsf3@PLT
903 ; SOFT-FLOAT-64-NEXT:    movl %eax, %r14d
904 ; SOFT-FLOAT-64-NEXT:    movl %r12d, %edi
905 ; SOFT-FLOAT-64-NEXT:    movl %r13d, %esi
906 ; SOFT-FLOAT-64-NEXT:    callq __mulsf3@PLT
907 ; SOFT-FLOAT-64-NEXT:    movl %eax, %edi
908 ; SOFT-FLOAT-64-NEXT:    movl {{[0-9]+}}(%rsp), %esi
909 ; SOFT-FLOAT-64-NEXT:    callq __addsf3@PLT
910 ; SOFT-FLOAT-64-NEXT:    movl %eax, %r12d
911 ; SOFT-FLOAT-64-NEXT:    movl %r14d, %edi
912 ; SOFT-FLOAT-64-NEXT:    movl {{[0-9]+}}(%rsp), %esi
913 ; SOFT-FLOAT-64-NEXT:    callq __addsf3@PLT
914 ; SOFT-FLOAT-64-NEXT:    movl %eax, %r14d
915 ; SOFT-FLOAT-64-NEXT:    movl %ebp, %edi
916 ; SOFT-FLOAT-64-NEXT:    movl {{[0-9]+}}(%rsp), %esi
917 ; SOFT-FLOAT-64-NEXT:    callq __addsf3@PLT
918 ; SOFT-FLOAT-64-NEXT:    movl %eax, %ebp
919 ; SOFT-FLOAT-64-NEXT:    movl %r15d, %edi
920 ; SOFT-FLOAT-64-NEXT:    movl {{[0-9]+}}(%rsp), %esi
921 ; SOFT-FLOAT-64-NEXT:    callq __addsf3@PLT
922 ; SOFT-FLOAT-64-NEXT:    movl %eax, 12(%rbx)
923 ; SOFT-FLOAT-64-NEXT:    movl %ebp, 8(%rbx)
924 ; SOFT-FLOAT-64-NEXT:    movl %r14d, 4(%rbx)
925 ; SOFT-FLOAT-64-NEXT:    movl %r12d, (%rbx)
926 ; SOFT-FLOAT-64-NEXT:    movq %rbx, %rax
927 ; SOFT-FLOAT-64-NEXT:    addq $8, %rsp
928 ; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 56
929 ; SOFT-FLOAT-64-NEXT:    popq %rbx
930 ; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 48
931 ; SOFT-FLOAT-64-NEXT:    popq %r12
932 ; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 40
933 ; SOFT-FLOAT-64-NEXT:    popq %r13
934 ; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 32
935 ; SOFT-FLOAT-64-NEXT:    popq %r14
936 ; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 24
937 ; SOFT-FLOAT-64-NEXT:    popq %r15
938 ; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 16
939 ; SOFT-FLOAT-64-NEXT:    popq %rbp
940 ; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 8
941 ; SOFT-FLOAT-64-NEXT:    retq
943 ; SOFT-FLOAT-64-FMA-LABEL: fmuladd_contract_v4f32:
944 ; SOFT-FLOAT-64-FMA:       # %bb.0:
945 ; SOFT-FLOAT-64-FMA-NEXT:    pushq %rbp
946 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_def_cfa_offset 16
947 ; SOFT-FLOAT-64-FMA-NEXT:    pushq %r15
948 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_def_cfa_offset 24
949 ; SOFT-FLOAT-64-FMA-NEXT:    pushq %r14
950 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_def_cfa_offset 32
951 ; SOFT-FLOAT-64-FMA-NEXT:    pushq %r13
952 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_def_cfa_offset 40
953 ; SOFT-FLOAT-64-FMA-NEXT:    pushq %r12
954 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_def_cfa_offset 48
955 ; SOFT-FLOAT-64-FMA-NEXT:    pushq %rbx
956 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_def_cfa_offset 56
957 ; SOFT-FLOAT-64-FMA-NEXT:    pushq %rax
958 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_def_cfa_offset 64
959 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_offset %rbx, -56
960 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_offset %r12, -48
961 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_offset %r13, -40
962 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_offset %r14, -32
963 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_offset %r15, -24
964 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_offset %rbp, -16
965 ; SOFT-FLOAT-64-FMA-NEXT:    movl %r9d, %r13d
966 ; SOFT-FLOAT-64-FMA-NEXT:    movl %ecx, %ebp
967 ; SOFT-FLOAT-64-FMA-NEXT:    movl %edx, %r14d
968 ; SOFT-FLOAT-64-FMA-NEXT:    movl %esi, %r12d
969 ; SOFT-FLOAT-64-FMA-NEXT:    movq %rdi, %rbx
970 ; SOFT-FLOAT-64-FMA-NEXT:    movl {{[0-9]+}}(%rsp), %esi
971 ; SOFT-FLOAT-64-FMA-NEXT:    movl %r8d, %edi
972 ; SOFT-FLOAT-64-FMA-NEXT:    callq __mulsf3@PLT
973 ; SOFT-FLOAT-64-FMA-NEXT:    movl %eax, %r15d
974 ; SOFT-FLOAT-64-FMA-NEXT:    movl %ebp, %edi
975 ; SOFT-FLOAT-64-FMA-NEXT:    movl {{[0-9]+}}(%rsp), %esi
976 ; SOFT-FLOAT-64-FMA-NEXT:    callq __mulsf3@PLT
977 ; SOFT-FLOAT-64-FMA-NEXT:    movl %eax, %ebp
978 ; SOFT-FLOAT-64-FMA-NEXT:    movl %r14d, %edi
979 ; SOFT-FLOAT-64-FMA-NEXT:    movl {{[0-9]+}}(%rsp), %esi
980 ; SOFT-FLOAT-64-FMA-NEXT:    callq __mulsf3@PLT
981 ; SOFT-FLOAT-64-FMA-NEXT:    movl %eax, %r14d
982 ; SOFT-FLOAT-64-FMA-NEXT:    movl %r12d, %edi
983 ; SOFT-FLOAT-64-FMA-NEXT:    movl %r13d, %esi
984 ; SOFT-FLOAT-64-FMA-NEXT:    callq __mulsf3@PLT
985 ; SOFT-FLOAT-64-FMA-NEXT:    movl %eax, %edi
986 ; SOFT-FLOAT-64-FMA-NEXT:    movl {{[0-9]+}}(%rsp), %esi
987 ; SOFT-FLOAT-64-FMA-NEXT:    callq __addsf3@PLT
988 ; SOFT-FLOAT-64-FMA-NEXT:    movl %eax, %r12d
989 ; SOFT-FLOAT-64-FMA-NEXT:    movl %r14d, %edi
990 ; SOFT-FLOAT-64-FMA-NEXT:    movl {{[0-9]+}}(%rsp), %esi
991 ; SOFT-FLOAT-64-FMA-NEXT:    callq __addsf3@PLT
992 ; SOFT-FLOAT-64-FMA-NEXT:    movl %eax, %r14d
993 ; SOFT-FLOAT-64-FMA-NEXT:    movl %ebp, %edi
994 ; SOFT-FLOAT-64-FMA-NEXT:    movl {{[0-9]+}}(%rsp), %esi
995 ; SOFT-FLOAT-64-FMA-NEXT:    callq __addsf3@PLT
996 ; SOFT-FLOAT-64-FMA-NEXT:    movl %eax, %ebp
997 ; SOFT-FLOAT-64-FMA-NEXT:    movl %r15d, %edi
998 ; SOFT-FLOAT-64-FMA-NEXT:    movl {{[0-9]+}}(%rsp), %esi
999 ; SOFT-FLOAT-64-FMA-NEXT:    callq __addsf3@PLT
1000 ; SOFT-FLOAT-64-FMA-NEXT:    movl %eax, 12(%rbx)
1001 ; SOFT-FLOAT-64-FMA-NEXT:    movl %ebp, 8(%rbx)
1002 ; SOFT-FLOAT-64-FMA-NEXT:    movl %r14d, 4(%rbx)
1003 ; SOFT-FLOAT-64-FMA-NEXT:    movl %r12d, (%rbx)
1004 ; SOFT-FLOAT-64-FMA-NEXT:    movq %rbx, %rax
1005 ; SOFT-FLOAT-64-FMA-NEXT:    addq $8, %rsp
1006 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_def_cfa_offset 56
1007 ; SOFT-FLOAT-64-FMA-NEXT:    popq %rbx
1008 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_def_cfa_offset 48
1009 ; SOFT-FLOAT-64-FMA-NEXT:    popq %r12
1010 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_def_cfa_offset 40
1011 ; SOFT-FLOAT-64-FMA-NEXT:    popq %r13
1012 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_def_cfa_offset 32
1013 ; SOFT-FLOAT-64-FMA-NEXT:    popq %r14
1014 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_def_cfa_offset 24
1015 ; SOFT-FLOAT-64-FMA-NEXT:    popq %r15
1016 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_def_cfa_offset 16
1017 ; SOFT-FLOAT-64-FMA-NEXT:    popq %rbp
1018 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_def_cfa_offset 8
1019 ; SOFT-FLOAT-64-FMA-NEXT:    retq
1021 ; SOFT-FLOAT-64-FMA4-LABEL: fmuladd_contract_v4f32:
1022 ; SOFT-FLOAT-64-FMA4:       # %bb.0:
1023 ; SOFT-FLOAT-64-FMA4-NEXT:    pushq %rbp
1024 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_def_cfa_offset 16
1025 ; SOFT-FLOAT-64-FMA4-NEXT:    pushq %r15
1026 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_def_cfa_offset 24
1027 ; SOFT-FLOAT-64-FMA4-NEXT:    pushq %r14
1028 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_def_cfa_offset 32
1029 ; SOFT-FLOAT-64-FMA4-NEXT:    pushq %r13
1030 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_def_cfa_offset 40
1031 ; SOFT-FLOAT-64-FMA4-NEXT:    pushq %r12
1032 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_def_cfa_offset 48
1033 ; SOFT-FLOAT-64-FMA4-NEXT:    pushq %rbx
1034 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_def_cfa_offset 56
1035 ; SOFT-FLOAT-64-FMA4-NEXT:    pushq %rax
1036 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_def_cfa_offset 64
1037 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_offset %rbx, -56
1038 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_offset %r12, -48
1039 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_offset %r13, -40
1040 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_offset %r14, -32
1041 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_offset %r15, -24
1042 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_offset %rbp, -16
1043 ; SOFT-FLOAT-64-FMA4-NEXT:    movl %r9d, %r13d
1044 ; SOFT-FLOAT-64-FMA4-NEXT:    movl %ecx, %ebp
1045 ; SOFT-FLOAT-64-FMA4-NEXT:    movl %edx, %r14d
1046 ; SOFT-FLOAT-64-FMA4-NEXT:    movl %esi, %r12d
1047 ; SOFT-FLOAT-64-FMA4-NEXT:    movq %rdi, %rbx
1048 ; SOFT-FLOAT-64-FMA4-NEXT:    movl {{[0-9]+}}(%rsp), %esi
1049 ; SOFT-FLOAT-64-FMA4-NEXT:    movl %r8d, %edi
1050 ; SOFT-FLOAT-64-FMA4-NEXT:    callq __mulsf3@PLT
1051 ; SOFT-FLOAT-64-FMA4-NEXT:    movl %eax, %r15d
1052 ; SOFT-FLOAT-64-FMA4-NEXT:    movl %ebp, %edi
1053 ; SOFT-FLOAT-64-FMA4-NEXT:    movl {{[0-9]+}}(%rsp), %esi
1054 ; SOFT-FLOAT-64-FMA4-NEXT:    callq __mulsf3@PLT
1055 ; SOFT-FLOAT-64-FMA4-NEXT:    movl %eax, %ebp
1056 ; SOFT-FLOAT-64-FMA4-NEXT:    movl %r14d, %edi
1057 ; SOFT-FLOAT-64-FMA4-NEXT:    movl {{[0-9]+}}(%rsp), %esi
1058 ; SOFT-FLOAT-64-FMA4-NEXT:    callq __mulsf3@PLT
1059 ; SOFT-FLOAT-64-FMA4-NEXT:    movl %eax, %r14d
1060 ; SOFT-FLOAT-64-FMA4-NEXT:    movl %r12d, %edi
1061 ; SOFT-FLOAT-64-FMA4-NEXT:    movl %r13d, %esi
1062 ; SOFT-FLOAT-64-FMA4-NEXT:    callq __mulsf3@PLT
1063 ; SOFT-FLOAT-64-FMA4-NEXT:    movl %eax, %edi
1064 ; SOFT-FLOAT-64-FMA4-NEXT:    movl {{[0-9]+}}(%rsp), %esi
1065 ; SOFT-FLOAT-64-FMA4-NEXT:    callq __addsf3@PLT
1066 ; SOFT-FLOAT-64-FMA4-NEXT:    movl %eax, %r12d
1067 ; SOFT-FLOAT-64-FMA4-NEXT:    movl %r14d, %edi
1068 ; SOFT-FLOAT-64-FMA4-NEXT:    movl {{[0-9]+}}(%rsp), %esi
1069 ; SOFT-FLOAT-64-FMA4-NEXT:    callq __addsf3@PLT
1070 ; SOFT-FLOAT-64-FMA4-NEXT:    movl %eax, %r14d
1071 ; SOFT-FLOAT-64-FMA4-NEXT:    movl %ebp, %edi
1072 ; SOFT-FLOAT-64-FMA4-NEXT:    movl {{[0-9]+}}(%rsp), %esi
1073 ; SOFT-FLOAT-64-FMA4-NEXT:    callq __addsf3@PLT
1074 ; SOFT-FLOAT-64-FMA4-NEXT:    movl %eax, %ebp
1075 ; SOFT-FLOAT-64-FMA4-NEXT:    movl %r15d, %edi
1076 ; SOFT-FLOAT-64-FMA4-NEXT:    movl {{[0-9]+}}(%rsp), %esi
1077 ; SOFT-FLOAT-64-FMA4-NEXT:    callq __addsf3@PLT
1078 ; SOFT-FLOAT-64-FMA4-NEXT:    movl %eax, 12(%rbx)
1079 ; SOFT-FLOAT-64-FMA4-NEXT:    movl %ebp, 8(%rbx)
1080 ; SOFT-FLOAT-64-FMA4-NEXT:    movl %r14d, 4(%rbx)
1081 ; SOFT-FLOAT-64-FMA4-NEXT:    movl %r12d, (%rbx)
1082 ; SOFT-FLOAT-64-FMA4-NEXT:    movq %rbx, %rax
1083 ; SOFT-FLOAT-64-FMA4-NEXT:    addq $8, %rsp
1084 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_def_cfa_offset 56
1085 ; SOFT-FLOAT-64-FMA4-NEXT:    popq %rbx
1086 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_def_cfa_offset 48
1087 ; SOFT-FLOAT-64-FMA4-NEXT:    popq %r12
1088 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_def_cfa_offset 40
1089 ; SOFT-FLOAT-64-FMA4-NEXT:    popq %r13
1090 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_def_cfa_offset 32
1091 ; SOFT-FLOAT-64-FMA4-NEXT:    popq %r14
1092 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_def_cfa_offset 24
1093 ; SOFT-FLOAT-64-FMA4-NEXT:    popq %r15
1094 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_def_cfa_offset 16
1095 ; SOFT-FLOAT-64-FMA4-NEXT:    popq %rbp
1096 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_def_cfa_offset 8
1097 ; SOFT-FLOAT-64-FMA4-NEXT:    retq
1098   %product = fmul contract <4 x float> %a, %b
1099   %result = fadd contract <4 x float> %product, %c
1100   ret <4 x float> %result
1103 define <4 x double> @fmuladd_contract_v4f64(<4 x double> %a, <4 x double> %b, <4 x double> %c) #0 {
1104 ; SOFT-FLOAT-32-LABEL: fmuladd_contract_v4f64:
1105 ; SOFT-FLOAT-32:       # %bb.0:
1106 ; SOFT-FLOAT-32-NEXT:    pushl %ebp
1107 ; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 8
1108 ; SOFT-FLOAT-32-NEXT:    pushl %ebx
1109 ; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 12
1110 ; SOFT-FLOAT-32-NEXT:    pushl %edi
1111 ; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 16
1112 ; SOFT-FLOAT-32-NEXT:    pushl %esi
1113 ; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 20
1114 ; SOFT-FLOAT-32-NEXT:    subl $16, %esp
1115 ; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 36
1116 ; SOFT-FLOAT-32-NEXT:    .cfi_offset %esi, -20
1117 ; SOFT-FLOAT-32-NEXT:    .cfi_offset %edi, -16
1118 ; SOFT-FLOAT-32-NEXT:    .cfi_offset %ebx, -12
1119 ; SOFT-FLOAT-32-NEXT:    .cfi_offset %ebp, -8
1120 ; SOFT-FLOAT-32-NEXT:    movl {{[0-9]+}}(%esp), %edi
1121 ; SOFT-FLOAT-32-NEXT:    movl {{[0-9]+}}(%esp), %ebx
1122 ; SOFT-FLOAT-32-NEXT:    movl {{[0-9]+}}(%esp), %esi
1123 ; SOFT-FLOAT-32-NEXT:    movl {{[0-9]+}}(%esp), %ebp
1124 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
1125 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
1126 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
1127 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
1128 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
1129 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
1130 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
1131 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
1132 ; SOFT-FLOAT-32-NEXT:    calll __muldf3
1133 ; SOFT-FLOAT-32-NEXT:    addl $16, %esp
1134 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset -16
1135 ; SOFT-FLOAT-32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
1136 ; SOFT-FLOAT-32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
1137 ; SOFT-FLOAT-32-NEXT:    pushl %ebp
1138 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
1139 ; SOFT-FLOAT-32-NEXT:    pushl %esi
1140 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
1141 ; SOFT-FLOAT-32-NEXT:    pushl %ebx
1142 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
1143 ; SOFT-FLOAT-32-NEXT:    pushl %edi
1144 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
1145 ; SOFT-FLOAT-32-NEXT:    calll __muldf3
1146 ; SOFT-FLOAT-32-NEXT:    addl $16, %esp
1147 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset -16
1148 ; SOFT-FLOAT-32-NEXT:    movl %eax, %esi
1149 ; SOFT-FLOAT-32-NEXT:    movl %edx, %ebp
1150 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
1151 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
1152 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
1153 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
1154 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
1155 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
1156 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
1157 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
1158 ; SOFT-FLOAT-32-NEXT:    calll __muldf3
1159 ; SOFT-FLOAT-32-NEXT:    addl $16, %esp
1160 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset -16
1161 ; SOFT-FLOAT-32-NEXT:    movl %eax, %edi
1162 ; SOFT-FLOAT-32-NEXT:    movl %edx, %ebx
1163 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
1164 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
1165 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
1166 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
1167 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
1168 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
1169 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
1170 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
1171 ; SOFT-FLOAT-32-NEXT:    calll __muldf3
1172 ; SOFT-FLOAT-32-NEXT:    addl $16, %esp
1173 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset -16
1174 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
1175 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
1176 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
1177 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
1178 ; SOFT-FLOAT-32-NEXT:    pushl %edx
1179 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
1180 ; SOFT-FLOAT-32-NEXT:    pushl %eax
1181 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
1182 ; SOFT-FLOAT-32-NEXT:    calll __adddf3
1183 ; SOFT-FLOAT-32-NEXT:    addl $16, %esp
1184 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset -16
1185 ; SOFT-FLOAT-32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
1186 ; SOFT-FLOAT-32-NEXT:    movl %edx, (%esp) # 4-byte Spill
1187 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
1188 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
1189 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
1190 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
1191 ; SOFT-FLOAT-32-NEXT:    pushl %ebx
1192 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
1193 ; SOFT-FLOAT-32-NEXT:    pushl %edi
1194 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
1195 ; SOFT-FLOAT-32-NEXT:    calll __adddf3
1196 ; SOFT-FLOAT-32-NEXT:    addl $16, %esp
1197 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset -16
1198 ; SOFT-FLOAT-32-NEXT:    movl %eax, %edi
1199 ; SOFT-FLOAT-32-NEXT:    movl %edx, %ebx
1200 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
1201 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
1202 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
1203 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
1204 ; SOFT-FLOAT-32-NEXT:    pushl %ebp
1205 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
1206 ; SOFT-FLOAT-32-NEXT:    pushl %esi
1207 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
1208 ; SOFT-FLOAT-32-NEXT:    calll __adddf3
1209 ; SOFT-FLOAT-32-NEXT:    addl $16, %esp
1210 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset -16
1211 ; SOFT-FLOAT-32-NEXT:    movl %eax, %ebp
1212 ; SOFT-FLOAT-32-NEXT:    movl %edx, %esi
1213 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
1214 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
1215 ; SOFT-FLOAT-32-NEXT:    pushl {{[0-9]+}}(%esp)
1216 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
1217 ; SOFT-FLOAT-32-NEXT:    pushl {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload
1218 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
1219 ; SOFT-FLOAT-32-NEXT:    pushl {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload
1220 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset 4
1221 ; SOFT-FLOAT-32-NEXT:    calll __adddf3
1222 ; SOFT-FLOAT-32-NEXT:    addl $16, %esp
1223 ; SOFT-FLOAT-32-NEXT:    .cfi_adjust_cfa_offset -16
1224 ; SOFT-FLOAT-32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1225 ; SOFT-FLOAT-32-NEXT:    movl %edx, 28(%ecx)
1226 ; SOFT-FLOAT-32-NEXT:    movl %eax, 24(%ecx)
1227 ; SOFT-FLOAT-32-NEXT:    movl %esi, 20(%ecx)
1228 ; SOFT-FLOAT-32-NEXT:    movl %ebp, 16(%ecx)
1229 ; SOFT-FLOAT-32-NEXT:    movl %ebx, 12(%ecx)
1230 ; SOFT-FLOAT-32-NEXT:    movl %edi, 8(%ecx)
1231 ; SOFT-FLOAT-32-NEXT:    movl (%esp), %eax # 4-byte Reload
1232 ; SOFT-FLOAT-32-NEXT:    movl %eax, 4(%ecx)
1233 ; SOFT-FLOAT-32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
1234 ; SOFT-FLOAT-32-NEXT:    movl %eax, (%ecx)
1235 ; SOFT-FLOAT-32-NEXT:    movl %ecx, %eax
1236 ; SOFT-FLOAT-32-NEXT:    addl $16, %esp
1237 ; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 20
1238 ; SOFT-FLOAT-32-NEXT:    popl %esi
1239 ; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 16
1240 ; SOFT-FLOAT-32-NEXT:    popl %edi
1241 ; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 12
1242 ; SOFT-FLOAT-32-NEXT:    popl %ebx
1243 ; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 8
1244 ; SOFT-FLOAT-32-NEXT:    popl %ebp
1245 ; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 4
1246 ; SOFT-FLOAT-32-NEXT:    retl $4
1248 ; SOFT-FLOAT-32-FMA-LABEL: fmuladd_contract_v4f64:
1249 ; SOFT-FLOAT-32-FMA:       # %bb.0:
1250 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %ebp
1251 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_def_cfa_offset 8
1252 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %ebx
1253 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_def_cfa_offset 12
1254 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %edi
1255 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_def_cfa_offset 16
1256 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %esi
1257 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_def_cfa_offset 20
1258 ; SOFT-FLOAT-32-FMA-NEXT:    subl $16, %esp
1259 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_def_cfa_offset 36
1260 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_offset %esi, -20
1261 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_offset %edi, -16
1262 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_offset %ebx, -12
1263 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_offset %ebp, -8
1264 ; SOFT-FLOAT-32-FMA-NEXT:    movl {{[0-9]+}}(%esp), %edi
1265 ; SOFT-FLOAT-32-FMA-NEXT:    movl {{[0-9]+}}(%esp), %ebx
1266 ; SOFT-FLOAT-32-FMA-NEXT:    movl {{[0-9]+}}(%esp), %esi
1267 ; SOFT-FLOAT-32-FMA-NEXT:    movl {{[0-9]+}}(%esp), %ebp
1268 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
1269 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
1270 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
1271 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
1272 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
1273 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
1274 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
1275 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
1276 ; SOFT-FLOAT-32-FMA-NEXT:    calll __muldf3
1277 ; SOFT-FLOAT-32-FMA-NEXT:    addl $16, %esp
1278 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset -16
1279 ; SOFT-FLOAT-32-FMA-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
1280 ; SOFT-FLOAT-32-FMA-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
1281 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %ebp
1282 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
1283 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %esi
1284 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
1285 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %ebx
1286 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
1287 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %edi
1288 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
1289 ; SOFT-FLOAT-32-FMA-NEXT:    calll __muldf3
1290 ; SOFT-FLOAT-32-FMA-NEXT:    addl $16, %esp
1291 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset -16
1292 ; SOFT-FLOAT-32-FMA-NEXT:    movl %eax, %esi
1293 ; SOFT-FLOAT-32-FMA-NEXT:    movl %edx, %ebp
1294 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
1295 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
1296 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
1297 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
1298 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
1299 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
1300 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
1301 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
1302 ; SOFT-FLOAT-32-FMA-NEXT:    calll __muldf3
1303 ; SOFT-FLOAT-32-FMA-NEXT:    addl $16, %esp
1304 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset -16
1305 ; SOFT-FLOAT-32-FMA-NEXT:    movl %eax, %edi
1306 ; SOFT-FLOAT-32-FMA-NEXT:    movl %edx, %ebx
1307 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
1308 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
1309 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
1310 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
1311 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
1312 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
1313 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
1314 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
1315 ; SOFT-FLOAT-32-FMA-NEXT:    calll __muldf3
1316 ; SOFT-FLOAT-32-FMA-NEXT:    addl $16, %esp
1317 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset -16
1318 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
1319 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
1320 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
1321 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
1322 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %edx
1323 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
1324 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %eax
1325 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
1326 ; SOFT-FLOAT-32-FMA-NEXT:    calll __adddf3
1327 ; SOFT-FLOAT-32-FMA-NEXT:    addl $16, %esp
1328 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset -16
1329 ; SOFT-FLOAT-32-FMA-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
1330 ; SOFT-FLOAT-32-FMA-NEXT:    movl %edx, (%esp) # 4-byte Spill
1331 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
1332 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
1333 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
1334 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
1335 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %ebx
1336 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
1337 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %edi
1338 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
1339 ; SOFT-FLOAT-32-FMA-NEXT:    calll __adddf3
1340 ; SOFT-FLOAT-32-FMA-NEXT:    addl $16, %esp
1341 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset -16
1342 ; SOFT-FLOAT-32-FMA-NEXT:    movl %eax, %edi
1343 ; SOFT-FLOAT-32-FMA-NEXT:    movl %edx, %ebx
1344 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
1345 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
1346 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
1347 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
1348 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %ebp
1349 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
1350 ; SOFT-FLOAT-32-FMA-NEXT:    pushl %esi
1351 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
1352 ; SOFT-FLOAT-32-FMA-NEXT:    calll __adddf3
1353 ; SOFT-FLOAT-32-FMA-NEXT:    addl $16, %esp
1354 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset -16
1355 ; SOFT-FLOAT-32-FMA-NEXT:    movl %eax, %ebp
1356 ; SOFT-FLOAT-32-FMA-NEXT:    movl %edx, %esi
1357 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
1358 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
1359 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[0-9]+}}(%esp)
1360 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
1361 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload
1362 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
1363 ; SOFT-FLOAT-32-FMA-NEXT:    pushl {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload
1364 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset 4
1365 ; SOFT-FLOAT-32-FMA-NEXT:    calll __adddf3
1366 ; SOFT-FLOAT-32-FMA-NEXT:    addl $16, %esp
1367 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_adjust_cfa_offset -16
1368 ; SOFT-FLOAT-32-FMA-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1369 ; SOFT-FLOAT-32-FMA-NEXT:    movl %edx, 28(%ecx)
1370 ; SOFT-FLOAT-32-FMA-NEXT:    movl %eax, 24(%ecx)
1371 ; SOFT-FLOAT-32-FMA-NEXT:    movl %esi, 20(%ecx)
1372 ; SOFT-FLOAT-32-FMA-NEXT:    movl %ebp, 16(%ecx)
1373 ; SOFT-FLOAT-32-FMA-NEXT:    movl %ebx, 12(%ecx)
1374 ; SOFT-FLOAT-32-FMA-NEXT:    movl %edi, 8(%ecx)
1375 ; SOFT-FLOAT-32-FMA-NEXT:    movl (%esp), %eax # 4-byte Reload
1376 ; SOFT-FLOAT-32-FMA-NEXT:    movl %eax, 4(%ecx)
1377 ; SOFT-FLOAT-32-FMA-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
1378 ; SOFT-FLOAT-32-FMA-NEXT:    movl %eax, (%ecx)
1379 ; SOFT-FLOAT-32-FMA-NEXT:    movl %ecx, %eax
1380 ; SOFT-FLOAT-32-FMA-NEXT:    addl $16, %esp
1381 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_def_cfa_offset 20
1382 ; SOFT-FLOAT-32-FMA-NEXT:    popl %esi
1383 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_def_cfa_offset 16
1384 ; SOFT-FLOAT-32-FMA-NEXT:    popl %edi
1385 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_def_cfa_offset 12
1386 ; SOFT-FLOAT-32-FMA-NEXT:    popl %ebx
1387 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_def_cfa_offset 8
1388 ; SOFT-FLOAT-32-FMA-NEXT:    popl %ebp
1389 ; SOFT-FLOAT-32-FMA-NEXT:    .cfi_def_cfa_offset 4
1390 ; SOFT-FLOAT-32-FMA-NEXT:    retl $4
1392 ; SOFT-FLOAT-32-FMA4-LABEL: fmuladd_contract_v4f64:
1393 ; SOFT-FLOAT-32-FMA4:       # %bb.0:
1394 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %ebp
1395 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_def_cfa_offset 8
1396 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %ebx
1397 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_def_cfa_offset 12
1398 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %edi
1399 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_def_cfa_offset 16
1400 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %esi
1401 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_def_cfa_offset 20
1402 ; SOFT-FLOAT-32-FMA4-NEXT:    subl $16, %esp
1403 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_def_cfa_offset 36
1404 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_offset %esi, -20
1405 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_offset %edi, -16
1406 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_offset %ebx, -12
1407 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_offset %ebp, -8
1408 ; SOFT-FLOAT-32-FMA4-NEXT:    movl {{[0-9]+}}(%esp), %edi
1409 ; SOFT-FLOAT-32-FMA4-NEXT:    movl {{[0-9]+}}(%esp), %ebx
1410 ; SOFT-FLOAT-32-FMA4-NEXT:    movl {{[0-9]+}}(%esp), %esi
1411 ; SOFT-FLOAT-32-FMA4-NEXT:    movl {{[0-9]+}}(%esp), %ebp
1412 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
1413 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
1414 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
1415 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
1416 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
1417 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
1418 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
1419 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
1420 ; SOFT-FLOAT-32-FMA4-NEXT:    calll __muldf3
1421 ; SOFT-FLOAT-32-FMA4-NEXT:    addl $16, %esp
1422 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset -16
1423 ; SOFT-FLOAT-32-FMA4-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
1424 ; SOFT-FLOAT-32-FMA4-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
1425 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %ebp
1426 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
1427 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %esi
1428 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
1429 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %ebx
1430 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
1431 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %edi
1432 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
1433 ; SOFT-FLOAT-32-FMA4-NEXT:    calll __muldf3
1434 ; SOFT-FLOAT-32-FMA4-NEXT:    addl $16, %esp
1435 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset -16
1436 ; SOFT-FLOAT-32-FMA4-NEXT:    movl %eax, %esi
1437 ; SOFT-FLOAT-32-FMA4-NEXT:    movl %edx, %ebp
1438 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
1439 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
1440 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
1441 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
1442 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
1443 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
1444 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
1445 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
1446 ; SOFT-FLOAT-32-FMA4-NEXT:    calll __muldf3
1447 ; SOFT-FLOAT-32-FMA4-NEXT:    addl $16, %esp
1448 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset -16
1449 ; SOFT-FLOAT-32-FMA4-NEXT:    movl %eax, %edi
1450 ; SOFT-FLOAT-32-FMA4-NEXT:    movl %edx, %ebx
1451 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
1452 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
1453 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
1454 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
1455 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
1456 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
1457 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
1458 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
1459 ; SOFT-FLOAT-32-FMA4-NEXT:    calll __muldf3
1460 ; SOFT-FLOAT-32-FMA4-NEXT:    addl $16, %esp
1461 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset -16
1462 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
1463 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
1464 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
1465 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
1466 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %edx
1467 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
1468 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %eax
1469 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
1470 ; SOFT-FLOAT-32-FMA4-NEXT:    calll __adddf3
1471 ; SOFT-FLOAT-32-FMA4-NEXT:    addl $16, %esp
1472 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset -16
1473 ; SOFT-FLOAT-32-FMA4-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
1474 ; SOFT-FLOAT-32-FMA4-NEXT:    movl %edx, (%esp) # 4-byte Spill
1475 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
1476 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
1477 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
1478 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
1479 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %ebx
1480 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
1481 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %edi
1482 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
1483 ; SOFT-FLOAT-32-FMA4-NEXT:    calll __adddf3
1484 ; SOFT-FLOAT-32-FMA4-NEXT:    addl $16, %esp
1485 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset -16
1486 ; SOFT-FLOAT-32-FMA4-NEXT:    movl %eax, %edi
1487 ; SOFT-FLOAT-32-FMA4-NEXT:    movl %edx, %ebx
1488 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
1489 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
1490 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
1491 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
1492 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %ebp
1493 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
1494 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl %esi
1495 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
1496 ; SOFT-FLOAT-32-FMA4-NEXT:    calll __adddf3
1497 ; SOFT-FLOAT-32-FMA4-NEXT:    addl $16, %esp
1498 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset -16
1499 ; SOFT-FLOAT-32-FMA4-NEXT:    movl %eax, %ebp
1500 ; SOFT-FLOAT-32-FMA4-NEXT:    movl %edx, %esi
1501 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
1502 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
1503 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[0-9]+}}(%esp)
1504 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
1505 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload
1506 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
1507 ; SOFT-FLOAT-32-FMA4-NEXT:    pushl {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload
1508 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset 4
1509 ; SOFT-FLOAT-32-FMA4-NEXT:    calll __adddf3
1510 ; SOFT-FLOAT-32-FMA4-NEXT:    addl $16, %esp
1511 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_adjust_cfa_offset -16
1512 ; SOFT-FLOAT-32-FMA4-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1513 ; SOFT-FLOAT-32-FMA4-NEXT:    movl %edx, 28(%ecx)
1514 ; SOFT-FLOAT-32-FMA4-NEXT:    movl %eax, 24(%ecx)
1515 ; SOFT-FLOAT-32-FMA4-NEXT:    movl %esi, 20(%ecx)
1516 ; SOFT-FLOAT-32-FMA4-NEXT:    movl %ebp, 16(%ecx)
1517 ; SOFT-FLOAT-32-FMA4-NEXT:    movl %ebx, 12(%ecx)
1518 ; SOFT-FLOAT-32-FMA4-NEXT:    movl %edi, 8(%ecx)
1519 ; SOFT-FLOAT-32-FMA4-NEXT:    movl (%esp), %eax # 4-byte Reload
1520 ; SOFT-FLOAT-32-FMA4-NEXT:    movl %eax, 4(%ecx)
1521 ; SOFT-FLOAT-32-FMA4-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
1522 ; SOFT-FLOAT-32-FMA4-NEXT:    movl %eax, (%ecx)
1523 ; SOFT-FLOAT-32-FMA4-NEXT:    movl %ecx, %eax
1524 ; SOFT-FLOAT-32-FMA4-NEXT:    addl $16, %esp
1525 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_def_cfa_offset 20
1526 ; SOFT-FLOAT-32-FMA4-NEXT:    popl %esi
1527 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_def_cfa_offset 16
1528 ; SOFT-FLOAT-32-FMA4-NEXT:    popl %edi
1529 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_def_cfa_offset 12
1530 ; SOFT-FLOAT-32-FMA4-NEXT:    popl %ebx
1531 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_def_cfa_offset 8
1532 ; SOFT-FLOAT-32-FMA4-NEXT:    popl %ebp
1533 ; SOFT-FLOAT-32-FMA4-NEXT:    .cfi_def_cfa_offset 4
1534 ; SOFT-FLOAT-32-FMA4-NEXT:    retl $4
1536 ; SOFT-FLOAT-64-LABEL: fmuladd_contract_v4f64:
1537 ; SOFT-FLOAT-64:       # %bb.0:
1538 ; SOFT-FLOAT-64-NEXT:    pushq %rbp
1539 ; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 16
1540 ; SOFT-FLOAT-64-NEXT:    pushq %r15
1541 ; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 24
1542 ; SOFT-FLOAT-64-NEXT:    pushq %r14
1543 ; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 32
1544 ; SOFT-FLOAT-64-NEXT:    pushq %r13
1545 ; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 40
1546 ; SOFT-FLOAT-64-NEXT:    pushq %r12
1547 ; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 48
1548 ; SOFT-FLOAT-64-NEXT:    pushq %rbx
1549 ; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 56
1550 ; SOFT-FLOAT-64-NEXT:    pushq %rax
1551 ; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 64
1552 ; SOFT-FLOAT-64-NEXT:    .cfi_offset %rbx, -56
1553 ; SOFT-FLOAT-64-NEXT:    .cfi_offset %r12, -48
1554 ; SOFT-FLOAT-64-NEXT:    .cfi_offset %r13, -40
1555 ; SOFT-FLOAT-64-NEXT:    .cfi_offset %r14, -32
1556 ; SOFT-FLOAT-64-NEXT:    .cfi_offset %r15, -24
1557 ; SOFT-FLOAT-64-NEXT:    .cfi_offset %rbp, -16
1558 ; SOFT-FLOAT-64-NEXT:    movq %rcx, %r14
1559 ; SOFT-FLOAT-64-NEXT:    movq %rdx, %r15
1560 ; SOFT-FLOAT-64-NEXT:    movq %rsi, %r12
1561 ; SOFT-FLOAT-64-NEXT:    movq %rdi, %rbx
1562 ; SOFT-FLOAT-64-NEXT:    movq {{[0-9]+}}(%rsp), %rbp
1563 ; SOFT-FLOAT-64-NEXT:    movq {{[0-9]+}}(%rsp), %rsi
1564 ; SOFT-FLOAT-64-NEXT:    movq %r8, %rdi
1565 ; SOFT-FLOAT-64-NEXT:    callq __muldf3@PLT
1566 ; SOFT-FLOAT-64-NEXT:    movq %rax, %r13
1567 ; SOFT-FLOAT-64-NEXT:    movq %r14, %rdi
1568 ; SOFT-FLOAT-64-NEXT:    movq %rbp, %rsi
1569 ; SOFT-FLOAT-64-NEXT:    callq __muldf3@PLT
1570 ; SOFT-FLOAT-64-NEXT:    movq %rax, %r14
1571 ; SOFT-FLOAT-64-NEXT:    movq %r15, %rdi
1572 ; SOFT-FLOAT-64-NEXT:    movq {{[0-9]+}}(%rsp), %rsi
1573 ; SOFT-FLOAT-64-NEXT:    callq __muldf3@PLT
1574 ; SOFT-FLOAT-64-NEXT:    movq %rax, %r15
1575 ; SOFT-FLOAT-64-NEXT:    movq %r12, %rdi
1576 ; SOFT-FLOAT-64-NEXT:    movq {{[0-9]+}}(%rsp), %rsi
1577 ; SOFT-FLOAT-64-NEXT:    callq __muldf3@PLT
1578 ; SOFT-FLOAT-64-NEXT:    movq %rax, %rdi
1579 ; SOFT-FLOAT-64-NEXT:    movq {{[0-9]+}}(%rsp), %rsi
1580 ; SOFT-FLOAT-64-NEXT:    callq __adddf3@PLT
1581 ; SOFT-FLOAT-64-NEXT:    movq %rax, %r12
1582 ; SOFT-FLOAT-64-NEXT:    movq %r15, %rdi
1583 ; SOFT-FLOAT-64-NEXT:    movq {{[0-9]+}}(%rsp), %rsi
1584 ; SOFT-FLOAT-64-NEXT:    callq __adddf3@PLT
1585 ; SOFT-FLOAT-64-NEXT:    movq %rax, %r15
1586 ; SOFT-FLOAT-64-NEXT:    movq %r14, %rdi
1587 ; SOFT-FLOAT-64-NEXT:    movq {{[0-9]+}}(%rsp), %rsi
1588 ; SOFT-FLOAT-64-NEXT:    callq __adddf3@PLT
1589 ; SOFT-FLOAT-64-NEXT:    movq %rax, %r14
1590 ; SOFT-FLOAT-64-NEXT:    movq %r13, %rdi
1591 ; SOFT-FLOAT-64-NEXT:    movq {{[0-9]+}}(%rsp), %rsi
1592 ; SOFT-FLOAT-64-NEXT:    callq __adddf3@PLT
1593 ; SOFT-FLOAT-64-NEXT:    movq %rax, 24(%rbx)
1594 ; SOFT-FLOAT-64-NEXT:    movq %r14, 16(%rbx)
1595 ; SOFT-FLOAT-64-NEXT:    movq %r15, 8(%rbx)
1596 ; SOFT-FLOAT-64-NEXT:    movq %r12, (%rbx)
1597 ; SOFT-FLOAT-64-NEXT:    movq %rbx, %rax
1598 ; SOFT-FLOAT-64-NEXT:    addq $8, %rsp
1599 ; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 56
1600 ; SOFT-FLOAT-64-NEXT:    popq %rbx
1601 ; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 48
1602 ; SOFT-FLOAT-64-NEXT:    popq %r12
1603 ; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 40
1604 ; SOFT-FLOAT-64-NEXT:    popq %r13
1605 ; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 32
1606 ; SOFT-FLOAT-64-NEXT:    popq %r14
1607 ; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 24
1608 ; SOFT-FLOAT-64-NEXT:    popq %r15
1609 ; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 16
1610 ; SOFT-FLOAT-64-NEXT:    popq %rbp
1611 ; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 8
1612 ; SOFT-FLOAT-64-NEXT:    retq
1614 ; SOFT-FLOAT-64-FMA-LABEL: fmuladd_contract_v4f64:
1615 ; SOFT-FLOAT-64-FMA:       # %bb.0:
1616 ; SOFT-FLOAT-64-FMA-NEXT:    pushq %rbp
1617 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_def_cfa_offset 16
1618 ; SOFT-FLOAT-64-FMA-NEXT:    pushq %r15
1619 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_def_cfa_offset 24
1620 ; SOFT-FLOAT-64-FMA-NEXT:    pushq %r14
1621 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_def_cfa_offset 32
1622 ; SOFT-FLOAT-64-FMA-NEXT:    pushq %r13
1623 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_def_cfa_offset 40
1624 ; SOFT-FLOAT-64-FMA-NEXT:    pushq %r12
1625 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_def_cfa_offset 48
1626 ; SOFT-FLOAT-64-FMA-NEXT:    pushq %rbx
1627 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_def_cfa_offset 56
1628 ; SOFT-FLOAT-64-FMA-NEXT:    pushq %rax
1629 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_def_cfa_offset 64
1630 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_offset %rbx, -56
1631 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_offset %r12, -48
1632 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_offset %r13, -40
1633 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_offset %r14, -32
1634 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_offset %r15, -24
1635 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_offset %rbp, -16
1636 ; SOFT-FLOAT-64-FMA-NEXT:    movq %rcx, %r14
1637 ; SOFT-FLOAT-64-FMA-NEXT:    movq %rdx, %r15
1638 ; SOFT-FLOAT-64-FMA-NEXT:    movq %rsi, %r12
1639 ; SOFT-FLOAT-64-FMA-NEXT:    movq %rdi, %rbx
1640 ; SOFT-FLOAT-64-FMA-NEXT:    movq {{[0-9]+}}(%rsp), %rbp
1641 ; SOFT-FLOAT-64-FMA-NEXT:    movq {{[0-9]+}}(%rsp), %rsi
1642 ; SOFT-FLOAT-64-FMA-NEXT:    movq %r8, %rdi
1643 ; SOFT-FLOAT-64-FMA-NEXT:    callq __muldf3@PLT
1644 ; SOFT-FLOAT-64-FMA-NEXT:    movq %rax, %r13
1645 ; SOFT-FLOAT-64-FMA-NEXT:    movq %r14, %rdi
1646 ; SOFT-FLOAT-64-FMA-NEXT:    movq %rbp, %rsi
1647 ; SOFT-FLOAT-64-FMA-NEXT:    callq __muldf3@PLT
1648 ; SOFT-FLOAT-64-FMA-NEXT:    movq %rax, %r14
1649 ; SOFT-FLOAT-64-FMA-NEXT:    movq %r15, %rdi
1650 ; SOFT-FLOAT-64-FMA-NEXT:    movq {{[0-9]+}}(%rsp), %rsi
1651 ; SOFT-FLOAT-64-FMA-NEXT:    callq __muldf3@PLT
1652 ; SOFT-FLOAT-64-FMA-NEXT:    movq %rax, %r15
1653 ; SOFT-FLOAT-64-FMA-NEXT:    movq %r12, %rdi
1654 ; SOFT-FLOAT-64-FMA-NEXT:    movq {{[0-9]+}}(%rsp), %rsi
1655 ; SOFT-FLOAT-64-FMA-NEXT:    callq __muldf3@PLT
1656 ; SOFT-FLOAT-64-FMA-NEXT:    movq %rax, %rdi
1657 ; SOFT-FLOAT-64-FMA-NEXT:    movq {{[0-9]+}}(%rsp), %rsi
1658 ; SOFT-FLOAT-64-FMA-NEXT:    callq __adddf3@PLT
1659 ; SOFT-FLOAT-64-FMA-NEXT:    movq %rax, %r12
1660 ; SOFT-FLOAT-64-FMA-NEXT:    movq %r15, %rdi
1661 ; SOFT-FLOAT-64-FMA-NEXT:    movq {{[0-9]+}}(%rsp), %rsi
1662 ; SOFT-FLOAT-64-FMA-NEXT:    callq __adddf3@PLT
1663 ; SOFT-FLOAT-64-FMA-NEXT:    movq %rax, %r15
1664 ; SOFT-FLOAT-64-FMA-NEXT:    movq %r14, %rdi
1665 ; SOFT-FLOAT-64-FMA-NEXT:    movq {{[0-9]+}}(%rsp), %rsi
1666 ; SOFT-FLOAT-64-FMA-NEXT:    callq __adddf3@PLT
1667 ; SOFT-FLOAT-64-FMA-NEXT:    movq %rax, %r14
1668 ; SOFT-FLOAT-64-FMA-NEXT:    movq %r13, %rdi
1669 ; SOFT-FLOAT-64-FMA-NEXT:    movq {{[0-9]+}}(%rsp), %rsi
1670 ; SOFT-FLOAT-64-FMA-NEXT:    callq __adddf3@PLT
1671 ; SOFT-FLOAT-64-FMA-NEXT:    movq %rax, 24(%rbx)
1672 ; SOFT-FLOAT-64-FMA-NEXT:    movq %r14, 16(%rbx)
1673 ; SOFT-FLOAT-64-FMA-NEXT:    movq %r15, 8(%rbx)
1674 ; SOFT-FLOAT-64-FMA-NEXT:    movq %r12, (%rbx)
1675 ; SOFT-FLOAT-64-FMA-NEXT:    movq %rbx, %rax
1676 ; SOFT-FLOAT-64-FMA-NEXT:    addq $8, %rsp
1677 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_def_cfa_offset 56
1678 ; SOFT-FLOAT-64-FMA-NEXT:    popq %rbx
1679 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_def_cfa_offset 48
1680 ; SOFT-FLOAT-64-FMA-NEXT:    popq %r12
1681 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_def_cfa_offset 40
1682 ; SOFT-FLOAT-64-FMA-NEXT:    popq %r13
1683 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_def_cfa_offset 32
1684 ; SOFT-FLOAT-64-FMA-NEXT:    popq %r14
1685 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_def_cfa_offset 24
1686 ; SOFT-FLOAT-64-FMA-NEXT:    popq %r15
1687 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_def_cfa_offset 16
1688 ; SOFT-FLOAT-64-FMA-NEXT:    popq %rbp
1689 ; SOFT-FLOAT-64-FMA-NEXT:    .cfi_def_cfa_offset 8
1690 ; SOFT-FLOAT-64-FMA-NEXT:    retq
1692 ; SOFT-FLOAT-64-FMA4-LABEL: fmuladd_contract_v4f64:
1693 ; SOFT-FLOAT-64-FMA4:       # %bb.0:
1694 ; SOFT-FLOAT-64-FMA4-NEXT:    pushq %rbp
1695 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_def_cfa_offset 16
1696 ; SOFT-FLOAT-64-FMA4-NEXT:    pushq %r15
1697 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_def_cfa_offset 24
1698 ; SOFT-FLOAT-64-FMA4-NEXT:    pushq %r14
1699 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_def_cfa_offset 32
1700 ; SOFT-FLOAT-64-FMA4-NEXT:    pushq %r13
1701 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_def_cfa_offset 40
1702 ; SOFT-FLOAT-64-FMA4-NEXT:    pushq %r12
1703 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_def_cfa_offset 48
1704 ; SOFT-FLOAT-64-FMA4-NEXT:    pushq %rbx
1705 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_def_cfa_offset 56
1706 ; SOFT-FLOAT-64-FMA4-NEXT:    pushq %rax
1707 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_def_cfa_offset 64
1708 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_offset %rbx, -56
1709 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_offset %r12, -48
1710 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_offset %r13, -40
1711 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_offset %r14, -32
1712 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_offset %r15, -24
1713 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_offset %rbp, -16
1714 ; SOFT-FLOAT-64-FMA4-NEXT:    movq %rcx, %r14
1715 ; SOFT-FLOAT-64-FMA4-NEXT:    movq %rdx, %r15
1716 ; SOFT-FLOAT-64-FMA4-NEXT:    movq %rsi, %r12
1717 ; SOFT-FLOAT-64-FMA4-NEXT:    movq %rdi, %rbx
1718 ; SOFT-FLOAT-64-FMA4-NEXT:    movq {{[0-9]+}}(%rsp), %rbp
1719 ; SOFT-FLOAT-64-FMA4-NEXT:    movq {{[0-9]+}}(%rsp), %rsi
1720 ; SOFT-FLOAT-64-FMA4-NEXT:    movq %r8, %rdi
1721 ; SOFT-FLOAT-64-FMA4-NEXT:    callq __muldf3@PLT
1722 ; SOFT-FLOAT-64-FMA4-NEXT:    movq %rax, %r13
1723 ; SOFT-FLOAT-64-FMA4-NEXT:    movq %r14, %rdi
1724 ; SOFT-FLOAT-64-FMA4-NEXT:    movq %rbp, %rsi
1725 ; SOFT-FLOAT-64-FMA4-NEXT:    callq __muldf3@PLT
1726 ; SOFT-FLOAT-64-FMA4-NEXT:    movq %rax, %r14
1727 ; SOFT-FLOAT-64-FMA4-NEXT:    movq %r15, %rdi
1728 ; SOFT-FLOAT-64-FMA4-NEXT:    movq {{[0-9]+}}(%rsp), %rsi
1729 ; SOFT-FLOAT-64-FMA4-NEXT:    callq __muldf3@PLT
1730 ; SOFT-FLOAT-64-FMA4-NEXT:    movq %rax, %r15
1731 ; SOFT-FLOAT-64-FMA4-NEXT:    movq %r12, %rdi
1732 ; SOFT-FLOAT-64-FMA4-NEXT:    movq {{[0-9]+}}(%rsp), %rsi
1733 ; SOFT-FLOAT-64-FMA4-NEXT:    callq __muldf3@PLT
1734 ; SOFT-FLOAT-64-FMA4-NEXT:    movq %rax, %rdi
1735 ; SOFT-FLOAT-64-FMA4-NEXT:    movq {{[0-9]+}}(%rsp), %rsi
1736 ; SOFT-FLOAT-64-FMA4-NEXT:    callq __adddf3@PLT
1737 ; SOFT-FLOAT-64-FMA4-NEXT:    movq %rax, %r12
1738 ; SOFT-FLOAT-64-FMA4-NEXT:    movq %r15, %rdi
1739 ; SOFT-FLOAT-64-FMA4-NEXT:    movq {{[0-9]+}}(%rsp), %rsi
1740 ; SOFT-FLOAT-64-FMA4-NEXT:    callq __adddf3@PLT
1741 ; SOFT-FLOAT-64-FMA4-NEXT:    movq %rax, %r15
1742 ; SOFT-FLOAT-64-FMA4-NEXT:    movq %r14, %rdi
1743 ; SOFT-FLOAT-64-FMA4-NEXT:    movq {{[0-9]+}}(%rsp), %rsi
1744 ; SOFT-FLOAT-64-FMA4-NEXT:    callq __adddf3@PLT
1745 ; SOFT-FLOAT-64-FMA4-NEXT:    movq %rax, %r14
1746 ; SOFT-FLOAT-64-FMA4-NEXT:    movq %r13, %rdi
1747 ; SOFT-FLOAT-64-FMA4-NEXT:    movq {{[0-9]+}}(%rsp), %rsi
1748 ; SOFT-FLOAT-64-FMA4-NEXT:    callq __adddf3@PLT
1749 ; SOFT-FLOAT-64-FMA4-NEXT:    movq %rax, 24(%rbx)
1750 ; SOFT-FLOAT-64-FMA4-NEXT:    movq %r14, 16(%rbx)
1751 ; SOFT-FLOAT-64-FMA4-NEXT:    movq %r15, 8(%rbx)
1752 ; SOFT-FLOAT-64-FMA4-NEXT:    movq %r12, (%rbx)
1753 ; SOFT-FLOAT-64-FMA4-NEXT:    movq %rbx, %rax
1754 ; SOFT-FLOAT-64-FMA4-NEXT:    addq $8, %rsp
1755 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_def_cfa_offset 56
1756 ; SOFT-FLOAT-64-FMA4-NEXT:    popq %rbx
1757 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_def_cfa_offset 48
1758 ; SOFT-FLOAT-64-FMA4-NEXT:    popq %r12
1759 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_def_cfa_offset 40
1760 ; SOFT-FLOAT-64-FMA4-NEXT:    popq %r13
1761 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_def_cfa_offset 32
1762 ; SOFT-FLOAT-64-FMA4-NEXT:    popq %r14
1763 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_def_cfa_offset 24
1764 ; SOFT-FLOAT-64-FMA4-NEXT:    popq %r15
1765 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_def_cfa_offset 16
1766 ; SOFT-FLOAT-64-FMA4-NEXT:    popq %rbp
1767 ; SOFT-FLOAT-64-FMA4-NEXT:    .cfi_def_cfa_offset 8
1768 ; SOFT-FLOAT-64-FMA4-NEXT:    retq
1769   %product = fmul contract <4 x double> %a, %b
1770   %result = fadd contract <4 x double> %product, %c
1771   ret <4 x double> %result
1774 attributes #0 = { "use-soft-float"="true" }
1776 declare float @llvm.fmuladd.f32(float %a, float %b, float %c)
1777 declare double @llvm.fmuladd.f64(double %a, double %b, double %c)