xref: /llvm-project/llvm/test/CodeGen/X86/fmuladd-soft-float.ll (revision 2068b1ba031e258a6448bea372005d19692c802a)
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
8
9define 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
33;
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
57;
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
81;
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
95;
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
109;
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
125}
126
127define 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
165;
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
203;
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
241;
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
255;
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
269;
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
285}
286
287define 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
311;
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
335;
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
359;
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
373;
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
387;
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
404}
405
406define 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
444;
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
482;
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
520;
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
534;
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
548;
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
565}
566
567define <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
666;
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
765;
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
864;
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
942;
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
1020;
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
1101}
1102
1103define <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
1247;
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
1391;
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
1535;
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 %r9, %rbp
1559; SOFT-FLOAT-64-NEXT:    movq %rcx, %r14
1560; SOFT-FLOAT-64-NEXT:    movq %rdx, %r15
1561; SOFT-FLOAT-64-NEXT:    movq %rsi, %r13
1562; SOFT-FLOAT-64-NEXT:    movq %rdi, %rbx
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, %r12
1567; SOFT-FLOAT-64-NEXT:    movq %r14, %rdi
1568; SOFT-FLOAT-64-NEXT:    movq {{[0-9]+}}(%rsp), %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 %r13, %rdi
1576; SOFT-FLOAT-64-NEXT:    movq %rbp, %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, %r13
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 %r12, %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 %r13, (%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
1613;
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 %r9, %rbp
1637; SOFT-FLOAT-64-FMA-NEXT:    movq %rcx, %r14
1638; SOFT-FLOAT-64-FMA-NEXT:    movq %rdx, %r15
1639; SOFT-FLOAT-64-FMA-NEXT:    movq %rsi, %r13
1640; SOFT-FLOAT-64-FMA-NEXT:    movq %rdi, %rbx
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, %r12
1645; SOFT-FLOAT-64-FMA-NEXT:    movq %r14, %rdi
1646; SOFT-FLOAT-64-FMA-NEXT:    movq {{[0-9]+}}(%rsp), %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 %r13, %rdi
1654; SOFT-FLOAT-64-FMA-NEXT:    movq %rbp, %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, %r13
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 %r12, %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 %r13, (%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
1691;
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 %r9, %rbp
1715; SOFT-FLOAT-64-FMA4-NEXT:    movq %rcx, %r14
1716; SOFT-FLOAT-64-FMA4-NEXT:    movq %rdx, %r15
1717; SOFT-FLOAT-64-FMA4-NEXT:    movq %rsi, %r13
1718; SOFT-FLOAT-64-FMA4-NEXT:    movq %rdi, %rbx
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, %r12
1723; SOFT-FLOAT-64-FMA4-NEXT:    movq %r14, %rdi
1724; SOFT-FLOAT-64-FMA4-NEXT:    movq {{[0-9]+}}(%rsp), %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 %r13, %rdi
1732; SOFT-FLOAT-64-FMA4-NEXT:    movq %rbp, %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, %r13
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 %r12, %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 %r13, (%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
1772}
1773
1774attributes #0 = { "use-soft-float"="true" }
1775
1776declare float @llvm.fmuladd.f32(float %a, float %b, float %c)
1777declare double @llvm.fmuladd.f64(double %a, double %b, double %c)
1778