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 \
4 ; RUN: | FileCheck %s --check-prefix=ANDROID
5 ; RUN: llc < %s -O2 -mtriple=x86_64-linux-gnu \
6 ; RUN: -enable-legalize-types-checking \
7 ; RUN: | FileCheck %s --check-prefix=GNU
8 ; RUN: llc < %s -O2 -mtriple=i686-linux-gnu -mattr=+sse2 \
9 ; RUN: -enable-legalize-types-checking \
10 ; RUN: | FileCheck %s --check-prefix=X86
12 ; Check all soft floating point library function calls.
14 define fp128 @add(fp128 %x, fp128 %y) nounwind strictfp {
16 ; CHECK: # %bb.0: # %entry
17 ; CHECK-NEXT: pushq %rax
18 ; CHECK-NEXT: callq __addtf3@PLT
19 ; CHECK-NEXT: popq %rax
23 ; ANDROID: # %bb.0: # %entry
24 ; ANDROID-NEXT: pushq %rax
25 ; ANDROID-NEXT: callq __addtf3@PLT
26 ; ANDROID-NEXT: popq %rax
30 ; GNU: # %bb.0: # %entry
31 ; GNU-NEXT: pushq %rax
32 ; GNU-NEXT: callq __addtf3@PLT
37 ; X86: # %bb.0: # %entry
38 ; X86-NEXT: pushl %esi
39 ; X86-NEXT: subl $24, %esp
40 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
41 ; X86-NEXT: subl $12, %esp
42 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
43 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
44 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
45 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
46 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
47 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
48 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
49 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
50 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
51 ; X86-NEXT: pushl %eax
52 ; X86-NEXT: calll __addtf3
53 ; X86-NEXT: addl $44, %esp
54 ; X86-NEXT: movaps (%esp), %xmm0
55 ; X86-NEXT: movaps %xmm0, (%esi)
56 ; X86-NEXT: movl %esi, %eax
57 ; X86-NEXT: addl $24, %esp
61 %add = call fp128 @llvm.experimental.constrained.fadd.f128(fp128 %x, fp128 %y, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
65 define fp128 @sub(fp128 %x, fp128 %y) nounwind strictfp {
67 ; CHECK: # %bb.0: # %entry
68 ; CHECK-NEXT: pushq %rax
69 ; CHECK-NEXT: callq __subtf3@PLT
70 ; CHECK-NEXT: popq %rax
74 ; ANDROID: # %bb.0: # %entry
75 ; ANDROID-NEXT: pushq %rax
76 ; ANDROID-NEXT: callq __subtf3@PLT
77 ; ANDROID-NEXT: popq %rax
81 ; GNU: # %bb.0: # %entry
82 ; GNU-NEXT: pushq %rax
83 ; GNU-NEXT: callq __subtf3@PLT
88 ; X86: # %bb.0: # %entry
89 ; X86-NEXT: pushl %esi
90 ; X86-NEXT: subl $24, %esp
91 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
92 ; X86-NEXT: subl $12, %esp
93 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
94 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
95 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
96 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
97 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
98 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
99 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
100 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
101 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
102 ; X86-NEXT: pushl %eax
103 ; X86-NEXT: calll __subtf3
104 ; X86-NEXT: addl $44, %esp
105 ; X86-NEXT: movaps (%esp), %xmm0
106 ; X86-NEXT: movaps %xmm0, (%esi)
107 ; X86-NEXT: movl %esi, %eax
108 ; X86-NEXT: addl $24, %esp
109 ; X86-NEXT: popl %esi
112 %sub = call fp128 @llvm.experimental.constrained.fsub.f128(fp128 %x, fp128 %y, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
116 define fp128 @mul(fp128 %x, fp128 %y) nounwind strictfp {
118 ; CHECK: # %bb.0: # %entry
119 ; CHECK-NEXT: pushq %rax
120 ; CHECK-NEXT: callq __multf3@PLT
121 ; CHECK-NEXT: popq %rax
124 ; ANDROID-LABEL: mul:
125 ; ANDROID: # %bb.0: # %entry
126 ; ANDROID-NEXT: pushq %rax
127 ; ANDROID-NEXT: callq __multf3@PLT
128 ; ANDROID-NEXT: popq %rax
132 ; GNU: # %bb.0: # %entry
133 ; GNU-NEXT: pushq %rax
134 ; GNU-NEXT: callq __multf3@PLT
135 ; GNU-NEXT: popq %rax
139 ; X86: # %bb.0: # %entry
140 ; X86-NEXT: pushl %esi
141 ; X86-NEXT: subl $24, %esp
142 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
143 ; X86-NEXT: subl $12, %esp
144 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
145 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
146 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
147 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
148 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
149 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
150 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
151 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
152 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
153 ; X86-NEXT: pushl %eax
154 ; X86-NEXT: calll __multf3
155 ; X86-NEXT: addl $44, %esp
156 ; X86-NEXT: movaps (%esp), %xmm0
157 ; X86-NEXT: movaps %xmm0, (%esi)
158 ; X86-NEXT: movl %esi, %eax
159 ; X86-NEXT: addl $24, %esp
160 ; X86-NEXT: popl %esi
163 %mul = call fp128 @llvm.experimental.constrained.fmul.f128(fp128 %x, fp128 %y, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
167 define fp128 @div(fp128 %x, fp128 %y) nounwind strictfp {
169 ; CHECK: # %bb.0: # %entry
170 ; CHECK-NEXT: pushq %rax
171 ; CHECK-NEXT: callq __divtf3@PLT
172 ; CHECK-NEXT: popq %rax
175 ; ANDROID-LABEL: div:
176 ; ANDROID: # %bb.0: # %entry
177 ; ANDROID-NEXT: pushq %rax
178 ; ANDROID-NEXT: callq __divtf3@PLT
179 ; ANDROID-NEXT: popq %rax
183 ; GNU: # %bb.0: # %entry
184 ; GNU-NEXT: pushq %rax
185 ; GNU-NEXT: callq __divtf3@PLT
186 ; GNU-NEXT: popq %rax
190 ; X86: # %bb.0: # %entry
191 ; X86-NEXT: pushl %esi
192 ; X86-NEXT: subl $24, %esp
193 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
194 ; X86-NEXT: subl $12, %esp
195 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
196 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
197 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
198 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
199 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
200 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
201 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
202 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
203 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
204 ; X86-NEXT: pushl %eax
205 ; X86-NEXT: calll __divtf3
206 ; X86-NEXT: addl $44, %esp
207 ; X86-NEXT: movaps (%esp), %xmm0
208 ; X86-NEXT: movaps %xmm0, (%esi)
209 ; X86-NEXT: movl %esi, %eax
210 ; X86-NEXT: addl $24, %esp
211 ; X86-NEXT: popl %esi
214 %div = call fp128 @llvm.experimental.constrained.fdiv.f128(fp128 %x, fp128 %y, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
218 define fp128 @fma(fp128 %x, fp128 %y, fp128 %z) nounwind strictfp {
219 ; ANDROID-LABEL: fma:
220 ; ANDROID: # %bb.0: # %entry
221 ; ANDROID-NEXT: pushq %rax
222 ; ANDROID-NEXT: callq fmal@PLT
223 ; ANDROID-NEXT: popq %rax
227 ; GNU: # %bb.0: # %entry
228 ; GNU-NEXT: pushq %rax
229 ; GNU-NEXT: callq fmaf128@PLT
230 ; GNU-NEXT: popq %rax
234 ; X86: # %bb.0: # %entry
235 ; X86-NEXT: pushl %esi
236 ; X86-NEXT: subl $24, %esp
237 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
238 ; X86-NEXT: subl $12, %esp
239 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
240 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
241 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
242 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
243 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
244 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
245 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
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 {{[0-9]+}}(%esp)
251 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
252 ; X86-NEXT: pushl %eax
253 ; X86-NEXT: calll fmal
254 ; X86-NEXT: addl $60, %esp
255 ; X86-NEXT: movaps (%esp), %xmm0
256 ; X86-NEXT: movaps %xmm0, (%esi)
257 ; X86-NEXT: movl %esi, %eax
258 ; X86-NEXT: addl $24, %esp
259 ; X86-NEXT: popl %esi
262 %fma = call fp128 @llvm.experimental.constrained.fma.f128(fp128 %x, fp128 %y, fp128 %z, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
266 define fp128 @frem(fp128 %x, fp128 %y) nounwind strictfp {
267 ; ANDROID-LABEL: frem:
268 ; ANDROID: # %bb.0: # %entry
269 ; ANDROID-NEXT: pushq %rax
270 ; ANDROID-NEXT: callq fmodl@PLT
271 ; ANDROID-NEXT: popq %rax
275 ; GNU: # %bb.0: # %entry
276 ; GNU-NEXT: pushq %rax
277 ; GNU-NEXT: callq fmodf128@PLT
278 ; GNU-NEXT: popq %rax
282 ; X86: # %bb.0: # %entry
283 ; X86-NEXT: pushl %esi
284 ; X86-NEXT: subl $24, %esp
285 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
286 ; X86-NEXT: subl $12, %esp
287 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
288 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
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 %eax
297 ; X86-NEXT: calll fmodl
298 ; X86-NEXT: addl $44, %esp
299 ; X86-NEXT: movaps (%esp), %xmm0
300 ; X86-NEXT: movaps %xmm0, (%esi)
301 ; X86-NEXT: movl %esi, %eax
302 ; X86-NEXT: addl $24, %esp
303 ; X86-NEXT: popl %esi
306 %div = call fp128 @llvm.experimental.constrained.frem.f128(fp128 %x, fp128 %y, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
310 define fp128 @ceil(fp128 %x) nounwind strictfp {
311 ; ANDROID-LABEL: ceil:
312 ; ANDROID: # %bb.0: # %entry
313 ; ANDROID-NEXT: pushq %rax
314 ; ANDROID-NEXT: callq ceill@PLT
315 ; ANDROID-NEXT: popq %rax
319 ; GNU: # %bb.0: # %entry
320 ; GNU-NEXT: pushq %rax
321 ; GNU-NEXT: callq ceilf128@PLT
322 ; GNU-NEXT: popq %rax
326 ; X86: # %bb.0: # %entry
327 ; X86-NEXT: pushl %esi
328 ; X86-NEXT: subl $24, %esp
329 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
330 ; X86-NEXT: subl $12, %esp
331 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
332 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
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 %eax
337 ; X86-NEXT: calll ceill
338 ; X86-NEXT: addl $28, %esp
339 ; X86-NEXT: movaps (%esp), %xmm0
340 ; X86-NEXT: movaps %xmm0, (%esi)
341 ; X86-NEXT: movl %esi, %eax
342 ; X86-NEXT: addl $24, %esp
343 ; X86-NEXT: popl %esi
346 %ceil = call fp128 @llvm.experimental.constrained.ceil.f128(fp128 %x, metadata !"fpexcept.strict") #0
350 define fp128 @acos(fp128 %x) nounwind strictfp {
351 ; ANDROID-LABEL: acos:
352 ; ANDROID: # %bb.0: # %entry
353 ; ANDROID-NEXT: pushq %rax
354 ; ANDROID-NEXT: callq acosl@PLT
355 ; ANDROID-NEXT: popq %rax
359 ; GNU: # %bb.0: # %entry
360 ; GNU-NEXT: pushq %rax
361 ; GNU-NEXT: callq acosf128@PLT
362 ; GNU-NEXT: popq %rax
366 ; X86: # %bb.0: # %entry
367 ; X86-NEXT: pushl %esi
368 ; X86-NEXT: subl $24, %esp
369 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
370 ; X86-NEXT: subl $12, %esp
371 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
372 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
373 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
374 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
375 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
376 ; X86-NEXT: pushl %eax
377 ; X86-NEXT: calll acosl
378 ; X86-NEXT: addl $28, %esp
379 ; X86-NEXT: movaps (%esp), %xmm0
380 ; X86-NEXT: movaps %xmm0, (%esi)
381 ; X86-NEXT: movl %esi, %eax
382 ; X86-NEXT: addl $24, %esp
383 ; X86-NEXT: popl %esi
386 %acos = call fp128 @llvm.experimental.constrained.acos.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
390 define fp128 @cos(fp128 %x) nounwind strictfp {
391 ; ANDROID-LABEL: cos:
392 ; ANDROID: # %bb.0: # %entry
393 ; ANDROID-NEXT: pushq %rax
394 ; ANDROID-NEXT: callq cosl@PLT
395 ; ANDROID-NEXT: popq %rax
399 ; GNU: # %bb.0: # %entry
400 ; GNU-NEXT: pushq %rax
401 ; GNU-NEXT: callq cosf128@PLT
402 ; GNU-NEXT: popq %rax
406 ; X86: # %bb.0: # %entry
407 ; X86-NEXT: pushl %esi
408 ; X86-NEXT: subl $24, %esp
409 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
410 ; X86-NEXT: subl $12, %esp
411 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
412 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
413 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
414 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
415 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
416 ; X86-NEXT: pushl %eax
417 ; X86-NEXT: calll cosl
418 ; X86-NEXT: addl $28, %esp
419 ; X86-NEXT: movaps (%esp), %xmm0
420 ; X86-NEXT: movaps %xmm0, (%esi)
421 ; X86-NEXT: movl %esi, %eax
422 ; X86-NEXT: addl $24, %esp
423 ; X86-NEXT: popl %esi
426 %cos = call fp128 @llvm.experimental.constrained.cos.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
430 define fp128 @cosh(fp128 %x) nounwind strictfp {
431 ; ANDROID-LABEL: cosh:
432 ; ANDROID: # %bb.0: # %entry
433 ; ANDROID-NEXT: pushq %rax
434 ; ANDROID-NEXT: callq coshl@PLT
435 ; ANDROID-NEXT: popq %rax
439 ; GNU: # %bb.0: # %entry
440 ; GNU-NEXT: pushq %rax
441 ; GNU-NEXT: callq coshf128@PLT
442 ; GNU-NEXT: popq %rax
446 ; X86: # %bb.0: # %entry
447 ; X86-NEXT: pushl %esi
448 ; X86-NEXT: subl $24, %esp
449 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
450 ; X86-NEXT: subl $12, %esp
451 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
452 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
453 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
454 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
455 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
456 ; X86-NEXT: pushl %eax
457 ; X86-NEXT: calll coshl
458 ; X86-NEXT: addl $28, %esp
459 ; X86-NEXT: movaps (%esp), %xmm0
460 ; X86-NEXT: movaps %xmm0, (%esi)
461 ; X86-NEXT: movl %esi, %eax
462 ; X86-NEXT: addl $24, %esp
463 ; X86-NEXT: popl %esi
466 %cosh = call fp128 @llvm.experimental.constrained.cosh.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
470 define fp128 @exp(fp128 %x) nounwind strictfp {
471 ; ANDROID-LABEL: exp:
472 ; ANDROID: # %bb.0: # %entry
473 ; ANDROID-NEXT: pushq %rax
474 ; ANDROID-NEXT: callq expl@PLT
475 ; ANDROID-NEXT: popq %rax
479 ; GNU: # %bb.0: # %entry
480 ; GNU-NEXT: pushq %rax
481 ; GNU-NEXT: callq expf128@PLT
482 ; GNU-NEXT: popq %rax
486 ; X86: # %bb.0: # %entry
487 ; X86-NEXT: pushl %esi
488 ; X86-NEXT: subl $24, %esp
489 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
490 ; X86-NEXT: subl $12, %esp
491 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
492 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
493 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
494 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
495 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
496 ; X86-NEXT: pushl %eax
497 ; X86-NEXT: calll expl
498 ; X86-NEXT: addl $28, %esp
499 ; X86-NEXT: movaps (%esp), %xmm0
500 ; X86-NEXT: movaps %xmm0, (%esi)
501 ; X86-NEXT: movl %esi, %eax
502 ; X86-NEXT: addl $24, %esp
503 ; X86-NEXT: popl %esi
506 %exp = call fp128 @llvm.experimental.constrained.exp.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
510 define fp128 @exp2(fp128 %x) nounwind strictfp {
511 ; ANDROID-LABEL: exp2:
512 ; ANDROID: # %bb.0: # %entry
513 ; ANDROID-NEXT: pushq %rax
514 ; ANDROID-NEXT: callq exp2l@PLT
515 ; ANDROID-NEXT: popq %rax
519 ; GNU: # %bb.0: # %entry
520 ; GNU-NEXT: pushq %rax
521 ; GNU-NEXT: callq exp2f128@PLT
522 ; GNU-NEXT: popq %rax
526 ; X86: # %bb.0: # %entry
527 ; X86-NEXT: pushl %esi
528 ; X86-NEXT: subl $24, %esp
529 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
530 ; X86-NEXT: subl $12, %esp
531 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
532 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
533 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
534 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
535 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
536 ; X86-NEXT: pushl %eax
537 ; X86-NEXT: calll exp2l
538 ; X86-NEXT: addl $28, %esp
539 ; X86-NEXT: movaps (%esp), %xmm0
540 ; X86-NEXT: movaps %xmm0, (%esi)
541 ; X86-NEXT: movl %esi, %eax
542 ; X86-NEXT: addl $24, %esp
543 ; X86-NEXT: popl %esi
546 %exp2 = call fp128 @llvm.experimental.constrained.exp2.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
550 define fp128 @floor(fp128 %x) nounwind strictfp {
551 ; ANDROID-LABEL: floor:
552 ; ANDROID: # %bb.0: # %entry
553 ; ANDROID-NEXT: pushq %rax
554 ; ANDROID-NEXT: callq floorl@PLT
555 ; ANDROID-NEXT: popq %rax
559 ; GNU: # %bb.0: # %entry
560 ; GNU-NEXT: pushq %rax
561 ; GNU-NEXT: callq floorf128@PLT
562 ; GNU-NEXT: popq %rax
566 ; X86: # %bb.0: # %entry
567 ; X86-NEXT: pushl %esi
568 ; X86-NEXT: subl $24, %esp
569 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
570 ; X86-NEXT: subl $12, %esp
571 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
572 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
573 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
574 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
575 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
576 ; X86-NEXT: pushl %eax
577 ; X86-NEXT: calll floorl
578 ; X86-NEXT: addl $28, %esp
579 ; X86-NEXT: movaps (%esp), %xmm0
580 ; X86-NEXT: movaps %xmm0, (%esi)
581 ; X86-NEXT: movl %esi, %eax
582 ; X86-NEXT: addl $24, %esp
583 ; X86-NEXT: popl %esi
586 %floor = call fp128 @llvm.experimental.constrained.floor.f128(fp128 %x, metadata !"fpexcept.strict") #0
590 define fp128 @log(fp128 %x) nounwind strictfp {
591 ; ANDROID-LABEL: log:
592 ; ANDROID: # %bb.0: # %entry
593 ; ANDROID-NEXT: pushq %rax
594 ; ANDROID-NEXT: callq logl@PLT
595 ; ANDROID-NEXT: popq %rax
599 ; GNU: # %bb.0: # %entry
600 ; GNU-NEXT: pushq %rax
601 ; GNU-NEXT: callq logf128@PLT
602 ; GNU-NEXT: popq %rax
606 ; X86: # %bb.0: # %entry
607 ; X86-NEXT: pushl %esi
608 ; X86-NEXT: subl $24, %esp
609 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
610 ; X86-NEXT: subl $12, %esp
611 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
612 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
613 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
614 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
615 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
616 ; X86-NEXT: pushl %eax
617 ; X86-NEXT: calll logl
618 ; X86-NEXT: addl $28, %esp
619 ; X86-NEXT: movaps (%esp), %xmm0
620 ; X86-NEXT: movaps %xmm0, (%esi)
621 ; X86-NEXT: movl %esi, %eax
622 ; X86-NEXT: addl $24, %esp
623 ; X86-NEXT: popl %esi
626 %log = call fp128 @llvm.experimental.constrained.log.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
630 define fp128 @log10(fp128 %x) nounwind strictfp {
631 ; ANDROID-LABEL: log10:
632 ; ANDROID: # %bb.0: # %entry
633 ; ANDROID-NEXT: pushq %rax
634 ; ANDROID-NEXT: callq log10l@PLT
635 ; ANDROID-NEXT: popq %rax
639 ; GNU: # %bb.0: # %entry
640 ; GNU-NEXT: pushq %rax
641 ; GNU-NEXT: callq log10f128@PLT
642 ; GNU-NEXT: popq %rax
646 ; X86: # %bb.0: # %entry
647 ; X86-NEXT: pushl %esi
648 ; X86-NEXT: subl $24, %esp
649 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
650 ; X86-NEXT: subl $12, %esp
651 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
652 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
653 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
654 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
655 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
656 ; X86-NEXT: pushl %eax
657 ; X86-NEXT: calll log10l
658 ; X86-NEXT: addl $28, %esp
659 ; X86-NEXT: movaps (%esp), %xmm0
660 ; X86-NEXT: movaps %xmm0, (%esi)
661 ; X86-NEXT: movl %esi, %eax
662 ; X86-NEXT: addl $24, %esp
663 ; X86-NEXT: popl %esi
666 %log10 = call fp128 @llvm.experimental.constrained.log10.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
670 define fp128 @log2(fp128 %x) nounwind strictfp {
671 ; ANDROID-LABEL: log2:
672 ; ANDROID: # %bb.0: # %entry
673 ; ANDROID-NEXT: pushq %rax
674 ; ANDROID-NEXT: callq log2l@PLT
675 ; ANDROID-NEXT: popq %rax
679 ; GNU: # %bb.0: # %entry
680 ; GNU-NEXT: pushq %rax
681 ; GNU-NEXT: callq log2f128@PLT
682 ; GNU-NEXT: popq %rax
686 ; X86: # %bb.0: # %entry
687 ; X86-NEXT: pushl %esi
688 ; X86-NEXT: subl $24, %esp
689 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
690 ; X86-NEXT: subl $12, %esp
691 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
692 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
693 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
694 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
695 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
696 ; X86-NEXT: pushl %eax
697 ; X86-NEXT: calll log2l
698 ; X86-NEXT: addl $28, %esp
699 ; X86-NEXT: movaps (%esp), %xmm0
700 ; X86-NEXT: movaps %xmm0, (%esi)
701 ; X86-NEXT: movl %esi, %eax
702 ; X86-NEXT: addl $24, %esp
703 ; X86-NEXT: popl %esi
706 %log2 = call fp128 @llvm.experimental.constrained.log2.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
710 define fp128 @maxnum(fp128 %x, fp128 %y) nounwind strictfp {
711 ; ANDROID-LABEL: maxnum:
712 ; ANDROID: # %bb.0: # %entry
713 ; ANDROID-NEXT: pushq %rax
714 ; ANDROID-NEXT: callq fmaxl@PLT
715 ; ANDROID-NEXT: popq %rax
719 ; GNU: # %bb.0: # %entry
720 ; GNU-NEXT: pushq %rax
721 ; GNU-NEXT: callq fmaxf128@PLT
722 ; GNU-NEXT: popq %rax
726 ; X86: # %bb.0: # %entry
727 ; X86-NEXT: pushl %esi
728 ; X86-NEXT: subl $24, %esp
729 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
730 ; X86-NEXT: subl $12, %esp
731 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
732 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
733 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
734 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
735 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
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 fmaxl
742 ; X86-NEXT: addl $44, %esp
743 ; X86-NEXT: movaps (%esp), %xmm0
744 ; X86-NEXT: movaps %xmm0, (%esi)
745 ; X86-NEXT: movl %esi, %eax
746 ; X86-NEXT: addl $24, %esp
747 ; X86-NEXT: popl %esi
750 %maxnum = call fp128 @llvm.experimental.constrained.maxnum.f128(fp128 %x, fp128 %y, metadata !"fpexcept.strict") #0
754 define fp128 @minnum(fp128 %x, fp128 %y) nounwind strictfp {
755 ; ANDROID-LABEL: minnum:
756 ; ANDROID: # %bb.0: # %entry
757 ; ANDROID-NEXT: pushq %rax
758 ; ANDROID-NEXT: callq fminl@PLT
759 ; ANDROID-NEXT: popq %rax
763 ; GNU: # %bb.0: # %entry
764 ; GNU-NEXT: pushq %rax
765 ; GNU-NEXT: callq fminf128@PLT
766 ; GNU-NEXT: popq %rax
770 ; X86: # %bb.0: # %entry
771 ; X86-NEXT: pushl %esi
772 ; X86-NEXT: subl $24, %esp
773 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
774 ; X86-NEXT: subl $12, %esp
775 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
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 {{[0-9]+}}(%esp)
780 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
781 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
782 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
783 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
784 ; X86-NEXT: pushl %eax
785 ; X86-NEXT: calll fminl
786 ; X86-NEXT: addl $44, %esp
787 ; X86-NEXT: movaps (%esp), %xmm0
788 ; X86-NEXT: movaps %xmm0, (%esi)
789 ; X86-NEXT: movl %esi, %eax
790 ; X86-NEXT: addl $24, %esp
791 ; X86-NEXT: popl %esi
794 %minnum = call fp128 @llvm.experimental.constrained.minnum.f128(fp128 %x, fp128 %y, metadata !"fpexcept.strict") #0
798 define fp128 @nearbyint(fp128 %x) nounwind strictfp {
799 ; ANDROID-LABEL: nearbyint:
800 ; ANDROID: # %bb.0: # %entry
801 ; ANDROID-NEXT: pushq %rax
802 ; ANDROID-NEXT: callq nearbyintl@PLT
803 ; ANDROID-NEXT: popq %rax
806 ; GNU-LABEL: nearbyint:
807 ; GNU: # %bb.0: # %entry
808 ; GNU-NEXT: pushq %rax
809 ; GNU-NEXT: callq nearbyintf128@PLT
810 ; GNU-NEXT: popq %rax
813 ; X86-LABEL: nearbyint:
814 ; X86: # %bb.0: # %entry
815 ; X86-NEXT: pushl %esi
816 ; X86-NEXT: subl $24, %esp
817 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
818 ; X86-NEXT: subl $12, %esp
819 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
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 %eax
825 ; X86-NEXT: calll nearbyintl
826 ; X86-NEXT: addl $28, %esp
827 ; X86-NEXT: movaps (%esp), %xmm0
828 ; X86-NEXT: movaps %xmm0, (%esi)
829 ; X86-NEXT: movl %esi, %eax
830 ; X86-NEXT: addl $24, %esp
831 ; X86-NEXT: popl %esi
834 %nearbyint = call fp128 @llvm.experimental.constrained.nearbyint.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
838 define fp128 @pow(fp128 %x, fp128 %y) nounwind strictfp {
839 ; ANDROID-LABEL: pow:
840 ; ANDROID: # %bb.0: # %entry
841 ; ANDROID-NEXT: pushq %rax
842 ; ANDROID-NEXT: callq powl@PLT
843 ; ANDROID-NEXT: popq %rax
847 ; GNU: # %bb.0: # %entry
848 ; GNU-NEXT: pushq %rax
849 ; GNU-NEXT: callq powf128@PLT
850 ; GNU-NEXT: popq %rax
854 ; X86: # %bb.0: # %entry
855 ; X86-NEXT: pushl %esi
856 ; X86-NEXT: subl $24, %esp
857 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
858 ; X86-NEXT: subl $12, %esp
859 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
860 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
861 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
862 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
863 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
864 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
865 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
866 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
867 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
868 ; X86-NEXT: pushl %eax
869 ; X86-NEXT: calll powl
870 ; X86-NEXT: addl $44, %esp
871 ; X86-NEXT: movaps (%esp), %xmm0
872 ; X86-NEXT: movaps %xmm0, (%esi)
873 ; X86-NEXT: movl %esi, %eax
874 ; X86-NEXT: addl $24, %esp
875 ; X86-NEXT: popl %esi
878 %pow = call fp128 @llvm.experimental.constrained.pow.f128(fp128 %x, fp128 %y, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
882 define fp128 @powi(fp128 %x, i32 %y) nounwind strictfp {
884 ; CHECK: # %bb.0: # %entry
885 ; CHECK-NEXT: pushq %rax
886 ; CHECK-NEXT: callq __powitf2@PLT
887 ; CHECK-NEXT: popq %rax
890 ; ANDROID-LABEL: powi:
891 ; ANDROID: # %bb.0: # %entry
892 ; ANDROID-NEXT: pushq %rax
893 ; ANDROID-NEXT: callq __powitf2@PLT
894 ; ANDROID-NEXT: popq %rax
898 ; GNU: # %bb.0: # %entry
899 ; GNU-NEXT: pushq %rax
900 ; GNU-NEXT: callq __powitf2@PLT
901 ; GNU-NEXT: popq %rax
905 ; X86: # %bb.0: # %entry
906 ; X86-NEXT: pushl %esi
907 ; X86-NEXT: subl $24, %esp
908 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
909 ; X86-NEXT: subl $8, %esp
910 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
911 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
912 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
913 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
914 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
915 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
916 ; X86-NEXT: pushl %eax
917 ; X86-NEXT: calll __powitf2
918 ; X86-NEXT: addl $28, %esp
919 ; X86-NEXT: movaps (%esp), %xmm0
920 ; X86-NEXT: movaps %xmm0, (%esi)
921 ; X86-NEXT: movl %esi, %eax
922 ; X86-NEXT: addl $24, %esp
923 ; X86-NEXT: popl %esi
926 %powi = call fp128 @llvm.experimental.constrained.powi.f128(fp128 %x, i32 %y, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
930 define fp128 @rint(fp128 %x) nounwind strictfp {
931 ; ANDROID-LABEL: rint:
932 ; ANDROID: # %bb.0: # %entry
933 ; ANDROID-NEXT: pushq %rax
934 ; ANDROID-NEXT: callq rintl@PLT
935 ; ANDROID-NEXT: popq %rax
939 ; GNU: # %bb.0: # %entry
940 ; GNU-NEXT: pushq %rax
941 ; GNU-NEXT: callq rintf128@PLT
942 ; GNU-NEXT: popq %rax
946 ; X86: # %bb.0: # %entry
947 ; X86-NEXT: pushl %esi
948 ; X86-NEXT: subl $24, %esp
949 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
950 ; X86-NEXT: subl $12, %esp
951 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
952 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
953 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
954 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
955 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
956 ; X86-NEXT: pushl %eax
957 ; X86-NEXT: calll rintl
958 ; X86-NEXT: addl $28, %esp
959 ; X86-NEXT: movaps (%esp), %xmm0
960 ; X86-NEXT: movaps %xmm0, (%esi)
961 ; X86-NEXT: movl %esi, %eax
962 ; X86-NEXT: addl $24, %esp
963 ; X86-NEXT: popl %esi
966 %rint = call fp128 @llvm.experimental.constrained.rint.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
970 define fp128 @round(fp128 %x) nounwind strictfp {
971 ; ANDROID-LABEL: round:
972 ; ANDROID: # %bb.0: # %entry
973 ; ANDROID-NEXT: pushq %rax
974 ; ANDROID-NEXT: callq roundl@PLT
975 ; ANDROID-NEXT: popq %rax
979 ; GNU: # %bb.0: # %entry
980 ; GNU-NEXT: pushq %rax
981 ; GNU-NEXT: callq roundf128@PLT
982 ; GNU-NEXT: popq %rax
986 ; X86: # %bb.0: # %entry
987 ; X86-NEXT: pushl %esi
988 ; X86-NEXT: subl $24, %esp
989 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
990 ; X86-NEXT: subl $12, %esp
991 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
992 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
993 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
994 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
995 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
996 ; X86-NEXT: pushl %eax
997 ; X86-NEXT: calll roundl
998 ; X86-NEXT: addl $28, %esp
999 ; X86-NEXT: movaps (%esp), %xmm0
1000 ; X86-NEXT: movaps %xmm0, (%esi)
1001 ; X86-NEXT: movl %esi, %eax
1002 ; X86-NEXT: addl $24, %esp
1003 ; X86-NEXT: popl %esi
1006 %round = call fp128 @llvm.experimental.constrained.round.f128(fp128 %x, metadata !"fpexcept.strict") #0
1010 define fp128 @roundeven(fp128 %x) nounwind strictfp {
1011 ; ANDROID-LABEL: roundeven:
1012 ; ANDROID: # %bb.0: # %entry
1013 ; ANDROID-NEXT: pushq %rax
1014 ; ANDROID-NEXT: callq roundevenl@PLT
1015 ; ANDROID-NEXT: popq %rax
1016 ; ANDROID-NEXT: retq
1018 ; GNU-LABEL: roundeven:
1019 ; GNU: # %bb.0: # %entry
1020 ; GNU-NEXT: pushq %rax
1021 ; GNU-NEXT: callq roundevenf128@PLT
1022 ; GNU-NEXT: popq %rax
1025 ; X86-LABEL: roundeven:
1026 ; X86: # %bb.0: # %entry
1027 ; X86-NEXT: pushl %esi
1028 ; X86-NEXT: subl $24, %esp
1029 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
1030 ; X86-NEXT: subl $12, %esp
1031 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
1032 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1033 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1034 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1035 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1036 ; X86-NEXT: pushl %eax
1037 ; X86-NEXT: calll roundevenl
1038 ; X86-NEXT: addl $28, %esp
1039 ; X86-NEXT: movaps (%esp), %xmm0
1040 ; X86-NEXT: movaps %xmm0, (%esi)
1041 ; X86-NEXT: movl %esi, %eax
1042 ; X86-NEXT: addl $24, %esp
1043 ; X86-NEXT: popl %esi
1046 %roundeven = call fp128 @llvm.experimental.constrained.roundeven.f128(fp128 %x, metadata !"fpexcept.strict") #0
1047 ret fp128 %roundeven
1050 define fp128 @asin(fp128 %x) nounwind strictfp {
1051 ; ANDROID-LABEL: asin:
1052 ; ANDROID: # %bb.0: # %entry
1053 ; ANDROID-NEXT: pushq %rax
1054 ; ANDROID-NEXT: callq asinl@PLT
1055 ; ANDROID-NEXT: popq %rax
1056 ; ANDROID-NEXT: retq
1059 ; GNU: # %bb.0: # %entry
1060 ; GNU-NEXT: pushq %rax
1061 ; GNU-NEXT: callq asinf128@PLT
1062 ; GNU-NEXT: popq %rax
1066 ; X86: # %bb.0: # %entry
1067 ; X86-NEXT: pushl %esi
1068 ; X86-NEXT: subl $24, %esp
1069 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
1070 ; X86-NEXT: subl $12, %esp
1071 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
1072 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1073 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1074 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1075 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1076 ; X86-NEXT: pushl %eax
1077 ; X86-NEXT: calll asinl
1078 ; X86-NEXT: addl $28, %esp
1079 ; X86-NEXT: movaps (%esp), %xmm0
1080 ; X86-NEXT: movaps %xmm0, (%esi)
1081 ; X86-NEXT: movl %esi, %eax
1082 ; X86-NEXT: addl $24, %esp
1083 ; X86-NEXT: popl %esi
1086 %asin = call fp128 @llvm.experimental.constrained.asin.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
1090 define fp128 @sin(fp128 %x) nounwind strictfp {
1091 ; ANDROID-LABEL: sin:
1092 ; ANDROID: # %bb.0: # %entry
1093 ; ANDROID-NEXT: pushq %rax
1094 ; ANDROID-NEXT: callq sinl@PLT
1095 ; ANDROID-NEXT: popq %rax
1096 ; ANDROID-NEXT: retq
1099 ; GNU: # %bb.0: # %entry
1100 ; GNU-NEXT: pushq %rax
1101 ; GNU-NEXT: callq sinf128@PLT
1102 ; GNU-NEXT: popq %rax
1106 ; X86: # %bb.0: # %entry
1107 ; X86-NEXT: pushl %esi
1108 ; X86-NEXT: subl $24, %esp
1109 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
1110 ; X86-NEXT: subl $12, %esp
1111 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
1112 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1113 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1114 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1115 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1116 ; X86-NEXT: pushl %eax
1117 ; X86-NEXT: calll sinl
1118 ; X86-NEXT: addl $28, %esp
1119 ; X86-NEXT: movaps (%esp), %xmm0
1120 ; X86-NEXT: movaps %xmm0, (%esi)
1121 ; X86-NEXT: movl %esi, %eax
1122 ; X86-NEXT: addl $24, %esp
1123 ; X86-NEXT: popl %esi
1126 %sin = call fp128 @llvm.experimental.constrained.sin.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
1130 define fp128 @sinh(fp128 %x) nounwind strictfp {
1131 ; ANDROID-LABEL: sinh:
1132 ; ANDROID: # %bb.0: # %entry
1133 ; ANDROID-NEXT: pushq %rax
1134 ; ANDROID-NEXT: callq sinhl@PLT
1135 ; ANDROID-NEXT: popq %rax
1136 ; ANDROID-NEXT: retq
1139 ; GNU: # %bb.0: # %entry
1140 ; GNU-NEXT: pushq %rax
1141 ; GNU-NEXT: callq sinhf128@PLT
1142 ; GNU-NEXT: popq %rax
1146 ; X86: # %bb.0: # %entry
1147 ; X86-NEXT: pushl %esi
1148 ; X86-NEXT: subl $24, %esp
1149 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
1150 ; X86-NEXT: subl $12, %esp
1151 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
1152 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1153 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1154 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1155 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1156 ; X86-NEXT: pushl %eax
1157 ; X86-NEXT: calll sinhl
1158 ; X86-NEXT: addl $28, %esp
1159 ; X86-NEXT: movaps (%esp), %xmm0
1160 ; X86-NEXT: movaps %xmm0, (%esi)
1161 ; X86-NEXT: movl %esi, %eax
1162 ; X86-NEXT: addl $24, %esp
1163 ; X86-NEXT: popl %esi
1166 %sinh = call fp128 @llvm.experimental.constrained.sinh.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
1170 define fp128 @sqrt(fp128 %x) nounwind strictfp {
1171 ; ANDROID-LABEL: sqrt:
1172 ; ANDROID: # %bb.0: # %entry
1173 ; ANDROID-NEXT: pushq %rax
1174 ; ANDROID-NEXT: callq sqrtl@PLT
1175 ; ANDROID-NEXT: popq %rax
1176 ; ANDROID-NEXT: retq
1179 ; GNU: # %bb.0: # %entry
1180 ; GNU-NEXT: pushq %rax
1181 ; GNU-NEXT: callq sqrtf128@PLT
1182 ; GNU-NEXT: popq %rax
1186 ; X86: # %bb.0: # %entry
1187 ; X86-NEXT: pushl %esi
1188 ; X86-NEXT: subl $24, %esp
1189 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
1190 ; X86-NEXT: subl $12, %esp
1191 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
1192 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1193 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1194 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1195 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1196 ; X86-NEXT: pushl %eax
1197 ; X86-NEXT: calll sqrtl
1198 ; X86-NEXT: addl $28, %esp
1199 ; X86-NEXT: movaps (%esp), %xmm0
1200 ; X86-NEXT: movaps %xmm0, (%esi)
1201 ; X86-NEXT: movl %esi, %eax
1202 ; X86-NEXT: addl $24, %esp
1203 ; X86-NEXT: popl %esi
1206 %sqrt = call fp128 @llvm.experimental.constrained.sqrt.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
1210 define fp128 @atan(fp128 %x) nounwind strictfp {
1211 ; ANDROID-LABEL: atan:
1212 ; ANDROID: # %bb.0: # %entry
1213 ; ANDROID-NEXT: pushq %rax
1214 ; ANDROID-NEXT: callq atanl@PLT
1215 ; ANDROID-NEXT: popq %rax
1216 ; ANDROID-NEXT: retq
1219 ; GNU: # %bb.0: # %entry
1220 ; GNU-NEXT: pushq %rax
1221 ; GNU-NEXT: callq atanf128@PLT
1222 ; GNU-NEXT: popq %rax
1226 ; X86: # %bb.0: # %entry
1227 ; X86-NEXT: pushl %esi
1228 ; X86-NEXT: subl $24, %esp
1229 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
1230 ; X86-NEXT: subl $12, %esp
1231 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
1232 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1233 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1234 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1235 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1236 ; X86-NEXT: pushl %eax
1237 ; X86-NEXT: calll atanl
1238 ; X86-NEXT: addl $28, %esp
1239 ; X86-NEXT: movaps (%esp), %xmm0
1240 ; X86-NEXT: movaps %xmm0, (%esi)
1241 ; X86-NEXT: movl %esi, %eax
1242 ; X86-NEXT: addl $24, %esp
1243 ; X86-NEXT: popl %esi
1246 %atan = call fp128 @llvm.experimental.constrained.atan.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
1250 define fp128 @atan2(fp128 %x, fp128 %y) nounwind strictfp {
1251 ; ANDROID-LABEL: atan2:
1252 ; ANDROID: # %bb.0: # %entry
1253 ; ANDROID-NEXT: pushq %rax
1254 ; ANDROID-NEXT: callq atan2l@PLT
1255 ; ANDROID-NEXT: popq %rax
1256 ; ANDROID-NEXT: retq
1259 ; GNU: # %bb.0: # %entry
1260 ; GNU-NEXT: pushq %rax
1261 ; GNU-NEXT: callq atan2f128@PLT
1262 ; GNU-NEXT: popq %rax
1266 ; X86: # %bb.0: # %entry
1267 ; X86-NEXT: pushl %esi
1268 ; X86-NEXT: subl $24, %esp
1269 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
1270 ; X86-NEXT: subl $12, %esp
1271 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
1272 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1273 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1274 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1275 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1276 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1277 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1278 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1279 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1280 ; X86-NEXT: pushl %eax
1281 ; X86-NEXT: calll atan2l
1282 ; X86-NEXT: addl $44, %esp
1283 ; X86-NEXT: movaps (%esp), %xmm0
1284 ; X86-NEXT: movaps %xmm0, (%esi)
1285 ; X86-NEXT: movl %esi, %eax
1286 ; X86-NEXT: addl $24, %esp
1287 ; X86-NEXT: popl %esi
1290 %atan2 = call fp128 @llvm.experimental.constrained.atan2.f128(fp128 %x, fp128 %y, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
1294 define fp128 @tan(fp128 %x) nounwind strictfp {
1295 ; ANDROID-LABEL: tan:
1296 ; ANDROID: # %bb.0: # %entry
1297 ; ANDROID-NEXT: pushq %rax
1298 ; ANDROID-NEXT: callq tanl@PLT
1299 ; ANDROID-NEXT: popq %rax
1300 ; ANDROID-NEXT: retq
1303 ; GNU: # %bb.0: # %entry
1304 ; GNU-NEXT: pushq %rax
1305 ; GNU-NEXT: callq tanf128@PLT
1306 ; GNU-NEXT: popq %rax
1310 ; X86: # %bb.0: # %entry
1311 ; X86-NEXT: pushl %esi
1312 ; X86-NEXT: subl $24, %esp
1313 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
1314 ; X86-NEXT: subl $12, %esp
1315 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
1316 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1317 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1318 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1319 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1320 ; X86-NEXT: pushl %eax
1321 ; X86-NEXT: calll tanl
1322 ; X86-NEXT: addl $28, %esp
1323 ; X86-NEXT: movaps (%esp), %xmm0
1324 ; X86-NEXT: movaps %xmm0, (%esi)
1325 ; X86-NEXT: movl %esi, %eax
1326 ; X86-NEXT: addl $24, %esp
1327 ; X86-NEXT: popl %esi
1330 %tan = call fp128 @llvm.experimental.constrained.tan.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
1334 define fp128 @tanh(fp128 %x) nounwind strictfp {
1335 ; ANDROID-LABEL: tanh:
1336 ; ANDROID: # %bb.0: # %entry
1337 ; ANDROID-NEXT: pushq %rax
1338 ; ANDROID-NEXT: callq tanhl@PLT
1339 ; ANDROID-NEXT: popq %rax
1340 ; ANDROID-NEXT: retq
1343 ; GNU: # %bb.0: # %entry
1344 ; GNU-NEXT: pushq %rax
1345 ; GNU-NEXT: callq tanhf128@PLT
1346 ; GNU-NEXT: popq %rax
1350 ; X86: # %bb.0: # %entry
1351 ; X86-NEXT: pushl %esi
1352 ; X86-NEXT: subl $24, %esp
1353 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
1354 ; X86-NEXT: subl $12, %esp
1355 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
1356 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1357 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1358 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1359 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1360 ; X86-NEXT: pushl %eax
1361 ; X86-NEXT: calll tanhl
1362 ; X86-NEXT: addl $28, %esp
1363 ; X86-NEXT: movaps (%esp), %xmm0
1364 ; X86-NEXT: movaps %xmm0, (%esi)
1365 ; X86-NEXT: movl %esi, %eax
1366 ; X86-NEXT: addl $24, %esp
1367 ; X86-NEXT: popl %esi
1370 %tanh = call fp128 @llvm.experimental.constrained.tanh.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
1374 define fp128 @trunc(fp128 %x) nounwind strictfp {
1375 ; ANDROID-LABEL: trunc:
1376 ; ANDROID: # %bb.0: # %entry
1377 ; ANDROID-NEXT: pushq %rax
1378 ; ANDROID-NEXT: callq truncl@PLT
1379 ; ANDROID-NEXT: popq %rax
1380 ; ANDROID-NEXT: retq
1383 ; GNU: # %bb.0: # %entry
1384 ; GNU-NEXT: pushq %rax
1385 ; GNU-NEXT: callq truncf128@PLT
1386 ; GNU-NEXT: popq %rax
1390 ; X86: # %bb.0: # %entry
1391 ; X86-NEXT: pushl %esi
1392 ; X86-NEXT: subl $24, %esp
1393 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
1394 ; X86-NEXT: subl $12, %esp
1395 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
1396 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1397 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1398 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1399 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1400 ; X86-NEXT: pushl %eax
1401 ; X86-NEXT: calll truncl
1402 ; X86-NEXT: addl $28, %esp
1403 ; X86-NEXT: movaps (%esp), %xmm0
1404 ; X86-NEXT: movaps %xmm0, (%esi)
1405 ; X86-NEXT: movl %esi, %eax
1406 ; X86-NEXT: addl $24, %esp
1407 ; X86-NEXT: popl %esi
1410 %trunc = call fp128 @llvm.experimental.constrained.trunc.f128(fp128 %x, metadata !"fpexcept.strict") #0
1414 define i32 @lrint(fp128 %x) nounwind strictfp {
1415 ; ANDROID-LABEL: lrint:
1416 ; ANDROID: # %bb.0: # %entry
1417 ; ANDROID-NEXT: pushq %rax
1418 ; ANDROID-NEXT: callq lrintl@PLT
1419 ; ANDROID-NEXT: popq %rcx
1420 ; ANDROID-NEXT: retq
1423 ; GNU: # %bb.0: # %entry
1424 ; GNU-NEXT: pushq %rax
1425 ; GNU-NEXT: callq lrintf128@PLT
1426 ; GNU-NEXT: popq %rcx
1430 ; X86: # %bb.0: # %entry
1431 ; X86-NEXT: subl $12, %esp
1432 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1433 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1434 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1435 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1436 ; X86-NEXT: calll lrintl
1437 ; X86-NEXT: addl $28, %esp
1440 %rint = call i32 @llvm.experimental.constrained.lrint.i32.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
1444 define i64 @llrint(fp128 %x) nounwind strictfp {
1445 ; ANDROID-LABEL: llrint:
1446 ; ANDROID: # %bb.0: # %entry
1447 ; ANDROID-NEXT: pushq %rax
1448 ; ANDROID-NEXT: callq llrintl@PLT
1449 ; ANDROID-NEXT: popq %rcx
1450 ; ANDROID-NEXT: retq
1452 ; GNU-LABEL: llrint:
1453 ; GNU: # %bb.0: # %entry
1454 ; GNU-NEXT: pushq %rax
1455 ; GNU-NEXT: callq llrintf128@PLT
1456 ; GNU-NEXT: popq %rcx
1459 ; X86-LABEL: llrint:
1460 ; X86: # %bb.0: # %entry
1461 ; X86-NEXT: subl $12, %esp
1462 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1463 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1464 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1465 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1466 ; X86-NEXT: calll llrintl
1467 ; X86-NEXT: addl $28, %esp
1470 %rint = call i64 @llvm.experimental.constrained.llrint.i64.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
1474 define i32 @lround(fp128 %x) nounwind strictfp {
1475 ; ANDROID-LABEL: lround:
1476 ; ANDROID: # %bb.0: # %entry
1477 ; ANDROID-NEXT: pushq %rax
1478 ; ANDROID-NEXT: callq lroundl@PLT
1479 ; ANDROID-NEXT: popq %rcx
1480 ; ANDROID-NEXT: retq
1482 ; GNU-LABEL: lround:
1483 ; GNU: # %bb.0: # %entry
1484 ; GNU-NEXT: pushq %rax
1485 ; GNU-NEXT: callq lroundf128@PLT
1486 ; GNU-NEXT: popq %rcx
1489 ; X86-LABEL: lround:
1490 ; X86: # %bb.0: # %entry
1491 ; X86-NEXT: subl $12, %esp
1492 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1493 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1494 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1495 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1496 ; X86-NEXT: calll lroundl
1497 ; X86-NEXT: addl $28, %esp
1500 %round = call i32 @llvm.experimental.constrained.lround.i32.f128(fp128 %x, metadata !"fpexcept.strict") #0
1504 define i64 @llround(fp128 %x) nounwind strictfp {
1505 ; ANDROID-LABEL: llround:
1506 ; ANDROID: # %bb.0: # %entry
1507 ; ANDROID-NEXT: pushq %rax
1508 ; ANDROID-NEXT: callq llroundl@PLT
1509 ; ANDROID-NEXT: popq %rcx
1510 ; ANDROID-NEXT: retq
1512 ; GNU-LABEL: llround:
1513 ; GNU: # %bb.0: # %entry
1514 ; GNU-NEXT: pushq %rax
1515 ; GNU-NEXT: callq llroundf128@PLT
1516 ; GNU-NEXT: popq %rcx
1519 ; X86-LABEL: llround:
1520 ; X86: # %bb.0: # %entry
1521 ; X86-NEXT: subl $12, %esp
1522 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1523 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1524 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1525 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1526 ; X86-NEXT: calll llroundl
1527 ; X86-NEXT: addl $28, %esp
1530 %round = call i64 @llvm.experimental.constrained.llround.i64.f128(fp128 %x, metadata !"fpexcept.strict") #0
1534 define i64 @cmp(i64 %a, i64 %b, fp128 %x, fp128 %y) #0 {
1537 ; CHECK-NEXT: pushq %r14
1538 ; CHECK-NEXT: pushq %rbx
1539 ; CHECK-NEXT: pushq %rax
1540 ; CHECK-NEXT: movq %rsi, %rbx
1541 ; CHECK-NEXT: movq %rdi, %r14
1542 ; CHECK-NEXT: callq __eqtf2@PLT
1543 ; CHECK-NEXT: testl %eax, %eax
1544 ; CHECK-NEXT: cmovneq %rbx, %r14
1545 ; CHECK-NEXT: movq %r14, %rax
1546 ; CHECK-NEXT: addq $8, %rsp
1547 ; CHECK-NEXT: popq %rbx
1548 ; CHECK-NEXT: popq %r14
1551 ; ANDROID-LABEL: cmp:
1553 ; ANDROID-NEXT: pushq %r14
1554 ; ANDROID-NEXT: pushq %rbx
1555 ; ANDROID-NEXT: pushq %rax
1556 ; ANDROID-NEXT: movq %rsi, %rbx
1557 ; ANDROID-NEXT: movq %rdi, %r14
1558 ; ANDROID-NEXT: callq __eqtf2@PLT
1559 ; ANDROID-NEXT: testl %eax, %eax
1560 ; ANDROID-NEXT: cmovneq %rbx, %r14
1561 ; ANDROID-NEXT: movq %r14, %rax
1562 ; ANDROID-NEXT: addq $8, %rsp
1563 ; ANDROID-NEXT: popq %rbx
1564 ; ANDROID-NEXT: popq %r14
1565 ; ANDROID-NEXT: retq
1569 ; GNU-NEXT: pushq %r14
1570 ; GNU-NEXT: pushq %rbx
1571 ; GNU-NEXT: pushq %rax
1572 ; GNU-NEXT: movq %rsi, %rbx
1573 ; GNU-NEXT: movq %rdi, %r14
1574 ; GNU-NEXT: callq __eqtf2@PLT
1575 ; GNU-NEXT: testl %eax, %eax
1576 ; GNU-NEXT: cmovneq %rbx, %r14
1577 ; GNU-NEXT: movq %r14, %rax
1578 ; GNU-NEXT: addq $8, %rsp
1579 ; GNU-NEXT: popq %rbx
1580 ; GNU-NEXT: popq %r14
1585 ; X86-NEXT: subl $12, %esp
1586 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1587 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1588 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1589 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1590 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1591 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1592 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1593 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1594 ; X86-NEXT: calll __eqtf2
1595 ; X86-NEXT: addl $32, %esp
1596 ; X86-NEXT: testl %eax, %eax
1597 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
1598 ; X86-NEXT: leal {{[0-9]+}}(%esp), %ecx
1599 ; X86-NEXT: cmovel %eax, %ecx
1600 ; X86-NEXT: movl (%ecx), %eax
1601 ; X86-NEXT: movl 4(%ecx), %edx
1602 ; X86-NEXT: addl $12, %esp
1604 %cond = call i1 @llvm.experimental.constrained.fcmp.f128(
1607 metadata !"fpexcept.strict") #0
1608 %res = select i1 %cond, i64 %a, i64 %b
1612 define i64 @cmps(i64 %a, i64 %b, fp128 %x, fp128 %y) #0 {
1613 ; CHECK-LABEL: cmps:
1615 ; CHECK-NEXT: pushq %r14
1616 ; CHECK-NEXT: pushq %rbx
1617 ; CHECK-NEXT: pushq %rax
1618 ; CHECK-NEXT: movq %rsi, %rbx
1619 ; CHECK-NEXT: movq %rdi, %r14
1620 ; CHECK-NEXT: callq __eqtf2@PLT
1621 ; CHECK-NEXT: testl %eax, %eax
1622 ; CHECK-NEXT: cmovneq %rbx, %r14
1623 ; CHECK-NEXT: movq %r14, %rax
1624 ; CHECK-NEXT: addq $8, %rsp
1625 ; CHECK-NEXT: popq %rbx
1626 ; CHECK-NEXT: popq %r14
1629 ; ANDROID-LABEL: cmps:
1631 ; ANDROID-NEXT: pushq %r14
1632 ; ANDROID-NEXT: pushq %rbx
1633 ; ANDROID-NEXT: pushq %rax
1634 ; ANDROID-NEXT: movq %rsi, %rbx
1635 ; ANDROID-NEXT: movq %rdi, %r14
1636 ; ANDROID-NEXT: callq __eqtf2@PLT
1637 ; ANDROID-NEXT: testl %eax, %eax
1638 ; ANDROID-NEXT: cmovneq %rbx, %r14
1639 ; ANDROID-NEXT: movq %r14, %rax
1640 ; ANDROID-NEXT: addq $8, %rsp
1641 ; ANDROID-NEXT: popq %rbx
1642 ; ANDROID-NEXT: popq %r14
1643 ; ANDROID-NEXT: retq
1647 ; GNU-NEXT: pushq %r14
1648 ; GNU-NEXT: pushq %rbx
1649 ; GNU-NEXT: pushq %rax
1650 ; GNU-NEXT: movq %rsi, %rbx
1651 ; GNU-NEXT: movq %rdi, %r14
1652 ; GNU-NEXT: callq __eqtf2@PLT
1653 ; GNU-NEXT: testl %eax, %eax
1654 ; GNU-NEXT: cmovneq %rbx, %r14
1655 ; GNU-NEXT: movq %r14, %rax
1656 ; GNU-NEXT: addq $8, %rsp
1657 ; GNU-NEXT: popq %rbx
1658 ; GNU-NEXT: popq %r14
1663 ; X86-NEXT: subl $12, %esp
1664 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1665 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1666 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1667 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1668 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1669 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1670 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1671 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1672 ; X86-NEXT: calll __eqtf2
1673 ; X86-NEXT: addl $32, %esp
1674 ; X86-NEXT: testl %eax, %eax
1675 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
1676 ; X86-NEXT: leal {{[0-9]+}}(%esp), %ecx
1677 ; X86-NEXT: cmovel %eax, %ecx
1678 ; X86-NEXT: movl (%ecx), %eax
1679 ; X86-NEXT: movl 4(%ecx), %edx
1680 ; X86-NEXT: addl $12, %esp
1682 %cond = call i1 @llvm.experimental.constrained.fcmps.f128(
1685 metadata !"fpexcept.strict") #0
1686 %res = select i1 %cond, i64 %a, i64 %b
1690 define i64 @cmp_ueq_q(i64 %a, i64 %b, fp128 %x, fp128 %y) #0 {
1691 ; CHECK-LABEL: cmp_ueq_q:
1693 ; CHECK-NEXT: pushq %rbp
1694 ; CHECK-NEXT: pushq %r14
1695 ; CHECK-NEXT: pushq %rbx
1696 ; CHECK-NEXT: subq $32, %rsp
1697 ; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1698 ; CHECK-NEXT: movaps %xmm0, (%rsp) # 16-byte Spill
1699 ; CHECK-NEXT: movq %rsi, %rbx
1700 ; CHECK-NEXT: movq %rdi, %r14
1701 ; CHECK-NEXT: callq __eqtf2@PLT
1702 ; CHECK-NEXT: testl %eax, %eax
1703 ; CHECK-NEXT: sete %bpl
1704 ; CHECK-NEXT: movaps (%rsp), %xmm0 # 16-byte Reload
1705 ; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
1706 ; CHECK-NEXT: callq __unordtf2@PLT
1707 ; CHECK-NEXT: testl %eax, %eax
1708 ; CHECK-NEXT: setne %al
1709 ; CHECK-NEXT: orb %bpl, %al
1710 ; CHECK-NEXT: cmoveq %rbx, %r14
1711 ; CHECK-NEXT: movq %r14, %rax
1712 ; CHECK-NEXT: addq $32, %rsp
1713 ; CHECK-NEXT: popq %rbx
1714 ; CHECK-NEXT: popq %r14
1715 ; CHECK-NEXT: popq %rbp
1718 ; ANDROID-LABEL: cmp_ueq_q:
1720 ; ANDROID-NEXT: pushq %rbp
1721 ; ANDROID-NEXT: pushq %r14
1722 ; ANDROID-NEXT: pushq %rbx
1723 ; ANDROID-NEXT: subq $32, %rsp
1724 ; ANDROID-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1725 ; ANDROID-NEXT: movaps %xmm0, (%rsp) # 16-byte Spill
1726 ; ANDROID-NEXT: movq %rsi, %rbx
1727 ; ANDROID-NEXT: movq %rdi, %r14
1728 ; ANDROID-NEXT: callq __eqtf2@PLT
1729 ; ANDROID-NEXT: testl %eax, %eax
1730 ; ANDROID-NEXT: sete %bpl
1731 ; ANDROID-NEXT: movaps (%rsp), %xmm0 # 16-byte Reload
1732 ; ANDROID-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
1733 ; ANDROID-NEXT: callq __unordtf2@PLT
1734 ; ANDROID-NEXT: testl %eax, %eax
1735 ; ANDROID-NEXT: setne %al
1736 ; ANDROID-NEXT: orb %bpl, %al
1737 ; ANDROID-NEXT: cmoveq %rbx, %r14
1738 ; ANDROID-NEXT: movq %r14, %rax
1739 ; ANDROID-NEXT: addq $32, %rsp
1740 ; ANDROID-NEXT: popq %rbx
1741 ; ANDROID-NEXT: popq %r14
1742 ; ANDROID-NEXT: popq %rbp
1743 ; ANDROID-NEXT: retq
1745 ; GNU-LABEL: cmp_ueq_q:
1747 ; GNU-NEXT: pushq %rbp
1748 ; GNU-NEXT: pushq %r14
1749 ; GNU-NEXT: pushq %rbx
1750 ; GNU-NEXT: subq $32, %rsp
1751 ; GNU-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1752 ; GNU-NEXT: movaps %xmm0, (%rsp) # 16-byte Spill
1753 ; GNU-NEXT: movq %rsi, %rbx
1754 ; GNU-NEXT: movq %rdi, %r14
1755 ; GNU-NEXT: callq __eqtf2@PLT
1756 ; GNU-NEXT: testl %eax, %eax
1757 ; GNU-NEXT: sete %bpl
1758 ; GNU-NEXT: movaps (%rsp), %xmm0 # 16-byte Reload
1759 ; GNU-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
1760 ; GNU-NEXT: callq __unordtf2@PLT
1761 ; GNU-NEXT: testl %eax, %eax
1762 ; GNU-NEXT: setne %al
1763 ; GNU-NEXT: orb %bpl, %al
1764 ; GNU-NEXT: cmoveq %rbx, %r14
1765 ; GNU-NEXT: movq %r14, %rax
1766 ; GNU-NEXT: addq $32, %rsp
1767 ; GNU-NEXT: popq %rbx
1768 ; GNU-NEXT: popq %r14
1769 ; GNU-NEXT: popq %rbp
1772 ; X86-LABEL: cmp_ueq_q:
1774 ; X86-NEXT: pushl %ebp
1775 ; X86-NEXT: pushl %ebx
1776 ; X86-NEXT: pushl %edi
1777 ; X86-NEXT: pushl %esi
1778 ; X86-NEXT: subl $12, %esp
1779 ; X86-NEXT: movl {{[0-9]+}}(%esp), %ebp
1780 ; X86-NEXT: movl {{[0-9]+}}(%esp), %edi
1781 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
1782 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1783 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1784 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1785 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1786 ; X86-NEXT: pushl %esi
1787 ; X86-NEXT: pushl %edi
1788 ; X86-NEXT: pushl %ebp
1789 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1790 ; X86-NEXT: calll __eqtf2
1791 ; X86-NEXT: addl $32, %esp
1792 ; X86-NEXT: testl %eax, %eax
1793 ; X86-NEXT: sete %bl
1794 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1795 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1796 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1797 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1798 ; X86-NEXT: pushl %esi
1799 ; X86-NEXT: pushl %edi
1800 ; X86-NEXT: pushl %ebp
1801 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1802 ; X86-NEXT: calll __unordtf2
1803 ; X86-NEXT: addl $32, %esp
1804 ; X86-NEXT: testl %eax, %eax
1805 ; X86-NEXT: setne %al
1806 ; X86-NEXT: orb %bl, %al
1807 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
1808 ; X86-NEXT: leal {{[0-9]+}}(%esp), %ecx
1809 ; X86-NEXT: cmovnel %eax, %ecx
1810 ; X86-NEXT: movl (%ecx), %eax
1811 ; X86-NEXT: movl 4(%ecx), %edx
1812 ; X86-NEXT: addl $12, %esp
1813 ; X86-NEXT: popl %esi
1814 ; X86-NEXT: popl %edi
1815 ; X86-NEXT: popl %ebx
1816 ; X86-NEXT: popl %ebp
1818 %cond = call i1 @llvm.experimental.constrained.fcmp.f128(
1821 metadata !"fpexcept.strict") #0
1822 %res = select i1 %cond, i64 %a, i64 %b
1826 define i64 @cmp_one_q(i64 %a, i64 %b, fp128 %x, fp128 %y) #0 {
1827 ; CHECK-LABEL: cmp_one_q:
1829 ; CHECK-NEXT: pushq %rbp
1830 ; CHECK-NEXT: pushq %r14
1831 ; CHECK-NEXT: pushq %rbx
1832 ; CHECK-NEXT: subq $32, %rsp
1833 ; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1834 ; CHECK-NEXT: movaps %xmm0, (%rsp) # 16-byte Spill
1835 ; CHECK-NEXT: movq %rsi, %rbx
1836 ; CHECK-NEXT: movq %rdi, %r14
1837 ; CHECK-NEXT: callq __eqtf2@PLT
1838 ; CHECK-NEXT: testl %eax, %eax
1839 ; CHECK-NEXT: setne %bpl
1840 ; CHECK-NEXT: movaps (%rsp), %xmm0 # 16-byte Reload
1841 ; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
1842 ; CHECK-NEXT: callq __unordtf2@PLT
1843 ; CHECK-NEXT: testl %eax, %eax
1844 ; CHECK-NEXT: sete %al
1845 ; CHECK-NEXT: testb %bpl, %al
1846 ; CHECK-NEXT: cmoveq %rbx, %r14
1847 ; CHECK-NEXT: movq %r14, %rax
1848 ; CHECK-NEXT: addq $32, %rsp
1849 ; CHECK-NEXT: popq %rbx
1850 ; CHECK-NEXT: popq %r14
1851 ; CHECK-NEXT: popq %rbp
1854 ; ANDROID-LABEL: cmp_one_q:
1856 ; ANDROID-NEXT: pushq %rbp
1857 ; ANDROID-NEXT: pushq %r14
1858 ; ANDROID-NEXT: pushq %rbx
1859 ; ANDROID-NEXT: subq $32, %rsp
1860 ; ANDROID-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1861 ; ANDROID-NEXT: movaps %xmm0, (%rsp) # 16-byte Spill
1862 ; ANDROID-NEXT: movq %rsi, %rbx
1863 ; ANDROID-NEXT: movq %rdi, %r14
1864 ; ANDROID-NEXT: callq __eqtf2@PLT
1865 ; ANDROID-NEXT: testl %eax, %eax
1866 ; ANDROID-NEXT: setne %bpl
1867 ; ANDROID-NEXT: movaps (%rsp), %xmm0 # 16-byte Reload
1868 ; ANDROID-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
1869 ; ANDROID-NEXT: callq __unordtf2@PLT
1870 ; ANDROID-NEXT: testl %eax, %eax
1871 ; ANDROID-NEXT: sete %al
1872 ; ANDROID-NEXT: testb %bpl, %al
1873 ; ANDROID-NEXT: cmoveq %rbx, %r14
1874 ; ANDROID-NEXT: movq %r14, %rax
1875 ; ANDROID-NEXT: addq $32, %rsp
1876 ; ANDROID-NEXT: popq %rbx
1877 ; ANDROID-NEXT: popq %r14
1878 ; ANDROID-NEXT: popq %rbp
1879 ; ANDROID-NEXT: retq
1881 ; GNU-LABEL: cmp_one_q:
1883 ; GNU-NEXT: pushq %rbp
1884 ; GNU-NEXT: pushq %r14
1885 ; GNU-NEXT: pushq %rbx
1886 ; GNU-NEXT: subq $32, %rsp
1887 ; GNU-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1888 ; GNU-NEXT: movaps %xmm0, (%rsp) # 16-byte Spill
1889 ; GNU-NEXT: movq %rsi, %rbx
1890 ; GNU-NEXT: movq %rdi, %r14
1891 ; GNU-NEXT: callq __eqtf2@PLT
1892 ; GNU-NEXT: testl %eax, %eax
1893 ; GNU-NEXT: setne %bpl
1894 ; GNU-NEXT: movaps (%rsp), %xmm0 # 16-byte Reload
1895 ; GNU-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
1896 ; GNU-NEXT: callq __unordtf2@PLT
1897 ; GNU-NEXT: testl %eax, %eax
1898 ; GNU-NEXT: sete %al
1899 ; GNU-NEXT: testb %bpl, %al
1900 ; GNU-NEXT: cmoveq %rbx, %r14
1901 ; GNU-NEXT: movq %r14, %rax
1902 ; GNU-NEXT: addq $32, %rsp
1903 ; GNU-NEXT: popq %rbx
1904 ; GNU-NEXT: popq %r14
1905 ; GNU-NEXT: popq %rbp
1908 ; X86-LABEL: cmp_one_q:
1910 ; X86-NEXT: pushl %ebp
1911 ; X86-NEXT: pushl %ebx
1912 ; X86-NEXT: pushl %edi
1913 ; X86-NEXT: pushl %esi
1914 ; X86-NEXT: subl $12, %esp
1915 ; X86-NEXT: movl {{[0-9]+}}(%esp), %ebp
1916 ; X86-NEXT: movl {{[0-9]+}}(%esp), %edi
1917 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
1918 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1919 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1920 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1921 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1922 ; X86-NEXT: pushl %esi
1923 ; X86-NEXT: pushl %edi
1924 ; X86-NEXT: pushl %ebp
1925 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1926 ; X86-NEXT: calll __eqtf2
1927 ; X86-NEXT: addl $32, %esp
1928 ; X86-NEXT: testl %eax, %eax
1929 ; X86-NEXT: setne %bl
1930 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1931 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1932 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1933 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1934 ; X86-NEXT: pushl %esi
1935 ; X86-NEXT: pushl %edi
1936 ; X86-NEXT: pushl %ebp
1937 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
1938 ; X86-NEXT: calll __unordtf2
1939 ; X86-NEXT: addl $32, %esp
1940 ; X86-NEXT: testl %eax, %eax
1941 ; X86-NEXT: sete %al
1942 ; X86-NEXT: testb %bl, %al
1943 ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
1944 ; X86-NEXT: leal {{[0-9]+}}(%esp), %ecx
1945 ; X86-NEXT: cmovnel %eax, %ecx
1946 ; X86-NEXT: movl (%ecx), %eax
1947 ; X86-NEXT: movl 4(%ecx), %edx
1948 ; X86-NEXT: addl $12, %esp
1949 ; X86-NEXT: popl %esi
1950 ; X86-NEXT: popl %edi
1951 ; X86-NEXT: popl %ebx
1952 ; X86-NEXT: popl %ebp
1954 %cond = call i1 @llvm.experimental.constrained.fcmp.f128(
1957 metadata !"fpexcept.strict") #0
1958 %res = select i1 %cond, i64 %a, i64 %b
1962 attributes #0 = { nounwind strictfp }
1964 declare fp128 @llvm.experimental.constrained.fadd.f128(fp128, fp128, metadata, metadata)
1965 declare fp128 @llvm.experimental.constrained.fsub.f128(fp128, fp128, metadata, metadata)
1966 declare fp128 @llvm.experimental.constrained.fmul.f128(fp128, fp128, metadata, metadata)
1967 declare fp128 @llvm.experimental.constrained.fdiv.f128(fp128, fp128, metadata, metadata)
1968 declare fp128 @llvm.experimental.constrained.fma.f128(fp128, fp128, fp128, metadata, metadata)
1969 declare fp128 @llvm.experimental.constrained.frem.f128(fp128, fp128, metadata, metadata)
1970 declare fp128 @llvm.experimental.constrained.ceil.f128(fp128, metadata)
1971 declare fp128 @llvm.experimental.constrained.acos.f128(fp128, metadata, metadata)
1972 declare fp128 @llvm.experimental.constrained.cos.f128(fp128, metadata, metadata)
1973 declare fp128 @llvm.experimental.constrained.cosh.f128(fp128, metadata, metadata)
1974 declare fp128 @llvm.experimental.constrained.exp.f128(fp128, metadata, metadata)
1975 declare fp128 @llvm.experimental.constrained.exp2.f128(fp128, metadata, metadata)
1976 declare fp128 @llvm.experimental.constrained.floor.f128(fp128, metadata)
1977 declare fp128 @llvm.experimental.constrained.log.f128(fp128, metadata, metadata)
1978 declare fp128 @llvm.experimental.constrained.log10.f128(fp128, metadata, metadata)
1979 declare fp128 @llvm.experimental.constrained.log2.f128(fp128, metadata, metadata)
1980 declare fp128 @llvm.experimental.constrained.maxnum.f128(fp128, fp128, metadata)
1981 declare fp128 @llvm.experimental.constrained.minnum.f128(fp128, fp128, metadata)
1982 declare fp128 @llvm.experimental.constrained.nearbyint.f128(fp128, metadata, metadata)
1983 declare fp128 @llvm.experimental.constrained.pow.f128(fp128, fp128, metadata, metadata)
1984 declare fp128 @llvm.experimental.constrained.powi.f128(fp128, i32, metadata, metadata)
1985 declare fp128 @llvm.experimental.constrained.rint.f128(fp128, metadata, metadata)
1986 declare fp128 @llvm.experimental.constrained.round.f128(fp128, metadata)
1987 declare fp128 @llvm.experimental.constrained.roundeven.f128(fp128, metadata)
1988 declare fp128 @llvm.experimental.constrained.asin.f128(fp128, metadata, metadata)
1989 declare fp128 @llvm.experimental.constrained.sin.f128(fp128, metadata, metadata)
1990 declare fp128 @llvm.experimental.constrained.sinh.f128(fp128, metadata, metadata)
1991 declare fp128 @llvm.experimental.constrained.sqrt.f128(fp128, metadata, metadata)
1992 declare fp128 @llvm.experimental.constrained.atan.f128(fp128, metadata, metadata)
1993 declare fp128 @llvm.experimental.constrained.atan2.f128(fp128, fp128, metadata, metadata)
1994 declare fp128 @llvm.experimental.constrained.tan.f128(fp128, metadata, metadata)
1995 declare fp128 @llvm.experimental.constrained.tanh.f128(fp128, metadata, metadata)
1996 declare fp128 @llvm.experimental.constrained.trunc.f128(fp128, metadata)
1997 declare i32 @llvm.experimental.constrained.lrint.i32.f128(fp128, metadata, metadata)
1998 declare i64 @llvm.experimental.constrained.llrint.i64.f128(fp128, metadata, metadata)
1999 declare i32 @llvm.experimental.constrained.lround.i32.f128(fp128, metadata)
2000 declare i64 @llvm.experimental.constrained.llround.i64.f128(fp128, metadata)
2001 declare i1 @llvm.experimental.constrained.fcmp.f128(fp128, fp128, metadata, metadata)
2002 declare i1 @llvm.experimental.constrained.fcmps.f128(fp128, fp128, metadata, metadata)