[Reland][Runtimes] Merge 'compile_commands.json' files from runtimes build (#116303)
[llvm-project.git] / llvm / test / CodeGen / X86 / fp128-libcalls-strict.ll
blob5263e0d4f6f39fa07994ba207a130408564ef779
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 {
15 ; CHECK-LABEL: add:
16 ; CHECK:       # %bb.0: # %entry
17 ; CHECK-NEXT:    pushq %rax
18 ; CHECK-NEXT:    callq __addtf3@PLT
19 ; CHECK-NEXT:    popq %rax
20 ; CHECK-NEXT:    retq
22 ; ANDROID-LABEL: add:
23 ; ANDROID:       # %bb.0: # %entry
24 ; ANDROID-NEXT:    pushq %rax
25 ; ANDROID-NEXT:    callq __addtf3@PLT
26 ; ANDROID-NEXT:    popq %rax
27 ; ANDROID-NEXT:    retq
29 ; GNU-LABEL: add:
30 ; GNU:       # %bb.0: # %entry
31 ; GNU-NEXT:    pushq %rax
32 ; GNU-NEXT:    callq __addtf3@PLT
33 ; GNU-NEXT:    popq %rax
34 ; GNU-NEXT:    retq
36 ; X86-LABEL: add:
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
58 ; X86-NEXT:    popl %esi
59 ; X86-NEXT:    retl $4
60 entry:
61   %add = call fp128 @llvm.experimental.constrained.fadd.f128(fp128 %x, fp128 %y,  metadata !"round.dynamic", metadata !"fpexcept.strict") #0
62   ret fp128 %add
65 define fp128 @sub(fp128 %x, fp128 %y) nounwind strictfp {
66 ; CHECK-LABEL: sub:
67 ; CHECK:       # %bb.0: # %entry
68 ; CHECK-NEXT:    pushq %rax
69 ; CHECK-NEXT:    callq __subtf3@PLT
70 ; CHECK-NEXT:    popq %rax
71 ; CHECK-NEXT:    retq
73 ; ANDROID-LABEL: sub:
74 ; ANDROID:       # %bb.0: # %entry
75 ; ANDROID-NEXT:    pushq %rax
76 ; ANDROID-NEXT:    callq __subtf3@PLT
77 ; ANDROID-NEXT:    popq %rax
78 ; ANDROID-NEXT:    retq
80 ; GNU-LABEL: sub:
81 ; GNU:       # %bb.0: # %entry
82 ; GNU-NEXT:    pushq %rax
83 ; GNU-NEXT:    callq __subtf3@PLT
84 ; GNU-NEXT:    popq %rax
85 ; GNU-NEXT:    retq
87 ; X86-LABEL: sub:
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
110 ; X86-NEXT:    retl $4
111 entry:
112   %sub = call fp128 @llvm.experimental.constrained.fsub.f128(fp128 %x, fp128 %y,  metadata !"round.dynamic", metadata !"fpexcept.strict") #0
113   ret fp128 %sub
116 define fp128 @mul(fp128 %x, fp128 %y) nounwind strictfp {
117 ; CHECK-LABEL: mul:
118 ; CHECK:       # %bb.0: # %entry
119 ; CHECK-NEXT:    pushq %rax
120 ; CHECK-NEXT:    callq __multf3@PLT
121 ; CHECK-NEXT:    popq %rax
122 ; CHECK-NEXT:    retq
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
129 ; ANDROID-NEXT:    retq
131 ; GNU-LABEL: mul:
132 ; GNU:       # %bb.0: # %entry
133 ; GNU-NEXT:    pushq %rax
134 ; GNU-NEXT:    callq __multf3@PLT
135 ; GNU-NEXT:    popq %rax
136 ; GNU-NEXT:    retq
138 ; X86-LABEL: mul:
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
161 ; X86-NEXT:    retl $4
162 entry:
163   %mul = call fp128 @llvm.experimental.constrained.fmul.f128(fp128 %x, fp128 %y,  metadata !"round.dynamic", metadata !"fpexcept.strict") #0
164   ret fp128 %mul
167 define fp128 @div(fp128 %x, fp128 %y) nounwind strictfp {
168 ; CHECK-LABEL: div:
169 ; CHECK:       # %bb.0: # %entry
170 ; CHECK-NEXT:    pushq %rax
171 ; CHECK-NEXT:    callq __divtf3@PLT
172 ; CHECK-NEXT:    popq %rax
173 ; CHECK-NEXT:    retq
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
180 ; ANDROID-NEXT:    retq
182 ; GNU-LABEL: div:
183 ; GNU:       # %bb.0: # %entry
184 ; GNU-NEXT:    pushq %rax
185 ; GNU-NEXT:    callq __divtf3@PLT
186 ; GNU-NEXT:    popq %rax
187 ; GNU-NEXT:    retq
189 ; X86-LABEL: div:
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
212 ; X86-NEXT:    retl $4
213 entry:
214   %div = call fp128 @llvm.experimental.constrained.fdiv.f128(fp128 %x, fp128 %y,  metadata !"round.dynamic", metadata !"fpexcept.strict") #0
215   ret fp128 %div
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
224 ; ANDROID-NEXT:    retq
226 ; GNU-LABEL: fma:
227 ; GNU:       # %bb.0: # %entry
228 ; GNU-NEXT:    pushq %rax
229 ; GNU-NEXT:    callq fmaf128@PLT
230 ; GNU-NEXT:    popq %rax
231 ; GNU-NEXT:    retq
233 ; X86-LABEL: fma:
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
260 ; X86-NEXT:    retl $4
261 entry:
262   %fma = call fp128 @llvm.experimental.constrained.fma.f128(fp128 %x, fp128 %y,  fp128 %z, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
263   ret fp128 %fma
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
272 ; ANDROID-NEXT:    retq
274 ; GNU-LABEL: frem:
275 ; GNU:       # %bb.0: # %entry
276 ; GNU-NEXT:    pushq %rax
277 ; GNU-NEXT:    callq fmodf128@PLT
278 ; GNU-NEXT:    popq %rax
279 ; GNU-NEXT:    retq
281 ; X86-LABEL: frem:
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
304 ; X86-NEXT:    retl $4
305 entry:
306   %div = call fp128 @llvm.experimental.constrained.frem.f128(fp128 %x, fp128 %y,  metadata !"round.dynamic", metadata !"fpexcept.strict") #0
307   ret fp128 %div
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
316 ; ANDROID-NEXT:    retq
318 ; GNU-LABEL: ceil:
319 ; GNU:       # %bb.0: # %entry
320 ; GNU-NEXT:    pushq %rax
321 ; GNU-NEXT:    callq ceilf128@PLT
322 ; GNU-NEXT:    popq %rax
323 ; GNU-NEXT:    retq
325 ; X86-LABEL: ceil:
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
344 ; X86-NEXT:    retl $4
345 entry:
346   %ceil = call fp128 @llvm.experimental.constrained.ceil.f128(fp128 %x, metadata !"fpexcept.strict") #0
347   ret fp128 %ceil
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
356 ; ANDROID-NEXT:    retq
358 ; GNU-LABEL: acos:
359 ; GNU:       # %bb.0: # %entry
360 ; GNU-NEXT:    pushq %rax
361 ; GNU-NEXT:    callq acosf128@PLT
362 ; GNU-NEXT:    popq %rax
363 ; GNU-NEXT:    retq
365 ; X86-LABEL: acos:
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
384 ; X86-NEXT:    retl $4
385 entry:
386   %acos = call fp128 @llvm.experimental.constrained.acos.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
387   ret fp128 %acos
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
396 ; ANDROID-NEXT:    retq
398 ; GNU-LABEL: cos:
399 ; GNU:       # %bb.0: # %entry
400 ; GNU-NEXT:    pushq %rax
401 ; GNU-NEXT:    callq cosf128@PLT
402 ; GNU-NEXT:    popq %rax
403 ; GNU-NEXT:    retq
405 ; X86-LABEL: cos:
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
424 ; X86-NEXT:    retl $4
425 entry:
426   %cos = call fp128 @llvm.experimental.constrained.cos.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
427   ret fp128 %cos
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
436 ; ANDROID-NEXT:    retq
438 ; GNU-LABEL: cosh:
439 ; GNU:       # %bb.0: # %entry
440 ; GNU-NEXT:    pushq %rax
441 ; GNU-NEXT:    callq coshf128@PLT
442 ; GNU-NEXT:    popq %rax
443 ; GNU-NEXT:    retq
445 ; X86-LABEL: cosh:
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
464 ; X86-NEXT:    retl $4
465 entry:
466   %cosh = call fp128 @llvm.experimental.constrained.cosh.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
467   ret fp128 %cosh
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
476 ; ANDROID-NEXT:    retq
478 ; GNU-LABEL: exp:
479 ; GNU:       # %bb.0: # %entry
480 ; GNU-NEXT:    pushq %rax
481 ; GNU-NEXT:    callq expf128@PLT
482 ; GNU-NEXT:    popq %rax
483 ; GNU-NEXT:    retq
485 ; X86-LABEL: exp:
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
504 ; X86-NEXT:    retl $4
505 entry:
506   %exp = call fp128 @llvm.experimental.constrained.exp.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
507   ret fp128 %exp
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
516 ; ANDROID-NEXT:    retq
518 ; GNU-LABEL: exp2:
519 ; GNU:       # %bb.0: # %entry
520 ; GNU-NEXT:    pushq %rax
521 ; GNU-NEXT:    callq exp2f128@PLT
522 ; GNU-NEXT:    popq %rax
523 ; GNU-NEXT:    retq
525 ; X86-LABEL: exp2:
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
544 ; X86-NEXT:    retl $4
545 entry:
546   %exp2 = call fp128 @llvm.experimental.constrained.exp2.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
547   ret fp128 %exp2
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
556 ; ANDROID-NEXT:    retq
558 ; GNU-LABEL: floor:
559 ; GNU:       # %bb.0: # %entry
560 ; GNU-NEXT:    pushq %rax
561 ; GNU-NEXT:    callq floorf128@PLT
562 ; GNU-NEXT:    popq %rax
563 ; GNU-NEXT:    retq
565 ; X86-LABEL: floor:
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
584 ; X86-NEXT:    retl $4
585 entry:
586   %floor = call fp128 @llvm.experimental.constrained.floor.f128(fp128 %x, metadata !"fpexcept.strict") #0
587   ret fp128 %floor
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
596 ; ANDROID-NEXT:    retq
598 ; GNU-LABEL: log:
599 ; GNU:       # %bb.0: # %entry
600 ; GNU-NEXT:    pushq %rax
601 ; GNU-NEXT:    callq logf128@PLT
602 ; GNU-NEXT:    popq %rax
603 ; GNU-NEXT:    retq
605 ; X86-LABEL: log:
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
624 ; X86-NEXT:    retl $4
625 entry:
626   %log = call fp128 @llvm.experimental.constrained.log.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
627   ret fp128 %log
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
636 ; ANDROID-NEXT:    retq
638 ; GNU-LABEL: log10:
639 ; GNU:       # %bb.0: # %entry
640 ; GNU-NEXT:    pushq %rax
641 ; GNU-NEXT:    callq log10f128@PLT
642 ; GNU-NEXT:    popq %rax
643 ; GNU-NEXT:    retq
645 ; X86-LABEL: log10:
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
664 ; X86-NEXT:    retl $4
665 entry:
666   %log10 = call fp128 @llvm.experimental.constrained.log10.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
667   ret fp128 %log10
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
676 ; ANDROID-NEXT:    retq
678 ; GNU-LABEL: log2:
679 ; GNU:       # %bb.0: # %entry
680 ; GNU-NEXT:    pushq %rax
681 ; GNU-NEXT:    callq log2f128@PLT
682 ; GNU-NEXT:    popq %rax
683 ; GNU-NEXT:    retq
685 ; X86-LABEL: log2:
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
704 ; X86-NEXT:    retl $4
705 entry:
706   %log2 = call fp128 @llvm.experimental.constrained.log2.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
707   ret fp128 %log2
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
716 ; ANDROID-NEXT:    retq
718 ; GNU-LABEL: maxnum:
719 ; GNU:       # %bb.0: # %entry
720 ; GNU-NEXT:    pushq %rax
721 ; GNU-NEXT:    callq fmaxf128@PLT
722 ; GNU-NEXT:    popq %rax
723 ; GNU-NEXT:    retq
725 ; X86-LABEL: maxnum:
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
748 ; X86-NEXT:    retl $4
749 entry:
750   %maxnum = call fp128 @llvm.experimental.constrained.maxnum.f128(fp128 %x, fp128 %y, metadata !"fpexcept.strict") #0
751   ret fp128 %maxnum
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
760 ; ANDROID-NEXT:    retq
762 ; GNU-LABEL: minnum:
763 ; GNU:       # %bb.0: # %entry
764 ; GNU-NEXT:    pushq %rax
765 ; GNU-NEXT:    callq fminf128@PLT
766 ; GNU-NEXT:    popq %rax
767 ; GNU-NEXT:    retq
769 ; X86-LABEL: minnum:
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
792 ; X86-NEXT:    retl $4
793 entry:
794   %minnum = call fp128 @llvm.experimental.constrained.minnum.f128(fp128 %x, fp128 %y, metadata !"fpexcept.strict") #0
795   ret fp128 %minnum
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
804 ; ANDROID-NEXT:    retq
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
811 ; GNU-NEXT:    retq
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
832 ; X86-NEXT:    retl $4
833 entry:
834   %nearbyint = call fp128 @llvm.experimental.constrained.nearbyint.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
835   ret fp128 %nearbyint
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
844 ; ANDROID-NEXT:    retq
846 ; GNU-LABEL: pow:
847 ; GNU:       # %bb.0: # %entry
848 ; GNU-NEXT:    pushq %rax
849 ; GNU-NEXT:    callq powf128@PLT
850 ; GNU-NEXT:    popq %rax
851 ; GNU-NEXT:    retq
853 ; X86-LABEL: pow:
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
876 ; X86-NEXT:    retl $4
877 entry:
878   %pow = call fp128 @llvm.experimental.constrained.pow.f128(fp128 %x, fp128 %y, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
879   ret fp128 %pow
882 define fp128 @powi(fp128 %x, i32 %y) nounwind strictfp {
883 ; CHECK-LABEL: powi:
884 ; CHECK:       # %bb.0: # %entry
885 ; CHECK-NEXT:    pushq %rax
886 ; CHECK-NEXT:    callq __powitf2@PLT
887 ; CHECK-NEXT:    popq %rax
888 ; CHECK-NEXT:    retq
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
895 ; ANDROID-NEXT:    retq
897 ; GNU-LABEL: powi:
898 ; GNU:       # %bb.0: # %entry
899 ; GNU-NEXT:    pushq %rax
900 ; GNU-NEXT:    callq __powitf2@PLT
901 ; GNU-NEXT:    popq %rax
902 ; GNU-NEXT:    retq
904 ; X86-LABEL: powi:
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
924 ; X86-NEXT:    retl $4
925 entry:
926   %powi = call fp128 @llvm.experimental.constrained.powi.f128(fp128 %x, i32 %y, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
927   ret fp128 %powi
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
936 ; ANDROID-NEXT:    retq
938 ; GNU-LABEL: rint:
939 ; GNU:       # %bb.0: # %entry
940 ; GNU-NEXT:    pushq %rax
941 ; GNU-NEXT:    callq rintf128@PLT
942 ; GNU-NEXT:    popq %rax
943 ; GNU-NEXT:    retq
945 ; X86-LABEL: rint:
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
964 ; X86-NEXT:    retl $4
965 entry:
966   %rint = call fp128 @llvm.experimental.constrained.rint.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
967   ret fp128 %rint
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
976 ; ANDROID-NEXT:    retq
978 ; GNU-LABEL: round:
979 ; GNU:       # %bb.0: # %entry
980 ; GNU-NEXT:    pushq %rax
981 ; GNU-NEXT:    callq roundf128@PLT
982 ; GNU-NEXT:    popq %rax
983 ; GNU-NEXT:    retq
985 ; X86-LABEL: round:
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
1004 ; X86-NEXT:    retl $4
1005 entry:
1006   %round = call fp128 @llvm.experimental.constrained.round.f128(fp128 %x, metadata !"fpexcept.strict") #0
1007   ret fp128 %round
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
1023 ; GNU-NEXT:    retq
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
1044 ; X86-NEXT:    retl $4
1045 entry:
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
1058 ; GNU-LABEL: asin:
1059 ; GNU:       # %bb.0: # %entry
1060 ; GNU-NEXT:    pushq %rax
1061 ; GNU-NEXT:    callq asinf128@PLT
1062 ; GNU-NEXT:    popq %rax
1063 ; GNU-NEXT:    retq
1065 ; X86-LABEL: asin:
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
1084 ; X86-NEXT:    retl $4
1085 entry:
1086   %asin = call fp128 @llvm.experimental.constrained.asin.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
1087   ret fp128 %asin
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
1098 ; GNU-LABEL: sin:
1099 ; GNU:       # %bb.0: # %entry
1100 ; GNU-NEXT:    pushq %rax
1101 ; GNU-NEXT:    callq sinf128@PLT
1102 ; GNU-NEXT:    popq %rax
1103 ; GNU-NEXT:    retq
1105 ; X86-LABEL: sin:
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
1124 ; X86-NEXT:    retl $4
1125 entry:
1126   %sin = call fp128 @llvm.experimental.constrained.sin.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
1127   ret fp128 %sin
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
1138 ; GNU-LABEL: sinh:
1139 ; GNU:       # %bb.0: # %entry
1140 ; GNU-NEXT:    pushq %rax
1141 ; GNU-NEXT:    callq sinhf128@PLT
1142 ; GNU-NEXT:    popq %rax
1143 ; GNU-NEXT:    retq
1145 ; X86-LABEL: sinh:
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
1164 ; X86-NEXT:    retl $4
1165 entry:
1166   %sinh = call fp128 @llvm.experimental.constrained.sinh.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
1167   ret fp128 %sinh
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
1178 ; GNU-LABEL: sqrt:
1179 ; GNU:       # %bb.0: # %entry
1180 ; GNU-NEXT:    pushq %rax
1181 ; GNU-NEXT:    callq sqrtf128@PLT
1182 ; GNU-NEXT:    popq %rax
1183 ; GNU-NEXT:    retq
1185 ; X86-LABEL: sqrt:
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
1204 ; X86-NEXT:    retl $4
1205 entry:
1206   %sqrt = call fp128 @llvm.experimental.constrained.sqrt.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
1207   ret fp128 %sqrt
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
1218 ; GNU-LABEL: atan:
1219 ; GNU:       # %bb.0: # %entry
1220 ; GNU-NEXT:    pushq %rax
1221 ; GNU-NEXT:    callq atanf128@PLT
1222 ; GNU-NEXT:    popq %rax
1223 ; GNU-NEXT:    retq
1225 ; X86-LABEL: atan:
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
1244 ; X86-NEXT:    retl $4
1245 entry:
1246   %atan = call fp128 @llvm.experimental.constrained.atan.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
1247   ret fp128 %atan
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
1258 ; GNU-LABEL: atan2:
1259 ; GNU:       # %bb.0: # %entry
1260 ; GNU-NEXT:    pushq %rax
1261 ; GNU-NEXT:    callq atan2f128@PLT
1262 ; GNU-NEXT:    popq %rax
1263 ; GNU-NEXT:    retq
1265 ; X86-LABEL: atan2:
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
1288 ; X86-NEXT:    retl $4
1289 entry:
1290   %atan2 = call fp128 @llvm.experimental.constrained.atan2.f128(fp128 %x, fp128 %y, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
1291   ret fp128 %atan2
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
1302 ; GNU-LABEL: tan:
1303 ; GNU:       # %bb.0: # %entry
1304 ; GNU-NEXT:    pushq %rax
1305 ; GNU-NEXT:    callq tanf128@PLT
1306 ; GNU-NEXT:    popq %rax
1307 ; GNU-NEXT:    retq
1309 ; X86-LABEL: tan:
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
1328 ; X86-NEXT:    retl $4
1329 entry:
1330   %tan = call fp128 @llvm.experimental.constrained.tan.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
1331   ret fp128 %tan
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
1342 ; GNU-LABEL: tanh:
1343 ; GNU:       # %bb.0: # %entry
1344 ; GNU-NEXT:    pushq %rax
1345 ; GNU-NEXT:    callq tanhf128@PLT
1346 ; GNU-NEXT:    popq %rax
1347 ; GNU-NEXT:    retq
1349 ; X86-LABEL: tanh:
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
1368 ; X86-NEXT:    retl $4
1369 entry:
1370   %tanh = call fp128 @llvm.experimental.constrained.tanh.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
1371   ret fp128 %tanh
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
1382 ; GNU-LABEL: trunc:
1383 ; GNU:       # %bb.0: # %entry
1384 ; GNU-NEXT:    pushq %rax
1385 ; GNU-NEXT:    callq truncf128@PLT
1386 ; GNU-NEXT:    popq %rax
1387 ; GNU-NEXT:    retq
1389 ; X86-LABEL: trunc:
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
1408 ; X86-NEXT:    retl $4
1409 entry:
1410   %trunc = call fp128 @llvm.experimental.constrained.trunc.f128(fp128 %x, metadata !"fpexcept.strict") #0
1411   ret fp128 %trunc
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
1422 ; GNU-LABEL: lrint:
1423 ; GNU:       # %bb.0: # %entry
1424 ; GNU-NEXT:    pushq %rax
1425 ; GNU-NEXT:    callq lrintf128@PLT
1426 ; GNU-NEXT:    popq %rcx
1427 ; GNU-NEXT:    retq
1429 ; X86-LABEL: lrint:
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
1438 ; X86-NEXT:    retl
1439 entry:
1440   %rint = call i32 @llvm.experimental.constrained.lrint.i32.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
1441   ret i32 %rint
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
1457 ; GNU-NEXT:    retq
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
1468 ; X86-NEXT:    retl
1469 entry:
1470   %rint = call i64 @llvm.experimental.constrained.llrint.i64.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
1471   ret i64 %rint
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
1487 ; GNU-NEXT:    retq
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
1498 ; X86-NEXT:    retl
1499 entry:
1500   %round = call i32 @llvm.experimental.constrained.lround.i32.f128(fp128 %x, metadata !"fpexcept.strict") #0
1501   ret i32 %round
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
1517 ; GNU-NEXT:    retq
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
1528 ; X86-NEXT:    retl
1529 entry:
1530   %round = call i64 @llvm.experimental.constrained.llround.i64.f128(fp128 %x, metadata !"fpexcept.strict") #0
1531   ret i64 %round
1534 define i64 @cmp(i64 %a, i64 %b, fp128 %x, fp128 %y) #0 {
1535 ; CHECK-LABEL: cmp:
1536 ; CHECK:       # %bb.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
1549 ; CHECK-NEXT:    retq
1551 ; ANDROID-LABEL: cmp:
1552 ; ANDROID:       # %bb.0:
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
1567 ; GNU-LABEL: cmp:
1568 ; GNU:       # %bb.0:
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
1581 ; GNU-NEXT:    retq
1583 ; X86-LABEL: cmp:
1584 ; X86:       # %bb.0:
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
1603 ; X86-NEXT:    retl
1604   %cond = call i1 @llvm.experimental.constrained.fcmp.f128(
1605                                                fp128 %x, fp128 %y,
1606                                                metadata !"oeq",
1607                                                metadata !"fpexcept.strict") #0
1608   %res = select i1 %cond, i64 %a, i64 %b
1609   ret i64 %res
1612 define i64 @cmps(i64 %a, i64 %b, fp128 %x, fp128 %y) #0 {
1613 ; CHECK-LABEL: cmps:
1614 ; CHECK:       # %bb.0:
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
1627 ; CHECK-NEXT:    retq
1629 ; ANDROID-LABEL: cmps:
1630 ; ANDROID:       # %bb.0:
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
1645 ; GNU-LABEL: cmps:
1646 ; GNU:       # %bb.0:
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
1659 ; GNU-NEXT:    retq
1661 ; X86-LABEL: cmps:
1662 ; X86:       # %bb.0:
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
1681 ; X86-NEXT:    retl
1682   %cond = call i1 @llvm.experimental.constrained.fcmps.f128(
1683                                                fp128 %x, fp128 %y,
1684                                                metadata !"oeq",
1685                                                metadata !"fpexcept.strict") #0
1686   %res = select i1 %cond, i64 %a, i64 %b
1687   ret i64 %res
1690 define i64 @cmp_ueq_q(i64 %a, i64 %b, fp128 %x, fp128 %y) #0 {
1691 ; CHECK-LABEL: cmp_ueq_q:
1692 ; CHECK:       # %bb.0:
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
1716 ; CHECK-NEXT:    retq
1718 ; ANDROID-LABEL: cmp_ueq_q:
1719 ; ANDROID:       # %bb.0:
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:
1746 ; GNU:       # %bb.0:
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
1770 ; GNU-NEXT:    retq
1772 ; X86-LABEL: cmp_ueq_q:
1773 ; X86:       # %bb.0:
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
1817 ; X86-NEXT:    retl
1818   %cond = call i1 @llvm.experimental.constrained.fcmp.f128(
1819                                                fp128 %x, fp128 %y,
1820                                                metadata !"ueq",
1821                                                metadata !"fpexcept.strict") #0
1822   %res = select i1 %cond, i64 %a, i64 %b
1823   ret i64 %res
1826 define i64 @cmp_one_q(i64 %a, i64 %b, fp128 %x, fp128 %y) #0 {
1827 ; CHECK-LABEL: cmp_one_q:
1828 ; CHECK:       # %bb.0:
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
1852 ; CHECK-NEXT:    retq
1854 ; ANDROID-LABEL: cmp_one_q:
1855 ; ANDROID:       # %bb.0:
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:
1882 ; GNU:       # %bb.0:
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
1906 ; GNU-NEXT:    retq
1908 ; X86-LABEL: cmp_one_q:
1909 ; X86:       # %bb.0:
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
1953 ; X86-NEXT:    retl
1954   %cond = call i1 @llvm.experimental.constrained.fcmp.f128(
1955                                                fp128 %x, fp128 %y,
1956                                                metadata !"one",
1957                                                metadata !"fpexcept.strict") #0
1958   %res = select i1 %cond, i64 %a, i64 %b
1959   ret i64 %res
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)