• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; Tests validating the vfp calling convention for ARM32.
2;
3; RUN: %if --need=target_ARM32 \
4; RUN:   --command %p2i --filetype=obj \
5; RUN:   --disassemble --target arm32 -i %s --args -O2 \
6; RUN:   -allow-externally-defined-symbols \
7; RUN:   | %if --need=target_ARM32 \
8; RUN:   --command FileCheck %s
9; RUN: %if --need=target_ARM32 \
10; RUN:   --command %p2i --filetype=obj --disassemble --target arm32 \
11; RUN:   -i %s --args -Om1 \
12; RUN:   -allow-externally-defined-symbols \
13; RUN:   | %if --need=target_ARM32 \
14; RUN:   --command FileCheck %s
15
16; Boring tests ensuring float arguments are allocated "correctly." Unfortunately
17; this test cannot verify whether the right arguments are being allocated to the
18; right register.
19declare void @float1(float %p0)
20declare void @float2(float %p0, float %p1)
21declare void @float3(float %p0, float %p1, float %p2)
22declare void @float4(float %p0, float %p1, float %p2, float %p3)
23declare void @float5(float %p0, float %p1, float %p2, float %p3, float %p4)
24declare void @float6(float %p0, float %p1, float %p2, float %p3, float %p4,
25                     float %p5)
26declare void @float7(float %p0, float %p1, float %p2, float %p3, float %p4,
27                     float %p5, float %p6)
28declare void @float8(float %p0, float %p1, float %p2, float %p3, float %p4,
29                     float %p5, float %p6, float %p7)
30declare void @float9(float %p0, float %p1, float %p2, float %p3, float %p4,
31                     float %p5, float %p6, float %p7, float %p8)
32declare void @float10(float %p0, float %p1, float %p2, float %p3, float %p4,
33                      float %p5, float %p6, float %p7, float %p8, float %p9)
34declare void @float11(float %p0, float %p1, float %p2, float %p3, float %p4,
35                      float %p5, float %p6, float %p7, float %p8, float %p9,
36                      float %p10)
37declare void @float12(float %p0, float %p1, float %p2, float %p3, float %p4,
38                      float %p5, float %p6, float %p7, float %p8, float %p9,
39                      float %p10, float %p11)
40declare void @float13(float %p0, float %p1, float %p2, float %p3, float %p4,
41                      float %p5, float %p6, float %p7, float %p8, float %p9,
42                      float %p10, float %p11, float %p12)
43declare void @float14(float %p0, float %p1, float %p2, float %p3, float %p4,
44                      float %p5, float %p6, float %p7, float %p8, float %p9,
45                      float %p10, float %p11, float %p12, float %p13)
46declare void @float15(float %p0, float %p1, float %p2, float %p3, float %p4,
47                      float %p5, float %p6, float %p7, float %p8, float %p9,
48                      float %p10, float %p11, float %p12, float %p13,
49                      float %p14)
50declare void @float16(float %p0, float %p1, float %p2, float %p3, float %p4,
51                      float %p5, float %p6, float %p7, float %p8, float %p9,
52                      float %p10, float %p11, float %p12, float %p13,
53                      float %p14, float %p15)
54declare void @float17(float %p0, float %p1, float %p2, float %p3, float %p4,
55                      float %p5, float %p6, float %p7, float %p8, float %p9,
56                      float %p10, float %p11, float %p12, float %p13,
57                      float %p14, float %p15, float %p16)
58declare void @float18(float %p0, float %p1, float %p2, float %p3, float %p4,
59                      float %p5, float %p6, float %p7, float %p8, float %p9,
60                      float %p10, float %p11, float %p12, float %p13,
61                      float %p14, float %p15, float %p16, float %p17)
62define internal void @floatHarness() nounwind {
63; CHECK-LABEL: floatHarness
64  call void @float1(float 1.0)
65; CHECK-DAG: vmov.f32 s0
66; CHECK: bl {{.*}} float1
67  call void @float2(float 1.0, float 2.0)
68; CHECK-DAG: vmov.f32 s0
69; CHECK-DAG: vmov.f32 s1
70; CHECK: bl {{.*}} float2
71  call void @float3(float 1.0, float 2.0, float 3.0)
72; CHECK-DAG: vmov.f32 s0
73; CHECK-DAG: vmov.f32 s1
74; CHECK-DAG: vmov.f32 s2
75; CHECK: bl {{.*}} float3
76  call void @float4(float 1.0, float 2.0, float 3.0, float 4.0)
77; CHECK-DAG: vmov.f32 s0
78; CHECK-DAG: vmov.f32 s1
79; CHECK-DAG: vmov.f32 s2
80; CHECK-DAG: vmov.f32 s3
81; CHECK: bl {{.*}} float4
82  call void @float5(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0)
83; CHECK-DAG: vmov.f32 s0
84; CHECK-DAG: vmov.f32 s1
85; CHECK-DAG: vmov.f32 s2
86; CHECK-DAG: vmov.f32 s3
87; CHECK-DAG: vmov.f32 s4
88; CHECK: bl {{.*}} float5
89  call void @float6(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0,
90                    float 6.0)
91; CHECK-DAG: vmov.f32 s0
92; CHECK-DAG: vmov.f32 s1
93; CHECK-DAG: vmov.f32 s2
94; CHECK-DAG: vmov.f32 s3
95; CHECK-DAG: vmov.f32 s4
96; CHECK-DAG: vmov.f32 s5
97; CHECK: bl {{.*}} float6
98  call void @float7(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0,
99                    float 6.0, float 7.0)
100; CHECK-DAG: vmov.f32 s0
101; CHECK-DAG: vmov.f32 s1
102; CHECK-DAG: vmov.f32 s2
103; CHECK-DAG: vmov.f32 s3
104; CHECK-DAG: vmov.f32 s4
105; CHECK-DAG: vmov.f32 s5
106; CHECK-DAG: vmov.f32 s6
107; CHECK: bl {{.*}} float7
108  call void @float8(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0,
109                    float 6.0, float 7.0, float 8.0)
110; CHECK-DAG: vmov.f32 s0
111; CHECK-DAG: vmov.f32 s1
112; CHECK-DAG: vmov.f32 s2
113; CHECK-DAG: vmov.f32 s3
114; CHECK-DAG: vmov.f32 s4
115; CHECK-DAG: vmov.f32 s5
116; CHECK-DAG: vmov.f32 s6
117; CHECK-DAG: vmov.f32 s7
118; CHECK: bl {{.*}} float8
119  call void @float9(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0,
120                    float 6.0, float 7.0, float 8.0, float 9.0)
121; CHECK-DAG: vmov.f32 s0
122; CHECK-DAG: vmov.f32 s1
123; CHECK-DAG: vmov.f32 s2
124; CHECK-DAG: vmov.f32 s3
125; CHECK-DAG: vmov.f32 s4
126; CHECK-DAG: vmov.f32 s5
127; CHECK-DAG: vmov.f32 s6
128; CHECK-DAG: vmov.f32 s7
129; CHECK-DAG: vmov.f32 s8
130; CHECK: bl {{.*}} float9
131  call void @float10(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0,
132                    float 6.0, float 7.0, float 8.0, float 9.0, float 10.0)
133; CHECK-DAG: vmov.f32 s0
134; CHECK-DAG: vmov.f32 s1
135; CHECK-DAG: vmov.f32 s2
136; CHECK-DAG: vmov.f32 s3
137; CHECK-DAG: vmov.f32 s4
138; CHECK-DAG: vmov.f32 s5
139; CHECK-DAG: vmov.f32 s6
140; CHECK-DAG: vmov.f32 s7
141; CHECK-DAG: vmov.f32 s8
142; CHECK-DAG: vmov.f32 s9
143; CHECK: bl {{.*}} float10
144  call void @float11(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0,
145                    float 6.0, float 7.0, float 8.0, float 9.0, float 10.0,
146                    float 11.0)
147; CHECK-DAG: vmov.f32 s0
148; CHECK-DAG: vmov.f32 s1
149; CHECK-DAG: vmov.f32 s2
150; CHECK-DAG: vmov.f32 s3
151; CHECK-DAG: vmov.f32 s4
152; CHECK-DAG: vmov.f32 s5
153; CHECK-DAG: vmov.f32 s6
154; CHECK-DAG: vmov.f32 s7
155; CHECK-DAG: vmov.f32 s8
156; CHECK-DAG: vmov.f32 s9
157; CHECK-DAG: vmov.f32 s10
158; CHECK: bl {{.*}} float11
159  call void @float12(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0,
160                    float 6.0, float 7.0, float 8.0, float 9.0, float 10.0,
161                    float 11.0, float 12.0)
162; CHECK-DAG: vmov.f32 s0
163; CHECK-DAG: vmov.f32 s1
164; CHECK-DAG: vmov.f32 s2
165; CHECK-DAG: vmov.f32 s3
166; CHECK-DAG: vmov.f32 s4
167; CHECK-DAG: vmov.f32 s5
168; CHECK-DAG: vmov.f32 s6
169; CHECK-DAG: vmov.f32 s7
170; CHECK-DAG: vmov.f32 s8
171; CHECK-DAG: vmov.f32 s9
172; CHECK-DAG: vmov.f32 s10
173; CHECK-DAG: vmov.f32 s11
174; CHECK: bl {{.*}} float12
175  call void @float13(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0,
176                    float 6.0, float 7.0, float 8.0, float 9.0, float 10.0,
177                    float 11.0, float 12.0, float 13.0)
178; CHECK-DAG: vmov.f32 s0
179; CHECK-DAG: vmov.f32 s1
180; CHECK-DAG: vmov.f32 s2
181; CHECK-DAG: vmov.f32 s3
182; CHECK-DAG: vmov.f32 s4
183; CHECK-DAG: vmov.f32 s5
184; CHECK-DAG: vmov.f32 s6
185; CHECK-DAG: vmov.f32 s7
186; CHECK-DAG: vmov.f32 s8
187; CHECK-DAG: vmov.f32 s9
188; CHECK-DAG: vmov.f32 s10
189; CHECK-DAG: vmov.f32 s11
190; CHECK-DAG: vmov.f32 s12
191; CHECK: bl {{.*}} float13
192  call void @float14(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0,
193                    float 6.0, float 7.0, float 8.0, float 9.0, float 10.0,
194                    float 11.0, float 12.0, float 13.0, float 14.0)
195; CHECK-DAG: vmov.f32 s0
196; CHECK-DAG: vmov.f32 s1
197; CHECK-DAG: vmov.f32 s2
198; CHECK-DAG: vmov.f32 s3
199; CHECK-DAG: vmov.f32 s4
200; CHECK-DAG: vmov.f32 s5
201; CHECK-DAG: vmov.f32 s6
202; CHECK-DAG: vmov.f32 s7
203; CHECK-DAG: vmov.f32 s8
204; CHECK-DAG: vmov.f32 s9
205; CHECK-DAG: vmov.f32 s10
206; CHECK-DAG: vmov.f32 s11
207; CHECK-DAG: vmov.f32 s12
208; CHECK-DAG: vmov.f32 s13
209; CHECK: bl {{.*}} float14
210  call void @float15(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0,
211                    float 6.0, float 7.0, float 8.0, float 9.0, float 10.0,
212                    float 11.0, float 12.0, float 13.0, float 14.0,
213                    float 15.0)
214; CHECK-DAG: vmov.f32 s0
215; CHECK-DAG: vmov.f32 s1
216; CHECK-DAG: vmov.f32 s2
217; CHECK-DAG: vmov.f32 s3
218; CHECK-DAG: vmov.f32 s4
219; CHECK-DAG: vmov.f32 s5
220; CHECK-DAG: vmov.f32 s6
221; CHECK-DAG: vmov.f32 s7
222; CHECK-DAG: vmov.f32 s8
223; CHECK-DAG: vmov.f32 s9
224; CHECK-DAG: vmov.f32 s10
225; CHECK-DAG: vmov.f32 s11
226; CHECK-DAG: vmov.f32 s12
227; CHECK-DAG: vmov.f32 s13
228; CHECK-DAG: vmov.f32 s14
229; CHECK: bl {{.*}} float15
230  call void @float16(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0,
231                    float 6.0, float 7.0, float 8.0, float 9.0, float 10.0,
232                    float 11.0, float 12.0, float 13.0, float 14.0,
233                    float 15.0, float 16.0)
234; CHECK-DAG: vmov.f32 s0
235; CHECK-DAG: vmov.f32 s1
236; CHECK-DAG: vmov.f32 s2
237; CHECK-DAG: vmov.f32 s3
238; CHECK-DAG: vmov.f32 s4
239; CHECK-DAG: vmov.f32 s5
240; CHECK-DAG: vmov.f32 s6
241; CHECK-DAG: vmov.f32 s7
242; CHECK-DAG: vmov.f32 s8
243; CHECK-DAG: vmov.f32 s9
244; CHECK-DAG: vmov.f32 s10
245; CHECK-DAG: vmov.f32 s11
246; CHECK-DAG: vmov.f32 s12
247; CHECK-DAG: vmov.f32 s13
248; CHECK-DAG: vmov.f32 s14
249; CHECK-DAG: vmov.f32 s15
250; CHECK: bl {{.*}} float16
251  call void @float17(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0,
252                    float 6.0, float 7.0, float 8.0, float 9.0, float 10.0,
253                    float 11.0, float 12.0, float 13.0, float 14.0,
254                    float 15.0, float 16.0, float 17.0)
255; CHECK-DAG: vmov.f32 s0
256; CHECK-DAG: vmov.f32 s1
257; CHECK-DAG: vmov.f32 s2
258; CHECK-DAG: vmov.f32 s3
259; CHECK-DAG: vmov.f32 s4
260; CHECK-DAG: vmov.f32 s5
261; CHECK-DAG: vmov.f32 s6
262; CHECK-DAG: vmov.f32 s7
263; CHECK-DAG: vmov.f32 s8
264; CHECK-DAG: vmov.f32 s9
265; CHECK-DAG: vmov.f32 s10
266; CHECK-DAG: vmov.f32 s11
267; CHECK-DAG: vmov.f32 s12
268; CHECK-DAG: vmov.f32 s13
269; CHECK-DAG: vmov.f32 s14
270; CHECK-DAG: vmov.f32 s15
271; CHECK-DAG: vstr s{{.*}}, [sp]
272; CHECK: bl {{.*}} float17
273  call void @float18(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0,
274                    float 6.0, float 7.0, float 8.0, float 9.0, float 10.0,
275                    float 11.0, float 12.0, float 13.0, float 14.0,
276                    float 15.0, float 16.0, float 17.0, float 18.0)
277; CHECK-DAG: vmov.f32 s0
278; CHECK-DAG: vmov.f32 s1
279; CHECK-DAG: vmov.f32 s2
280; CHECK-DAG: vmov.f32 s3
281; CHECK-DAG: vmov.f32 s4
282; CHECK-DAG: vmov.f32 s5
283; CHECK-DAG: vmov.f32 s6
284; CHECK-DAG: vmov.f32 s7
285; CHECK-DAG: vmov.f32 s8
286; CHECK-DAG: vmov.f32 s9
287; CHECK-DAG: vmov.f32 s10
288; CHECK-DAG: vmov.f32 s11
289; CHECK-DAG: vmov.f32 s12
290; CHECK-DAG: vmov.f32 s13
291; CHECK-DAG: vmov.f32 s14
292; CHECK-DAG: vmov.f32 s15
293; CHECK-DAG: vstr s{{.*}}, [sp]
294; CHECK-DAG: vstr s{{.*}}, [sp, #4]
295; CHECK: bl {{.*}} float18
296  ret void
297}
298
299declare void @double1(double %p0)
300declare void @double2(double %p0, double %p1)
301declare void @double3(double %p0, double %p1, double %p2)
302declare void @double4(double %p0, double %p1, double %p2, double %p3)
303declare void @double5(double %p0, double %p1, double %p2, double %p3,
304                      double %p4)
305declare void @double6(double %p0, double %p1, double %p2, double %p3,
306                      double %p4, double %p5)
307declare void @double7(double %p0, double %p1, double %p2, double %p3,
308                      double %p4, double %p5, double %p6)
309declare void @double8(double %p0, double %p1, double %p2, double %p3,
310                      double %p4, double %p5, double %p6, double %p7)
311declare void @double9(double %p0, double %p1, double %p2, double %p3,
312                      double %p4, double %p5, double %p6, double %p7,
313                      double %p8)
314declare void @double10(double %p0, double %p1, double %p2, double %p3,
315                      double %p4, double %p5, double %p6, double %p7,
316                      double %p8, double %p9)
317define internal void @doubleHarness() nounwind {
318; CHECK-LABEL: doubleHarness
319  call void @double1(double 1.0)
320; CHECK-DAG: vmov.f64 d0
321; CHECK: bl {{.*}} double1
322  call void @double2(double 1.0, double 2.0)
323; CHECK-DAG: vmov.f64 d0
324; CHECK-DAG: vmov.f64 d1
325; CHECK: bl {{.*}} double2
326  call void @double3(double 1.0, double 2.0, double 3.0)
327; CHECK-DAG: vmov.f64 d0
328; CHECK-DAG: vmov.f64 d1
329; CHECK-DAG: vmov.f64 d2
330; CHECK: bl {{.*}} double3
331  call void @double4(double 1.0, double 2.0, double 3.0, double 4.0)
332; CHECK-DAG: vmov.f64 d0
333; CHECK-DAG: vmov.f64 d1
334; CHECK-DAG: vmov.f64 d2
335; CHECK-DAG: vmov.f64 d3
336; CHECK: bl {{.*}} double4
337  call void @double5(double 1.0, double 2.0, double 3.0, double 4.0,
338                     double 5.0)
339; CHECK-DAG: vmov.f64 d0
340; CHECK-DAG: vmov.f64 d1
341; CHECK-DAG: vmov.f64 d2
342; CHECK-DAG: vmov.f64 d3
343; CHECK-DAG: vmov.f64 d4
344; CHECK: bl {{.*}} double5
345  call void @double6(double 1.0, double 2.0, double 3.0, double 4.0,
346                     double 5.0, double 6.0)
347; CHECK-DAG: vmov.f64 d0
348; CHECK-DAG: vmov.f64 d1
349; CHECK-DAG: vmov.f64 d2
350; CHECK-DAG: vmov.f64 d3
351; CHECK-DAG: vmov.f64 d4
352; CHECK-DAG: vmov.f64 d5
353; CHECK: bl {{.*}} double6
354  call void @double7(double 1.0, double 2.0, double 3.0, double 4.0,
355                     double 5.0, double 6.0, double 7.0)
356; CHECK-DAG: vmov.f64 d0
357; CHECK-DAG: vmov.f64 d1
358; CHECK-DAG: vmov.f64 d2
359; CHECK-DAG: vmov.f64 d3
360; CHECK-DAG: vmov.f64 d4
361; CHECK-DAG: vmov.f64 d5
362; CHECK-DAG: vmov.f64 d6
363; CHECK: bl {{.*}} double7
364  call void @double8(double 1.0, double 2.0, double 3.0, double 4.0,
365                     double 5.0, double 6.0, double 7.0, double 8.0)
366; CHECK-DAG: vmov.f64 d0
367; CHECK-DAG: vmov.f64 d1
368; CHECK-DAG: vmov.f64 d2
369; CHECK-DAG: vmov.f64 d3
370; CHECK-DAG: vmov.f64 d4
371; CHECK-DAG: vmov.f64 d5
372; CHECK-DAG: vmov.f64 d6
373; CHECK-DAG: vmov.f64 d7
374; CHECK: bl {{.*}} double8
375  call void @double9(double 1.0, double 2.0, double 3.0, double 4.0,
376                     double 5.0, double 6.0, double 7.0, double 8.0,
377                     double 9.0)
378; CHECK-DAG: vmov.f64 d0
379; CHECK-DAG: vmov.f64 d1
380; CHECK-DAG: vmov.f64 d2
381; CHECK-DAG: vmov.f64 d3
382; CHECK-DAG: vmov.f64 d4
383; CHECK-DAG: vmov.f64 d5
384; CHECK-DAG: vmov.f64 d6
385; CHECK-DAG: vmov.f64 d7
386; CHECK-DAG: vstr d{{.*}}, [sp]
387; CHECK: bl {{.*}} double9
388  call void @double10(double 1.0, double 2.0, double 3.0, double 4.0,
389                     double 5.0, double 6.0, double 7.0, double 8.0,
390                     double 9.0, double 10.0)
391; CHECK-DAG: vmov.f64 d0
392; CHECK-DAG: vmov.f64 d1
393; CHECK-DAG: vmov.f64 d2
394; CHECK-DAG: vmov.f64 d3
395; CHECK-DAG: vmov.f64 d4
396; CHECK-DAG: vmov.f64 d5
397; CHECK-DAG: vmov.f64 d6
398; CHECK-DAG: vmov.f64 d7
399; CHECK-DAG: vstr d{{.*}}, [sp]
400; CHECK-DAG: vstr d{{.*}}, [sp, #8]
401; CHECK: bl {{.*}} double10
402
403  ret void
404}
405
406declare void @testFDF(float %p0, double %p1, float %p2)
407declare void @testFDDF(float %p0, double %p1, double %p2, float %p3)
408declare void @testFDDDF(float %p0, double %p1, double %p2, double %p3,
409                        float %p4)
410declare void @testFDDDDF(float %p0, double %p1, double %p2, double %p3,
411                         double %p4, float %p5)
412declare void @testFDDDDDF(float %p0, double %p1, double %p2, double %p3,
413                          double %p4, double %p5, float %p6)
414declare void @testFDDDDDDF(float %p0, double %p1, double %p2, double %p3,
415                           double %p4, double %p5, double %p6, float %p7)
416declare void @testFDDDDDDDF(float %p0, double %p1, double %p2, double %p3,
417                            double %p4, double %p5, double %p6, double %p7,
418                            float %p8)
419declare void @testFDDDDDDDFD(float %p0, double %p1, double %p2, double %p3,
420                             double %p4, double %p5, double %p6, double %p7,
421                             float %p8, double %p9)
422declare void @testFDDDDDDDDF(float %p0, double %p1, double %p2, double %p3,
423                             double %p4, double %p5, double %p6, double %p7,
424                             double %p8, float %p9)
425declare void @testFDDDDDDDDDF(float %p0, double %p1, double %p2, double %p3,
426                              double %p4, double %p5, double %p6, double %p7,
427                              double %p8, double %p9, float %p10)
428declare void @testFDDDDDDDDFD(float %p0, double %p1, double %p2, double %p3,
429                              double %p4, double %p5, double %p6, double %p7,
430                              double %p8, float %p9, double %p10)
431declare void @testFDDDDDDDDFDF(float %p0, double %p1, double %p2, double %p3,
432                               double %p4, double %p5, double %p6, double %p7,
433                               double %p8, float %p9, double %p10, float %p11)
434define internal void @packsFloats() nounwind {
435; CHECK-LABEL: packsFloats
436  call void @testFDF(float 1.0, double 2.0, float 3.0)
437; CHECK-DAG: vmov.f32 s0
438; CHECK-DAG: vmov.f64 d1
439; CHECK-DAG: vmov.f32 s1
440; CHECK: bl {{.*}} testFDF
441  call void @testFDDF(float 1.0, double 2.0, double 3.0, float 4.0)
442; CHECK-DAG: vmov.f32 s0
443; CHECK-DAG: vmov.f64 d1
444; CHECK-DAG: vmov.f64 d2
445; CHECK-DAG: vmov.f32 s1
446; CHECK: bl {{.*}} testFDDF
447  call void @testFDDDF(float 1.0, double 2.0, double 3.0, double 4.0,
448                       float 5.0)
449; CHECK-DAG: vmov.f32 s0
450; CHECK-DAG: vmov.f64 d1
451; CHECK-DAG: vmov.f64 d2
452; CHECK-DAG: vmov.f64 d3
453; CHECK-DAG: vmov.f32 s1
454; CHECK: bl {{.*}} testFDDDF
455  call void @testFDDDDF(float 1.0, double 2.0, double 3.0, double 4.0,
456                        double 5.0, float 6.0)
457; CHECK-DAG: vmov.f32 s0
458; CHECK-DAG: vmov.f64 d1
459; CHECK-DAG: vmov.f64 d2
460; CHECK-DAG: vmov.f64 d3
461; CHECK-DAG: vmov.f64 d4
462; CHECK-DAG: vmov.f32 s1
463; CHECK: bl {{.*}} testFDDDDF
464  call void @testFDDDDDF(float 1.0, double 2.0, double 3.0, double 4.0,
465                         double 5.0, double 6.0, float 7.0)
466; CHECK-DAG: vmov.f32 s0
467; CHECK-DAG: vmov.f64 d1
468; CHECK-DAG: vmov.f64 d2
469; CHECK-DAG: vmov.f64 d3
470; CHECK-DAG: vmov.f64 d4
471; CHECK-DAG: vmov.f64 d5
472; CHECK-DAG: vmov.f32 s1
473; CHECK: bl {{.*}} testFDDDDDF
474  call void @testFDDDDDDF(float 1.0, double 2.0, double 3.0, double 4.0,
475                          double 5.0, double 6.0, double 7.0, float 8.0)
476; CHECK-DAG: vmov.f32 s0
477; CHECK-DAG: vmov.f64 d1
478; CHECK-DAG: vmov.f64 d2
479; CHECK-DAG: vmov.f64 d3
480; CHECK-DAG: vmov.f64 d4
481; CHECK-DAG: vmov.f64 d5
482; CHECK-DAG: vmov.f64 d6
483; CHECK-DAG: vmov.f32 s1
484; CHECK: bl {{.*}} testFDDDDDDF
485  call void @testFDDDDDDDF(float 1.0, double 2.0, double 3.0, double 4.0,
486                           double 5.0, double 6.0, double 7.0, double 8.0,
487                           float 9.0)
488; CHECK-DAG: vmov.f32 s0
489; CHECK-DAG: vmov.f64 d1
490; CHECK-DAG: vmov.f64 d2
491; CHECK-DAG: vmov.f64 d3
492; CHECK-DAG: vmov.f64 d4
493; CHECK-DAG: vmov.f64 d5
494; CHECK-DAG: vmov.f64 d6
495; CHECK-DAG: vmov.f64 d7
496; CHECK-DAG: vmov.f32 s1
497; CHECK: bl {{.*}} testFDDDDDDDF
498  call void @testFDDDDDDDFD(float 1.0, double 2.0, double 3.0, double 4.0,
499                            double 5.0, double 6.0, double 7.0, double 8.0,
500                            float 9.0, double 10.0)
501; CHECK-DAG: vmov.f32 s0
502; CHECK-DAG: vmov.f64 d1
503; CHECK-DAG: vmov.f64 d2
504; CHECK-DAG: vmov.f64 d3
505; CHECK-DAG: vmov.f64 d4
506; CHECK-DAG: vmov.f64 d5
507; CHECK-DAG: vmov.f64 d6
508; CHECK-DAG: vmov.f64 d7
509; CHECK-DAG: vstr d{{.*}}, [sp]
510; CHECK-DAG: vmov.f32 s1
511; CHECK: bl {{.*}} testFDDDDDDDFD
512  call void @testFDDDDDDDDF(float 1.0, double 2.0, double 3.0, double 4.0,
513                            double 5.0, double 6.0, double 7.0, double 8.0,
514                            double 9.0, float 10.0)
515; CHECK-DAG: vmov.f32 s0
516; CHECK-DAG: vmov.f64 d1
517; CHECK-DAG: vmov.f64 d2
518; CHECK-DAG: vmov.f64 d3
519; CHECK-DAG: vmov.f64 d4
520; CHECK-DAG: vmov.f64 d5
521; CHECK-DAG: vmov.f64 d6
522; CHECK-DAG: vmov.f64 d7
523; CHECK-DAG: vstr d{{.*}}, [sp]
524; CHECK-DAG: vstr s{{.*}}, [sp, #8]
525; CHECK: bl {{.*}} testFDDDDDDDDF
526  call void @testFDDDDDDDDDF(float 1.0, double 2.0, double 3.0, double 4.0,
527                             double 5.0, double 6.0, double 7.0, double 8.0,
528                             double 9.0, double 10.0, float 11.0)
529; CHECK-DAG: vmov.f32 s0
530; CHECK-DAG: vmov.f64 d1
531; CHECK-DAG: vmov.f64 d2
532; CHECK-DAG: vmov.f64 d3
533; CHECK-DAG: vmov.f64 d4
534; CHECK-DAG: vmov.f64 d5
535; CHECK-DAG: vmov.f64 d6
536; CHECK-DAG: vmov.f64 d7
537; CHECK-DAG: vstr d{{.*}}, [sp]
538; CHECK-DAG: vstr d{{.*}}, [sp, #8]
539; CHECK-DAG: vstr s{{.*}}, [sp, #16]
540; CHECK: bl {{.*}} testFDDDDDDDDDF
541  call void @testFDDDDDDDDFD(float 1.0, double 2.0, double 3.0, double 4.0,
542                             double 5.0, double 6.0, double 7.0, double 8.0,
543                             double 9.0, float 10.0, double 11.0)
544; CHECK-DAG: vmov.f32 s0
545; CHECK-DAG: vmov.f64 d1
546; CHECK-DAG: vmov.f64 d2
547; CHECK-DAG: vmov.f64 d3
548; CHECK-DAG: vmov.f64 d4
549; CHECK-DAG: vmov.f64 d5
550; CHECK-DAG: vmov.f64 d6
551; CHECK-DAG: vmov.f64 d7
552; CHECK-DAG: vstr d{{.*}}, [sp]
553; CHECK-DAG: vstr s{{.*}}, [sp, #8]
554; CHECK-DAG: vstr d{{.*}}, [sp, #16]
555; CHECK: bl {{.*}} testFDDDDDDDDFD
556  call void @testFDDDDDDDDFDF(float 1.0, double 2.0, double 3.0, double 4.0,
557                              double 5.0, double 6.0, double 7.0, double 8.0,
558                              double 9.0, float 10.0, double 11.0, float 12.0)
559; CHECK-DAG: vmov.f32 s0
560; CHECK-DAG: vmov.f64 d1
561; CHECK-DAG: vmov.f64 d2
562; CHECK-DAG: vmov.f64 d3
563; CHECK-DAG: vmov.f64 d4
564; CHECK-DAG: vmov.f64 d5
565; CHECK-DAG: vmov.f64 d6
566; CHECK-DAG: vmov.f64 d7
567; CHECK-DAG: vstr d{{.*}}, [sp]
568; CHECK-DAG: vstr s{{.*}}, [sp, #8]
569; CHECK-DAG: vstr d{{.*}}, [sp, #16]
570; CHECK-DAG: vstr s{{.*}}, [sp, #24]
571; CHECK: bl {{.*}} testFDDDDDDDDFD
572
573  ret void
574}
575
576; TODO(jpp): add tests for stack alignment.
577