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