[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / X86 / fp128-libcalls.ll
blobae1125bacf8af67c7e9ab5df3bce5f35804bb425
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -O2 -mtriple=x86_64-linux-android \
3 ; RUN:     -enable-legalize-types-checking | FileCheck %s
4 ; RUN: llc < %s -O2 -mtriple=x86_64-linux-gnu \
5 ; RUN:     -enable-legalize-types-checking | FileCheck %s
6 ; RUN: llc < %s -O2 -mtriple=i686-linux-gnu -mattr=sse2 \
7 ; RUN:     -enable-legalize-types-checking | FileCheck %s --check-prefix=X86
9 ; Check all soft floating point library function calls.
11 @vf64 = common dso_local global double 0.000000e+00, align 8
12 @vf128 = common dso_local global fp128 0xL00000000000000000000000000000000, align 16
14 define dso_local void @Test128Add(fp128 %d1, fp128 %d2) nounwind {
15 ; CHECK-LABEL: Test128Add:
16 ; CHECK:       # %bb.0: # %entry
17 ; CHECK-NEXT:    pushq %rax
18 ; CHECK-NEXT:    callq __addtf3@PLT
19 ; CHECK-NEXT:    movaps %xmm0, vf128(%rip)
20 ; CHECK-NEXT:    popq %rax
21 ; CHECK-NEXT:    retq
23 ; X86-LABEL: Test128Add:
24 ; X86:       # %bb.0: # %entry
25 ; X86-NEXT:    pushl %esi
26 ; X86-NEXT:    subl $36, %esp
27 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
28 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
29 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
30 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
31 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
32 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
33 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
34 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
35 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
36 ; X86-NEXT:    pushl %eax
37 ; X86-NEXT:    calll __addtf3
38 ; X86-NEXT:    addl $44, %esp
39 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
40 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
41 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
42 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
43 ; X86-NEXT:    movl %esi, vf128+12
44 ; X86-NEXT:    movl %edx, vf128+8
45 ; X86-NEXT:    movl %ecx, vf128+4
46 ; X86-NEXT:    movl %eax, vf128
47 ; X86-NEXT:    addl $24, %esp
48 ; X86-NEXT:    popl %esi
49 ; X86-NEXT:    retl
50 entry:
51   %add = fadd fp128 %d1, %d2
52   store fp128 %add, fp128* @vf128, align 16
53   ret void
56 define dso_local void @Test128_1Add(fp128 %d1) nounwind {
57 ; CHECK-LABEL: Test128_1Add:
58 ; CHECK:       # %bb.0: # %entry
59 ; CHECK-NEXT:    pushq %rax
60 ; CHECK-NEXT:    movaps %xmm0, %xmm1
61 ; CHECK-NEXT:    movaps vf128(%rip), %xmm0
62 ; CHECK-NEXT:    callq __addtf3@PLT
63 ; CHECK-NEXT:    movaps %xmm0, vf128(%rip)
64 ; CHECK-NEXT:    popq %rax
65 ; CHECK-NEXT:    retq
67 ; X86-LABEL: Test128_1Add:
68 ; X86:       # %bb.0: # %entry
69 ; X86-NEXT:    pushl %esi
70 ; X86-NEXT:    subl $36, %esp
71 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
72 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
73 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
74 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
75 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
76 ; X86-NEXT:    pushl vf128+12
77 ; X86-NEXT:    pushl vf128+8
78 ; X86-NEXT:    pushl vf128+4
79 ; X86-NEXT:    pushl vf128
80 ; X86-NEXT:    pushl %eax
81 ; X86-NEXT:    calll __addtf3
82 ; X86-NEXT:    addl $44, %esp
83 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
84 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
85 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
86 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
87 ; X86-NEXT:    movl %esi, vf128+8
88 ; X86-NEXT:    movl %edx, vf128+12
89 ; X86-NEXT:    movl %eax, vf128
90 ; X86-NEXT:    movl %ecx, vf128+4
91 ; X86-NEXT:    addl $24, %esp
92 ; X86-NEXT:    popl %esi
93 ; X86-NEXT:    retl
94 entry:
95   %0 = load fp128, fp128* @vf128, align 16
96   %add = fadd fp128 %0, %d1
97   store fp128 %add, fp128* @vf128, align 16
98   ret void
101 define dso_local void @Test128Sub(fp128 %d1, fp128 %d2) nounwind {
102 ; CHECK-LABEL: Test128Sub:
103 ; CHECK:       # %bb.0: # %entry
104 ; CHECK-NEXT:    pushq %rax
105 ; CHECK-NEXT:    callq __subtf3@PLT
106 ; CHECK-NEXT:    movaps %xmm0, vf128(%rip)
107 ; CHECK-NEXT:    popq %rax
108 ; CHECK-NEXT:    retq
110 ; X86-LABEL: Test128Sub:
111 ; X86:       # %bb.0: # %entry
112 ; X86-NEXT:    pushl %esi
113 ; X86-NEXT:    subl $36, %esp
114 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
115 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
116 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
117 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
118 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
119 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
120 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
121 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
122 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
123 ; X86-NEXT:    pushl %eax
124 ; X86-NEXT:    calll __subtf3
125 ; X86-NEXT:    addl $44, %esp
126 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
127 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
128 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
129 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
130 ; X86-NEXT:    movl %esi, vf128+12
131 ; X86-NEXT:    movl %edx, vf128+8
132 ; X86-NEXT:    movl %ecx, vf128+4
133 ; X86-NEXT:    movl %eax, vf128
134 ; X86-NEXT:    addl $24, %esp
135 ; X86-NEXT:    popl %esi
136 ; X86-NEXT:    retl
137 entry:
138   %sub = fsub fp128 %d1, %d2
139   store fp128 %sub, fp128* @vf128, align 16
140   ret void
143 define dso_local void @Test128_1Sub(fp128 %d1) nounwind {
144 ; CHECK-LABEL: Test128_1Sub:
145 ; CHECK:       # %bb.0: # %entry
146 ; CHECK-NEXT:    pushq %rax
147 ; CHECK-NEXT:    movaps %xmm0, %xmm1
148 ; CHECK-NEXT:    movaps vf128(%rip), %xmm0
149 ; CHECK-NEXT:    callq __subtf3@PLT
150 ; CHECK-NEXT:    movaps %xmm0, vf128(%rip)
151 ; CHECK-NEXT:    popq %rax
152 ; CHECK-NEXT:    retq
154 ; X86-LABEL: Test128_1Sub:
155 ; X86:       # %bb.0: # %entry
156 ; X86-NEXT:    pushl %esi
157 ; X86-NEXT:    subl $36, %esp
158 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
159 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
160 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
161 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
162 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
163 ; X86-NEXT:    pushl vf128+12
164 ; X86-NEXT:    pushl vf128+8
165 ; X86-NEXT:    pushl vf128+4
166 ; X86-NEXT:    pushl vf128
167 ; X86-NEXT:    pushl %eax
168 ; X86-NEXT:    calll __subtf3
169 ; X86-NEXT:    addl $44, %esp
170 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
171 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
172 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
173 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
174 ; X86-NEXT:    movl %esi, vf128+8
175 ; X86-NEXT:    movl %edx, vf128+12
176 ; X86-NEXT:    movl %eax, vf128
177 ; X86-NEXT:    movl %ecx, vf128+4
178 ; X86-NEXT:    addl $24, %esp
179 ; X86-NEXT:    popl %esi
180 ; X86-NEXT:    retl
181 entry:
182   %0 = load fp128, fp128* @vf128, align 16
183   %sub = fsub fp128 %0, %d1
184   store fp128 %sub, fp128* @vf128, align 16
185   ret void
188 define dso_local void @Test128Mul(fp128 %d1, fp128 %d2) nounwind {
189 ; CHECK-LABEL: Test128Mul:
190 ; CHECK:       # %bb.0: # %entry
191 ; CHECK-NEXT:    pushq %rax
192 ; CHECK-NEXT:    callq __multf3@PLT
193 ; CHECK-NEXT:    movaps %xmm0, vf128(%rip)
194 ; CHECK-NEXT:    popq %rax
195 ; CHECK-NEXT:    retq
197 ; X86-LABEL: Test128Mul:
198 ; X86:       # %bb.0: # %entry
199 ; X86-NEXT:    pushl %esi
200 ; X86-NEXT:    subl $36, %esp
201 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
202 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
203 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
204 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
205 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
206 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
207 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
208 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
209 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
210 ; X86-NEXT:    pushl %eax
211 ; X86-NEXT:    calll __multf3
212 ; X86-NEXT:    addl $44, %esp
213 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
214 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
215 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
216 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
217 ; X86-NEXT:    movl %esi, vf128+12
218 ; X86-NEXT:    movl %edx, vf128+8
219 ; X86-NEXT:    movl %ecx, vf128+4
220 ; X86-NEXT:    movl %eax, vf128
221 ; X86-NEXT:    addl $24, %esp
222 ; X86-NEXT:    popl %esi
223 ; X86-NEXT:    retl
224 entry:
225   %mul = fmul fp128 %d1, %d2
226   store fp128 %mul, fp128* @vf128, align 16
227   ret void
230 define dso_local void @Test128_1Mul(fp128 %d1) nounwind {
231 ; CHECK-LABEL: Test128_1Mul:
232 ; CHECK:       # %bb.0: # %entry
233 ; CHECK-NEXT:    pushq %rax
234 ; CHECK-NEXT:    movaps %xmm0, %xmm1
235 ; CHECK-NEXT:    movaps vf128(%rip), %xmm0
236 ; CHECK-NEXT:    callq __multf3@PLT
237 ; CHECK-NEXT:    movaps %xmm0, vf128(%rip)
238 ; CHECK-NEXT:    popq %rax
239 ; CHECK-NEXT:    retq
241 ; X86-LABEL: Test128_1Mul:
242 ; X86:       # %bb.0: # %entry
243 ; X86-NEXT:    pushl %esi
244 ; X86-NEXT:    subl $36, %esp
245 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
246 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
247 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
248 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
249 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
250 ; X86-NEXT:    pushl vf128+12
251 ; X86-NEXT:    pushl vf128+8
252 ; X86-NEXT:    pushl vf128+4
253 ; X86-NEXT:    pushl vf128
254 ; X86-NEXT:    pushl %eax
255 ; X86-NEXT:    calll __multf3
256 ; X86-NEXT:    addl $44, %esp
257 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
258 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
259 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
260 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
261 ; X86-NEXT:    movl %esi, vf128+8
262 ; X86-NEXT:    movl %edx, vf128+12
263 ; X86-NEXT:    movl %eax, vf128
264 ; X86-NEXT:    movl %ecx, vf128+4
265 ; X86-NEXT:    addl $24, %esp
266 ; X86-NEXT:    popl %esi
267 ; X86-NEXT:    retl
268 entry:
269   %0 = load fp128, fp128* @vf128, align 16
270   %mul = fmul fp128 %0, %d1
271   store fp128 %mul, fp128* @vf128, align 16
272   ret void
275 define dso_local void @Test128Div(fp128 %d1, fp128 %d2) nounwind {
276 ; CHECK-LABEL: Test128Div:
277 ; CHECK:       # %bb.0: # %entry
278 ; CHECK-NEXT:    pushq %rax
279 ; CHECK-NEXT:    callq __divtf3@PLT
280 ; CHECK-NEXT:    movaps %xmm0, vf128(%rip)
281 ; CHECK-NEXT:    popq %rax
282 ; CHECK-NEXT:    retq
284 ; X86-LABEL: Test128Div:
285 ; X86:       # %bb.0: # %entry
286 ; X86-NEXT:    pushl %esi
287 ; X86-NEXT:    subl $36, %esp
288 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
289 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
290 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
291 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
292 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
293 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
294 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
295 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
296 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
297 ; X86-NEXT:    pushl %eax
298 ; X86-NEXT:    calll __divtf3
299 ; X86-NEXT:    addl $44, %esp
300 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
301 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
302 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
303 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
304 ; X86-NEXT:    movl %esi, vf128+12
305 ; X86-NEXT:    movl %edx, vf128+8
306 ; X86-NEXT:    movl %ecx, vf128+4
307 ; X86-NEXT:    movl %eax, vf128
308 ; X86-NEXT:    addl $24, %esp
309 ; X86-NEXT:    popl %esi
310 ; X86-NEXT:    retl
311 entry:
312   %div = fdiv fp128 %d1, %d2
313   store fp128 %div, fp128* @vf128, align 16
314   ret void
317 define dso_local void @Test128_1Div(fp128 %d1) nounwind {
318 ; CHECK-LABEL: Test128_1Div:
319 ; CHECK:       # %bb.0: # %entry
320 ; CHECK-NEXT:    pushq %rax
321 ; CHECK-NEXT:    movaps %xmm0, %xmm1
322 ; CHECK-NEXT:    movaps vf128(%rip), %xmm0
323 ; CHECK-NEXT:    callq __divtf3@PLT
324 ; CHECK-NEXT:    movaps %xmm0, vf128(%rip)
325 ; CHECK-NEXT:    popq %rax
326 ; CHECK-NEXT:    retq
328 ; X86-LABEL: Test128_1Div:
329 ; X86:       # %bb.0: # %entry
330 ; X86-NEXT:    pushl %esi
331 ; X86-NEXT:    subl $36, %esp
332 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
333 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
334 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
335 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
336 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
337 ; X86-NEXT:    pushl vf128+12
338 ; X86-NEXT:    pushl vf128+8
339 ; X86-NEXT:    pushl vf128+4
340 ; X86-NEXT:    pushl vf128
341 ; X86-NEXT:    pushl %eax
342 ; X86-NEXT:    calll __divtf3
343 ; X86-NEXT:    addl $44, %esp
344 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
345 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
346 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
347 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
348 ; X86-NEXT:    movl %esi, vf128+8
349 ; X86-NEXT:    movl %edx, vf128+12
350 ; X86-NEXT:    movl %eax, vf128
351 ; X86-NEXT:    movl %ecx, vf128+4
352 ; X86-NEXT:    addl $24, %esp
353 ; X86-NEXT:    popl %esi
354 ; X86-NEXT:    retl
355 entry:
356   %0 = load fp128, fp128* @vf128, align 16
357   %div = fdiv fp128 %0, %d1
358   store fp128 %div, fp128* @vf128, align 16
359   ret void
362 define dso_local void @Test128Rem(fp128 %d1, fp128 %d2) nounwind {
363 ; CHECK-LABEL: Test128Rem:
364 ; CHECK:       # %bb.0: # %entry
365 ; CHECK-NEXT:    pushq %rax
366 ; CHECK-NEXT:    callq fmodl@PLT
367 ; CHECK-NEXT:    movaps %xmm0, vf128(%rip)
368 ; CHECK-NEXT:    popq %rax
369 ; CHECK-NEXT:    retq
371 ; X86-LABEL: Test128Rem:
372 ; X86:       # %bb.0: # %entry
373 ; X86-NEXT:    pushl %esi
374 ; X86-NEXT:    subl $36, %esp
375 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
376 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
377 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
378 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
379 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
380 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
381 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
382 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
383 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
384 ; X86-NEXT:    pushl %eax
385 ; X86-NEXT:    calll fmodl
386 ; X86-NEXT:    addl $44, %esp
387 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
388 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
389 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
390 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
391 ; X86-NEXT:    movl %esi, vf128+12
392 ; X86-NEXT:    movl %edx, vf128+8
393 ; X86-NEXT:    movl %ecx, vf128+4
394 ; X86-NEXT:    movl %eax, vf128
395 ; X86-NEXT:    addl $24, %esp
396 ; X86-NEXT:    popl %esi
397 ; X86-NEXT:    retl
398 entry:
399   %div = frem fp128 %d1, %d2
400   store fp128 %div, fp128* @vf128, align 16
401   ret void
404 define dso_local void @Test128_1Rem(fp128 %d1) nounwind {
405 ; CHECK-LABEL: Test128_1Rem:
406 ; CHECK:       # %bb.0: # %entry
407 ; CHECK-NEXT:    pushq %rax
408 ; CHECK-NEXT:    movaps %xmm0, %xmm1
409 ; CHECK-NEXT:    movaps vf128(%rip), %xmm0
410 ; CHECK-NEXT:    callq fmodl@PLT
411 ; CHECK-NEXT:    movaps %xmm0, vf128(%rip)
412 ; CHECK-NEXT:    popq %rax
413 ; CHECK-NEXT:    retq
415 ; X86-LABEL: Test128_1Rem:
416 ; X86:       # %bb.0: # %entry
417 ; X86-NEXT:    pushl %esi
418 ; X86-NEXT:    subl $36, %esp
419 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
420 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
421 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
422 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
423 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
424 ; X86-NEXT:    pushl vf128+12
425 ; X86-NEXT:    pushl vf128+8
426 ; X86-NEXT:    pushl vf128+4
427 ; X86-NEXT:    pushl vf128
428 ; X86-NEXT:    pushl %eax
429 ; X86-NEXT:    calll fmodl
430 ; X86-NEXT:    addl $44, %esp
431 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
432 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
433 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
434 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
435 ; X86-NEXT:    movl %esi, vf128+8
436 ; X86-NEXT:    movl %edx, vf128+12
437 ; X86-NEXT:    movl %eax, vf128
438 ; X86-NEXT:    movl %ecx, vf128+4
439 ; X86-NEXT:    addl $24, %esp
440 ; X86-NEXT:    popl %esi
441 ; X86-NEXT:    retl
442 entry:
443   %0 = load fp128, fp128* @vf128, align 16
444   %div = frem fp128 %0, %d1
445   store fp128 %div, fp128* @vf128, align 16
446   ret void
449 define dso_local void @Test128Sqrt(fp128 %d1) nounwind {
450 ; CHECK-LABEL: Test128Sqrt:
451 ; CHECK:       # %bb.0: # %entry
452 ; CHECK-NEXT:    pushq %rax
453 ; CHECK-NEXT:    callq sqrtl@PLT
454 ; CHECK-NEXT:    movaps %xmm0, vf128(%rip)
455 ; CHECK-NEXT:    popq %rax
456 ; CHECK-NEXT:    retq
458 ; X86-LABEL: Test128Sqrt:
459 ; X86:       # %bb.0: # %entry
460 ; X86-NEXT:    pushl %esi
461 ; X86-NEXT:    subl $36, %esp
462 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
463 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
464 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
465 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
466 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
467 ; X86-NEXT:    pushl %eax
468 ; X86-NEXT:    calll sqrtl
469 ; X86-NEXT:    addl $28, %esp
470 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
471 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
472 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
473 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
474 ; X86-NEXT:    movl %esi, vf128+12
475 ; X86-NEXT:    movl %edx, vf128+8
476 ; X86-NEXT:    movl %ecx, vf128+4
477 ; X86-NEXT:    movl %eax, vf128
478 ; X86-NEXT:    addl $24, %esp
479 ; X86-NEXT:    popl %esi
480 ; X86-NEXT:    retl
481 entry:
482   %sqrt = call fp128 @llvm.sqrt.f128(fp128 %d1)
483   store fp128 %sqrt, fp128* @vf128, align 16
484   ret void
486 declare fp128 @llvm.sqrt.f128(fp128)
488 define dso_local void @Test128Sin(fp128 %d1) nounwind {
489 ; CHECK-LABEL: Test128Sin:
490 ; CHECK:       # %bb.0: # %entry
491 ; CHECK-NEXT:    pushq %rax
492 ; CHECK-NEXT:    callq sinl@PLT
493 ; CHECK-NEXT:    movaps %xmm0, vf128(%rip)
494 ; CHECK-NEXT:    popq %rax
495 ; CHECK-NEXT:    retq
497 ; X86-LABEL: Test128Sin:
498 ; X86:       # %bb.0: # %entry
499 ; X86-NEXT:    pushl %esi
500 ; X86-NEXT:    subl $36, %esp
501 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
502 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
503 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
504 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
505 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
506 ; X86-NEXT:    pushl %eax
507 ; X86-NEXT:    calll sinl
508 ; X86-NEXT:    addl $28, %esp
509 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
510 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
511 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
512 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
513 ; X86-NEXT:    movl %esi, vf128+12
514 ; X86-NEXT:    movl %edx, vf128+8
515 ; X86-NEXT:    movl %ecx, vf128+4
516 ; X86-NEXT:    movl %eax, vf128
517 ; X86-NEXT:    addl $24, %esp
518 ; X86-NEXT:    popl %esi
519 ; X86-NEXT:    retl
520 entry:
521   %sqrt = call fp128 @llvm.sin.f128(fp128 %d1)
522   store fp128 %sqrt, fp128* @vf128, align 16
523   ret void
525 declare fp128 @llvm.sin.f128(fp128)
527 define dso_local void @Test128Cos(fp128 %d1) nounwind {
528 ; CHECK-LABEL: Test128Cos:
529 ; CHECK:       # %bb.0: # %entry
530 ; CHECK-NEXT:    pushq %rax
531 ; CHECK-NEXT:    callq cosl@PLT
532 ; CHECK-NEXT:    movaps %xmm0, vf128(%rip)
533 ; CHECK-NEXT:    popq %rax
534 ; CHECK-NEXT:    retq
536 ; X86-LABEL: Test128Cos:
537 ; X86:       # %bb.0: # %entry
538 ; X86-NEXT:    pushl %esi
539 ; X86-NEXT:    subl $36, %esp
540 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
541 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
542 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
543 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
544 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
545 ; X86-NEXT:    pushl %eax
546 ; X86-NEXT:    calll cosl
547 ; X86-NEXT:    addl $28, %esp
548 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
549 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
550 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
551 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
552 ; X86-NEXT:    movl %esi, vf128+12
553 ; X86-NEXT:    movl %edx, vf128+8
554 ; X86-NEXT:    movl %ecx, vf128+4
555 ; X86-NEXT:    movl %eax, vf128
556 ; X86-NEXT:    addl $24, %esp
557 ; X86-NEXT:    popl %esi
558 ; X86-NEXT:    retl
559 entry:
560   %sqrt = call fp128 @llvm.cos.f128(fp128 %d1)
561   store fp128 %sqrt, fp128* @vf128, align 16
562   ret void
564 declare fp128 @llvm.cos.f128(fp128)
566 define dso_local void @Test128Ceil(fp128 %d1) nounwind {
567 ; CHECK-LABEL: Test128Ceil:
568 ; CHECK:       # %bb.0: # %entry
569 ; CHECK-NEXT:    pushq %rax
570 ; CHECK-NEXT:    callq ceill@PLT
571 ; CHECK-NEXT:    movaps %xmm0, vf128(%rip)
572 ; CHECK-NEXT:    popq %rax
573 ; CHECK-NEXT:    retq
575 ; X86-LABEL: Test128Ceil:
576 ; X86:       # %bb.0: # %entry
577 ; X86-NEXT:    pushl %esi
578 ; X86-NEXT:    subl $36, %esp
579 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
580 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
581 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
582 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
583 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
584 ; X86-NEXT:    pushl %eax
585 ; X86-NEXT:    calll ceill
586 ; X86-NEXT:    addl $28, %esp
587 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
588 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
589 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
590 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
591 ; X86-NEXT:    movl %esi, vf128+12
592 ; X86-NEXT:    movl %edx, vf128+8
593 ; X86-NEXT:    movl %ecx, vf128+4
594 ; X86-NEXT:    movl %eax, vf128
595 ; X86-NEXT:    addl $24, %esp
596 ; X86-NEXT:    popl %esi
597 ; X86-NEXT:    retl
598 entry:
599   %sqrt = call fp128 @llvm.ceil.f128(fp128 %d1)
600   store fp128 %sqrt, fp128* @vf128, align 16
601   ret void
603 declare fp128 @llvm.ceil.f128(fp128)
605 define dso_local void @Test128Floor(fp128 %d1) nounwind {
606 ; CHECK-LABEL: Test128Floor:
607 ; CHECK:       # %bb.0: # %entry
608 ; CHECK-NEXT:    pushq %rax
609 ; CHECK-NEXT:    callq floorl@PLT
610 ; CHECK-NEXT:    movaps %xmm0, vf128(%rip)
611 ; CHECK-NEXT:    popq %rax
612 ; CHECK-NEXT:    retq
614 ; X86-LABEL: Test128Floor:
615 ; X86:       # %bb.0: # %entry
616 ; X86-NEXT:    pushl %esi
617 ; X86-NEXT:    subl $36, %esp
618 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
619 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
620 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
621 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
622 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
623 ; X86-NEXT:    pushl %eax
624 ; X86-NEXT:    calll floorl
625 ; X86-NEXT:    addl $28, %esp
626 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
627 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
628 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
629 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
630 ; X86-NEXT:    movl %esi, vf128+12
631 ; X86-NEXT:    movl %edx, vf128+8
632 ; X86-NEXT:    movl %ecx, vf128+4
633 ; X86-NEXT:    movl %eax, vf128
634 ; X86-NEXT:    addl $24, %esp
635 ; X86-NEXT:    popl %esi
636 ; X86-NEXT:    retl
637 entry:
638   %sqrt = call fp128 @llvm.floor.f128(fp128 %d1)
639   store fp128 %sqrt, fp128* @vf128, align 16
640   ret void
642 declare fp128 @llvm.floor.f128(fp128)
644 define dso_local void @Test128Trunc(fp128 %d1) nounwind {
645 ; CHECK-LABEL: Test128Trunc:
646 ; CHECK:       # %bb.0: # %entry
647 ; CHECK-NEXT:    pushq %rax
648 ; CHECK-NEXT:    callq truncl@PLT
649 ; CHECK-NEXT:    movaps %xmm0, vf128(%rip)
650 ; CHECK-NEXT:    popq %rax
651 ; CHECK-NEXT:    retq
653 ; X86-LABEL: Test128Trunc:
654 ; X86:       # %bb.0: # %entry
655 ; X86-NEXT:    pushl %esi
656 ; X86-NEXT:    subl $36, %esp
657 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
658 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
659 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
660 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
661 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
662 ; X86-NEXT:    pushl %eax
663 ; X86-NEXT:    calll truncl
664 ; X86-NEXT:    addl $28, %esp
665 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
666 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
667 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
668 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
669 ; X86-NEXT:    movl %esi, vf128+12
670 ; X86-NEXT:    movl %edx, vf128+8
671 ; X86-NEXT:    movl %ecx, vf128+4
672 ; X86-NEXT:    movl %eax, vf128
673 ; X86-NEXT:    addl $24, %esp
674 ; X86-NEXT:    popl %esi
675 ; X86-NEXT:    retl
676 entry:
677   %sqrt = call fp128 @llvm.trunc.f128(fp128 %d1)
678   store fp128 %sqrt, fp128* @vf128, align 16
679   ret void
681 declare fp128 @llvm.trunc.f128(fp128)
683 define dso_local void @Test128Nearbyint(fp128 %d1) nounwind {
684 ; CHECK-LABEL: Test128Nearbyint:
685 ; CHECK:       # %bb.0: # %entry
686 ; CHECK-NEXT:    pushq %rax
687 ; CHECK-NEXT:    callq nearbyintl@PLT
688 ; CHECK-NEXT:    movaps %xmm0, vf128(%rip)
689 ; CHECK-NEXT:    popq %rax
690 ; CHECK-NEXT:    retq
692 ; X86-LABEL: Test128Nearbyint:
693 ; X86:       # %bb.0: # %entry
694 ; X86-NEXT:    pushl %esi
695 ; X86-NEXT:    subl $36, %esp
696 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
697 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
698 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
699 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
700 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
701 ; X86-NEXT:    pushl %eax
702 ; X86-NEXT:    calll nearbyintl
703 ; X86-NEXT:    addl $28, %esp
704 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
705 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
706 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
707 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
708 ; X86-NEXT:    movl %esi, vf128+12
709 ; X86-NEXT:    movl %edx, vf128+8
710 ; X86-NEXT:    movl %ecx, vf128+4
711 ; X86-NEXT:    movl %eax, vf128
712 ; X86-NEXT:    addl $24, %esp
713 ; X86-NEXT:    popl %esi
714 ; X86-NEXT:    retl
715 entry:
716   %sqrt = call fp128 @llvm.nearbyint.f128(fp128 %d1)
717   store fp128 %sqrt, fp128* @vf128, align 16
718   ret void
720 declare fp128 @llvm.nearbyint.f128(fp128)
722 define dso_local void @Test128Rint(fp128 %d1) nounwind {
723 ; CHECK-LABEL: Test128Rint:
724 ; CHECK:       # %bb.0: # %entry
725 ; CHECK-NEXT:    pushq %rax
726 ; CHECK-NEXT:    callq rintl@PLT
727 ; CHECK-NEXT:    movaps %xmm0, vf128(%rip)
728 ; CHECK-NEXT:    popq %rax
729 ; CHECK-NEXT:    retq
731 ; X86-LABEL: Test128Rint:
732 ; X86:       # %bb.0: # %entry
733 ; X86-NEXT:    pushl %esi
734 ; X86-NEXT:    subl $36, %esp
735 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
736 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
737 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
738 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
739 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
740 ; X86-NEXT:    pushl %eax
741 ; X86-NEXT:    calll rintl
742 ; X86-NEXT:    addl $28, %esp
743 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
744 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
745 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
746 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
747 ; X86-NEXT:    movl %esi, vf128+12
748 ; X86-NEXT:    movl %edx, vf128+8
749 ; X86-NEXT:    movl %ecx, vf128+4
750 ; X86-NEXT:    movl %eax, vf128
751 ; X86-NEXT:    addl $24, %esp
752 ; X86-NEXT:    popl %esi
753 ; X86-NEXT:    retl
754 entry:
755   %sqrt = call fp128 @llvm.rint.f128(fp128 %d1)
756   store fp128 %sqrt, fp128* @vf128, align 16
757   ret void
759 declare fp128 @llvm.rint.f128(fp128)
761 define dso_local void @Test128Round(fp128 %d1) nounwind {
762 ; CHECK-LABEL: Test128Round:
763 ; CHECK:       # %bb.0: # %entry
764 ; CHECK-NEXT:    pushq %rax
765 ; CHECK-NEXT:    callq roundl@PLT
766 ; CHECK-NEXT:    movaps %xmm0, vf128(%rip)
767 ; CHECK-NEXT:    popq %rax
768 ; CHECK-NEXT:    retq
770 ; X86-LABEL: Test128Round:
771 ; X86:       # %bb.0: # %entry
772 ; X86-NEXT:    pushl %esi
773 ; X86-NEXT:    subl $36, %esp
774 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
775 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
776 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
777 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
778 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
779 ; X86-NEXT:    pushl %eax
780 ; X86-NEXT:    calll roundl
781 ; X86-NEXT:    addl $28, %esp
782 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
783 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
784 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
785 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
786 ; X86-NEXT:    movl %esi, vf128+12
787 ; X86-NEXT:    movl %edx, vf128+8
788 ; X86-NEXT:    movl %ecx, vf128+4
789 ; X86-NEXT:    movl %eax, vf128
790 ; X86-NEXT:    addl $24, %esp
791 ; X86-NEXT:    popl %esi
792 ; X86-NEXT:    retl
793 entry:
794   %sqrt = call fp128 @llvm.round.f128(fp128 %d1)
795   store fp128 %sqrt, fp128* @vf128, align 16
796   ret void
798 declare fp128 @llvm.round.f128(fp128)
800 define fp128 @Test128FMA(fp128 %a, fp128 %b, fp128 %c) nounwind {
801 ; CHECK-LABEL: Test128FMA:
802 ; CHECK:       # %bb.0: # %entry
803 ; CHECK-NEXT:    jmp fmal@PLT # TAILCALL
805 ; X86-LABEL: Test128FMA:
806 ; X86:       # %bb.0: # %entry
807 ; X86-NEXT:    pushl %edi
808 ; X86-NEXT:    pushl %esi
809 ; X86-NEXT:    subl $20, %esp
810 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
811 ; X86-NEXT:    subl $12, %esp
812 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
813 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
814 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
815 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
816 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
817 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
818 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
819 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
820 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
821 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
822 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
823 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
824 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
825 ; X86-NEXT:    pushl %eax
826 ; X86-NEXT:    calll fmal
827 ; X86-NEXT:    addl $60, %esp
828 ; X86-NEXT:    movl (%esp), %eax
829 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
830 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
831 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
832 ; X86-NEXT:    movl %edi, 12(%esi)
833 ; X86-NEXT:    movl %edx, 8(%esi)
834 ; X86-NEXT:    movl %ecx, 4(%esi)
835 ; X86-NEXT:    movl %eax, (%esi)
836 ; X86-NEXT:    movl %esi, %eax
837 ; X86-NEXT:    addl $20, %esp
838 ; X86-NEXT:    popl %esi
839 ; X86-NEXT:    popl %edi
840 ; X86-NEXT:    retl $4
841 entry:
842   %call = call fp128 @llvm.fma.f128(fp128 %a, fp128 %b, fp128 %c)
843   ret fp128 %call
845 declare fp128 @llvm.fma.f128(fp128, fp128, fp128)