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